Skip to content

Commit 972afcb

Browse files
committed
Update to LDK 0.0.116
1 parent bcb01f6 commit 972afcb

File tree

10 files changed

+275
-101
lines changed

10 files changed

+275
-101
lines changed

Cargo.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ panic = 'abort' # Abort on panic
3232
default = []
3333

3434
[dependencies]
35-
lightning = { version = "0.0.115", features = ["max_level_trace", "std"] }
36-
lightning-invoice = { version = "0.23" }
37-
lightning-net-tokio = { version = "0.0.115" }
38-
lightning-persister = { version = "0.0.115" }
39-
lightning-background-processor = { version = "0.0.115", features = ["futures"] }
40-
lightning-rapid-gossip-sync = { version = "0.0.115" }
41-
lightning-transaction-sync = { version = "0.0.115", features = ["esplora-async-https"] }
35+
lightning = { version = "0.0.116", features = ["max_level_trace", "std"] }
36+
lightning-invoice = { version = "0.24.0" }
37+
lightning-net-tokio = { version = "0.0.116" }
38+
lightning-persister = { version = "0.0.116" }
39+
lightning-background-processor = { version = "0.0.116", features = ["futures"] }
40+
lightning-rapid-gossip-sync = { version = "0.0.116" }
41+
lightning-transaction-sync = { version = "0.0.116", features = ["esplora-async-https"] }
4242

4343
#lightning = { git = "https://github.com/lightningdevkit/rust-lightning", branch="main", features = ["max_level_trace", "std"] }
4444
#lightning-invoice = { git = "https://github.com/lightningdevkit/rust-lightning", branch="main" }

bindings/ldk_node.udl

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,23 +62,23 @@ interface LDKNode {
6262
[Throws=NodeError]
6363
void close_channel([ByRef]ChannelId channel_id, PublicKey counterparty_node_id);
6464
[Throws=NodeError]
65-
void update_channel_config([ByRef]ChannelId channel_id, PublicKey counterparty_node_id, [ByRef]ChannelConfig channel_config);
65+
void update_channel_config([ByRef]ChannelId channel_id, PublicKey counterparty_node_id, ChannelConfig channel_config);
6666
[Throws=NodeError]
6767
void sync_wallets();
6868
[Throws=NodeError]
69-
PaymentHash send_payment([ByRef]Invoice invoice);
69+
PaymentHash send_payment([ByRef]Bolt11Invoice invoice);
7070
[Throws=NodeError]
71-
PaymentHash send_payment_using_amount([ByRef]Invoice invoice, u64 amount_msat);
71+
PaymentHash send_payment_using_amount([ByRef]Bolt11Invoice invoice, u64 amount_msat);
7272
[Throws=NodeError]
7373
PaymentHash send_spontaneous_payment(u64 amount_msat, PublicKey node_id);
7474
[Throws=NodeError]
75-
void send_payment_probe([ByRef]Invoice invoice);
75+
void send_payment_probe([ByRef]Bolt11Invoice invoice);
7676
[Throws=NodeError]
7777
void send_spontaneous_payment_probe(u64 amount_msat, PublicKey node_id);
7878
[Throws=NodeError]
79-
Invoice receive_payment(u64 amount_msat, [ByRef]string description, u32 expiry_secs);
79+
Bolt11Invoice receive_payment(u64 amount_msat, [ByRef]string description, u32 expiry_secs);
8080
[Throws=NodeError]
81-
Invoice receive_variable_amount_payment([ByRef]string description, u32 expiry_secs);
81+
Bolt11Invoice receive_variable_amount_payment([ByRef]string description, u32 expiry_secs);
8282
PaymentDetails? payment([ByRef]PaymentHash payment_hash);
8383
[Throws=NodeError]
8484
boolean remove_payment([ByRef]PaymentHash payment_hash);
@@ -204,12 +204,20 @@ dictionary PeerDetails {
204204
boolean is_connected;
205205
};
206206

207-
dictionary ChannelConfig {
208-
u32 forwarding_fee_proportional_millionths;
209-
u32 forwarding_fee_base_msat;
210-
u16 cltv_expiry_delta;
211-
u64 max_dust_htlc_exposure_msat;
212-
u64 force_close_avoidance_max_fee_satoshis;
207+
interface ChannelConfig {
208+
constructor();
209+
u32 forwarding_fee_proportional_millionths();
210+
void set_forwarding_fee_proportional_millionths(u32 value);
211+
u32 forwarding_fee_base_msat();
212+
void set_forwarding_fee_base_msat(u32 fee_msat);
213+
u16 cltv_expiry_delta();
214+
void set_cltv_expiry_delta(u16 value);
215+
u64 force_close_avoidance_max_fee_satoshis();
216+
void set_force_close_avoidance_max_fee_satoshis(u64 value_sat);
217+
boolean accept_underpaying_htlcs();
218+
void set_accept_underpaying_htlcs(boolean value);
219+
void set_max_dust_htlc_exposure_from_fixed_limit(u64 limit_msat);
220+
void set_max_dust_htlc_exposure_from_fee_rate_multiplier(u64 multiplier);
213221
};
214222

215223
enum LogLevel {
@@ -234,7 +242,7 @@ typedef string PublicKey;
234242
typedef string Address;
235243

236244
[Custom]
237-
typedef string Invoice;
245+
typedef string Bolt11Invoice;
238246

239247
[Custom]
240248
typedef string PaymentHash;

src/builder.rs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ use crate::logger::{log_error, FilesystemLogger, Logger};
88
use crate::payment_store::PaymentStore;
99
use crate::peer_store::PeerStore;
1010
use crate::types::{
11-
ChainMonitor, ChannelManager, GossipSync, KeysManager, NetAddress, NetworkGraph,
12-
OnionMessenger, PeerManager,
11+
ChainMonitor, ChannelManager, FakeMessageRouter, GossipSync, KeysManager, NetAddress,
12+
NetworkGraph, OnionMessenger, PeerManager,
1313
};
1414
use crate::wallet::Wallet;
1515
use crate::LogLevel;
@@ -18,13 +18,15 @@ use crate::{
1818
WALLET_KEYS_SEED_LEN,
1919
};
2020

21-
use lightning::chain::keysinterface::EntropySource;
2221
use lightning::chain::{chainmonitor, BestBlock, Watch};
2322
use lightning::ln::channelmanager::{self, ChainParameters, ChannelManagerReadArgs};
2423
use lightning::ln::msgs::RoutingMessageHandler;
2524
use lightning::ln::peer_handler::{IgnoringMessageHandler, MessageHandler};
2625
use lightning::routing::router::DefaultRouter;
27-
use lightning::routing::scoring::{ProbabilisticScorer, ProbabilisticScoringParameters};
26+
use lightning::routing::scoring::{
27+
ProbabilisticScorer, ProbabilisticScoringDecayParameters, ProbabilisticScoringFeeParameters,
28+
};
29+
use lightning::sign::EntropySource;
2830

2931
use lightning::util::config::UserConfig;
3032
use lightning::util::ser::ReadableArgs;
@@ -505,7 +507,7 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
505507
Ok(scorer) => Arc::new(Mutex::new(scorer)),
506508
Err(e) => {
507509
if e.kind() == std::io::ErrorKind::NotFound {
508-
let params = ProbabilisticScoringParameters::default();
510+
let params = ProbabilisticScoringDecayParameters::default();
509511
Arc::new(Mutex::new(ProbabilisticScorer::new(
510512
params,
511513
Arc::clone(&network_graph),
@@ -517,11 +519,13 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
517519
}
518520
};
519521

522+
let scoring_fee_params = ProbabilisticScoringFeeParameters::default();
520523
let router = Arc::new(DefaultRouter::new(
521524
Arc::clone(&network_graph),
522525
Arc::clone(&logger),
523526
keys_manager.get_secure_random_bytes(),
524527
Arc::clone(&scorer),
528+
scoring_fee_params,
525529
));
526530

527531
// Read ChannelMonitor state from store
@@ -594,6 +598,7 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
594598
Arc::clone(&keys_manager),
595599
user_config,
596600
chain_params,
601+
cur_time.as_secs() as u32,
597602
)
598603
}
599604
};
@@ -611,14 +616,12 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
611616
Arc::clone(&keys_manager),
612617
Arc::clone(&keys_manager),
613618
Arc::clone(&logger),
619+
Arc::new(FakeMessageRouter {}),
620+
IgnoringMessageHandler {},
614621
IgnoringMessageHandler {},
615622
));
616623
let ephemeral_bytes: [u8; 32] = keys_manager.get_secure_random_bytes();
617624

618-
let cur_time = SystemTime::now()
619-
.duration_since(SystemTime::UNIX_EPOCH)
620-
.map_err(|_| BuildError::InvalidSystemTime)?;
621-
622625
// Initialize the GossipSource
623626
// Use the configured gossip source, if the user set one, otherwise default to P2PNetwork.
624627
let gossip_source_config = gossip_source_config.unwrap_or(&GossipSourceConfig::P2PNetwork);
@@ -658,12 +661,14 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
658661
route_handler: Arc::clone(&p2p_gossip_sync)
659662
as Arc<dyn RoutingMessageHandler + Sync + Send>,
660663
onion_message_handler: onion_messenger,
664+
custom_message_handler: IgnoringMessageHandler {},
661665
},
662666
GossipSync::Rapid(_) => MessageHandler {
663667
chan_handler: Arc::clone(&channel_manager),
664668
route_handler: Arc::new(IgnoringMessageHandler {})
665669
as Arc<dyn RoutingMessageHandler + Sync + Send>,
666670
onion_message_handler: onion_messenger,
671+
custom_message_handler: IgnoringMessageHandler {},
667672
},
668673
GossipSync::None => {
669674
unreachable!("We must always have a gossip sync!");
@@ -675,7 +680,6 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
675680
cur_time.as_secs().try_into().map_err(|_| BuildError::InvalidSystemTime)?,
676681
&ephemeral_bytes,
677682
Arc::clone(&logger),
678-
IgnoringMessageHandler {},
679683
Arc::clone(&keys_manager),
680684
));
681685

src/event.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use lightning::util::errors::APIError;
2020
use lightning::util::ser::{Readable, ReadableArgs, Writeable, Writer};
2121

2222
use bitcoin::secp256k1::{PublicKey, Secp256k1};
23-
use bitcoin::OutPoint;
23+
use bitcoin::{LockTime, OutPoint, PackedLockTime};
2424
use rand::{thread_rng, Rng};
2525
use std::collections::VecDeque;
2626
use std::ops::Deref;
@@ -270,11 +270,16 @@ where
270270
// channel.
271271
let confirmation_target = ConfirmationTarget::Normal;
272272

273+
// We set nLockTime to the current height to discourage fee sniping.
274+
let cur_height = self.channel_manager.current_best_block().height();
275+
let locktime = LockTime::from_height(cur_height).unwrap_or(LockTime::ZERO);
276+
273277
// Sign the final funding transaction and broadcast it.
274278
match self.wallet.create_funding_transaction(
275279
output_script,
276280
channel_value_satoshis,
277281
confirmation_target,
282+
locktime,
278283
) {
279284
Ok(final_tx) => {
280285
// Give the funding transaction back to LDK for opening the channel.
@@ -329,6 +334,7 @@ where
329334
via_user_channel_id: _,
330335
claim_deadline: _,
331336
onion_fields: _,
337+
counterparty_skimmed_fee_msat: _,
332338
} => {
333339
if let Some(info) = self.payment_store.get(&payment_hash) {
334340
if info.status == PaymentStatus::Succeeded {
@@ -556,15 +562,22 @@ where
556562
let output_descriptors = &outputs.iter().collect::<Vec<_>>();
557563
let tx_feerate =
558564
self.wallet.get_est_sat_per_1000_weight(ConfirmationTarget::Normal);
565+
566+
// We set nLockTime to the current height to discourage fee sniping.
567+
let cur_height = self.channel_manager.current_best_block().height();
568+
let locktime: PackedLockTime =
569+
LockTime::from_height(cur_height).map_or(PackedLockTime::ZERO, |l| l.into());
559570
let res = self.keys_manager.spend_spendable_outputs(
560571
output_descriptors,
561572
Vec::new(),
562573
destination_address.script_pubkey(),
563574
tx_feerate,
575+
Some(locktime),
564576
&Secp256k1::new(),
565577
);
578+
566579
match res {
567-
Ok(Some(spending_tx)) => self.wallet.broadcast_transaction(&spending_tx),
580+
Ok(Some(spending_tx)) => self.wallet.broadcast_transactions(&[&spending_tx]),
568581
Ok(None) => {
569582
log_debug!(self.logger, "Omitted spending static outputs: {:?}", outputs);
570583
}
@@ -747,6 +760,7 @@ where
747760
}
748761
LdkEvent::DiscardFunding { .. } => {}
749762
LdkEvent::HTLCIntercepted { .. } => {}
763+
LdkEvent::BumpTransaction(_) => {}
750764
}
751765
}
752766
}

src/io/utils.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ use crate::peer_store::PeerStore;
66
use crate::{Error, EventQueue, PaymentDetails};
77

88
use lightning::chain::channelmonitor::ChannelMonitor;
9-
use lightning::chain::keysinterface::{EntropySource, SignerProvider};
109
use lightning::routing::gossip::NetworkGraph;
11-
use lightning::routing::scoring::{ProbabilisticScorer, ProbabilisticScoringParameters};
10+
use lightning::routing::scoring::{ProbabilisticScorer, ProbabilisticScoringDecayParameters};
11+
use lightning::sign::{EntropySource, SignerProvider};
1212
use lightning::util::logger::Logger;
1313
use lightning::util::ser::{Readable, ReadableArgs, Writeable};
1414

@@ -161,7 +161,7 @@ pub(crate) fn read_scorer<
161161
where
162162
L::Target: Logger,
163163
{
164-
let params = ProbabilisticScoringParameters::default();
164+
let params = ProbabilisticScoringDecayParameters::default();
165165
let mut reader = kv_store.read(SCORER_PERSISTENCE_NAMESPACE, SCORER_PERSISTENCE_KEY)?;
166166
let args = (params, network_graph, logger.clone());
167167
ProbabilisticScorer::read(&mut reader, args).map_err(|e| {

0 commit comments

Comments
 (0)