1

据我所知,在创建合约时,init字段中的部署代码会执行一次,并在返回实际字节码后被丢弃,与此同时,帐户状态中的codeHash字段也会相应更新,但在哪里这些实际的字节码存储了吗?

我试图从黄皮书的执行模型部分找到一些相关信息:

它不是将程序代码存储在一般可访问的内存或存储器中,而是单独存储在只能通过专门指令交互的虚拟 ROM 中。

但是我不太明白,并且仍然不知道在调用合约调用时如何在执行环境中检索和提供实际的字节码。

希望能在这里得到一些见解,谢谢!

4

1 回答 1

0

我想说实际字节码的存储方式是以太坊节点的实现细节。节点同步所有事务,因此它们从 inits 读取所有字节码。然后,只要交易正确执行并且状态哈希正确更改,节点如何在内部记录保存哪个地址包含您不需要关心的字节码。

有一些指令,如获取代码大小来检查地址是否包含字节码,但 AFAIK 单个字节码指令无法从 Solidity / EVM 访问。

于 2020-06-25T08:11:44.643 回答