# CREATE2: predictable contract addresses and their limits

CREATE2 derives a prospective contract address from the deploying address, a salt and the hash of initialization code. This makes an address predictable before deployment when those inputs are fixed. Prediction does not prove deployment occurred, establish who controls the resulting contract or guarantee the same behavior on every chain.

Evidence: [Skinny CREATE2](https://eips.ethereum.org/EIPS/eip-1014)

Canonical: https://degreesofsatoshi.com/encyclopedia/create2-contract-addresses/
Published: 2026-10-02
Substantively modified: 2026-10-02
Independently verified by an automated reviewer: 2026-10-02T18:12:41.505Z
Data current through: 2026-10-02

AI-assisted research and drafting with a separate automated source-verification pass; no external expert or named human review is implied.

## Key facts

- **Inputs:** The formula commits to deployer, salt and initialization-code hash. ([Skinny CREATE2](https://eips.ethereum.org/EIPS/eip-1014))
- **Initialization:** Initialization code executes to produce the deployed runtime code. ([Skinny CREATE2](https://eips.ethereum.org/EIPS/eip-1014))
- **Collision:** Creation fails when the destination already has nonzero nonce or nonempty code under the specified collision rules. ([Skinny CREATE2](https://eips.ethereum.org/EIPS/eip-1014))

## Predict an address from a complete set of inputs

A factory can calculate where a contract will be created before it submits deployment. Changing the salt, deployer or initialization bytes changes the address calculation.

The user-facing factory address and the actual deploying context must be identified correctly. A UI prediction without its inputs is difficult to reproduce.

Evidence: [Skinny CREATE2](https://eips.ethereum.org/EIPS/eip-1014)

## An address can be known before code exists

A counterfactual account can have a planned address while no runtime code is yet present there. Querying code at a particular block helps distinguish the planned destination from an already deployed contract.

Sending assets to an undeployed address relies on the intended deployment path remaining available and correctly controlled. The address alone cannot establish that recoverability.

Evidence: [Skinny CREATE2](https://eips.ethereum.org/EIPS/eip-1014); [Ethereum JSON-RPC](https://ethereum.org/en/developers/docs/apis/json-rpc/)

## Matching addresses do not guarantee matching state

The CREATE2 address formula does not include a chain ID. Matching formula inputs can produce the same address on different networks, but those networks have independent state and deployments.

Initialization code can also depend on execution context. Inspect the actual deployed runtime code and configuration rather than equating address equality with identical trust assumptions.

Evidence: [Skinny CREATE2](https://eips.ethereum.org/EIPS/eip-1014); [Ethereum accounts](https://ethereum.org/en/developers/docs/accounts/); [Solidity: Delegatecall and Libraries](https://docs.soliditylang.org/en/v0.8.30/introduction-to-smart-contracts.html)

## Questions

### Does CREATE2 hash the final runtime bytecode directly?

No. Its specified address formula uses the hash of initialization code, which executes to produce the runtime code. Confusing the two can give the wrong prediction.

Evidence: [Skinny CREATE2](https://eips.ethereum.org/EIPS/eip-1014)

## Claims and scope

### create2-contract-addresses-quick-answer

CREATE2 derives a prospective contract address from the deploying address, a salt and the hash of initialization code. This makes an address predictable before deployment when those inputs are fixed. Prediction does not prove deployment occurred, establish who controls the resulting contract or guarantee the same behavior on every chain.

Scope: {"collection":"ethereum","dataAsOf":"2026-10-02","blockHeight":null}

### create2-contract-addresses-fact-inputs

Inputs: The formula commits to deployer, salt and initialization-code hash.

Scope: {"collection":"ethereum","dataAsOf":"2026-10-02","blockHeight":null}

### create2-contract-addresses-fact-initialization

Initialization: Initialization code executes to produce the deployed runtime code.

Scope: {"collection":"ethereum","dataAsOf":"2026-10-02","blockHeight":null}

### create2-contract-addresses-fact-collision

Collision: Creation fails when the destination already has nonzero nonce or nonempty code under the specified collision rules.

Scope: {"collection":"ethereum","dataAsOf":"2026-10-02","blockHeight":null}

## Sources

- [Skinny CREATE2](https://eips.ethereum.org/EIPS/eip-1014) — Ethereum Improvement Proposals. Contract creation address derived from deployer, salt and initialization-code hash. Locator: Specification; Clarifications. Retrieved: 2026-10-02T17:03:42.283Z.
- [Ethereum JSON-RPC](https://ethereum.org/en/developers/docs/apis/json-rpc/) — ethereum.org contributors. RPC response fields, transaction receipts, call simulation and log filtering. Locator: eth_getTransactionByHash; eth_getTransactionReceipt; eth_call; eth_getLogs; eth_getCode; eth_estimateGas; eth_getBalance; eth_getStorageAt; eth_getTransactionCount; default block parameter. Retrieved: 2026-10-02T17:03:42.060Z.
- [Ethereum accounts](https://ethereum.org/en/developers/docs/accounts/) — ethereum.org contributors. Key-controlled and code-controlled accounts, balances, nonces and storage. Locator: Account types; An account examined; Account creation. Retrieved: 2026-10-02T17:03:41.958Z.
- [Solidity: Delegatecall and Libraries](https://docs.soliditylang.org/en/v0.8.30/introduction-to-smart-contracts.html) — Solidity contributors. Execution uses another contract’s code in the caller’s context and storage. Locator: Delegatecall and Libraries; Storage, Memory and the Stack; Logs; Message Calls. Retrieved: 2026-10-02T17:03:42.822Z.

## Revision history

- 2026-10-02: First publication after primary-source research and independent automated verification.

## Cite this entry

Degrees of Satoshi editorial project. “CREATE2: predictable contract addresses and their limits.” Published 2026-10-02; updated 2026-10-02. https://degreesofsatoshi.com/encyclopedia/create2-contract-addresses/
