在进行区块链浏览器功能—合约验证的时候,深度研究了编译合约的字节码。
bytecode 一般说的 bytecode 通常指 creation bytecode ,包含 init + runtime bytecode
这里的 init 指的是构造函数等信息
runtime bytecode 指合约部署到区块链网络上后的一些指令集
部署合约 inputdate : 指 creation bytecode + 元数据信息 ,可以使用codeat函数获取
编译合约
这里使用 solc 命令行编译工具
compile type
1 2 3 4
| single file : solc --evm-version <VERSION> --bin-runtiem contract.sol multi-part files : standard-json input : solc --evm-version <VERSION> --standard-json eth__.json > out.json (不支持直接生成bytecode)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| jsonData, err := ioutil.ReadFile("out.json") if err != nil { log.Fatal("无法读取JSON文件:", err) }
// 解析JSON数据 var contractData ContractRuntimeBytecode err = json.Unmarshal(jsonData, &contractData) if err != nil { log.Fatal("解析JSON数据时出错:", err) }
// 提取EVM运行时字节码 runtimeBytecode := contractData.EVM.Bytecode.Object
|