Polygon Mumbai链上CREATE2交易回滚原因排查咨询
CREATE2操作回滚的常见原因(排除目标地址已存在合约的情况)
初始化代码执行失败:CREATE2确定目标地址后,会部署合约并执行其构造函数。若构造函数存在逻辑错误——比如算术溢出、权限校验未通过、调用外部合约失败、操作超出Gas限制等——整个CREATE2调用会直接回滚。即便目标地址原本无合约,只要初始化代码执行出错,部署就会失败。
Gas配额不足:部署合约需要消耗Gas用于执行初始化代码和存储合约字节码。如果交易提供的Gas总量无法覆盖CREATE2操作的全部开销(包括构造函数执行的Gas消耗),会触发Out-of-Gas错误,导致交易回滚。
合约字节码无效:传入CREATE2的合约字节码不符合EVM规范(比如格式错误、包含无效操作码),EVM无法解析执行这段字节码,会直接回滚CREATE2操作。
链上状态瞬时冲突:尽管当前目标地址无合约,但同一区块内若有其他交易先于你的交易尝试部署到该地址(哪怕最终失败),可能引发链上状态的瞬时冲突,导致CREATE2回滚。这种情况在测试链上概率较低,但需考虑并发交易的影响。
构造函数重入/递归问题:若构造函数中调用外部合约,而外部合约又回调正在部署的合约,可能触发重入保护机制或导致递归调用栈溢出,进而造成CREATE2操作失败回滚。
内容的提问来源于stack exchange,提问作者Derek Chiang
相关产品推荐
相关产品推荐

