Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 6564c96

Browse files
committedApr 25, 2022
Add cost_of_change to coin_select parameters
1 parent 4c3cef7 commit 6564c96

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed
 

‎src/wallet/coin_selection.rs

+24
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
//! fee_rate: FeeRate,
4343
//! amount_needed: u64,
4444
//! fee_amount: u64,
45+
//! cost_of_change: Option<u64>,
4546
//! ) -> Result<CoinSelectionResult, bdk::Error> {
4647
//! let mut selected_amount = 0;
4748
//! let mut additional_weight = 0;
@@ -238,6 +239,7 @@ pub trait CoinSelectionAlgorithm<D: Database>: std::fmt::Debug {
238239
fee_rate: FeeRate,
239240
amount_needed: u64,
240241
fee_amount: u64,
242+
cost_of_change: Option<u64>,
241243
) -> Result<CoinSelectionResult, Error>;
242244
}
243245

@@ -257,6 +259,7 @@ impl<D: Database> CoinSelectionAlgorithm<D> for LargestFirstCoinSelection {
257259
fee_rate: FeeRate,
258260
amount_needed: u64,
259261
fee_amount: u64,
262+
cost_of_change: Option<u64>,
260263
) -> Result<CoinSelectionResult, Error> {
261264
log::debug!(
262265
"amount_needed = `{}`, fee_amount = `{}`, fee_rate = `{:?}`",
@@ -295,6 +298,7 @@ impl<D: Database> CoinSelectionAlgorithm<D> for OldestFirstCoinSelection {
295298
fee_rate: FeeRate,
296299
amount_needed: u64,
297300
fee_amount: u64,
301+
cost_of_change: Option<u64>,
298302
) -> Result<CoinSelectionResult, Error> {
299303
// query db and create a blockheight lookup table
300304
let blockheights = optional_utxos
@@ -437,6 +441,7 @@ impl<D: Database> CoinSelectionAlgorithm<D> for BranchAndBoundCoinSelection {
437441
fee_rate: FeeRate,
438442
amount_needed: u64,
439443
fee_amount: u64,
444+
cost_of_change: Option<u64>,
440445
) -> Result<CoinSelectionResult, Error> {
441446
// Mapping every (UTXO, usize) to an output group
442447
let required_utxos: Vec<OutputGroup<'_>> = required_utxos
@@ -857,6 +862,7 @@ mod test {
857862
FeeRate::from_sat_per_vb(1.0),
858863
250_000,
859864
FEE_AMOUNT,
865+
None,
860866
)
861867
.unwrap();
862868

@@ -878,6 +884,7 @@ mod test {
878884
FeeRate::from_sat_per_vb(1.0),
879885
20_000,
880886
FEE_AMOUNT,
887+
None,
881888
)
882889
.unwrap();
883890

@@ -899,6 +906,7 @@ mod test {
899906
FeeRate::from_sat_per_vb(1.0),
900907
20_000,
901908
FEE_AMOUNT,
909+
None,
902910
)
903911
.unwrap();
904912

@@ -921,6 +929,7 @@ mod test {
921929
FeeRate::from_sat_per_vb(1.0),
922930
500_000,
923931
FEE_AMOUNT,
932+
None,
924933
)
925934
.unwrap();
926935
}
@@ -939,6 +948,7 @@ mod test {
939948
FeeRate::from_sat_per_vb(1000.0),
940949
250_000,
941950
FEE_AMOUNT,
951+
None,
942952
)
943953
.unwrap();
944954
}
@@ -956,6 +966,7 @@ mod test {
956966
FeeRate::from_sat_per_vb(1.0),
957967
180_000,
958968
FEE_AMOUNT,
969+
None,
959970
)
960971
.unwrap();
961972

@@ -1012,6 +1023,7 @@ mod test {
10121023
FeeRate::from_sat_per_vb(1.0),
10131024
180_000,
10141025
FEE_AMOUNT,
1026+
None,
10151027
)
10161028
.unwrap();
10171029

@@ -1033,6 +1045,7 @@ mod test {
10331045
FeeRate::from_sat_per_vb(1.0),
10341046
20_000,
10351047
FEE_AMOUNT,
1048+
None,
10361049
)
10371050
.unwrap();
10381051

@@ -1054,6 +1067,7 @@ mod test {
10541067
FeeRate::from_sat_per_vb(1.0),
10551068
20_000,
10561069
FEE_AMOUNT,
1070+
None,
10571071
)
10581072
.unwrap();
10591073

@@ -1076,6 +1090,7 @@ mod test {
10761090
FeeRate::from_sat_per_vb(1.0),
10771091
600_000,
10781092
FEE_AMOUNT,
1093+
None,
10791094
)
10801095
.unwrap();
10811096
}
@@ -1097,6 +1112,7 @@ mod test {
10971112
FeeRate::from_sat_per_vb(1000.0),
10981113
amount_needed,
10991114
FEE_AMOUNT,
1115+
None,
11001116
)
11011117
.unwrap();
11021118
}
@@ -1117,6 +1133,7 @@ mod test {
11171133
FeeRate::from_sat_per_vb(1.0),
11181134
250_000,
11191135
FEE_AMOUNT,
1136+
None,
11201137
)
11211138
.unwrap();
11221139

@@ -1138,6 +1155,7 @@ mod test {
11381155
FeeRate::from_sat_per_vb(1.0),
11391156
20_000,
11401157
FEE_AMOUNT,
1158+
None,
11411159
)
11421160
.unwrap();
11431161

@@ -1159,6 +1177,7 @@ mod test {
11591177
FeeRate::from_sat_per_vb(1.0),
11601178
299756,
11611179
FEE_AMOUNT,
1180+
None,
11621181
)
11631182
.unwrap();
11641183

@@ -1190,6 +1209,7 @@ mod test {
11901209
FeeRate::from_sat_per_vb(1.0),
11911210
150_000,
11921211
FEE_AMOUNT,
1212+
None,
11931213
)
11941214
.unwrap();
11951215

@@ -1212,6 +1232,7 @@ mod test {
12121232
FeeRate::from_sat_per_vb(1.0),
12131233
500_000,
12141234
FEE_AMOUNT,
1235+
None,
12151236
)
12161237
.unwrap();
12171238
}
@@ -1230,6 +1251,7 @@ mod test {
12301251
FeeRate::from_sat_per_vb(1000.0),
12311252
250_000,
12321253
FEE_AMOUNT,
1254+
None,
12331255
)
12341256
.unwrap();
12351257
}
@@ -1247,6 +1269,7 @@ mod test {
12471269
FeeRate::from_sat_per_vb(1.0),
12481270
99932, // first utxo's effective value
12491271
0,
1272+
None,
12501273
)
12511274
.unwrap();
12521275

@@ -1274,6 +1297,7 @@ mod test {
12741297
FeeRate::from_sat_per_vb(0.0),
12751298
target_amount,
12761299
0,
1300+
None,
12771301
)
12781302
.unwrap();
12791303
assert_eq!(result.selected_amount(), target_amount);

‎src/wallet/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,8 @@ where
751751
fee_rate,
752752
outgoing,
753753
fee_amount,
754+
// REVIEW: Add cost_of_change to TxParams
755+
None,
754756
)?;
755757
let mut fee_amount = coin_selection.fee_amount;
756758

0 commit comments

Comments
 (0)
Please sign in to comment.