Skip to content

Menu action to export a watchonly wallet #872

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 15 commits into
base: master
Choose a base branch
from

Conversation

achow101
Copy link
Member

@achow101 achow101 commented May 13, 2025

Allows a user to export a watchonly version of their wallet to be used in an airgapped setup.

Built on bitcoin/bitcoin#32489

@DrahtBot
Copy link
Contributor

DrahtBot commented May 13, 2025

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

Reviews

See the guideline for information on the review process.
A summary of reviews will appear here.

Conflicts

Reviewers, this pull request conflicts with the following ones:

If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

@achow101 achow101 force-pushed the export-watchonly-wallet-gui branch from 033db04 to da9365f Compare May 16, 2025 21:43
@achow101 achow101 force-pushed the export-watchonly-wallet-gui branch from da9365f to fe863d1 Compare May 20, 2025 00:56
@hebasto hebasto changed the title gui: Menu action to export a watchonly wallet Menu action to export a watchonly wallet May 20, 2025
@achow101 achow101 force-pushed the export-watchonly-wallet-gui branch from fe863d1 to 6b252fe Compare May 21, 2025 17:54
@achow101 achow101 force-pushed the export-watchonly-wallet-gui branch from 6b252fe to 160ee16 Compare June 2, 2025 19:39
@DrahtBot DrahtBot removed the CI failed label Jun 2, 2025
@achow101 achow101 force-pushed the export-watchonly-wallet-gui branch from 160ee16 to 7f318f0 Compare June 4, 2025 23:56
achow101 added 15 commits June 4, 2025 16:56
If the locked coin needs to be persisted to the wallet database,
insteead of having the RPC figure out when to create a WalletBatch and
having LockCoin's behavior depend on it, have LockCoin take whether to
persist as a parameter so it makes the batch.

Since unlocking a persisted locked coin requires a database write as
well, we need to track whether the locked coin was persisted to the
wallet database so that it can erase the locked coin when necessary.

Keeping track of whether a locked coin was persisted is also useful
information for future PRs.
Instead of providing the descriptor string as stored in the db, use the
normalized descriptor as is done for getaddressinfo's parent_desc field.
getaddressinfo, listunspent, listtransactions, listsinceblock, and
gettransaction all include parent_desc(s). Make sure that these are
consistent with each other, as well as being in normalized form.
Although WalletBatch::LoadWallet performs the descriptor cache upgrade,
because new wallets do not have the descriptor flag set yet, the upgrade
does not run and set the flag.

Since new wallets will always being using the upgraded cache, there's no
reason to wait to set the flag, so set it when the wallet flags are
being initialized for new wallets.
CanSelfExpand() reports whether a descriptor can be expanded without
needing any caches or private keys to be provided by the caller of
Expand().
If a descriptor does not need any caches or private keys in order to
expand, then CanGetAddresses() should return true for that descriptor.
If a new WalletDescriptor is provided to us with a cache, write the
cache to disk as well.
When listdescriptors retrieves the descriptors from the wallet, instead
of having this logic in the RPC, move it into CWallet itself. This
will enable other functions to get the descriptors in an exportable
form.
ExportWatchOnly produces a watchonly wallet file from a CWallet. This
can be restored onto another instance of Bitcoin Core to allow that
instance to watch the same descriptors, and also have all of the same
initial address book and transactions.
@DrahtBot
Copy link
Contributor

DrahtBot commented Jul 1, 2025

🐙 This pull request conflicts with the target branch and needs rebase.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants