Merge pull request #51 from jkczyz/2022-03-ldk-106
authorMatt Corallo <649246+TheBlueMatt@users.noreply.github.com>
Mon, 4 Apr 2022 20:09:44 +0000 (20:09 +0000)
committerGitHub <noreply@github.com>
Mon, 4 Apr 2022 20:09:44 +0000 (20:09 +0000)
Update to LDK 0.0.106

Cargo.lock
Cargo.toml
src/disk.rs
src/main.rs

index f7f1ee463a8b412b5a529309fe1b23a2c93a29df..b4e953c1274c73f944e94e126b5c61ee45715e39 100644 (file)
@@ -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",
index 8e3fe5af8d8d1181f4cd54a99d8cf589d72d8d04..c67325393f536e2de23611a80ad93456b2a1195d 100644 (file)
@@ -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"
index af565bc5b8afac37e05c43bb2e6f2ce855800f47..8a54592201d65610965ded747216fc961505329a 100644 (file)
@@ -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)) {
index ad48efd4b1d9afcb45c3ad9d989411bc23871790..f48a11897b825457a4a3faf1bc7fbd471bb0875e 100644 (file)
@@ -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<E> = payment::InvoicePayer<
 
 type Router = DefaultRouter<Arc<NetworkGraph>, Arc<FilesystemLogger>>;
 
+struct DataPersister {
+       data_dir: String,
+}
+
+impl
+       Persister<
+               InMemorySigner,
+               Arc<ChainMonitor>,
+               Arc<BitcoindClient>,
+               Arc<KeysManager>,
+               Arc<BitcoindClient>,
+               Arc<FilesystemLogger>,
+       > 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<ChannelManager>, bitcoind_client: Arc<BitcoindClient>,
        keys_manager: Arc<KeysManager>, inbound_payments: PaymentInfoStorage,
@@ -491,22 +521,6 @@ async fn start_ldk() {
                None::<Arc<dyn chain::Access + Send + Sync>>,
                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<ChannelManager> = 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(),