e=vm2:vm in evm

Posted mutourend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了e=vm2:vm in evm相关的知识,希望对你有一定的参考价值。

1. 引言

evm2 EVM平方:
e=vm² (pronounced evm-squared; the = is silent), also spelled evm2, is an evm that runs inside evm。

开源代码见:

当前使用 huff——为A low level assembly language for the EVM 汇编语言 实现了evm,使得可have a vm in evm:

  • run_huff.sh
  • test_huff.sh

同时,还有一些老接口:

  • 1)编译:【其中evm为go-ethereum中的一个工具】
    evm compile evm.easm
    
  • 2)运行:使用evm run或如下脚本:
    ./run.sh 0x<bytecode>
    
  • 3)调试:./disas.sh将编译evm2,然后展示反汇编结果,有助于理解debug。

2. e=vm2测试用例

注意:代码中若无return生命,将返回evm2的memory。

  • 1)用例1:返回0x33 * 2:
./test.sh 60336002025952
"00..0066"
  • 2)用例2:返回[0x00, 0x20, 0x40]:
./test.sh 595952595952595952
"..00..20..40"
  • 3)用例3:mstore8 & mstore:
./test_huff.sh 6040595360205952
"40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020"
  • 4)用例4:emit LOG0(abi.encode(uint256(-1), uint256(0))):【查看日志需运行evm --debug
# classic evm:
evm --debug --json --code 600019595260406000a0 run

# and for evm2:
evm --debug --json --code `huffc evm.huff --bin-runtime` --input 600019595260406000a0 run

#### LOGS ####
LOG0: 0000000000000000000000007265636569766572 bn=0 txi=0
00000000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00000010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

参考资料

[1] twitter evm-squared

以上是关于e=vm2:vm in evm的主要内容,如果未能解决你的问题,请参考以下文章

GUIForDebug

linux 实战经验

是否跨项目计算持续使用折扣?

kvm虚拟化网络管理

kvm虚拟化网络管理

kvm虚拟化网络管理