Skip to content

Commit 7ef52c3

Browse files
committed
Allow users to accept skimmed fees in calling peel_payment_onion
LSP users who wish to use `peel_payment_onion` to understand if they'd accept an HTLC prior to receit should be able to check the skimmed fees just like they would for full payment receipt. Thus, we need to expose the fee-skimming acceptance bool to `peel_payment_onion`, which we do here, in addition to some doc cleanups.
1 parent 14c2fd1 commit 7ef52c3

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

lightning/src/ln/onion_payment.rs

+14-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
//! Utilities for channelmanager.rs
1+
//! Utilities to decode payment onions and do contextless validation of incoming payments.
22
//!
3-
//! Includes a public [`peel_payment_onion`] function for use by external projects or libraries.
3+
//! Primarily features [`peel_payment_onion`], which allows the decoding of an onion statelessly
4+
//! and can be used to predict whether we'd accept a payment.
45
56
use bitcoin::hashes::Hash;
67
use bitcoin::hashes::sha256::Hash as Sha256;
@@ -225,7 +226,9 @@ pub(super) fn create_recv_pending_htlc_info(
225226
})
226227
}
227228

228-
/// Peel one layer off an incoming onion, returning [`PendingHTLCInfo`] (either Forward or Receive).
229+
/// Peel one layer off an incoming onion, returning a [`PendingHTLCInfo`] which provides details on
230+
/// where the sender intended the HTLC to go.
231+
///
229232
/// This does all the relevant context-free checks that LDK requires for payment relay or
230233
/// acceptance. If the payment is to be received, and the amount matches the expected amount for
231234
/// a given invoice, this indicates the [`msgs::UpdateAddHTLC`], once fully committed in the
@@ -234,7 +237,7 @@ pub(super) fn create_recv_pending_htlc_info(
234237
/// [`Event::PaymentClaimable`]: crate::events::Event::PaymentClaimable
235238
pub fn peel_payment_onion<NS: Deref, L: Deref, T: secp256k1::Verification>(
236239
msg: &msgs::UpdateAddHTLC, node_signer: &NS, logger: &L, secp_ctx: &Secp256k1<T>,
237-
cur_height: u32, accept_mpp_keysend: bool,
240+
cur_height: u32, accept_mpp_keysend: bool, allow_skimmed_fees: bool,
238241
) -> Result<PendingHTLCInfo, InboundOnionErr>
239242
where
240243
NS::Target: NodeSigner,
@@ -273,6 +276,10 @@ where
273276
err_data: Vec::new(),
274277
});
275278
}
279+
280+
// TODO: If this is potentially a phantom payment we should decode the phantom payment
281+
// onion here and check it.
282+
276283
create_fwd_pending_htlc_info(
277284
msg, next_hop_data, next_hop_hmac, new_packet_bytes, shared_secret,
278285
Some(next_packet_pubkey)
@@ -281,7 +288,7 @@ where
281288
onion_utils::Hop::Receive(received_data) => {
282289
create_recv_pending_htlc_info(
283290
received_data, shared_secret, msg.payment_hash, msg.amount_msat, msg.cltv_expiry,
284-
None, false, msg.skimmed_fee_msat, cur_height, accept_mpp_keysend,
291+
None, allow_skimmed_fees, msg.skimmed_fee_msat, cur_height, accept_mpp_keysend,
285292
)?
286293
}
287294
})
@@ -477,7 +484,7 @@ mod tests {
477484
let msg = make_update_add_msg(amount_msat, cltv_expiry, payment_hash, onion);
478485
let logger = test_utils::TestLogger::with_id("bob".to_string());
479486

480-
let peeled = peel_payment_onion(&msg, &&bob, &&logger, &secp_ctx, cur_height, true)
487+
let peeled = peel_payment_onion(&msg, &&bob, &&logger, &secp_ctx, cur_height, true, false)
481488
.map_err(|e| e.msg).unwrap();
482489

483490
let next_onion = match peeled.routing {
@@ -488,7 +495,7 @@ mod tests {
488495
};
489496

490497
let msg2 = make_update_add_msg(amount_msat, cltv_expiry, payment_hash, next_onion);
491-
let peeled2 = peel_payment_onion(&msg2, &&charlie, &&logger, &secp_ctx, cur_height, true)
498+
let peeled2 = peel_payment_onion(&msg2, &&charlie, &&logger, &secp_ctx, cur_height, true, false)
492499
.map_err(|e| e.msg).unwrap();
493500

494501
match peeled2.routing {

0 commit comments

Comments
 (0)