﻿---
title: "如何验证 CREATE2 合约地址"
description: "CREATE2 根据部署者、salt 和初始化代码哈希预测地址，但验证仍需链特定的工厂、字节码、部署、代理和所有权证据。"
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 如何验证 CREATE2 合约地址

> 仅供教育参考，不构成投资或安全建议。预测地址、空账户、校验和或工厂标签，都不能证明部署、代码、控制权、所有权或安全性。

<a id="answer"></a>

## 直接答案

CREATE2 根据特定部署合约、`32-byte salt` 和精确 `init_code` 的哈希预测创建出的地址。协议公式是 `address = keccak256(0xff || deployer(20 bytes) || salt(32 bytes) || keccak256(init_code))[12:]`：对 `85-byte preimage` 做哈希并保留最后 `20 bytes`。这里的 deployer 是执行 CREATE2 的工厂，不一定是调用工厂的钱包。

`init_code` 是创建字节码加上 ABI 编码的构造器参数；它只执行一次并生成运行时字节码。编译器版本、优化器设置、链接库、元数据、构造器参数或工厂入口都可能改变哈希。运行时代码是输出，不是 CREATE2 输入。只有部署者、salt、初始化代码、EVM 规则和链状态都相同，地址才具有可比性。

反事实地址在代码存在前可以收款，但尚无经过验证的控制逻辑。预测不等于部署、所有权、授权、最终性或安全性。应在目标链和区块上核验工厂字节码与 calldata、回执和事件、`eth_getCode`、nonce、存储、余额、代理实现、初始化器和所有者。

<a id="mechanism"></a>

## 运作机制

锁定链或域、分叉规则、RPC 与区块、工厂地址及运行时哈希、原始 salt、精确初始化字节、构造器编码、编译器和链接库。重新计算 `keccak256(init_code)` 与 `85-byte preimage`，核对 ABI 填充、字节序、校验和以及最后 20 字节的提取。

然后解码工厂调用和 value，确认预期工厂、入口、salt 域、构造器、所有者和初始化器都已绑定。对最小代理，应哈希包含实现地址的克隆创建字节码，而不是实现的运行时字节码。对代理，应分别验证实现、管理员、存储槽和升级策略。

EIP-684 规定目标 nonce 非零或代码非空时创建必须回退。构造器失败也不会留下成功部署。之后的 `SELFDESTRUCT` 与重新部署语义取决于分叉规则；不要依赖“代码总能随意替换”的旧说法。

部署证据分层包括：交易纳入与状态、发出事件、代码与 nonce、存储与余额，最后是安全或最终确定的链状态。RPC 成功响应或预测校验和不能替代回执和状态验证。跨链复制的地址可能有不同代码、所有者、存储和资产。

按以下流程执行：

1. 固定链、分叉、RPC 和区块；工厂或部署者地址与运行时哈希；salt 字节；初始化代码、构造器参数、编译器和链接库。
2. 计算初始化代码哈希和精确 CREATE2 前像，检查宽度、填充、`0xff`、最后 20 字节和校验和。
3. 解码工厂 calldata 和 value；比较预测地址、所有者、初始化器、代理目标和预期权限。
4. 在正确链上核验回执、状态、事件、`eth_getCode`、nonce、余额和存储；记录未部署与碰撞状态。
5. 检查工厂、代理、实现、管理员、初始化器、升级和单例工厂假设，包括 ERC-1167 目标。
6. 测试构造器失败、nonce/代码碰撞、分叉敏感的重新部署、嵌套工厂以及链域或重放假设。
7. 在注资或签名前核对人类可读金额与原始金额；部署后监控代码哈希、所有者、实现、角色、事件和最终性。

<a id="example"></a>

## 示例

- **EIP-1014 向量：** 部署者 `0x0000000000000000000000000000000000000000`、全零 salt、初始化代码 `0x00` 得到 `0x4D1A2e2bB4F88F0250f26Ffff098B0b30B26BF38`。
- **构造器绑定：** 部署者和 salt 固定时，改变一个 ABI 编码的构造器参数会改变 `keccak256(init_code)`，从而改变预测地址；哈希运行时字节码会验证错误对象。
- **碰撞：** 若目标 nonce 大于 `0` 或代码非空，依据 EIP-684，CREATE2 必须回退。代码为零、nonce 为零但已有资金的地址只是反事实地址，仍未验证。
- **最小代理：** ERC-1167 克隆地址哈希包含实现地址的克隆创建字节码。改为哈希实现运行时字节码会得到无关的预测结果。

<a id="risks"></a>

## 风险

- 使用了错误的工厂或部署者。
- salt 宽度、填充、字节序或域编码错误。
- 将初始化代码与运行时字节码混淆。
- 构造器参数遗漏或顺序错误。
- 工厂入口、value 或 calldata 不一致。
- 代理或 delegate 目标不是预期实现。
- 链、分叉或 EVM 域不同。
- 现有 nonce 导致碰撞。
- 现有代码导致碰撞。
- 采用过时的 SELFDESTRUCT 重新部署假设。
- 嵌套 CREATE2 改变有效部署者。
- 混淆 CREATE 与 CREATE2 公式。
- 未核验 ERC-1167 的实现目标。
- 未验证单例工厂地址或部署假设。
- 实现升级或管理员控制改变行为。
- 编译器、元数据、库或源制品不同。
- 混淆回执、内存池、失败和最终性状态。
- 校验和或 UI 污染隐藏错误地址。
- 预充值反事实资金没有所有权证明。
- EIP-7702、重放、gas、拒绝服务或陈旧监控假设错误。

<a id="misconceptions"></a>

## 常见误区

- **“空地址就是安全或已拥有。”** 它可能没有代码或经过验证的控制者。
- **“地址由 salt 单独决定。”** 部署者和初始化代码哈希同样是绑定条件。
- **“CREATE2 哈希运行时字节码。”** 它哈希的是包含构造器参数的创建代码。
- **“两条链上的相同地址意味着代码和控制权相同。”** 必须分别核验链状态和部署。
- **“成功预测证明了部署和安全。”** 只有回执、代码、状态、权限和最终性才能确定已存在的对象。

<a id="related"></a>

## 相关主题

- [代理合约](/zh-cn/crypto/proxy-contract/)
- [智能合约](/zh-cn/crypto/smart-contract/)
- [代币合约地址验证](/zh-cn/crypto/token-contract-verification/)

<a id="sources"></a>

## 来源

- [EIP-1014: Skinny CREATE2](https://eips.ethereum.org/EIPS/eip-1014) - Ethereum Improvement Proposals (查阅日期: 2026-08-13)
- [EIP-684: Revert creation in case of collision](https://eips.ethereum.org/EIPS/eip-684) - Ethereum Improvement Proposals (查阅日期: 2026-08-13)
- [Salted contract creations / CREATE2](https://docs.soliditylang.org/en/latest/control-structures.html#salted-contract-creations-create2) - Solidity (查阅日期: 2026-08-13)
- [ERC-1167: Minimal Proxy Contract](https://eips.ethereum.org/EIPS/eip-1167) - Ethereum Improvement Proposals (查阅日期: 2026-08-13)
- [ERC-2470: Singleton Factory](https://eips.ethereum.org/EIPS/eip-2470) - Ethereum Improvement Proposals (查阅日期: 2026-08-13)
- [Create2](https://docs.openzeppelin.com/contracts/5.x/api/utils#Create2) - OpenZeppelin (查阅日期: 2026-08-13)
- [EIP-155: Simple replay attack protection](https://eips.ethereum.org/EIPS/eip-155) - Ethereum Improvement Proposals (查阅日期: 2026-08-13)
- [Contract Metadata](https://docs.soliditylang.org/en/latest/metadata.html) - Solidity (查阅日期: 2026-08-13)

Source: https://wiki.fcontext.com/zh-cn/crypto/create2-address-verification/index.mdx
