Core concepts
Six ideas. Everything else in these docs is built from them.
Group
A set of node operators that jointly hold keys for one application, plus the configuration that governs them — the threshold, the trusted issuers, the authorization keys, the removal timelock. A group is a contract on-chain, and it is the source of truth: every node reads its own membership and policy from the chain rather than from anything an operator told it.
Threshold
The minimum number of operators that must contribute for a signature to exist. In a 3-of-5 group, any three suffice, two can be offline, and an attacker needs three simultaneously — in three different companies, in three different failure domains. The threshold and the group size are yours to set, and yours to change.
Threshold means the same thing everywhere here
Key
A public key whose private counterpart has never existed anywhere. It was constructed in pieces by a distributed key generation round, and each operator holds one share. Keys are identified by a key ID scoped to the group; a key ID under a different curve is a different key.
Session
Before a principal can ask for a signature it opens a session: it proves an identity once, and the nodes bind that identity to an ephemeral public key. Every subsequent request is signed by the matching private key. This is what keeps a replayable credential — a JWT, a password — from being sent to the network on every call.
Scope
An optional constraint stored with a key that restricts what it may sign. A scoped key refuses raw hashes; the caller must present a structured payload, and every operator independently re-derives the constraint and checks it before contributing a share.
- EIP-712 domain and type — chain, verifying contract, and the exact typed data method. A key that can sign
TransferWithAuthorizationon one contract cannot signpermiton the same one. - EVM UserOperation — bound to one entry point, chain, and account.
- Solana transaction — bound to one wallet authority.
Reshare
Regenerating every operator’s share of every key, without changing any public key or address. This is what makes the operator set genuinely mutable: you can add, remove, or replace operators and refresh the shares afterwards, and nothing your users hold has to migrate. Old shares stop being useful, which also makes reshare a reasonable scheduled hygiene operation.
How they compose
A user signs in and opens a session. Your app asks for a key, which the group generates in shares. To sign, a threshold of operators each verify the session and the key’s scope, then contribute. If an operator has to go, you remove it and reshare — and your users never notice.