Commit graph

325 commits

Author SHA1 Message Date
Byron Hambly
9b0f8670fe
Merge 592e01398e into merged_master (Bitcoin PR bitcoin/bitcoin#28833) 2025-11-30 15:54:28 +02:00
Byron Hambly
cf0043f303
Merge 03d95cc630 into merged_master (Bitcoin PR bitcoin/bitcoin#29375) 2025-11-30 15:49:58 +02:00
Byron Hambly
5f14b5796a
Merge 6f732ffc3c into merged_master (Bitcoin PR bitcoin/bitcoin#28774) 2025-11-18 14:54:48 +02:00
Byron Hambly
1c37230da9
Merge 514268170b into merged_master (Bitcoin PR bitcoin/bitcoin#29133) 2025-11-18 13:27:06 +02:00
Byron Hambly
e2aa52246d
Merge 265250687b into merged_master (Bitcoin PR bitcoin/bitcoin#28455) 2025-11-17 21:16:45 +02:00
Byron Hambly
51196515b4
Merge 08e6aaabef into merged_master (Bitcoin PR bitcoin/bitcoin#28920) 2025-11-17 17:27:30 +02:00
Byron Hambly
9d86c53a22
Merge a7f4f1a09c into merged_master (Bitcoin PR bitcoin/bitcoin#28894) 2025-11-11 15:26:24 +02:00
Byron Hambly
08d0c71ed2
Merge 0f5e31ce7d into merged_master (Bitcoin PR bitcoin/bitcoin#28799) 2025-11-06 09:11:17 +02:00
Byron Hambly
69492d27da
Merge 08ea835220 into merged_master (Bitcoin PR bitcoin/bitcoin#28583) 2025-08-07 10:05:15 +02:00
Byron Hambly
52015faa34
Merge abe4fedab7 into merged_master (Bitcoin PR bitcoin/bitcoin#28125) 2025-08-01 12:55:18 +02:00
Byron Hambly
6c55760a2d Merge 7ef2d4ee4d into merged_master (Bitcoin PR bitcoin/bitcoin#28244) 2025-07-04 17:24:18 +02:00
Byron Hambly
bc6f151cb8 Merge f08d914a67 into merged_master (Bitcoin PR bitcoin/bitcoin#27920) 2025-06-30 15:29:17 +02:00
Byron Hambly
c8c3ee099d Merge 6663c802fe into merged_master (Bitcoin PR bitcoin/bitcoin#25634) 2025-06-27 14:40:19 +02:00
Byron Hambly
c590a01aff Merge 10c4a4613f into merged_master (Bitcoin PR bitcoin/bitcoin#27469) 2025-06-25 09:17:16 +02:00
Byron Hambly
5b856b6f5f Merge fa53611cf1 into merged_master (Bitcoin PR bitcoin/bitcoin#26076) 2025-05-16 11:10:32 +02:00
Byron Hambly
dfd55ffa24 Merge a0d37d1d23 into merged_master (Bitcoin PR bitcoin/bitcoin#27274) 2025-04-12 11:40:50 +02:00
Byron Hambly
e04de3e652 Merge 3963067555 into merged_master (Bitcoin PR bitcoin/bitcoin#26642) 2025-04-11 22:28:06 +02:00
Byron Hambly
d7c9767c01 Merge 710cab1d43 into merged_master (Bitcoin PR bitcoin/bitcoin#26032)
Moved the implementations of DummySignTx and DummySignInput from
spend.cpp to wallet.cpp, to more closely match upstream
2025-04-09 12:04:43 +02:00
Byron Hambly
9fdd02a17b Merge 27772d8009 into merged_master (Bitcoin PR bitcoin/bitcoin#26889) 2025-04-07 08:11:43 +02:00
Byron Hambly
2ba842104d Merge 550e6bd227 into merged_master (Bitcoin PR bitcoin/bitcoin#26935) 2025-04-05 10:57:32 +02:00
Tom Trevethan
0761b58003 Merge 1c8b80f440 into merged_master (Bitcoin PR bitcoin/bitcoin#15294) 2025-04-04 14:37:56 +00:00
Tom Trevethan
694c51a39f Merge 3212d104f4 into merged_master (Bitcoin PR bitcoin/bitcoin#23829) 2025-04-01 15:23:27 +00:00
Byron Hambly
b4405ba453 Merge e9262ea32a into merged_master (Bitcoin PR bitcoin/bitcoin#26750) 2025-03-31 16:37:52 +02:00
Byron Hambly
7ea69ff0d8
Merge UP TO 48174c0f28 into merged_master (UP TO Bitcoin PR bitcoin/bitcoin#26240)
FIXME in wallet_taproot.py functional test

1668424146 2022-11-14T12:09:06+01:00 48174c0f28 Bitcoin Merge bitcoin/bitcoin#26240: rpc: Adjust RPCTypeCheckObj error string
1668417474 2022-11-14T10:17:54+01:00 59e00c7e03 Bitcoin Merge bitcoin/bitcoin#25714: univalue: Avoid std::string copies
1668111238 2022-11-10T15:13:58-05:00 7ef730ca84 Bitcoin Merge bitcoin/bitcoin#26483: test: Don't pass add_to_wallet option to walletcreatefundedpsbt
1668004459 2022-11-09T15:34:19+01:00 9dce30194b Bitcoin Merge bitcoin/bitcoin#26472: test: add missing bech32m / BIP86 test-cases to wallet_descriptor.py
1667992471 2022-11-09T12:14:31+01:00 44ca5d5e87 Bitcoin Merge bitcoin/bitcoin#26473: test: Avoid collision with valid path names in `getarg_tests/logargs`
1667640759 2022-11-05T10:32:39+01:00 50422b770a Bitcoin Merge bitcoin/bitcoin#26419: log: mempool: log removal reason in validation interface
1667636699 2022-11-05T09:24:59+01:00 ce57dbac90 Bitcoin Merge bitcoin/bitcoin#26449: rpc: doc: add missing option "bech32m" for `change_type` parameters
1667577253 2022-11-04T15:54:13+00:00 ae6bb6e71e Bitcoin Merge bitcoin/bitcoin#26418: Fix signing of multi_a and rawtr scripts with wallets that only have corresponding keys
2025-02-27 15:15:49 +02:00
Byron Hambly
ca0a68b350
Merge UP TO 551c8e9526 into merged_master (UP TO bitcoin/bitcoin#26349)
Includes FIXMEs for a few functional tests
2025-02-05 09:50:17 +02:00
Byron Hambly
8499b13762
lint: fix lint issues 2024-12-03 14:02:33 +02:00
Byron Hambly
e1e241d410 Merge 7921026a24 into merged_master (Bitcoin PR bitcoin/bitcoin#19602)
FIXME for test_other_watchonly in the new wallet migration test
2024-11-26 11:21:27 +02:00
Byron Hambly
1006327a13 Merge 9eaef10801 into merged_master (Bitcoin PR bitcoin/bitcoin#25707) 2024-11-04 11:26:40 +02:00
Byron Hambly
06009b9841 Merge a8f69541ad into merged_master (Bitcoin PR bitcoin/bitcoin#25748) 2024-11-03 16:54:57 +02:00
Byron Hambly
ee6cc528c6 Merge 64f7a1940d into merged_master (Bitcoin PR bitcoin/bitcoin#25734) 2024-11-03 14:28:09 +02:00
Byron Hambly
52699c29d7 Merge e078ee9d9d into merged_master (Bitcoin PR bitcoin/bitcoin#25664) 2024-11-01 15:14:19 +02:00
Byron Hambly
5104b4635b Merge 93999a5fbe into merged_master (Bitcoin PR bitcoin/bitcoin#25642) 2024-11-01 13:41:41 +02:00
Byron Hambly
a33b20f0ff Merge a6fc293c0a into merged_master (Bitcoin PR bitcoin/bitcoin#25656)
ReserveDestination::SetBlindingPubKey was removed since it was only used
in one place (in Wallet::GetNewChangeDestination), and after this change
it was silently breaking blinded change addresses by somehow replacing
the destination with CNoDestination...
2024-11-01 12:36:42 +02:00
Byron Hambly
a4fa9c6ada
Merge 59bd6b6d37 into merged_master (Bitcoin PR bitcoin/bitcoin#24699) 2024-10-29 14:19:22 +02:00
Byron Hambly
49d368ea6b Merge 006740b6f6 into merged_master (Bitcoin PR bitcoin/bitcoin#25721) 2024-10-25 13:33:19 +02:00
James Dorfman
e22bfb3011 Merge 316afb1eca into merged_master (Bitcoin PR bitcoin/bitcoin#25218) 2024-10-16 04:56:53 +00:00
Byron Hambly
2d07ef8fc1
Merge 5bf65ec66e into merged_master (Bitcoin PR bitcoin/bitcoin#22558) 2024-09-19 13:24:19 +02:00
Ava Chow
592e01398e
Merge bitcoin/bitcoin#28833: wallet: refactor: remove unused SignatureData instances in spkm's FillPSBT methods
e2ad343f69 wallet: remove unused `SignatureData` instances in spkm's `FillPSBT` methods (Sebastian Falbesoner)

Pull request description:

  These are filled with signature data from a PSBT input, but not used anywhere after, hence they can be removed. Note that the same code is in the `SignPSBTInput` function where the `sigdata` result is indeed used.

ACKs for top commit:
  achow101:
    ACK e2ad343f69
  brunoerg:
    crACK e2ad343f69

Tree-SHA512: f0cabcc000bcea6bc7d7ec9d3be2e2a8accbdbffbe35252250ea2305b65a5813fde2b8096fbdd2c7cccdf417ea285183dc325fc2d210d88bce62978ce642930e
2024-02-06 13:35:41 -05:00
furszy
2bb25ce502
wallet: remove unused 'accept_no_keys' arg from decryption process
The wallet decryption process (CheckDecryptionKey() and Unlock())
contains an arg 'accept_no_keys,' introduced in #13926, that has
never been used.
Additionally, this also removes the unimplemented SplitWalletPath
function.
2024-02-03 12:56:43 -03:00
Sebastian Falbesoner
e2ad343f69 wallet: remove unused SignatureData instances in spkm's FillPSBT methods
These are filled with signature data from a PSBT input, but not used anywhere
after, hence they can be removed.
2024-01-22 13:42:36 +01:00
Vasil Dimov
32a9f13cb8
wallet: avoid returning a reference to vMasterKey after releasing the mutex that guards it
`CWallet::GetEncryptionKey()` would return a reference to the internal
`CWallet::vMasterKey`, guarded by `CWallet::cs_wallet`, which is unsafe.

Returning a copy would be a shorter solution, but could have security
implications of the master key remaining somewhere in the memory even
after `CWallet::Lock()` (the current calls to
`CWallet::GetEncryptionKey()` are safe, but that is not future proof).

So, instead of `EncryptSecret(m_storage.GetEncryptionKey(), ...)`
change the `GetEncryptionKey()` method to provide the encryption
key to a given callback:
`m_storage.WithEncryptionKey([](const CKeyingMaterial& k) { EncryptSecret(k, ...); })`

This silences the following (clang 18):

```
wallet/wallet.cpp:3520:12: error: returning variable 'vMasterKey' by reference requires holding mutex 'cs_wallet' [-Werror,-Wthread-safety-reference-return]
 3520 |     return vMasterKey;
      |            ^
```
2024-01-18 18:12:59 +01:00
MarcoFalke
fa96d93711
refactor: Allow std::span construction from CKey 2024-01-16 15:29:18 +01:00
Sebastian Falbesoner
fa1d49542e refactor: share and use GenerateRandomKey helper
Making the `GenerateRandomKey` helper available to other modules via
key.{h.cpp} allows us to create random private keys directly at
instantiation of CKey, in contrast to the two-step process of creating
the instance and then having to call `MakeNewKey(...)`.
2023-12-23 13:26:00 +01:00
Ava Chow
08e6aaabef
Merge bitcoin/bitcoin#28920: wallet: birth time update during tx scanning
1ce45baed7 rpc: getwalletinfo, return wallet 'birthtime' (furszy)
83c66444d0 test: coverage for wallet birth time interaction with -reindex (furszy)
6f497377aa wallet: fix legacy spkm default birth time (furszy)
75fbf444c1 wallet: birth time update during tx scanning (furszy)
b4306e3c8d refactor: rename FirstKeyTimeChanged to MaybeUpdateBirthTime (furszy)

Pull request description:

  Fixing #28897.

  As the user may have imported a descriptor with a timestamp newer
  than the actual birth time of the first key (by setting 'timestamp=now'),
  the wallet needs to update the birth time when it detects a transaction
  older than the oldest descriptor timestamp.

  Testing Notes:
  Can cherry-pick the test commit on top of master. It will fail there.

ACKs for top commit:
  Sjors:
    re-utACK 1ce45baed7
  achow101:
    ACK 1ce45baed7

Tree-SHA512: 10c2382f87356ae9ea3fcb637d7edc5ed0e51e13cc2729c314c9ffb57c684b9ac3c4b757b85810c0a674020b7287c43d3be8273bcf75e2aff0cc1c037f1159f9
2023-12-14 16:27:40 -05:00
furszy
6f497377aa
wallet: fix legacy spkm default birth time
To avoid scanning blocks, as assumed by a wallet with no
generated keys or imported scripts, the default value for
the birth time needs to be set to the maximum int64_t value.

Once the first key is generated or the first script is imported,
the legacy SPKM will update the birth time automatically.
2023-12-05 18:55:35 -03:00
furszy
1f65241b73
wallet: descriptors setup, batch db operations
Instead of doing one db transaction per descriptor setup,
batch all descriptors' setup writes in a single db txn.

Speeding up the process and preventing the wallet from entering
an inconsistent state if any of the intermediate transactions
fail.
2023-11-21 23:01:42 -03:00
furszy
3eb769f150
wallet: batch legacy spkm TopUp
Instead of performing multiple atomic write
operations per legacy spkm setup call, batch
them all within a single atomic db txn.
2023-11-21 23:01:30 -03:00
furszy
075aa44ceb
wallet: batch descriptor spkm TopUp
Instead of performing multiple atomic write
operations per descriptor setup call, batch
them all within a single atomic db txn.
2023-11-21 23:01:30 -03:00
Sebastian Falbesoner
f811a24421 wallet: cache descriptor ID to avoid repeated descriptor string creation
Right now a wallet descriptor is converted to it's string representation
(via `Descriptor::ToString`) repeatedly at different instances:
- on finding a `DescriptorScriptPubKeyMan` for a given descriptor
  (`CWallet::GetDescriptorScriptPubKeyMan`, e.g. used by the
  `importdescriptors` RPC); the string representation is created once
  for each spkm in the wallet and at each iteration again for
  the searched descriptor (`DescriptorScriptPubKeyMan::HasWalletDescriptor`)
- whenever `DescriptorScriptPubKeyMan::GetID()` is called, e.g. in
  `TopUp` or any instances where a descriptor is written to the DB
  to determine the database key etc.

As there is no good reason to calculate a fixed descriptor's string/ID
more than once, add the ID as a field to `WalletDescriptor` and
calculate it immediately at initialization (or deserialization).
`HasWalletDescriptor` is changed to compare the spkm's and searched
descriptor's ID instead of the string to take use of that.

This speeds up the functional test `wallet_miniscript.py` by a factor of
5-6x on my machine (3m30.95s on master vs. 0m38.02s on PR). The recently
introduced "max-size TapMiniscript" test-case introduced a descriptor
that takes 2-3 seconds to create a string representation, so the
repeated calls to that were significantly hurting the performance.
2023-11-05 23:50:58 +01:00
MarcoFalke
fa05a726c2
tidy: modernize-use-emplace 2023-10-12 11:27:19 +02:00