@@ -24,9 +24,13 @@ use lightning::ln::channelmanager::{
24
24
ChainParameters , ChannelManagerReadArgs , PaymentId , SimpleArcChannelManager ,
25
25
} ;
26
26
use lightning:: ln:: msgs:: DecodeError ;
27
- use lightning:: ln:: peer_handler:: { IgnoringMessageHandler , MessageHandler , SimpleArcPeerManager } ;
27
+ use lightning:: ln:: peer_handler:: {
28
+ IgnoringMessageHandler , MessageHandler , PeerManager as LdkPeerManager ,
29
+ } ;
28
30
use lightning:: ln:: types:: ChannelId ;
29
- use lightning:: onion_message:: messenger:: { DefaultMessageRouter , SimpleArcOnionMessenger } ;
31
+ use lightning:: onion_message:: messenger:: {
32
+ DefaultMessageRouter , OnionMessenger as LdkOnionMessenger ,
33
+ } ;
30
34
use lightning:: routing:: gossip;
31
35
use lightning:: routing:: gossip:: { NodeId , P2PGossipSync } ;
32
36
use lightning:: routing:: router:: DefaultRouter ;
@@ -48,6 +52,7 @@ use lightning_block_sync::init;
48
52
use lightning_block_sync:: poll;
49
53
use lightning_block_sync:: SpvClient ;
50
54
use lightning_block_sync:: UnboundedCache ;
55
+ use lightning_dns_resolver:: OMDomainResolver ;
51
56
use lightning_net_tokio:: SocketDescriptor ;
52
57
use lightning_persister:: fs_store:: FilesystemStore ;
53
58
use rand:: { thread_rng, Rng } ;
@@ -154,22 +159,36 @@ pub(crate) type GossipVerifier = lightning_block_sync::gossip::GossipVerifier<
154
159
Arc < FilesystemLogger > ,
155
160
> ;
156
161
157
- pub ( crate ) type PeerManager = SimpleArcPeerManager <
162
+ // Note that if you do not use an `OMDomainResolver` here you should use SimpleArcPeerManager
163
+ // instead.
164
+ pub ( crate ) type PeerManager = LdkPeerManager <
158
165
SocketDescriptor ,
159
- ChainMonitor ,
160
- BitcoindClient ,
161
- BitcoindClient ,
162
- Arc < GossipVerifier > ,
163
- FilesystemLogger ,
166
+ Arc < ChannelManager > ,
167
+ Arc < P2PGossipSync < Arc < NetworkGraph > , Arc < GossipVerifier > , Arc < FilesystemLogger > > > ,
168
+ Arc < OnionMessenger > ,
169
+ Arc < FilesystemLogger > ,
170
+ IgnoringMessageHandler ,
171
+ Arc < KeysManager > ,
164
172
> ;
165
173
166
174
pub ( crate ) type ChannelManager =
167
175
SimpleArcChannelManager < ChainMonitor , BitcoindClient , BitcoindClient , FilesystemLogger > ;
168
176
169
177
pub ( crate ) type NetworkGraph = gossip:: NetworkGraph < Arc < FilesystemLogger > > ;
170
178
171
- type OnionMessenger =
172
- SimpleArcOnionMessenger < ChainMonitor , BitcoindClient , BitcoindClient , FilesystemLogger > ;
179
+ // Note that if you do not use an `OMDomainResolver` here you should use SimpleArcOnionMessenger
180
+ // instead.
181
+ type OnionMessenger = LdkOnionMessenger <
182
+ Arc < KeysManager > ,
183
+ Arc < KeysManager > ,
184
+ Arc < FilesystemLogger > ,
185
+ Arc < ChannelManager > ,
186
+ Arc < DefaultMessageRouter < Arc < NetworkGraph > , Arc < FilesystemLogger > , Arc < KeysManager > > > ,
187
+ Arc < ChannelManager > ,
188
+ Arc < ChannelManager > ,
189
+ Arc < OMDomainResolver < Arc < ChannelManager > > > ,
190
+ IgnoringMessageHandler ,
191
+ > ;
173
192
174
193
pub ( crate ) type BumpTxEventHandler = BumpTransactionEventHandler <
175
194
Arc < BitcoindClient > ,
@@ -822,8 +841,17 @@ async fn start_ldk() {
822
841
let gossip_sync =
823
842
Arc :: new ( P2PGossipSync :: new ( Arc :: clone ( & network_graph) , None , Arc :: clone ( & logger) ) ) ;
824
843
825
- // Step 16: Initialize the PeerManager
844
+ // Step 16 an OMDomainResolver as a service to other nodes
845
+ // As a service to other LDK users, using an `OMDomainResolver` allows others to resolve BIP
846
+ // 353 Human Readable Names for others, providing them DNSSEC proofs over lightning onion
847
+ // messages. Doing this only makes sense for a always-online public routing node, and doesn't
848
+ // provide you any direct value, but its nice to offer the service for others.
826
849
let channel_manager: Arc < ChannelManager > = Arc :: new ( channel_manager) ;
850
+ let resolver = "8.8.8.8:53" . to_socket_addrs ( ) . unwrap ( ) . next ( ) . unwrap ( ) ;
851
+ let domain_resolver =
852
+ Arc :: new ( OMDomainResolver :: new ( resolver, Some ( Arc :: clone ( & channel_manager) ) ) ) ;
853
+
854
+ // Step 17: Initialize the PeerManager
827
855
let onion_messenger: Arc < OnionMessenger > = Arc :: new ( OnionMessenger :: new (
828
856
Arc :: clone ( & keys_manager) ,
829
857
Arc :: clone ( & keys_manager) ,
@@ -832,7 +860,7 @@ async fn start_ldk() {
832
860
Arc :: clone ( & message_router) ,
833
861
Arc :: clone ( & channel_manager) ,
834
862
Arc :: clone ( & channel_manager) ,
835
- Arc :: clone ( & channel_manager ) ,
863
+ domain_resolver ,
836
864
IgnoringMessageHandler { } ,
837
865
) ) ;
838
866
let mut ephemeral_bytes = [ 0 ; 32 ] ;
@@ -862,7 +890,7 @@ async fn start_ldk() {
862
890
gossip_sync. add_utxo_lookup ( Some ( Arc :: new ( utxo_lookup) ) ) ;
863
891
864
892
// ## Running LDK
865
- // Step 17 : Initialize networking
893
+ // Step 18 : Initialize networking
866
894
867
895
let peer_manager_connection_handler = peer_manager. clone ( ) ;
868
896
let listening_port = args. ldk_peer_listening_port ;
@@ -888,7 +916,7 @@ async fn start_ldk() {
888
916
}
889
917
} ) ;
890
918
891
- // Step 18 : Connect and Disconnect Blocks
919
+ // Step 19 : Connect and Disconnect Blocks
892
920
let output_sweeper: Arc < OutputSweeper > = Arc :: new ( output_sweeper) ;
893
921
let channel_manager_listener = channel_manager. clone ( ) ;
894
922
let chain_monitor_listener = chain_monitor. clone ( ) ;
@@ -937,7 +965,7 @@ async fn start_ldk() {
937
965
. write ( "" , "" , OUTBOUND_PAYMENTS_FNAME , & outbound_payments. lock ( ) . unwrap ( ) . encode ( ) )
938
966
. unwrap ( ) ;
939
967
940
- // Step 19 : Handle LDK Events
968
+ // Step 20 : Handle LDK Events
941
969
let channel_manager_event_listener = Arc :: clone ( & channel_manager) ;
942
970
let bitcoind_client_event_listener = Arc :: clone ( & bitcoind_client) ;
943
971
let network_graph_event_listener = Arc :: clone ( & network_graph) ;
@@ -979,10 +1007,10 @@ async fn start_ldk() {
979
1007
}
980
1008
} ;
981
1009
982
- // Step 20 : Persist ChannelManager and NetworkGraph
1010
+ // Step 21 : Persist ChannelManager and NetworkGraph
983
1011
let persister = Arc :: new ( FilesystemStore :: new ( ldk_data_dir. clone ( ) . into ( ) ) ) ;
984
1012
985
- // Step 21 : Background Processing
1013
+ // Step 22 : Background Processing
986
1014
let ( bp_exit, bp_exit_check) = tokio:: sync:: watch:: channel ( ( ) ) ;
987
1015
let mut background_processor = tokio:: spawn ( process_events_async (
988
1016
Arc :: clone ( & persister) ,
0 commit comments