@@ -4,10 +4,42 @@ defmodule EVM.Operation.Logging do
4
4
@ doc """
5
5
Append log record with no topics.
6
6
7
- TODO: Implement opcode
8
-
9
7
## Examples
10
8
9
+ iex> env = %EVM.ExecEnv{
10
+ ...> account_interface: %EVM.Interface.Mock.MockAccountInterface{},
11
+ ...> address: 87579061662017136990230301793909925042452127430,
12
+ ...> block_interface: %EVM.Interface.Mock.MockBlockInterface{}
13
+ ...> }
14
+ iex> machine_state = %EVM.MachineState{
15
+ ...> active_words: 1,
16
+ ...> gas: 99351,
17
+ ...> memory: <<255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
18
+ ...> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
19
+ ...> 255, 255, 255, 255>>,
20
+ ...> previously_active_words: 0,
21
+ ...> program_counter: 40,
22
+ ...> stack: []
23
+ ...> }
24
+ iex> sub_state = %EVM.SubState{logs: [], refund: 0, suicide_list: []}
25
+ iex> vm_map = %{sub_state: sub_state, exec_env: env, machine_state: machine_state}
26
+ iex> EVM.Operation.Logging.log0([0, 32], vm_map)
27
+ %{
28
+ sub_state: %EVM.SubState{
29
+ logs: [
30
+ %EVM.LogEntry{
31
+ address: <<15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47,
32
+ 109, 45, 108, 123, 94, 198>>,
33
+ data: <<255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
34
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
35
+ 255, 255, 255, 255, 255>>,
36
+ topics: []
37
+ }
38
+ ],
39
+ refund: 0,
40
+ suicide_list: []
41
+ }
42
+ }
11
43
"""
12
44
@ spec log0 ( Operation . stack_args ( ) , Operation . vm_map ( ) ) :: Operation . op_result ( )
13
45
def log0 ( args , vm_map ) do
@@ -17,10 +49,43 @@ defmodule EVM.Operation.Logging do
17
49
@ doc """
18
50
Append log record with one topic.
19
51
20
- TODO: Implement opcode
21
-
22
52
## Examples
23
53
54
+ iex> env = %EVM.ExecEnv{
55
+ ...> account_interface: %EVM.Interface.Mock.MockAccountInterface{},
56
+ ...> address: 87579061662017136990230301793909925042452127430,
57
+ ...> block_interface: %EVM.Interface.Mock.MockBlockInterface{}
58
+ ...> }
59
+ iex> machine_state = %EVM.MachineState{
60
+ ...> active_words: 1,
61
+ ...> gas: 99351,
62
+ ...> memory: <<170, 187, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
63
+ ...> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
64
+ ...> 255, 255, 204, 221>>,
65
+ ...> previously_active_words: 0,
66
+ ...> program_counter: 40,
67
+ ...> stack: []
68
+ ...> }
69
+ iex> sub_state = %EVM.SubState{logs: [], refund: 0, suicide_list: []}
70
+ iex> vm_map = %{sub_state: sub_state, exec_env: env, machine_state: machine_state}
71
+ iex> args = [0, 32, 115792089237316195423570985008687907853269984665640564039457584007913129639935]
72
+ iex> EVM.Operation.Logging.log1(args, vm_map)
73
+ %{
74
+ sub_state: %EVM.SubState{
75
+ logs: [
76
+ %EVM.LogEntry{
77
+ address: <<15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47,
78
+ 109, 45, 108, 123, 94, 198>>,
79
+ data: <<170, 187, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
80
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
81
+ 255, 255, 255, 204, 221>>,
82
+ topics: [115792089237316195423570985008687907853269984665640564039457584007913129639935]
83
+ }
84
+ ],
85
+ refund: 0,
86
+ suicide_list: []
87
+ }
88
+ }
24
89
"""
25
90
@ spec log1 ( Operation . stack_args ( ) , Operation . vm_map ( ) ) :: Operation . op_result ( )
26
91
def log1 ( args , vm_map ) do
@@ -30,11 +95,46 @@ defmodule EVM.Operation.Logging do
30
95
@ doc """
31
96
Append log record with two topics.
32
97
33
- TODO: Implement opcode
34
-
35
98
## Examples
36
99
37
-
100
+ iex> env = %EVM.ExecEnv{
101
+ ...> account_interface: %EVM.Interface.Mock.MockAccountInterface{},
102
+ ...> address: 87579061662017136990230301793909925042452127430,
103
+ ...> block_interface: %EVM.Interface.Mock.MockBlockInterface{}
104
+ ...> }
105
+ iex> machine_state = %EVM.MachineState{
106
+ ...> active_words: 1,
107
+ ...> gas: 99351,
108
+ ...> memory: <<170, 187, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
109
+ ...> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
110
+ ...> 255, 255, 204, 221>>,
111
+ ...> previously_active_words: 0,
112
+ ...> program_counter: 40,
113
+ ...> stack: []
114
+ ...> }
115
+ iex> sub_state = %EVM.SubState{logs: [], refund: 0, suicide_list: []}
116
+ iex> vm_map = %{sub_state: sub_state, exec_env: env, machine_state: machine_state}
117
+ iex> args = [0, 32,
118
+ ...> 115792089237316195423570985008687907853269984665640564039457584007913129639935,
119
+ ...> 115792089237316195423570985008687907853269984665640564039457584007913129639935]
120
+ iex> EVM.Operation.Logging.log1(args, vm_map)
121
+ %{
122
+ sub_state: %EVM.SubState{
123
+ logs: [
124
+ %EVM.LogEntry{
125
+ address: <<15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47,
126
+ 109, 45, 108, 123, 94, 198>>,
127
+ data: <<170, 187, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
128
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
129
+ 255, 255, 255, 204, 221>>,
130
+ topics: [115792089237316195423570985008687907853269984665640564039457584007913129639935,
131
+ 115792089237316195423570985008687907853269984665640564039457584007913129639935]
132
+ }
133
+ ],
134
+ refund: 0,
135
+ suicide_list: []
136
+ }
137
+ }
38
138
"""
39
139
@ spec log2 ( Operation . stack_args ( ) , Operation . vm_map ( ) ) :: Operation . op_result ( )
40
140
def log2 ( args , vm_map ) do
@@ -44,11 +144,41 @@ defmodule EVM.Operation.Logging do
44
144
@ doc """
45
145
Append log record with three topics.
46
146
47
- TODO: Implement opcode
48
-
49
147
## Examples
50
148
51
-
149
+ iex> env = %EVM.ExecEnv{
150
+ ...> account_interface: %EVM.Interface.Mock.MockAccountInterface{},
151
+ ...> address: 87579061662017136990230301793909925042452127430,
152
+ ...> block_interface: %EVM.Interface.Mock.MockBlockInterface{}
153
+ ...> }
154
+ iex> machine_state = %EVM.MachineState{
155
+ ...> active_words: 1,
156
+ ...> gas: 99351,
157
+ ...> memory: <<170, 187, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
158
+ ...> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
159
+ ...> 255, 255, 204, 221>>,
160
+ ...> previously_active_words: 0,
161
+ ...> program_counter: 40,
162
+ ...> stack: []
163
+ ...> }
164
+ iex> sub_state = %EVM.SubState{logs: [], refund: 0, suicide_list: []}
165
+ iex> vm_map = %{sub_state: sub_state, exec_env: env, machine_state: machine_state}
166
+ iex> args = [1, 0, 0, 0, 0]
167
+ iex> EVM.Operation.Logging.log1(args, vm_map)
168
+ %{
169
+ sub_state: %EVM.SubState{
170
+ logs: [
171
+ %EVM.LogEntry{
172
+ address: <<15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47,
173
+ 109, 45, 108, 123, 94, 198>>,
174
+ data: "",
175
+ topics: [0, 0, 0]
176
+ }
177
+ ],
178
+ refund: 0,
179
+ suicide_list: []
180
+ }
181
+ }
52
182
"""
53
183
@ spec log3 ( Operation . stack_args ( ) , Operation . vm_map ( ) ) :: Operation . op_result ( )
54
184
def log3 ( args , vm_map ) do
@@ -58,10 +188,45 @@ defmodule EVM.Operation.Logging do
58
188
@ doc """
59
189
Append log record with four topics.
60
190
61
- TODO: Implement opcode
62
-
63
191
## Examples
64
192
193
+ iex> env = %EVM.ExecEnv{
194
+ ...> account_interface: %EVM.Interface.Mock.MockAccountInterface{},
195
+ ...> address: 87579061662017136990230301793909925042452127430,
196
+ ...> block_interface: %EVM.Interface.Mock.MockBlockInterface{}
197
+ ...> }
198
+ iex> machine_state = %EVM.MachineState{
199
+ ...> active_words: 1,
200
+ ...> gas: 99351,
201
+ ...> memory: <<127, 170, 187, 255, 255, 255, 255, 255, 255, 255, 255, 255,
202
+ ...> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
203
+ ...> 255, 255, 255, 255, 204, 221, 96, 0, 82, 96, 0, 96, 0, 96, 0, 96, 0, 96,
204
+ ...> 1, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
205
+ ...> 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
206
+ ...> 255, 255, 255, 255, 164>>,
207
+ ...> previously_active_words: 0,
208
+ ...> program_counter: 40,
209
+ ...> stack: []
210
+ ...> }
211
+ iex> sub_state = %EVM.SubState{logs: [], refund: 0, suicide_list: []}
212
+ iex> vm_map = %{sub_state: sub_state, exec_env: env, machine_state: machine_state}
213
+ iex> args = [115792089237316195423570985008687907853269984665640564039457584007913129639935,
214
+ ...> 1, 0, 0, 0, 0]
215
+ iex> EVM.Operation.Logging.log1(args, vm_map)
216
+ %{
217
+ sub_state: %EVM.SubState{
218
+ logs: [
219
+ %EVM.LogEntry{
220
+ address: <<15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47,
221
+ 109, 45, 108, 123, 94, 198>>,
222
+ data: <<0>>,
223
+ topics: [0, 0, 0, 0]
224
+ }
225
+ ],
226
+ refund: 0,
227
+ suicide_list: []
228
+ }
229
+ }
65
230
"""
66
231
@ spec log4 ( Operation . stack_args ( ) , Operation . vm_map ( ) ) :: Operation . op_result ( )
67
232
def log4 ( args , vm_map ) do
0 commit comments