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 }