package lnwire import ( "fmt" "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcutil" "io" ) type CloseRequest struct { ReservationID uint64 RequesterCloseSig *btcec.Signature // Requester's Commitment Fee btcutil.Amount } func (c *CloseRequest) Decode(r io.Reader, pver uint32) error { // ReservationID (8) // RequesterCloseSig (73) // First byte length then sig // Fee (8) err := readElements(r, &c.ReservationID, &c.RequesterCloseSig, &c.Fee) if err != nil { return err } return nil } // Creates a new CloseRequest func NewCloseRequest() *CloseRequest { return &CloseRequest{} } // Serializes the item from the CloseRequest struct // Writes the data to w func (c *CloseRequest) Encode(w io.Writer, pver uint32) error { // ReservationID // RequesterCloseSig // Fee err := writeElements(w, c.ReservationID, c.RequesterCloseSig, c.Fee) if err != nil { return err } return nil } func (c *CloseRequest) Command() uint32 { return CmdCloseRequest } func (c *CloseRequest) MaxPayloadLength(uint32) uint32 { // 8 + 73 + 8 return 89 } // Makes sure the struct data is valid (e.g. no negatives or invalid pkscripts) func (c *CloseRequest) Validate() error { // Fee must be greater than 0 if c.Fee < 0 { return fmt.Errorf("Fee must be greater than zero.") } // We're good! return nil } func (c *CloseRequest) String() string { var serializedSig []byte if c.RequesterCloseSig != nil && c.RequesterCloseSig.R != nil { serializedSig = c.RequesterCloseSig.Serialize() } return fmt.Sprintf("\n--- Begin CloseRequest ---\n") + fmt.Sprintf("ReservationID:\t\t%d\n", c.ReservationID) + fmt.Sprintf("CloseSig\t\t%x\n", serializedSig) + fmt.Sprintf("Fee:\t\t\t%d\n", c.Fee) + fmt.Sprintf("--- End CloseRequest ---\n") }