X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning-persister%2Fsrc%2Flib.rs;h=dd7a0d04d5b5e63c0df4c143d95cf66310bcfd8d;hb=5c8c780697ca1466697b26f581660d1891ee49b0;hp=da5cba95e673d72ecfdb7ed90d1e5340f045195c;hpb=90ea66cf44a72275f4937a243b23a0cf51f2765f;p=rust-lightning diff --git a/lightning-persister/src/lib.rs b/lightning-persister/src/lib.rs index da5cba95..dd7a0d04 100644 --- a/lightning-persister/src/lib.rs +++ b/lightning-persister/src/lib.rs @@ -6,17 +6,21 @@ extern crate libc; use bitcoin::hashes::hex::ToHex; use crate::util::DiskWriteable; +use lightning::chain; +use lightning::chain::chaininterface::{BroadcasterInterface, FeeEstimator}; use lightning::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, ChannelMonitorUpdateErr}; use lightning::chain::channelmonitor; -use lightning::chain::keysinterface::ChannelKeys; +use lightning::chain::keysinterface::{ChannelKeys, KeysInterface}; use lightning::chain::transaction::OutPoint; +use lightning::ln::channelmanager::ChannelManager; +use lightning::util::logger::Logger; use lightning::util::ser::Writeable; use std::fs; use std::io::Error; +use std::sync::Arc; #[cfg(test)] use { - lightning::chain::keysinterface::KeysInterface, lightning::util::ser::ReadableArgs, bitcoin::{BlockHash, Txid}, bitcoin::hashes::hex::FromHex, @@ -46,6 +50,19 @@ impl DiskWriteable for ChannelMonitor { } } +impl DiskWriteable for ChannelManager, Arc, Arc, Arc, Arc> +where ChanSigner: ChannelKeys + Writeable, + M: chain::Watch, + T: BroadcasterInterface, + K: KeysInterface, + F: FeeEstimator, + L: Logger, +{ + fn write_to_file(&self, writer: &mut fs::File) -> Result<(), std::io::Error> { + self.write(writer) + } +} + impl FilesystemPersister { /// Initialize a new FilesystemPersister and set the path to the individual channels' /// files. @@ -55,6 +72,38 @@ impl FilesystemPersister { } } + pub fn get_data_dir(&self) -> String { + self.path_to_channel_data.clone() + } + + /// Writes the provided `ChannelManager` to the path provided at `FilesystemPersister` + /// initialization, within a file called "manager". + pub fn persist_manager( + data_dir: String, + manager: &ChannelManager, Arc, Arc, Arc, Arc> + ) -> Result<(), std::io::Error> + where ChanSigner: ChannelKeys + Writeable, + M: chain::Watch, + T: BroadcasterInterface, + K: KeysInterface, + F: FeeEstimator, + L: Logger + { + let mut manager_bytes = Vec::new(); + manager.write(&mut manager_bytes).unwrap(); + println!("VMW manager bytes being persisted: {}", manager_bytes.len()); + match util::write_to_file(data_dir, "manager".to_string(), manager) { + Ok(()) => { + println!("VMW: writing manager was Ok"); + Ok(()) + }, + Err(e) => { + println!("VMW: errored persisting manager: {:?}", e); + return Err(e) + } + } + } + #[cfg(test)] fn load_channel_data(&self, keys: &Keys) -> Result>, ChannelMonitorUpdateErr> {