Skip to content

Commit

Permalink
Merge pull request #2845 from wpaulino/decode-htlc-onion-when-committed
Browse files Browse the repository at this point in the history
Support decoding HTLC onions once fully committed
  • Loading branch information
TheBlueMatt authored Mar 28, 2024
2 parents 6159325 + fe65648 commit 9cc0e98
Show file tree
Hide file tree
Showing 9 changed files with 760 additions and 364 deletions.
2 changes: 1 addition & 1 deletion lightning/src/crypto/streams.rs
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ mod tests {
let writeable_len = $obj.serialized_length() as u64 + 16;
let write_adapter = ChaChaPolyWriteAdapter::new(rho, &$obj);
let encrypted_writeable_bytes = write_adapter.encode();
let encrypted_writeable = &encrypted_writeable_bytes[..];
let encrypted_writeable = &mut &encrypted_writeable_bytes[..];

// Now deserialize the object back and make sure it matches the original.
let mut rd = FixedLengthReader::new(encrypted_writeable, writeable_len);
Expand Down
35 changes: 19 additions & 16 deletions lightning/src/events/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,8 @@ pub enum HTLCDestination {
/// Short channel id we are requesting to forward an HTLC to.
requested_forward_scid: u64
},
/// We couldn't decode the incoming onion to obtain the forwarding details.
InvalidOnion,
/// Failure scenario where an HTLC may have been forwarded to be intended for us,
/// but is invalid for some reason, so we reject it.
///
Expand Down Expand Up @@ -329,6 +331,7 @@ impl_writeable_tlv_based_enum_upgradable!(HTLCDestination,
(2, UnknownNextHop) => {
(0, requested_forward_scid, required),
},
(3, InvalidOnion) => {},
(4, FailedPayment) => {
(0, payment_hash, required),
},
Expand Down Expand Up @@ -1294,7 +1297,7 @@ impl MaybeReadable for Event {
// Note that we do not write a length-prefixed TLV for FundingGenerationReady events.
0u8 => Ok(None),
1u8 => {
let f = || {
let mut f = || {
let mut payment_hash = PaymentHash([0; 32]);
let mut payment_preimage = None;
let mut payment_secret = None;
Expand Down Expand Up @@ -1342,7 +1345,7 @@ impl MaybeReadable for Event {
f()
},
2u8 => {
let f = || {
let mut f = || {
let mut payment_preimage = PaymentPreimage([0; 32]);
let mut payment_hash = None;
let mut payment_id = None;
Expand All @@ -1366,7 +1369,7 @@ impl MaybeReadable for Event {
f()
},
3u8 => {
let f = || {
let mut f = || {
#[cfg(test)]
let error_code = Readable::read(reader)?;
#[cfg(test)]
Expand Down Expand Up @@ -1409,7 +1412,7 @@ impl MaybeReadable for Event {
},
4u8 => Ok(None),
5u8 => {
let f = || {
let mut f = || {
let mut outputs = WithoutLength(Vec::new());
let mut channel_id: Option<ChannelId> = None;
read_tlv_fields!(reader, {
Expand Down Expand Up @@ -1445,7 +1448,7 @@ impl MaybeReadable for Event {
}))
},
7u8 => {
let f = || {
let mut f = || {
let mut prev_channel_id = None;
let mut next_channel_id = None;
let mut prev_user_channel_id = None;
Expand Down Expand Up @@ -1473,7 +1476,7 @@ impl MaybeReadable for Event {
f()
},
9u8 => {
let f = || {
let mut f = || {
let mut channel_id = ChannelId::new_zero();
let mut reason = UpgradableRequired(None);
let mut user_channel_id_low_opt: Option<u64> = None;
Expand Down Expand Up @@ -1503,7 +1506,7 @@ impl MaybeReadable for Event {
f()
},
11u8 => {
let f = || {
let mut f = || {
let mut channel_id = ChannelId::new_zero();
let mut transaction = Transaction{ version: 2, lock_time: LockTime::ZERO, input: Vec::new(), output: Vec::new() };
read_tlv_fields!(reader, {
Expand All @@ -1515,7 +1518,7 @@ impl MaybeReadable for Event {
f()
},
13u8 => {
let f = || {
let mut f = || {
_init_and_read_len_prefixed_tlv_fields!(reader, {
(0, payment_id, required),
(2, payment_hash, option),
Expand All @@ -1531,7 +1534,7 @@ impl MaybeReadable for Event {
f()
},
15u8 => {
let f = || {
let mut f = || {
let mut payment_hash = PaymentHash([0; 32]);
let mut payment_id = PaymentId([0; 32]);
let mut reason = None;
Expand All @@ -1553,7 +1556,7 @@ impl MaybeReadable for Event {
Ok(None)
},
19u8 => {
let f = || {
let mut f = || {
let mut payment_hash = PaymentHash([0; 32]);
let mut purpose = UpgradableRequired(None);
let mut amount_msat = 0;
Expand All @@ -1580,7 +1583,7 @@ impl MaybeReadable for Event {
f()
},
21u8 => {
let f = || {
let mut f = || {
_init_and_read_len_prefixed_tlv_fields!(reader, {
(0, payment_id, required),
(2, payment_hash, required),
Expand All @@ -1596,7 +1599,7 @@ impl MaybeReadable for Event {
f()
},
23u8 => {
let f = || {
let mut f = || {
_init_and_read_len_prefixed_tlv_fields!(reader, {
(0, payment_id, required),
(2, payment_hash, required),
Expand All @@ -1614,7 +1617,7 @@ impl MaybeReadable for Event {
f()
},
25u8 => {
let f = || {
let mut f = || {
let mut prev_channel_id = ChannelId::new_zero();
let mut failed_next_destination_opt = UpgradableRequired(None);
read_tlv_fields!(reader, {
Expand All @@ -1630,7 +1633,7 @@ impl MaybeReadable for Event {
},
27u8 => Ok(None),
29u8 => {
let f = || {
let mut f = || {
let mut channel_id = ChannelId::new_zero();
let mut user_channel_id: u128 = 0;
let mut counterparty_node_id = RequiredWrapper(None);
Expand All @@ -1652,7 +1655,7 @@ impl MaybeReadable for Event {
f()
},
31u8 => {
let f = || {
let mut f = || {
let mut channel_id = ChannelId::new_zero();
let mut user_channel_id: u128 = 0;
let mut former_temporary_channel_id = None;
Expand Down Expand Up @@ -1680,7 +1683,7 @@ impl MaybeReadable for Event {
f()
},
33u8 => {
let f = || {
let mut f = || {
_init_and_read_len_prefixed_tlv_fields!(reader, {
(0, payment_id, required),
});
Expand Down
Loading

0 comments on commit 9cc0e98

Please sign in to comment.