IOI Service

Overview

To empower users, or organizations, interaction on the FinP2P node we are introduction the Indication of Interest (aka IOI) into the FinP2P protocol. IOI is a mechanism for users on to broad FinP2P network to show interest in engaging in a financial activity with another user over the FInP2P network, the IOI creates a base for users to express their interest in a flexible and extendable manner to accommodate for various finance operations, e.g. Secondary Trading of a given Asset’s tokens or Collateralized loans to name a few.

Intents

Intents are a new Resource type (105) on the FinP2P protocol, they are managed by the Primary Node of the resource on which the intent is created upon and shared by that Node to other Nodes on the network, the Node may utilize a dedicated private ACL to control and limit the distribution of the intent across the network.

1 2 3 4 5 6 7 service IOIService { rpc CreateTransactionIntent (SignedTransactionIntentRequest) returns (SignedCreateTransactionIntentResponse) { } rpc UpdateTransactionIntent (SignedUpdateTransactionIntentRequest) returns (SignedUpdateTransactionIntentResponse) { } }

 

Model

Transaction Intent

The container model representing the common information related to any intent created, contains the unique intent resource id, intent status, start and end time of the intent offer in addition contains the base terms and instruction involving the asset and settlement terms and instruction.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 message TransactionIntent { common.ResourceID id = 1; int64 start = 2; int64 end = 3; IntentStatus status = 4; AssetTerm assetTerm = 5; AssetInstruction assetInstruction = 6; SettlementTerm settlementTerm = 7; uint64 remainingQuantity = 8; oneof intent { PrimarySale primarySale = 100; ... } } enum IntentStatus { Unknown = 0; Active = 1; NonActive = 2; }

Terms and Instructions

The terms and instruction models define the relevant assets which take part in the intent, Term indicate the Asset information, the Instruction indicate the relevant Asset’s account information,
Settlement Term indicate the expected Asset to be received as a settlement for the operation and provide the value of each unit, UnitValue may indicate an absolute value, percentage or even ratio.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 message AssetTerm { accounts.Asset asset = 1; uint64 amount = 2; } message AssetInstruction { accounts.Account account = 1; } message SettlementTerm { accounts.Asset asset = 1; UnitValue unitValue = 2; } message UnitValue { uint64 value = 1; int32 precision = 2; enum ValueType { AbsoluteValue = 0; Percentage = 1; } ValueType type = 3; }

Intent lifecycle management

Create Intent

Creation of an intent includes providing all required fields of the intent, including terms and instructions, the node should respond with the unique resource Id allocated to the intent

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 message SignedTransactionIntentRequest { CreateTransactionIntentRequest request = 1; common.Signature signature = 2; } message CreateTransactionIntentRequest { common.Envelope envelope = 1; CreateTransactionIntentRequestPayload payload = 2; } message CreateTransactionIntentRequestPayload { common.ResourceID assetId = 1; int64 start = 2; int64 end = 3; IntentStatus status = 4; AssetTerm assetTerm = 5; AssetInstruction assetInstruction = 6; SettlementTerm settlementTerm = 7; repeated string acl = 8; oneof intent { PrimarySale primarySale = 100; ... ... } } message SignedCreateTransactionIntentResponse { CreateTransactionIntentResponse response = 1; common.Signature signature = 2; } message CreateTransactionIntentResponse { common.Envelope envelope = 1; common.ResourceID intentId = 2; }

 

Update Intent

Updating intent allows to users or organization, in this phase, to change the intent status or start or end time, additional capabilities will be added in the future.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 message SignedUpdateTransactionIntentRequest { UpdateTransactionIntentRequest request = 1; common.Signature signature = 2; } message UpdateTransactionIntentRequest { common.Envelope envelope = 1; UpdateTransactionIntentRequestPayload payload = 2; } message UpdateTransactionIntentRequestPayload { common.ResourceID intentId = 1; int64 start = 2; int64 end = 3; IntentStatus status = 4; } message SignedUpdateTransactionIntentResponse { UpdateTransactionIntentResponse response = 1; common.Signature signature = 2; } message UpdateTransactionIntentResponse { common.Envelope envelope = 1; }