Skip to content

Commit 64b7577

Browse files
committed
Stop persisting peer addresses to disk and use the public gossip db
Its always been a bit strange that we persist the addresses of our peers to disk when there's a public gossip db, its not really a thing most LN nodes do. It might be useful for private channels but there's not a lot of reason to have it in `ldk-sample`.
1 parent 1be2068 commit 64b7577

File tree

3 files changed

+41
-71
lines changed

3 files changed

+41
-71
lines changed

src/cli.rs

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::disk::{self, INBOUND_PAYMENTS_FNAME, OUTBOUND_PAYMENTS_FNAME};
1+
use crate::disk::{INBOUND_PAYMENTS_FNAME, OUTBOUND_PAYMENTS_FNAME};
22
use crate::hex_utils;
33
use crate::{
44
ChainMonitor, ChannelManager, HTLCStatus, InboundPaymentInfoStorage, MillisatAmount,
@@ -29,7 +29,6 @@ use lightning_persister::fs_store::FilesystemStore;
2929
use std::env;
3030
use std::io::Write;
3131
use std::net::{SocketAddr, ToSocketAddrs};
32-
use std::path::Path;
3332
use std::str::FromStr;
3433
use std::sync::{Arc, Mutex};
3534
use std::time::Duration;
@@ -52,8 +51,7 @@ pub(crate) async fn poll_for_user_input(
5251
peer_manager: Arc<PeerManager>, channel_manager: Arc<ChannelManager>,
5352
chain_monitor: Arc<ChainMonitor>, keys_manager: Arc<KeysManager>,
5453
network_graph: Arc<NetworkGraph>, inbound_payments: Arc<Mutex<InboundPaymentInfoStorage>>,
55-
outbound_payments: Arc<Mutex<OutboundPaymentInfoStorage>>, ldk_data_dir: String,
56-
fs_store: Arc<FilesystemStore>,
54+
outbound_payments: Arc<Mutex<OutboundPaymentInfoStorage>>, fs_store: Arc<FilesystemStore>,
5755
) {
5856
println!(
5957
"LDK startup successful. Enter \"help\" to view available commands. Press Ctrl-D to quit."
@@ -144,24 +142,13 @@ pub(crate) async fn poll_for_user_input(
144142
}
145143
}
146144

147-
if open_channel(
145+
let _ = open_channel(
148146
pubkey,
149147
chan_amt_sat.unwrap(),
150148
announce_channel,
151149
with_anchors,
152150
channel_manager.clone(),
153-
)
154-
.is_ok()
155-
{
156-
if peer_addr_str.is_some() {
157-
let peer_data_path =
158-
format!("{}/channel_peer_data", ldk_data_dir.clone());
159-
let _ = disk::persist_channel_peer(
160-
Path::new(&peer_data_path),
161-
peer_pubkey_and_ip_addr,
162-
);
163-
}
164-
}
151+
);
165152
},
166153
"sendpayment" => {
167154
let invoice_str = words.next();

src/disk.rs

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
use crate::{cli, InboundPaymentInfoStorage, NetworkGraph, OutboundPaymentInfoStorage};
2-
use bitcoin::secp256k1::PublicKey;
1+
use crate::{InboundPaymentInfoStorage, NetworkGraph, OutboundPaymentInfoStorage};
32
use bitcoin::Network;
43
use chrono::Utc;
54
use lightning::routing::scoring::{ProbabilisticScorer, ProbabilisticScoringDecayParameters};
6-
use lightning::util::hash_tables::{new_hash_map, HashMap};
5+
use lightning::util::hash_tables::new_hash_map;
76
use lightning::util::logger::{Level, Logger, Record};
87
use lightning::util::ser::{Readable, ReadableArgs};
98
use std::fs;
109
use std::fs::File;
11-
use std::io::{BufRead, BufReader, Write};
12-
use std::net::SocketAddr;
10+
use std::io::{BufReader, Write};
1311
use std::path::Path;
1412
use std::sync::Arc;
1513

@@ -54,30 +52,6 @@ impl Logger for FilesystemLogger {
5452
.unwrap();
5553
}
5654
}
57-
pub(crate) fn persist_channel_peer(path: &Path, peer_info: &str) -> std::io::Result<()> {
58-
let mut file = fs::OpenOptions::new().create(true).append(true).open(path)?;
59-
file.write_all(format!("{}\n", peer_info).as_bytes())
60-
}
61-
62-
pub(crate) fn read_channel_peer_data(
63-
path: &Path,
64-
) -> Result<HashMap<PublicKey, SocketAddr>, std::io::Error> {
65-
let mut peer_data = new_hash_map();
66-
if !Path::new(&path).exists() {
67-
return Ok(new_hash_map());
68-
}
69-
let file = File::open(path)?;
70-
let reader = BufReader::new(file);
71-
for line in reader.lines() {
72-
match cli::parse_peer_info(line.unwrap()) {
73-
Ok((pubkey, socket_addr)) => {
74-
peer_data.insert(pubkey, socket_addr);
75-
},
76-
Err(e) => return Err(e),
77-
}
78-
}
79-
Ok(peer_data)
80-
}
8155

8256
pub(crate) fn read_network(
8357
path: &Path, network: Network, logger: Arc<FilesystemLogger>,

src/main.rs

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,37 +1083,47 @@ async fn start_ldk() {
10831083
// Regularly reconnect to channel peers.
10841084
let connect_cm = Arc::clone(&channel_manager);
10851085
let connect_pm = Arc::clone(&peer_manager);
1086-
let peer_data_path = format!("{}/channel_peer_data", ldk_data_dir);
10871086
let stop_connect = Arc::clone(&stop_listen_connect);
1087+
let graph_connect = Arc::clone(&network_graph);
10881088
tokio::spawn(async move {
10891089
let mut interval = tokio::time::interval(Duration::from_secs(1));
10901090
interval.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Delay);
10911091
loop {
10921092
interval.tick().await;
1093-
match disk::read_channel_peer_data(Path::new(&peer_data_path)) {
1094-
Ok(info) => {
1095-
for node_id in connect_cm
1096-
.list_channels()
1097-
.iter()
1098-
.map(|chan| chan.counterparty.node_id)
1099-
.filter(|id| connect_pm.peer_by_node_id(id).is_none())
1100-
{
1101-
if stop_connect.load(Ordering::Acquire) {
1102-
return;
1103-
}
1104-
for (pubkey, peer_addr) in info.iter() {
1105-
if *pubkey == node_id {
1106-
let _ = cli::do_connect_peer(
1107-
*pubkey,
1108-
peer_addr.clone(),
1109-
Arc::clone(&connect_pm),
1110-
)
1111-
.await;
1112-
}
1113-
}
1093+
for node_id in connect_cm
1094+
.list_channels()
1095+
.iter()
1096+
.map(|chan| chan.counterparty.node_id)
1097+
.filter(|id| connect_pm.peer_by_node_id(id).is_none())
1098+
{
1099+
if stop_connect.load(Ordering::Acquire) {
1100+
return;
1101+
}
1102+
let id = NodeId::from_pubkey(&node_id);
1103+
let addrs = if let Some(node) = graph_connect.read_only().node(&id) {
1104+
if let Some(ann) = &node.announcement_info {
1105+
let non_onion = |addr| match addr {
1106+
&lightning::ln::msgs::SocketAddress::OnionV2(_) => None,
1107+
&lightning::ln::msgs::SocketAddress::OnionV3 { .. } => None,
1108+
_ => Some(addr.clone()),
1109+
};
1110+
ann.addresses().iter().filter_map(non_onion).collect::<Vec<_>>()
1111+
} else {
1112+
Vec::new()
11141113
}
1115-
},
1116-
Err(e) => println!("ERROR: errored reading channel peer info from disk: {:?}", e),
1114+
} else {
1115+
Vec::new()
1116+
};
1117+
for addr in addrs {
1118+
let sockaddrs = addr.to_socket_addrs();
1119+
if sockaddrs.is_err() {
1120+
continue;
1121+
}
1122+
for sockaddr in sockaddrs.unwrap() {
1123+
let _ =
1124+
cli::do_connect_peer(node_id, sockaddr, Arc::clone(&connect_pm)).await;
1125+
}
1126+
}
11171127
}
11181128
}
11191129
});
@@ -1165,7 +1175,6 @@ async fn start_ldk() {
11651175
network_graph,
11661176
inbound_payments,
11671177
outbound_payments,
1168-
ldk_data_dir,
11691178
cli_persister,
11701179
)
11711180
);

0 commit comments

Comments
 (0)