[[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",
[[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",
[[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",
[[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",
[[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",
[[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",
# 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"
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)) {
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;
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,
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);
});
// 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,
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(),