1
- //! Utilities for channelmanager.rs
1
+ //! Utilities to decode payment onions and do contextless validation of incoming payments.
2
2
//!
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.
4
5
5
6
use bitcoin:: hashes:: Hash ;
6
7
use bitcoin:: hashes:: sha256:: Hash as Sha256 ;
@@ -225,7 +226,9 @@ pub(super) fn create_recv_pending_htlc_info(
225
226
} )
226
227
}
227
228
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
+ ///
229
232
/// This does all the relevant context-free checks that LDK requires for payment relay or
230
233
/// acceptance. If the payment is to be received, and the amount matches the expected amount for
231
234
/// 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(
234
237
/// [`Event::PaymentClaimable`]: crate::events::Event::PaymentClaimable
235
238
pub fn peel_payment_onion < NS : Deref , L : Deref , T : secp256k1:: Verification > (
236
239
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 ,
238
241
) -> Result < PendingHTLCInfo , InboundOnionErr >
239
242
where
240
243
NS :: Target : NodeSigner ,
@@ -273,6 +276,10 @@ where
273
276
err_data : Vec :: new ( ) ,
274
277
} ) ;
275
278
}
279
+
280
+ // TODO: If this is potentially a phantom payment we should decode the phantom payment
281
+ // onion here and check it.
282
+
276
283
create_fwd_pending_htlc_info (
277
284
msg, next_hop_data, next_hop_hmac, new_packet_bytes, shared_secret,
278
285
Some ( next_packet_pubkey)
@@ -281,7 +288,7 @@ where
281
288
onion_utils:: Hop :: Receive ( received_data) => {
282
289
create_recv_pending_htlc_info (
283
290
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,
285
292
) ?
286
293
}
287
294
} )
@@ -477,7 +484,7 @@ mod tests {
477
484
let msg = make_update_add_msg ( amount_msat, cltv_expiry, payment_hash, onion) ;
478
485
let logger = test_utils:: TestLogger :: with_id ( "bob" . to_string ( ) ) ;
479
486
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 )
481
488
. map_err ( |e| e. msg ) . unwrap ( ) ;
482
489
483
490
let next_onion = match peeled. routing {
@@ -488,7 +495,7 @@ mod tests {
488
495
} ;
489
496
490
497
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 )
492
499
. map_err ( |e| e. msg ) . unwrap ( ) ;
493
500
494
501
match peeled2. routing {
0 commit comments