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 }