首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从创建字节码和构造函数参数中获得实际运行时字节码,而无需部署

如何从创建字节码和构造函数参数中获得实际运行时字节码,而无需部署
EN

Ethereum用户
提问于 2021-03-09 00:03:38
回答 1查看 1.1K关注 0票数 5

Solidity编译器的可能输出包括创建字节码和部署(运行时)字节码。但是,这个已编译的已部署字节码可能与实际部署在块链上的字节码不一样。如果契约需要构造函数参数来初始化不可变变量,则可能是这种情况。因此,如何使用上述构件(创建字节码、部署字节码、构造函数参数)并生成实际部署的字节码,而不实际部署它。一种可能的选择是部署到(本地) testnet,然后查看已部署的字节码,但这似乎是过头了。

好的,为了使事情更清楚,这是术语(我没有编出来:字节码、init代码、由bytedcode部署的字节码、创建字节码和运行时字节码之间有什么区别?):

deployed bytecode = runtime bytecode

actual deployed bytecode = actual runtime bytecode

这一问题涉及的事实是,有时:

deployed bytecode (as predicted by compilation) =/= actual deployed bytecode (after deployment)

事实上,当契约使用不可变变量时,最后一个公式通常适用。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2021-03-09 11:16:37

这个GitHub问题帮我找到了答案。基本上,我所需要的可以通过ethereumjs-vm模块来实现:

代码语言:javascript
运行
复制
const VM = require("ethereumjs-vm").default;
const BN = require("bn.js");
const vm = new VM();

vm.runCode({
    code: Buffer.from(creationBytecode + abiEncodedConstructorArguments, "hex"),
    gasLimit: new BN(...),
}).then(results => {
    const actualDeployedBytecode = results.returnValue.toString("hex");
    console.log(actualDeployedBytecode);
});
票数 5
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/94396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档