From aa1635c16624664ba2fde72c0f58da7437e50b74 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Sat, 30 Sep 2023 01:06:13 +0000 Subject: [PATCH] Upgrade LDK to 0.0.118 --- Cargo.toml | 14 +++++++------- src/bitcoind_client.rs | 44 ++++++++++++++++++++++++++++++++---------- src/cli.rs | 6 +++--- src/main.rs | 14 +++++++++++--- src/sweep.rs | 4 ++-- 5 files changed, 57 insertions(+), 25 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d73ce6d..e814e5f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,13 +8,13 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -lightning = { version = "0.0.117", features = ["max_level_trace"] } -lightning-block-sync = { version = "0.0.117", features = [ "rpc-client", "tokio" ] } -lightning-invoice = { version = "0.25.0" } -lightning-net-tokio = { version = "0.0.117" } -lightning-persister = { version = "0.0.117" } -lightning-background-processor = { version = "0.0.117", features = [ "futures" ] } -lightning-rapid-gossip-sync = { version = "0.0.117" } +lightning = { version = "0.0.118", features = ["max_level_trace"] } +lightning-block-sync = { version = "0.0.118", features = [ "rpc-client", "tokio" ] } +lightning-invoice = { version = "0.26.0" } +lightning-net-tokio = { version = "0.0.118" } +lightning-persister = { version = "0.0.118" } +lightning-background-processor = { version = "0.0.118", features = [ "futures" ] } +lightning-rapid-gossip-sync = { version = "0.0.118" } base64 = "0.13.0" bitcoin = "0.29.0" diff --git a/src/bitcoind_client.rs b/src/bitcoind_client.rs index 67b42ef..17ea74c 100644 --- a/src/bitcoind_client.rs +++ b/src/bitcoind_client.rs @@ -75,10 +75,23 @@ impl BitcoindClient { "Failed to make initial call to bitcoind - please check your RPC user/password and access settings") })?; let mut fees: HashMap = HashMap::new(); - fees.insert(ConfirmationTarget::MempoolMinimum, AtomicU32::new(MIN_FEERATE)); - fees.insert(ConfirmationTarget::Background, AtomicU32::new(MIN_FEERATE)); - fees.insert(ConfirmationTarget::Normal, AtomicU32::new(2000)); - fees.insert(ConfirmationTarget::HighPriority, AtomicU32::new(5000)); + fees.insert(ConfirmationTarget::OnChainSweep, AtomicU32::new(5000)); + fees.insert( + ConfirmationTarget::MaxAllowedNonAnchorChannelRemoteFee, + AtomicU32::new(25 * 250), + ); + fees.insert( + ConfirmationTarget::MinAllowedAnchorChannelRemoteFee, + AtomicU32::new(MIN_FEERATE), + ); + fees.insert( + ConfirmationTarget::MinAllowedNonAnchorChannelRemoteFee, + AtomicU32::new(MIN_FEERATE), + ); + fees.insert(ConfirmationTarget::AnchorChannelFee, AtomicU32::new(MIN_FEERATE)); + fees.insert(ConfirmationTarget::NonAnchorChannelFee, AtomicU32::new(2000)); + fees.insert(ConfirmationTarget::ChannelCloseMinimum, AtomicU32::new(MIN_FEERATE)); + let client = Self { bitcoind_rpc_client: Arc::new(bitcoind_rpc_client), host, @@ -162,18 +175,28 @@ impl BitcoindClient { } }; - fees.get(&ConfirmationTarget::MempoolMinimum) + fees.get(&ConfirmationTarget::OnChainSweep) + .unwrap() + .store(high_prio_estimate, Ordering::Release); + fees.get(&ConfirmationTarget::MaxAllowedNonAnchorChannelRemoteFee) + .unwrap() + .store(std::cmp::max(25 * 250, high_prio_estimate * 10), Ordering::Release); + fees.get(&ConfirmationTarget::MinAllowedAnchorChannelRemoteFee) .unwrap() .store(mempoolmin_estimate, Ordering::Release); - fees.get(&ConfirmationTarget::Background) + fees.get(&ConfirmationTarget::MinAllowedNonAnchorChannelRemoteFee) + .unwrap() + .store(background_estimate - 250, Ordering::Release); + fees.get(&ConfirmationTarget::AnchorChannelFee) .unwrap() .store(background_estimate, Ordering::Release); - fees.get(&ConfirmationTarget::Normal) + fees.get(&ConfirmationTarget::NonAnchorChannelFee) .unwrap() .store(normal_estimate, Ordering::Release); - fees.get(&ConfirmationTarget::HighPriority) + fees.get(&ConfirmationTarget::ChannelCloseMinimum) .unwrap() - .store(high_prio_estimate, Ordering::Release); + .store(background_estimate, Ordering::Release); + tokio::time::sleep(Duration::from_secs(60)).await; } }); @@ -203,7 +226,8 @@ impl BitcoindClient { // LDK gives us feerates in satoshis per KW but Bitcoin Core here expects fees // denominated in satoshis per vB. First we need to multiply by 4 to convert weight // units to virtual bytes, then divide by 1000 to convert KvB to vB. - "fee_rate": self.get_est_sat_per_1000_weight(ConfirmationTarget::Normal) as f64 / 250.0, + "fee_rate": self + .get_est_sat_per_1000_weight(ConfirmationTarget::NonAnchorChannelFee) as f64 / 250.0, // While users could "cancel" a channel open by RBF-bumping and paying back to // themselves, we don't allow it here as its easy to have users accidentally RBF bump // and pay to the channel funding address, which results in loss of funds. Real diff --git a/src/cli.rs b/src/cli.rs index 66af9ee..297900a 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -12,7 +12,7 @@ use lightning::ln::channelmanager::{PaymentId, RecipientOnionFields, Retry}; use lightning::ln::msgs::SocketAddress; use lightning::ln::{ChannelId, PaymentHash, PaymentPreimage}; use lightning::onion_message::OnionMessagePath; -use lightning::onion_message::{CustomOnionMessageContents, Destination, OnionMessageContents}; +use lightning::onion_message::{Destination, OnionMessageContents}; use lightning::routing::gossip::NodeId; use lightning::routing::router::{PaymentParameters, RouteParameters}; use lightning::sign::{EntropySource, KeysManager}; @@ -48,7 +48,7 @@ struct UserOnionMessageContents { data: Vec, } -impl CustomOnionMessageContents for UserOnionMessageContents { +impl OnionMessageContents for UserOnionMessageContents { fn tlv_type(&self) -> u64 { self.tlv_type } @@ -445,7 +445,7 @@ pub(crate) fn poll_for_user_input( let message_path = OnionMessagePath { intermediate_nodes, destination }; match onion_messenger.send_onion_message( message_path, - OnionMessageContents::Custom(UserOnionMessageContents { tlv_type, data }), + UserOnionMessageContents { tlv_type, data }, None, ) { Ok(()) => println!("SUCCESS: forwarded onion message to first hop"), diff --git a/src/main.rs b/src/main.rs index 50edb22..a33d667 100644 --- a/src/main.rs +++ b/src/main.rs @@ -139,7 +139,7 @@ pub(crate) type GossipVerifier = lightning_block_sync::gossip::GossipVerifier< Arc, SocketDescriptor, Arc, - Arc>, + Arc, IgnoringMessageHandler, Arc, >; @@ -158,7 +158,8 @@ pub(crate) type ChannelManager = pub(crate) type NetworkGraph = gossip::NetworkGraph>; -type OnionMessenger = SimpleArcOnionMessenger; +type OnionMessenger = + SimpleArcOnionMessenger; pub(crate) type BumpTxEventHandler = BumpTransactionEventHandler< Arc, @@ -358,6 +359,13 @@ async fn handle_ldk_events( } fs_store.write("", "", OUTBOUND_PAYMENTS_FNAME, &outbound.encode()).unwrap(); } + Event::InvoiceRequestFailed { payment_id } => { + print!("\nEVENT: Failed to request invoice to send payment with id {}", payment_id); + print!("> "); + io::stdout().flush().unwrap(); + + // TODO: mark the payment as failed + } Event::PaymentForwarded { prev_channel_id, next_channel_id, @@ -754,7 +762,7 @@ async fn start_ldk() { Arc::clone(&keys_manager), Arc::clone(&logger), Arc::new(DefaultMessageRouter {}), - IgnoringMessageHandler {}, + Arc::clone(&channel_manager), IgnoringMessageHandler {}, )); let mut ephemeral_bytes = [0; 32]; diff --git a/src/sweep.rs b/src/sweep.rs index 01cea9d..87577df 100644 --- a/src/sweep.rs +++ b/src/sweep.rs @@ -109,8 +109,8 @@ pub(crate) async fn periodic_sweep( } let destination_address = bitcoind_client.get_new_address().await; let output_descriptors = &outputs.iter().map(|a| a).collect::>(); - let tx_feerate = - bitcoind_client.get_est_sat_per_1000_weight(ConfirmationTarget::Background); + let tx_feerate = bitcoind_client + .get_est_sat_per_1000_weight(ConfirmationTarget::ChannelCloseMinimum); // We set nLockTime to the current height to discourage fee sniping. // Occasionally randomly pick a nLockTime even further back, so -- 2.30.2