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 }