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;
@@ -238,6 +239,7 @@ pub trait CoinSelectionAlgorithm<D: Database>: std::fmt::Debug {
238
239
fee_rate : FeeRate ,
239
240
amount_needed : u64 ,
240
241
fee_amount : u64 ,
242
+ cost_of_change : Option < u64 > ,
241
243
) -> Result < CoinSelectionResult , Error > ;
242
244
}
243
245
@@ -257,6 +259,7 @@ impl<D: Database> CoinSelectionAlgorithm<D> for LargestFirstCoinSelection {
257
259
fee_rate : FeeRate ,
258
260
amount_needed : u64 ,
259
261
fee_amount : u64 ,
262
+ cost_of_change : Option < u64 > ,
260
263
) -> Result < CoinSelectionResult , Error > {
261
264
log:: debug!(
262
265
"amount_needed = `{}`, fee_amount = `{}`, fee_rate = `{:?}`" ,
@@ -295,6 +298,7 @@ impl<D: Database> CoinSelectionAlgorithm<D> for OldestFirstCoinSelection {
295
298
fee_rate : FeeRate ,
296
299
amount_needed : u64 ,
297
300
fee_amount : u64 ,
301
+ cost_of_change : Option < u64 > ,
298
302
) -> Result < CoinSelectionResult , Error > {
299
303
// query db and create a blockheight lookup table
300
304
let blockheights = optional_utxos
@@ -437,6 +441,7 @@ impl<D: Database> CoinSelectionAlgorithm<D> for BranchAndBoundCoinSelection {
437
441
fee_rate : FeeRate ,
438
442
amount_needed : u64 ,
439
443
fee_amount : u64 ,
444
+ cost_of_change : Option < u64 > ,
440
445
) -> Result < CoinSelectionResult , Error > {
441
446
// Mapping every (UTXO, usize) to an output group
442
447
let required_utxos: Vec < OutputGroup < ' _ > > = required_utxos
@@ -857,6 +862,7 @@ mod test {
857
862
FeeRate :: from_sat_per_vb ( 1.0 ) ,
858
863
250_000 ,
859
864
FEE_AMOUNT ,
865
+ None ,
860
866
)
861
867
. unwrap ( ) ;
862
868
@@ -878,6 +884,7 @@ mod test {
878
884
FeeRate :: from_sat_per_vb ( 1.0 ) ,
879
885
20_000 ,
880
886
FEE_AMOUNT ,
887
+ None ,
881
888
)
882
889
. unwrap ( ) ;
883
890
@@ -899,6 +906,7 @@ mod test {
899
906
FeeRate :: from_sat_per_vb ( 1.0 ) ,
900
907
20_000 ,
901
908
FEE_AMOUNT ,
909
+ None ,
902
910
)
903
911
. unwrap ( ) ;
904
912
@@ -921,6 +929,7 @@ mod test {
921
929
FeeRate :: from_sat_per_vb ( 1.0 ) ,
922
930
500_000 ,
923
931
FEE_AMOUNT ,
932
+ None ,
924
933
)
925
934
. unwrap ( ) ;
926
935
}
@@ -939,6 +948,7 @@ mod test {
939
948
FeeRate :: from_sat_per_vb ( 1000.0 ) ,
940
949
250_000 ,
941
950
FEE_AMOUNT ,
951
+ None ,
942
952
)
943
953
. unwrap ( ) ;
944
954
}
@@ -956,6 +966,7 @@ mod test {
956
966
FeeRate :: from_sat_per_vb ( 1.0 ) ,
957
967
180_000 ,
958
968
FEE_AMOUNT ,
969
+ None ,
959
970
)
960
971
. unwrap ( ) ;
961
972
@@ -1012,6 +1023,7 @@ mod test {
1012
1023
FeeRate :: from_sat_per_vb ( 1.0 ) ,
1013
1024
180_000 ,
1014
1025
FEE_AMOUNT ,
1026
+ None ,
1015
1027
)
1016
1028
. unwrap ( ) ;
1017
1029
@@ -1033,6 +1045,7 @@ mod test {
1033
1045
FeeRate :: from_sat_per_vb ( 1.0 ) ,
1034
1046
20_000 ,
1035
1047
FEE_AMOUNT ,
1048
+ None ,
1036
1049
)
1037
1050
. unwrap ( ) ;
1038
1051
@@ -1054,6 +1067,7 @@ mod test {
1054
1067
FeeRate :: from_sat_per_vb ( 1.0 ) ,
1055
1068
20_000 ,
1056
1069
FEE_AMOUNT ,
1070
+ None ,
1057
1071
)
1058
1072
. unwrap ( ) ;
1059
1073
@@ -1076,6 +1090,7 @@ mod test {
1076
1090
FeeRate :: from_sat_per_vb ( 1.0 ) ,
1077
1091
600_000 ,
1078
1092
FEE_AMOUNT ,
1093
+ None ,
1079
1094
)
1080
1095
. unwrap ( ) ;
1081
1096
}
@@ -1097,6 +1112,7 @@ mod test {
1097
1112
FeeRate :: from_sat_per_vb ( 1000.0 ) ,
1098
1113
amount_needed,
1099
1114
FEE_AMOUNT ,
1115
+ None ,
1100
1116
)
1101
1117
. unwrap ( ) ;
1102
1118
}
@@ -1117,6 +1133,7 @@ mod test {
1117
1133
FeeRate :: from_sat_per_vb ( 1.0 ) ,
1118
1134
250_000 ,
1119
1135
FEE_AMOUNT ,
1136
+ None ,
1120
1137
)
1121
1138
. unwrap ( ) ;
1122
1139
@@ -1138,6 +1155,7 @@ mod test {
1138
1155
FeeRate :: from_sat_per_vb ( 1.0 ) ,
1139
1156
20_000 ,
1140
1157
FEE_AMOUNT ,
1158
+ None ,
1141
1159
)
1142
1160
. unwrap ( ) ;
1143
1161
@@ -1159,6 +1177,7 @@ mod test {
1159
1177
FeeRate :: from_sat_per_vb ( 1.0 ) ,
1160
1178
299756 ,
1161
1179
FEE_AMOUNT ,
1180
+ None ,
1162
1181
)
1163
1182
. unwrap ( ) ;
1164
1183
@@ -1190,6 +1209,7 @@ mod test {
1190
1209
FeeRate :: from_sat_per_vb ( 1.0 ) ,
1191
1210
150_000 ,
1192
1211
FEE_AMOUNT ,
1212
+ None ,
1193
1213
)
1194
1214
. unwrap ( ) ;
1195
1215
@@ -1212,6 +1232,7 @@ mod test {
1212
1232
FeeRate :: from_sat_per_vb ( 1.0 ) ,
1213
1233
500_000 ,
1214
1234
FEE_AMOUNT ,
1235
+ None ,
1215
1236
)
1216
1237
. unwrap ( ) ;
1217
1238
}
@@ -1230,6 +1251,7 @@ mod test {
1230
1251
FeeRate :: from_sat_per_vb ( 1000.0 ) ,
1231
1252
250_000 ,
1232
1253
FEE_AMOUNT ,
1254
+ None ,
1233
1255
)
1234
1256
. unwrap ( ) ;
1235
1257
}
@@ -1247,6 +1269,7 @@ mod test {
1247
1269
FeeRate :: from_sat_per_vb ( 1.0 ) ,
1248
1270
99932 , // first utxo's effective value
1249
1271
0 ,
1272
+ None ,
1250
1273
)
1251
1274
. unwrap ( ) ;
1252
1275
@@ -1274,6 +1297,7 @@ mod test {
1274
1297
FeeRate :: from_sat_per_vb ( 0.0 ) ,
1275
1298
target_amount,
1276
1299
0 ,
1300
+ None ,
1277
1301
)
1278
1302
. unwrap ( ) ;
1279
1303
assert_eq ! ( result. selected_amount( ) , target_amount) ;
0 commit comments