github.com/mavryk-network/mvgo@v1.19.9/codec/double_baking.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  // DoubleBakingEvidence represents "double_baking_evidence" operation
    15  type DoubleBakingEvidence struct {
    16  	Simple
    17  	Bh1 BlockHeader `json:"bh1"`
    18  	Bh2 BlockHeader `json:"bh2"`
    19  }
    20  
    21  func (o DoubleBakingEvidence) Kind() mavryk.OpType {
    22  	return mavryk.OpTypeDoubleBakingEvidence
    23  }
    24  
    25  func (o DoubleBakingEvidence) MarshalJSON() ([]byte, error) {
    26  	buf := bytes.NewBuffer(nil)
    27  	buf.WriteByte('{')
    28  	buf.WriteString(`"kind":`)
    29  	buf.WriteString(strconv.Quote(o.Kind().String()))
    30  	buf.WriteString(`,"bh1":`)
    31  	if b, err := o.Bh1.MarshalJSON(); err != nil {
    32  		return nil, err
    33  	} else {
    34  		buf.Write(b)
    35  	}
    36  	buf.WriteString(`,"bh2":`)
    37  	if b, err := o.Bh2.MarshalJSON(); err != nil {
    38  		return nil, err
    39  	} else {
    40  		buf.Write(b)
    41  	}
    42  	buf.WriteByte('}')
    43  	return buf.Bytes(), nil
    44  }
    45  
    46  func (o DoubleBakingEvidence) EncodeBuffer(buf *bytes.Buffer, p *mavryk.Params) error {
    47  	buf.WriteByte(o.Kind().TagVersion(p.OperationTagsVersion))
    48  	b2 := bytes.NewBuffer(nil)
    49  	o.Bh1.EncodeBuffer(b2)
    50  	binary.Write(buf, enc, uint32(b2.Len()))
    51  	buf.Write(b2.Bytes())
    52  	b2.Reset()
    53  	o.Bh2.EncodeBuffer(b2)
    54  	binary.Write(buf, enc, uint32(b2.Len()))
    55  	buf.Write(b2.Bytes())
    56  	return nil
    57  }
    58  
    59  func (o *DoubleBakingEvidence) DecodeBuffer(buf *bytes.Buffer, p *mavryk.Params) (err error) {
    60  	if err = ensureTagAndSize(buf, o.Kind(), p.OperationTagsVersion); err != nil {
    61  		return
    62  	}
    63  	var l int32
    64  	l, err = readInt32(buf.Next(4))
    65  	if err != nil {
    66  		return
    67  	}
    68  	if err = o.Bh1.DecodeBuffer(bytes.NewBuffer(buf.Next(int(l)))); err != nil {
    69  		return
    70  	}
    71  	l, err = readInt32(buf.Next(4))
    72  	if err != nil {
    73  		return
    74  	}
    75  	if err = o.Bh2.DecodeBuffer(bytes.NewBuffer(buf.Next(int(l)))); err != nil {
    76  		return
    77  	}
    78  	return
    79  }
    80  
    81  func (o DoubleBakingEvidence) MarshalBinary() ([]byte, error) {
    82  	buf := bytes.NewBuffer(nil)
    83  	err := o.EncodeBuffer(buf, mavryk.DefaultParams)
    84  	return buf.Bytes(), err
    85  }
    86  
    87  func (o *DoubleBakingEvidence) UnmarshalBinary(data []byte) error {
    88  	return o.DecodeBuffer(bytes.NewBuffer(data), mavryk.DefaultParams)
    89  }