ICS is a network-level mechanism to create clusters of nodes, and these clusters are created on-demand,
based on the Network Context associated with the interaction participants to form an agreement.
ICS locks the Network Context associated with the interaction participants by including a majority of the
nodes associated with the given wallet(s) in its cluster.
The majority (meaning two-thirds and above), if not all the eligible nodes, are added to an ICS cluster.
Apart from the eligible nodes, the ICS also consists of random nodes that are not part of the Network
Context of the sender/receiver accounts.
In summary, ICS is a weighted cluster of 1/3rd of eligible nodes, and 2/3rd of random nodes, and an
additional 10% of observer nodes. This concept is further formalized in the ICS creation section. But first,
let us understand the roles of each node in the ICS:
, where XO is the observer co-efficient which sets the minimum percentage of observer nodes to be part of the ICS,
say 10%. Over time when the network matures, the observer co-efficient value will be subjected to changes through
governance proposals.
In this section, we understand what measures are taken by MOI, in the case where the total number of
nodes currently in the ICS does not fulfill the MTQ conditions.
Adjustments for enforcing correctness
The Adjusted MTQ Size,MTQadjusted=min(MTQuser,MTQmax)And, Adjusted ICS Length,FLJ=max(MTQmin∗σ,MTQadjusted∗σ)
, where MTQUser is the user-chosen MTQ size, MTQmax is the maximum MTQ size set by the protocol,
MTQmin is the minimum MTQ size also set by the protocol.
NowFfinal=Fact∪R’Where,R’∈/{Fact}AND R’⊂K
, where R’ is the adjusted node set for min, max, and user-specific MTQ sizes, randomly selected from
the network.
Cardinality criteria for ICS adjustment condition
Final ICS length,FLN=n(Ffinal)=n(Fact∪R’)Such thatn(R’)>0AND n(R’)=FLJ–FLA
For a better understanding of these conditions, let us consider an example. Let us assume that an
interaction enters the MOI network that transfers some MOI tokens from wallet S (the Sender who signed
the interaction) to wallet R (the receiver of the MOI tokens).
Let us also assume that the MOI network has 100 nodes, and the minimum MTQ size was set to 10%,
meaning that the interaction must be validated in an ICS of 10 or more nodes. Let us also assume that the
maximum MTQ size was set to 30%, meaning that the interaction must be validated in an ICS of 30 or
fewer nodes. Let us also assume that user S has specified that a minimum of 10% of the network should
be present in the ICS which is basically user MTQ.
Let us assume that F denotes the set of all the 10 or more nodes that join the ICS to settle the interaction.
As explained, ICS is made of eligible nodes, random nodes, and observer nodes denoted as:
F=FE∪FR∪FB
, where FE is the set representing the eligible nodes belonging to the context of sender S, receiver R, and generator node G. This is denoted as:
FE=ES∪ER∪EG
, where ES represents the context nodes of wallet S, denoted as follows:
ES={αS∪βS∪ƔS}AssumeES={N1,N2}
, where ER represents the context nodes of wallet R, denoted as follows:
ER={αR∪βR∪ƔR}AssumeER={N2,N3}
, where EG represents the context nodes of generator node G, denoted as follows:
EG={αG∪βG∪ƔG}AssumeEG={N3}
Now, we know that FE is made up of nodes N1, N2, and N3.
So,FE={N1,N2,N3}
As per the rules of ICS, random nodes must be at least twice the size of eligible nodes. So, let us assume:
FR=2∗n(FE)={N4,N5,N6,N7,N8,N9}
Let us assume that the MOI network requires few more nodes that make up the observer nodes in the
ICS. These observer nodes are represented as:
FB=Xo∗FE
, where XO is observer co-efficient marking the percentage or weight of observer nodes in the ICS.
Let us assume that the MOI network requires 10% more nodes to behave as observer nodes. Let us assume
the following:
FB={N10},whereXO=10%
, meaning 1 more node was required to join the ICS as an observer node to satisfy the condition.
Now, the complete ICS set F is represented as follows:
F=FE∪FR∪FB={N1,N2,…N10}Now, we understand actual ICS size isn(F)=10,Adjusted MTQ Size,MTQadjusted=min(MTQuser,MTQmax)=min(10,30)=10,Adjusted ICS length=max(MTQmin∗σ,MTQadjusted∗σ)=max(10,10)=10,Since deficit is zero,R’={},andn(R’)=0,Now, Final ICS length=n(Ffinal)=n(Fact∪R’)=10+0=10.
Operator node Ni extracts the wallets associated with the Interaction
Node Ni queries the Super State Manager (SSM) to identify all the nodes associated with the
interaction participants
SSM queries the latest context hash of the interaction participants and returns a list of eligible
nodes, random nodes, and also the observer nodes
Node Ni will send ICS_Request messages to all the eligible nodes of the sender, receiver and sets
the occupancy state to busy
Node Nj on receiving the ICS_Request, verifies current state, context hash, and proof of binary hash sent by node Ni with its own context hash and binary hash. If both context hashes are the
same and the occupancy state is free, then Nj responds with the ICS_Response message and starts the timer while setting its occupancy state to busy (It also performs various checks in the
background to overcome attacks which are outlined in the Attack Vectors section)
On receiving ICS_Response messages, if the majority of the eligible set responded and if ICS
conditions are met, the operator node then elects a leader/generator node from one of the joined
nodes, as per the leader election criteria in the PoXt algorithm
Once the leader/generator node is elected, the operator node now queries the SSM for the
context nodes of the Generator and sends the ICS_Request to these nodes as well as the random
nodes and the observer nodes returned by SSM in step 3
On receiving the ICS_Response message from a majority of nodes in each set, the Operator again
checks for the Quorum conditions. If all conditions are meet it publishes an ICS_Success message
and starts the PoXt consensus service in Ni
If Node Nj receives the ICS_Success message before the timeout, it verifies the validator set,
elected leader, and also starts the PoXt consensus service
Once the ICS is formed successfully, the elected leader (i.e., Generator node) will execute the
interaction, propose the tesseract, and achieves consensus based on the PoXt consensus
algorithm
The message formats for the above algorithm can be found in the code snippet below:
type ICS_Request struct{ Ics_ID string ContextHash [][]byte PoBHash []byte ParticipantAddress []Address } type ICS_Response struct{ Ics_ID string Status string } type ICS_Success struct{ Ics_ID string ValidatorSet []Address LeaderAddress Address } type ICS_Dismiss struct{ Ics_ID string Msg string }
Where, each attribute is defined as follows:
ICS_ID: is a hex-encoded string of a 256-bit hash of sender and receiver address
ValidatorSet: it is a list of MOI Node Ids which are participating in this ICS
LeaderAddress: A 256-bit address of the Node which serves as a leader for this respective ICS
Status: A Boolean value that denotes the availability of the node which received the ICS request
ParticipantAddress: A list of interaction participant addresses i.e., sender, and receiver address
PoBHash: A 256-bit hash of the binary which the operator is running
ContextHash: Latest context hash of both interaction participants
Msg: The arbitrary messages sent among nodes in the ICS
Once the final ICS is formed Modulated Trust Engine will achieve finality of the interaction state transitions using Proof of Context (PoXt) consensus algorithm locally, while persisting the state transitions globally.