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
This commit is contained in:
parent
09bd86e2d8
commit
89608ddd0f
@ -168,8 +168,10 @@ where
|
|||||||
CreateTxError::FeeRateTooLow { required } => {
|
CreateTxError::FeeRateTooLow { required } => {
|
||||||
write!(
|
write!(
|
||||||
f,
|
f,
|
||||||
"Fee rate too low: required {} sat/kwu",
|
// Note: alternate fmt as sat/vb (ceil) available in bitcoin-0.31
|
||||||
required.to_sat_per_kwu()
|
//"Fee rate too low: required {required:#}"
|
||||||
|
"Fee rate too low: required {} sat/vb",
|
||||||
|
crate::floating_rate!(required)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
CreateTxError::NoUtxosSelected => {
|
CreateTxError::NoUtxosSelected => {
|
||||||
|
@ -2563,6 +2563,17 @@ fn create_signers<E: IntoWalletDescriptor>(
|
|||||||
Ok((signers, change_signers))
|
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]
|
#[macro_export]
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
/// Macro for getting a wallet for use in a doctest
|
/// Macro for getting a wallet for use in a doctest
|
||||||
|
@ -1488,7 +1488,6 @@ fn test_bump_fee_confirmed_tx() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[should_panic(expected = "FeeRateTooLow")]
|
|
||||||
fn test_bump_fee_low_fee_rate() {
|
fn test_bump_fee_low_fee_rate() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.get_address(New);
|
||||||
@ -1497,6 +1496,7 @@ fn test_bump_fee_low_fee_rate() {
|
|||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
.enable_rbf();
|
.enable_rbf();
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
|
let feerate = psbt.fee_rate().unwrap();
|
||||||
|
|
||||||
let tx = psbt.extract_tx();
|
let tx = psbt.extract_tx();
|
||||||
let txid = tx.txid();
|
let txid = tx.txid();
|
||||||
@ -1506,8 +1506,18 @@ fn test_bump_fee_low_fee_rate() {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let mut builder = wallet.build_fee_bump(txid).unwrap();
|
let mut builder = wallet.build_fee_bump(txid).unwrap();
|
||||||
builder.fee_rate(FeeRate::from_sat_per_vb_unchecked(1));
|
builder.fee_rate(FeeRate::BROADCAST_MIN);
|
||||||
builder.finish().unwrap();
|
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]
|
#[test]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user