Skip to content

Add internal wallet key rotation runbook - #573

Draft
Jossec101 wants to merge 2 commits into
mainfrom
docs/internal-wallet-rotation
Draft

Jossec101 wants to merge 2 commits into
mainfrom
docs/internal-wallet-rotation

Conversation

@Jossec101

Copy link
Copy Markdown
Contributor

Operations runbook for rotating the NodeGuard internal wallet master seed
as proactive hygiene: preflight SQL inventories (incl. the hardened-path
STOP gate and the channel close-address long tail), the seed ceremony via
the remote signer's seed-ceremony CLI, Lambda env configuration with the
snapshot->merge->apply pattern, the InternalWallets INSERT that flips the
current wallet, a hot single-sig canary that proves the new seed end to
end, wallet recreation + liquidity-rule/funds-destination re-pointing,
UI-driven drains, archiving, and the long-tail policy (keep MF_
forever, mark it Compromised once old single-sig wallets are empty).

Known gaps are documented as caveats (stale add-key modal on old wallets,
mixed-fingerprint Lambda throw, silent FKs, global subderivation counter,
hardened-path limitation) rather than fixed, per scope decision.


Stack created with GitHub Stacks CLIGive Feedback 💬

@Jossec101
Jossec101 marked this pull request as draft August 19, 2026 10:59
@Jossec101
Jossec101 force-pushed the docs/internal-wallet-rotation branch from ed2dc96 to 75947b8 Compare August 24, 2026 14:39
@Jossec101
Jossec101 force-pushed the docs/internal-wallet-rotation branch from 75947b8 to decc37e Compare August 26, 2026 16:12
@Jossec101
Jossec101 force-pushed the docs/internal-wallet-rotation branch from decc37e to 07dfd02 Compare August 28, 2026 09:22
@Jossec101
Jossec101 force-pushed the docs/internal-wallet-rotation branch from 07dfd02 to 28734cf Compare August 31, 2026 15:47
@Jossec101
Jossec101 force-pushed the docs/internal-wallet-rotation branch from 28734cf to 2979f06 Compare September 11, 2026 15:14
Paired bump: NBXplorer.Client 5.0.8 targets net10.0 and requires
NBitcoin >= 10.0.8. Also NBitcoin.TestFramework 4.0.2 -> 5.0.2.

NBitcoin 10 removed the NBitcoin.Scripting OutputDescriptor API; its
Miniscript/WalletPolicies replacement only parses BIP388 multipath
descriptors (/**), which NodeGuard's watch-only import explicitly rejects
(only external-chain /0/* keys are accepted). To preserve the exact
accepted grammar and error behavior, WalletParser now parses the small
supported descriptor surface directly (wpkh/pkh/multi/sortedmulti/
wsh(multi), origins, checksum validation) and renders export descriptors
manually with Miniscript.AddChecksum for the BIP380 checksum. The
lexicographical-order test rebuilds the descriptor from the multisig
script parameters since OutputDescriptor.InferFromScript is gone.

All 389 tests pass, including the pinned descriptor parse/export vectors
(checksums, key ordering, error types).
Operations runbook for rotating the NodeGuard internal wallet master seed
as proactive hygiene: preflight SQL inventories (incl. the hardened-path
STOP gate and the channel close-address long tail), the seed ceremony via
the remote signer's seed-ceremony CLI, Lambda env configuration with the
snapshot->merge->apply pattern, the InternalWallets INSERT that flips the
current wallet, a hot single-sig canary that proves the new seed end to
end, wallet recreation + liquidity-rule/funds-destination re-pointing,
UI-driven drains, archiving, and the long-tail policy (keep MF_<old>
forever, mark it Compromised once old single-sig wallets are empty).

Known gaps are documented as caveats (stale add-key modal on old wallets,
mixed-fingerprint Lambda throw, silent FKs, global subderivation counter,
hardened-path limitation) rather than fixed, per scope decision.
@Jossec101
Jossec101 force-pushed the docs/internal-wallet-rotation branch from 2979f06 to beb459a Compare September 14, 2026 13:18
Base automatically changed from deps/nbitcoin-10 to main September 14, 2026 13:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant