42
42
//! fee_rate: FeeRate,
43
43
//! amount_needed: u64,
44
44
//! fee_amount: u64,
45
+ //! cost_of_change: Option<u64>,
45
46
//! ) -> Result<CoinSelectionResult, bdk::Error> {
46
47
//! let mut selected_amount = 0;
47
48
//! let mut additional_weight = 0;
@@ -237,6 +238,7 @@ pub trait CoinSelectionAlgorithm<D: Database>: std::fmt::Debug {
237
238
fee_rate : FeeRate ,
238
239
amount_needed : u64 ,
239
240
fee_amount : u64 ,
241
+ cost_of_change : Option < u64 > ,
240
242
) -> Result < CoinSelectionResult , Error > ;
241
243
}
242
244
@@ -256,6 +258,7 @@ impl<D: Database> CoinSelectionAlgorithm<D> for LargestFirstCoinSelection {
256
258
fee_rate : FeeRate ,
257
259
amount_needed : u64 ,
258
260
mut fee_amount : u64 ,
261
+ cost_of_change : Option < u64 > ,
259
262
) -> Result < CoinSelectionResult , Error > {
260
263
log:: debug!(
261
264
"amount_needed = `{}`, fee_amount = `{}`, fee_rate = `{:?}`" ,
@@ -370,6 +373,7 @@ impl<D: Database> CoinSelectionAlgorithm<D> for BranchAndBoundCoinSelection {
370
373
fee_rate : FeeRate ,
371
374
amount_needed : u64 ,
372
375
fee_amount : u64 ,
376
+ cost_of_change : Option < u64 > ,
373
377
) -> Result < CoinSelectionResult , Error > {
374
378
// Mapping every (UTXO, usize) to an output group
375
379
let required_utxos: Vec < OutputGroup < ' _ > > = required_utxos
@@ -735,6 +739,7 @@ mod test {
735
739
FeeRate :: from_sat_per_vb ( 1.0 ) ,
736
740
250_000 ,
737
741
FEE_AMOUNT ,
742
+ None ,
738
743
)
739
744
. unwrap ( ) ;
740
745
@@ -756,6 +761,7 @@ mod test {
756
761
FeeRate :: from_sat_per_vb ( 1.0 ) ,
757
762
20_000 ,
758
763
FEE_AMOUNT ,
764
+ None ,
759
765
)
760
766
. unwrap ( ) ;
761
767
@@ -777,6 +783,7 @@ mod test {
777
783
FeeRate :: from_sat_per_vb ( 1.0 ) ,
778
784
20_000 ,
779
785
FEE_AMOUNT ,
786
+ None ,
780
787
)
781
788
. unwrap ( ) ;
782
789
@@ -799,6 +806,7 @@ mod test {
799
806
FeeRate :: from_sat_per_vb ( 1.0 ) ,
800
807
500_000 ,
801
808
FEE_AMOUNT ,
809
+ None ,
802
810
)
803
811
. unwrap ( ) ;
804
812
}
@@ -817,6 +825,7 @@ mod test {
817
825
FeeRate :: from_sat_per_vb ( 1000.0 ) ,
818
826
250_000 ,
819
827
FEE_AMOUNT ,
828
+ None ,
820
829
)
821
830
. unwrap ( ) ;
822
831
}
@@ -837,6 +846,7 @@ mod test {
837
846
FeeRate :: from_sat_per_vb ( 1.0 ) ,
838
847
250_000 ,
839
848
FEE_AMOUNT ,
849
+ None ,
840
850
)
841
851
. unwrap ( ) ;
842
852
@@ -858,6 +868,7 @@ mod test {
858
868
FeeRate :: from_sat_per_vb ( 1.0 ) ,
859
869
20_000 ,
860
870
FEE_AMOUNT ,
871
+ None ,
861
872
)
862
873
. unwrap ( ) ;
863
874
@@ -879,6 +890,7 @@ mod test {
879
890
FeeRate :: from_sat_per_vb ( 1.0 ) ,
880
891
299756 ,
881
892
FEE_AMOUNT ,
893
+ None ,
882
894
)
883
895
. unwrap ( ) ;
884
896
@@ -910,6 +922,7 @@ mod test {
910
922
FeeRate :: from_sat_per_vb ( 1.0 ) ,
911
923
150_000 ,
912
924
FEE_AMOUNT ,
925
+ None ,
913
926
)
914
927
. unwrap ( ) ;
915
928
@@ -932,6 +945,7 @@ mod test {
932
945
FeeRate :: from_sat_per_vb ( 1.0 ) ,
933
946
500_000 ,
934
947
FEE_AMOUNT ,
948
+ None ,
935
949
)
936
950
. unwrap ( ) ;
937
951
}
@@ -950,6 +964,7 @@ mod test {
950
964
FeeRate :: from_sat_per_vb ( 1000.0 ) ,
951
965
250_000 ,
952
966
FEE_AMOUNT ,
967
+ None ,
953
968
)
954
969
. unwrap ( ) ;
955
970
}
@@ -967,6 +982,7 @@ mod test {
967
982
FeeRate :: from_sat_per_vb ( 1.0 ) ,
968
983
99932 , // first utxo's effective value
969
984
0 ,
985
+ None ,
970
986
)
971
987
. unwrap ( ) ;
972
988
@@ -994,6 +1010,7 @@ mod test {
994
1010
FeeRate :: from_sat_per_vb ( 0.0 ) ,
995
1011
target_amount,
996
1012
0 ,
1013
+ None ,
997
1014
)
998
1015
. unwrap ( ) ;
999
1016
assert_eq ! ( result. selected_amount( ) , target_amount) ;
0 commit comments