@@ -466,7 +466,7 @@ where
466
466
} ;
467
467
468
468
let target = bdk_coin_select:: Target {
469
- feerate : bdk_coin_select:: FeeRate :: from_sat_per_vb ( 1 .0) ,
469
+ feerate : bdk_coin_select:: FeeRate :: from_sat_per_vb ( 5 .0) ,
470
470
min_fee : 0 ,
471
471
value : transaction. output . iter ( ) . map ( |txo| txo. value ) . sum ( ) ,
472
472
} ;
@@ -489,8 +489,12 @@ where
489
489
value : 0 ,
490
490
spend_weight : change_plan. expected_weight ( ) as u32 ,
491
491
} ;
492
- let long_term_feerate = bdk_coin_select:: FeeRate :: from_sat_per_wu ( 0.25 ) ;
493
- let drain_policy = bdk_coin_select:: change_policy:: min_waste ( drain, long_term_feerate) ;
492
+ let long_term_feerate = bdk_coin_select:: FeeRate :: from_sat_per_vb ( 1.0 ) ;
493
+ let drain_policy = bdk_coin_select:: change_policy:: min_value_and_waste (
494
+ drain,
495
+ change_script. dust_value ( ) . to_sat ( ) ,
496
+ long_term_feerate,
497
+ ) ;
494
498
495
499
let mut selector = CoinSelector :: new ( & candidates, transaction. weight ( ) . to_wu ( ) as u32 ) ;
496
500
match cs_algorithm {
@@ -503,16 +507,10 @@ where
503
507
let ( final_selection, _score) = selector
504
508
. branch_and_bound ( metric)
505
509
. take ( 50_000 )
506
- // we only process viable solutions
510
+ // skip exclusion branches (as they are not scored)
507
511
. flatten ( )
508
- . reduce ( |( best_sol, best_score) , ( curr_sol, curr_score) | {
509
- // we are reducing waste
510
- if curr_score < best_score {
511
- ( curr_sol, curr_score)
512
- } else {
513
- ( best_sol, best_score)
514
- }
515
- } )
512
+ // the last result is always the best score
513
+ . last ( )
516
514
. ok_or ( anyhow:: format_err!( "no bnb solution found" ) ) ?;
517
515
selector = final_selection;
518
516
}
0 commit comments