bitcoin/src/wallet/test
Andrew Chow 2bd9aa5a44
Merge bitcoin/bitcoin#25647: wallet: return change from SelectionResult
4fef534428 wallet: use GetChange() when computing waste (S3RK)
87e0ef9031 wallet: use GetChange() in tx building (S3RK)
15e97a6886 wallet: add SelectionResult::GetChange (S3RK)
72cad28da0 wallet: calculate and store min_viable_change (S3RK)
e3210a7225 wallet: account for preselected inputs in target (S3RK)
f8e796348b wallet: add SelectionResult::Merge (S3RK)
06f558e4e2 wallet: accurate SelectionResult::m_target (S3RK)
c8cf08ea74 wallet: ensure m_min_change_target always covers change fee (S3RK)

Pull request description:

  Benefits:
  1. more accurate waste calculation for knapsack. Waste calculation is now consistent with tx building code. Before we always assumed change for knapsack even when the solution is changeless4.
  2. simpler tx building code. Only create change output when it's needed
  3. makes it easier to correctly account for fees for CPFP inputs (should be done in a follow up)

  In the first three commits we fix the code to accurately track selection target in `SelectionResult::m_target`
  Then we introduce new variable `min_change` that represents the minimum viable change amount
  Then we introduce `SelectionResult::GetChange()` which incapsulates dropping change for fee logic and uses correct values of `SelectionResult::m_target`
  Then we use `SelectionResult::GetChange()` in both tx building and waste calculation code

  This PR is a refactoring and shouldn't change the behaviour.
  There is only one known small change (arguably a bug fix). Before we dropped change output if it's smaller than `cost_of_change` after paying change fees. This is incorrect as `cost_of_change` already includes `change_fee`.

ACKs for top commit:
  achow101:
    ACK 4fef534428
  Xekyo:
    crACK 4fef534428
  furszy:
    Code review ACK 4fef5344
  w0xlt:
    ACK 4fef534428

Tree-SHA512: 31a7455d4129bc39a444da0f16ad478d690d4d9627b2b8fdb5605facc6488171926bf02f5d7d9a545b2b59efafcf5bb3d404005e4da15c7b44b3f7d441afb941
2022-08-22 12:42:36 -04:00
..
fuzz wallet: use GetChange() when computing waste 2022-08-15 09:35:20 +02:00
availablecoins_tests.cpp Merge bitcoin/bitcoin#25077: Fix chain tip data race and corrupt rest response 2022-08-17 15:04:14 +01:00
coinselector_tests.cpp Merge bitcoin/bitcoin#25647: wallet: return change from SelectionResult 2022-08-22 12:42:36 -04:00
db_tests.cpp Disallow more unsafe string->path conversions allowed by path append operators 2022-04-21 12:01:00 -05:00
feebumper_tests.cpp wallet, tests: Test bumpfee's max input weight calculation 2022-08-19 14:37:36 -04:00
init_test_fixture.cpp Disallow more unsafe string->path conversions allowed by path append operators 2022-04-21 12:01:00 -05:00
init_test_fixture.h Add src/wallet/* code to wallet:: namespace 2022-01-06 22:14:16 -05:00
init_tests.cpp Replace use of ArgsManager with DatabaseOptions 2022-03-16 08:26:28 +01:00
ismine_tests.cpp Add src/wallet/* code to wallet:: namespace 2022-01-06 22:14:16 -05:00
psbt_wallet_tests.cpp doc: Delete old line of code that was commented out 2022-03-16 19:33:52 +00:00
scriptpubkeyman_tests.cpp Add src/wallet/* code to wallet:: namespace 2022-01-06 22:14:16 -05:00
spend_tests.cpp refactor: Add lock annotations to Active* methods 2022-08-16 17:26:40 +02:00
util.cpp wallet: Save wallet scan progress 2022-06-23 17:13:40 -03:00
util.h Add src/wallet/* code to wallet:: namespace 2022-01-06 22:14:16 -05:00
wallet_crypto_tests.cpp refactor: use Span in random.* 2022-03-23 17:36:33 -05:00
wallet_test_fixture.cpp wallet: move Assert() check into constructor 2022-03-30 17:07:28 +10:00
wallet_test_fixture.h wallet: move Assert() check into constructor 2022-03-30 17:07:28 +10:00
wallet_tests.cpp Merge bitcoin/bitcoin#25077: Fix chain tip data race and corrupt rest response 2022-08-17 15:04:14 +01:00
wallet_transaction_tests.cpp Add src/wallet/* code to wallet:: namespace 2022-01-06 22:14:16 -05:00
walletdb_tests.cpp Add src/wallet/* code to wallet:: namespace 2022-01-06 22:14:16 -05:00