43
43
use alloc:: { boxed:: Box , rc:: Rc , string:: String , vec:: Vec } ;
44
44
use core:: cell:: RefCell ;
45
45
use core:: fmt;
46
- use core:: marker:: PhantomData ;
47
46
48
47
use bdk_chain:: PersistBackend ;
49
48
use bitcoin:: psbt:: { self , PartiallySignedTransaction as Psbt } ;
50
49
use bitcoin:: script:: PushBytes ;
51
50
use bitcoin:: { absolute, FeeRate , OutPoint , ScriptBuf , Sequence , Transaction , Txid } ;
52
51
53
- use super :: coin_selection:: { CoinSelectionAlgorithm , DefaultCoinSelectionAlgorithm } ;
52
+ use super :: coin_selection:: CoinSelectionAlgorithm ;
54
53
use super :: { ChangeSet , CreateTxError , Wallet } ;
55
54
use crate :: collections:: { BTreeMap , HashSet } ;
56
55
use crate :: { KeychainKind , LocalOutput , Utxo , WeightedUtxo } ;
@@ -124,11 +123,10 @@ impl TxBuilderContext for BumpFee {}
124
123
/// [`finish`]: Self::finish
125
124
/// [`coin_selection`]: Self::coin_selection
126
125
#[ derive( Debug ) ]
127
- pub struct TxBuilder < ' a , D , Cs , Ctx > {
126
+ pub struct TxBuilder < ' a , D , Cs > {
128
127
pub ( crate ) wallet : Rc < RefCell < & ' a mut Wallet < D > > > ,
129
128
pub ( crate ) params : TxParams ,
130
129
pub ( crate ) coin_selection : Cs ,
131
- pub ( crate ) phantom : PhantomData < Ctx > ,
132
130
}
133
131
134
132
/// The parameters for transaction creation sans coin selection algorithm.
@@ -176,19 +174,18 @@ impl Default for FeePolicy {
176
174
}
177
175
}
178
176
179
- impl < ' a , D , Cs : Clone , Ctx > Clone for TxBuilder < ' a , D , Cs , Ctx > {
177
+ impl < ' a , D , Cs : Clone > Clone for TxBuilder < ' a , D , Cs > {
180
178
fn clone ( & self ) -> Self {
181
179
TxBuilder {
182
180
wallet : self . wallet . clone ( ) ,
183
181
params : self . params . clone ( ) ,
184
182
coin_selection : self . coin_selection . clone ( ) ,
185
- phantom : PhantomData ,
186
183
}
187
184
}
188
185
}
189
186
190
187
// methods supported by both contexts, for any CoinSelectionAlgorithm
191
- impl < ' a , D , Cs , Ctx > TxBuilder < ' a , D , Cs , Ctx > {
188
+ impl < ' a , D , Cs > TxBuilder < ' a , D , Cs > {
192
189
/// Set a custom fee rate.
193
190
///
194
191
/// This method sets the mining fee paid by the transaction as a rate on its size.
@@ -561,12 +558,11 @@ impl<'a, D, Cs, Ctx> TxBuilder<'a, D, Cs, Ctx> {
561
558
pub fn coin_selection < P : CoinSelectionAlgorithm > (
562
559
self ,
563
560
coin_selection : P ,
564
- ) -> TxBuilder < ' a , D , P , Ctx > {
561
+ ) -> TxBuilder < ' a , D , P > {
565
562
TxBuilder {
566
563
wallet : self . wallet ,
567
564
params : self . params ,
568
565
coin_selection,
569
- phantom : PhantomData ,
570
566
}
571
567
}
572
568
@@ -616,7 +612,7 @@ impl<'a, D, Cs, Ctx> TxBuilder<'a, D, Cs, Ctx> {
616
612
}
617
613
}
618
614
619
- impl < ' a , D , Cs : CoinSelectionAlgorithm , Ctx > TxBuilder < ' a , D , Cs , Ctx > {
615
+ impl < ' a , D , Cs : CoinSelectionAlgorithm > TxBuilder < ' a , D , Cs > {
620
616
/// Finish building the transaction.
621
617
///
622
618
/// Returns a new [`Psbt`] per [`BIP174`].
@@ -694,29 +690,7 @@ impl fmt::Display for AddForeignUtxoError {
694
690
#[ cfg( feature = "std" ) ]
695
691
impl std:: error:: Error for AddForeignUtxoError { }
696
692
697
- #[ derive( Debug ) ]
698
- /// Error returned from [`TxBuilder::allow_shrinking`]
699
- pub enum AllowShrinkingError {
700
- /// Script/PubKey was not in the original transaction
701
- MissingScriptPubKey ( ScriptBuf ) ,
702
- }
703
-
704
- impl fmt:: Display for AllowShrinkingError {
705
- fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
706
- match self {
707
- Self :: MissingScriptPubKey ( script_buf) => write ! (
708
- f,
709
- "Script/PubKey was not in the original transaction: {}" ,
710
- script_buf,
711
- ) ,
712
- }
713
- }
714
- }
715
-
716
- #[ cfg( feature = "std" ) ]
717
- impl std:: error:: Error for AllowShrinkingError { }
718
-
719
- impl < ' a , D , Cs : CoinSelectionAlgorithm > TxBuilder < ' a , D , Cs , CreateTx > {
693
+ impl < ' a , D , Cs : CoinSelectionAlgorithm > TxBuilder < ' a , D , Cs > {
720
694
/// Replace the recipients already added with a new list
721
695
pub fn set_recipients ( & mut self , recipients : Vec < ( ScriptBuf , u64 ) > ) -> & mut Self {
722
696
self . params . recipients = recipients;
@@ -745,11 +719,8 @@ impl<'a, D, Cs: CoinSelectionAlgorithm> TxBuilder<'a, D, Cs, CreateTx> {
745
719
/// difference is that it is valid to use `drain_to` without setting any ordinary recipients
746
720
/// with [`add_recipient`] (but it is perfectly fine to add recipients as well).
747
721
///
748
- /// If you choose not to set any recipients, you should either provide the utxos that the
749
- /// transaction should spend via [`add_utxos`], or set [`drain_wallet`] to spend all of them.
750
- ///
751
- /// When bumping the fees of a transaction made with this option, you probably want to
752
- /// use [`allow_shrinking`] to allow this output to be reduced to pay for the extra fees.
722
+ /// If you choose not to set any recipients, you should provide the utxos that the
723
+ /// transaction should spend via [`add_utxos`].
753
724
///
754
725
/// # Example
755
726
///
@@ -783,7 +754,6 @@ impl<'a, D, Cs: CoinSelectionAlgorithm> TxBuilder<'a, D, Cs, CreateTx> {
783
754
/// # Ok::<(), anyhow::Error>(())
784
755
/// ```
785
756
///
786
- /// [`allow_shrinking`]: Self::allow_shrinking
787
757
/// [`add_recipient`]: Self::add_recipient
788
758
/// [`add_utxos`]: Self::add_utxos
789
759
/// [`drain_wallet`]: Self::drain_wallet
@@ -793,38 +763,6 @@ impl<'a, D, Cs: CoinSelectionAlgorithm> TxBuilder<'a, D, Cs, CreateTx> {
793
763
}
794
764
}
795
765
796
- // methods supported only by bump_fee
797
- impl < ' a , D > TxBuilder < ' a , D , DefaultCoinSelectionAlgorithm , BumpFee > {
798
- /// Explicitly tells the wallet that it is allowed to reduce the amount of the output matching this
799
- /// `script_pubkey` in order to bump the transaction fee. Without specifying this the wallet
800
- /// will attempt to find a change output to shrink instead.
801
- ///
802
- /// **Note** that the output may shrink to below the dust limit and therefore be removed. If it is
803
- /// preserved then it is currently not guaranteed to be in the same position as it was
804
- /// originally.
805
- ///
806
- /// Returns an `Err` if `script_pubkey` can't be found among the recipients of the
807
- /// transaction we are bumping.
808
- pub fn allow_shrinking (
809
- & mut self ,
810
- script_pubkey : ScriptBuf ,
811
- ) -> Result < & mut Self , AllowShrinkingError > {
812
- match self
813
- . params
814
- . recipients
815
- . iter ( )
816
- . position ( |( recipient_script, _) | * recipient_script == script_pubkey)
817
- {
818
- Some ( position) => {
819
- self . params . recipients . remove ( position) ;
820
- self . params . drain_to = Some ( script_pubkey) ;
821
- Ok ( self )
822
- }
823
- None => Err ( AllowShrinkingError :: MissingScriptPubKey ( script_pubkey) ) ,
824
- }
825
- }
826
- }
827
-
828
766
/// Ordering of the transaction's inputs and outputs
829
767
#[ derive( Default , Debug , Ord , PartialOrd , Eq , PartialEq , Hash , Clone , Copy ) ]
830
768
pub enum TxOrdering {
0 commit comments