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) ;
@@ -570,12 +562,7 @@ where
570562 }
571563}
572564
573- impl < B : Deref , E : Deref , L : Deref > Listen for Wallet < B , E , L >
574- where
575- B :: Target : BroadcasterInterface ,
576- E :: Target : FeeEstimator ,
577- L :: Target : LdkLogger ,
578- {
565+ impl Listen for Wallet {
579566 fn filtered_block_connected (
580567 & self , _header : & bitcoin:: block:: Header ,
581568 _txdata : & lightning:: chain:: transaction:: TransactionData , _height : u32 ,
@@ -635,12 +622,7 @@ where
635622 }
636623}
637624
638- impl < B : Deref , E : Deref , L : Deref > WalletSource for Wallet < B , E , L >
639- where
640- B :: Target : BroadcasterInterface ,
641- E :: Target : FeeEstimator ,
642- L :: Target : LdkLogger ,
643- {
625+ impl WalletSource for Wallet {
644626 fn list_confirmed_utxos ( & self ) -> Result < Vec < Utxo > , ( ) > {
645627 let locked_wallet = self . inner . lock ( ) . unwrap ( ) ;
646628 let mut utxos = Vec :: new ( ) ;
@@ -777,30 +759,20 @@ where
777759
778760/// Similar to [`KeysManager`], but overrides the destination and shutdown scripts so they are
779761/// directly spendable by the BDK wallet.
780- pub ( crate ) struct WalletKeysManager < B : Deref , E : Deref , L : Deref >
781- where
782- B :: Target : BroadcasterInterface ,
783- E :: Target : FeeEstimator ,
784- L :: Target : LdkLogger ,
785- {
762+ pub ( crate ) struct WalletKeysManager {
786763 inner : KeysManager ,
787- wallet : Arc < Wallet < B , E , L > > ,
788- logger : L ,
764+ wallet : Arc < Wallet > ,
765+ logger : Arc < Logger > ,
789766}
790767
791- impl < B : Deref , E : Deref , L : Deref > WalletKeysManager < B , E , L >
792- where
793- B :: Target : BroadcasterInterface ,
794- E :: Target : FeeEstimator ,
795- L :: Target : LdkLogger ,
796- {
768+ impl WalletKeysManager {
797769 /// Constructs a `WalletKeysManager` that overrides the destination and shutdown scripts.
798770 ///
799771 /// See [`KeysManager::new`] for more information on `seed`, `starting_time_secs`, and
800772 /// `starting_time_nanos`.
801773 pub fn new (
802- seed : & [ u8 ; 32 ] , starting_time_secs : u64 , starting_time_nanos : u32 ,
803- wallet : Arc < Wallet < B , E , L > > , logger : L ,
774+ seed : & [ u8 ; 32 ] , starting_time_secs : u64 , starting_time_nanos : u32 , wallet : Arc < Wallet > ,
775+ logger : Arc < Logger > ,
804776 ) -> Self {
805777 let inner = KeysManager :: new ( seed, starting_time_secs, starting_time_nanos) ;
806778 Self { inner, wallet, logger }
@@ -819,12 +791,7 @@ where
819791 }
820792}
821793
822- impl < B : Deref , E : Deref , L : Deref > NodeSigner for WalletKeysManager < B , E , L >
823- where
824- B :: Target : BroadcasterInterface ,
825- E :: Target : FeeEstimator ,
826- L :: Target : LdkLogger ,
827- {
794+ impl NodeSigner for WalletKeysManager {
828795 fn get_node_id ( & self , recipient : Recipient ) -> Result < PublicKey , ( ) > {
829796 self . inner . get_node_id ( recipient)
830797 }
@@ -856,12 +823,7 @@ where
856823 }
857824}
858825
859- impl < B : Deref , E : Deref , L : Deref > OutputSpender for WalletKeysManager < B , E , L >
860- where
861- B :: Target : BroadcasterInterface ,
862- E :: Target : FeeEstimator ,
863- L :: Target : LdkLogger ,
864- {
826+ impl OutputSpender for WalletKeysManager {
865827 /// See [`KeysManager::spend_spendable_outputs`] for documentation on this method.
866828 fn spend_spendable_outputs (
867829 & self , descriptors : & [ & SpendableOutputDescriptor ] , outputs : Vec < TxOut > ,
@@ -879,23 +841,13 @@ where
879841 }
880842}
881843
882- impl < B : Deref , E : Deref , L : Deref > EntropySource for WalletKeysManager < B , E , L >
883- where
884- B :: Target : BroadcasterInterface ,
885- E :: Target : FeeEstimator ,
886- L :: Target : LdkLogger ,
887- {
844+ impl EntropySource for WalletKeysManager {
888845 fn get_secure_random_bytes ( & self ) -> [ u8 ; 32 ] {
889846 self . inner . get_secure_random_bytes ( )
890847 }
891848}
892849
893- impl < B : Deref , E : Deref , L : Deref > SignerProvider for WalletKeysManager < B , E , L >
894- where
895- B :: Target : BroadcasterInterface ,
896- E :: Target : FeeEstimator ,
897- L :: Target : LdkLogger ,
898- {
850+ impl SignerProvider for WalletKeysManager {
899851 type EcdsaSigner = InMemorySigner ;
900852
901853 fn generate_channel_keys_id ( & self , inbound : bool , user_channel_id : u128 ) -> [ u8 ; 32 ] {
@@ -933,16 +885,20 @@ where
933885 }
934886}
935887
936- impl < B : Deref , E : Deref , L : Deref > ChangeDestinationSource for WalletKeysManager < B , E , L >
937- where
938- B :: Target : BroadcasterInterface ,
939- E :: Target : FeeEstimator ,
940- L :: Target : LdkLogger ,
941- {
942- fn get_change_destination_script ( & self ) -> Result < ScriptBuf , ( ) > {
943- let address = self . wallet . get_new_internal_address ( ) . map_err ( |e| {
944- log_error ! ( self . logger, "Failed to retrieve new address from wallet: {}" , e) ;
945- } ) ?;
946- Ok ( address. script_pubkey ( ) )
888+ impl ChangeDestinationSource for WalletKeysManager {
889+ fn get_change_destination_script < ' a > (
890+ & self ,
891+ ) -> Pin < Box < dyn Future < Output = Result < ScriptBuf , ( ) > > + Send + ' a > > {
892+ let wallet = Arc :: clone ( & self . wallet ) ;
893+ let logger = Arc :: clone ( & self . logger ) ;
894+ Box :: pin ( async move {
895+ wallet
896+ . get_new_internal_address ( )
897+ . map_err ( |e| {
898+ log_error ! ( logger, "Failed to retrieve new address from wallet: {}" , e) ;
899+ } )
900+ . map ( |addr| addr. script_pubkey ( ) )
901+ . map_err ( |_| ( ) )
902+ } )
947903 }
948904}
0 commit comments