Commit graph

192 commits

Author SHA1 Message Date
Byron Hambly
8deae39582
Merge 9f0f83d650 into merged_master (Bitcoin PR bitcoin/bitcoin#29065) 2025-11-17 15:35:31 +02:00
Byron Hambly
307c1b8b39
Merge dabd704642 into merged_master (Bitcoin PR bitcoin/bitcoin#25273) 2025-11-17 13:26:40 +02:00
Byron Hambly
8556ebfa64
Merge 22025d06e5 into merged_master (Bitcoin PR bitcoin/bitcoin#28605) 2025-11-10 14:17:41 +02:00
Byron Hambly
86ea3ebeac
Merge 29c2c90362 into merged_master (Bitcoin PR bitcoin/bitcoin#28721) 2025-11-06 11:20:50 +02:00
Byron Hambly
0865bc218a
test: fix wallet_bumpfee.py 2025-10-07 14:01:25 +02:00
Byron Hambly
3b7fc214b4
Merge 19a7e608f9 into merged_master (Bitcoin PR bitcoin/bitcoin#28505) 2025-08-04 14:31:00 +02:00
Byron Hambly
34f8d7a3c4
Merge 53313c49d6 into merged_master (Bitcoin PR bitcoin/bitcoin#28246) 2025-08-01 12:40:43 +02:00
Byron Hambly
0aec781a49
Merge 459272d639 into merged_master (Bitcoin PR bitcoin/bitcoin#26152) 2025-08-01 09:39:10 +02:00
Byron Hambly
cbf9aac08e Merge 04afe55e29 into merged_master (Bitcoin PR bitcoin/bitcoin#26467) 2025-07-02 16:55:42 +02:00
Byron Hambly
edc585d157 Merge 9564f98fee into merged_master (Bitcoin PR bitcoin/bitcoin#27636) 2025-06-25 11:40:46 +02:00
Byron Hambly
497b1cace4 Merge 3497df4c75 into merged_master (Bitcoin PR bitcoin/bitcoin#27195) 2025-05-15 10:30:40 +02:00
Byron Hambly
d6703971c6 Merge 90bfa9d2d7 into merged_master (Bitcoin PR bitcoin/bitcoin#27308) 2025-04-14 08:20:10 +02:00
Byron Hambly
54d0589bdc Merge 73966f75f6 into merged_master (Bitcoin PR bitcoin/bitcoin#25344) 2025-04-06 21:33:46 +02:00
Byron Hambly
b4405ba453 Merge e9262ea32a into merged_master (Bitcoin PR bitcoin/bitcoin#26750) 2025-03-31 16:37:52 +02:00
Byron Hambly
29cc94eecc Merge cbcad79eef into merged_master (Bitcoin PR bitcoin/bitcoin#21576) 2025-03-31 11:37:23 +02:00
Byron Hambly
7a022fb75d Merge c5f0cbefa3 into merged_master (Bitcoin PR bitcoin/bitcoin#25775) 2024-11-04 15:04:48 +02:00
Byron Hambly
b07694187c Merge 607d5a46aa into merged_master (Bitcoin PR bitcoin/bitcoin#23202)
added a FIXME for the new bumpfee tests on non-owned inputs
2024-11-04 15:03:28 +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
James Dorfman
034a29075f Merge bc28ca3afb into merged_master (Bitcoin PR bitcoin/bitcoin#25118)
Please review this commit carefully. It touched wallet code.
2024-09-16 03:30:10 +00:00
James Dorfman
16f007177a Merge 1ab389b1ba into merged_master (Bitcoin PR bitcoin/bitcoin#20640)
This was a tricky merge (wallet refactor). Please double check my
changes to CreateTransactionInternal(...) in src/wallet/spend.cpp, and to
SendGenerationTransaction(...) in src/wallet/rpc/elements.cpp.

Lastly, I got all the tests passing, but I'm not certain that the changes
with fixed_change_pos in CreateTransactionInternal were correct.
2024-08-13 03:26:28 +00:00
James Dorfman
b3a377c2d0 Merge 0da559e02e into merged_master (Bitcoin PR bitcoin/bitcoin#24661) 2024-07-08 15:17:32 +00:00
James Dorfman
e8e87a7639 Merge cea230eec4 into merged_master (Bitcoin PR bitcoin/bitcoin#24562) 2024-01-11 17:57:30 +00:00
furszy
37c75c5820
test: wallet, fix change position out of range error
Since #25273, the behavior of 'inserting change at a random
position' is instructed by passing std::nullopt instead of -1.

Also, added missing documentation about the meaning of
'change_pos=std::nullopt' inside 'CWallet::CreateTransaction()'
2023-12-12 15:20:38 -03:00
Andrew Chow
758501b713 wallet: use optional for change position as an optional in CreateTransaction
Instead of making -1 a magic number meaning no change or random change
position, use an optional to have that meaning.
2023-12-08 17:12:19 -05:00
Andrew Chow
596642c5a9 wallet: Replace SelectExternal with SetTxOut
Instead of having a separate CCoinControl::SelectExternal function, we
can use the normal CCoinControl::Select function and explicitly use
PreselectedInput::SetTxOut in the caller. The semantics of what an
external input is remains.
2023-12-08 14:55:14 -05:00
fanquake
22025d06e5
Merge bitcoin/bitcoin#28605: Fix typos
43de4d3630 doc: fix typos (Sjors Provoost)

Pull request description:

  This PR fixes typos found by lint-spelling.py using codespell 2.2.6.

  Our CI linter job uses codespell 2.2.5 and found fewer typos that I did locally. In any case it's happy now.

ACKs for top commit:
  pablomartin4btc:
    re ACK 43de4d3630

Tree-SHA512: c032fe86cb49c924a468385653b31f309a9db68c478d70335bba3e65a1ff3826abe80284fe00a090ab5a509e1edbf17e476f6922fb15d055e50f1103dad2ccb0
2023-11-16 10:35:49 +00:00
Sjors Provoost
43de4d3630
doc: fix typos
As found by lint-spelling.py using codespell 2.2.6.
2023-11-07 10:21:51 +09:00
Ryan Ofsky
441d00c60f interfaces: Rename CalculateBumpFees methods to be compatible with capn'proto 2023-10-20 10:30:16 -04:00
furszy
b3db8c9d5c
rpc: bumpfee, improve doc for 'reduce_output' arg
The current argument name and description are dangerous as it don't
describe the case where the user selects the recipient output as the
change address. This one could end up been increased by the inputs
minus outputs remainder. Which, when bumpfee adds new inputs
to the transaction, leads the process to send more coins to the
recipient. Which is not what the user would expect from a
'reduce_output' param naming.

Co-authored-by: Murch <murch@murch.one>
2023-09-26 20:17:02 -03:00
fanquake
53313c49d6
Merge bitcoin/bitcoin#28246: wallet: Use CTxDestination in CRecipient instead of just scriptPubKey
ad0c469d98 wallet: Use CTxDestination in CRecipient rather than scriptPubKey (Andrew Chow)
07d3bdf4eb Add PubKeyDestination for P2PK scripts (Andrew Chow)
1a98a51c66 Allow CNoDestination to represent a raw script (Andrew Chow)
8dd067088d Make WitnessUnknown members private (Andrew Chow)

Pull request description:

  For silent payments, we want to provide a `SilentPaymentsDestination` to be used as the recipient, which requires `CRecipient` to use something other than just the `scriptPubKey` as we cannot know the output script for a silent payment prior to transaction creation. `CTxDestination` seems like the obvious place to add a `SilentPaymentsDestination` as it is our internal representation of an address.

  In order to still allow paying to arbitrary scriptPubKeys (e.g. for data carrier outputs, or the user hand crafted a raw transaction that they have given to `fundrawtransaction`), `CNoDestination` is changed to contain raw scripts.

  Additionally, P2PK scripts are now interpreted as a new `PubKeyDestination` rather than `PKHash`. This results in some things that would have given an address for P2PK scripts to no longer do so. This is arguably more correct.

  `ExtractDestination`'s behavior is slightly changed for the above. It now returns `true` for those destinations that have addresses, so P2PK scripts now result in `false`. Even though it returns false for `CNoDestination`, the script will now be included in that `CNoDestination`.

  Builds on #28244

ACKs for top commit:
  josibake:
    ACK https://github.com/bitcoin/bitcoin/pull/28246/commits/ad0c469d98c51931b98b7fd937c6ac3eeaed024e

Tree-SHA512: ef3f8f3c7284779d9806c77c85b21caf910a79a1f7e7f1b51abcc0d7e074f14e00abf30f625a13075e41d94dad6202c10ddff462c0ee74c2ca4aab585b145a52
2023-09-19 16:48:43 +00:00
Murch
f18f9ef4d3
Amend bumpfee for inputs with overlapping ancestry
At the end of coin selection reduce the fees by the difference between
the individual bump fee estimates and the collective bump fee estimate.
2023-09-13 15:46:59 -04:00
Murch
2e35e944da
Bump unconfirmed parent txs to target feerate
When a transaction uses an unconfirmed input, preceding this commit it
would not consider the feerate of the parent transaction. Given a parent
transaction with a lower ancestor feerate, this resulted in the new
transaction's ancestor feerate undershooting the target feerate.

This commit changes how we calculate the effective value of unconfirmed UTXOs.
The effective value of unconfirmed UTXOs is decreased by the fee
necessary to bump its ancestry to the target feerate. This also impacts
the calculation of the waste metric: since the estimate for the current
fee is increased by the bump fees, unconfirmed UTXOs current fees appear less
favorable compared to their unchanged long term fees.

This has one caveat: if multiple UTXOs have overlapping ancestries, each
of their individual estimates will account for bumping all ancestors.
2023-09-13 14:33:58 -04:00
Andrew Chow
ad0c469d98 wallet: Use CTxDestination in CRecipient rather than scriptPubKey 2023-09-12 12:14:31 -04:00
Andrew Chow
7d83502d3d bumpfee: Allow original change position to be specified
If the user used a custom change address, it may not be detected as a
change output, resulting in an additional change output being added to
the bumped transaction. We can avoid this issue by allowing the user to
specify the position of the change output.
2023-06-26 17:49:09 -04:00
Byron Hambly
7878ba47b9 Merge c561f2f06e into merged_master (Bitcoin PR bitcoin/bitcoin#23497) 2023-06-19 09:28:31 +00:00
Byron Hambly
47626b5a64 Merge 623745ca74 into merged_master (Bitcoin PR bitcoin/bitcoin#23912) 2023-06-14 15:44:11 +00:00
Byron Hambly
4890a75f92 Merge bb655a6aac into merged_master (Bitcoin PR bitcoin/bitcoin#23883) 2023-06-14 14:27:47 +00:00
TheCharlatan
7d3b35004b
refactor: Move system from util to common library
Since the kernel library no longer depends on the system file, move it
to the common library instead in accordance to the diagram in
doc/design/libraries.md.
2023-05-20 12:08:13 +02:00
furszy
7bffec6715
bumpfee: enable send coins back to yourself
Simple example:

1) User_1 sends 0.1 btc to user_2 on a low fee transaction.
2) After few hours, the tx is still in the mempool, user_2
   is not interested anymore, so user_1 decides to cancel
   it by sending coins back to himself.
3) User_1 has the bright idea of opening the explorer and
   copy the change output address of the transaction. Then
   call bumpfee providing such output (in the "outputs" arg).

Currently, this is not possible. The wallet fails with
"Unable to create transaction. Transaction must have at least
one recipient" error.
The error reason is that we discard the provided output from
the recipients list and set it inside the coin control
so the process adds it later (when the change is calculated).
But.. there is no later if the tx has no outputs.
2023-04-15 10:44:50 -03:00
James Dorfman
3e939cca81 Merge 629c4ab2e3 into merged_master (Bitcoin PR bitcoin/bitcoin#22100) 2023-04-14 06:13:01 +00:00
Andrew Chow
be177c15a4 bumpfee: Check the correct feerate when replacing outputs
When doing the feerate check for bumped transactions that replace the
outputs, we need to consider that the size of the new outputs may be
different from the old outputs and calculate the minimum feerate accordingly.
2023-04-10 09:56:25 -04:00
Seibart Nedor
c0ebb98382 wallet: add outputs arguments to bumpfee and psbtbumpfee 2023-01-17 13:28:53 +02:00
Hennadii Stepanov
306ccd4927
scripted-diff: Bump copyright headers
-BEGIN VERIFY SCRIPT-
./contrib/devtools/copyright_header.py update ./
-END VERIFY SCRIPT-

Commits of previous years:
- 2021: f47dda2c58
- 2020: fa0074e2d8
- 2019: aaaaad6ac9
2022-12-24 23:49:50 +00:00
Andrew Chow
cbcad79eef
Merge bitcoin/bitcoin#21576: rpc, gui: bumpfee signer support
2c07cfacd1 gui: bumpfee signer support (Sjors Provoost)
7e02a33297 rpc: bumpfee signer support (Sjors Provoost)
304ece9945 rpc: document bools in FillPSBT() calls (Sjors Provoost)

Pull request description:

  The `bumpfee` RPC call and GUI fee bump interface now work with an external signer.

ACKs for top commit:
  achow101:
    ACK 2c07cfacd1
  furszy:
    code review ACK 2c07cfac
  jarolrod:
    tACK 2c07cfa

Tree-SHA512: 0c7b931f76fac67c9e33b9b935f29af6f69ac67a5ffcc586ed2f1676feac427735b1d971723b29ef332bb6fb5762949598ebbf728587e8f0ded95a9bfbb3e7a4
2022-12-20 15:30:17 -05:00
fanquake
c5f0cbefa3
Merge bitcoin/bitcoin#25775: docs: remove non-signaling mentions of BIP125
1dc03dda05 [doc] remove non-signaling mentions of BIP125 (glozow)
32024d40f0 scripted-diff: remove mention of BIP125 from non-signaling var names (glozow)

Pull request description:

  We have pretty thorough documentation of our RBF policy in doc/policy/mempool-replacements.md. It enumerates each rule with several sentences of rationale. Also, each rule pretty much has its own function (3 and 4 share one), with extensive comments. The doc states explicitly that our rules are similar but differ from BIP125, and contains a record of historical changes to RBF policy.

  We should not use "BIP125" as synonymous with our RBF policy because:
  - Our RBF policy is different from what is specified in BIP125, for example:
      - the BIP does not mention our rule about the replacement feerate being higher (our Rule 6)
      - the BIP uses minimum relay feerate for Rule 4, while we have used incremental relay feerate since #9380
      - the "inherited signaling" question (CVE-2021-31876). Call it discrepancy, ambiguous wording, doc misinterpretation, or implementation details, I would recommend users refer to doc/policy/mempool-replacements.md
      - the signaling policy is configurable, see #25353
  - Our RBF policy may change further
  - We have already marked BIP125 as only "partially implemented" in docs/bips.md since 1fd49eb498
  - See comments from people who are not me recently:
      - https://github.com/bitcoin/bitcoin/pull/25038#discussion_r909507429
      - https://github.com/bitcoin/bitcoin/pull/25575#issuecomment-1179519204

  This PR removes all non-signaling mentions of BIP125 (if people feel strongly, we can remove all mentions of BIP125 period). It may be useful to refer to the concept of "tx opts in to RBF if it has at least one nSequence less than (0xffffffff - 1)" as "BIP125 signaling" because:
  - It is succint.
  - It has already been widely marketed as BIP125 opt-in signaling.
  - Our API uses it when referring to signaling (e.g. getmempoolentry["bip125-replaceable"] and wallet error message "not BIP 125 replaceable"). Changing those is more invasive.
  - If/when we have other ways to signal in the future, we can disambiguate them this way. See #25038 which proposes another way of signaling, and where I pulled these commits from.

  Alternatives:
  - Changing our policy to match BIP125. This doesn't make sense as, for example, we would have to remove the requirement that a replacement tx has a higher feerate (Rule 6).
  - Changing BIP125 to match what we have. This doesn't make sense as it would be a significant change to a BIP years after it was finalized and already used as a spec to implement RBF in other places.
  - Document our policy as a new BIP and give it a number. This might make sense if we don't expect things to change a lot, and can be done as a next step.

ACKs for top commit:
  darosior:
    ACK 1dc03dda05
  ariard:
    ACK 1dc03dda
  t-bast:
    ACK 1dc03dda05

Tree-SHA512: a3adc2039ec5785892d230ec442e50f47f7062717392728152bbbe27ce1c564141f85253143f53cb44e1331cf47476d74f5d2f4b3cd873fc3433d7a0aa783e02
2022-08-22 10:35:26 +01:00
Andrew Chow
1bc8106d4c bumpfee: be able to bump fee of a tx with external inputs
In some cases, notably psbtbumpfee, it is okay, and potentially desired,
to be able to bump the fee of a transaction which contains external
inputs.
2022-08-19 11:27:01 -04:00
Andrew Chow
31dd3dc9e5 bumpfee: Clear scriptSigs and scriptWitnesses before calculated max size
The max size calculation expects some inputs to have empty scriptSigs
and witnesses, so we need to clear these before doing that calculation.
2022-08-19 11:27:01 -04:00
Andrew Chow
a0c3afb898 bumpfee: extract weights of external inputs when bumping fee
When bumping the fee of a transaction containing external inputs,
determine the weights of those inputs. Because signatures can have a
variable size, the script is executed with a special SignatureChecker
which will compute the total weight of the signatures in the transaction
and the weight if they were all maximum size signatures. This allows us
to compute the maximum weight of the input for use during coin
selection.
2022-08-19 11:27:01 -04:00