Skip to content

Commit 4fbec67

Browse files
committed
feat: use FeeRate type in TxBuilder
1 parent 7319aea commit 4fbec67

File tree

13 files changed

+35
-19
lines changed

13 files changed

+35
-19
lines changed

bdk-android/lib/src/androidTest/kotlin/org/bitcoindevkit/LiveTxBuilderTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class LiveTxBuilderTest {
2121
val recipient: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.TESTNET)
2222
val psbt: PartiallySignedTransaction = TxBuilder()
2323
.addRecipient(recipient.scriptPubkey(), 4200uL)
24-
.feeRate(2.0f)
24+
.feeRate(FeeRate.fromSatPerVb(2.0f))
2525
.finish(wallet)
2626

2727
println(psbt.serialize())
@@ -49,7 +49,7 @@ class LiveTxBuilderTest {
4949

5050
val psbt: PartiallySignedTransaction = TxBuilder()
5151
.setRecipients(allRecipients)
52-
.feeRate(4.0f)
52+
.feeRate(FeeRate.fromSatPerVb(4.0f))
5353
.changePolicy(ChangeSpendPolicy.CHANGE_FORBIDDEN)
5454
.enableRbf()
5555
.finish(wallet)

bdk-android/lib/src/androidTest/kotlin/org/bitcoindevkit/LiveWalletTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class LiveWalletTest {
4949

5050
val psbt: PartiallySignedTransaction = TxBuilder()
5151
.addRecipient(recipient.scriptPubkey(), 4200uL)
52-
.feeRate(4.0f)
52+
.feeRate(FeeRate.fromSatPerVb(4.0f))
5353
.finish(wallet)
5454

5555
println(psbt.serialize())

bdk-android/lib/src/androidTest/kotlin/org/bitcoindevkit/OfflineDescriptorTest.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import kotlin.test.Test
44
import kotlin.test.assertEquals
55
import androidx.test.ext.junit.runners.AndroidJUnit4
66
import org.junit.runner.RunWith
7-
import kotlin.test.assertEquals
87

98
@RunWith(AndroidJUnit4::class)
109
class OfflineDescriptorTest {

bdk-android/lib/src/androidTest/kotlin/org/bitcoindevkit/OfflineWalletTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.bitcoindevkit
33
import kotlin.test.Test
44
import kotlin.test.assertEquals
55
import kotlin.test.assertTrue
6+
import kotlin.test.assertFalse
67
import androidx.test.ext.junit.runners.AndroidJUnit4
78
import org.junit.runner.RunWith
89

bdk-ffi/src/bdk.udl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,14 @@ dictionary TxOut {
6868
// ------------------------------------------------------------------------
6969

7070
interface FeeRate {
71+
[Name=from_sat_per_vb]
72+
constructor(f32 sat_per_vb);
73+
74+
[Name=from_sat_per_kwu]
75+
constructor(f32 sat_per_kwu);
76+
7177
f32 as_sat_per_vb();
78+
7279
f32 sat_per_kwu();
7380
};
7481

@@ -132,7 +139,7 @@ interface TxBuilder {
132139

133140
TxBuilder manually_selected_only();
134141

135-
TxBuilder fee_rate(float sat_per_vbyte);
142+
TxBuilder fee_rate([ByRef] FeeRate fee_rate);
136143

137144
TxBuilder fee_absolute(u64 fee);
138145

bdk-ffi/src/types.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,18 @@ use bdk::FeeRate as BdkFeeRate;
1111

1212
use std::sync::Arc;
1313

14+
#[derive(Clone, Debug)]
1415
pub struct FeeRate(pub BdkFeeRate);
1516

1617
impl FeeRate {
18+
pub fn from_sat_per_vb(sat_per_vb: f32) -> Self {
19+
FeeRate(BdkFeeRate::from_sat_per_vb(sat_per_vb))
20+
}
21+
22+
pub fn from_sat_per_kwu(sat_per_kwu: f32) -> Self {
23+
FeeRate(BdkFeeRate::from_sat_per_kwu(sat_per_kwu))
24+
}
25+
1726
pub fn as_sat_per_vb(&self) -> f32 {
1827
self.0.as_sat_per_vb()
1928
}

bdk-ffi/src/wallet.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ pub struct TxBuilder {
309309
pub(crate) unspendable: HashSet<OutPoint>,
310310
pub(crate) change_policy: ChangeSpendPolicy,
311311
pub(crate) manually_selected_only: bool,
312-
pub(crate) fee_rate: Option<f32>,
312+
pub(crate) fee_rate: Option<FeeRate>,
313313
pub(crate) fee_absolute: Option<u64>,
314314
pub(crate) drain_wallet: bool,
315315
pub(crate) drain_to: Option<BdkScriptBuf>,
@@ -412,9 +412,9 @@ impl TxBuilder {
412412
})
413413
}
414414

415-
pub(crate) fn fee_rate(&self, sat_per_vb: f32) -> Arc<Self> {
415+
pub(crate) fn fee_rate(&self, fee_rate: &FeeRate) -> Arc<Self> {
416416
Arc::new(TxBuilder {
417-
fee_rate: Some(sat_per_vb),
417+
fee_rate: Some(fee_rate.clone()),
418418
..self.clone()
419419
})
420420
}
@@ -486,8 +486,8 @@ impl TxBuilder {
486486
if self.manually_selected_only {
487487
tx_builder.manually_selected_only();
488488
}
489-
if let Some(sat_per_vb) = self.fee_rate {
490-
tx_builder.fee_rate(BdkFeeRate::from_sat_per_vb(sat_per_vb));
489+
if let Some(fee_rate) = &self.fee_rate {
490+
tx_builder.fee_rate(fee_rate.0);
491491
}
492492
if let Some(fee_amount) = self.fee_absolute {
493493
tx_builder.fee_absolute(fee_amount);

bdk-jvm/lib/src/test/kotlin/org/bitcoindevkit/LiveTxBuilderTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class LiveTxBuilderTest {
1818
val recipient: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.TESTNET)
1919
val psbt: PartiallySignedTransaction = TxBuilder()
2020
.addRecipient(recipient.scriptPubkey(), 4200uL)
21-
.feeRate(2.0f)
21+
.feeRate(FeeRate.fromSatPerVb(2.0f))//.feeRate(2.0f)
2222
.finish(wallet)
2323

2424
println(psbt.serialize())
@@ -47,7 +47,7 @@ class LiveTxBuilderTest {
4747

4848
val psbt: PartiallySignedTransaction = TxBuilder()
4949
.setRecipients(allRecipients)
50-
.feeRate(4.0f)
50+
.feeRate(FeeRate.fromSatPerVb(4.0f))//.feeRate(4.0f)
5151
.changePolicy(ChangeSpendPolicy.CHANGE_FORBIDDEN)
5252
.enableRbf()
5353
.finish(wallet)

bdk-jvm/lib/src/test/kotlin/org/bitcoindevkit/LiveWalletTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class LiveWalletTest {
4545

4646
val psbt: PartiallySignedTransaction = TxBuilder()
4747
.addRecipient(recipient.scriptPubkey(), 4200uL)
48-
.feeRate(2.0f)
48+
.feeRate(FeeRate.fromSatPerVb(2.0f))//.feeRate(2.0f)
4949
.finish(wallet)
5050

5151
println(psbt.serialize())

bdk-python/tests/test_live_tx_builder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def test_tx_builder(self):
2828
network = bdk.Network.TESTNET
2929
)
3030

31-
psbt = bdk.TxBuilder().add_recipient(script=recipient.script_pubkey(), amount=4200).fee_rate(2.0).finish(wallet)
31+
psbt = bdk.TxBuilder().add_recipient(script=recipient.script_pubkey(), amount=4200).fee_rate(fee_rate=bdk.FeeRate.from_sat_per_vb(2.0)).finish(wallet)
3232
# print(psbt.serialize())
3333

3434
self.assertTrue(psbt.serialize().startswith("cHNi"), "The PSBT should start with cHNi")
@@ -70,7 +70,7 @@ def complex_tx_builder(self):
7070
bdk.ScriptAmount(recipient2.script_pubkey, 4200)
7171
)
7272

73-
psbt: bdk.PartiallySignedTransaction = bdk.TxBuilder().set_recipients(all_recipients).fee_rate(4.0).change_policy(bdk.ChangeSpendPolicy.CHANGE_FORBIDDEN).enable_rbf().finish(wallet)
73+
psbt = bdk.TxBuilder().add_recipient(script=recipient.script_pubkey(), amount=4200).fee_rate(fee_rate=bdk.FeeRate.from_sat_per_vb(2.0)).finish(wallet)
7474
wallet.sign(psbt)
7575

7676
self.assertTrue(psbt.serialize().startswith("cHNi"), "The PSBT should start with cHNi")

0 commit comments

Comments
 (0)