跳到正文

研究指南

加密现货研究

CREATE2地址:预存资产不证明钱包已经部署

CREATE2预测地址可以在目标合约部署之前收到资产。有余额不证明部署可行、初始化成功,也不证明预期owner能控制资产。地址公式与部署生命周期应分别核验。

空代码也不自动说明它是普通私钥账户。可能是未部署的预期合约地址、其他账户历史,或暂未解决情形。只有余额与一次当前代码查询,不足以完成分类。

重建地址输入

EIP1014的Specification与Clarifications部分定义用部署地址、salt与初始化代码哈希构造CREATE2地址,并区分初始化代码与其输出的运行代码,说明目标nonce非零或代码非空时的碰撞条件。

公式取Keccak256结果最后二十字节;外层输入依次为单字节0xff、二十字节部署地址、三十二字节salt和初始化代码的三十二字节哈希。因此外层前映像长度为一加二十加三十二加三十二,等于八十五字节,与初始化字节原长度无关。

保存真实字节,不能只留工厂品牌或可读salt。含十六进制字符的文本不同于它所代表的字节,也不能把库中另一种SHA3-256静默替代以太坊使用的Keccak256。算法名称相近不保证同一输出。

工厂字段具体指什么

应识别相关执行上下文中实际执行CREATE2的地址。界面交易接收者或代理实现标签不自动就是该字段,保留真实部署路径,或明确路径尚未核实。

初始化字节必须完整,包括编码构造参数。若预期owner编码在里面,更改owner可能改变初始化哈希与最终地址;只比运行模板会漏掉这个区别。

公式没有单列链ID字段,因此两个兼容网络相同输入可得相同地址,但不证明工厂状态、代码依赖、资产身份或控制权相同。跨网地址一致只是派生观察,不能成为跨网权利一致的替代材料。

假设主例:预存五ETH

设已启用CREATE2的虚构网络中,工厂F、salt S、初始化字节I推导地址A。确切输入留在私有证据包,文中符号不代表真实钱包或可直接执行指令。

H零时,A有五ETH、代码为空、nonce零。经过身份确认的项目声明称它是预期钱包地址,但尚未取得成功创建轨迹或owner政策证据。

阶段A余额代码与创建证据能支持的说法
H零预存五ETH空代码、nonce零指定地址观察到价值
H一创建尝试失败本例仍五ETH尝试回滚,无结果代码尚未建立部署成功
H二另行成功创建无其他流时仍五ETH创建成功且结果代码核实此代码现存在A
控制复查不由余额确定另查初始化和权限仅支持已核政策

假设期间没有向A另付价值、由A负担手续费或其他余额变动,所以H二五ETH不是部署收益,它在H零已存在。不能将合约开始运行时的初始余额全记为新收到资金。

地址公式与五ETH都不证明工厂有可用路径用I、S创建。工厂权限、构造要求、gas和环境依赖仍需证据。计算器生成合理地址,不能代替这些检查。

若尝试失败但地址余额未变,也不能从“钱还在”推断下一次必能成功。失败的具体阶段决定还缺权限、字节、资源还是条件;未查原因应保持未知。

创建与控制两种证据

沿实际执行路径与结果状态检查创建,区分应用请求、CREATE2尝试、初始化成功及预期运行代码。外层交易成功不必然证明每个内部创建都成功,需找到相关子调用或最终状态。

随后检查owner初始化和移动资产的实际函数。非空运行字节码说明代码存在,不证明预期人有权限。owner设错或没有适用资产释放路径的合约,可以创建成功却仍不满足“可控钱包”主张。

模拟是条件证据,保存输入状态及假设,不能称模拟成功为已经部署。后续工厂、环境或依赖改变,也可能使先前模拟条件不再成立。历史与当前模拟应各留结果,不覆盖成单一标签。

不同边界:成功创建也可能留下空运行代码

初始化可以结束却不返回有用运行代码,因此空代码本身不证明从未成功创建。应结合nonce、历史轨迹与当时规则判断,不能只凭钱包界面将其叫未部署。

按EIP1014所述碰撞条件,目标nonce非零即使当前代码为空,也可能阻止再创建;预存余额本身则不是那里列出的碰撞判据。余额、代码、nonce因此必须分栏。

不能由此给出普遍恢复结论。历史销毁规则和其他账户变化需各自版本调查。本题只建立“地址推导”与“可用已部署钱包”之间需要什么材料,而不提供实际部署或资金恢复教程。

初始化字节与运行字节别混

地址公式哈希I,不表示I就是以后代码查询返回的运行字节。直接比较两个哈希,可能在初始化完全符合规则时制造部署不一致。应在哈希旁标对象角色:完整初始化输入、其哈希、返回运行代码,以及实际代码查询结果,不能只保存几串没有名字的摘要。

初始化若读取外部状态,模拟或历史重放还应保留依赖。初始化字节相同,不单独证明所有环境都返回相同运行代码或owner设置。公式固定的是地址构造,预期行为仍需执行证据。

如果只有计算地址,没有I原始字节,研究者甚至不能独立重建其输入哈希。此时可保留项目提供的预测地址,却应把派生核验标未完成,而非拿地址长度正确或已有余额当公式通过。之后补到原始输入再追加验证即可。

地址与控制核验表

检查保留内容失败含义
固定网络规则链身份、启用背景地址相同不说明状态相同
识别部署地址实际执行上下文工厂标签不够
重建公式salt、完整初始化字节、算法参数改变可指另一地址
观察预存同块余额、nonce、代码余额不证明部署
核创建轨迹、结果、运行身份尝试或模拟不等于完成
核控制初始化与实际授权路径代码存在不证明预期owner

工厂政策、初始化字节更正、创建尝试或历史状态补回后,应重开记录。分别发布派生地址、已见资产、部署和控制状态,既保存预存事实,也不把未来钱包承诺当成目前可运行托管安排。

常见问题

向预测地址转资产是否证明钱包已经存在?

不是。它能证明地址有资产,创建与控制仍可能未知。

空代码是否保证再次CREATE2会成功?

不保证。nonce碰撞、工厂权限和初始化条件同样重要。

相关阅读