feat: add enable_rbf method on txbuilder

This commit is contained in:
thunderbiscuit 2023-12-07 14:46:57 -05:00
parent 3df92527e9
commit c79a39914e
No known key found for this signature in database
GPG Key ID: 88253696EB836462
3 changed files with 32 additions and 25 deletions

View File

@ -142,6 +142,8 @@ interface TxBuilder {
TxBuilder drain_to(Script script); TxBuilder drain_to(Script script);
TxBuilder enable_rbf();
[Throws=BdkError] [Throws=BdkError]
PartiallySignedTransaction finish([ByRef] Wallet wallet); PartiallySignedTransaction finish([ByRef] Wallet wallet);
}; };

View File

@ -146,3 +146,9 @@ impl From<BdkLocalUtxo> for LocalUtxo {
} }
} }
} }
#[derive(Clone, Debug)]
pub enum RbfValue {
Default,
Value(u32),
}

View File

@ -1,19 +1,18 @@
use crate::bitcoin::{OutPoint, PartiallySignedTransaction, Transaction}; use crate::bitcoin::{OutPoint, PartiallySignedTransaction, Transaction};
use crate::descriptor::Descriptor; use crate::descriptor::Descriptor;
use crate::types::Balance; use crate::types::{Balance, RbfValue};
use crate::types::ScriptAmount; use crate::types::ScriptAmount;
use crate::Script; use crate::Script;
use crate::{AddressIndex, AddressInfo, Network}; use crate::{AddressIndex, AddressInfo, Network};
use std::collections::HashSet;
use bdk::bitcoin::blockdata::script::ScriptBuf as BdkScriptBuf; use bdk::bitcoin::blockdata::script::ScriptBuf as BdkScriptBuf;
use bdk::bitcoin::OutPoint as BdkOutPoint; use bdk::bitcoin::{OutPoint as BdkOutPoint, Sequence};
use bdk::wallet::Update as BdkUpdate; use bdk::wallet::Update as BdkUpdate;
use bdk::{Error as BdkError, FeeRate}; use bdk::{Error as BdkError, FeeRate};
use bdk::{SignOptions, Wallet as BdkWallet}; use bdk::{SignOptions, Wallet as BdkWallet};
use bdk::wallet::tx_builder::ChangeSpendPolicy; use bdk::wallet::tx_builder::ChangeSpendPolicy;
use std::collections::HashSet;
use std::sync::{Arc, Mutex, MutexGuard}; use std::sync::{Arc, Mutex, MutexGuard};
#[derive(Debug)] #[derive(Debug)]
@ -302,7 +301,7 @@ pub struct TxBuilder {
pub(crate) fee_absolute: Option<u64>, pub(crate) fee_absolute: Option<u64>,
pub(crate) drain_wallet: bool, pub(crate) drain_wallet: bool,
pub(crate) drain_to: Option<BdkScriptBuf>, pub(crate) drain_to: Option<BdkScriptBuf>,
// pub(crate) rbf: Option<RbfValue>, pub(crate) rbf: Option<RbfValue>,
// pub(crate) data: Vec<u8>, // pub(crate) data: Vec<u8>,
} }
@ -318,7 +317,7 @@ impl TxBuilder {
fee_absolute: None, fee_absolute: None,
drain_wallet: false, drain_wallet: false,
drain_to: None, drain_to: None,
// rbf: None, rbf: None,
// data: Vec::new(), // data: Vec::new(),
} }
} }
@ -453,15 +452,15 @@ impl TxBuilder {
..self.clone() ..self.clone()
}) })
} }
//
// /// Enable signaling RBF. This will use the default `nsequence` value of `0xFFFFFFFD`. /// Enable signaling RBF. This will use the default `nsequence` value of `0xFFFFFFFD`.
// pub(crate) fn enable_rbf(&self) -> Arc<Self> { pub(crate) fn enable_rbf(&self) -> Arc<Self> {
// Arc::new(TxBuilder { Arc::new(TxBuilder {
// rbf: Some(RbfValue::Default), rbf: Some(RbfValue::Default),
// ..self.clone() ..self.clone()
// }) })
// } }
//
// /// Enable signaling RBF with a specific nSequence value. This can cause conflicts if the wallet's descriptors contain an // /// Enable signaling RBF with a specific nSequence value. This can cause conflicts if the wallet's descriptors contain an
// /// "older" (OP_CSV) operator and the given `nsequence` is lower than the CSV value. If the `nsequence` is higher than `0xFFFFFFFD` // /// "older" (OP_CSV) operator and the given `nsequence` is lower than the CSV value. If the `nsequence` is higher than `0xFFFFFFFD`
// /// an error will be thrown, since it would not be a valid nSequence to signal RBF. // /// an error will be thrown, since it would not be a valid nSequence to signal RBF.
@ -517,16 +516,16 @@ impl TxBuilder {
if let Some(script) = &self.drain_to { if let Some(script) = &self.drain_to {
tx_builder.drain_to(script.clone()); tx_builder.drain_to(script.clone());
} }
// if let Some(rbf) = &self.rbf { if let Some(rbf) = &self.rbf {
// match *rbf { match *rbf {
// RbfValue::Default => { RbfValue::Default => {
// tx_builder.enable_rbf(); tx_builder.enable_rbf();
// } }
// RbfValue::Value(nsequence) => { RbfValue::Value(nsequence) => {
// tx_builder.enable_rbf_with_sequence(Sequence(nsequence)); tx_builder.enable_rbf_with_sequence(Sequence(nsequence));
// } }
// } }
// } }
// if !&self.data.is_empty() { // if !&self.data.is_empty() {
// tx_builder.add_data(self.data.as_slice()); // tx_builder.add_data(self.data.as_slice());
// } // }