Skip to content

Commit 32578c2

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 24467de commit 32578c2

File tree

3 files changed

+39
-70
lines changed

3 files changed

+39
-70
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: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,37 +1060,46 @@ async fn start_ldk() {
10601060
// Regularly reconnect to channel peers.
10611061
let connect_cm = Arc::clone(&channel_manager);
10621062
let connect_pm = Arc::clone(&peer_manager);
1063-
let peer_data_path = format!("{}/channel_peer_data", ldk_data_dir);
10641063
let stop_connect = Arc::clone(&stop_listen_connect);
1064+
let graph_connect = Arc::clone(&network_graph);
10651065
tokio::spawn(async move {
10661066
let mut interval = tokio::time::interval(Duration::from_secs(1));
10671067
interval.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Delay);
10681068
loop {
10691069
interval.tick().await;
1070-
match disk::read_channel_peer_data(Path::new(&peer_data_path)) {
1071-
Ok(info) => {
1072-
for node_id in connect_cm
1073-
.list_channels()
1074-
.iter()
1075-
.map(|chan| chan.counterparty.node_id)
1076-
.filter(|id| connect_pm.peer_by_node_id(id).is_none())
1077-
{
1078-
if stop_connect.load(Ordering::Acquire) {
1079-
return;
1080-
}
1081-
for (pubkey, peer_addr) in info.iter() {
1082-
if *pubkey == node_id {
1083-
let _ = cli::do_connect_peer(
1084-
*pubkey,
1085-
peer_addr.clone(),
1086-
Arc::clone(&connect_pm),
1087-
)
1088-
.await;
1070+
for node_id in connect_cm
1071+
.list_channels()
1072+
.iter()
1073+
.map(|chan| chan.counterparty.node_id)
1074+
.filter(|id| connect_pm.peer_by_node_id(id).is_none())
1075+
{
1076+
if stop_connect.load(Ordering::Acquire) {
1077+
return;
1078+
}
1079+
let id = NodeId::from_pubkey(&node_id);
1080+
let addrs = if let Some(node) = graph_connect.read_only().node(&id) {
1081+
if let Some(ann) = &node.announcement_info {
1082+
ann.addresses().iter().filter_map(|addr| {
1083+
match addr {
1084+
lightning::ln::msgs::SocketAddress::OnionV2(_) => None,
1085+
lightning::ln::msgs::SocketAddress::OnionV3 { .. } => None,
1086+
_ => Some(addr.clone()),
10891087
}
1090-
}
1088+
}).collect::<Vec<_>>()
1089+
} else {
1090+
Vec::new()
10911091
}
1092-
},
1093-
Err(e) => println!("ERROR: errored reading channel peer info from disk: {:?}", e),
1092+
} else {
1093+
Vec::new()
1094+
};
1095+
for addr in addrs {
1096+
let sockaddrs = addr.to_socket_addrs();
1097+
if sockaddrs.is_err() { continue; }
1098+
for sockaddr in sockaddrs.unwrap() {
1099+
let _ =
1100+
cli::do_connect_peer(node_id, sockaddr, Arc::clone(&connect_pm)).await;
1101+
}
1102+
}
10941103
}
10951104
}
10961105
});
@@ -1142,7 +1151,6 @@ async fn start_ldk() {
11421151
network_graph,
11431152
inbound_payments,
11441153
outbound_payments,
1145-
ldk_data_dir,
11461154
cli_persister,
11471155
)
11481156
);

0 commit comments

Comments
 (0)