最终目标是能够完整地理解已编译的Solidity合同
1、执行
evm-tools 安装
https://github.com/CoinCulture/evm-tools/blob/master/INSTALL.md
/home/xue/go/bin/evm --debug --code 366020036101000a600035045b6001900380600c57 --input 05
不同字节码编译成不同EVM指令
1、基本:disam显示指定地址后面的汇编代码
echo 60056004016000526001601ff3 | disasm
evm --debug --code 60056004016000526001601ff3
2、输入
echo 60003560203501 | disasm
evm --debug --code 60003560203501 --input 00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000004
2、合约
字节码在evm部署后编译为EVM指令集
$ echo 6005600401 | evm-deploy | disasm
600580600b6000396000f36005600401
0 PUSH1 => 05
$ evm --debug --code 600580600b6000396000f36005600401
3、安全性
同一个合约每次在evm部署后生成的 合约地址不同
1、生成合约地址
// Contract Address: 1F2A98889594024BFFDA3311CBE69728D392C06D
$ evm --code $(echo "60056004016000526001601ff3" | evm-deploy) --datadir evm-data
// Contract Address: 14F6D12ECEBB7606C528880AD8B97C25AB7D4AD9
$ evm --code $(echo "60056004016000526001601ff3" | evm-deploy) --datadir evm-data
2、向合约发送交易
$ evm --to 14F6D12ECEBB7606C528880AD8B97C25AB7D4AD9 --datadir evm-data
Datadir already exists
Loading database
Loading root hash 60209E93FEFD3DD5CF1D6B3FBDC33DA1B020C5

本文详细探讨了EVM的工作原理,包括执行过程、合约创建与交互、安全性、异常处理以及内存和存储机制。讲解了EVM的编译器优化目标、交易费用、Solidity与EVM的联系、堆栈、内存、存储和执行模型。同时,介绍了信息调用、gas和费用机制,以及字节顺序和指令集。通过对EVM的深入分析,有助于理解以太坊智能合约的运行机制。
最低0.47元/天 解锁文章
2369

被折叠的 条评论
为什么被折叠?



