Components
| Component | Where it lives |
|---|---|
| FROST primitives (DKG, threshold signing, ceremony state machine) | aegis/aegis-keys/src/{threshold,recovery}.rs |
| On-chain types and transactions | node/sigil-core/src/recovery.rs |
| Executor and state transitions | node/sigil-node/src/executor_recovery.rs |
| Wallet UX | First-party SDK + future hardware-wallet integrations |
Why 30 days
The 30-day default timelock balances guardian compromise risk against operator inconvenience. Shorter timelocks (e.g. 7 days) leave too little window to detect malicious guardian collusion. The default is configurable per registration; operators that need shorter windows for service accounts can set the timelock to as short as 24 hours, but the default for human users is 30 days.Transactions
| Variant | Purpose |
|---|---|
RegisterRecovery | Register a guardian group, threshold, panic-key pubkey, and timelock. |
UpdateRecovery | Update guardian membership or threshold (requires guardian signatures). |
InitiateRecovery | Start a recovery with the guardian threshold signature. Starts the timelock. |
AbortRecovery | Cancel a recovery using the pre-registered panic key. |
FinalizeRecovery | After timelock expiry, rotate the DID’s signing key to the new public key. |
Recovery state
Address stability
Because Sigil derives addresses from DIDs (not from public keys), recovery rotates the signing key while leaving the address unchanged. Balances, NFTs, mailbox capabilities, mandates, and every other state reference stay intact. The DID’s signing material is updated; nothing else moves.Guardian dynamics
- Guardian membership is mutable through
UpdateRecoverysigned by the existing threshold. Adding or removing a guardian requires the current threshold to approve. - A revoked guardian’s DID record is checked at recovery initiation; revoked guardians cannot participate in a recovery signature.
- Guardians can themselves be MHRs operating under their own FROST thresholds.
Panic abort
The panic key is registered alongside the guardian group. During the 30-day timelock, a single signature from the panic key cancels the in-progress recovery. The panic key:- Should be held in a different medium than the primary signing key (paper, safe-deposit box, separate hardware wallet).
- Has no other authority. It cannot sign transfers, register mandates, or initiate transactions other than
AbortRecovery.
Registered and the guardian group is flagged for review.
Multi-human roots
Formhr DIDs, recovery is rarely needed — the FROST threshold is itself a redundancy mechanism. When a participant loses their share, the remaining t participants can authorise a DKG refresh through UpdateRecovery.
RPC
| Method | Returns |
|---|---|
sigil_getRecoveryRegistration | The registered recovery group for a DID. |
sigil_getRecoveryStatus | The current recovery state. |
sigil_getRecoveryGuardians | The guardian list (also accessible via the registration record). |
Implementation
- FROST primitives:
aegis/aegis-keys/src/{threshold,recovery}.rs. - On-chain types:
node/sigil-core/src/recovery.rs. - Executor:
node/sigil-node/src/executor_recovery.rs.
See also
- Set up social recovery — end-to-end recipe.
- Identity & lineage — address stability under key rotation.
- Cryptography — FROST threshold signatures.