github.com/mavryk-network/mvgo@v1.19.9/codec/smart_rollup_originate.go (about) 1 // Copyright (c) 2023 Blockwatch Data Inc. 2 // Author: alex@blockwatch.cc 3 4 package codec 5 6 import ( 7 "bytes" 8 "encoding/binary" 9 "fmt" 10 "strconv" 11 12 "github.com/mavryk-network/mvgo/mavryk" 13 "github.com/mavryk-network/mvgo/micheline" 14 ) 15 16 // SmartRollupOriginate represents "smart_rollup_originate" operation 17 type SmartRollupOriginate struct { 18 Manager 19 Pvm mavryk.PvmKind `json:"pvm_kind"` 20 Kernel mavryk.HexBytes `json:"kernel"` 21 Proof mavryk.HexBytes `json:"origination_proof"` 22 Type micheline.Prim `json:"parameters_ty"` 23 } 24 25 func (o SmartRollupOriginate) Kind() mavryk.OpType { 26 return mavryk.OpTypeSmartRollupOriginate 27 } 28 29 func (o SmartRollupOriginate) MarshalJSON() ([]byte, error) { 30 buf := bytes.NewBuffer(nil) 31 buf.WriteByte('{') 32 buf.WriteString(`"kind":`) 33 buf.WriteString(strconv.Quote(o.Kind().String())) 34 buf.WriteByte(',') 35 o.Manager.EncodeJSON(buf) 36 buf.WriteString(`,"pvm_kind":`) 37 buf.WriteString(strconv.Quote(o.Pvm.String())) 38 buf.WriteString(`,"kernel":`) 39 buf.WriteString(strconv.Quote(o.Kernel.String())) 40 buf.WriteString(`,"origination_proof":`) 41 buf.WriteString(strconv.Quote(o.Proof.String())) 42 buf.WriteString(`,"parameters_ty":`) 43 o.Type.EncodeJSON(buf) 44 buf.WriteByte('}') 45 return buf.Bytes(), nil 46 } 47 48 func (o SmartRollupOriginate) EncodeBuffer(buf *bytes.Buffer, p *mavryk.Params) error { 49 buf.WriteByte(o.Kind().TagVersion(p.OperationTagsVersion)) 50 o.Manager.EncodeBuffer(buf, p) 51 binary.Write(buf, enc, o.Pvm) 52 writeBytesWithLen(buf, o.Kernel) 53 writeBytesWithLen(buf, o.Proof) 54 writePrimWithLen(buf, o.Type) 55 return nil 56 } 57 58 func (o *SmartRollupOriginate) DecodeBuffer(buf *bytes.Buffer, p *mavryk.Params) (err error) { 59 if err = ensureTagAndSize(buf, o.Kind(), p.OperationTagsVersion); err != nil { 60 return 61 } 62 if err = o.Manager.DecodeBuffer(buf, p); err != nil { 63 return 64 } 65 var b byte 66 if b, err = readByte(buf.Next(1)); err != nil { 67 return 68 } else if typ := mavryk.PvmKind(b); !typ.IsValid() { 69 err = fmt.Errorf("Unsupported PVM type %d", b) 70 return 71 } else { 72 o.Pvm = typ 73 } 74 if o.Kernel, err = readBytesWithLen(buf); err != nil { 75 return 76 } 77 if o.Proof, err = readBytesWithLen(buf); err != nil { 78 return 79 } 80 if o.Type, err = readPrimWithLen(buf); err != nil { 81 return 82 } 83 return 84 } 85 86 func (o SmartRollupOriginate) MarshalBinary() ([]byte, error) { 87 buf := bytes.NewBuffer(nil) 88 err := o.EncodeBuffer(buf, mavryk.DefaultParams) 89 return buf.Bytes(), err 90 } 91 92 func (o *SmartRollupOriginate) UnmarshalBinary(data []byte) error { 93 return o.DecodeBuffer(bytes.NewBuffer(data), mavryk.DefaultParams) 94 }