Commit graph

125 commits

Author SHA1 Message Date
Tom Trevethan
bff78b8a4e Merge 4ea3a8b71d into merged_master (Bitcoin PR bitcoin/bitcoin#25806) 2025-04-09 17:17:19 +00:00
Byron Hambly
01371bb9e6 Merge 3f8591d46b into merged_master (Bitcoin PR bitcoin/bitcoin#26661) 2025-04-01 10:04:18 +02:00
Byron Hambly
759f977d45 Merge 7bb07bf8bd into merged_master (Bitcoin PR bitcoin/bitcoin#25932) 2025-03-31 18:27:53 +02:00
Byron Hambly
b4405ba453 Merge e9262ea32a into merged_master (Bitcoin PR bitcoin/bitcoin#26750) 2025-03-31 16:37:52 +02:00
Tom Trevethan
0dcc75c6ae Merge ef744c03e5 into merged_master (Bitcoin PR bitcoin/bitcoin#25729) 2025-03-24 15:11:44 +00:00
Tom Trevethan
9d59cc40da Merge f0c4807a6a into merged_master (Bitcoin PR bitcoin/bitcoin#26560) 2025-03-13 14:07:01 +00:00
Byron Hambly
7c5f4914fb
Merge f37bd15d47 into merged_master (Bitcoin PR bitcoin/bitcoin#25685)
FIXME introduces a new regression test to reproduce the issue commented
out in the confidential transaction functional test
2025-02-27 09:55:45 +02:00
Byron Hambly
625932b53a
coinselection: fix assert error in getselectionwaste
fix for intermittent assertion error in getselectionwaste
introduced in f46275d011 as part of merge
for bitcoin/bitcoin#25647

the assertion would trigger in a fundrawtransaction call in
feature_confidential_transactions.py where the transaction inputs
included a non-policy asset.

during the loop in getselectionwaste, if the non-policy input waste was
calculated first the assertion would be triggered because
selected_effective_value has not yet met the selection target, because
non-policy coins have 0 effective value

the fix changed the assertion to an if statement, only adding to the
waste metric when selected_effective_value meets the target.
2024-12-20 12:35:09 +02:00
Byron Hambly
8499b13762
lint: fix lint issues 2024-12-03 14:02:33 +02:00
Byron Hambly
f46275d011 Merge 2bd9aa5a44 into merged_master (Bitcoin PR bitcoin/bitcoin#25647)
This was a difficult merge as always with diffs that touch spend.cpp and
createtransactioninternal. Added a FIXME NB for fundrawtransaction with
external outputs, which MUST be fixed before a new release.
2024-11-21 14:29:21 +02:00
James Dorfman
9447c50efd Merge cc22bd7f70 into merged_master (Bitcoin PR bitcoin/bitcoin#25495) 2024-09-19 19:05:51 +00:00
James Dorfman
d94eb65165 Merge 4901631dac into merged_master (Bitcoin PR bitcoin/bitcoin#25202) 2024-09-06 06:56:17 +00:00
James Dorfman
0be947179f Fix failing unit + functional tests for merge of bitcoin/bitcoin#25083 (the previous commit) 2024-09-06 05:18:08 +00:00
James Dorfman
57830cb012 Merge 3368f84c43 into merged_master (Bitcoin PR bitcoin/bitcoin#25083)
I'm not certain about the elements-specific changes to the `COutput`
constructor in src/wallet/coinselection.cpp. Please double check those.
2024-08-20 03:56:11 +00:00
James Dorfman
249473e319 Merge 260ede1d99 into merged_master (Bitcoin PR bitcoin/bitcoin#24644) 2024-08-02 20:43:21 +00:00
James Dorfman
77b849f4c6 Merge 20c5630f8c into merged_master (Elements PR #1277) 2024-05-24 06:39:06 +00:00
James Dorfman
641df02a8d Merge 6d5771ba07 into merged_master (Bitcoin PR bitcoin/bitcoin#24494)
Please review carefully: this touches the wallet code, and I'm not sure
I adapted the new change metrics to work correctly for multi-asset.
2024-04-10 05:12:50 +00:00
James Dorfman
52a17a3490 Merge 6b1f93700c into merged_master (Bitcoin PR bitcoin/bitcoin#24666) 2024-03-19 22:09:33 +00:00
James Dorfman
17d45cdb7d Merge 3740cdd125 into merged_master (Bitcoin PR bitcoin/bitcoin#24091) 2024-03-19 06:35:30 +00:00
James Dorfman
cc32b91393 Merge 3ab96f2945 into merged_master (Bitcoin PR bitcoin/bitcoin#24560) 2024-01-11 16:36:11 +00:00
James Dorfman
04cba29faf coinselection: fail KnapsackSolver if the policy asset doesn't have a solution 2023-10-23 15:55:03 +00:00
James Dorfman
5b72ae23af
coinselection: fail if each non-policy asset doesn't have a solution 2023-10-23 16:51:09 +02:00
goatpig
2e7125c3c8
fix: assert failure on non-policy asset consolidation in CreateTransactionInternal
Squash of 2 commits from https://github.com/ElementsProject/elements/pull/1258

- correct application of non_policy_effective_value to policy output in KnapsackSolver
- replace bad fee amount assert with error log and graceful failure in CWallet::CreateTransactionInternal

(cherry picked from commit 0f92a38254)

Update src/wallet/coinselection.cpp

Co-authored-by: Byron Hambly <byron@hambly.dev>
(cherry picked from commit cf0f56107b)
2023-10-18 16:30:41 +02:00
Byron Hambly
93ade4baa3 Merge e66630cc87 into merged_master (Bitcoin PR bitcoin/bitcoin#13226) 2023-10-16 13:12:42 +00:00
Byron Hambly
40e776c576 Merge c109e7d51c into merged_master (Bitcoin PR bitcoin/bitcoin#24530) 2023-10-14 17:11:39 +00: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
49326aea37 Merge ab879d9885 into merged_master (Bitcoin PR bitcoin/bitcoin#23762) 2023-06-13 09:06:27 +00:00
Byron Hambly
e3ab195851 Merge c840ab0231 into merged_master (Bitcoin PR bitcoin/bitcoin#22019)
This was a complicated merge that had to be modified from upstream to work with multi-assets,
so it should be reviewed carefully
2023-06-12 12:36:04 +00:00
Byron Hambly
b2aeec482f Merge b692e61d61 into merged_master (Bitcoin PR bitcoin/bitcoin#23254) 2023-06-06 09:19:04 +00:00
Byron Hambly
498907a233 Merge 816e15ee81 into merged_master (Bitcoin PR bitcoin/bitcoin#22951) 2023-05-09 11:50:39 +00:00
Byron Hambly
ceeb3783ee Merge 1cf7fb9fd6 into merged_master (Bitcoin PR bitcoin/bitcoin#23104) 2023-04-28 12:33:54 +00:00
James Dorfman
a28e1a34b5 Merge d5d0a5c604 into merged_master (Bitcoin PR bitcoin/bitcoin#17526) 2023-04-26 04:23:36 +00:00
James Dorfman
103069c46c fixes for Bitcoin PR bitcoin/bitcoin#22100
comments out one failing assertion in wallet_tests unit test
and one failing assertion in rpc_fundrawtransaction.py
2023-04-20 12:27:33 +00:00
Byron Hambly
0ead54fdc7 Merge 70676e40d8 into merged_master (Bitcoin PR bitcoin/bitcoin#22009) 2023-04-12 20:36:48 +00:00
Byron Hambly
0b24fc8b89 Merge 820129aee9 into merged_master (Bitcoin PR bitcoin/bitcoin#22686) 2023-04-09 08:57:30 +00:00
furszy
bd91ed1cb2
wallet: unify outputs grouping process
The 'GroupOutputs()' function performs the same
calculations for only-positive and mixed groups,
the only difference is that when we look for
only-positive groups, we discard negative utxos.

So, instead of wasting resources calling GroupOutputs()
for positive-only first, then call it again to include
the negative ones in the result, we can execute
GroupOutputs() only once, including in the response
both group types (positive-only and mixed).
2023-03-06 09:45:40 -03:00
furszy
461f0821a2
refactor: make OutputGroup::m_outputs field a vector of shared_ptr
Initial steps towards sharing COutput instances across all possible
OutputGroups (instead of copying them time after time).
2023-03-06 09:45:40 -03:00
furszy
06ec8f9928
wallet: make OutputGroup "positive_only" filter explicit
And not hide it inside the `OutputGroup::Insert` method.
This method does not return anything if insertion fails.

We can know before calling `Insert` whether the coin
will be accepted or not.
2023-03-03 18:18:03 -03:00
Andrew Chow
3f8591d46b
Merge bitcoin/bitcoin#26661: wallet: Coin Selection, return accurate error messages
76dc547ee7 gui: create tx, launch error dialog if backend throws runtime_error (furszy)
f4d79477ff wallet: coin selection, add duplicated inputs checks (furszy)
0aa065b14e wallet: return accurate error messages from Coin Selection (furszy)
7e8340ab1a wallet: make SelectCoins flow return util::Result (furszy)
e5e147fe97 wallet: refactor eight consecutive 'AttemptSelection' calls into a loop (furszy)

Pull request description:

  Work decoupled from #25806, which cleanup and improves the Coin Selection flow further.

  Adding the capability to propagate specific error messages from the Coin Selection process to the user.
  Instead of always returning the general "Insufficient funds" message which is not always accurate to what happened internally.
  Letting us instruct the user how to proceed under certain circumstances.

  The following error messages were added:

  1) If the selection result exceeds the maximum transaction weight,
     we now will return:
  -> "The inputs size exceeds the maximum weight. Please try sending
  a smaller amount or manually consolidating your wallet's UTXOs".

  2) If the user pre-selected inputs and disallowed the automatic coin
     selection process (no other inputs are allowed), we now will
     return:
  -> "The preselected coins total amount does not cover the transaction
  target. Please allow other inputs to be automatically selected or include
  more coins manually".

  3) The double-counted preset inputs during Coin Selection error will now
  throw an "internal bug detected" message instead of crashing the node.

  The essence of this work comes from several comments:
  1. https://github.com/bitcoin/bitcoin/pull/26560#discussion_r1037395665
  2. https://github.com/bitcoin/bitcoin/pull/25729#discussion_r940619491
  3. https://github.com/bitcoin/bitcoin/pull/25269#pullrequestreview-1135240825
  4. https://github.com/bitcoin/bitcoin/issues/23144 (which is connected to #24845)

ACKs for top commit:
  ishaanam:
    crACK 76dc547ee7
  achow101:
    ACK 76dc547ee7
  aureleoules:
    ACK 76dc547ee7
  theStack:
    ACK 76dc547ee7 🌇

Tree-SHA512: 9de30792d7a5849cae77747aa978e70390b66ee9d082779a56088a024f82e725b0af050e6603aece0ac8229f6d73bc471ba97b4ab69dc7eddf419f5f56ae89a5
2023-01-03 18:53:36 -05:00
Andrew Chow
7bb07bf8bd
Merge bitcoin/bitcoin#25932: refactor: Simplify backtrack logic
81d4a2b14f refactor: Move feerate comparison invariant outside of the loop (yancy)
365aca4045 refactor: Simplify feerate comparison statement (yancy)

Pull request description:

  This is a small nit, however I think it's more understandable to write:

  `utxo_pool.at(0).fee > utxo_pool.at(0).long_term_fee`

  vs

  `(utxo_pool.at(0).fee - utxo_pool.at(0).long_term_fee) > 0`

ACKs for top commit:
  Xekyo:
    ACK 81d4a2b14f
  achow101:
    ACK 81d4a2b14f
  aureleoules:
    ACK 81d4a2b14f

Tree-SHA512: 3e89377989c36716b53114fe40178261671dde5688075fab1c21ec173ac310f8c84ed6af90354d7c329176cb7262dfcaa7191fd19847d3b7147a9a10c3e31176
2023-01-03 12:26:19 -05: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
furszy
f4d79477ff
wallet: coin selection, add duplicated inputs checks
As no process should be able to trigger this error
using the regular transaction creation process, throw
a runtime_error if happens to tell users/devs to
report the bug if happens.
2022-12-21 23:20:16 -03:00
Aurèle Oulès
6b563cae92
wallet: Check max tx weight in coin selector
Co-authored-by: Andrew Chow <github@achow101.com>
2022-12-05 19:32:11 +01:00
S3RK
3282fad599
wallet: add assert to SelectionResult::Merge for safety 2022-12-02 12:39:15 -03:00
furszy
295852f619
wallet: encapsulate pre-selected-inputs lookup into its own function
First step towards decoupling the pre-selected-inputs fetching functionality
from `SelectCoins`. Which, will let us not waste resources calculating the
available coins if one of the pre-set inputs has an error.

(right now, if one of the pre-set inputs is invalid, we first walk through
the entire wallet txes map just to end up failing right after it finish)
2022-10-26 15:52:35 -03:00
yancy
81d4a2b14f refactor: Move feerate comparison invariant outside of the loop 2022-09-17 10:07:51 +02:00
yancy
365aca4045 refactor: Simplify feerate comparison statement 2022-09-16 14:29:05 +02:00
S3RK
4fef534428 wallet: use GetChange() when computing waste 2022-08-15 09:35:20 +02:00
S3RK
15e97a6886 wallet: add SelectionResult::GetChange 2022-08-15 09:35:20 +02:00