88use persist:: KVStoreWalletPersister ;
99
1010use crate :: config:: Config ;
11- use crate :: logger:: { log_debug, log_error, log_info, log_trace, LdkLogger } ;
11+ use 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 ;
1515use crate :: payment:: { PaymentDetails , PaymentDirection , PaymentStatus } ;
16- use crate :: types:: PaymentStore ;
16+ use crate :: types:: { Broadcaster , PaymentStore } ;
1717use crate :: Error ;
1818
1919use lightning:: chain:: chaininterface:: BroadcasterInterface ;
@@ -50,7 +50,8 @@ use bitcoin::{
5050 WitnessProgram , WitnessVersion ,
5151} ;
5252
53- use std:: ops:: Deref ;
53+ use std:: future:: Future ;
54+ use std:: pin:: Pin ;
5455use std:: str:: FromStr ;
5556use std:: sync:: { Arc , Mutex } ;
5657
@@ -63,32 +64,23 @@ pub(crate) enum OnchainSendAmount {
6364pub ( crate ) mod persist;
6465pub ( crate ) mod ser;
6566
66- pub ( crate ) struct Wallet < B : Deref , E : Deref , L : Deref >
67- where
68- B :: Target : BroadcasterInterface ,
69- E :: Target : FeeEstimator ,
70- L :: Target : LdkLogger ,
71- {
67+ pub ( crate ) struct Wallet {
7268 // A BDK on-chain wallet.
7369 inner : Mutex < PersistedWallet < KVStoreWalletPersister > > ,
7470 persister : Mutex < KVStoreWalletPersister > ,
75- broadcaster : B ,
76- fee_estimator : E ,
71+ broadcaster : Arc < Broadcaster > ,
72+ fee_estimator : Arc < OnchainFeeEstimator > ,
7773 payment_store : Arc < PaymentStore > ,
7874 config : Arc < Config > ,
79- logger : L ,
75+ logger : Arc < Logger > ,
8076}
8177
82- impl < B : Deref , E : Deref , L : Deref > Wallet < B , E , L >
83- where
84- B :: Target : BroadcasterInterface ,
85- E :: Target : FeeEstimator ,
86- L :: Target : LdkLogger ,
87- {
78+ impl Wallet {
8879 pub ( crate ) fn new (
8980 wallet : bdk_wallet:: PersistedWallet < KVStoreWalletPersister > ,
90- wallet_persister : KVStoreWalletPersister , broadcaster : B , fee_estimator : E ,
91- payment_store : Arc < PaymentStore > , config : Arc < Config > , logger : L ,
81+ wallet_persister : KVStoreWalletPersister , broadcaster : Arc < Broadcaster > ,
82+ fee_estimator : Arc < OnchainFeeEstimator > , payment_store : Arc < PaymentStore > ,
83+ config : Arc < Config > , logger : Arc < Logger > ,
9284 ) -> Self {
9385 let inner = Mutex :: new ( wallet) ;
9486 let persister = Mutex :: new ( wallet_persister) ;
@@ -559,12 +551,7 @@ where
559551 }
560552}
561553
562- impl < B : Deref , E : Deref , L : Deref > Listen for Wallet < B , E , L >
563- where
564- B :: Target : BroadcasterInterface ,
565- E :: Target : FeeEstimator ,
566- L :: Target : LdkLogger ,
567- {
554+ impl Listen for Wallet {
568555 fn filtered_block_connected (
569556 & self , _header : & bitcoin:: block:: Header ,
570557 _txdata : & lightning:: chain:: transaction:: TransactionData , _height : u32 ,
@@ -624,12 +611,7 @@ where
624611 }
625612}
626613
627- impl < B : Deref , E : Deref , L : Deref > WalletSource for Wallet < B , E , L >
628- where
629- B :: Target : BroadcasterInterface ,
630- E :: Target : FeeEstimator ,
631- L :: Target : LdkLogger ,
632- {
614+ impl WalletSource for Wallet {
633615 fn list_confirmed_utxos ( & self ) -> Result < Vec < Utxo > , ( ) > {
634616 let locked_wallet = self . inner . lock ( ) . unwrap ( ) ;
635617 let mut utxos = Vec :: new ( ) ;
@@ -766,30 +748,20 @@ where
766748
767749/// Similar to [`KeysManager`], but overrides the destination and shutdown scripts so they are
768750/// directly spendable by the BDK wallet.
769- pub ( crate ) struct WalletKeysManager < B : Deref , E : Deref , L : Deref >
770- where
771- B :: Target : BroadcasterInterface ,
772- E :: Target : FeeEstimator ,
773- L :: Target : LdkLogger ,
774- {
751+ pub ( crate ) struct WalletKeysManager {
775752 inner : KeysManager ,
776- wallet : Arc < Wallet < B , E , L > > ,
777- logger : L ,
753+ wallet : Arc < Wallet > ,
754+ logger : Arc < Logger > ,
778755}
779756
780- impl < B : Deref , E : Deref , L : Deref > WalletKeysManager < B , E , L >
781- where
782- B :: Target : BroadcasterInterface ,
783- E :: Target : FeeEstimator ,
784- L :: Target : LdkLogger ,
785- {
757+ impl WalletKeysManager {
786758 /// Constructs a `WalletKeysManager` that overrides the destination and shutdown scripts.
787759 ///
788760 /// See [`KeysManager::new`] for more information on `seed`, `starting_time_secs`, and
789761 /// `starting_time_nanos`.
790762 pub fn new (
791- seed : & [ u8 ; 32 ] , starting_time_secs : u64 , starting_time_nanos : u32 ,
792- wallet : Arc < Wallet < B , E , L > > , logger : L ,
763+ seed : & [ u8 ; 32 ] , starting_time_secs : u64 , starting_time_nanos : u32 , wallet : Arc < Wallet > ,
764+ logger : Arc < Logger > ,
793765 ) -> Self {
794766 let inner = KeysManager :: new ( seed, starting_time_secs, starting_time_nanos) ;
795767 Self { inner, wallet, logger }
@@ -808,12 +780,7 @@ where
808780 }
809781}
810782
811- impl < B : Deref , E : Deref , L : Deref > NodeSigner for WalletKeysManager < B , E , L >
812- where
813- B :: Target : BroadcasterInterface ,
814- E :: Target : FeeEstimator ,
815- L :: Target : LdkLogger ,
816- {
783+ impl NodeSigner for WalletKeysManager {
817784 fn get_node_id ( & self , recipient : Recipient ) -> Result < PublicKey , ( ) > {
818785 self . inner . get_node_id ( recipient)
819786 }
@@ -845,12 +812,7 @@ where
845812 }
846813}
847814
848- impl < B : Deref , E : Deref , L : Deref > OutputSpender for WalletKeysManager < B , E , L >
849- where
850- B :: Target : BroadcasterInterface ,
851- E :: Target : FeeEstimator ,
852- L :: Target : LdkLogger ,
853- {
815+ impl OutputSpender for WalletKeysManager {
854816 /// See [`KeysManager::spend_spendable_outputs`] for documentation on this method.
855817 fn spend_spendable_outputs (
856818 & self , descriptors : & [ & SpendableOutputDescriptor ] , outputs : Vec < TxOut > ,
@@ -868,23 +830,13 @@ where
868830 }
869831}
870832
871- impl < B : Deref , E : Deref , L : Deref > EntropySource for WalletKeysManager < B , E , L >
872- where
873- B :: Target : BroadcasterInterface ,
874- E :: Target : FeeEstimator ,
875- L :: Target : LdkLogger ,
876- {
833+ impl EntropySource for WalletKeysManager {
877834 fn get_secure_random_bytes ( & self ) -> [ u8 ; 32 ] {
878835 self . inner . get_secure_random_bytes ( )
879836 }
880837}
881838
882- impl < B : Deref , E : Deref , L : Deref > SignerProvider for WalletKeysManager < B , E , L >
883- where
884- B :: Target : BroadcasterInterface ,
885- E :: Target : FeeEstimator ,
886- L :: Target : LdkLogger ,
887- {
839+ impl SignerProvider for WalletKeysManager {
888840 type EcdsaSigner = InMemorySigner ;
889841
890842 fn generate_channel_keys_id ( & self , inbound : bool , user_channel_id : u128 ) -> [ u8 ; 32 ] {
@@ -922,16 +874,20 @@ where
922874 }
923875}
924876
925- impl < B : Deref , E : Deref , L : Deref > ChangeDestinationSource for WalletKeysManager < B , E , L >
926- where
927- B :: Target : BroadcasterInterface ,
928- E :: Target : FeeEstimator ,
929- L :: Target : LdkLogger ,
930- {
931- fn get_change_destination_script ( & self ) -> Result < ScriptBuf , ( ) > {
932- let address = self . wallet . get_new_internal_address ( ) . map_err ( |e| {
933- log_error ! ( self . logger, "Failed to retrieve new address from wallet: {}" , e) ;
934- } ) ?;
935- Ok ( address. script_pubkey ( ) )
877+ impl ChangeDestinationSource for WalletKeysManager {
878+ fn get_change_destination_script < ' a > (
879+ & self ,
880+ ) -> Pin < Box < dyn Future < Output = Result < ScriptBuf , ( ) > > + Send + ' a > > {
881+ let wallet = Arc :: clone ( & self . wallet ) ;
882+ let logger = Arc :: clone ( & self . logger ) ;
883+ Box :: pin ( async move {
884+ wallet
885+ . get_new_internal_address ( )
886+ . map_err ( |e| {
887+ log_error ! ( logger, "Failed to retrieve new address from wallet: {}" , e) ;
888+ } )
889+ . map ( |addr| addr. script_pubkey ( ) )
890+ . map_err ( |_| ( ) )
891+ } )
936892 }
937893}
0 commit comments