@@ -34,7 +34,7 @@ use ln::features::InitFeatures;
34
34
use ln:: msgs;
35
35
use ln:: onion_utils;
36
36
use ln:: msgs:: { ChannelMessageHandler , DecodeError , LightningError } ;
37
- use chain:: keysinterface:: { ChannelKeys , KeysInterface , InMemoryChannelKeys } ;
37
+ use chain:: keysinterface:: { ChannelKeys , KeysInterface , KeysManager , InMemoryChannelKeys } ;
38
38
use util:: config:: UserConfig ;
39
39
use util:: { byte_utils, events} ;
40
40
use util:: ser:: { Readable , ReadableArgs , Writeable , Writer } ;
@@ -292,16 +292,20 @@ const ERR: () = "You need at least 32 bit pointers (well, usize, but we'll assum
292
292
/// when you're using lightning-net-tokio (since tokio::spawn requires parameters with static
293
293
/// lifetimes). Other times you can afford a reference, which is more efficient, in which case
294
294
/// SimpleRefChannelManager is the more appropriate type. Defining these type aliases prevents
295
- /// issues such as overly long function definitions.
296
- pub type SimpleArcChannelManager < M , T > = Arc < ChannelManager < InMemoryChannelKeys , Arc < M > , Arc < T > > > ;
295
+ /// issues such as overly long function definitions. Note that the ChannelManager can take any
296
+ /// type that implements KeysInterface for its keys manager, but this type alias chooses the
297
+ /// concrete type of the KeysManager.
298
+ pub type SimpleArcChannelManager < M , T > = Arc < ChannelManager < InMemoryChannelKeys , Arc < M > , Arc < T > , Arc < KeysManager > > > ;
297
299
298
300
/// SimpleRefChannelManager is a type alias for a ChannelManager reference, and is the reference
299
301
/// counterpart to the SimpleArcChannelManager type alias. Use this type by default when you don't
300
302
/// need a ChannelManager with a static lifetime. You'll need a static lifetime in cases such as
301
303
/// usage of lightning-net-tokio (since tokio::spawn requires parameters with static lifetimes).
302
304
/// But if this is not necessary, using a reference is more efficient. Defining these type aliases
303
- /// helps with issues such as long function definitions.
304
- pub type SimpleRefChannelManager < ' a , ' b , M , T > = ChannelManager < InMemoryChannelKeys , & ' a M , & ' b T > ;
305
+ /// helps with issues such as long function definitions. Note that the ChannelManager can take any
306
+ /// type that implements KeysInterface for its keys manager, but this type alias chooses the
307
+ /// concrete type of the KeysManager.
308
+ pub type SimpleRefChannelManager < ' a , ' b , ' c , M , T > = ChannelManager < InMemoryChannelKeys , & ' a M , & ' b T , & ' c KeysManager > ;
305
309
306
310
/// Manager which keeps track of a number of channels and sends messages to the appropriate
307
311
/// channel, also tracking HTLC preimages and forwarding onion packets appropriately.
@@ -339,9 +343,10 @@ pub type SimpleRefChannelManager<'a, 'b, M, T> = ChannelManager<InMemoryChannelK
339
343
/// essentially you should default to using a SimpleRefChannelManager, and use a
340
344
/// SimpleArcChannelManager when you require a ChannelManager with a static lifetime, such as when
341
345
/// you're using lightning-net-tokio.
342
- pub struct ChannelManager < ChanSigner : ChannelKeys , M : Deref , T : Deref >
346
+ pub struct ChannelManager < ChanSigner : ChannelKeys , M : Deref , T : Deref , K : Deref >
343
347
where M :: Target : ManyChannelMonitor < ChanSigner > ,
344
348
T :: Target : BroadcasterInterface ,
349
+ K :: Target : KeysInterface < ChanKeySigner = ChanSigner > ,
345
350
{
346
351
default_configuration : UserConfig ,
347
352
genesis_hash : Sha256dHash ,
@@ -376,7 +381,7 @@ pub struct ChannelManager<ChanSigner: ChannelKeys, M: Deref, T: Deref>
376
381
/// Taken first everywhere where we are making changes before any other locks.
377
382
total_consistency_lock : RwLock < ( ) > ,
378
383
379
- keys_manager : Arc < KeysInterface < ChanKeySigner = ChanSigner > > ,
384
+ keys_manager : K ,
380
385
381
386
logger : Arc < Logger > ,
382
387
}
@@ -612,9 +617,10 @@ macro_rules! maybe_break_monitor_err {
612
617
}
613
618
}
614
619
615
- impl < ChanSigner : ChannelKeys , M : Deref , T : Deref > ChannelManager < ChanSigner , M , T >
620
+ impl < ChanSigner : ChannelKeys , M : Deref , T : Deref , K : Deref > ChannelManager < ChanSigner , M , T , K >
616
621
where M :: Target : ManyChannelMonitor < ChanSigner > ,
617
622
T :: Target : BroadcasterInterface ,
623
+ K :: Target : KeysInterface < ChanKeySigner = ChanSigner > ,
618
624
{
619
625
/// Constructs a new ChannelManager to hold several channels and route between them.
620
626
///
@@ -634,7 +640,7 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> ChannelManager<ChanSigner, M,
634
640
/// the ChannelManager as a listener to the BlockNotifier and call the BlockNotifier's
635
641
/// `block_(dis)connected` methods, which will notify all registered listeners in one
636
642
/// go.
637
- pub fn new ( network : Network , feeest : Arc < FeeEstimator > , monitor : M , tx_broadcaster : T , logger : Arc < Logger > , keys_manager : Arc < KeysInterface < ChanKeySigner = ChanSigner > > , config : UserConfig , current_blockchain_height : usize ) -> Result < ChannelManager < ChanSigner , M , T > , secp256k1:: Error > {
643
+ pub fn new ( network : Network , feeest : Arc < FeeEstimator > , monitor : M , tx_broadcaster : T , logger : Arc < Logger > , keys_manager : K , config : UserConfig , current_blockchain_height : usize ) -> Result < ChannelManager < ChanSigner , M , T , K > , secp256k1:: Error > {
638
644
let secp_ctx = Secp256k1 :: new ( ) ;
639
645
640
646
let res = ChannelManager {
@@ -2563,9 +2569,10 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> ChannelManager<ChanSigner, M,
2563
2569
}
2564
2570
}
2565
2571
2566
- impl < ChanSigner : ChannelKeys , M : Deref , T : Deref > events:: MessageSendEventsProvider for ChannelManager < ChanSigner , M , T >
2572
+ impl < ChanSigner : ChannelKeys , M : Deref , T : Deref , K : Deref > events:: MessageSendEventsProvider for ChannelManager < ChanSigner , M , T , K >
2567
2573
where M :: Target : ManyChannelMonitor < ChanSigner > ,
2568
2574
T :: Target : BroadcasterInterface ,
2575
+ K :: Target : KeysInterface < ChanKeySigner = ChanSigner > ,
2569
2576
{
2570
2577
fn get_and_clear_pending_msg_events ( & self ) -> Vec < events:: MessageSendEvent > {
2571
2578
// TODO: Event release to users and serialization is currently race-y: it's very easy for a
@@ -2591,9 +2598,10 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> events::MessageSendEventsProvi
2591
2598
}
2592
2599
}
2593
2600
2594
- impl < ChanSigner : ChannelKeys , M : Deref , T : Deref > events:: EventsProvider for ChannelManager < ChanSigner , M , T >
2601
+ impl < ChanSigner : ChannelKeys , M : Deref , T : Deref , K : Deref > events:: EventsProvider for ChannelManager < ChanSigner , M , T , K >
2595
2602
where M :: Target : ManyChannelMonitor < ChanSigner > ,
2596
2603
T :: Target : BroadcasterInterface ,
2604
+ K :: Target : KeysInterface < ChanKeySigner = ChanSigner > ,
2597
2605
{
2598
2606
fn get_and_clear_pending_events ( & self ) -> Vec < events:: Event > {
2599
2607
// TODO: Event release to users and serialization is currently race-y: it's very easy for a
@@ -2619,9 +2627,11 @@ impl<ChanSigner: ChannelKeys, M: Deref, T: Deref> events::EventsProvider for Cha
2619
2627
}
2620
2628
}
2621
2629
2622
- impl < ChanSigner : ChannelKeys , M : Deref + Sync + Send , T : Deref + Sync + Send > ChainListener for ChannelManager < ChanSigner , M , T >
2630
+ impl < ChanSigner : ChannelKeys , M : Deref + Sync + Send , T : Deref + Sync + Send , K : Deref + Sync + Send >
2631
+ ChainListener for ChannelManager < ChanSigner , M , T , K >
2623
2632
where M :: Target : ManyChannelMonitor < ChanSigner > ,
2624
2633
T :: Target : BroadcasterInterface ,
2634
+ K :: Target : KeysInterface < ChanKeySigner = ChanSigner > ,
2625
2635
{
2626
2636
fn block_connected ( & self , header : & BlockHeader , height : u32 , txn_matched : & [ & Transaction ] , indexes_of_txn_matched : & [ u32 ] ) {
2627
2637
let header_hash = header. bitcoin_hash ( ) ;
@@ -2739,9 +2749,11 @@ impl<ChanSigner: ChannelKeys, M: Deref + Sync + Send, T: Deref + Sync + Send> Ch
2739
2749
}
2740
2750
}
2741
2751
2742
- impl < ChanSigner : ChannelKeys , M : Deref + Sync + Send , T : Deref + Sync + Send > ChannelMessageHandler for ChannelManager < ChanSigner , M , T >
2752
+ impl < ChanSigner : ChannelKeys , M : Deref + Sync + Send , T : Deref + Sync + Send , K : Deref + Sync + Send >
2753
+ ChannelMessageHandler for ChannelManager < ChanSigner , M , T , K >
2743
2754
where M :: Target : ManyChannelMonitor < ChanSigner > ,
2744
2755
T :: Target : BroadcasterInterface ,
2756
+ K :: Target : KeysInterface < ChanKeySigner = ChanSigner > ,
2745
2757
{
2746
2758
fn handle_open_channel ( & self , their_node_id : & PublicKey , their_features : InitFeatures , msg : & msgs:: OpenChannel ) {
2747
2759
let _ = self . total_consistency_lock . read ( ) . unwrap ( ) ;
@@ -3212,9 +3224,10 @@ impl<R: ::std::io::Read> Readable<R> for HTLCForwardInfo {
3212
3224
}
3213
3225
}
3214
3226
3215
- impl < ChanSigner : ChannelKeys + Writeable , M : Deref , T : Deref > Writeable for ChannelManager < ChanSigner , M , T >
3227
+ impl < ChanSigner : ChannelKeys + Writeable , M : Deref , T : Deref , K : Deref > Writeable for ChannelManager < ChanSigner , M , T , K >
3216
3228
where M :: Target : ManyChannelMonitor < ChanSigner > ,
3217
3229
T :: Target : BroadcasterInterface ,
3230
+ K :: Target : KeysInterface < ChanKeySigner = ChanSigner > ,
3218
3231
{
3219
3232
fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , :: std:: io:: Error > {
3220
3233
let _ = self . total_consistency_lock . write ( ) . unwrap ( ) ;
@@ -3286,14 +3299,15 @@ impl<ChanSigner: ChannelKeys + Writeable, M: Deref, T: Deref> Writeable for Chan
3286
3299
/// 5) Move the ChannelMonitors into your local ManyChannelMonitor.
3287
3300
/// 6) Disconnect/connect blocks on the ChannelManager.
3288
3301
/// 7) Register the new ChannelManager with your ChainWatchInterface.
3289
- pub struct ChannelManagerReadArgs < ' a , ChanSigner : ' a + ChannelKeys , M : Deref , T : Deref >
3302
+ pub struct ChannelManagerReadArgs < ' a , ChanSigner : ' a + ChannelKeys , M : Deref , T : Deref , K : Deref >
3290
3303
where M :: Target : ManyChannelMonitor < ChanSigner > ,
3291
3304
T :: Target : BroadcasterInterface ,
3305
+ K :: Target : KeysInterface < ChanKeySigner = ChanSigner > ,
3292
3306
{
3293
3307
3294
3308
/// The keys provider which will give us relevant keys. Some keys will be loaded during
3295
3309
/// deserialization.
3296
- pub keys_manager : Arc < KeysInterface < ChanKeySigner = ChanSigner > > ,
3310
+ pub keys_manager : K ,
3297
3311
3298
3312
/// The fee_estimator for use in the ChannelManager in the future.
3299
3313
///
@@ -3330,11 +3344,13 @@ pub struct ChannelManagerReadArgs<'a, ChanSigner: 'a + ChannelKeys, M: Deref, T:
3330
3344
pub channel_monitors : & ' a mut HashMap < OutPoint , & ' a mut ChannelMonitor < ChanSigner > > ,
3331
3345
}
3332
3346
3333
- impl < ' a , R : :: std:: io:: Read , ChanSigner : ChannelKeys + Readable < R > , M : Deref , T : Deref > ReadableArgs < R , ChannelManagerReadArgs < ' a , ChanSigner , M , T > > for ( Sha256dHash , ChannelManager < ChanSigner , M , T > )
3347
+ impl < ' a , R : :: std:: io:: Read , ChanSigner : ChannelKeys + Readable < R > , M : Deref , T : Deref , K : Deref >
3348
+ ReadableArgs < R , ChannelManagerReadArgs < ' a , ChanSigner , M , T , K > > for ( Sha256dHash , ChannelManager < ChanSigner , M , T , K > )
3334
3349
where M :: Target : ManyChannelMonitor < ChanSigner > ,
3335
3350
T :: Target : BroadcasterInterface ,
3351
+ K :: Target : KeysInterface < ChanKeySigner = ChanSigner > ,
3336
3352
{
3337
- fn read ( reader : & mut R , args : ChannelManagerReadArgs < ' a , ChanSigner , M , T > ) -> Result < Self , DecodeError > {
3353
+ fn read ( reader : & mut R , args : ChannelManagerReadArgs < ' a , ChanSigner , M , T , K > ) -> Result < Self , DecodeError > {
3338
3354
let _ver: u8 = Readable :: read ( reader) ?;
3339
3355
let min_ver: u8 = Readable :: read ( reader) ?;
3340
3356
if min_ver > SERIALIZATION_VERSION {
0 commit comments