@@ -320,7 +320,6 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
320
320
coin_selection_params_bnb.m_change_fee = coin_selection_params_bnb.m_effective_feerate .GetFee (coin_selection_params_bnb.change_output_size );
321
321
coin_selection_params_bnb.m_cost_of_change = coin_selection_params_bnb.m_effective_feerate .GetFee (coin_selection_params_bnb.change_spend_size ) + coin_selection_params_bnb.m_change_fee ;
322
322
coin_selection_params_bnb.min_viable_change = coin_selection_params_bnb.m_effective_feerate .GetFee (coin_selection_params_bnb.change_spend_size );
323
- coin_selection_params_bnb.m_subtract_fee_outputs = true ;
324
323
325
324
{
326
325
std::unique_ptr<CWallet> wallet = NewWallet (m_node);
@@ -345,6 +344,7 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
345
344
346
345
CoinsResult available_coins;
347
346
347
+ coin_selection_params_bnb.m_effective_feerate = CFeeRate (0 );
348
348
add_coin (available_coins, *wallet, 5 * CENT, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
349
349
add_coin (available_coins, *wallet, 3 * CENT, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
350
350
add_coin (available_coins, *wallet, 2 * CENT, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
@@ -355,7 +355,7 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
355
355
PreSelectedInputs selected_input;
356
356
selected_input.Insert (select_coin, coin_selection_params_bnb.m_subtract_fee_outputs );
357
357
available_coins.Erase ({available_coins.coins [OutputType::BECH32].begin ()->outpoint });
358
- coin_selection_params_bnb. m_effective_feerate = CFeeRate ( 0 );
358
+
359
359
LOCK (wallet->cs_wallet );
360
360
const auto result10 = SelectCoins (*wallet, available_coins, selected_input, 10 * CENT, coin_control, coin_selection_params_bnb);
361
361
BOOST_CHECK (result10);
@@ -370,12 +370,14 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
370
370
coin_selection_params_bnb.m_effective_feerate = CFeeRate (5000 );
371
371
coin_selection_params_bnb.m_long_term_feerate = CFeeRate (3000 );
372
372
373
- add_coin (available_coins, *wallet, 10 * CENT, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
374
- add_coin (available_coins, *wallet, 9 * CENT, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
375
- add_coin (available_coins, *wallet, 1 * CENT, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
373
+ // Add selectable outputs, increasing their raw amounts by their input fee to make the effective value equal to the raw amount
374
+ CAmount input_fee = coin_selection_params_bnb.m_effective_feerate .GetFee (/* num_bytes=*/ 68 ); // bech32 input size (default test output type)
375
+ add_coin (available_coins, *wallet, 10 * CENT + input_fee, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
376
+ add_coin (available_coins, *wallet, 9 * CENT + input_fee, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
377
+ add_coin (available_coins, *wallet, 1 * CENT + input_fee, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
376
378
377
379
expected_result.Clear ();
378
- add_coin (10 * CENT, 2 , expected_result);
380
+ add_coin (10 * CENT + input_fee , 2 , expected_result);
379
381
CCoinControl coin_control;
380
382
const auto result11 = SelectCoins (*wallet, available_coins, /* pre_set_inputs=*/ {}, 10 * CENT, coin_control, coin_selection_params_bnb);
381
383
BOOST_CHECK (EquivalentResult (expected_result, *result11));
@@ -385,13 +387,15 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
385
387
coin_selection_params_bnb.m_effective_feerate = CFeeRate (3000 );
386
388
coin_selection_params_bnb.m_long_term_feerate = CFeeRate (5000 );
387
389
388
- add_coin (available_coins, *wallet, 10 * CENT, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
389
- add_coin (available_coins, *wallet, 9 * CENT, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
390
- add_coin (available_coins, *wallet, 1 * CENT, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
390
+ // Add selectable outputs, increasing their raw amounts by their input fee to make the effective value equal to the raw amount
391
+ input_fee = coin_selection_params_bnb.m_effective_feerate .GetFee (/* num_bytes=*/ 68 ); // bech32 input size (default test output type)
392
+ add_coin (available_coins, *wallet, 10 * CENT + input_fee, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
393
+ add_coin (available_coins, *wallet, 9 * CENT + input_fee, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
394
+ add_coin (available_coins, *wallet, 1 * CENT + input_fee, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
391
395
392
396
expected_result.Clear ();
393
- add_coin (9 * CENT, 2 , expected_result);
394
- add_coin (1 * CENT, 2 , expected_result);
397
+ add_coin (9 * CENT + input_fee , 2 , expected_result);
398
+ add_coin (1 * CENT + input_fee , 2 , expected_result);
395
399
const auto result12 = SelectCoins (*wallet, available_coins, /* pre_set_inputs=*/ {}, 10 * CENT, coin_control, coin_selection_params_bnb);
396
400
BOOST_CHECK (EquivalentResult (expected_result, *result12));
397
401
available_coins.Clear ();
@@ -400,13 +404,15 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
400
404
coin_selection_params_bnb.m_effective_feerate = CFeeRate (5000 );
401
405
coin_selection_params_bnb.m_long_term_feerate = CFeeRate (3000 );
402
406
403
- add_coin (available_coins, *wallet, 10 * CENT, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
404
- add_coin (available_coins, *wallet, 9 * CENT, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
405
- add_coin (available_coins, *wallet, 1 * CENT, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
407
+ // Add selectable outputs, increasing their raw amounts by their input fee to make the effective value equal to the raw amount
408
+ input_fee = coin_selection_params_bnb.m_effective_feerate .GetFee (/* num_bytes=*/ 68 ); // bech32 input size (default test output type)
409
+ add_coin (available_coins, *wallet, 10 * CENT + input_fee, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
410
+ add_coin (available_coins, *wallet, 9 * CENT + input_fee, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
411
+ add_coin (available_coins, *wallet, 1 * CENT + input_fee, coin_selection_params_bnb.m_effective_feerate , 6 * 24 , false , 0 , true );
406
412
407
413
expected_result.Clear ();
408
- add_coin (9 * CENT, 2 , expected_result);
409
- add_coin (1 * CENT, 2 , expected_result);
414
+ add_coin (9 * CENT + input_fee , 2 , expected_result);
415
+ add_coin (1 * CENT + input_fee , 2 , expected_result);
410
416
coin_control.m_allow_other_inputs = true ;
411
417
COutput select_coin = available_coins.All ().at (1 ); // pre select 9 coin
412
418
coin_control.Select (select_coin.outpoint );
0 commit comments