@@ -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