From 9a93f83370fd28cdb6213afe06b0baf224bf96db Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Tue, 12 Sep 2017 17:58:42 +0200 Subject: [PATCH] lnwire: fix ordering of the UpdateAddHTLC message on the wire MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit fixes a diversion from the way the UpdateAddHTLC message is defined within the specification. We had the HTLC expiry value in the wrong place on the wire, which meant that we couldn’t parse the messages as sent by the other LN implementations. --- lnwire/update_add_htlc.go | 14 +++++++------- lnwire/update_fail_malformed_htlc.go | 21 +++++++++++---------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/lnwire/update_add_htlc.go b/lnwire/update_add_htlc.go index fa2924a5..ed1fa547 100644 --- a/lnwire/update_add_htlc.go +++ b/lnwire/update_add_htlc.go @@ -26,11 +26,6 @@ type UpdateAddHTLC struct { // with each offered HTLC. ID uint64 - // Expiry is the number of blocks after which this HTLC should expire. - // It is the receiver's duty to ensure that the outgoing HTLC has a - // sufficient expiry value to allow her to redeem the incoming HTLC. - Expiry uint32 - // Amount is the amount of millisatoshis this HTLC is worth. Amount MilliSatoshi @@ -39,6 +34,11 @@ type UpdateAddHTLC struct { // upstream peer in order to fully settle the HTLC. PaymentHash [32]byte + // Expiry is the number of blocks after which this HTLC should expire. + // It is the receiver's duty to ensure that the outgoing HTLC has a + // sufficient expiry value to allow her to redeem the incoming HTLC. + Expiry uint32 + // OnionBlob is the raw serialized mix header used to route an HTLC in // a privacy-preserving manner. The mix header is defined currently to // be parsed as a 4-tuple: (groupElement, routingInfo, headerMAC, @@ -69,9 +69,9 @@ func (c *UpdateAddHTLC) Decode(r io.Reader, pver uint32) error { return readElements(r, &c.ChanID, &c.ID, - &c.Expiry, &c.Amount, c.PaymentHash[:], + &c.Expiry, c.OnionBlob[:], ) } @@ -84,9 +84,9 @@ func (c *UpdateAddHTLC) Encode(w io.Writer, pver uint32) error { return writeElements(w, c.ChanID, c.ID, - c.Expiry, c.Amount, c.PaymentHash[:], + c.Expiry, c.OnionBlob[:], ) } diff --git a/lnwire/update_fail_malformed_htlc.go b/lnwire/update_fail_malformed_htlc.go index ef5ff3e1..df3bf157 100644 --- a/lnwire/update_fail_malformed_htlc.go +++ b/lnwire/update_fail_malformed_htlc.go @@ -5,10 +5,10 @@ import ( "io" ) -// UpdateFailMalformedHTLC is sent by either the payment forwarder or by payment -// receiver to the payment sender in order to notify it that the onion blob -// can't be parsed. For that reason we send this message instead of obfuscate -// the onion failure. +// UpdateFailMalformedHTLC is sent by either the payment forwarder or by +// payment receiver to the payment sender in order to notify it that the onion +// blob can't be parsed. For that reason we send this message instead of +// obfuscate the onion failure. type UpdateFailMalformedHTLC struct { // ChanID is the particular active channel that this // UpdateFailMalformedHTLC is bound to. @@ -26,8 +26,8 @@ type UpdateFailMalformedHTLC struct { FailureCode FailCode } -// A compile time check to ensure UpdateFailMalformedHTLC implements the lnwire.Message -// interface. +// A compile time check to ensure UpdateFailMalformedHTLC implements the +// lnwire.Message interface. var _ Message = (*UpdateFailMalformedHTLC)(nil) // Decode deserializes a serialized UpdateFailMalformedHTLC message stored in the passed @@ -43,8 +43,8 @@ func (c *UpdateFailMalformedHTLC) Decode(r io.Reader, pver uint32) error { ) } -// Encode serializes the target UpdateFailMalformedHTLC into the passed io.Writer observing -// the protocol version specified. +// Encode serializes the target UpdateFailMalformedHTLC into the passed +// io.Writer observing the protocol version specified. // // This is part of the lnwire.Message interface. func (c *UpdateFailMalformedHTLC) Encode(w io.Writer, pver uint32) error { @@ -64,8 +64,9 @@ func (c *UpdateFailMalformedHTLC) MsgType() MessageType { return MsgUpdateFailMalformedHTLC } -// MaxPayloadLength returns the maximum allowed payload size for a UpdateFailMalformedHTLC -// complete message observing the specified protocol version. +// MaxPayloadLength returns the maximum allowed payload size for a +// UpdateFailMalformedHTLC complete message observing the specified protocol +// version. // // This is part of the lnwire.Message interface. func (c *UpdateFailMalformedHTLC) MaxPayloadLength(uint32) uint32 {