3720 Commits

Author SHA1 Message Date
Jon Atack
fc8c1a8deb
doc: fix/improve warning helps in {create,load,unload,restore}wallet
- clarify that there can be multiple warning messages
- specify the correct wallet action
- describe the use of newlines as delimiters

Github-Pull: 
Rebased-From: f73782a9032a462a71569e9424db9bf9eeababf3
2023-04-18 12:12:49 +01:00
Andrew Chow
784a754aa4
wallet, rpc: Update migratewallet help text for encrypted wallets
Github-Pull: 
Rebased-From: 9486509be65f09174a0cb50a337cac58a0c09de4
2023-02-27 14:15:15 +00:00
Andrew Chow
ccc72fecd7
wallet: Be able to unlock the wallet for migration
Since migration reloads the wallet, the wallet will always be locked
unless the passphrase is given. migratewallet can now take the
passphrase in order to unlock the wallet for migration.

Github-Pull: 
Rebased-From: 7fd125b27d48e410509f3009e2eb9fa5cd6729dd
2023-02-27 14:14:14 +00:00
Andrew Chow
50dd8b13df
rpc: Allow users to specify wallet name for migratewallet
Github-Pull: 
Rebased-From: 6bdbc5ff590de18dfb47c31190baad879f68fef7
2023-02-27 14:13:46 +00:00
Andrew Chow
648b06256d
wallet: Allow MigrateLegacyToDescriptor to take a wallet name
An overload of MigrateLegacyToDescriptor is added which takes the wallet
name. The original that took a wallet pointer is still available, it
just gets the name, closes the wallet, and calls the new overload.

Github-Pull: 
Reabsed-From: dbfa34540372033d95036a02b7025ddd33f540aa
2023-02-27 14:13:13 +00:00
Matthew Zipkin
a62c541ae8
wallet: reuse change dest when recreating TX with avoidpartialspends
Github-Pull: 
Rebased-From: 14b4921a91920df25b19ff420bfe2bff8c56f71e
2023-02-22 09:12:50 +00:00
John Moffett
64e7db6f4f
Zero out wallet master key upon lock
When an encrypted wallet is locked (for instance via the
RPC `walletlock`), the docs indicate that the key is
removed from memory. However, the vector (with a secure
allocator) is merely cleared. This allows the key to persist
indefinitely in memory. Instead, manually fill the bytes with
zeroes before clearing.

Github-Pull: 
Rebased-From: 3a11adc7004d21b3dfe028b190d83add31691c55
2023-02-20 17:15:38 +00:00
John Moffett
5c824ac5e1
For feebump, ignore abandoned descendant spends
To be eligible for fee-bumping, a transaction must not have any
of its outputs (eg - change) spent in other unconfirmed transactions
in the wallet. However, this check should not apply to abandoned
transactions.

A new test case is added to cover this case.

Github-Pull: 
Rebased-From: f9ce0eadf4eb58d1e2207c27fabe69a5642482e7
2023-02-20 17:15:37 +00:00
Andrew Chow
428dcd51e6
wallet: Skip rescanning if wallet is more recent than tip
If a wallet has key birthdates that are more recent than the currrent
chain tip, or a bestblock height higher than the current tip, we should
not attempt to rescan as there is nothing to scan for.

Github-Pull: 
Rebased-From: 378400953424598fd78ccec5ba8cc38bc253c550
2023-02-20 17:15:37 +00:00
Sebastian Falbesoner
342abfb3f4
wallet: fully migrate address book entries for watchonly/solvable wallets
Currently `migratewallet` migrates the address book (i.e. labels and
purposes) for watchonly and solvable wallets only in RAM, but doesn't
persist them on disk. Fix this by adding another loop for both of the
special wallet types after which writes the corresponding NAME and
PURPOSE entries to the database in a single batch.

Github-Pull: 
Rebased-From: d5f4ae7fac0bceb0c9ad939b9a4fbdb85da0bf95
2023-02-20 17:15:36 +00:00
furszy
8b726bf556
test: Coin Selection, duplicated preset inputs selection
This exercises the bug inside CoinsResult::Erase that
ends up on (1) a wallet crash or (2) a created and
broadcasted tx that contains a reduced recipient's amount.

This is covered by making the wallet selects the preset
inputs twice during the coin selection process.

Making the wallet think that the selection process result covers
the entire tx target when it does not. It's actually creating
a tx that sends more coins than what inputs are covering for.

Which, combined with the SFFO option, makes the wallet
incorrectly reduce the recipient's amount by the difference
between the original target and the wrongly counted inputs.
Which means, a created and relayed tx sending less coins to
the destination than what the user inputted.

Github-Pull: 
Rebased-From: cf793846978a8783c23b66ba6b4f3f30e83ff3eb
2022-12-05 17:43:46 +00:00
furszy
9d73176d00
test: wallet, coverage for CoinsResult::Erase function
Github-Pull: 
Rebased-From: 341ba7ffd8cdb56b4cde1f251768c3d2c2a9b4e9
2022-12-05 17:43:31 +00:00
furszy
195f0dfd0e
wallet: bugfix, 'CoinsResult::Erase' is erasing only one output of the set
The loop break shouldn't have being there.

Github-Pull: 
Rebased-From: f930aefff9690a1e830d897d0a8c53f4219ae4a8
2022-12-05 17:40:54 +00:00
Andrew Chow
95fded1069
wallet: Explicitly say migratewallet on encrypted wallets is unsupported
Github-Pull: 
Rebased-From: 5e65a216d1fd00c447757736d4f2899d235e731a
2022-12-01 10:22:14 +00:00
Andrew Chow
7a97a56ffb
wallet: Avoid null pointer deref when cleaning up migratewallet
If migratewallet fails, we do a cleanup which removes the watchonly and
solvables wallets if they were created. However, if they were not, their
pointers are nullptr and we don't check for that, which causes a
segfault during the cleanup. So check that they aren't nullptr before
cleaning them up.

Github-Pull: 
Rebased-From: 86ef7b3c7be84e4183098f448c77ecc9ea7367ab
2022-12-01 10:21:00 +00:00
Sebastian Falbesoner
42c74a0a4c
rpc: doc: add missing option "bech32m" for change_type parameters
Affects the help of the `fundrawtransaction`, `send` and
`walletcratefundedpsbt` RPCs.

Github-Pull: 
Rebased-From: c3b1fe59dbc7abe45973e282cddf3677514e220f
2022-11-07 10:32:10 +00:00
Andrew Chow
2159676b6e
psbt: Include output pubkey in additional pubkeys to sign
In addition to the pubkeys in hd_keypaths and tap_bip32_keypaths, also
see if the descriptor can produce a SigningProvider for the output
pubkey.

Also slightly refactors this area to reduce code duplication.

Github-Pull: 
Rebased-From: 8781a1b6bbd0af3cfdf1421fd18de5432494619a
2022-11-04 15:55:48 +00:00
w0xlt
d5701900fc
rpc: make address field optional
Github-Pull: 
Rebased-From: eb679a7896ce00e322972a011b023661766923b9
2022-10-28 18:01:36 +08:00
Andrew Chow
dedee6af57
wallet: Check utxo prevout index out of bounds in sendall
Github-Pull: 
Rebased-From: b132c85650afb2182f2e58e903f3d6f86fd3fb22
2022-10-28 17:59:30 +08:00
Andrew Chow
bbe864a13a
wallet: Correctly check ismine for sendall
sendall should be using a bitwise AND for sendall's IsMine check rather
than an equality as IsMine will never return ISMINE_ALL.

Github-Pull: 
Rebased-From: 6bcd7e2a3b52f855db84cd23b5ee70d27be3434f
2022-10-28 17:58:28 +08:00
stickies-v
9b438f06ec
refactor: revert m_next_resend to not be std::atomic
Since m_next_resend is now only called from MaybeResendWalletTxs()
we don't have any potential race conditions anymore, so the usage
of std::atomic can be reverted.

Github-Pull: 
Rebased-From: b01682a812f0841170657708ef0e896b904fcd77
2022-10-13 23:38:20 +08:00
stickies-v
43ced0b436
wallet: only update m_next_resend when actually resending
We only want to relay our resubmitted transactions once every 12-36h.
By separating the timer update logic out of ResubmitWalletTransactions
and into MaybeResendWalletTxs we avoid non-relay calls (previously in
the separate ReacceptWalletTransactions function) from resetting that
timer.

Github-Pull: 
Rebased-From: 9245f456705b285e2d9afcc01a6155e1b3f92fad
2022-10-13 23:37:36 +08:00
stickies-v
fc8f2bfa3a
refactor: carve out tx resend timer logic into ShouldResend
Moves the logic of whether or not transactions should actually be
resent out of the function that's resending them. This reduces
responsibilities of ResubmitWalletTransactions and allows
carving out the updating of m_next_resend in a future commit.

Github-Pull: 
Rebased-From: 7fbde8af5c06694eecd4ce601109bd826a54bd6f
2022-10-13 23:36:56 +08:00
stickies-v
a6fb674f96
refactor: remove unused locks for ResubmitWalletTransactions
ReacceptWalletTransactions is replaced by ResubmitWalletTransactions
which already handles acquiring the necessary locks internally.

Github-Pull: 
Rebased-From: 01f3534632d18c772901fb6ce22f6394eae96799
2022-10-13 23:36:13 +08:00
Aurèle Oulès
2730ed2b0d test: Check external coin effective value is used in CoinSelection 2022-10-04 09:58:22 +01:00
Aurèle Oulès
21f96f40d1 wallet: Use correct effective value when checking target 2022-10-04 09:58:16 +01:00
MacroFake
ca8d2c4b43
Merge : [24.x] Bugfix: Wallet: Lock cs_wallet for SignMessage
a60d9eb9e6b6a272a3fca8981d89a55955dced55 Bugfix: Wallet: Lock cs_wallet for SignMessage (Luke Dashjr)

Pull request description:

  (Clean merge of  to 24.x branch)

Top commit has no ACKs.

Tree-SHA512: 821e19d222cc1eb9a6b957ec87d48cfb00b2c5b8182682ac57d9c76785b667ad9c71444e6bf0f53177c06d5fb39e72dbfc82d7debe4b1597699eefaf3001d08d
2022-09-25 22:04:46 +00:00
MacroFake
fad61573ed
Fix nNextResend data race in ResubmitWalletTransactions 2022-09-20 11:49:57 +02:00
Luke Dashjr
a60d9eb9e6 Bugfix: Wallet: Lock cs_wallet for SignMessage
cs_desc_main is typically locked within scope of a cs_wallet lock, but:

CWallet::IsLocked locks cs_wallet
...called from DescriptorScriptPubKeyMan::GetKeys
...called from DescriptorScriptPubKeyMan::GetSigningProvider which locks cs_desc_main first, but has no access to cs_wallet
...called from DescriptorScriptPubKeyMan::SignMessage
...called from CWallet::SignMessage which can access and lock cs_wallet

Resolve the out of order locks by grabbing cs_wallet in CWallet::SignMessage first
2022-09-20 00:46:27 +00:00
fanquake
9f650062fc
Merge : Wallet: Fix error handling (copy_file failure in RestoreWallet, and in general via interfaces)
c3e536555aa3a7db773170671da1256a2ace2094 Bugfix: Wallet: Return util::Error rather than non-error nullptr when CreateWallet/LoadWallet/RestoreWallet fail (Luke Dashjr)
335ff98c8a64eda38a2a2334102bd253f108c253 Bugfix: Wallet: Wrap RestoreWallet content in a try block to ensure exceptions become returned errors and incomplete wallet directory is removed (Luke Dashjr)

Pull request description:

  Bug 1: `copy_file` can throw exceptions, but `RestoreWallet` is expected to return a nullptr with a populated `errors` parameter. This is fixed by wrapping `copy_file` and `LoadWallet` (for good measure) in a `try` block, and converting any exceptions to the intended return style.

  Bug 2: `util::Result` turns what would have been a `false` unique_ptr into a `true` nullptr result, which leads to nullptr dereferences in at least the 3 cases of wallet creation/loading/restoring. This is fixed by keeping the pointer as a plain `std::unique_ptr` until actually returning it (ie, after the nullptr check).

  Fixes https://github.com/bitcoin-core/gui/issues/661

ACKs for top commit:
  achow101:
    ACK c3e536555aa3a7db773170671da1256a2ace2094

Tree-SHA512: 4291b3dbbb147acea2e63a704324c9371bc16ecb4237f8753729b0b0a6e55c9758ad61bfe8bd432fd7b0bae95d8b63a9831e61ac8b8d5c0197b550a2e0f4a105
2022-09-19 16:10:47 +01:00
Luke Dashjr
c3e536555a Bugfix: Wallet: Return util::Error rather than non-error nullptr when CreateWallet/LoadWallet/RestoreWallet fail 2022-09-16 23:28:21 +00:00
Luke Dashjr
335ff98c8a Bugfix: Wallet: Wrap RestoreWallet content in a try block to ensure exceptions become returned errors and incomplete wallet directory is removed 2022-09-16 21:07:10 +00:00
fanquake
08785aa75b
Merge : Use steady clock for all millis bench logging
fa521c960337a65d4ce12cd1ef009c652ffe57e6 Use steady clock for all millis bench logging (MacroFake)

Pull request description:

  Currently `GetTimeMillis` is used for bench logging in milliseconds integral precision. Replace it to use a steady clock that is type-safe and steady.

  Microsecond or float precision can be done in a follow-up.

ACKs for top commit:
  fanquake:
    ACK fa521c960337a65d4ce12cd1ef009c652ffe57e6 - started making the same change.

Tree-SHA512: 86a810e496fc663f815acb8771a6c770331593715cde85370226685bc50c13e8e987e3c5efd0b4e48b36ebd2372255357b709204bac750d41e94a9f7d9897fa6
2022-09-16 11:10:15 +01:00
Andrew Chow
a56876e6b9
Merge : wallet: fix sendall creates tx that fails tx-size check
cc434cbf583ec8d1b0f3aa504417231fdc81f33a wallet: fix sendall creates tx that fails tx-size check (kouloumos)

Pull request description:

  Fixes https://github.com/bitcoin/bitcoin/issues/26011

  The `sendall` RPC doesn't use `CreateTransactionInternal` as the rest of
  the wallet RPCs. [This has already been discussed in the original PR](https://github.com/bitcoin/bitcoin/pull/24118#issuecomment-1029462114).
  By not going through that path, it never checks the transaction's weight
  against the maximum tx weight for transactions we're willing to relay.
  447f50e4ae/src/wallet/spend.cpp (L1013-L1018)
  This PR adds a check for tx-size as well as test coverage for that case.

  _Note: It seems that the test takes a bit of time on slower machines,
  I'm not sure if dropping it might be for the better._

ACKs for top commit:
  glozow:
    re ACK cc434cb via range-diff. Changes were addressing https://github.com/bitcoin/bitcoin/pull/26024#discussion_r971325299 and https://github.com/bitcoin/bitcoin/pull/26024#discussion_r970651614.
  achow101:
    ACK cc434cbf583ec8d1b0f3aa504417231fdc81f33a
  w0xlt:
    reACK cc434cbf58

Tree-SHA512: 64a1d8f2c737b39f3ccee90689eda1dd9c1b65f11b2c7bc0ec8bfe72f0202ce90ab4033bb0ecfc6080af8c947575059588a00938fe48e7fd553f7fb5ee03b3cc
2022-09-15 13:26:22 -04:00
Andrew Chow
96f1b2d34f
Merge : test: Fix syncwithvalidationinterfacequeue calls
fa1ce96184a1815f453e64e14d77cb0025800be9 test: Add missing syncwithvalidationinterfacequeue (MacroFake)
faa4916529699f9a057e2bf2459d957bcec1de84 test/doc: Remove unused syncwithvalidationinterfacequeue (MacroFake)

Pull request description:

  Fixes 

ACKs for top commit:
  achow101:
    ACK fa1ce96184a1815f453e64e14d77cb0025800be9
  glozow:
    ACK fa1ce96184a1815f453e64e14d77cb0025800be9
  w0xlt:
    ACK fa1ce96184

Tree-SHA512: d1e101b55477360ead2b99ade5d42b922aabe293ec84fb26764e29161c5be6c534aef6f22d2cc5ea63a4bd6b6e77b701f1a7a2283b8e7e815d343a604cd77656
2022-09-15 13:17:43 -04:00
kouloumos
cc434cbf58 wallet: fix sendall creates tx that fails tx-size check
The `sendall` RPC doesn't use `CreateTransactionInternal`as the rest of
the wallet RPCs and it never checks against the tx-size mempool limit.
Add a check for tx-size as well as test coverage for that case.
2022-09-15 13:22:19 +03:00
MacroFake
fa1ce96184
test: Add missing syncwithvalidationinterfacequeue 2022-09-15 09:06:13 +02:00
MacroFake
718304d222
Merge : sendall: check if the maxtxfee has been exceeded
6f8e3818af7585b961039bf0c768be2e4ee44e0f sendall: check if the maxtxfee has been exceeded (ishaanam)

Pull request description:

  Previously the `sendall` RPC didn't check whether the fees of the transaction it creates exceed the set `maxtxfee`. This PR adds this check to `sendall` and a test case for it.

ACKs for top commit:
  achow101:
    ACK 6f8e3818af7585b961039bf0c768be2e4ee44e0f
  Xekyo:
    ACK 6f8e3818af7585b961039bf0c768be2e4ee44e0f
  glozow:
    Concept ACK 6f8e3818af7585b961039bf0c768be2e4ee44e0f. The high feerate is unlikely but sendall should respect the existing wallet options.

Tree-SHA512: 6ef0961937091293d49be16f17e4451cff3159d901c0c7c6e508883999dfe0c20ed4d7126bf74bfea8150d4c1eef961a45f0c28ef64562e6cb817fede2319f1a
2022-09-15 08:45:08 +02:00
Andrew Chow
2e3cd26a1a
Merge : rpc: bugfix, 'add_inputs' default value is true unless 'inputs' are provided
b00fc44ca5cb938f18d31cde7feb4e1c968dcc2f test: add coverage for 'add_inputs' dynamic default value (furszy)
ddbcfdf3d050061f4e8979a0e2bb63bba5a43c47 RPC: bugfix, 'add_inputs' default value is true unless 'inputs' are provided (furszy)

Pull request description:

  This bugfix was meant to be in , but decoupled it to try to make it part of 24.0 release.
  It's a truly misleading functionality.

  This PR doesn't change behavior in any way. Just fixes two invalid RPC help messages and adds test
  coverage for the current behavior.

  #### Description
  In both RPC commands `send()` and `walletcreatefundedpsbt` the help message says
  that `add_inputs` default value is false when it's actually dynamically set by the following statement:

  ```c++
  coin_control.m_allow_other_inputs = rawTx.vin.size() == 0;
  ```

  Which means that, by default, `add_inputs` is true unless there is any pre-set input, in which
  case, the default is false.

ACKs for top commit:
  achow101:
    ACK b00fc44ca5cb938f18d31cde7feb4e1c968dcc2f
  S3RK:
    ACK b00fc44ca5cb938f18d31cde7feb4e1c968dcc2f

Tree-SHA512: 5c68a40d81c994e0ab6de0817db69c4d3dea3a9a64a60362531bf583b7a4c37d524b740905a3f3a89cdbf221913ff5b504746625adb8622788aea93a35bbcd40
2022-09-14 16:15:03 -04:00
MacroFake
faa4916529
test/doc: Remove unused syncwithvalidationinterfacequeue
See https://github.com/bitcoin/bitcoin/pull/25768#discussion_r958562071

Also fix doc typo from https://github.com/bitcoin/bitcoin/pull/25768#discussion_r958571943
2022-09-14 14:34:53 +02:00
ishaanam
6f8e3818af sendall: check if the maxtxfee has been exceeded 2022-09-13 18:12:42 -04:00
furszy
ddbcfdf3d0
RPC: bugfix, 'add_inputs' default value is true unless 'inputs' are provided
In both RPC commands `send()` and `walletcreatefundedpsbt` the RPC help was saying
that `add_inputs` default value was false when it's actually dynamically set
by the following statement:

`coin_control.m_allow_other_inputs = rawTx.vin.size() == 0;`

Which means that, by default, `add_inputs` is true unless there
was any pre-set input, in which case, the default is false.
2022-09-13 16:13:05 -03:00
Andrew Chow
c85688347e
Merge : wallet: bugfix, load a wallet with an unknown/corrupt descriptor causes a fatal error
e06676377d935c69f0ee51fc18eb0772d524aba5 wallet: coverage for loading an unknown descriptor (furszy)
d26c3cc44438ecb9e4f618a2427c3c92a292aa16 wallet: bugfix, load wallet with an unknown descriptor cause fatal error (furszy)

Pull request description:

  Fixes 

  If the descriptor entry is unrecognized (due a soft downgrade) or corrupt, the
  unserialization fails and `LoadWallet`, instead of stop there and return the error,
  continues reading all the db records. As other records tied to the unrecognized
  or corrupt descriptor are scanned, a fatal error is being thrown.

  This fixes it by catching the descriptor parse failure and return which wallet failed.
  Logging its name/path, so the user can remove it from the settings file, to prevent
  its load at startup.

  Note: added the test in a separate file intentionally.
  Will continue adding coverage for the wallet load process in follow-up PRs.

ACKs for top commit:
  achow101:
    ACK e06676377d935c69f0ee51fc18eb0772d524aba5
  Sjors:
    re-utACK e06676377d935c69f0ee51fc18eb0772d524aba5

Tree-SHA512: d1f1a5d7e944c89c97a33b25b4411a36a11edae172c22f8524f69c84a035f84c570b284679f901fe60f1300f781b76a6c17b015a8e7ad44ebd25a0c295ef260f
2022-09-13 11:51:51 -04:00
furszy
e06676377d
wallet: coverage for loading an unknown descriptor
Previously, this was crashing the wallet.
2022-09-09 15:35:31 -03:00
furszy
d26c3cc444
wallet: bugfix, load wallet with an unknown descriptor cause fatal error
If the descriptor entry is unrecognized/corrupt, the unserialization fails and
`LoadWallet` instead of stop there and return the error, continues reading all
the db records. As other records tied to the unrecognized/corrupted descriptor
are scanned, a fatal error is thrown.
2022-09-09 15:35:04 -03:00
Andrew Chow
124e75a41e
Merge : RPC: fix sendall docs
51829409967dcfd039249506ecd2c58fb9a74b2f RPC: fix sendall docs (Anthony Towns)

Pull request description:

  Updates the documentation for the "inputs" entry in the "options"
  parameter of the sendall RPC to match the documentation for
  createrawtransaction.

ACKs for top commit:
  achow101:
    ACK 51829409967dcfd039249506ecd2c58fb9a74b2f
  Xekyo:
    ACK 51829409967dcfd039249506ecd2c58fb9a74b2f

Tree-SHA512: fe78e17b2f36190939b645d7f4653d025bbac110e4a7285b49e7f1da27adac8c4d03fd5b770e3a74351066b1ab87fde36fc796f42b03897e4e2ebef4b6b6081c
2022-09-06 18:00:57 -04:00
Anthony Towns
5182940996 RPC: fix sendall docs
Updates the documentation for the "inputs" entry in the "options"
parameter of the sendall RPC to match the documentation for
createrawtransaction.
2022-09-05 23:23:23 +10:00
glozow
5291933fed
Merge : wallet: Properly rebroadcast unconfirmed transaction chains
3405f3eed5cf841b23a569b64a376c2e5b5026cd test: Test that an unconfirmed not-in-mempool chain is rebroadcast (Andrew Chow)
10d91c5abe9ed7dcc237c9d52c588e7d26e162a4 wallet: Deduplicate Resend and ReacceptWalletTransactions (Andrew Chow)

Pull request description:

  Currently `ResendWalletTransactions` (used for normal rebroadcasts) will attempt to rebroadcast all of the transactions in the wallet in the order they are stored in `mapWallet`. This ends up being random as `mapWallet` is a `std::unordered_map`. However `ReacceptWalletTransactions` (used for adding to the mempool on loading) first sorts the txs by wallet insertion order, then submits them. The result is that `ResendWalletTranactions` will fail to rebroadcast child transactions if their txids happen to be lexicographically less than their parent's txid. This PR resolves this issue by combining `ReacceptWalletTransactions` and `ResendWalletTransactions` into a new `ResubmitWalletTransactions` so that the iteration code and basic checks are shared.

  A test has also been added that checks that such transaction chains are rebroadcast correctly.

ACKs for top commit:
  naumenkogs:
    utACK 3405f3eed5cf841b23a569b64a376c2e5b5026cd
  1440000bytes:
    reACK 3405f3eed5
  furszy:
    Late code review ACK 3405f3ee
  stickies-v:
    ACK 3405f3eed5cf841b23a569b64a376c2e5b5026cd

Tree-SHA512: 1240d9690ecc2ae8d476286b79e2386f537a90c41dd2b8b8a5a9c2a917aa3af85d6aee019fbbb05e772985a2b197e2788305586d9d5dac78ccba1ee5aa31d77a
2022-09-05 13:54:36 +01:00
Andrew Chow
7921026a24
Merge : wallet: Migrate legacy wallets to descriptor wallets
53e7ed075c49f853cc845afc7b2f058cabad0cb0 doc: Release notes and other docs for migration (Andrew Chow)
9c44bfe244f35f08ba576d8b979a90dcd68d2c77 Test migratewallet (Andrew Chow)
0b26e7cdf2659fd8b54d21fd2bd749f9f3e87af8 descriptors: addr() and raw() should return false for ToPrivateString (Andrew Chow)
31764c3f872f4f01b48d50585f86e97c41554954 Add migratewallet RPC (Andrew Chow)
0bf7b38bff422e7413bcd3dc0abe2568dd918ddc Implement MigrateLegacyToDescriptor (Andrew Chow)
e7b16f925ae5b117e8b74ce814b63e19b19b50f4 Implement MigrateToSQLite (Andrew Chow)
5b62f095e790a0d4e2a70ece89465b64fc68358a wallet: Refactor SetupDescSPKMs to take CExtKey (Andrew Chow)
22401f17e026ead4bc3fe96967eec56a719a4f75 Implement LegacyScriptPubKeyMan::DeleteRecords (Andrew Chow)
35f428fae68ad974abdce0fa905148f620a9443c Implement LegacyScriptPubKeyMan::MigrateToDescriptor (Andrew Chow)
ea1ab390e4dac128e3a37d4884528c3f4128ed83 scriptpubkeyman: Implement GetScriptPubKeys in Legacy (Andrew Chow)
e664af29760527e75cd7e290be5f102b6d29ebee Apply label to all scriptPubKeys of imported combo() (Andrew Chow)

Pull request description:

  This PR adds a new `migratewallet` RPC which migrates a legacy wallet to a descriptor wallet. Migrated wallets will need a new backup. If a wallet has watchonly stuff in it, a new watchonly descriptor wallet will be created containing those watchonly things. The related transactions, labels, and descriptors for those watchonly things will be removed from the original wallet. Migrated wallets will not have any of the legacy things be available for fetching from `getnewaddress` or `getrawchangeaddress`. Wallets that have private keys enabled will have newly generated descriptors. Wallets with private keys disabled will not have any active `ScriptPubKeyMan`s.

  For the basic HD wallet case of just generated keys, in addition to the standard descriptor wallet descriptors using the master key derived from the pre-existing hd seed, the migration will also create 3 descriptors for each HD chain in: a ranged combo external, a ranged combo internal, and a single key combo for the seed (the seed is a valid key that we can receive coins at!). The migrated wallet will then have newly generated descriptors as the active `ScriptPubKeyMan`s. This is equivalent to creating a new descriptor wallet and importing the 3 descriptors for each HD chain. For wallets containing non-HD keys, each key will have its own combo descriptor.

  There are also tests.

ACKs for top commit:
  Sjors:
    tACK 53e7ed075c49f853cc845afc7b2f058cabad0cb0
  w0xlt:
    reACK 53e7ed075c

Tree-SHA512: c0c003694ca2e17064922d08e8464278d314e970efb7df874b4fe04ec5d124c7206409ca701c65c099d17779ab2136ae63f1da2a9dba39b45f6d62cf93b5c60a
2022-09-01 15:43:30 -04:00
Andrew Chow
3118425ff9
Merge : rpc: sort listdescriptors result
50996241f2b0eefeaab4fcd11b9730fa2dc107ae rpc: sort listdescriptors result (Sjors Provoost)

Pull request description:

  This puts receive and change descriptors directly below each other.

  The change would be simpler if `UniValue` arrays were sortable.

ACKs for top commit:
  achow101:
    ACK 50996241f2b0eefeaab4fcd11b9730fa2dc107ae
  S3RK:
    reACK 50996241f2b0eefeaab4fcd11b9730fa2dc107ae
  furszy:
    utACK 50996241
  w0xlt:
    reACK 50996241f2

Tree-SHA512: 71246a48ba6f97c3e7c76ee32ff9e958227a14ca5a6eec638215dbfee57264d4e918ea5837f4d030eddc9c797c93df1791ddd55b5a499522ce2a35bcf380670b
2022-09-01 11:50:02 -04:00