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

     1  // Copyright (c) 2020-2022 Blockwatch Data Inc.
     2  // Author: alex@blockwatch.cc
     3  
     4  package codec
     5  
     6  import (
     7  	"bytes"
     8  	"encoding/binary"
     9  	"strconv"
    10  
    11  	"github.com/mavryk-network/mvgo/mavryk"
    12  )
    13  
    14  // DoubleEndorsementEvidence represents "double_endorsement_evidence" operation
    15  type DoubleEndorsementEvidence struct {
    16  	Simple
    17  	Op1  InlinedEndorsement `json:"op1"`
    18  	Op2  InlinedEndorsement `json:"op2"`
    19  	Slot int16              `json:"slot"`
    20  }
    21  
    22  func (o DoubleEndorsementEvidence) Kind() mavryk.OpType {
    23  	return mavryk.OpTypeDoubleEndorsementEvidence
    24  }
    25  
    26  func (o DoubleEndorsementEvidence) MarshalJSON() ([]byte, error) {
    27  	buf := bytes.NewBuffer(nil)
    28  	buf.WriteByte('{')
    29  	buf.WriteString(`"kind":`)
    30  	buf.WriteString(strconv.Quote(o.Kind().String()))
    31  	buf.WriteString(`,"op1":`)
    32  	b, _ := o.Op1.MarshalJSON()
    33  	buf.Write(b)
    34  	buf.WriteString(`,"op2":`)
    35  	b, _ = o.Op2.MarshalJSON()
    36  	buf.Write(b)
    37  	buf.WriteString(`,"slot":`)
    38  	buf.WriteString(strconv.Itoa(int(o.Slot)))
    39  	buf.WriteByte('}')
    40  	return buf.Bytes(), nil
    41  }
    42  
    43  func (o DoubleEndorsementEvidence) EncodeBuffer(buf *bytes.Buffer, p *mavryk.Params) error {
    44  	buf.WriteByte(o.Kind().TagVersion(p.OperationTagsVersion))
    45  	b2 := bytes.NewBuffer(nil)
    46  	o.Op1.EncodeBuffer(b2, p)
    47  	binary.Write(buf, enc, uint32(b2.Len()))
    48  	buf.Write(b2.Bytes())
    49  	b2.Reset()
    50  	o.Op2.EncodeBuffer(b2, p)
    51  	binary.Write(buf, enc, uint32(b2.Len()))
    52  	buf.Write(b2.Bytes())
    53  	binary.Write(buf, enc, o.Slot)
    54  	return nil
    55  }
    56  
    57  func (o *DoubleEndorsementEvidence) DecodeBuffer(buf *bytes.Buffer, p *mavryk.Params) (err error) {
    58  	if err = ensureTagAndSize(buf, o.Kind(), p.OperationTagsVersion); err != nil {
    59  		return
    60  	}
    61  	l, err := readInt32(buf.Next(4))
    62  	if err != nil {
    63  		return err
    64  	}
    65  	if err = o.Op1.DecodeBuffer(bytes.NewBuffer(buf.Next(int(l))), p); err != nil {
    66  		return err
    67  	}
    68  	l, err = readInt32(buf.Next(4))
    69  	if err != nil {
    70  		return err
    71  	}
    72  	if err = o.Op2.DecodeBuffer(bytes.NewBuffer(buf.Next(int(l))), p); err != nil {
    73  		return err
    74  	}
    75  	o.Slot, err = readInt16(buf.Next(2))
    76  	if err != nil {
    77  		return err
    78  	}
    79  	return nil
    80  }
    81  
    82  func (o DoubleEndorsementEvidence) MarshalBinary() ([]byte, error) {
    83  	buf := bytes.NewBuffer(nil)
    84  	err := o.EncodeBuffer(buf, mavryk.DefaultParams)
    85  	return buf.Bytes(), err
    86  }
    87  
    88  func (o *DoubleEndorsementEvidence) UnmarshalBinary(data []byte) error {
    89  	return o.DecodeBuffer(bytes.NewBuffer(data), mavryk.DefaultParams)
    90  }
    91  
    92  // TenderbakeDoubleEndorsementEvidence represents "double_endorsement_evidence" operation
    93  // for Tenderbake protocols
    94  type TenderbakeDoubleEndorsementEvidence struct {
    95  	Simple
    96  	Op1 TenderbakeInlinedEndorsement `json:"op1"`
    97  	Op2 TenderbakeInlinedEndorsement `json:"op2"`
    98  }
    99  
   100  func (o TenderbakeDoubleEndorsementEvidence) Kind() mavryk.OpType {
   101  	return mavryk.OpTypeDoubleEndorsementEvidence
   102  }
   103  
   104  func (o TenderbakeDoubleEndorsementEvidence) MarshalJSON() ([]byte, error) {
   105  	buf := bytes.NewBuffer(nil)
   106  	buf.WriteByte('{')
   107  	buf.WriteString(`"kind":`)
   108  	buf.WriteString(strconv.Quote(o.Kind().String()))
   109  	buf.WriteString(`,"op1":`)
   110  	b, _ := o.Op1.MarshalJSON()
   111  	buf.Write(b)
   112  	buf.WriteString(`,"op2":`)
   113  	b, _ = o.Op2.MarshalJSON()
   114  	buf.Write(b)
   115  	buf.WriteByte('}')
   116  	return buf.Bytes(), nil
   117  }
   118  
   119  func (o TenderbakeDoubleEndorsementEvidence) EncodeBuffer(buf *bytes.Buffer, p *mavryk.Params) error {
   120  	buf.WriteByte(o.Kind().TagVersion(p.OperationTagsVersion))
   121  	b2 := bytes.NewBuffer(nil)
   122  	o.Op1.EncodeBuffer(b2, p)
   123  	binary.Write(buf, enc, uint32(b2.Len()))
   124  	buf.Write(b2.Bytes())
   125  	b2.Reset()
   126  	o.Op2.EncodeBuffer(b2, p)
   127  	binary.Write(buf, enc, uint32(b2.Len()))
   128  	buf.Write(b2.Bytes())
   129  	return nil
   130  }
   131  
   132  func (o *TenderbakeDoubleEndorsementEvidence) DecodeBuffer(buf *bytes.Buffer, p *mavryk.Params) (err error) {
   133  	if err = ensureTagAndSize(buf, o.Kind(), p.OperationTagsVersion); err != nil {
   134  		return
   135  	}
   136  	l, err := readInt32(buf.Next(4))
   137  	if err != nil {
   138  		return err
   139  	}
   140  	if err = o.Op1.DecodeBuffer(bytes.NewBuffer(buf.Next(int(l))), p); err != nil {
   141  		return err
   142  	}
   143  	l, err = readInt32(buf.Next(4))
   144  	if err != nil {
   145  		return err
   146  	}
   147  	if err = o.Op2.DecodeBuffer(bytes.NewBuffer(buf.Next(int(l))), p); err != nil {
   148  		return err
   149  	}
   150  	return nil
   151  }
   152  
   153  func (o TenderbakeDoubleEndorsementEvidence) MarshalBinary() ([]byte, error) {
   154  	buf := bytes.NewBuffer(nil)
   155  	err := o.EncodeBuffer(buf, mavryk.DefaultParams)
   156  	return buf.Bytes(), err
   157  }
   158  
   159  func (o *TenderbakeDoubleEndorsementEvidence) UnmarshalBinary(data []byte) error {
   160  	return o.DecodeBuffer(bytes.NewBuffer(data), mavryk.DefaultParams)
   161  }
   162  
   163  // TenderbakeDoublePreendorsementEvidence represents "double_preendorsement_evidence" operation
   164  // for Tenderbake protocols
   165  type TenderbakeDoublePreendorsementEvidence struct {
   166  	Simple
   167  	Op1 TenderbakeInlinedPreendorsement `json:"op1"`
   168  	Op2 TenderbakeInlinedPreendorsement `json:"op2"`
   169  }
   170  
   171  func (o TenderbakeDoublePreendorsementEvidence) Kind() mavryk.OpType {
   172  	return mavryk.OpTypeDoublePreendorsementEvidence
   173  }
   174  
   175  func (o TenderbakeDoublePreendorsementEvidence) MarshalJSON() ([]byte, error) {
   176  	buf := bytes.NewBuffer(nil)
   177  	buf.WriteByte('{')
   178  	buf.WriteString(`"kind":`)
   179  	buf.WriteString(strconv.Quote(o.Kind().String()))
   180  	buf.WriteString(`,"op1":`)
   181  	b, _ := o.Op1.MarshalJSON()
   182  	buf.Write(b)
   183  	buf.WriteString(`,"op2":`)
   184  	b, _ = o.Op2.MarshalJSON()
   185  	buf.Write(b)
   186  	buf.WriteByte('}')
   187  	return buf.Bytes(), nil
   188  }
   189  
   190  func (o TenderbakeDoublePreendorsementEvidence) EncodeBuffer(buf *bytes.Buffer, p *mavryk.Params) error {
   191  	buf.WriteByte(o.Kind().TagVersion(p.OperationTagsVersion))
   192  	b2 := bytes.NewBuffer(nil)
   193  	o.Op1.EncodeBuffer(b2, p)
   194  	binary.Write(buf, enc, uint32(b2.Len()))
   195  	buf.Write(b2.Bytes())
   196  	b2.Reset()
   197  	o.Op2.EncodeBuffer(b2, p)
   198  	binary.Write(buf, enc, uint32(b2.Len()))
   199  	buf.Write(b2.Bytes())
   200  	return nil
   201  }
   202  
   203  func (o *TenderbakeDoublePreendorsementEvidence) DecodeBuffer(buf *bytes.Buffer, p *mavryk.Params) (err error) {
   204  	if err = ensureTagAndSize(buf, o.Kind(), p.OperationTagsVersion); err != nil {
   205  		return
   206  	}
   207  	l, err := readInt32(buf.Next(4))
   208  	if err != nil {
   209  		return err
   210  	}
   211  	if err = o.Op1.DecodeBuffer(bytes.NewBuffer(buf.Next(int(l))), p); err != nil {
   212  		return err
   213  	}
   214  	l, err = readInt32(buf.Next(4))
   215  	if err != nil {
   216  		return err
   217  	}
   218  	if err = o.Op2.DecodeBuffer(bytes.NewBuffer(buf.Next(int(l))), p); err != nil {
   219  		return err
   220  	}
   221  	return nil
   222  }
   223  
   224  func (o TenderbakeDoublePreendorsementEvidence) MarshalBinary() ([]byte, error) {
   225  	buf := bytes.NewBuffer(nil)
   226  	err := o.EncodeBuffer(buf, mavryk.DefaultParams)
   227  	return buf.Bytes(), err
   228  }
   229  
   230  func (o *TenderbakeDoublePreendorsementEvidence) UnmarshalBinary(data []byte) error {
   231  	return o.DecodeBuffer(bytes.NewBuffer(data), mavryk.DefaultParams)
   232  }