Skip to content

Commit c79a399

Browse files
feat: add enable_rbf method on txbuilder
1 parent 3df9252 commit c79a399

File tree

3 files changed

+32
-25
lines changed

3 files changed

+32
-25
lines changed

bdk-ffi/src/bdk.udl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ interface TxBuilder {
142142

143143
TxBuilder drain_to(Script script);
144144

145+
TxBuilder enable_rbf();
146+
145147
[Throws=BdkError]
146148
PartiallySignedTransaction finish([ByRef] Wallet wallet);
147149
};

bdk-ffi/src/types.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,9 @@ impl From<BdkLocalUtxo> for LocalUtxo {
146146
}
147147
}
148148
}
149+
150+
#[derive(Clone, Debug)]
151+
pub enum RbfValue {
152+
Default,
153+
Value(u32),
154+
}

bdk-ffi/src/wallet.rs

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
use crate::bitcoin::{OutPoint, PartiallySignedTransaction, Transaction};
22
use crate::descriptor::Descriptor;
3-
use crate::types::Balance;
3+
use crate::types::{Balance, RbfValue};
44
use crate::types::ScriptAmount;
55
use crate::Script;
66
use crate::{AddressIndex, AddressInfo, Network};
7-
use std::collections::HashSet;
87

98
use bdk::bitcoin::blockdata::script::ScriptBuf as BdkScriptBuf;
10-
use bdk::bitcoin::OutPoint as BdkOutPoint;
9+
use bdk::bitcoin::{OutPoint as BdkOutPoint, Sequence};
1110
use bdk::wallet::Update as BdkUpdate;
1211
use bdk::{Error as BdkError, FeeRate};
1312
use bdk::{SignOptions, Wallet as BdkWallet};
14-
1513
use bdk::wallet::tx_builder::ChangeSpendPolicy;
1614

15+
use std::collections::HashSet;
1716
use std::sync::{Arc, Mutex, MutexGuard};
1817

1918
#[derive(Debug)]
@@ -302,7 +301,7 @@ pub struct TxBuilder {
302301
pub(crate) fee_absolute: Option<u64>,
303302
pub(crate) drain_wallet: bool,
304303
pub(crate) drain_to: Option<BdkScriptBuf>,
305-
// pub(crate) rbf: Option<RbfValue>,
304+
pub(crate) rbf: Option<RbfValue>,
306305
// pub(crate) data: Vec<u8>,
307306
}
308307

@@ -318,7 +317,7 @@ impl TxBuilder {
318317
fee_absolute: None,
319318
drain_wallet: false,
320319
drain_to: None,
321-
// rbf: None,
320+
rbf: None,
322321
// data: Vec::new(),
323322
}
324323
}
@@ -453,15 +452,15 @@ impl TxBuilder {
453452
..self.clone()
454453
})
455454
}
456-
//
457-
// /// Enable signaling RBF. This will use the default `nsequence` value of `0xFFFFFFFD`.
458-
// pub(crate) fn enable_rbf(&self) -> Arc<Self> {
459-
// Arc::new(TxBuilder {
460-
// rbf: Some(RbfValue::Default),
461-
// ..self.clone()
462-
// })
463-
// }
464-
//
455+
456+
/// Enable signaling RBF. This will use the default `nsequence` value of `0xFFFFFFFD`.
457+
pub(crate) fn enable_rbf(&self) -> Arc<Self> {
458+
Arc::new(TxBuilder {
459+
rbf: Some(RbfValue::Default),
460+
..self.clone()
461+
})
462+
}
463+
465464
// /// Enable signaling RBF with a specific nSequence value. This can cause conflicts if the wallet's descriptors contain an
466465
// /// "older" (OP_CSV) operator and the given `nsequence` is lower than the CSV value. If the `nsequence` is higher than `0xFFFFFFFD`
467466
// /// an error will be thrown, since it would not be a valid nSequence to signal RBF.
@@ -517,16 +516,16 @@ impl TxBuilder {
517516
if let Some(script) = &self.drain_to {
518517
tx_builder.drain_to(script.clone());
519518
}
520-
// if let Some(rbf) = &self.rbf {
521-
// match *rbf {
522-
// RbfValue::Default => {
523-
// tx_builder.enable_rbf();
524-
// }
525-
// RbfValue::Value(nsequence) => {
526-
// tx_builder.enable_rbf_with_sequence(Sequence(nsequence));
527-
// }
528-
// }
529-
// }
519+
if let Some(rbf) = &self.rbf {
520+
match *rbf {
521+
RbfValue::Default => {
522+
tx_builder.enable_rbf();
523+
}
524+
RbfValue::Value(nsequence) => {
525+
tx_builder.enable_rbf_with_sequence(Sequence(nsequence));
526+
}
527+
}
528+
}
530529
// if !&self.data.is_empty() {
531530
// tx_builder.add_data(self.data.as_slice());
532531
// }

0 commit comments

Comments
 (0)