Skip to article
Degrees of SatoshiFollow the connections.
Degrees of Satoshi/ Encyclopedia

Encyclopedia Ethereum · Entry 117

CREATE2: predictable contract addresses and their limits

Theme
Ethereum
Sources
4 cited records
Reading time
About 3 minutes
Automated verification
Substantive update
In this article

At a glance

Key facts

Key facts for CREATE2: predictable contract addresses and their limits
FactDetailSource
InputsThe formula commits to deployer, salt and initialization-code hash.[1]
InitializationInitialization code executes to produce the deployed runtime code.[1]
CollisionCreation fails when the destination already has nonzero nonce or nonempty code under the specified collision rules.[1]
01

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.

02

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.

03

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.

Direct answers

Questions people ask

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.

Inspect the evidence

The answer and key facts have stable claim links. These records retain the scope and qualification when reused.

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: Ethereum · data through 2026-10-02. Verification: verified · 2026-10-02T18:12:41.505Z.

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

Scope: Ethereum · data through 2026-10-02. Verification: verified · 2026-10-02T18:12:41.505Z.

Link to this claim
Initialization: Initialization code executes to produce the deployed runtime code.

Scope: Ethereum · data through 2026-10-02. Verification: verified · 2026-10-02T18:12:41.505Z.

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

Scope: Ethereum · data through 2026-10-02. Verification: verified · 2026-10-02T18:12:41.505Z.

Link to this claim
Revision history
  1. — First publication after primary-source research and independent automated verification.

Source register

Sources and references

Retrieval dates and locators are recorded individually.
  1. Skinny CREATE2Ethereum Improvement Proposals

    Contract creation address derived from deployer, salt and initialization-code hash.

    Locator: Specification; Clarifications · Version / scope: EIP/ERC-1014; retrieved document hash recorded · Retrieved: 2026-10-02T17:03:42.283ZOpen source
  2. Ethereum JSON-RPCethereum.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.060ZOpen source
  3. Ethereum accountsethereum.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.958ZOpen source
  4. Solidity: Delegatecall and LibrariesSolidity 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 · Version / scope: Solidity 0.8.30 documentation · Retrieved: 2026-10-02T17:03:42.822ZOpen source
How this article was made

Research and drafting use AI assistance. A separate automated review checks claims against primary sources; no external expert or named human review is implied. Publication, substantive editing, source retrieval and verification are recorded separately. This version was independently checked by an automated reviewer on 2 October 2026.

Editorial method and corrections

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/