From: Matt Corallo <649246+TheBlueMatt@users.noreply.github.com> Date: Mon, 4 Apr 2022 20:09:44 +0000 (+0000) Subject: Merge pull request #51 from jkczyz/2022-03-ldk-106 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=1f5243998796bcbd6a26eb93cef40bfd2e1bdf75;hp=b67c64b83fac733a40aef6d570b7e7dc137cd297;p=ldk-sample Merge pull request #51 from jkczyz/2022-03-ldk-106 Update to LDK 0.0.106 --- diff --git a/Cargo.lock b/Cargo.lock index f7f1ee4..b4e953c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -229,9 +229,9 @@ checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" [[package]] name = "lightning" -version = "0.0.105" +version = "0.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a10e7439623b293d000fc875627704210d8d0ff5b7badbb689f2a3d51afc618f" +checksum = "580647f97f8e6d138ad724027c8ca9b890b1001b05374c270bbee4c10309b641" dependencies = [ "bitcoin", "secp256k1", @@ -239,9 +239,9 @@ dependencies = [ [[package]] name = "lightning-background-processor" -version = "0.0.105" +version = "0.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "867b488afcffe0e86f0f9d35212e133125441b226ba4d48b4f304fb898984eed" +checksum = "a4a9c8c4c6e4b9652287d8ce2fc3a168861fdb40eb68793567be5ed77ecce6eb" dependencies = [ "bitcoin", "lightning", @@ -250,9 +250,9 @@ dependencies = [ [[package]] name = "lightning-block-sync" -version = "0.0.105" +version = "0.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2927b07431cabdfb07b130032bd78c6557d80bd054be749e4824308e6f29fd" +checksum = "f8731c4f20bd4e0d588db6e849ac2114674a112cdfda65354cf9b4cf6018878a" dependencies = [ "bitcoin", "chunked_transfer", @@ -263,9 +263,9 @@ dependencies = [ [[package]] name = "lightning-invoice" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce661ad7182c2b258d1506e264095d2b4c71436a91b72834d7fb87b7e92e06c0" +checksum = "f069b6eb46d7639d07977d14dc7d9a40d9d8bc5ac2b47f1924318fec13edd5c0" dependencies = [ "bech32", "bitcoin_hashes", @@ -276,9 +276,9 @@ dependencies = [ [[package]] name = "lightning-net-tokio" -version = "0.0.105" +version = "0.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6eb1bcdf0a29baccb13d514e4a8761c9d8038ffd107f27e45182f0177f5e007" +checksum = "85119f898ac097d46c17a0ad7dda0f6ef6b923e5bcb4d1a5e39d33c3c68aa7bc" dependencies = [ "bitcoin", "lightning", @@ -287,9 +287,9 @@ dependencies = [ [[package]] name = "lightning-persister" -version = "0.0.105" +version = "0.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77150d61ceea59c6ee1598f26f4f9589935fe464d530f44d3d54ccc31b060512" +checksum = "5f8aac01a61b302f3928adf235660c38aa5c246113fc7d19cc4cb60b5f53b7ae" dependencies = [ "bitcoin", "libc", diff --git a/Cargo.toml b/Cargo.toml index 8e3fe5a..c673253 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,12 +8,12 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -lightning = { version = "0.0.105", features = ["max_level_trace"] } -lightning-block-sync = { version = "0.0.105", features = [ "rpc-client" ] } -lightning-invoice = { version = "0.13" } -lightning-net-tokio = { version = "0.0.105" } -lightning-persister = { version = "0.0.105" } -lightning-background-processor = { version = "0.0.105" } +lightning = { version = "0.0.106", features = ["max_level_trace"] } +lightning-block-sync = { version = "0.0.106", features = [ "rpc-client" ] } +lightning-invoice = { version = "0.14" } +lightning-net-tokio = { version = "0.0.106" } +lightning-persister = { version = "0.0.106" } +lightning-background-processor = { version = "0.0.106" } base64 = "0.13.0" bitcoin = "0.27" diff --git a/src/disk.rs b/src/disk.rs index af565bc..8a54592 100644 --- a/src/disk.rs +++ b/src/disk.rs @@ -73,19 +73,6 @@ pub(crate) fn read_channel_peer_data( Ok(peer_data) } -pub(crate) fn persist_network(path: &Path, network_graph: &NetworkGraph) -> std::io::Result<()> { - let mut tmp_path = path.to_path_buf().into_os_string(); - tmp_path.push(".tmp"); - let file = fs::OpenOptions::new().write(true).create(true).open(&tmp_path)?; - let write_res = network_graph.write(&mut BufWriter::new(file)); - if let Err(e) = write_res.and_then(|_| fs::rename(&tmp_path, path)) { - let _ = fs::remove_file(&tmp_path); - Err(e) - } else { - Ok(()) - } -} - pub(crate) fn read_network(path: &Path, genesis_hash: BlockHash) -> NetworkGraph { if let Ok(file) = File::open(path) { if let Ok(graph) = NetworkGraph::read(&mut BufReader::new(file)) { diff --git a/src/main.rs b/src/main.rs index ad48efd..f48a118 100644 --- a/src/main.rs +++ b/src/main.rs @@ -29,7 +29,7 @@ use lightning::routing::scoring::ProbabilisticScorer; use lightning::util::config::UserConfig; use lightning::util::events::{Event, PaymentPurpose}; use lightning::util::ser::ReadableArgs; -use lightning_background_processor::BackgroundProcessor; +use lightning_background_processor::{BackgroundProcessor, Persister}; use lightning_block_sync::init; use lightning_block_sync::poll; use lightning_block_sync::SpvClient; @@ -109,6 +109,36 @@ pub(crate) type InvoicePayer = payment::InvoicePayer< type Router = DefaultRouter, Arc>; +struct DataPersister { + data_dir: String, +} + +impl + Persister< + InMemorySigner, + Arc, + Arc, + Arc, + Arc, + Arc, + > for DataPersister +{ + fn persist_manager(&self, channel_manager: &ChannelManager) -> Result<(), std::io::Error> { + FilesystemPersister::persist_manager(self.data_dir.clone(), channel_manager) + } + + fn persist_graph(&self, network_graph: &NetworkGraph) -> Result<(), std::io::Error> { + if FilesystemPersister::persist_network_graph(self.data_dir.clone(), network_graph).is_err() + { + // Persistence errors here are non-fatal as we can just fetch the routing graph + // again later, but they may indicate a disk error which could be fatal elsewhere. + eprintln!("Warning: Failed to persist network graph, check your disk and permissions"); + } + + Ok(()) + } +} + async fn handle_ldk_events( channel_manager: Arc, bitcoind_client: Arc, keys_manager: Arc, inbound_payments: PaymentInfoStorage, @@ -491,22 +521,6 @@ async fn start_ldk() { None::>, logger.clone(), )); - let network_graph_persist = Arc::clone(&network_graph); - tokio::spawn(async move { - let mut interval = tokio::time::interval(Duration::from_secs(600)); - loop { - interval.tick().await; - if disk::persist_network(Path::new(&network_graph_path), &network_graph_persist) - .is_err() - { - // Persistence errors here are non-fatal as we can just fetch the routing graph - // again later, but they may indicate a disk error which could be fatal elsewhere. - eprintln!( - "Warning: Failed to persist network graph, check your disk and permissions" - ); - } - } - }); // Step 12: Initialize the PeerManager let channel_manager: Arc = Arc::new(channel_manager); @@ -617,7 +631,11 @@ async fn start_ldk() { }); // Step 17: Create InvoicePayer - let router = DefaultRouter::new(network_graph.clone(), logger.clone()); + let router = DefaultRouter::new( + network_graph.clone(), + logger.clone(), + keys_manager.get_secure_random_bytes(), + ); let invoice_payer = Arc::new(InvoicePayer::new( channel_manager.clone(), router, @@ -627,14 +645,12 @@ async fn start_ldk() { payment::RetryAttempts(5), )); - // Step 18: Persist ChannelManager - let data_dir = ldk_data_dir.clone(); - let persist_channel_manager_callback = - move |node: &ChannelManager| FilesystemPersister::persist_manager(data_dir.clone(), &*node); + // Step 18: Persist ChannelManager and NetworkGraph + let persister = DataPersister { data_dir: ldk_data_dir.clone() }; // Step 19: Background Processing let background_processor = BackgroundProcessor::start( - persist_channel_manager_callback, + persister, invoice_payer.clone(), chain_monitor.clone(), channel_manager.clone(),