32
32
//! type TxBroadcaster = dyn lightning::chain::chaininterface::BroadcasterInterface + Send + Sync;
33
33
//! type FeeEstimator = dyn lightning::chain::chaininterface::FeeEstimator + Send + Sync;
34
34
//! type Logger = dyn lightning::util::logger::Logger + Send + Sync;
35
+ //! type NodeSigner = dyn lightning::chain::keysinterface::NodeSigner + Send + Sync;
35
36
//! type ChainAccess = dyn lightning::chain::Access + Send + Sync;
36
37
//! type ChainFilter = dyn lightning::chain::Filter + Send + Sync;
37
38
//! type DataPersister = dyn lightning::chain::chainmonitor::Persist<lightning::chain::keysinterface::InMemorySigner> + Send + Sync;
@@ -80,6 +81,7 @@ use tokio::{io, time};
80
81
use tokio:: sync:: mpsc;
81
82
use tokio:: io:: { AsyncReadExt , AsyncWrite , AsyncWriteExt } ;
82
83
84
+ use lightning:: chain:: keysinterface:: NodeSigner ;
83
85
use lightning:: ln:: peer_handler;
84
86
use lightning:: ln:: peer_handler:: SocketDescriptor as LnSocketTrait ;
85
87
use lightning:: ln:: peer_handler:: CustomMessageHandler ;
@@ -123,21 +125,23 @@ struct Connection {
123
125
id : u64 ,
124
126
}
125
127
impl Connection {
126
- async fn poll_event_process < PM , CMH , RMH , OMH , L , UMH > (
128
+ async fn poll_event_process < PM , CMH , RMH , OMH , L , UMH , NS > (
127
129
peer_manager : PM ,
128
130
mut event_receiver : mpsc:: Receiver < ( ) > ,
129
131
) where
130
- PM : Deref < Target = peer_handler:: PeerManager < SocketDescriptor , CMH , RMH , OMH , L , UMH > > + ' static + Send + Sync ,
132
+ PM : Deref < Target = peer_handler:: PeerManager < SocketDescriptor , CMH , RMH , OMH , L , UMH , NS > > + ' static + Send + Sync ,
131
133
CMH : Deref + ' static + Send + Sync ,
132
134
RMH : Deref + ' static + Send + Sync ,
133
135
OMH : Deref + ' static + Send + Sync ,
134
136
L : Deref + ' static + Send + Sync ,
135
137
UMH : Deref + ' static + Send + Sync ,
138
+ NS : Deref + ' static + Send + Sync ,
136
139
CMH :: Target : ChannelMessageHandler + Send + Sync ,
137
140
RMH :: Target : RoutingMessageHandler + Send + Sync ,
138
141
OMH :: Target : OnionMessageHandler + Send + Sync ,
139
142
L :: Target : Logger + Send + Sync ,
140
143
UMH :: Target : CustomMessageHandler + Send + Sync ,
144
+ NS :: Target : NodeSigner + Send + Sync ,
141
145
{
142
146
loop {
143
147
if event_receiver. recv ( ) . await . is_none ( ) {
@@ -147,24 +151,26 @@ impl Connection {
147
151
}
148
152
}
149
153
150
- async fn schedule_read < PM , CMH , RMH , OMH , L , UMH > (
154
+ async fn schedule_read < PM , CMH , RMH , OMH , L , UMH , NS > (
151
155
peer_manager : PM ,
152
156
us : Arc < Mutex < Self > > ,
153
157
mut reader : io:: ReadHalf < TcpStream > ,
154
158
mut read_wake_receiver : mpsc:: Receiver < ( ) > ,
155
159
mut write_avail_receiver : mpsc:: Receiver < ( ) > ,
156
160
) where
157
- PM : Deref < Target = peer_handler:: PeerManager < SocketDescriptor , CMH , RMH , OMH , L , UMH > > + ' static + Send + Sync + Clone ,
161
+ PM : Deref < Target = peer_handler:: PeerManager < SocketDescriptor , CMH , RMH , OMH , L , UMH , NS > > + ' static + Send + Sync + Clone ,
158
162
CMH : Deref + ' static + Send + Sync ,
159
163
RMH : Deref + ' static + Send + Sync ,
160
164
OMH : Deref + ' static + Send + Sync ,
161
165
L : Deref + ' static + Send + Sync ,
162
166
UMH : Deref + ' static + Send + Sync ,
167
+ NS : Deref + ' static + Send + Sync ,
163
168
CMH :: Target : ChannelMessageHandler + ' static + Send + Sync ,
164
169
RMH :: Target : RoutingMessageHandler + ' static + Send + Sync ,
165
170
OMH :: Target : OnionMessageHandler + ' static + Send + Sync ,
166
171
L :: Target : Logger + ' static + Send + Sync ,
167
172
UMH :: Target : CustomMessageHandler + ' static + Send + Sync ,
173
+ NS :: Target : NodeSigner + ' static + Send + Sync ,
168
174
{
169
175
// Create a waker to wake up poll_event_process, above
170
176
let ( event_waker, event_receiver) = mpsc:: channel ( 1 ) ;
@@ -283,21 +289,23 @@ fn get_addr_from_stream(stream: &StdTcpStream) -> Option<NetAddress> {
283
289
/// The returned future will complete when the peer is disconnected and associated handling
284
290
/// futures are freed, though, because all processing futures are spawned with tokio::spawn, you do
285
291
/// not need to poll the provided future in order to make progress.
286
- pub fn setup_inbound < PM , CMH , RMH , OMH , L , UMH > (
292
+ pub fn setup_inbound < PM , CMH , RMH , OMH , L , UMH , NS > (
287
293
peer_manager : PM ,
288
294
stream : StdTcpStream ,
289
295
) -> impl std:: future:: Future < Output =( ) > where
290
- PM : Deref < Target = peer_handler:: PeerManager < SocketDescriptor , CMH , RMH , OMH , L , UMH > > + ' static + Send + Sync + Clone ,
296
+ PM : Deref < Target = peer_handler:: PeerManager < SocketDescriptor , CMH , RMH , OMH , L , UMH , NS > > + ' static + Send + Sync + Clone ,
291
297
CMH : Deref + ' static + Send + Sync ,
292
298
RMH : Deref + ' static + Send + Sync ,
293
299
OMH : Deref + ' static + Send + Sync ,
294
300
L : Deref + ' static + Send + Sync ,
295
301
UMH : Deref + ' static + Send + Sync ,
302
+ NS : Deref + ' static + Send + Sync ,
296
303
CMH :: Target : ChannelMessageHandler + Send + Sync ,
297
304
RMH :: Target : RoutingMessageHandler + Send + Sync ,
298
305
OMH :: Target : OnionMessageHandler + Send + Sync ,
299
306
L :: Target : Logger + Send + Sync ,
300
307
UMH :: Target : CustomMessageHandler + Send + Sync ,
308
+ NS :: Target : NodeSigner + Send + Sync ,
301
309
{
302
310
let remote_addr = get_addr_from_stream ( & stream) ;
303
311
let ( reader, write_receiver, read_receiver, us) = Connection :: new ( stream) ;
@@ -336,22 +344,24 @@ pub fn setup_inbound<PM, CMH, RMH, OMH, L, UMH>(
336
344
/// The returned future will complete when the peer is disconnected and associated handling
337
345
/// futures are freed, though, because all processing futures are spawned with tokio::spawn, you do
338
346
/// not need to poll the provided future in order to make progress.
339
- pub fn setup_outbound < PM , CMH , RMH , OMH , L , UMH > (
347
+ pub fn setup_outbound < PM , CMH , RMH , OMH , L , UMH , NS > (
340
348
peer_manager : PM ,
341
349
their_node_id : PublicKey ,
342
350
stream : StdTcpStream ,
343
351
) -> impl std:: future:: Future < Output =( ) > where
344
- PM : Deref < Target = peer_handler:: PeerManager < SocketDescriptor , CMH , RMH , OMH , L , UMH > > + ' static + Send + Sync + Clone ,
352
+ PM : Deref < Target = peer_handler:: PeerManager < SocketDescriptor , CMH , RMH , OMH , L , UMH , NS > > + ' static + Send + Sync + Clone ,
345
353
CMH : Deref + ' static + Send + Sync ,
346
354
RMH : Deref + ' static + Send + Sync ,
347
355
OMH : Deref + ' static + Send + Sync ,
348
356
L : Deref + ' static + Send + Sync ,
349
357
UMH : Deref + ' static + Send + Sync ,
358
+ NS : Deref + ' static + Send + Sync ,
350
359
CMH :: Target : ChannelMessageHandler + Send + Sync ,
351
360
RMH :: Target : RoutingMessageHandler + Send + Sync ,
352
361
OMH :: Target : OnionMessageHandler + Send + Sync ,
353
362
L :: Target : Logger + Send + Sync ,
354
363
UMH :: Target : CustomMessageHandler + Send + Sync ,
364
+ NS :: Target : NodeSigner + Send + Sync ,
355
365
{
356
366
let remote_addr = get_addr_from_stream ( & stream) ;
357
367
let ( reader, mut write_receiver, read_receiver, us) = Connection :: new ( stream) ;
@@ -419,22 +429,24 @@ pub fn setup_outbound<PM, CMH, RMH, OMH, L, UMH>(
419
429
/// disconnected and associated handling futures are freed, though, because all processing in said
420
430
/// futures are spawned with tokio::spawn, you do not need to poll the second future in order to
421
431
/// make progress.
422
- pub async fn connect_outbound < PM , CMH , RMH , OMH , L , UMH > (
432
+ pub async fn connect_outbound < PM , CMH , RMH , OMH , L , UMH , NS > (
423
433
peer_manager : PM ,
424
434
their_node_id : PublicKey ,
425
435
addr : SocketAddr ,
426
436
) -> Option < impl std:: future:: Future < Output =( ) > > where
427
- PM : Deref < Target = peer_handler:: PeerManager < SocketDescriptor , CMH , RMH , OMH , L , UMH > > + ' static + Send + Sync + Clone ,
437
+ PM : Deref < Target = peer_handler:: PeerManager < SocketDescriptor , CMH , RMH , OMH , L , UMH , NS > > + ' static + Send + Sync + Clone ,
428
438
CMH : Deref + ' static + Send + Sync ,
429
439
RMH : Deref + ' static + Send + Sync ,
430
440
OMH : Deref + ' static + Send + Sync ,
431
441
L : Deref + ' static + Send + Sync ,
432
442
UMH : Deref + ' static + Send + Sync ,
443
+ NS : Deref + ' static + Send + Sync ,
433
444
CMH :: Target : ChannelMessageHandler + Send + Sync ,
434
445
RMH :: Target : RoutingMessageHandler + Send + Sync ,
435
446
OMH :: Target : OnionMessageHandler + Send + Sync ,
436
447
L :: Target : Logger + Send + Sync ,
437
448
UMH :: Target : CustomMessageHandler + Send + Sync ,
449
+ NS :: Target : NodeSigner + Send + Sync ,
438
450
{
439
451
if let Ok ( Ok ( stream) ) = time:: timeout ( Duration :: from_secs ( 10 ) , async { TcpStream :: connect ( & addr) . await . map ( |s| s. into_std ( ) . unwrap ( ) ) } ) . await {
440
452
Some ( setup_outbound ( peer_manager, their_node_id, stream) )
@@ -568,12 +580,14 @@ impl Hash for SocketDescriptor {
568
580
569
581
#[ cfg( test) ]
570
582
mod tests {
583
+ use lightning:: chain:: keysinterface:: { NodeSigner , Recipient } ;
571
584
use lightning:: ln:: features:: * ;
572
585
use lightning:: ln:: msgs:: * ;
573
586
use lightning:: ln:: peer_handler:: { MessageHandler , PeerManager } ;
574
587
use lightning:: ln:: features:: NodeFeatures ;
575
588
use lightning:: util:: events:: * ;
576
589
use bitcoin:: secp256k1:: { Secp256k1 , SecretKey , PublicKey } ;
590
+ use bitcoin:: secp256k1:: ecdh:: SharedSecret ;
577
591
578
592
use tokio:: sync:: mpsc;
579
593
@@ -589,6 +603,57 @@ mod tests {
589
603
}
590
604
}
591
605
606
+ struct TestNodeSigner {
607
+ node_secret : SecretKey ,
608
+ }
609
+
610
+ impl TestNodeSigner {
611
+ fn new ( node_secret : SecretKey ) -> Self {
612
+ Self { node_secret }
613
+ }
614
+ }
615
+
616
+ impl NodeSigner for TestNodeSigner {
617
+ fn get_node_secret ( & self , recipient : Recipient ) -> Result < SecretKey , ( ) > {
618
+ let node_secret = match recipient {
619
+ Recipient :: Node => Ok ( self . node_secret . clone ( ) ) ,
620
+ Recipient :: PhantomNode => Err ( ( ) )
621
+ } ?;
622
+ Ok ( node_secret)
623
+ }
624
+
625
+ fn get_inbound_payment_key_material ( & self ) -> lightning:: chain:: keysinterface:: KeyMaterial {
626
+ unreachable ! ( )
627
+ }
628
+
629
+ fn get_node_id ( & self , recipient : Recipient ) -> Result < PublicKey , ( ) > {
630
+ let node_secret = match recipient {
631
+ Recipient :: Node => Ok ( & self . node_secret ) ,
632
+ Recipient :: PhantomNode => Err ( ( ) )
633
+ } ?;
634
+ Ok ( PublicKey :: from_secret_key ( & Secp256k1 :: new ( ) , node_secret) )
635
+ }
636
+
637
+ fn ecdh ( & self , recipient : Recipient , other_key : & PublicKey , tweak : Option < & bitcoin:: secp256k1:: Scalar > ) -> Result < SharedSecret , ( ) > {
638
+ let mut node_secret = match recipient {
639
+ Recipient :: Node => Ok ( self . node_secret . clone ( ) ) ,
640
+ Recipient :: PhantomNode => Err ( ( ) )
641
+ } ?;
642
+ if let Some ( tweak) = tweak {
643
+ node_secret = node_secret. mul_tweak ( tweak) . map_err ( |_| ( ) ) ?;
644
+ }
645
+ Ok ( SharedSecret :: new ( other_key, & node_secret) )
646
+ }
647
+
648
+ fn sign_invoice ( & self , _: & [ u8 ] , _: & [ bitcoin:: bech32:: u5 ] , _: Recipient ) -> Result < bitcoin:: secp256k1:: ecdsa:: RecoverableSignature , ( ) > {
649
+ unreachable ! ( )
650
+ }
651
+
652
+ fn sign_gossip_message ( & self , _: lightning:: ln:: msgs:: UnsignedGossipMessage ) -> Result < bitcoin:: secp256k1:: ecdsa:: Signature , ( ) > {
653
+ unreachable ! ( )
654
+ }
655
+ }
656
+
592
657
struct MsgHandler {
593
658
expected_pubkey : PublicKey ,
594
659
pubkey_connected : mpsc:: Sender < ( ) > ,
@@ -688,7 +753,7 @@ mod tests {
688
753
chan_handler : Arc :: clone ( & a_handler) ,
689
754
route_handler : Arc :: clone ( & a_handler) ,
690
755
onion_message_handler : Arc :: new ( lightning:: ln:: peer_handler:: IgnoringMessageHandler { } ) ,
691
- } , a_key. clone ( ) , 0 , & [ 1 ; 32 ] , Arc :: new ( TestLogger ( ) ) , Arc :: new ( lightning:: ln:: peer_handler:: IgnoringMessageHandler { } ) ) ) ;
756
+ } , a_key. clone ( ) , 0 , & [ 1 ; 32 ] , Arc :: new ( TestLogger ( ) ) , Arc :: new ( lightning:: ln:: peer_handler:: IgnoringMessageHandler { } ) , Arc :: new ( TestNodeSigner :: new ( a_key ) ) ) ) ;
692
757
693
758
let ( b_connected_sender, mut b_connected) = mpsc:: channel ( 1 ) ;
694
759
let ( b_disconnected_sender, mut b_disconnected) = mpsc:: channel ( 1 ) ;
@@ -703,7 +768,7 @@ mod tests {
703
768
chan_handler : Arc :: clone ( & b_handler) ,
704
769
route_handler : Arc :: clone ( & b_handler) ,
705
770
onion_message_handler : Arc :: new ( lightning:: ln:: peer_handler:: IgnoringMessageHandler { } ) ,
706
- } , b_key. clone ( ) , 0 , & [ 2 ; 32 ] , Arc :: new ( TestLogger ( ) ) , Arc :: new ( lightning:: ln:: peer_handler:: IgnoringMessageHandler { } ) ) ) ;
771
+ } , b_key. clone ( ) , 0 , & [ 2 ; 32 ] , Arc :: new ( TestLogger ( ) ) , Arc :: new ( lightning:: ln:: peer_handler:: IgnoringMessageHandler { } ) , Arc :: new ( TestNodeSigner :: new ( b_key ) ) ) ) ;
707
772
708
773
// We bind on localhost, hoping the environment is properly configured with a local
709
774
// address. This may not always be the case in containers and the like, so if this test is
@@ -756,7 +821,7 @@ mod tests {
756
821
chan_handler : Arc :: new ( lightning:: ln:: peer_handler:: ErroringMessageHandler :: new ( ) ) ,
757
822
onion_message_handler : Arc :: new ( lightning:: ln:: peer_handler:: IgnoringMessageHandler { } ) ,
758
823
route_handler : Arc :: new ( lightning:: ln:: peer_handler:: IgnoringMessageHandler { } ) ,
759
- } , a_key, 0 , & [ 1 ; 32 ] , Arc :: new ( TestLogger ( ) ) , Arc :: new ( lightning:: ln:: peer_handler:: IgnoringMessageHandler { } ) ) ) ;
824
+ } , a_key, 0 , & [ 1 ; 32 ] , Arc :: new ( TestLogger ( ) ) , Arc :: new ( lightning:: ln:: peer_handler:: IgnoringMessageHandler { } ) , Arc :: new ( TestNodeSigner :: new ( a_key ) ) ) ) ;
760
825
761
826
// Make two connections, one for an inbound and one for an outbound connection
762
827
let conn_a = {
0 commit comments