-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathprogram.schema.yaml
More file actions
145 lines (133 loc) · 3.17 KB
/
program.schema.yaml
File metadata and controls
145 lines (133 loc) · 3.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
$schema: "https://json-schema.org/draft/2020-12/schema"
$id: "schema:ethdebug/format/program"
title: ethdebug/format/program
description: |
Debugging information about a particular bytecode in a compilation.
type: object
properties:
compilation:
title: Compilation reference by ID
description: |
A reference to the compilation as an `{ "id": ... }` object.
$ref: "schema:ethdebug/format/materials/reference"
contract:
type: object
properties:
name:
type: string
definition:
$ref: "schema:ethdebug/format/materials/source-range"
required:
- definition
environment:
title: Bytecode execution environment
description: |
Whether this bytecode is for contract creation or runtime calls.
type: string
enum:
- call
- create
context:
description: |
The context known to exist prior to the execution of the first
instruction in the bytecode.
$ref: "schema:ethdebug/format/program/context"
instructions:
type: array
description: |
The full array of instructions for the bytecode.
items:
$ref: "schema:ethdebug/format/program/instruction"
additionalItems: false
required:
- contract
- environment
- instructions
examples:
- # Incrementing a storage counter
#
# This example represents the call bytecode for the following pseudo-code:
# ```
# contract Incrementer;
#
# storage {
# [0] storedValue: uint256;
# };
#
# code {
# let localValue = storedValue;
# storedValue += 1;
# value = tmp;
# };
# ```
contract:
name: "Incrementer"
definition:
source:
id: 0
environment: call
context:
variables:
- &stored-value
identifier: storedValue
type:
kind: uint
bits: 256
pointer:
location: storage
slot: 0
instructions:
- offset: 0
operation:
mnemonic: PUSH0
context:
variables:
- *stored-value
- offset: 1
operation:
mnemonic: SLOAD
context:
variables:
- *stored-value
- &local-value
identifier: localValue
type:
kind: uint
bits: 256
pointer:
location: stack
slot: 0
- offset: 2
operation:
mnemonic: PUSH1
arguments: ["0x01"]
context:
variables:
- *stored-value
- <<: *local-value
pointer:
location: stack
slot: 1
- offset: 4
operation:
mnemonic: ADD
context:
variables:
- *stored-value
- *local-value
- offset: 5
operation:
mnemonic: PUSH0
context:
variables:
- *stored-value
- <<: *local-value
pointer:
location: stack
slot: 1
- offset: 6
operation:
mnemonic: SSTORE
context:
variables:
- *stored-value