我正在尝试从debug_traceTransaction事务跟踪中的操作码中看到智能契约创建。但是创建契约的事务的痕迹似乎不包括CREATE操作码。
示例:
CryptoKitties的核心合同是:0x06012c8cf97BEaD5deAe237070F9587f8E7A266d
它是用以下事务创建的:0x691f348ef11e9ef95d540a2da2c5f38e36072619aa44db0827e1b8a276f120f4
根据黄纸第37f页( CREATE ),我希望看到在D4或CREATE2操作码所指示的事务跟踪中创建合同。我使用的Python代码是:
from web3 import Web3
tx= "0x691f348ef11e9ef95d540a2da2c5f38e36072619aa44db0827e1b8a276f120f4"
web3 = Web3.HTTPProvider("endpoint")
trace = web3.make_request('debug_traceTransaction', [tx])输出跟踪相当长,但不包括CREATE或CREATE2。
我是使用了错误的事务还是错误的调试跟踪?如何使用CREATE或CREATE2操作码(例如,对于CryptoKitties的核心合同)找到跟踪?
发布于 2022-12-14 00:23:39
为什么在契约创建事务的跟踪中看不到CREATE或CREATE2操作码?
因为该契约不是使用CREATE或CREATE2操作码创建的,所以它是通过在事务的“To”字段中发送nil来创建的。要查看CREATE2操作码签出UniswapV3PoolDeployer合同的示例,它使用CREATE2操作码。
发布于 2022-12-14 05:53:48
如@Nulik的回答所述,问题中的合同是由EOA创建的。
CREATE和CREATE2操作码是合同如何创建另一个契约的方法。
EOA通过将事务“发送到”空地址来创建契约,但“输入数据”是创建契约的“初始化EVM代码”。
在黄皮书(目前的柏林版本),这是描述在节7. CONTRACT CREATION。在以太扫描中,您可以通过“单击查看更多”来查看事务的“输入数据”。
https://ethereum.stackexchange.com/questions/141154
复制相似问题