Skip to content

Commit cdb5975

Browse files
Merge pull request lightningdevkit#4 from lndk-org/onion-handler
Onion handler
2 parents 59c719d + 65758f4 commit cdb5975

File tree

6 files changed

+292
-260
lines changed

6 files changed

+292
-260
lines changed

src/config.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pub struct LdkUserInfo {
1010
pub bitcoind_rpc_password: String,
1111
pub bitcoind_rpc_port: u16,
1212
pub bitcoind_rpc_host: String,
13-
pub ldk_data_dir: PathBuf,
13+
pub ldk_data_dir: PathBuf,
1414
pub ldk_peer_listening_port: u16,
1515
pub ldk_announced_listen_addr: Vec<NetAddress>,
1616
pub ldk_announced_node_name: [u8; 32],
@@ -19,21 +19,21 @@ pub struct LdkUserInfo {
1919

2020
// Here we initialize three layers of directories needed for our tests. We won't persist ldk data, but we'll persist
2121
// the logs to help with debugging.
22-
pub(crate) fn setup_data_and_log_dirs(ldk_dir: PathBuf, test_name: &str) -> (String, TempDir, String) {
23-
let ldk_data_dir_binding = Builder::new()
24-
.prefix("ldk-data-dir")
25-
.tempdir_in(ldk_dir.clone())
26-
.unwrap();
27-
let ldk_data_dir = String::from(ldk_data_dir_binding.path().to_str().unwrap());
22+
pub(crate) fn setup_data_and_log_dirs(
23+
ldk_dir: PathBuf, test_name: &str,
24+
) -> (String, TempDir, String) {
25+
let ldk_data_dir_binding =
26+
Builder::new().prefix("ldk-data-dir").tempdir_in(ldk_dir.clone()).unwrap();
27+
let ldk_data_dir = String::from(ldk_data_dir_binding.path().to_str().unwrap());
2828

29-
// Create the ldk-logs dir, which we'll persist after the tests are over for debugging.
30-
let now_timestamp = Utc::now();
31-
let timestamp = now_timestamp.format("%d-%m-%Y-%H%M");
32-
let ldk_log_dir_binding = ldk_dir.join(format!("ldk-logs-{test_name}-{timestamp}"));
33-
let ldk_log_dir = String::from(ldk_log_dir_binding.as_path().to_str().unwrap());
29+
// Create the ldk-logs dir, which we'll persist after the tests are over for debugging.
30+
let now_timestamp = Utc::now();
31+
let timestamp = now_timestamp.format("%d-%m-%Y-%H%M");
32+
let ldk_log_dir_binding = ldk_dir.join(format!("ldk-logs-{test_name}-{timestamp}"));
33+
let ldk_log_dir = String::from(ldk_log_dir_binding.as_path().to_str().unwrap());
3434

35-
// Initialize the LDK data directory if necessary.
36-
fs::create_dir_all(ldk_log_dir.clone()).unwrap();
35+
// Initialize the LDK data directory if necessary.
36+
fs::create_dir_all(ldk_log_dir.clone()).unwrap();
3737

38-
(ldk_data_dir, ldk_data_dir_binding, ldk_log_dir)
38+
(ldk_data_dir, ldk_data_dir_binding, ldk_log_dir)
3939
}

src/disk.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ pub(crate) struct FilesystemLogger {
2020
logs_dir: String,
2121
}
2222
impl FilesystemLogger {
23-
pub(crate) fn new(logs_dir: String) -> Self {
24-
fs::create_dir_all(logs_dir.clone()).unwrap();
25-
Self { logs_dir: logs_dir }
23+
pub(crate) fn new(logs_dir: String) -> Self {
24+
fs::create_dir_all(logs_dir.clone()).unwrap();
25+
Self { logs_dir }
2626
}
2727
}
2828
impl Logger for FilesystemLogger {

src/lib.rs

Lines changed: 57 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@ mod convert;
66
mod disk;
77
mod hex_utils;
88
pub mod node_api;
9+
mod onion;
910
mod peer_utils;
1011
mod sweep;
1112

1213
use crate::bitcoind_client::BitcoindClient;
1314
use crate::disk::FilesystemLogger;
15+
use crate::node_api::P2PGossipSyncType;
16+
use crate::onion::OnionMessageHandler;
1417
use bitcoin::blockdata::transaction::Transaction;
1518
use bitcoin::consensus::encode;
1619
use bitcoin::network::constants::Network;
@@ -26,9 +29,9 @@ use lightning::ln::channelmanager::{
2629
ChainParameters, ChannelManagerReadArgs, SimpleArcChannelManager,
2730
};
2831
use lightning::ln::msgs::DecodeError;
29-
use lightning::ln::peer_handler::{IgnoringMessageHandler, MessageHandler, SimpleArcPeerManager};
32+
use lightning::ln::peer_handler::{IgnoringMessageHandler, MessageHandler, PeerManager};
3033
use lightning::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
31-
use lightning::onion_message::{DefaultMessageRouter, SimpleArcOnionMessenger};
34+
use lightning::onion_message::{DefaultMessageRouter, OnionMessenger};
3235
use lightning::routing::gossip;
3336
use lightning::routing::gossip::{NodeId, P2PGossipSync};
3437
use lightning::routing::router::DefaultRouter;
@@ -47,7 +50,7 @@ use lightning_net_tokio::SocketDescriptor;
4750
use lightning_persister::FilesystemPersister;
4851
use rand::{thread_rng, Rng};
4952
use std::collections::hash_map::Entry;
50-
use std::collections::HashMap;
53+
use std::collections::{HashMap, VecDeque};
5154
use std::convert::TryInto;
5255
use std::fmt;
5356
use std::fs;
@@ -129,21 +132,29 @@ type ChainMonitor = chainmonitor::ChainMonitor<
129132
Arc<FilesystemPersister>,
130133
>;
131134

132-
pub(crate) type PeerManager = SimpleArcPeerManager<
135+
pub(crate) type PeerManagerType = PeerManager<
133136
SocketDescriptor,
134-
ChainMonitor,
135-
BitcoindClient,
136-
BitcoindClient,
137-
BitcoindClient,
138-
FilesystemLogger,
137+
Arc<ChannelManager>,
138+
Arc<P2PGossipSyncType>,
139+
Arc<OnionMessengerType>,
140+
Arc<FilesystemLogger>,
141+
IgnoringMessageHandler,
142+
Arc<KeysManager>,
139143
>;
140144

141145
pub(crate) type ChannelManager =
142146
SimpleArcChannelManager<ChainMonitor, BitcoindClient, BitcoindClient, FilesystemLogger>;
143147

144148
pub(crate) type NetworkGraph = gossip::NetworkGraph<Arc<FilesystemLogger>>;
145149

146-
type OnionMessenger = SimpleArcOnionMessenger<FilesystemLogger>;
150+
pub(crate) type OnionMessengerType = OnionMessenger<
151+
Arc<KeysManager>,
152+
Arc<KeysManager>,
153+
Arc<FilesystemLogger>,
154+
Arc<DefaultMessageRouter>,
155+
IgnoringMessageHandler,
156+
Arc<OnionMessageHandler>,
157+
>;
147158

148159
pub(crate) type BumpTxEventHandler = BumpTransactionEventHandler<
149160
Arc<BitcoindClient>,
@@ -471,9 +482,10 @@ async fn handle_ldk_events(
471482
}
472483

473484
pub async fn start_ldk(args: config::LdkUserInfo, test_name: &str) -> node_api::Node {
474-
let (ldk_data_dir, ldk_data_dir_binding, ldk_log_dir) = config::setup_data_and_log_dirs(args.ldk_data_dir, test_name);
475-
let ldk_addr = args.ldk_announced_listen_addr.clone();
476-
let ldk_announced_node_name = args.ldk_announced_node_name.clone();
485+
let (ldk_data_dir, ldk_data_dir_binding, ldk_log_dir) =
486+
config::setup_data_and_log_dirs(args.ldk_data_dir, test_name);
487+
let ldk_addr = args.ldk_announced_listen_addr.clone();
488+
let ldk_announced_node_name = args.ldk_announced_node_name.clone();
477489

478490
// ## Setup
479491
// Step 1: Initialize the Logger
@@ -492,7 +504,7 @@ pub async fn start_ldk(args: config::LdkUserInfo, test_name: &str) -> node_api::
492504
{
493505
Ok(client) => Arc::new(client),
494506
Err(e) => {
495-
panic!("Failed to connect to bitcoind client: {}", e);
507+
panic!("Failed to connect to bitcoind client: {}", e);
496508
}
497509
};
498510

@@ -505,10 +517,10 @@ pub async fn start_ldk(args: config::LdkUserInfo, test_name: &str) -> node_api::
505517
bitcoin::Network::Regtest => "regtest",
506518
bitcoin::Network::Signet => "signet",
507519
} {
508-
panic!(
509-
"Chain argument ({}) didn't match bitcoind chain ({})",
510-
args.network, bitcoind_chain
511-
);
520+
panic!(
521+
"Chain argument ({}) didn't match bitcoind chain ({})",
522+
args.network, bitcoind_chain
523+
);
512524
}
513525

514526
// Step 2: Initialize the FeeEstimator
@@ -553,10 +565,7 @@ pub async fn start_ldk(args: config::LdkUserInfo, test_name: &str) -> node_api::
553565
f.sync_all().expect("Failed to sync node keys seed to disk");
554566
}
555567
Err(e) => {
556-
panic!(
557-
"ERROR: Unable to create keys seed file {}: {}",
558-
keys_seed_path, e
559-
);
568+
panic!("ERROR: Unable to create keys seed file {}: {}", keys_seed_path, e);
560569
}
561570
}
562571
key
@@ -707,14 +716,16 @@ pub async fn start_ldk(args: config::LdkUserInfo, test_name: &str) -> node_api::
707716
));
708717

709718
// Step 15: Initialize the PeerManager
719+
let onion_message_handler =
720+
Arc::new(OnionMessageHandler { messages: Arc::new(Mutex::new(VecDeque::new())) });
710721
let channel_manager: Arc<ChannelManager> = Arc::new(channel_manager);
711-
let onion_messenger: Arc<OnionMessenger> = Arc::new(OnionMessenger::new(
722+
let onion_messenger: Arc<OnionMessengerType> = Arc::new(OnionMessenger::new(
712723
Arc::clone(&keys_manager),
713724
Arc::clone(&keys_manager),
714725
Arc::clone(&logger),
715726
Arc::new(DefaultMessageRouter {}),
716727
IgnoringMessageHandler {},
717-
IgnoringMessageHandler {},
728+
Arc::clone(&onion_message_handler),
718729
));
719730
let mut ephemeral_bytes = [0; 32];
720731
let current_time = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs();
@@ -725,7 +736,7 @@ pub async fn start_ldk(args: config::LdkUserInfo, test_name: &str) -> node_api::
725736
onion_message_handler: onion_messenger.clone(),
726737
custom_message_handler: IgnoringMessageHandler {},
727738
};
728-
let peer_manager: Arc<PeerManager> = Arc::new(PeerManager::new(
739+
let peer_manager: Arc<PeerManagerType> = Arc::new(PeerManager::new(
729740
lightning_msg_handler,
730741
current_time.try_into().unwrap(),
731742
&ephemeral_bytes,
@@ -878,7 +889,7 @@ pub async fn start_ldk(args: config::LdkUserInfo, test_name: &str) -> node_api::
878889
interval.tick().await;
879890
match disk::read_channel_peer_data(Path::new(&peer_data_path)) {
880891
Ok(info) => {
881-
let peers = connect_pm.get_peer_node_ids();
892+
let peers = &connect_pm.get_peer_node_ids();
882893
for node_id in connect_cm
883894
.list_channels()
884895
.iter()
@@ -939,23 +950,24 @@ pub async fn start_ldk(args: config::LdkUserInfo, test_name: &str) -> node_api::
939950
Arc::clone(&channel_manager),
940951
));
941952

942-
return node_api::Node {
943-
logger,
944-
bitcoind_client,
945-
persister,
946-
chain_monitor,
947-
keys_manager,
948-
network_graph,
949-
router,
950-
scorer,
951-
channel_manager,
952-
gossip_sync,
953-
onion_messenger,
954-
peer_manager,
955-
bp_exit,
956-
background_processor,
957-
stop_listen_connect,
958-
listening_port: args.ldk_peer_listening_port.clone(),
959-
ldk_data_dir: ldk_data_dir_binding,
960-
};
953+
return node_api::Node {
954+
logger,
955+
bitcoind_client,
956+
persister,
957+
chain_monitor,
958+
keys_manager,
959+
network_graph,
960+
router,
961+
scorer,
962+
channel_manager,
963+
gossip_sync,
964+
onion_messenger,
965+
onion_message_handler,
966+
peer_manager,
967+
bp_exit,
968+
background_processor,
969+
stop_listen_connect,
970+
listening_port: args.ldk_peer_listening_port.clone(),
971+
ldk_data_dir: ldk_data_dir_binding,
972+
};
961973
}

0 commit comments

Comments
 (0)