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
56use bitcoin:: hashes:: Hash ;
67use 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`] that contains information
230+ /// about the intended next-hop for the HTLC.
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
235238pub 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 >
239242where
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