use bitcoin_bech32::WitnessProgram;
use lightning::chain;
use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget, FeeEstimator};
-use lightning::chain::chainmonitor;
use lightning::chain::keysinterface::{InMemorySigner, KeysInterface, KeysManager, Recipient};
+use lightning::chain::{chainmonitor, ChannelMonitorUpdateStatus};
use lightning::chain::{BestBlock, Filter, Watch};
use lightning::ln::channelmanager;
use lightning::ln::channelmanager::{
use rand::{thread_rng, Rng};
use std::collections::hash_map::Entry;
use std::collections::HashMap;
+use std::convert::TryInto;
use std::fmt;
use std::fs;
use std::fs::File;
use std::io;
use std::io::Write;
-use std::ops::Deref;
use std::path::Path;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::{Arc, Mutex};
pub(crate) type ChannelManager =
SimpleArcChannelManager<ChainMonitor, BitcoindClient, BitcoindClient, FilesystemLogger>;
-pub(crate) type InvoicePayer<E> = payment::InvoicePayer<
- Arc<ChannelManager>,
- Router,
- Arc<Mutex<ProbabilisticScorer<Arc<NetworkGraph>, Arc<FilesystemLogger>>>>,
+pub(crate) type InvoicePayer<E> =
+ payment::InvoicePayer<Arc<ChannelManager>, Router, Arc<FilesystemLogger>, E>;
+
+type Router = DefaultRouter<
+ Arc<NetworkGraph>,
Arc<FilesystemLogger>,
- E,
+ Arc<Mutex<ProbabilisticScorer<Arc<NetworkGraph>, Arc<FilesystemLogger>>>>,
>;
-type Router = DefaultRouter<Arc<NetworkGraph>, Arc<FilesystemLogger>>;
-
pub(crate) type NetworkGraph = gossip::NetworkGraph<Arc<FilesystemLogger>>;
type OnionMessenger = SimpleArcOnionMessenger<FilesystemLogger>;
}
chain_tip = Some(
init::synchronize_listeners(
- &mut bitcoind_client.deref(),
+ bitcoind_client.as_ref(),
args.network,
&mut cache,
chain_listeners,
for item in chain_listener_channel_monitors.drain(..) {
let channel_monitor = item.1 .0;
let funding_outpoint = item.2;
- chain_monitor.watch_channel(funding_outpoint, channel_monitor).unwrap();
+ assert_eq!(
+ chain_monitor.watch_channel(funding_outpoint, channel_monitor),
+ ChannelMonitorUpdateStatus::Completed
+ );
}
// Step 11: Optional: Initialize the P2PGossipSync
// Step 12: Initialize the PeerManager
let channel_manager: Arc<ChannelManager> = Arc::new(channel_manager);
- let onion_messenger: Arc<OnionMessenger> =
- Arc::new(OnionMessenger::new(keys_manager.clone(), logger.clone()));
+ let onion_messenger: Arc<OnionMessenger> = Arc::new(OnionMessenger::new(
+ Arc::clone(&keys_manager),
+ Arc::clone(&logger),
+ IgnoringMessageHandler {},
+ ));
let mut ephemeral_bytes = [0; 32];
let current_time = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs();
rand::thread_rng().fill_bytes(&mut ephemeral_bytes);
let peer_manager: Arc<PeerManager> = Arc::new(PeerManager::new(
lightning_msg_handler,
keys_manager.get_node_secret(Recipient::Node).unwrap(),
- current_time,
+ current_time.try_into().unwrap(),
&ephemeral_bytes,
logger.clone(),
IgnoringMessageHandler {},
// Step 14: Connect and Disconnect Blocks
if chain_tip.is_none() {
- chain_tip =
- Some(init::validate_best_block_header(&mut bitcoind_client.deref()).await.unwrap());
+ chain_tip = Some(init::validate_best_block_header(bitcoind_client.as_ref()).await.unwrap());
}
let channel_manager_listener = channel_manager.clone();
let chain_monitor_listener = chain_monitor.clone();
let bitcoind_block_source = bitcoind_client.clone();
let network = args.network;
tokio::spawn(async move {
- let mut derefed = bitcoind_block_source.deref();
- let chain_poller = poll::ChainPoller::new(&mut derefed, network);
+ let chain_poller = poll::ChainPoller::new(bitcoind_block_source.as_ref(), network);
let chain_listener = (chain_monitor_listener, channel_manager_listener);
let mut spv_client =
SpvClient::new(chain_tip.unwrap(), chain_poller, &mut cache, &chain_listener);
network_graph.clone(),
logger.clone(),
keys_manager.get_secure_random_bytes(),
+ scorer.clone(),
);
let invoice_payer = Arc::new(InvoicePayer::new(
channel_manager.clone(),
router,
- scorer.clone(),
logger.clone(),
event_handler,
payment::Retry::Timeout(Duration::from_secs(10)),
outbound_payments,
ldk_data_dir.clone(),
network,
+ Arc::clone(&logger),
)
.await;