8
8
use persist:: KVStoreWalletPersister ;
9
9
10
10
use 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 } ;
12
12
13
- use crate :: fee_estimator:: { ConfirmationTarget , FeeEstimator } ;
13
+ use crate :: fee_estimator:: { ConfirmationTarget , FeeEstimator , OnchainFeeEstimator } ;
14
14
use crate :: payment:: store:: ConfirmationStatus ;
15
15
use crate :: payment:: { PaymentDetails , PaymentDirection , PaymentStatus } ;
16
- use crate :: types:: PaymentStore ;
16
+ use crate :: types:: { Broadcaster , PaymentStore } ;
17
17
use crate :: Error ;
18
18
19
19
use lightning:: chain:: chaininterface:: BroadcasterInterface ;
@@ -50,7 +50,8 @@ use bitcoin::{
50
50
WitnessProgram , WitnessVersion ,
51
51
} ;
52
52
53
- use std:: ops:: Deref ;
53
+ use std:: future:: Future ;
54
+ use std:: pin:: Pin ;
54
55
use std:: str:: FromStr ;
55
56
use std:: sync:: { Arc , Mutex } ;
56
57
@@ -63,32 +64,23 @@ pub(crate) enum OnchainSendAmount {
63
64
pub ( crate ) mod persist;
64
65
pub ( crate ) mod ser;
65
66
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 {
72
68
// A BDK on-chain wallet.
73
69
inner : Mutex < PersistedWallet < KVStoreWalletPersister > > ,
74
70
persister : Mutex < KVStoreWalletPersister > ,
75
- broadcaster : B ,
76
- fee_estimator : E ,
71
+ broadcaster : Arc < Broadcaster > ,
72
+ fee_estimator : Arc < OnchainFeeEstimator > ,
77
73
payment_store : Arc < PaymentStore > ,
78
74
config : Arc < Config > ,
79
- logger : L ,
75
+ logger : Arc < Logger > ,
80
76
}
81
77
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 {
88
79
pub ( crate ) fn new (
89
80
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 > ,
92
84
) -> Self {
93
85
let inner = Mutex :: new ( wallet) ;
94
86
let persister = Mutex :: new ( wallet_persister) ;
@@ -570,12 +562,7 @@ where
570
562
}
571
563
}
572
564
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 {
579
566
fn filtered_block_connected (
580
567
& self , _header : & bitcoin:: block:: Header ,
581
568
_txdata : & lightning:: chain:: transaction:: TransactionData , _height : u32 ,
@@ -635,12 +622,7 @@ where
635
622
}
636
623
}
637
624
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 {
644
626
fn list_confirmed_utxos ( & self ) -> Result < Vec < Utxo > , ( ) > {
645
627
let locked_wallet = self . inner . lock ( ) . unwrap ( ) ;
646
628
let mut utxos = Vec :: new ( ) ;
@@ -777,30 +759,20 @@ where
777
759
778
760
/// Similar to [`KeysManager`], but overrides the destination and shutdown scripts so they are
779
761
/// 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 {
786
763
inner : KeysManager ,
787
- wallet : Arc < Wallet < B , E , L > > ,
788
- logger : L ,
764
+ wallet : Arc < Wallet > ,
765
+ logger : Arc < Logger > ,
789
766
}
790
767
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 {
797
769
/// Constructs a `WalletKeysManager` that overrides the destination and shutdown scripts.
798
770
///
799
771
/// See [`KeysManager::new`] for more information on `seed`, `starting_time_secs`, and
800
772
/// `starting_time_nanos`.
801
773
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 > ,
804
776
) -> Self {
805
777
let inner = KeysManager :: new ( seed, starting_time_secs, starting_time_nanos) ;
806
778
Self { inner, wallet, logger }
@@ -819,12 +791,7 @@ where
819
791
}
820
792
}
821
793
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 {
828
795
fn get_node_id ( & self , recipient : Recipient ) -> Result < PublicKey , ( ) > {
829
796
self . inner . get_node_id ( recipient)
830
797
}
@@ -856,12 +823,7 @@ where
856
823
}
857
824
}
858
825
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 {
865
827
/// See [`KeysManager::spend_spendable_outputs`] for documentation on this method.
866
828
fn spend_spendable_outputs (
867
829
& self , descriptors : & [ & SpendableOutputDescriptor ] , outputs : Vec < TxOut > ,
@@ -879,23 +841,13 @@ where
879
841
}
880
842
}
881
843
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 {
888
845
fn get_secure_random_bytes ( & self ) -> [ u8 ; 32 ] {
889
846
self . inner . get_secure_random_bytes ( )
890
847
}
891
848
}
892
849
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 {
899
851
type EcdsaSigner = InMemorySigner ;
900
852
901
853
fn generate_channel_keys_id ( & self , inbound : bool , user_channel_id : u128 ) -> [ u8 ; 32 ] {
@@ -933,16 +885,20 @@ where
933
885
}
934
886
}
935
887
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
+ } )
947
903
}
948
904
}
0 commit comments