github.com/mavryk-network/mvgo@v1.19.9/codec/vdf_revelation.go (about)

     1  // Copyright (c) 2023 Blockwatch Data Inc.
     2  // Author: alex@blockwatch.cc
     3  
     4  package codec
     5  
     6  import (
     7  	"bytes"
     8  	"strconv"
     9  
    10  	"github.com/mavryk-network/mvgo/mavryk"
    11  )
    12  
    13  // VdfRevelation represents "vdf_revelation" operation
    14  type VdfRevelation struct {
    15  	Simple
    16  	Solution mavryk.HexBytes `json:"solution"`
    17  }
    18  
    19  func (o VdfRevelation) Kind() mavryk.OpType {
    20  	return mavryk.OpTypeVdfRevelation
    21  }
    22  
    23  func (o VdfRevelation) MarshalJSON() ([]byte, error) {
    24  	buf := bytes.NewBuffer(nil)
    25  	buf.WriteByte('{')
    26  	buf.WriteString(`"kind":`)
    27  	buf.WriteString(strconv.Quote(o.Kind().String()))
    28  	buf.WriteString(`,"solution":`)
    29  	buf.WriteString(strconv.Quote(o.Solution.String()))
    30  	buf.WriteByte('}')
    31  	return buf.Bytes(), nil
    32  }
    33  
    34  func (o VdfRevelation) EncodeBuffer(buf *bytes.Buffer, p *mavryk.Params) error {
    35  	buf.WriteByte(o.Kind().TagVersion(p.OperationTagsVersion))
    36  	buf.Write(o.Solution.Bytes())
    37  	return nil
    38  }
    39  
    40  func (o *VdfRevelation) DecodeBuffer(buf *bytes.Buffer, p *mavryk.Params) (err error) {
    41  	if err = ensureTagAndSize(buf, o.Kind(), p.OperationTagsVersion); err != nil {
    42  		return
    43  	}
    44  	return o.Solution.ReadBytes(buf, 200)
    45  }
    46  
    47  func (o VdfRevelation) MarshalBinary() ([]byte, error) {
    48  	buf := bytes.NewBuffer(nil)
    49  	err := o.EncodeBuffer(buf, mavryk.DefaultParams)
    50  	return buf.Bytes(), err
    51  }
    52  
    53  func (o *VdfRevelation) UnmarshalBinary(data []byte) error {
    54  	return o.DecodeBuffer(bytes.NewBuffer(data), mavryk.DefaultParams)
    55  }