From e243107bb68a87f14b78c378027dcbe18f55fbb6 Mon Sep 17 00:00:00 2001 From: Richard Ulrich Date: Mon, 12 Apr 2021 15:38:35 +0200 Subject: [PATCH 1/2] Adding tests to demonstrate that we can't keep RBF when bumping the fee of a transaction. --- src/wallet/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/wallet/mod.rs b/src/wallet/mod.rs index 644854d5..3c9dcf01 100644 --- a/src/wallet/mod.rs +++ b/src/wallet/mod.rs @@ -2759,7 +2759,7 @@ mod test { .unwrap(); let mut builder = wallet.build_fee_bump(txid).unwrap(); - builder.fee_rate(FeeRate::from_sat_per_vb(2.5)); + builder.fee_rate(FeeRate::from_sat_per_vb(2.5)).enable_rbf(); let (psbt, details) = builder.finish().unwrap(); assert_eq!(details.sent, original_details.sent); @@ -2820,6 +2820,7 @@ mod test { let mut builder = wallet.build_fee_bump(txid).unwrap(); builder.fee_absolute(200); + builder.enable_rbf(); let (psbt, details) = builder.finish().unwrap(); assert_eq!(details.sent, original_details.sent); From 98127cc5da4a6ca2fc01a9023c69928b8725b216 Mon Sep 17 00:00:00 2001 From: Richard Ulrich Date: Mon, 12 Apr 2021 15:44:53 +0200 Subject: [PATCH 2/2] Allow setting RBF when bumping the fee of a transaction. This enables to further bump the fee. --- src/wallet/tx_builder.rs | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/wallet/tx_builder.rs b/src/wallet/tx_builder.rs index 0a62da90..eb413490 100644 --- a/src/wallet/tx_builder.rs +++ b/src/wallet/tx_builder.rs @@ -523,6 +523,26 @@ impl<'a, B, D: BatchDatabase, Cs: CoinSelectionAlgorithm, Ctx: TxBuilderConte pub fn finish(self) -> Result<(PSBT, TransactionDetails), Error> { self.wallet.create_tx(self.coin_selection, self.params) } + + /// Enable signaling RBF + /// + /// This will use the default nSequence value of `0xFFFFFFFD`. + pub fn enable_rbf(&mut self) -> &mut Self { + self.params.rbf = Some(RbfValue::Default); + self + } + + /// 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` an error will be thrown, since it would not + /// be a valid nSequence to signal RBF. + pub fn enable_rbf_with_sequence(&mut self, nsequence: u32) -> &mut Self { + self.params.rbf = Some(RbfValue::Value(nsequence)); + self + } } impl<'a, B, D: BatchDatabase, Cs: CoinSelectionAlgorithm> TxBuilder<'a, B, D, Cs, CreateTx> { @@ -558,26 +578,6 @@ impl<'a, B, D: BatchDatabase, Cs: CoinSelectionAlgorithm> TxBuilder<'a, B, D, self } - - /// Enable signaling RBF - /// - /// This will use the default nSequence value of `0xFFFFFFFD`. - pub fn enable_rbf(&mut self) -> &mut Self { - self.params.rbf = Some(RbfValue::Default); - self - } - - /// 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` an error will be thrown, since it would not - /// be a valid nSequence to signal RBF. - pub fn enable_rbf_with_sequence(&mut self, nsequence: u32) -> &mut Self { - self.params.rbf = Some(RbfValue::Value(nsequence)); - self - } } // methods supported only by bump_fee