Skip to content

Commit 8a1c05c

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 1e0c5f6 commit 8a1c05c

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-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 {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
@@ -2563,6 +2563,17 @@ fn create_signers<E: IntoWalletDescriptor>(
25632563
Ok((signers, change_signers))
25642564
}
25652565

2566+
/// Transforms a [`FeeRate`] to `f64` with unit as sat/vb.
2567+
#[macro_export]
2568+
#[doc(hidden)]
2569+
macro_rules! floating_rate {
2570+
($rate:expr) => {{
2571+
use $crate::bitcoin::blockdata::constants::WITNESS_SCALE_FACTOR;
2572+
// sat_kwu / 250.0 -> sat_vb
2573+
$rate.to_sat_per_kwu() as f64 / ((1000 / WITNESS_SCALE_FACTOR) as f64)
2574+
}};
2575+
}
2576+
25662577
#[macro_export]
25672578
#[doc(hidden)]
25682579
/// Macro for getting a wallet for use in a doctest

crates/bdk/tests/wallet.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1488,7 +1488,6 @@ fn test_bump_fee_confirmed_tx() {
14881488
}
14891489

14901490
#[test]
1491-
#[should_panic(expected = "FeeRateTooLow")]
14921491
fn test_bump_fee_low_fee_rate() {
14931492
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
14941493
let addr = wallet.get_address(New);
@@ -1497,6 +1496,7 @@ fn test_bump_fee_low_fee_rate() {
14971496
.add_recipient(addr.script_pubkey(), 25_000)
14981497
.enable_rbf();
14991498
let psbt = builder.finish().unwrap();
1499+
let feerate = psbt.fee_rate().unwrap();
15001500

15011501
let tx = psbt.extract_tx();
15021502
let txid = tx.txid();
@@ -1506,8 +1506,18 @@ fn test_bump_fee_low_fee_rate() {
15061506
.unwrap();
15071507

15081508
let mut builder = wallet.build_fee_bump(txid).unwrap();
1509-
builder.fee_rate(FeeRate::from_sat_per_vb_unchecked(1));
1510-
builder.finish().unwrap();
1509+
builder.fee_rate(FeeRate::BROADCAST_MIN);
1510+
let res = builder.finish();
1511+
assert_matches!(
1512+
res,
1513+
Err(CreateTxError::FeeRateTooLow { .. }),
1514+
"expected FeeRateTooLow error"
1515+
);
1516+
1517+
let required = feerate.to_sat_per_kwu() + 250; // +1 sat/vb
1518+
let sat_vb = required as f64 / 250.0;
1519+
let expect = format!("Fee rate too low: required {} sat/vb", sat_vb);
1520+
assert_eq!(res.unwrap_err().to_string(), expect);
15111521
}
15121522

15131523
#[test]

0 commit comments

Comments
 (0)