@@ -10,9 +10,10 @@ use persist::KVStoreWalletPersister;
1010use crate :: config:: Config ;
1111use crate :: logger:: { log_debug, log_error, log_info, log_trace, LdkLogger , Logger } ;
1212
13- use crate :: fee_estimator:: { ConfirmationTarget , FeeEstimator } ;
13+ use crate :: fee_estimator:: { ConfirmationTarget , FeeEstimator , OnchainFeeEstimator } ;
1414use crate :: payment:: store:: { ConfirmationStatus , PaymentStore } ;
1515use crate :: payment:: { PaymentDetails , PaymentDirection , PaymentStatus } ;
16+ use crate :: types:: Broadcaster ;
1617use crate :: Error ;
1718
1819use lightning:: chain:: chaininterface:: BroadcasterInterface ;
@@ -49,7 +50,8 @@ use bitcoin::{
4950 WitnessProgram , WitnessVersion ,
5051} ;
5152
52- use std:: ops:: Deref ;
53+ use std:: future:: Future ;
54+ use std:: pin:: Pin ;
5355use std:: str:: FromStr ;
5456use std:: sync:: { Arc , Mutex } ;
5557
@@ -62,32 +64,23 @@ pub(crate) enum OnchainSendAmount {
6264pub ( crate ) mod persist;
6365pub ( crate ) mod ser;
6466
65- pub ( crate ) struct Wallet < B : Deref , E : Deref , L : Deref >
66- where
67- B :: Target : BroadcasterInterface ,
68- E :: Target : FeeEstimator ,
69- L :: Target : LdkLogger ,
70- {
67+ pub ( crate ) struct Wallet {
7168 // A BDK on-chain wallet.
7269 inner : Mutex < PersistedWallet < KVStoreWalletPersister > > ,
7370 persister : Mutex < KVStoreWalletPersister > ,
74- broadcaster : B ,
75- fee_estimator : E ,
71+ broadcaster : Arc < Broadcaster > ,
72+ fee_estimator : Arc < OnchainFeeEstimator > ,
7673 payment_store : Arc < PaymentStore < Arc < Logger > > > ,
7774 config : Arc < Config > ,
78- logger : L ,
75+ logger : Arc < Logger > ,
7976}
8077
81- impl < B : Deref , E : Deref , L : Deref > Wallet < B , E , L >
82- where
83- B :: Target : BroadcasterInterface ,
84- E :: Target : FeeEstimator ,
85- L :: Target : LdkLogger ,
86- {
78+ impl Wallet {
8779 pub ( crate ) fn new (
8880 wallet : bdk_wallet:: PersistedWallet < KVStoreWalletPersister > ,
89- wallet_persister : KVStoreWalletPersister , broadcaster : B , fee_estimator : E ,
90- payment_store : Arc < PaymentStore < Arc < Logger > > > , config : Arc < Config > , logger : L ,
81+ wallet_persister : KVStoreWalletPersister , broadcaster : Arc < Broadcaster > ,
82+ fee_estimator : Arc < OnchainFeeEstimator > , payment_store : Arc < PaymentStore < Arc < Logger > > > ,
83+ config : Arc < Config > , logger : Arc < Logger > ,
9184 ) -> Self {
9285 let inner = Mutex :: new ( wallet) ;
9386 let persister = Mutex :: new ( wallet_persister) ;
@@ -550,12 +543,7 @@ where
550543 }
551544}
552545
553- impl < B : Deref , E : Deref , L : Deref > Listen for Wallet < B , E , L >
554- where
555- B :: Target : BroadcasterInterface ,
556- E :: Target : FeeEstimator ,
557- L :: Target : LdkLogger ,
558- {
546+ impl Listen for Wallet {
559547 fn filtered_block_connected (
560548 & self , _header : & bitcoin:: block:: Header ,
561549 _txdata : & lightning:: chain:: transaction:: TransactionData , _height : u32 ,
@@ -615,12 +603,7 @@ where
615603 }
616604}
617605
618- impl < B : Deref , E : Deref , L : Deref > WalletSource for Wallet < B , E , L >
619- where
620- B :: Target : BroadcasterInterface ,
621- E :: Target : FeeEstimator ,
622- L :: Target : LdkLogger ,
623- {
606+ impl WalletSource for Wallet {
624607 fn list_confirmed_utxos ( & self ) -> Result < Vec < Utxo > , ( ) > {
625608 let locked_wallet = self . inner . lock ( ) . unwrap ( ) ;
626609 let mut utxos = Vec :: new ( ) ;
@@ -757,30 +740,20 @@ where
757740
758741/// Similar to [`KeysManager`], but overrides the destination and shutdown scripts so they are
759742/// directly spendable by the BDK wallet.
760- pub ( crate ) struct WalletKeysManager < B : Deref , E : Deref , L : Deref >
761- where
762- B :: Target : BroadcasterInterface ,
763- E :: Target : FeeEstimator ,
764- L :: Target : LdkLogger ,
765- {
743+ pub ( crate ) struct WalletKeysManager {
766744 inner : KeysManager ,
767- wallet : Arc < Wallet < B , E , L > > ,
768- logger : L ,
745+ wallet : Arc < Wallet > ,
746+ logger : Arc < Logger > ,
769747}
770748
771- impl < B : Deref , E : Deref , L : Deref > WalletKeysManager < B , E , L >
772- where
773- B :: Target : BroadcasterInterface ,
774- E :: Target : FeeEstimator ,
775- L :: Target : LdkLogger ,
776- {
749+ impl WalletKeysManager {
777750 /// Constructs a `WalletKeysManager` that overrides the destination and shutdown scripts.
778751 ///
779752 /// See [`KeysManager::new`] for more information on `seed`, `starting_time_secs`, and
780753 /// `starting_time_nanos`.
781754 pub fn new (
782- seed : & [ u8 ; 32 ] , starting_time_secs : u64 , starting_time_nanos : u32 ,
783- wallet : Arc < Wallet < B , E , L > > , logger : L ,
755+ seed : & [ u8 ; 32 ] , starting_time_secs : u64 , starting_time_nanos : u32 , wallet : Arc < Wallet > ,
756+ logger : Arc < Logger > ,
784757 ) -> Self {
785758 let inner = KeysManager :: new ( seed, starting_time_secs, starting_time_nanos) ;
786759 Self { inner, wallet, logger }
@@ -799,12 +772,7 @@ where
799772 }
800773}
801774
802- impl < B : Deref , E : Deref , L : Deref > NodeSigner for WalletKeysManager < B , E , L >
803- where
804- B :: Target : BroadcasterInterface ,
805- E :: Target : FeeEstimator ,
806- L :: Target : LdkLogger ,
807- {
775+ impl NodeSigner for WalletKeysManager {
808776 fn get_node_id ( & self , recipient : Recipient ) -> Result < PublicKey , ( ) > {
809777 self . inner . get_node_id ( recipient)
810778 }
@@ -836,12 +804,7 @@ where
836804 }
837805}
838806
839- impl < B : Deref , E : Deref , L : Deref > OutputSpender for WalletKeysManager < B , E , L >
840- where
841- B :: Target : BroadcasterInterface ,
842- E :: Target : FeeEstimator ,
843- L :: Target : LdkLogger ,
844- {
807+ impl OutputSpender for WalletKeysManager {
845808 /// See [`KeysManager::spend_spendable_outputs`] for documentation on this method.
846809 fn spend_spendable_outputs (
847810 & self , descriptors : & [ & SpendableOutputDescriptor ] , outputs : Vec < TxOut > ,
@@ -859,23 +822,13 @@ where
859822 }
860823}
861824
862- impl < B : Deref , E : Deref , L : Deref > EntropySource for WalletKeysManager < B , E , L >
863- where
864- B :: Target : BroadcasterInterface ,
865- E :: Target : FeeEstimator ,
866- L :: Target : LdkLogger ,
867- {
825+ impl EntropySource for WalletKeysManager {
868826 fn get_secure_random_bytes ( & self ) -> [ u8 ; 32 ] {
869827 self . inner . get_secure_random_bytes ( )
870828 }
871829}
872830
873- impl < B : Deref , E : Deref , L : Deref > SignerProvider for WalletKeysManager < B , E , L >
874- where
875- B :: Target : BroadcasterInterface ,
876- E :: Target : FeeEstimator ,
877- L :: Target : LdkLogger ,
878- {
831+ impl SignerProvider for WalletKeysManager {
879832 type EcdsaSigner = InMemorySigner ;
880833
881834 fn generate_channel_keys_id ( & self , inbound : bool , user_channel_id : u128 ) -> [ u8 ; 32 ] {
@@ -913,16 +866,20 @@ where
913866 }
914867}
915868
916- impl < B : Deref , E : Deref , L : Deref > ChangeDestinationSource for WalletKeysManager < B , E , L >
917- where
918- B :: Target : BroadcasterInterface ,
919- E :: Target : FeeEstimator ,
920- L :: Target : LdkLogger ,
921- {
922- fn get_change_destination_script ( & self ) -> Result < ScriptBuf , ( ) > {
923- let address = self . wallet . get_new_internal_address ( ) . map_err ( |e| {
924- log_error ! ( self . logger, "Failed to retrieve new address from wallet: {}" , e) ;
925- } ) ?;
926- Ok ( address. script_pubkey ( ) )
869+ impl ChangeDestinationSource for WalletKeysManager {
870+ fn get_change_destination_script < ' a > (
871+ & self ,
872+ ) -> Pin < Box < dyn Future < Output = Result < ScriptBuf , ( ) > > + Send + ' a > > {
873+ let wallet = Arc :: clone ( & self . wallet ) ;
874+ let logger = Arc :: clone ( & self . logger ) ;
875+ Box :: pin ( async move {
876+ wallet
877+ . get_new_internal_address ( )
878+ . map_err ( |e| {
879+ log_error ! ( logger, "Failed to retrieve new address from wallet: {}" , e) ;
880+ } )
881+ . map ( |addr| addr. script_pubkey ( ) )
882+ . map_err ( |_| ( ) )
883+ } )
927884 }
928885}
0 commit comments