Encyclopedia Ethereum · Entry 117
CREATE2: predictable contract addresses and their limits
In this article
At a glance
Key facts
| Fact | Detail | Source |
|---|---|---|
| Inputs | The formula commits to deployer, salt and initialization-code hash. | [1] |
| Initialization | Initialization code executes to produce the deployed runtime code. | [1] |
| Collision | Creation fails when the destination already has nonzero nonce or nonempty code under the specified collision rules. | [1] |
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.
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.
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 claimInputs: 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 claimInitialization: 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 claimCollision: 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 claimRevision history
- — First publication after primary-source research and independent automated verification.
Source register
Sources and references
Retrieval dates and locators are recorded individually.- 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 - 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 - 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 - 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
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 correctionsDegrees 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/