+ onion_utils::Hop::Forward {
+ next_hop_data: msgs::InboundOnionPayload::BlindedForward {
+ short_channel_id, ref payment_relay, ref payment_constraints, ref features, ..
+ }, ..
+ } => {
+ let (amt_to_forward, outgoing_cltv_value) = match check_blinded_forward(
+ msg.amount_msat, msg.cltv_expiry, &payment_relay, &payment_constraints, &features
+ ) {
+ Ok((amt, cltv)) => (amt, cltv),
+ Err(()) => {
+ return_err!("Underflow calculating outbound amount or cltv value for blinded forward",
+ INVALID_ONION_BLINDING, &[0; 32]);
+ }
+ };
+ let next_packet_pubkey = onion_utils::next_hop_pubkey(&secp_ctx,
+ msg.onion_routing_packet.public_key.unwrap(), &shared_secret);
+ NextPacketDetails {
+ next_packet_pubkey, outgoing_scid: short_channel_id, outgoing_amt_msat: amt_to_forward,
+ outgoing_cltv_value
+ }
+ },