Skip to content

Commit ed6c529

Browse files
authored
Merge pull request #105 from tnull/2023-05-upgrade-to-LDK-0.0.116
2 parents 4709221 + 972afcb commit ed6c529

File tree

10 files changed

+275
-97
lines changed

10 files changed

+275
-97
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
void 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 & 6 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;
@@ -486,7 +488,7 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
486488
Ok(scorer) => Arc::new(Mutex::new(scorer)),
487489
Err(e) => {
488490
if e.kind() == std::io::ErrorKind::NotFound {
489-
let params = ProbabilisticScoringParameters::default();
491+
let params = ProbabilisticScoringDecayParameters::default();
490492
Arc::new(Mutex::new(ProbabilisticScorer::new(
491493
params,
492494
Arc::clone(&network_graph),
@@ -498,11 +500,13 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
498500
}
499501
};
500502

503+
let scoring_fee_params = ProbabilisticScoringFeeParameters::default();
501504
let router = Arc::new(DefaultRouter::new(
502505
Arc::clone(&network_graph),
503506
Arc::clone(&logger),
504507
keys_manager.get_secure_random_bytes(),
505508
Arc::clone(&scorer),
509+
scoring_fee_params,
506510
));
507511

508512
// Read ChannelMonitor state from store
@@ -575,6 +579,7 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
575579
Arc::clone(&keys_manager),
576580
user_config,
577581
chain_params,
582+
cur_time.as_secs() as u32,
578583
)
579584
}
580585
};
@@ -592,6 +597,8 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
592597
Arc::clone(&keys_manager),
593598
Arc::clone(&keys_manager),
594599
Arc::clone(&logger),
600+
Arc::new(FakeMessageRouter {}),
601+
IgnoringMessageHandler {},
595602
IgnoringMessageHandler {},
596603
));
597604
let ephemeral_bytes: [u8; 32] = keys_manager.get_secure_random_bytes();
@@ -638,12 +645,14 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
638645
route_handler: Arc::clone(&p2p_gossip_sync)
639646
as Arc<dyn RoutingMessageHandler + Sync + Send>,
640647
onion_message_handler: onion_messenger,
648+
custom_message_handler: IgnoringMessageHandler {},
641649
},
642650
GossipSync::Rapid(_) => MessageHandler {
643651
chan_handler: Arc::clone(&channel_manager),
644652
route_handler: Arc::new(IgnoringMessageHandler {})
645653
as Arc<dyn RoutingMessageHandler + Sync + Send>,
646654
onion_message_handler: onion_messenger,
655+
custom_message_handler: IgnoringMessageHandler {},
647656
},
648657
GossipSync::None => {
649658
unreachable!("We must always have a gossip sync!");
@@ -663,7 +672,6 @@ fn build_with_store_internal<K: KVStore + Sync + Send + 'static>(
663672
})?,
664673
&ephemeral_bytes,
665674
Arc::clone(&logger),
666-
IgnoringMessageHandler {},
667675
Arc::clone(&keys_manager),
668676
));
669677

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)