Skip to content

Commit ddc9414

Browse files
Update to new Netgraph + PaymentFailed API
1 parent 46c606e commit ddc9414

File tree

4 files changed

+51
-31
lines changed

4 files changed

+51
-31
lines changed

Cargo.lock

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,18 @@ edition = "2018"
88
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
99

1010
[dependencies]
11-
lightning = { version = "0.0.99", git = "https://github.com/rust-bitcoin/rust-lightning", branch = "main" }
12-
lightning-block-sync = { version = "0.0.99", git = "https://github.com/rust-bitcoin/rust-lightning", branch = "main", features = [ "rpc-client" ] }
13-
lightning-invoice = { version = "0.7", git = "https://github.com/rust-bitcoin/rust-lightning", branch = "main" }
14-
lightning-net-tokio = { version = "0.0.99", git = "https://github.com/rust-bitcoin/rust-lightning", branch = "main" }
15-
lightning-persister = { version = "0.0.99", git = "https://github.com/rust-bitcoin/rust-lightning", branch = "main" }
16-
lightning-background-processor = { version = "0.0.99", git = "https://github.com/rust-bitcoin/rust-lightning", branch = "main" }
11+
# lightning = { version = "0.0.99", git = "https://github.com/rust-bitcoin/rust-lightning", branch = "main" }
12+
# lightning-block-sync = { version = "0.0.99", git = "https://github.com/rust-bitcoin/rust-lightning", branch = "main", features = [ "rpc-client" ] }
13+
# lightning-invoice = { version = "0.7", git = "https://github.com/rust-bitcoin/rust-lightning", branch = "main" }
14+
# lightning-net-tokio = { version = "0.0.99", git = "https://github.com/rust-bitcoin/rust-lightning", branch = "main" }
15+
# lightning-persister = { version = "0.0.99", git = "https://github.com/rust-bitcoin/rust-lightning", branch = "main" }
16+
# lightning-background-processor = { version = "0.0.99", git = "https://github.com/rust-bitcoin/rust-lightning", branch = "main" }
17+
lightning = { git = "https://github.com/jkczyz/rust-lightning.git", branch = "2021-07-network-update-handler" }
18+
lightning-block-sync = { git = "https://github.com/jkczyz/rust-lightning", branch = "2021-07-network-update-handler", features = [ "rpc-client" ] }
19+
lightning-invoice = { git = "https://github.com/jkczyz/rust-lightning.git", branch = "2021-07-network-update-handler" }
20+
lightning-net-tokio = { git = "https://github.com/jkczyz/rust-lightning.git", branch = "2021-07-network-update-handler" }
21+
lightning-persister = { git = "https://github.com/jkczyz/rust-lightning.git", branch = "2021-07-network-update-handler" }
22+
lightning-background-processor = { git = "https://github.com/jkczyz/rust-lightning.git", branch = "2021-07-network-update-handler" }
1723

1824
base64 = "0.13.0"
1925
bitcoin = "0.27"

src/cli.rs

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use lightning::chain::keysinterface::KeysManager;
1212
use lightning::ln::features::InvoiceFeatures;
1313
use lightning::ln::msgs::NetAddress;
1414
use lightning::ln::{PaymentHash, PaymentSecret};
15-
use lightning::routing::network_graph::NetGraphMsgHandler;
15+
use lightning::routing::network_graph::{NetGraphMsgHandler, NetworkGraph};
1616
use lightning::routing::router;
1717
use lightning::routing::router::RouteHint;
1818
use lightning::util::config::{ChannelConfig, ChannelHandshakeLimits, UserConfig};
@@ -137,7 +137,13 @@ pub(crate) fn parse_startup_args() -> Result<LdkUserInfo, ()> {
137137
pub(crate) async fn poll_for_user_input(
138138
peer_manager: Arc<PeerManager>, channel_manager: Arc<ChannelManager>,
139139
keys_manager: Arc<KeysManager>,
140-
router: Arc<NetGraphMsgHandler<Arc<dyn chain::Access + Send + Sync>, Arc<FilesystemLogger>>>,
140+
router: Arc<
141+
NetGraphMsgHandler<
142+
Arc<NetworkGraph>,
143+
Arc<dyn chain::Access + Send + Sync>,
144+
Arc<FilesystemLogger>,
145+
>,
146+
>,
141147
inbound_payments: PaymentInfoStorage, outbound_payments: PaymentInfoStorage,
142148
ldk_data_dir: String, logger: Arc<FilesystemLogger>, network: Network,
143149
) {
@@ -585,17 +591,22 @@ fn send_payment(
585591
payee: PublicKey, amt_msat: u64, final_cltv: u32, payment_hash: PaymentHash,
586592
payment_secret: Option<PaymentSecret>, payee_features: Option<InvoiceFeatures>,
587593
route_hints: Vec<&RouteHint>,
588-
router: Arc<NetGraphMsgHandler<Arc<dyn chain::Access + Send + Sync>, Arc<FilesystemLogger>>>,
594+
router: Arc<
595+
NetGraphMsgHandler<
596+
Arc<NetworkGraph>,
597+
Arc<dyn chain::Access + Send + Sync>,
598+
Arc<FilesystemLogger>,
599+
>,
600+
>,
589601
channel_manager: Arc<ChannelManager>, payment_storage: PaymentInfoStorage,
590602
logger: Arc<FilesystemLogger>,
591603
) {
592-
let network_graph = router.network_graph.read().unwrap();
593604
let first_hops = channel_manager.list_usable_channels();
594605
let payer_pubkey = channel_manager.get_our_node_id();
595606

596607
let route = router::get_route(
597608
&payer_pubkey,
598-
&network_graph,
609+
&router.network_graph,
599610
&payee,
600611
payee_features,
601612
Some(&first_hops.iter().collect::<Vec<_>>()),
@@ -633,17 +644,22 @@ fn send_payment(
633644

634645
fn keysend(
635646
payee: PublicKey, amt_msat: u64,
636-
router: Arc<NetGraphMsgHandler<Arc<dyn chain::Access + Send + Sync>, Arc<FilesystemLogger>>>,
647+
router: Arc<
648+
NetGraphMsgHandler<
649+
Arc<NetworkGraph>,
650+
Arc<dyn chain::Access + Send + Sync>,
651+
Arc<FilesystemLogger>,
652+
>,
653+
>,
637654
channel_manager: Arc<ChannelManager>, payment_storage: PaymentInfoStorage,
638655
logger: Arc<FilesystemLogger>,
639656
) {
640-
let network_graph = router.network_graph.read().unwrap();
641657
let first_hops = channel_manager.list_usable_channels();
642658
let payer_pubkey = channel_manager.get_our_node_id();
643659

644660
let route = match router::get_keysend_route(
645661
&payer_pubkey,
646-
&network_graph,
662+
&router.network_graph,
647663
&payee,
648664
Some(&first_hops.iter().collect::<Vec<_>>()),
649665
&vec![],

src/main.rs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ async fn handle_ldk_events(
205205
}
206206
}
207207
}
208-
Event::PaymentFailed { payment_hash, rejected_by_dest } => {
208+
Event::PaymentFailed { payment_hash, rejected_by_dest, .. } => {
209209
print!(
210210
"\nEVENT: Failed to send payment to payment hash {:?}: ",
211211
hex_utils::hex_str(&payment_hash.0)
@@ -459,22 +459,19 @@ async fn start_ldk() {
459459
// Step 11: Optional: Initialize the NetGraphMsgHandler
460460
let genesis = genesis_block(args.network).header.block_hash();
461461
let network_graph_path = format!("{}/network_graph", ldk_data_dir.clone());
462-
let network_graph = disk::read_network(Path::new(&network_graph_path), genesis);
463-
let router = Arc::new(NetGraphMsgHandler::from_net_graph(
462+
let network_graph = Arc::new(disk::read_network(Path::new(&network_graph_path), genesis));
463+
let router = Arc::new(NetGraphMsgHandler::new(
464+
network_graph.clone(),
464465
None::<Arc<dyn chain::Access + Send + Sync>>,
465466
logger.clone(),
466-
network_graph,
467467
));
468468
let router_persist = Arc::clone(&router);
469469
tokio::spawn(async move {
470470
let mut interval = tokio::time::interval(Duration::from_secs(600));
471471
loop {
472472
interval.tick().await;
473-
if disk::persist_network(
474-
Path::new(&network_graph_path),
475-
&*router_persist.network_graph.read().unwrap(),
476-
)
477-
.is_err()
473+
if disk::persist_network(Path::new(&network_graph_path), &*router_persist.network_graph)
474+
.is_err()
478475
{
479476
// Persistence errors here are non-fatal as we can just fetch the routing graph
480477
// again later, but they may indicate a disk error which could be fatal elsewhere.
@@ -552,15 +549,15 @@ async fn start_ldk() {
552549
let network = args.network;
553550
let bitcoind_rpc = bitcoind_client.clone();
554551
let handle = tokio::runtime::Handle::current();
555-
let event_handler = move |event| {
552+
let event_handler = move |event: &Event| {
556553
handle.block_on(handle_ldk_events(
557554
channel_manager_event_listener.clone(),
558555
bitcoind_rpc.clone(),
559556
keys_manager_listener.clone(),
560557
inbound_pmts_for_events.clone(),
561558
outbound_pmts_for_events.clone(),
562559
network,
563-
event,
560+
event.clone(),
564561
))
565562
};
566563
// Step 16: Persist ChannelManager
@@ -574,6 +571,7 @@ async fn start_ldk() {
574571
chain_monitor.clone(),
575572
channel_manager.clone(),
576573
peer_manager.clone(),
574+
network_graph.clone(),
577575
logger.clone(),
578576
);
579577

0 commit comments

Comments
 (0)