Skip to content

Commit dcdc608

Browse files
committedJan 16, 2025
Use an OMDomainResolver by default to resolve HRNs for others
1 parent c1652fb commit dcdc608

File tree

2 files changed

+46
-17
lines changed

2 files changed

+46
-17
lines changed
 

‎Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ edition = "2018"
1010
[dependencies]
1111
lightning = { version = "0.1.0", features = ["dnssec"] }
1212
lightning-block-sync = { version = "0.1.0", features = [ "rpc-client", "tokio" ] }
13+
lightning-dns-resolver = { version = "0.2.0" }
1314
lightning-invoice = { version = "0.33.0" }
1415
lightning-net-tokio = { version = "0.1.0" }
1516
lightning-persister = { version = "0.1.0" }

‎src/main.rs

+45-17
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,13 @@ use lightning::ln::channelmanager::{
2424
ChainParameters, ChannelManagerReadArgs, PaymentId, SimpleArcChannelManager,
2525
};
2626
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+
};
2830
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+
};
3034
use lightning::routing::gossip;
3135
use lightning::routing::gossip::{NodeId, P2PGossipSync};
3236
use lightning::routing::router::DefaultRouter;
@@ -48,6 +52,7 @@ use lightning_block_sync::init;
4852
use lightning_block_sync::poll;
4953
use lightning_block_sync::SpvClient;
5054
use lightning_block_sync::UnboundedCache;
55+
use lightning_dns_resolver::OMDomainResolver;
5156
use lightning_net_tokio::SocketDescriptor;
5257
use lightning_persister::fs_store::FilesystemStore;
5358
use rand::{thread_rng, Rng};
@@ -154,22 +159,36 @@ pub(crate) type GossipVerifier = lightning_block_sync::gossip::GossipVerifier<
154159
Arc<FilesystemLogger>,
155160
>;
156161

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<
158165
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>,
164172
>;
165173

166174
pub(crate) type ChannelManager =
167175
SimpleArcChannelManager<ChainMonitor, BitcoindClient, BitcoindClient, FilesystemLogger>;
168176

169177
pub(crate) type NetworkGraph = gossip::NetworkGraph<Arc<FilesystemLogger>>;
170178

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+
>;
173192

174193
pub(crate) type BumpTxEventHandler = BumpTransactionEventHandler<
175194
Arc<BitcoindClient>,
@@ -822,8 +841,17 @@ async fn start_ldk() {
822841
let gossip_sync =
823842
Arc::new(P2PGossipSync::new(Arc::clone(&network_graph), None, Arc::clone(&logger)));
824843

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.
826849
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
827855
let onion_messenger: Arc<OnionMessenger> = Arc::new(OnionMessenger::new(
828856
Arc::clone(&keys_manager),
829857
Arc::clone(&keys_manager),
@@ -832,7 +860,7 @@ async fn start_ldk() {
832860
Arc::clone(&message_router),
833861
Arc::clone(&channel_manager),
834862
Arc::clone(&channel_manager),
835-
Arc::clone(&channel_manager),
863+
domain_resolver,
836864
IgnoringMessageHandler {},
837865
));
838866
let mut ephemeral_bytes = [0; 32];
@@ -862,7 +890,7 @@ async fn start_ldk() {
862890
gossip_sync.add_utxo_lookup(Some(Arc::new(utxo_lookup)));
863891

864892
// ## Running LDK
865-
// Step 17: Initialize networking
893+
// Step 18: Initialize networking
866894

867895
let peer_manager_connection_handler = peer_manager.clone();
868896
let listening_port = args.ldk_peer_listening_port;
@@ -888,7 +916,7 @@ async fn start_ldk() {
888916
}
889917
});
890918

891-
// Step 18: Connect and Disconnect Blocks
919+
// Step 19: Connect and Disconnect Blocks
892920
let output_sweeper: Arc<OutputSweeper> = Arc::new(output_sweeper);
893921
let channel_manager_listener = channel_manager.clone();
894922
let chain_monitor_listener = chain_monitor.clone();
@@ -937,7 +965,7 @@ async fn start_ldk() {
937965
.write("", "", OUTBOUND_PAYMENTS_FNAME, &outbound_payments.lock().unwrap().encode())
938966
.unwrap();
939967

940-
// Step 19: Handle LDK Events
968+
// Step 20: Handle LDK Events
941969
let channel_manager_event_listener = Arc::clone(&channel_manager);
942970
let bitcoind_client_event_listener = Arc::clone(&bitcoind_client);
943971
let network_graph_event_listener = Arc::clone(&network_graph);
@@ -979,10 +1007,10 @@ async fn start_ldk() {
9791007
}
9801008
};
9811009

982-
// Step 20: Persist ChannelManager and NetworkGraph
1010+
// Step 21: Persist ChannelManager and NetworkGraph
9831011
let persister = Arc::new(FilesystemStore::new(ldk_data_dir.clone().into()));
9841012

985-
// Step 21: Background Processing
1013+
// Step 22: Background Processing
9861014
let (bp_exit, bp_exit_check) = tokio::sync::watch::channel(());
9871015
let mut background_processor = tokio::spawn(process_events_async(
9881016
Arc::clone(&persister),

0 commit comments

Comments
 (0)