CreateTxError::FeeRateTooLow { required } => {
write!(
f,
- "Fee rate too low: required {} sat/kwu",
- required.to_sat_per_kwu()
+ // Note: alternate fmt as sat/vb (ceil) available in bitcoin-0.31
+ //"Fee rate too low: required {required:#}"
+ "Fee rate too low: required {} sat/vb",
+ crate::floating_rate!(required)
)
}
CreateTxError::NoUtxosSelected => {
Ok((signers, change_signers))
}
+/// Transforms a [`FeeRate`] to `f64` with unit as sat/vb.
+#[macro_export]
+#[doc(hidden)]
+macro_rules! floating_rate {
+ ($rate:expr) => {{
+ use $crate::bitcoin::blockdata::constants::WITNESS_SCALE_FACTOR;
+ // sat_kwu / 250.0 -> sat_vb
+ $rate.to_sat_per_kwu() as f64 / ((1000 / WITNESS_SCALE_FACTOR) as f64)
+ }};
+}
+
#[macro_export]
#[doc(hidden)]
/// Macro for getting a wallet for use in a doctest
}
#[test]
-#[should_panic(expected = "FeeRateTooLow")]
fn test_bump_fee_low_fee_rate() {
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
let addr = wallet.get_address(New);
.add_recipient(addr.script_pubkey(), 25_000)
.enable_rbf();
let psbt = builder.finish().unwrap();
+ let feerate = psbt.fee_rate().unwrap();
let tx = psbt.extract_tx();
let txid = tx.txid();
.unwrap();
let mut builder = wallet.build_fee_bump(txid).unwrap();
- builder.fee_rate(FeeRate::from_sat_per_vb_unchecked(1));
- builder.finish().unwrap();
+ builder.fee_rate(FeeRate::BROADCAST_MIN);
+ let res = builder.finish();
+ assert_matches!(
+ res,
+ Err(CreateTxError::FeeRateTooLow { .. }),
+ "expected FeeRateTooLow error"
+ );
+
+ let required = feerate.to_sat_per_kwu() + 250; // +1 sat/vb
+ let sat_vb = required as f64 / 250.0;
+ let expect = format!("Fee rate too low: required {} sat/vb", sat_vb);
+ assert_eq!(res.unwrap_err().to_string(), expect);
}
#[test]