Skip to content

Commit f01dc4a

Browse files
committed
Parse inbound TrampolineEntrypoint payload
Check inbound onion payloads for the presence of an inner onion, which we will later also need to decrypt to handle Trampoline payments.
1 parent a39c03d commit f01dc4a

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

lightning/src/ln/msgs.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1811,6 +1811,13 @@ mod fuzzy_internal_msgs {
18111811
pub outgoing_cltv_value: u32,
18121812
}
18131813

1814+
pub struct InboundTrampolineEntrypointPayload {
1815+
pub amt_to_forward: u64,
1816+
pub outgoing_cltv_value: u32,
1817+
pub multipath_trampoline_data: Option<FinalOnionHopData>,
1818+
pub trampoline_packet: TrampolineOnionPacket,
1819+
}
1820+
18141821
pub struct InboundOnionReceivePayload {
18151822
pub payment_data: Option<FinalOnionHopData>,
18161823
pub payment_metadata: Option<Vec<u8>>,
@@ -1842,6 +1849,8 @@ mod fuzzy_internal_msgs {
18421849

18431850
pub enum InboundOnionPayload {
18441851
Forward(InboundOnionForwardPayload),
1852+
#[allow(unused)]
1853+
TrampolineEntrypoint(InboundTrampolineEntrypointPayload),
18451854
Receive(InboundOnionReceivePayload),
18461855
BlindedForward(InboundOnionBlindedForwardPayload),
18471856
BlindedReceive(InboundOnionBlindedReceivePayload),
@@ -2908,6 +2917,7 @@ impl<NS: Deref> ReadableArgs<(Option<PublicKey>, NS)> for InboundOnionPayload wh
29082917
let mut payment_metadata: Option<WithoutLength<Vec<u8>>> = None;
29092918
let mut total_msat = None;
29102919
let mut keysend_preimage: Option<PaymentPreimage> = None;
2920+
let mut trampoline_onion_packet: Option<TrampolineOnionPacket> = None;
29112921
let mut invoice_request: Option<InvoiceRequest> = None;
29122922
let mut custom_tlvs = Vec::new();
29132923

@@ -2922,6 +2932,7 @@ impl<NS: Deref> ReadableArgs<(Option<PublicKey>, NS)> for InboundOnionPayload wh
29222932
(12, intro_node_blinding_point, option),
29232933
(16, payment_metadata, option),
29242934
(18, total_msat, (option, encoding: (u64, HighZeroBytesDroppedBigSize))),
2935+
(20, trampoline_onion_packet, option),
29252936
(77_777, invoice_request, option),
29262937
// See https://github.com/lightning/blips/blob/master/blip-0003.md
29272938
(5482373484, keysend_preimage, option)
@@ -3000,6 +3011,16 @@ impl<NS: Deref> ReadableArgs<(Option<PublicKey>, NS)> for InboundOnionPayload wh
30003011
amt_to_forward: amt.ok_or(DecodeError::InvalidValue)?,
30013012
outgoing_cltv_value: cltv_value.ok_or(DecodeError::InvalidValue)?,
30023013
}))
3014+
} else if let Some(trampoline_onion_packet) = trampoline_onion_packet {
3015+
if payment_metadata.is_some() || encrypted_tlvs_opt.is_some() ||
3016+
total_msat.is_some()
3017+
{ return Err(DecodeError::InvalidValue) }
3018+
Ok(Self::TrampolineEntrypoint(InboundTrampolineEntrypointPayload {
3019+
amt_to_forward: amt.ok_or(DecodeError::InvalidValue)?,
3020+
outgoing_cltv_value: cltv_value.ok_or(DecodeError::InvalidValue)?,
3021+
multipath_trampoline_data: payment_data,
3022+
trampoline_packet: trampoline_onion_packet,
3023+
}))
30033024
} else {
30043025
if encrypted_tlvs_opt.is_some() || total_msat.is_some() || invoice_request.is_some() {
30053026
return Err(DecodeError::InvalidValue)

0 commit comments

Comments
 (0)