Skip to content

Commit 09bd86e

Browse files
committed
test(bdk): initialize all feerates from u64
This makes the helper `feerate_unchecked` now redundant but still usable.
1 parent 004957d commit 09bd86e

File tree

3 files changed

+25
-21
lines changed

3 files changed

+25
-21
lines changed

crates/bdk/tests/common.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use bdk::{wallet::AddressIndex, KeychainKind, LocalOutput, Wallet};
44
use bdk_chain::indexed_tx_graph::Indexer;
55
use bdk_chain::{BlockId, ConfirmationTime};
66
use bitcoin::hashes::Hash;
7-
use bitcoin::{Address, BlockHash, Network, OutPoint, Transaction, TxIn, TxOut, Txid};
7+
use bitcoin::{Address, BlockHash, FeeRate, Network, OutPoint, Transaction, TxIn, TxOut, Txid};
88
use std::str::FromStr;
99

1010
// Return a fake wallet that appears to be funded for testing.
@@ -154,3 +154,16 @@ pub fn get_test_tr_with_taptree_xprv() -> &'static str {
154154
pub fn get_test_tr_dup_keys() -> &'static str {
155155
"tr(cNJmN3fH9DDbDt131fQNkVakkpzawJBSeybCUNmP1BovpmGQ45xG,{pk(8aee2b8120a5f157f1223f72b5e62b825831a27a9fdf427db7cc697494d4a642),pk(8aee2b8120a5f157f1223f72b5e62b825831a27a9fdf427db7cc697494d4a642)})"
156156
}
157+
158+
/// Construct a new [`FeeRate`] from the given raw `sat_vb` feerate. This is
159+
/// useful in cases where we want to create a feerate from a `f64`, as the
160+
/// traditional [`FeeRate::from_sat_per_vb`] method will only accept an integer.
161+
///
162+
/// **Note** this 'quick and dirty' conversion should only be used when the input
163+
/// parameter has units of `satoshis/vbyte` **AND** is not expected to overflow,
164+
/// or else the resulting value will be inaccurate.
165+
fn feerate_unchecked(sat_vb: f64) -> FeeRate {
166+
// 1 sat_vb / 4wu_vb * 1000kwu_wu = 250 sat_kwu
167+
let sat_kwu = (sat_vb * 250.0).ceil() as u64;
168+
FeeRate::from_sat_per_kwu(sat_kwu)
169+
}

crates/bdk/tests/psbt.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use bdk::bitcoin::FeeRate;
12
use bdk::bitcoin::TxIn;
23
use bdk::wallet::AddressIndex;
34
use bdk::wallet::AddressIndex::New;
@@ -10,12 +11,6 @@ use common::*;
1011
// from bip 174
1112
const PSBT_STR: &str = "cHNidP8BAKACAAAAAqsJSaCMWvfEm4IS9Bfi8Vqz9cM9zxU4IagTn4d6W3vkAAAAAAD+////qwlJoIxa98SbghL0F+LxWrP1wz3PFTghqBOfh3pbe+QBAAAAAP7///8CYDvqCwAAAAAZdqkUdopAu9dAy+gdmI5x3ipNXHE5ax2IrI4kAAAAAAAAGXapFG9GILVT+glechue4O/p+gOcykWXiKwAAAAAAAEHakcwRAIgR1lmF5fAGwNrJZKJSGhiGDR9iYZLcZ4ff89X0eURZYcCIFMJ6r9Wqk2Ikf/REf3xM286KdqGbX+EhtdVRs7tr5MZASEDXNxh/HupccC1AaZGoqg7ECy0OIEhfKaC3Ibi1z+ogpIAAQEgAOH1BQAAAAAXqRQ1RebjO4MsRwUPJNPuuTycA5SLx4cBBBYAFIXRNTfy4mVAWjTbr6nj3aAfuCMIAAAA";
1213

13-
fn feerate_unchecked(sat_vb: f64) -> bitcoin::FeeRate {
14-
// 1 sat_vb / 4wu_vb * 1000kwu_wu = 250 sat_kwu
15-
let sat_kwu = (sat_vb * 250.0).ceil() as u64;
16-
bitcoin::FeeRate::from_sat_per_kwu(sat_kwu)
17-
}
18-
1914
#[test]
2015
#[should_panic(expected = "InputIndexOutOfRange")]
2116
fn test_psbt_malformed_psbt_input_legacy() {
@@ -88,7 +83,7 @@ fn test_psbt_sign_with_finalized() {
8883
fn test_psbt_fee_rate_with_witness_utxo() {
8984
use psbt::PsbtUtils;
9085

91-
let expected_fee_rate = feerate_unchecked(1.2345);
86+
let expected_fee_rate = FeeRate::from_sat_per_kwu(310);
9287

9388
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
9489
let addr = wallet.get_address(New);
@@ -113,7 +108,7 @@ fn test_psbt_fee_rate_with_witness_utxo() {
113108
fn test_psbt_fee_rate_with_nonwitness_utxo() {
114109
use psbt::PsbtUtils;
115110

116-
let expected_fee_rate = feerate_unchecked(1.2345);
111+
let expected_fee_rate = FeeRate::from_sat_per_kwu(310);
117112

118113
let (mut wallet, _) = get_funded_wallet("pkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
119114
let addr = wallet.get_address(New);
@@ -137,7 +132,7 @@ fn test_psbt_fee_rate_with_nonwitness_utxo() {
137132
fn test_psbt_fee_rate_with_missing_txout() {
138133
use psbt::PsbtUtils;
139134

140-
let expected_fee_rate = feerate_unchecked(1.2345);
135+
let expected_fee_rate = FeeRate::from_sat_per_kwu(310);
141136

142137
let (mut wpkh_wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
143138
let addr = wpkh_wallet.get_address(New);

crates/bdk/tests/wallet.rs

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,6 @@ fn receive_output_in_latest_block(wallet: &mut Wallet, value: u64) -> OutPoint {
5656
receive_output(wallet, value, anchor)
5757
}
5858

59-
fn feerate_unchecked(sat_vb: f64) -> FeeRate {
60-
// 1 sat_vb / 4wu_vb * 1000kwu_wu = 250 sat_kwu
61-
let sat_kwu = (sat_vb * 250.0).ceil() as u64;
62-
FeeRate::from_sat_per_kwu(sat_kwu)
63-
}
64-
6559
// The satisfaction size of a P2WPKH is 112 WU =
6660
// 1 (elements in witness) + 1 (OP_PUSH) + 33 (pk) + 1 (OP_PUSH) + 72 (signature + sighash) + 1*4 (script len)
6761
// On the witness itself, we have to push once for the pk (33WU) and once for signature + sighash (72WU), for
@@ -1581,8 +1575,9 @@ fn test_bump_fee_reduce_change() {
15811575
.insert_tx(tx, ConfirmationTime::Unconfirmed { last_seen: 0 })
15821576
.unwrap();
15831577

1578+
let feerate = FeeRate::from_sat_per_kwu(625); // 2.5 sat/vb
15841579
let mut builder = wallet.build_fee_bump(txid).unwrap();
1585-
builder.fee_rate(feerate_unchecked(2.5)).enable_rbf();
1580+
builder.fee_rate(feerate).enable_rbf();
15861581
let psbt = builder.finish().unwrap();
15871582
let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
15881583
let fee = check_fee!(wallet, psbt);
@@ -1613,7 +1608,7 @@ fn test_bump_fee_reduce_change() {
16131608
sent_received.1
16141609
);
16151610

1616-
assert_fee_rate!(psbt, fee.unwrap_or(0), feerate_unchecked(2.5), @add_signature);
1611+
assert_fee_rate!(psbt, fee.unwrap_or(0), feerate, @add_signature);
16171612

16181613
let mut builder = wallet.build_fee_bump(txid).unwrap();
16191614
builder.fee_absolute(200);
@@ -1676,9 +1671,10 @@ fn test_bump_fee_reduce_single_recipient() {
16761671
.insert_tx(tx, ConfirmationTime::Unconfirmed { last_seen: 0 })
16771672
.unwrap();
16781673

1674+
let feerate = FeeRate::from_sat_per_kwu(625); // 2.5 sat/vb
16791675
let mut builder = wallet.build_fee_bump(txid).unwrap();
16801676
builder
1681-
.fee_rate(feerate_unchecked(2.5))
1677+
.fee_rate(feerate)
16821678
.allow_shrinking(addr.script_pubkey())
16831679
.unwrap();
16841680
let psbt = builder.finish().unwrap();
@@ -1692,7 +1688,7 @@ fn test_bump_fee_reduce_single_recipient() {
16921688
assert_eq!(tx.output.len(), 1);
16931689
assert_eq!(tx.output[0].value + fee.unwrap_or(0), sent_received.0);
16941690

1695-
assert_fee_rate!(psbt, fee.unwrap_or(0), feerate_unchecked(2.5), @add_signature);
1691+
assert_fee_rate!(psbt, fee.unwrap_or(0), feerate, @add_signature);
16961692
}
16971693

16981694
#[test]
@@ -2311,7 +2307,7 @@ fn test_fee_amount_negative_drain_val() {
23112307
let send_to = Address::from_str("tb1ql7w62elx9ucw4pj5lgw4l028hmuw80sndtntxt")
23122308
.unwrap()
23132309
.assume_checked();
2314-
let fee_rate = feerate_unchecked(2.01);
2310+
let fee_rate = FeeRate::from_sat_per_kwu(500);
23152311
let incoming_op = receive_output_in_latest_block(&mut wallet, 8859);
23162312

23172313
let mut builder = wallet.build_tx();

0 commit comments

Comments
 (0)