Skip to content

Commit 6522865

Browse files
committed
add doctests for logging operations
1 parent 2bb268b commit 6522865

File tree

2 files changed

+179
-14
lines changed

2 files changed

+179
-14
lines changed

lib/evm/log_entry.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ defmodule EVM.LogEntry do
1818
1919
## Examples
2020
21-
iex> log = EVM.LogEntry.new(0, [0, 0, 0, 0], <<1>>)
21+
iex> EVM.LogEntry.new(0, [0, 0, 0, 0], <<1>>)
2222
%EVM.LogEntry{
2323
address: <<0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0>>,
2424
data: <<1>>,
2525
topics: [0, 0, 0, 0]
2626
}
2727
28-
iex> log = EVM.LogEntry.new( <<15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47, 109, 45, 108, 123, 94, 198>>, [0, 0, 0, 0], <<1>>)
28+
iex> EVM.LogEntry.new( <<15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47, 109, 45, 108, 123, 94, 198>>, [0, 0, 0, 0], <<1>>)
2929
%EVM.LogEntry{
3030
address: <<15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47, 109,
3131
45, 108, 123, 94, 198>>,

lib/evm/operation/logging.ex

Lines changed: 177 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,42 @@ defmodule EVM.Operation.Logging do
44
@doc """
55
Append log record with no topics.
66
7-
TODO: Implement opcode
8-
97
## Examples
108
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+
}
1143
"""
1244
@spec log0(Operation.stack_args(), Operation.vm_map()) :: Operation.op_result()
1345
def log0(args, vm_map) do
@@ -17,10 +49,43 @@ defmodule EVM.Operation.Logging do
1749
@doc """
1850
Append log record with one topic.
1951
20-
TODO: Implement opcode
21-
2252
## Examples
2353
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+
}
2489
"""
2590
@spec log1(Operation.stack_args(), Operation.vm_map()) :: Operation.op_result()
2691
def log1(args, vm_map) do
@@ -30,11 +95,46 @@ defmodule EVM.Operation.Logging do
3095
@doc """
3196
Append log record with two topics.
3297
33-
TODO: Implement opcode
34-
3598
## Examples
3699
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+
}
38138
"""
39139
@spec log2(Operation.stack_args(), Operation.vm_map()) :: Operation.op_result()
40140
def log2(args, vm_map) do
@@ -44,11 +144,41 @@ defmodule EVM.Operation.Logging do
44144
@doc """
45145
Append log record with three topics.
46146
47-
TODO: Implement opcode
48-
49147
## Examples
50148
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+
}
52182
"""
53183
@spec log3(Operation.stack_args(), Operation.vm_map()) :: Operation.op_result()
54184
def log3(args, vm_map) do
@@ -58,10 +188,45 @@ defmodule EVM.Operation.Logging do
58188
@doc """
59189
Append log record with four topics.
60190
61-
TODO: Implement opcode
62-
63191
## Examples
64192
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+
}
65230
"""
66231
@spec log4(Operation.stack_args(), Operation.vm_map()) :: Operation.op_result()
67232
def log4(args, vm_map) do

0 commit comments

Comments
 (0)