Skip to content

Commit d7bc6c4

Browse files
committed
refactor(bdk): display CreateTxError::FeeRateTooLow in sat/vb
Also modify a unit test `test_bump_fee_low_fee_rate` to additionally assert the expected error message
1 parent 1a0ce09 commit d7bc6c4

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

crates/bdk/src/wallet/error.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,10 @@ where
168168
CreateTxError::FeeRateTooLow { required } => {
169169
write!(
170170
f,
171-
"Fee rate too low: required {} sat/kwu",
172-
required.to_sat_per_kwu()
171+
// Note: alternate fmt as sat/vb (ceil) available in bitcoin-0.31
172+
//"Fee rate too low: required {:#}",
173+
"Fee rate too low: required {} sat/vb",
174+
crate::floating_rate!(required)
173175
)
174176
}
175177
CreateTxError::NoUtxosSelected => {

crates/bdk/src/wallet/mod.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2385,6 +2385,17 @@ fn create_signers<E: IntoWalletDescriptor>(
23852385
Ok((signers, change_signers))
23862386
}
23872387

2388+
/// Returns a [`FeeRate`] as `f64` in units of sat/vb
2389+
#[macro_export]
2390+
#[doc(hidden)]
2391+
macro_rules! floating_rate {
2392+
($rate:expr) => {{
2393+
use $crate::bitcoin::blockdata::constants::WITNESS_SCALE_FACTOR;
2394+
// sat_kwu / 250.0 -> sat_vb
2395+
$rate.to_sat_per_kwu() as f64 / ((1000 / WITNESS_SCALE_FACTOR) as f64)
2396+
}};
2397+
}
2398+
23882399
#[macro_export]
23892400
#[doc(hidden)]
23902401
/// Macro for getting a wallet for use in a doctest

crates/bdk/tests/wallet.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1461,7 +1461,6 @@ fn test_bump_fee_confirmed_tx() {
14611461
}
14621462

14631463
#[test]
1464-
#[should_panic(expected = "FeeRateTooLow")]
14651464
fn test_bump_fee_low_fee_rate() {
14661465
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
14671466
let addr = wallet.get_address(New);
@@ -1479,8 +1478,13 @@ fn test_bump_fee_low_fee_rate() {
14791478
.unwrap();
14801479

14811480
let mut builder = wallet.build_fee_bump(txid).unwrap();
1482-
builder.fee_rate(FeeRate::from_sat_per_vb_unchecked(1));
1483-
builder.finish().unwrap();
1481+
builder.fee_rate(FeeRate::BROADCAST_MIN);
1482+
let res = builder.finish();
1483+
assert!(res.is_err());
1484+
assert_eq!(
1485+
res.unwrap_err().to_string(),
1486+
"Fee rate too low: required 2.244 sat/vb"
1487+
);
14841488
}
14851489

14861490
#[test]

0 commit comments

Comments
 (0)