我看的是文档,但无法真正理解CREATE操作码的功能。我可以看出CREATE确实从内存块创建了一个新的智能契约,将gas值传递给这个新契约,然后返回。但是在返回之前,它是否执行新的合同?
这让我感到困惑,因为查看智能契约字节码的反汇编代码,在创建之后,我看不到任何调用,但我仍然看到对RETURNDATASIZE的调用,我认为只有在调用之后才会调用。没有呼叫,它从哪里得到返回的数据?
有什么启发吗?
发布于 2019-03-27 20:13:13
创建,在某种程度上,做一个内置的调用。实际上,传递给call的数据不是契约字节码,而是init字节码。
在执行CREATE操作码时,EVM在新契约的上下文中创建一个调用帧(例如,address(此)是新的契约地址)。这将执行传递给作为代码创建的数据,在更高级别的语言中,代码基本上是构造函数。在这个init文件的末尾,它returns是存储在国家trie中的合同的实际代码。
考虑它的最简单的方法,也是相当准确的,是Solidity编译器获取契约的所有执行代码,将其编译为字节码,并将其添加为构造函数末尾的返回语句。
https://ethereum.stackexchange.com/questions/68943
复制相似问题