@@ -10,9 +10,10 @@ use persist::KVStoreWalletPersister;
10
10
use crate :: config:: Config ;
11
11
use crate :: logger:: { log_debug, log_error, log_info, log_trace, LdkLogger , Logger } ;
12
12
13
- use crate :: fee_estimator:: { ConfirmationTarget , FeeEstimator } ;
13
+ use crate :: fee_estimator:: { ConfirmationTarget , FeeEstimator , OnchainFeeEstimator } ;
14
14
use crate :: payment:: store:: { ConfirmationStatus , PaymentStore } ;
15
15
use crate :: payment:: { PaymentDetails , PaymentDirection , PaymentStatus } ;
16
+ use crate :: types:: Broadcaster ;
16
17
use crate :: Error ;
17
18
18
19
use lightning:: chain:: chaininterface:: BroadcasterInterface ;
@@ -49,7 +50,8 @@ use bitcoin::{
49
50
WitnessProgram , WitnessVersion ,
50
51
} ;
51
52
52
- use std:: ops:: Deref ;
53
+ use std:: future:: Future ;
54
+ use std:: pin:: Pin ;
53
55
use std:: str:: FromStr ;
54
56
use std:: sync:: { Arc , Mutex } ;
55
57
@@ -62,32 +64,23 @@ pub(crate) enum OnchainSendAmount {
62
64
pub ( crate ) mod persist;
63
65
pub ( crate ) mod ser;
64
66
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 {
71
68
// A BDK on-chain wallet.
72
69
inner : Mutex < PersistedWallet < KVStoreWalletPersister > > ,
73
70
persister : Mutex < KVStoreWalletPersister > ,
74
- broadcaster : B ,
75
- fee_estimator : E ,
71
+ broadcaster : Arc < Broadcaster > ,
72
+ fee_estimator : Arc < OnchainFeeEstimator > ,
76
73
payment_store : Arc < PaymentStore < Arc < Logger > > > ,
77
74
config : Arc < Config > ,
78
- logger : L ,
75
+ logger : Arc < Logger > ,
79
76
}
80
77
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 {
87
79
pub ( crate ) fn new (
88
80
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 > ,
91
84
) -> Self {
92
85
let inner = Mutex :: new ( wallet) ;
93
86
let persister = Mutex :: new ( wallet_persister) ;
@@ -550,12 +543,7 @@ where
550
543
}
551
544
}
552
545
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 {
559
547
fn filtered_block_connected (
560
548
& self , _header : & bitcoin:: block:: Header ,
561
549
_txdata : & lightning:: chain:: transaction:: TransactionData , _height : u32 ,
@@ -615,12 +603,7 @@ where
615
603
}
616
604
}
617
605
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 {
624
607
fn list_confirmed_utxos ( & self ) -> Result < Vec < Utxo > , ( ) > {
625
608
let locked_wallet = self . inner . lock ( ) . unwrap ( ) ;
626
609
let mut utxos = Vec :: new ( ) ;
@@ -757,30 +740,20 @@ where
757
740
758
741
/// Similar to [`KeysManager`], but overrides the destination and shutdown scripts so they are
759
742
/// 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 {
766
744
inner : KeysManager ,
767
- wallet : Arc < Wallet < B , E , L > > ,
768
- logger : L ,
745
+ wallet : Arc < Wallet > ,
746
+ logger : Arc < Logger > ,
769
747
}
770
748
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 {
777
750
/// Constructs a `WalletKeysManager` that overrides the destination and shutdown scripts.
778
751
///
779
752
/// See [`KeysManager::new`] for more information on `seed`, `starting_time_secs`, and
780
753
/// `starting_time_nanos`.
781
754
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 > ,
784
757
) -> Self {
785
758
let inner = KeysManager :: new ( seed, starting_time_secs, starting_time_nanos) ;
786
759
Self { inner, wallet, logger }
@@ -799,12 +772,7 @@ where
799
772
}
800
773
}
801
774
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 {
808
776
fn get_node_id ( & self , recipient : Recipient ) -> Result < PublicKey , ( ) > {
809
777
self . inner . get_node_id ( recipient)
810
778
}
@@ -836,12 +804,7 @@ where
836
804
}
837
805
}
838
806
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 {
845
808
/// See [`KeysManager::spend_spendable_outputs`] for documentation on this method.
846
809
fn spend_spendable_outputs (
847
810
& self , descriptors : & [ & SpendableOutputDescriptor ] , outputs : Vec < TxOut > ,
@@ -859,23 +822,13 @@ where
859
822
}
860
823
}
861
824
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 {
868
826
fn get_secure_random_bytes ( & self ) -> [ u8 ; 32 ] {
869
827
self . inner . get_secure_random_bytes ( )
870
828
}
871
829
}
872
830
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 {
879
832
type EcdsaSigner = InMemorySigner ;
880
833
881
834
fn generate_channel_keys_id ( & self , inbound : bool , user_channel_id : u128 ) -> [ u8 ; 32 ] {
@@ -913,16 +866,20 @@ where
913
866
}
914
867
}
915
868
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
+ } )
927
884
}
928
885
}
0 commit comments