最终目标是能够完整地理解已编译的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 60209E93FEFD3DD5CF1D6B3FBDC33DA1B020C5B880A51E8306A3F5FDF269122A
Loaded account for receiver 14F6D12ECEBB7606C528880AD8B97C25AB7D4AD9
COD