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  }