github.com/mavryk-network/mvgo@v1.19.9/codec/smart_rollup_refute.go (about) 1 // Copyright (c) 2023 Blockwatch Data Inc. 2 // Author: alex@blockwatch.cc 3 4 package codec 5 6 import ( 7 "bytes" 8 9 "github.com/mavryk-network/mvgo/mavryk" 10 // "encoding/binary" 11 // "io" 12 // "strconv" 13 ) 14 15 // Smart_rollup_refute (tag 204) 16 // ============================= 17 18 // | Name | Size | Contents | 19 // +===============+======================+========================+ 20 // | Tag | 1 byte | unsigned 8-bit integer | 21 // | source | 21 bytes | $public_key_hash | 22 // | fee | Determined from data | $N.t | 23 // | counter | Determined from data | $N.t | 24 // | gas_limit | Determined from data | $N.t | 25 // | storage_limit | Determined from data | $N.t | 26 // | rollup | 20 bytes | bytes | 27 // | opponent | 21 bytes | $public_key_hash | 28 // | refutation | Determined from data | $X_24 | 29 30 // X_20 (Determined from data, 8-bit tag) 31 // ************************************** 32 33 // raw data proof (tag 0) 34 // ====================== 35 36 // | Name | Size | Contents | 37 // +=======================+==========+=========================+ 38 // | Tag | 1 byte | unsigned 8-bit integer | 39 // | # bytes in next field | 2 bytes | unsigned 16-bit integer | 40 // | raw_data | Variable | bytes | 41 42 // metadata proof (tag 1) 43 // ====================== 44 45 // | Name | Size | Contents | 46 // +======+========+========================+ 47 // | Tag | 1 byte | unsigned 8-bit integer | 48 49 // X_21 (Determined from data, 8-bit tag) 50 // ************************************** 51 52 // inbox proof (tag 0) 53 // =================== 54 55 // | Name | Size | Contents | 56 // +=======================+======================+=========================+ 57 // | Tag | 1 byte | unsigned 8-bit integer | 58 // | level | 4 bytes | signed 32-bit integer | 59 // | message_counter | Determined from data | $N.t | 60 // | # bytes in next field | 4 bytes | unsigned 30-bit integer | 61 // | serialized_proof | Variable | bytes | 62 63 // reveal proof (tag 1) 64 // ==================== 65 66 // | Name | Size | Contents | 67 // +==============+======================+========================+ 68 // | Tag | 1 byte | unsigned 8-bit integer | 69 // | reveal_proof | Determined from data | $X_20 | 70 71 // first input (tag 2) 72 // =================== 73 74 // | Name | Size | Contents | 75 // +======+========+========================+ 76 // | Tag | 1 byte | unsigned 8-bit integer | 77 78 // X_22 79 // **** 80 81 // | Name | Size | Contents | 82 // +=============================+======================+=====================================+ 83 // | ? presence of field "state" | 1 byte | boolean (0 for false, 255 for true) | 84 // | state | 32 bytes | bytes | 85 // | tick | Determined from data | $N.t | 86 87 // X_23 (Determined from data, 8-bit tag) 88 // ************************************** 89 90 // Dissection (tag 0) 91 // ================== 92 93 // | Name | Size | Contents | 94 // +=======================+==========+=========================+ 95 // | Tag | 1 byte | unsigned 8-bit integer | 96 // | # bytes in next field | 4 bytes | unsigned 30-bit integer | 97 // | Unnamed field 0 | Variable | sequence of $X_22 | 98 99 // Proof (tag 1) 100 // ============= 101 102 // | Name | Size | Contents | 103 // +===================================+======================+=====================================+ 104 // | Tag | 1 byte | unsigned 8-bit integer | 105 // | # bytes in next field | 4 bytes | unsigned 30-bit integer | 106 // | pvm_step | Variable | bytes | 107 // | ? presence of field "input_proof" | 1 byte | boolean (0 for false, 255 for true) | 108 // | input_proof | Determined from data | $X_21 | 109 110 // X_24 (Determined from data, 8-bit tag) 111 // ************************************** 112 113 // Start (tag 0) 114 // ============= 115 116 // | Name | Size | Contents | 117 // +==========================+==========+========================+ 118 // | Tag | 1 byte | unsigned 8-bit integer | 119 // | player_commitment_hash | 32 bytes | bytes | 120 // | opponent_commitment_hash | 32 bytes | bytes | 121 122 // Move (tag 1) 123 // ============ 124 125 // | Name | Size | Contents | 126 // +========+======================+========================+ 127 // | Tag | 1 byte | unsigned 8-bit integer | 128 // | choice | Determined from data | $N.t | 129 // | step | Determined from data | $X_23 | 130 131 // SmartRollupRefute represents "smart_rollup_refute" operation 132 type SmartRollupRefute struct { 133 Manager 134 Rollup mavryk.Address `json:"rollup"` 135 Opponent mavryk.Address `json:"opponent"` 136 Refutation SmartRollupRefutation `json:"refutation"` 137 } 138 139 type SmartRollupRefutation struct { 140 Kind string `json:"refutation_kind"` 141 PlayerHash mavryk.SmartRollupCommitHash `json:"player_commitment_hash"` 142 OpponentHash mavryk.SmartRollupCommitHash `json:"opponent_commitment_hash"` 143 Choice mavryk.Z `json:"choice"` 144 Step SmartRollupRefuteStep `json:"step"` 145 } 146 147 type SmartRollupRefuteStep struct { 148 Ticks []SmartRollupTick 149 Proof *SmartRollupProof 150 } 151 152 type SmartRollupProof struct { 153 PvmStep mavryk.HexBytes `json:"pvm_step"` 154 InputProof SmartRollupInputProof `json:"input_proof"` 155 } 156 157 type SmartRollupTick struct { 158 State mavryk.SmartRollupStateHash `json:"state"` 159 Tick mavryk.Z `json:"tick"` 160 } 161 162 type SmartRollupInputProof struct { 163 Kind string `json:"input_proof_kind"` 164 Level int64 `json:"level"` 165 Counter mavryk.Z `json:"message_counter"` 166 Proof mavryk.HexBytes `json:"serialized_proof"` 167 } 168 169 func (o SmartRollupRefute) Kind() mavryk.OpType { 170 return mavryk.OpTypeSmartRollupRefute 171 } 172 173 func (o SmartRollupRefute) MarshalJSON() ([]byte, error) { 174 buf := bytes.NewBuffer(nil) 175 // TODO if needed 176 return buf.Bytes(), nil 177 } 178 179 func (o SmartRollupRefute) EncodeBuffer(buf *bytes.Buffer, p *mavryk.Params) error { 180 buf.WriteByte(o.Kind().TagVersion(p.OperationTagsVersion)) 181 o.Manager.EncodeBuffer(buf, p) 182 // TODO if needed 183 return nil 184 } 185 186 func (o *SmartRollupRefute) DecodeBuffer(buf *bytes.Buffer, p *mavryk.Params) (err error) { 187 if err = ensureTagAndSize(buf, o.Kind(), p.OperationTagsVersion); err != nil { 188 return 189 } 190 if err = o.Manager.DecodeBuffer(buf, p); err != nil { 191 return 192 } 193 // TODO if needed 194 return 195 } 196 197 func (o SmartRollupRefute) MarshalBinary() ([]byte, error) { 198 buf := bytes.NewBuffer(nil) 199 err := o.EncodeBuffer(buf, mavryk.DefaultParams) 200 return buf.Bytes(), err 201 } 202 203 func (o *SmartRollupRefute) UnmarshalBinary(data []byte) error { 204 return o.DecodeBuffer(bytes.NewBuffer(data), mavryk.DefaultParams) 205 }