1d1f9f1724
This commit updates the encoding/decoding for the onion errors to properly match BOLT-0004. This commit does to major things: we increase the max message size to 256 bytes to account for recent modifications to the ChannelUpdate message, and also fold in the error code into the failure message encapsulation itself.
86 lines
2.3 KiB
Go
86 lines
2.3 KiB
Go
package lnwire
|
|
|
|
import "io"
|
|
|
|
// OpaqueReason is an opaque encrypted byte slice that encodes the exact
|
|
// failure reason and additional some supplemental data. The contents of this
|
|
// slice can only be decrypted by the sender of the original HTLC.
|
|
type OpaqueReason []byte
|
|
|
|
// UpdateFailHTLC is sent by Alice to Bob in order to remove a previously added
|
|
// HTLC. Upon receipt of an UpdateFailHTLC the HTLC should be removed from the
|
|
// next commitment transaction, with the UpdateFailHTLC propagated backwards in
|
|
// the route to fully undo the HTLC.
|
|
type UpdateFailHTLC struct {
|
|
// ChanIDPoint is the particular active channel that this
|
|
// UpdateFailHTLC is bound to.
|
|
ChanID ChannelID
|
|
|
|
// ID references which HTLC on the remote node's commitment transaction
|
|
// has timed out.
|
|
ID uint64
|
|
|
|
// Reason is an onion-encrypted blob that details why the HTLC was
|
|
// failed. This blob is only fully decryptable by the initiator of the
|
|
// HTLC message.
|
|
Reason OpaqueReason
|
|
}
|
|
|
|
// A compile time check to ensure UpdateFailHTLC implements the lnwire.Message
|
|
// interface.
|
|
var _ Message = (*UpdateFailHTLC)(nil)
|
|
|
|
// Decode deserializes a serialized UpdateFailHTLC message stored in the passed
|
|
// io.Reader observing the specified protocol version.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (c *UpdateFailHTLC) Decode(r io.Reader, pver uint32) error {
|
|
return readElements(r,
|
|
&c.ChanID,
|
|
&c.ID,
|
|
&c.Reason,
|
|
)
|
|
}
|
|
|
|
// Encode serializes the target UpdateFailHTLC into the passed io.Writer observing
|
|
// the protocol version specified.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (c *UpdateFailHTLC) Encode(w io.Writer, pver uint32) error {
|
|
return writeElements(w,
|
|
c.ChanID,
|
|
c.ID,
|
|
c.Reason,
|
|
)
|
|
}
|
|
|
|
// MsgType returns the integer uniquely identifying this message type on the
|
|
// wire.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (c *UpdateFailHTLC) MsgType() MessageType {
|
|
return MsgUpdateFailHTLC
|
|
}
|
|
|
|
// MaxPayloadLength returns the maximum allowed payload size for a UpdateFailHTLC
|
|
// complete message observing the specified protocol version.
|
|
//
|
|
// This is part of the lnwire.Message interface.
|
|
func (c *UpdateFailHTLC) MaxPayloadLength(uint32) uint32 {
|
|
var length uint32
|
|
|
|
// Length of the ChanID
|
|
length += 32
|
|
|
|
// Length of the ID
|
|
length += 8
|
|
|
|
// Length of the length opaque reason
|
|
length += 2
|
|
|
|
// Length of the Reason
|
|
length += 292
|
|
|
|
return length
|
|
}
|