We need a pallet to manage the TSS system and to give an interface for payload signature request by users + signed payload delivery by TSS nodes.
WIP architecture:
type Payload = Vec<u8>;
config {
MinimumParticipants: u32;
}
storages {
SignatureRequests: Hash -> Payload;
CurrentNodes: AccountId32 -> EcdsaPubKey;
}
offchain worker {
// get offchain storage of signature requests
// if different from current storage, set to new one
// get offchain storage of requests already being processed
// if any new request not in processing storage, begin tss process
// if any finished request still in onchain requests storage then submit deliver_signed_payload call
}
calls {
request_signature(payload: Payload); // Submitted by user
deliver_signed_payload(hash: Hash, signature: Signature); // Submitted by one of the TSS nodes
set_participants_and_threshold(threshold: u32, participants: Vec<Participant>) // Root-only call
}
There has to be an automated way to signal a new node entering the set and a way to kick out nodes inactive for too long.
We need a pallet to manage the TSS system and to give an interface for payload signature request by users + signed payload delivery by TSS nodes.
WIP architecture:
There has to be an automated way to signal a new node entering the set and a way to kick out nodes inactive for too long.