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) ;
@@ -559,12 +551,7 @@ where
559
551
}
560
552
}
561
553
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 {
568
555
fn filtered_block_connected (
569
556
& self , _header : & bitcoin:: block:: Header ,
570
557
_txdata : & lightning:: chain:: transaction:: TransactionData , _height : u32 ,
@@ -624,12 +611,7 @@ where
624
611
}
625
612
}
626
613
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 {
633
615
fn list_confirmed_utxos ( & self ) -> Result < Vec < Utxo > , ( ) > {
634
616
let locked_wallet = self . inner . lock ( ) . unwrap ( ) ;
635
617
let mut utxos = Vec :: new ( ) ;
@@ -766,30 +748,20 @@ where
766
748
767
749
/// Similar to [`KeysManager`], but overrides the destination and shutdown scripts so they are
768
750
/// 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 {
775
752
inner : KeysManager ,
776
- wallet : Arc < Wallet < B , E , L > > ,
777
- logger : L ,
753
+ wallet : Arc < Wallet > ,
754
+ logger : Arc < Logger > ,
778
755
}
779
756
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 {
786
758
/// Constructs a `WalletKeysManager` that overrides the destination and shutdown scripts.
787
759
///
788
760
/// See [`KeysManager::new`] for more information on `seed`, `starting_time_secs`, and
789
761
/// `starting_time_nanos`.
790
762
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 > ,
793
765
) -> Self {
794
766
let inner = KeysManager :: new ( seed, starting_time_secs, starting_time_nanos) ;
795
767
Self { inner, wallet, logger }
@@ -808,12 +780,7 @@ where
808
780
}
809
781
}
810
782
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 {
817
784
fn get_node_id ( & self , recipient : Recipient ) -> Result < PublicKey , ( ) > {
818
785
self . inner . get_node_id ( recipient)
819
786
}
@@ -845,12 +812,7 @@ where
845
812
}
846
813
}
847
814
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 {
854
816
/// See [`KeysManager::spend_spendable_outputs`] for documentation on this method.
855
817
fn spend_spendable_outputs (
856
818
& self , descriptors : & [ & SpendableOutputDescriptor ] , outputs : Vec < TxOut > ,
@@ -868,23 +830,13 @@ where
868
830
}
869
831
}
870
832
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 {
877
834
fn get_secure_random_bytes ( & self ) -> [ u8 ; 32 ] {
878
835
self . inner . get_secure_random_bytes ( )
879
836
}
880
837
}
881
838
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 {
888
840
type EcdsaSigner = InMemorySigner ;
889
841
890
842
fn generate_channel_keys_id ( & self , inbound : bool , user_channel_id : u128 ) -> [ u8 ; 32 ] {
@@ -922,16 +874,20 @@ where
922
874
}
923
875
}
924
876
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
+ } )
936
892
}
937
893
}
0 commit comments