GiaoBear Blog

这里是《giao熊历险记》

0%

在进行区块链浏览器功能—合约验证的时候,深度研究了编译合约的字节码。

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

由于公司断电后开始迁移,马内不能准时送达,跑路的途中发觉需要有一个地方记载《Giao熊历险记》之生活及学习。

-- 第一篇博客由此诞生。