Skip to content

Commit 22468a3

Browse files
committed
Parse inbound TrampolineEntrypoint payload
1 parent dbd9400 commit 22468a3

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

lightning/src/ln/msgs.rs

+19
Original file line numberDiff line numberDiff line change
@@ -1766,6 +1766,13 @@ mod fuzzy_internal_msgs {
17661766
amt_to_forward: u64,
17671767
outgoing_cltv_value: u32,
17681768
},
1769+
#[allow(unused)]
1770+
TrampolineEntrypoint {
1771+
amt_to_forward: u64,
1772+
outgoing_cltv_value: u32,
1773+
multipath_trampoline_data: Option<FinalOnionHopData>,
1774+
trampoline_packet: TrampolineOnionPacket,
1775+
},
17691776
Receive {
17701777
payment_data: Option<FinalOnionHopData>,
17711778
payment_metadata: Option<Vec<u8>>,
@@ -2848,6 +2855,7 @@ impl<NS: Deref> ReadableArgs<(Option<PublicKey>, NS)> for InboundOnionPayload wh
28482855
let mut payment_metadata: Option<WithoutLength<Vec<u8>>> = None;
28492856
let mut total_msat = None;
28502857
let mut keysend_preimage: Option<PaymentPreimage> = None;
2858+
let mut trampoline_onion_packet: Option<TrampolineOnionPacket> = None;
28512859
let mut custom_tlvs = Vec::new();
28522860

28532861
let tlv_len = BigSize::read(r)?;
@@ -2861,6 +2869,7 @@ impl<NS: Deref> ReadableArgs<(Option<PublicKey>, NS)> for InboundOnionPayload wh
28612869
(12, intro_node_blinding_point, option),
28622870
(16, payment_metadata, option),
28632871
(18, total_msat, (option, encoding: (u64, HighZeroBytesDroppedBigSize))),
2872+
(20, trampoline_onion_packet, option),
28642873
// See https://github.com/lightning/blips/blob/master/blip-0003.md
28652874
(5482373484, keysend_preimage, option)
28662875
}, |msg_type: u64, msg_reader: &mut FixedLengthReader<_>| -> Result<bool, DecodeError> {
@@ -2937,6 +2946,16 @@ impl<NS: Deref> ReadableArgs<(Option<PublicKey>, NS)> for InboundOnionPayload wh
29372946
amt_to_forward: amt.ok_or(DecodeError::InvalidValue)?,
29382947
outgoing_cltv_value: cltv_value.ok_or(DecodeError::InvalidValue)?,
29392948
})
2949+
} else if let Some(trampoline_onion_packet) = trampoline_onion_packet {
2950+
if payment_metadata.is_some() || encrypted_tlvs_opt.is_some() ||
2951+
total_msat.is_some()
2952+
{ return Err(DecodeError::InvalidValue) }
2953+
Ok(Self::TrampolineEntrypoint {
2954+
amt_to_forward: amt.ok_or(DecodeError::InvalidValue)?,
2955+
outgoing_cltv_value: cltv_value.ok_or(DecodeError::InvalidValue)?,
2956+
multipath_trampoline_data: payment_data,
2957+
trampoline_packet: trampoline_onion_packet,
2958+
})
29402959
} else {
29412960
if encrypted_tlvs_opt.is_some() || total_msat.is_some() {
29422961
return Err(DecodeError::InvalidValue)

lightning/src/ln/onion_payment.rs

+14
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ pub(super) fn create_fwd_pending_htlc_info(
9999
(short_channel_id, amt_to_forward, outgoing_cltv_value, intro_node_blinding_point,
100100
next_blinding_override)
101101
},
102+
msgs::InboundOnionPayload::TrampolineEntrypoint {..} => {
103+
todo!()
104+
},
102105
msgs::InboundOnionPayload::Receive { .. } | msgs::InboundOnionPayload::BlindedReceive { .. } =>
103106
return Err(InboundHTLCErr {
104107
msg: "Final Node OnionHopData provided for us as an intermediary node",
@@ -165,6 +168,9 @@ pub(super) fn create_recv_pending_htlc_info(
165168
sender_intended_htlc_amt_msat, cltv_expiry_height, None, Some(payment_context),
166169
intro_node_blinding_point.is_none(), true)
167170
}
171+
msgs::InboundOnionPayload::TrampolineEntrypoint { .. } => {
172+
todo!()
173+
},
168174
msgs::InboundOnionPayload::Forward { .. } => {
169175
return Err(InboundHTLCErr {
170176
err_code: 0x4000|22,
@@ -469,6 +475,14 @@ where
469475
outgoing_cltv_value
470476
}
471477
},
478+
onion_utils::Hop::Forward {
479+
next_hop_data: msgs::InboundOnionPayload::TrampolineEntrypoint { .. }, ..
480+
} => {
481+
return_err!("TrampolineEntrypoint data provided in intermediary node", 0x4000 | 22, &[0; 0]);
482+
},
483+
onion_utils::Hop::Receive(msgs::InboundOnionPayload::TrampolineEntrypoint { .. }) => {
484+
todo!()
485+
}
472486
onion_utils::Hop::Receive { .. } => return Ok((next_hop, shared_secret, None)),
473487
onion_utils::Hop::Forward { next_hop_data: msgs::InboundOnionPayload::Receive { .. }, .. } |
474488
onion_utils::Hop::Forward { next_hop_data: msgs::InboundOnionPayload::BlindedReceive { .. }, .. } =>

0 commit comments

Comments
 (0)