Skip to content

Commit 20648b2

Browse files
committed
Parse inbound TrampolineEntrypoint payload
1 parent 3372a4d commit 20648b2

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
@@ -1775,6 +1775,13 @@ mod fuzzy_internal_msgs {
17751775
amt_to_forward: u64,
17761776
outgoing_cltv_value: u32,
17771777
},
1778+
#[allow(unused)]
1779+
TrampolineEntrypoint {
1780+
amt_to_forward: u64,
1781+
outgoing_cltv_value: u32,
1782+
multipath_trampoline_data: Option<FinalOnionHopData>,
1783+
trampoline_packet: TrampolineOnionPacket,
1784+
},
17781785
Receive {
17791786
payment_data: Option<FinalOnionHopData>,
17801787
payment_metadata: Option<Vec<u8>>,
@@ -2858,6 +2865,7 @@ impl<NS: Deref> ReadableArgs<(Option<PublicKey>, NS)> for InboundOnionPayload wh
28582865
let mut payment_metadata: Option<WithoutLength<Vec<u8>>> = None;
28592866
let mut total_msat = None;
28602867
let mut keysend_preimage: Option<PaymentPreimage> = None;
2868+
let mut trampoline_onion_packet: Option<TrampolineOnionPacket> = None;
28612869
let mut invoice_request: Option<InvoiceRequest> = None;
28622870
let mut custom_tlvs = Vec::new();
28632871

@@ -2872,6 +2880,7 @@ impl<NS: Deref> ReadableArgs<(Option<PublicKey>, NS)> for InboundOnionPayload wh
28722880
(12, intro_node_blinding_point, option),
28732881
(16, payment_metadata, option),
28742882
(18, total_msat, (option, encoding: (u64, HighZeroBytesDroppedBigSize))),
2883+
(20, trampoline_onion_packet, option),
28752884
(77_777, invoice_request, option),
28762885
// See https://github.com/lightning/blips/blob/master/blip-0003.md
28772886
(5482373484, keysend_preimage, option)
@@ -2950,6 +2959,16 @@ impl<NS: Deref> ReadableArgs<(Option<PublicKey>, NS)> for InboundOnionPayload wh
29502959
amt_to_forward: amt.ok_or(DecodeError::InvalidValue)?,
29512960
outgoing_cltv_value: cltv_value.ok_or(DecodeError::InvalidValue)?,
29522961
})
2962+
} else if let Some(trampoline_onion_packet) = trampoline_onion_packet {
2963+
if payment_metadata.is_some() || encrypted_tlvs_opt.is_some() ||
2964+
total_msat.is_some()
2965+
{ return Err(DecodeError::InvalidValue) }
2966+
Ok(Self::TrampolineEntrypoint {
2967+
amt_to_forward: amt.ok_or(DecodeError::InvalidValue)?,
2968+
outgoing_cltv_value: cltv_value.ok_or(DecodeError::InvalidValue)?,
2969+
multipath_trampoline_data: payment_data,
2970+
trampoline_packet: trampoline_onion_packet,
2971+
})
29532972
} else {
29542973
if encrypted_tlvs_opt.is_some() || total_msat.is_some() || invoice_request.is_some() {
29552974
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",
@@ -166,6 +169,9 @@ pub(super) fn create_recv_pending_htlc_info(
166169
sender_intended_htlc_amt_msat, cltv_expiry_height, None, Some(payment_context),
167170
intro_node_blinding_point.is_none(), true, invoice_request)
168171
}
172+
msgs::InboundOnionPayload::TrampolineEntrypoint { .. } => {
173+
todo!()
174+
},
169175
msgs::InboundOnionPayload::Forward { .. } => {
170176
return Err(InboundHTLCErr {
171177
err_code: 0x4000|22,
@@ -471,6 +477,14 @@ where
471477
outgoing_cltv_value
472478
}
473479
},
480+
onion_utils::Hop::Forward {
481+
next_hop_data: msgs::InboundOnionPayload::TrampolineEntrypoint { .. }, ..
482+
} => {
483+
return_err!("TrampolineEntrypoint data provided in intermediary node", 0x4000 | 22, &[0; 0]);
484+
},
485+
onion_utils::Hop::Receive(msgs::InboundOnionPayload::TrampolineEntrypoint { .. }) => {
486+
todo!()
487+
}
474488
onion_utils::Hop::Receive { .. } => return Ok((next_hop, shared_secret, None)),
475489
onion_utils::Hop::Forward { next_hop_data: msgs::InboundOnionPayload::Receive { .. }, .. } |
476490
onion_utils::Hop::Forward { next_hop_data: msgs::InboundOnionPayload::BlindedReceive { .. }, .. } =>

0 commit comments

Comments
 (0)