This project aims to implement a fully compliant EVM in Lua scripting language. It provides scripts to bind it to a Redis database, enabling it to run EVM functions at scale.
- Install Lua, the scripting language.
brew install lua
on Mac. - Install luarocks, a package manager for Lua:
brew install luarocks
- Install Redis and run
redis-server
to start the db. - Run
./load.sh
to loadevm.lua
script into Redis, with some test data.
- Create and deploy Lua functions that interprets EVM bytecode
- Feed account storage based on initial list and block number
- Implement basic benchmark scripts
- Nested call context
- Gas metering
00 ✅ |
01 ✅ |
02 ✅ |
03 ✅ |
04 ✅ |
05 ✅ |
06 ✅ |
07 |
08 |
09 |
0A ✅ |
0B |
||||
10 ✅ |
11 ✅ |
12 ✅ |
13 ✅ |
14 ✅ |
15 ✅ |
16 ✅ |
17 ✅ |
18 |
19 ✅ |
1A |
1B |
1C ✅ |
1D |
||
20 ✅ |
|||||||||||||||
30 ✅ |
31 |
32 |
33 ✅ |
34 ✅ |
35 ✅ |
36 ✅ |
37 |
38 |
39 ✅ |
3A ✅ |
3B |
3C |
3D ✅ |
3E ✅ |
3F |
40 ✅ |
41 |
42 ✅ |
43 ✅ |
44 |
45 |
46 ✅ |
47 |
48 |
49 |
4A |
|||||
50 ✅ |
51 ✅ |
52 ✅ |
53 ✅ |
54 ✅ |
55 ✅ |
56 ✅ |
57 ✅ |
58 |
59 |
5A ✅ |
5B ✅ |
5C ✅ |
5D ✅ |
5E |
5F ✅ |
60 ✅ |
61 ✅ |
62 ✅ |
63 ✅ |
64 ✅ |
65 ✅ |
66 ✅ |
67 ✅ |
68 ✅ |
69 ✅ |
6A ✅ |
6B ✅ |
6C ✅ |
6D ✅ |
6E ✅ |
6F ✅ |
70 ✅ |
71 ✅ |
72 ✅ |
73 ✅ |
74 ✅ |
75 ✅ |
76 ✅ |
77 ✅ |
78 ✅ |
79 ✅ |
7A ✅ |
7B ✅ |
7C ✅ |
7D ✅ |
7E ✅ |
7F ✅ |
80 ✅ |
81 ✅ |
82 ✅ |
83 ✅ |
84 ✅ |
85 ✅ |
86 ✅ |
87 ✅ |
88 ✅ |
89 ✅ |
8A ✅ |
8B ✅ |
8C ✅ |
8D ✅ |
8E ✅ |
8F ✅ |
90 ✅ |
91 ✅ |
92 ✅ |
93 ✅ |
94 ✅ |
95 ✅ |
96 ✅ |
97 ✅ |
98 ✅ |
99 ✅ |
9A ✅ |
9B ✅ |
9C ✅ |
9D ✅ |
9E ✅ |
9F ✅ |
A0 ✅ |
A1 ✅ |
A2 ✅ |
A3 ✅ |
A4 |
|||||||||||
B0 |
B1 |
B2 |
|||||||||||||
F0 |
F1 |
F2 |
F3 ✅ |
F4 |
F5 |
FA ✅ |
FD ✅ |
FE ✅ |
FF |
sudo yum install wget -y
sudo yum install tcl -y
sudo yum install gcc -y
sudo yum install centos-release-scl -y
sudo yum install devtoolset-9-gcc devtooset-g-gcc-c++ devtoolset-9-binutils -y
sudo yum install openssl-devel* -y
Use Redis triggers to do garbage collection: https://redis.io/docs/interact/programmability/triggers-and-functions/examples/
EVM.init should support:
- new attributes: calldata and depth, starting at 0/1 for each new CALL opcode-type, instantiate a new EVM.init, passing arguments.
- RETURN should return data from memory, kill the execution context branch. decrement depth. If depth == top depth, return function to external
cd tests fswatch -o ../ | xargs -n1 -I{} ./test-arithmetic.sh