Repository navigation
Conversation
This was referenced Nov 15, 2026
…ecoveries from their spends A recovery is started through the vault's recovery side, which recreates it as a 1 of 2 of its custody and a timelocked member that finishes it. The spend that starts a recovery reveals that member even if its memo is left out, so sync records every recovery it sees, and whether this wallet started it, so that one started elsewhere can be cancelled. Finishing needs the recovery's memo, since that's the only place the new custody is revealed. The recovery and rekey builders replace the test-only copies in the sync tests.
…'s pending recovery start_vault_recovery signs with the vault's recovery key, or a mnemonic that's then attached, and moves the vault to a new custody key. A recovery can't pay its own fee, so a fee is paid by a BLS wallet in the same transaction. finish_vault_recovery only finishes a recovery whose new custody has a key in the keychain, since finishing needs no signature. get_vault shows whether this wallet started the pending recovery, and why it can't be finished yet, measured against block timestamps rather than the local clock. The confirmation summary shows what a spend through the recovery side does.
… about recoveries this wallet didn't start The alert shows on every page of a vault wallet until the recovery is cancelled or finished, with a one-click cancel, and a system notification where the webview supports them. The countdown is measured against block timestamps.
Rigidity
force-pushed
the
rigidity/vault-recovery
branch
from
November 15, 2026 06:00
e3f7cc7 to
1956fca
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #954. Part of #945. Stacked on #1014.
Summary
Vaults can now be recovered, have a recovery cancelled or finished, and be rekeyed:
Legacyvaults. It writes a memo and prompts for a config backup.start_vault_recovery,cancel_vault_recovery,finish_vault_recoveryandrekey_vault.get_vaultreports the pending recovery and why it can't be finished yet, if it can't.Decisions
migrations/0012_vault_recoveries.sql. One is accepted only if it rebuilds the coin's puzzle hash from the earlier config. Before this, a recovery started without a memo left the vault showing as Active. Such a recovery can be cancelled, but not finished, since only the memo reveals the new custody.get_vaultsays why: the custody is unknown, the key isn't ours, or the timelock hasn't expired.auto_submitis set, with the vault's keys and the fee wallet's.Deferred
tauri-plugin-notificationto be reliable. The in-app banner shows regardless.Testing
recoveringvault, which bob started recovering, and attached alice's custody key. The banner appeared, and its Cancel recovery button cancelled the recovery.tsc -b, unit tests, fmt, clippy, workspace tests, machete, the sqlx check, and a bindings regen with no changes.Screenshots