Skip to main content
Restore a self-hosted MPC signer that was lost along with its key-share database, when point-in-time recovery (PITR) and database snapshots cannot bring the database back. You rebuild the signer and restore its key shares from the Layer 3 backup. This applies to self-hosted deployments where you run the signer’s database and backup bucket. On DFNS Cloud, DFNS handles recovery for you.

What Layer 3 is

Each time a signer creates a key share, it writes the same encrypted bytes to two places: its database and your Layer 3 backup bucket. The backup is an exact copy of the encrypted rows. Recovery copies those shares back into a fresh database. They stay encrypted throughout, so no key material is ever exposed.
The backup holds the encrypted shares, not the key that decrypts them. That key is the signer’s Core Keys Pack, stored in AWS Secrets Manager, separate from the database.If the Core Keys Pack is also lost, restore it from its backup first. Without it the shares cannot be decrypted, and you must recover through Layer 4 instead.

Recovery procedure

1

Confirm the Core Keys Pack is intact

The signer needs its Core Keys Pack to decrypt the restored shares. Confirm the secret still exists before you start:
If it is present, continue. You do not need to open or export it, only confirm it exists.If it is gone, restore it from backup first. If you have no backup, use Layer 4 instead.
2

Redeploy the missing signer

Redeploy the missing signer using your normal MPC signer deployment process. Contact our if you need help with this step.
The new signer must reuse the original Core Keys Pack: point it at the same core-keys secret as before (Step 1), so it loads its original keys instead of generating new ones.
The new signer comes up with its original identity and an empty database, ready to restore the shares into.
3

Grant the recovery role read access

The backup bucket is write-only, so grant your recovery role read access for the restore:
4

Download the shares

Download every object under your signer’s prefix to local files. Each object’s name is a key_id and its body is the encrypted share.
5

Remove the recovery role's read access

With the shares downloaded, remove the read access so the bucket is write-only again:
6

Insert the shares into the database

Insert the shares into key_shares, connected as the signer’s own login role.
Connect as the signer’s login role, not a superuser. Row-level security ties each row to the role that inserts it, so restoring as any other role leaves the signer unable to see the shares.
Confirm the row count matches the number of files:
7

Confirm signing resumes

The signer picks up the restored shares automatically, with no restart. Confirm with a test signature (see Validation). If signing does not resume, contact our .

Validation

  • Row count: key_shares matches the number of objects in the bucket (Step 6).
  • Byte match: for a few shares, the stored bytes match the downloaded file.
  • Test signature: sign with a recovered key on a testnet and confirm it broadcasts. A recovered key controls the same address on every chain, so use a testnet so no real assets move.
Last modified on September 3, 2026