以太坊合约的实际字节码在哪里?

Where do the actual bytecodes of an Ethereum contract reside?

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

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

Rather than storing program code in generally-accessible memory or storage, it is stored separately in a virtual ROM interactable only through a specialised instruction.

但我不是很明白,对于调用合约调用时如何在执行环境中检索和提供实际字节码仍然一无所知。

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

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

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