Multi Party Computation (MPC) module is a part of Sequencer node and is responsible for the management of the entire life-cycle of the multisignature keys. Conducts external operations such as:
- Multisig generation
- Key resharing
- Applying the signature
- Deletion of signature
- Provides support for the asynchronous usage of many multisignatures
keyGen
process flow
Phase 1: Notifying MPC Nodes to Prepare
- Generate a random
sessionID
locally; - Broadcast the
keyGenPrepare
message to all MPC nodes using the p2p network; - Upon receiving the
keyGenPrepare
message, each MPC node starts its processing goroutine; - Check the local data (the data means whether the TSS module has stored the mpc information corresponding to the id) based on the
keyId
; - If there is existing data in the
READY
state, return the data from storage directly. No need to proceed with thekeyGen
operation; - If there is existing data with a
PENDING
state, return an error to avoid inconsistencies in key generation due to concurrent execution of different key generation calls; - Establish a p2p communication channel;
- Return the
keyGenReady
message to the initiating node;
Phase 2: Initiating the keyGen
process
- The initiating node waits to receive
keyGenReady
messages from all nodes; - Once the initiating node receives
keyGenReady
messages from all nodes, it broadcasts thekeyGenStart
message to all MPC nodes using the p2p network; - Upon receiving the
keyGenStart
message, each MPC node:- Constructs a
LocalParty
instance locally; - Begins receiving information from other nodes;
- Constructs a
- In essence, the processing flow of
keySign
is similar tokeyGen
, with the difference lying in some data transmission and verification.. - On the other hand,
keyDelete
does not involve any TSS-lib operations. It only requires broadcasting theKeyDeleteMessage
message to all nodes to request the deletion of the key.
Threshold Signature Scheme Library - open-source multisig tool library and the main source of MPC logic:
- Responsible for the multisig key algorithm layer
- Conducts the saving and encrypting the key’s info in the local kv storage (levelDB) provided by the corresponding node
- The specific fields are described as follows:
keyId
: The unique identifier of the multi-signature key pair. Passed in by the consensus layer caller, it is guaranteed that only one key pair can be generated for the same keyID;keySsessionId
: The session id when the key is generated (keyGen), randomly generated. The module will ensure that the value is different every time it is called;data
: Key storage data, generated by tss-lib. It mainly includes: public key (address), private key fragmentation, and all partyIds participating in multi-signature. The specific data is in tss-libkeygen.LocalPartySaveData;status
: The status of the current key data, mainly consists of three types:PENDING
(processing)READY
(already available)ERROR
(An error occurred during generation, the current key cannot be used to sign)
Open-source p2p communication and consensus library provided by cosmos-sdk:
- POS Node creates a separate Tendermint channel for communication messages between multiple p2p nodes during MPC operations
ibp2p Is an open-source p2p network communication library
- MPC uses libp2p
inCommunication
messages between multiple different p2p nodes, supporting information transmission during MPC operation