github.com/mavryk-network/mvgo@v1.19.9/codec/smart_rollup_publish.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  	"strconv"
    10  
    11  	"github.com/mavryk-network/mvgo/mavryk"
    12  )
    13  
    14  // SmartRollupPublish represents "smart_rollup_publish" operation
    15  type SmartRollupPublish struct {
    16  	Manager
    17  	Rollup     mavryk.Address `json:"rollup"`
    18  	Commitment struct {
    19  		State         mavryk.SmartRollupStateHash `json:"compressed_state"`
    20  		InboxLevel    int32                       `json:"inbox_level"`
    21  		Predecessor   mavryk.SmartRollupStateHash `json:"predecessor"`
    22  		NumberOfTicks int64                       `json:"number_of_ticks,string"`
    23  	} `json:"commitment"`
    24  }
    25  
    26  func (o SmartRollupPublish) Kind() mavryk.OpType {
    27  	return mavryk.OpTypeSmartRollupPublish
    28  }
    29  
    30  func (o SmartRollupPublish) MarshalJSON() ([]byte, error) {
    31  	buf := bytes.NewBuffer(nil)
    32  	buf.WriteByte('{')
    33  	buf.WriteString(`"kind":`)
    34  	buf.WriteString(strconv.Quote(o.Kind().String()))
    35  	buf.WriteByte(',')
    36  	o.Manager.EncodeJSON(buf)
    37  	buf.WriteString(`,"rollup":`)
    38  	buf.WriteString(strconv.Quote(o.Rollup.String()))
    39  	buf.WriteString(`,"commitment":{`)
    40  	buf.WriteString(`"compressed_state":`)
    41  	buf.WriteString(strconv.Quote(o.Commitment.State.String()))
    42  	buf.WriteString(`,"inbox_level":`)
    43  	buf.WriteString(strconv.FormatInt(int64(o.Commitment.InboxLevel), 10))
    44  	buf.WriteString(`,"predecessor":`)
    45  	buf.WriteString(strconv.Quote(o.Commitment.Predecessor.String()))
    46  	buf.WriteString(`,"number_of_ticks":`)
    47  	buf.WriteString(strconv.Quote(strconv.FormatInt(o.Commitment.NumberOfTicks, 10)))
    48  	buf.WriteString("}}")
    49  	return buf.Bytes(), nil
    50  }
    51  
    52  func (o SmartRollupPublish) EncodeBuffer(buf *bytes.Buffer, p *mavryk.Params) error {
    53  	buf.WriteByte(o.Kind().TagVersion(p.OperationTagsVersion))
    54  	o.Manager.EncodeBuffer(buf, p)
    55  	buf.Write(o.Rollup.Hash()) // 20 byte only
    56  	buf.Write(o.Commitment.State[:])
    57  	binary.Write(buf, enc, uint32(o.Commitment.InboxLevel))
    58  	buf.Write(o.Commitment.Predecessor[:])
    59  	binary.Write(buf, enc, o.Commitment.NumberOfTicks)
    60  	return nil
    61  }
    62  
    63  func (o *SmartRollupPublish) DecodeBuffer(buf *bytes.Buffer, p *mavryk.Params) (err error) {
    64  	if err = ensureTagAndSize(buf, o.Kind(), p.OperationTagsVersion); err != nil {
    65  		return
    66  	}
    67  	if err = o.Manager.DecodeBuffer(buf, p); err != nil {
    68  		return
    69  	}
    70  	o.Rollup = mavryk.NewAddress(mavryk.AddressTypeSmartRollup, buf.Next(20))
    71  	o.Commitment.State = mavryk.NewSmartRollupStateHash(buf.Next(32))
    72  	o.Commitment.InboxLevel, err = readInt32(buf.Next(4))
    73  	if err != nil {
    74  		return
    75  	}
    76  	o.Commitment.Predecessor = mavryk.NewSmartRollupStateHash(buf.Next(32))
    77  	o.Commitment.NumberOfTicks, err = readInt64(buf.Next(8))
    78  	return
    79  }
    80  
    81  func (o SmartRollupPublish) 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 *SmartRollupPublish) UnmarshalBinary(data []byte) error {
    88  	return o.DecodeBuffer(bytes.NewBuffer(data), mavryk.DefaultParams)
    89  }