Skip to content

Commit 18e0c72

Browse files
fix: rebase payer proof branch onto current main
Adjust liquidity, payment forwarding, splicing, and binding surfaces to stay compatible with the payer proof rust-lightning fork on top of the current upstream mainline. AI-assisted-by: Codex
1 parent b17921b commit 18e0c72

File tree

7 files changed

+57
-65
lines changed

7 files changed

+57
-65
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ check-cfg = [
125125
"cfg(cln_test)",
126126
"cfg(lnd_test)",
127127
"cfg(cycle_tests)",
128+
"cfg(lsps1_service)",
128129
]
129130

130131
[[bench]]

bindings/ldk_node.udl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,6 @@ dictionary LSPS1ChannelInfo {
303303
[Remote]
304304
enum LSPS1PaymentState {
305305
"ExpectPayment",
306-
"Hold",
307306
"Paid",
308307
"Refunded",
309308
};

src/builder.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1817,6 +1817,11 @@ fn build_with_store_internal(
18171817
Arc::clone(&wallet),
18181818
Arc::clone(&channel_manager),
18191819
Arc::clone(&keys_manager),
1820+
Arc::clone(&chain_source),
1821+
ChainParameters {
1822+
network: config.network.into(),
1823+
best_block: channel_manager.current_best_block(),
1824+
},
18201825
Arc::clone(&tx_broadcaster),
18211826
Arc::clone(&kv_store),
18221827
Arc::clone(&config),

src/event.rs

Lines changed: 35 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1379,8 +1379,12 @@ where
13791379
}
13801380
},
13811381
LdkEvent::PaymentForwarded {
1382-
prev_htlcs,
1383-
next_htlcs,
1382+
prev_channel_id,
1383+
next_channel_id,
1384+
prev_user_channel_id,
1385+
next_user_channel_id,
1386+
prev_node_id,
1387+
next_node_id,
13841388
total_fee_earned_msat,
13851389
skimmed_fee_msat,
13861390
claim_from_onchain_tx,
@@ -1391,10 +1395,11 @@ where
13911395
let nodes = read_only_network_graph.nodes();
13921396
let channels = self.channel_manager.list_channels();
13931397

1394-
let node_str = |channel_id: &ChannelId| {
1395-
channels
1396-
.iter()
1397-
.find(|c| c.channel_id == *channel_id)
1398+
let node_str = |channel_id: &Option<ChannelId>| {
1399+
channel_id
1400+
.and_then(|channel_id| {
1401+
channels.iter().find(|c| c.channel_id == channel_id)
1402+
})
13981403
.and_then(|channel| {
13991404
nodes.get(&NodeId::from_pubkey(&channel.counterparty.node_id))
14001405
})
@@ -1406,74 +1411,58 @@ where
14061411
})
14071412
})
14081413
};
1409-
let from_prev_str: String = prev_htlcs
1410-
.iter()
1411-
.map(|htlc| {
1412-
format!("with {} on {}", node_str(&htlc.channel_id), htlc.channel_id)
1413-
})
1414-
.collect::<Vec<_>>()
1415-
.join(", ");
1416-
1417-
let to_next_str: String = next_htlcs
1418-
.iter()
1419-
.map(|htlc| {
1420-
format!("with {} on {}", node_str(&htlc.channel_id), htlc.channel_id)
1421-
})
1422-
.collect::<Vec<_>>()
1423-
.join(", ");
1414+
let channel_str = |channel_id: &Option<ChannelId>| {
1415+
channel_id
1416+
.map(|channel_id| format!(" with channel {}", channel_id))
1417+
.unwrap_or_default()
1418+
};
1419+
let from_prev_str = format!(
1420+
" from {}{}",
1421+
node_str(&prev_channel_id),
1422+
channel_str(&prev_channel_id)
1423+
);
1424+
let to_next_str = format!(
1425+
" to {}{}",
1426+
node_str(&next_channel_id),
1427+
channel_str(&next_channel_id)
1428+
);
14241429

14251430
let fee_earned = total_fee_earned_msat.unwrap_or(0);
14261431
if claim_from_onchain_tx {
14271432
log_info!(
14281433
self.logger,
1429-
"Forwarded payment with {} inbound HTLC(s) ({}) and {} outbound HTLC(s) ({}) of {}msat, earning {}msat in fees from claiming onchain.",
1430-
prev_htlcs.len(),
1434+
"Forwarded payment{}{} of {}msat, earning {}msat in fees from claiming onchain.",
14311435
from_prev_str,
1432-
next_htlcs.len(),
14331436
to_next_str,
14341437
outbound_amount_forwarded_msat.unwrap_or(0),
14351438
fee_earned,
14361439
);
14371440
} else {
14381441
log_info!(
14391442
self.logger,
1440-
"Forwarded payment with {} inbound HTLC(s) ({}) and {} outbound HTLC(s) ({}) of {}msat, earning {}msat in fees.",
1441-
prev_htlcs.len(),
1443+
"Forwarded payment{}{} of {}msat, earning {}msat in fees.",
14421444
from_prev_str,
1443-
next_htlcs.len(),
14441445
to_next_str,
14451446
outbound_amount_forwarded_msat.unwrap_or(0),
14461447
fee_earned,
14471448
);
14481449
}
14491450
}
14501451

1451-
// We only allow multiple HTLCs in/out for trampoline forwards, which have not yet
1452-
// been fully implemented in LDK, so we do not lose any information by just
1453-
// reporting the first HTLC in each vec.
1454-
debug_assert_eq!(prev_htlcs.len(), 1, "unexpected number of prev_htlcs");
1455-
debug_assert_eq!(next_htlcs.len(), 1, "unexpected number of next_htlcs");
1456-
let prev_htlc = prev_htlcs
1457-
.first()
1458-
.expect("we expect at least one prev_htlc for PaymentForwarded");
1459-
let next_htlc = next_htlcs
1460-
.first()
1461-
.expect("we expect at least one next_htlc for PaymentForwarded");
1462-
14631452
if let Some(liquidity_source) = self.liquidity_source.as_ref() {
14641453
let skimmed_fee_msat = skimmed_fee_msat.unwrap_or(0);
14651454
liquidity_source
1466-
.handle_payment_forwarded(Some(next_htlc.channel_id), skimmed_fee_msat)
1455+
.handle_payment_forwarded(next_channel_id, skimmed_fee_msat)
14671456
.await;
14681457
}
14691458

14701459
let event = Event::PaymentForwarded {
1471-
prev_channel_id: prev_htlc.channel_id,
1472-
next_channel_id: next_htlc.channel_id,
1473-
prev_user_channel_id: prev_htlc.user_channel_id.map(UserChannelId),
1474-
next_user_channel_id: next_htlc.user_channel_id.map(UserChannelId),
1475-
prev_node_id: prev_htlc.node_id,
1476-
next_node_id: next_htlc.node_id,
1460+
prev_channel_id: prev_channel_id.expect("prev_channel_id expected for events generated by LDK versions greater than 0.0.107."),
1461+
next_channel_id: next_channel_id.expect("next_channel_id expected for events generated by LDK versions greater than 0.0.107."),
1462+
prev_user_channel_id: prev_user_channel_id.map(UserChannelId),
1463+
next_user_channel_id: next_user_channel_id.map(UserChannelId),
1464+
prev_node_id,
1465+
next_node_id,
14771466
total_fee_earned_msat,
14781467
skimmed_fee_msat,
14791468
claim_from_onchain_tx,

src/lib.rs

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,11 @@ pub use balance::{BalanceDetails, LightningBalance, PendingSweepBalance};
118118
pub use bip39;
119119
pub use bitcoin;
120120
use bitcoin::secp256k1::PublicKey;
121+
#[cfg(not(feature = "uniffi"))]
122+
use bitcoin::Address;
123+
use bitcoin::Amount;
121124
#[cfg(feature = "uniffi")]
122125
pub use bitcoin::FeeRate;
123-
#[cfg(not(feature = "uniffi"))]
124-
use bitcoin::FeeRate;
125-
use bitcoin::{Address, Amount};
126126
#[cfg(feature = "uniffi")]
127127
pub use builder::ArcedNodeBuilder as Builder;
128128
pub use builder::BuildError;
@@ -1413,7 +1413,6 @@ impl Node {
14131413
{
14141414
let min_feerate =
14151415
self.fee_estimator.estimate_fee_rate(ConfirmationTarget::ChannelFunding);
1416-
let max_feerate = FeeRate::from_sat_per_kwu(min_feerate.to_sat_per_kwu() * 3 / 2);
14171416

14181417
let splice_amount_sats = match splice_amount_sats {
14191418
FundingAmount::Exact { amount_sats } => amount_sats,
@@ -1473,12 +1472,7 @@ impl Node {
14731472

14741473
let funding_template = self
14751474
.channel_manager
1476-
.splice_channel(
1477-
&channel_details.channel_id,
1478-
&counterparty_node_id,
1479-
min_feerate,
1480-
max_feerate,
1481-
)
1475+
.splice_channel(&channel_details.channel_id, &counterparty_node_id, min_feerate)
14821476
.map_err(|e| {
14831477
log_error!(self.logger, "Failed to splice channel: {:?}", e);
14841478
Error::ChannelSplicingFailed
@@ -1585,16 +1579,10 @@ impl Node {
15851579

15861580
let min_feerate =
15871581
self.fee_estimator.estimate_fee_rate(ConfirmationTarget::ChannelFunding);
1588-
let max_feerate = FeeRate::from_sat_per_kwu(min_feerate.to_sat_per_kwu() * 3 / 2);
15891582

15901583
let funding_template = self
15911584
.channel_manager
1592-
.splice_channel(
1593-
&channel_details.channel_id,
1594-
&counterparty_node_id,
1595-
min_feerate,
1596-
max_feerate,
1597-
)
1585+
.splice_channel(&channel_details.channel_id, &counterparty_node_id, min_feerate)
15981586
.map_err(|e| {
15991587
log_error!(self.logger, "Failed to splice channel: {:?}", e);
16001588
Error::ChannelSplicingFailed

src/liquidity.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use bitcoin::secp256k1::{PublicKey, Secp256k1};
1616
use bitcoin::Transaction;
1717
use chrono::Utc;
1818
use lightning::events::HTLCHandlingFailureType;
19-
use lightning::ln::channelmanager::{InterceptId, MIN_FINAL_CLTV_EXPIRY_DELTA};
19+
use lightning::ln::channelmanager::{ChainParameters, InterceptId, MIN_FINAL_CLTV_EXPIRY_DELTA};
2020
use lightning::ln::msgs::SocketAddress;
2121
use lightning::ln::types::ChannelId;
2222
use lightning::routing::router::{RouteHint, RouteHintHop};
@@ -39,6 +39,7 @@ use lightning_types::payment::PaymentHash;
3939
use tokio::sync::oneshot;
4040

4141
use crate::builder::BuildError;
42+
use crate::chain::ChainSource;
4243
use crate::connection::ConnectionManager;
4344
use crate::logger::{log_debug, log_error, log_info, LdkLogger, Logger};
4445
use crate::runtime::Runtime;
@@ -154,6 +155,8 @@ where
154155
wallet: Arc<Wallet>,
155156
channel_manager: Arc<ChannelManager>,
156157
keys_manager: Arc<KeysManager>,
158+
chain_source: Arc<ChainSource>,
159+
chain_params: ChainParameters,
157160
tx_broadcaster: Arc<Broadcaster>,
158161
kv_store: Arc<DynStore>,
159162
config: Arc<Config>,
@@ -166,6 +169,7 @@ where
166169
{
167170
pub(crate) fn new(
168171
wallet: Arc<Wallet>, channel_manager: Arc<ChannelManager>, keys_manager: Arc<KeysManager>,
172+
chain_source: Arc<ChainSource>, chain_params: ChainParameters,
169173
tx_broadcaster: Arc<Broadcaster>, kv_store: Arc<DynStore>, config: Arc<Config>, logger: L,
170174
) -> Self {
171175
let lsps1_client = None;
@@ -178,6 +182,8 @@ where
178182
wallet,
179183
channel_manager,
180184
keys_manager,
185+
chain_source,
186+
chain_params,
181187
tx_broadcaster,
182188
kv_store,
183189
config,
@@ -236,6 +242,7 @@ where
236242
let lsps5_service_config = None;
237243
let advertise_service = s.service_config.advertise_service;
238244
LiquidityServiceConfig {
245+
#[cfg(lsps1_service)]
239246
lsps1_service_config: None,
240247
lsps2_service_config,
241248
lsps5_service_config,
@@ -257,6 +264,8 @@ where
257264
Arc::clone(&self.keys_manager),
258265
Arc::clone(&self.keys_manager),
259266
Arc::clone(&self.channel_manager),
267+
Some(Arc::clone(&self.chain_source)),
268+
Some(self.chain_params),
260269
Arc::clone(&self.kv_store),
261270
Arc::clone(&self.tx_broadcaster),
262271
liquidity_service_config,

src/types.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ pub(crate) type LiquidityManager = lightning_liquidity::LiquidityManager<
232232
Arc<KeysManager>,
233233
Arc<KeysManager>,
234234
Arc<ChannelManager>,
235+
Arc<ChainSource>,
235236
Arc<DynStore>,
236237
DefaultTimeProvider,
237238
Arc<Broadcaster>,

0 commit comments

Comments
 (0)