github.com/decred/dcrlnd@v0.7.6/lnwire/update_fee.go (about)

     1  package lnwire
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  )
     7  
     8  // UpdateFee is the message the channel initiator sends to the other peer if
     9  // the channel commitment fee needs to be updated.
    10  type UpdateFee struct {
    11  	// ChanID is the channel that this UpdateFee is meant for.
    12  	ChanID ChannelID
    13  
    14  	// FeePerKB is the fee-per-kB on commit transactions that the sender of
    15  	// this message wants to use for this channel.
    16  	//
    17  	// TODO(halseth): make AtomsPerKWeight when fee estimation is moved to
    18  	// own package. Currently this will cause an import cycle.
    19  	FeePerKB uint32
    20  
    21  	// ExtraData is the set of data that was appended to this message to
    22  	// fill out the full maximum transport message size. These fields can
    23  	// be used to specify optional data such as custom TLV fields.
    24  	ExtraData ExtraOpaqueData
    25  }
    26  
    27  // NewUpdateFee creates a new UpdateFee message.
    28  func NewUpdateFee(chanID ChannelID, feePerKB uint32) *UpdateFee {
    29  	return &UpdateFee{
    30  		ChanID:   chanID,
    31  		FeePerKB: feePerKB,
    32  	}
    33  }
    34  
    35  // A compile time check to ensure UpdateFee implements the lnwire.Message
    36  // interface.
    37  var _ Message = (*UpdateFee)(nil)
    38  
    39  // Decode deserializes a serialized UpdateFee message stored in the passed
    40  // io.Reader observing the specified protocol version.
    41  //
    42  // This is part of the lnwire.Message interface.
    43  func (c *UpdateFee) Decode(r io.Reader, pver uint32) error {
    44  	return ReadElements(r,
    45  		&c.ChanID,
    46  		&c.FeePerKB,
    47  		&c.ExtraData,
    48  	)
    49  }
    50  
    51  // Encode serializes the target UpdateFee into the passed io.Writer
    52  // observing the protocol version specified.
    53  //
    54  // This is part of the lnwire.Message interface.
    55  func (c *UpdateFee) Encode(w *bytes.Buffer, pver uint32) error {
    56  	if err := WriteChannelID(w, c.ChanID); err != nil {
    57  		return err
    58  	}
    59  
    60  	if err := WriteUint32(w, c.FeePerKB); err != nil {
    61  		return err
    62  	}
    63  
    64  	return WriteBytes(w, c.ExtraData)
    65  }
    66  
    67  // MsgType returns the integer uniquely identifying this message type on the
    68  // wire.
    69  //
    70  // This is part of the lnwire.Message interface.
    71  func (c *UpdateFee) MsgType() MessageType {
    72  	return MsgUpdateFee
    73  }
    74  
    75  // TargetChanID returns the channel id of the link for which this message is
    76  // intended.
    77  //
    78  // NOTE: Part of peer.LinkUpdater interface.
    79  func (c *UpdateFee) TargetChanID() ChannelID {
    80  	return c.ChanID
    81  }