{
  "$schema": "https://degreesofsatoshi.com/encyclopedia/schemas/article-v1.json",
  "schemaVersion": "1.0.0",
  "id": "create2-contract-addresses",
  "canonical": "https://degreesofsatoshi.com/encyclopedia/create2-contract-addresses/",
  "collection": "ethereum",
  "title": "CREATE2: predictable contract addresses and their limits",
  "description": "Understand deterministic Ethereum contract addresses under CREATE2 and distinguish a precomputed destination from a deployed, trustworthy account.",
  "aliases": [],
  "dates": {
    "published": "2026-10-02",
    "modified": "2026-10-02",
    "verified": "2026-10-02T18:12:41.505Z",
    "dataAsOf": "2026-10-02"
  },
  "authorship": {
    "publisher": "Degrees of Satoshi editorial project",
    "process": "AI-assisted research and drafting with a separate automated source-verification pass; no external expert or named human review is implied."
  },
  "quickAnswer": {
    "text": "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.",
    "claimId": "create2-contract-addresses-quick-answer",
    "sourceIds": [
      "eip1014"
    ]
  },
  "keyFacts": [
    {
      "label": "Inputs",
      "value": "The formula commits to deployer, salt and initialization-code hash.",
      "sourceIds": [
        "eip1014"
      ],
      "id": "inputs",
      "claimId": "create2-contract-addresses-fact-inputs"
    },
    {
      "label": "Initialization",
      "value": "Initialization code executes to produce the deployed runtime code.",
      "sourceIds": [
        "eip1014"
      ],
      "id": "initialization",
      "claimId": "create2-contract-addresses-fact-initialization"
    },
    {
      "label": "Collision",
      "value": "Creation fails when the destination already has nonzero nonce or nonempty code under the specified collision rules.",
      "sourceIds": [
        "eip1014"
      ],
      "id": "collision",
      "claimId": "create2-contract-addresses-fact-collision"
    }
  ],
  "prerequisites": [
    "ethereum-smart-contracts"
  ],
  "sections": [
    {
      "id": "predict",
      "heading": "Predict an address from a complete set of inputs",
      "sourceIds": [
        "eip1014"
      ],
      "paragraphs": [
        "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."
      ]
    },
    {
      "id": "not-deployed",
      "heading": "An address can be known before code exists",
      "sourceIds": [
        "eip1014",
        "eth-jsonrpc"
      ],
      "paragraphs": [
        "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."
      ]
    },
    {
      "id": "same-chain",
      "heading": "Matching addresses do not guarantee matching state",
      "sourceIds": [
        "eip1014",
        "eth-accounts",
        "solidity-delegatecall"
      ],
      "paragraphs": [
        "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."
      ]
    }
  ],
  "faq": [
    {
      "question": "Does CREATE2 hash the final runtime bytecode directly?",
      "answer": "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.",
      "sourceIds": [
        "eip1014"
      ]
    }
  ],
  "claims": [
    {
      "id": "create2-contract-addresses-quick-answer",
      "articleSlug": "create2-contract-addresses",
      "statement": "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.",
      "sourceIds": [
        "source-9d6e8c178ca966e9"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-9d6e8c178ca966e9",
          "locator": "Specification; Clarifications"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T18:12:41.505Z",
        "reviewer": "Codex independent automated reviewer /root/verify_ethereum_100",
        "notes": [
          "Read EIP-1014 address formula, salt/deployer/init-code inputs, clarification that init code produces runtime code and existing nonce/code collision rules.",
          "Added Solidity execution-context source for initialization behavior. No chain ID occurs in CREATE2 formula; prediction alone is not deployment or recoverability proof."
        ]
      }
    },
    {
      "id": "create2-contract-addresses-fact-inputs",
      "articleSlug": "create2-contract-addresses",
      "statement": "Inputs: The formula commits to deployer, salt and initialization-code hash.",
      "sourceIds": [
        "source-9d6e8c178ca966e9"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-9d6e8c178ca966e9",
          "locator": "Specification; Clarifications"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T18:12:41.505Z",
        "reviewer": "Codex independent automated reviewer /root/verify_ethereum_100",
        "notes": [
          "Read EIP-1014 address formula, salt/deployer/init-code inputs, clarification that init code produces runtime code and existing nonce/code collision rules.",
          "Added Solidity execution-context source for initialization behavior. No chain ID occurs in CREATE2 formula; prediction alone is not deployment or recoverability proof."
        ]
      }
    },
    {
      "id": "create2-contract-addresses-fact-initialization",
      "articleSlug": "create2-contract-addresses",
      "statement": "Initialization: Initialization code executes to produce the deployed runtime code.",
      "sourceIds": [
        "source-9d6e8c178ca966e9"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-9d6e8c178ca966e9",
          "locator": "Specification; Clarifications"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T18:12:41.505Z",
        "reviewer": "Codex independent automated reviewer /root/verify_ethereum_100",
        "notes": [
          "Read EIP-1014 address formula, salt/deployer/init-code inputs, clarification that init code produces runtime code and existing nonce/code collision rules.",
          "Added Solidity execution-context source for initialization behavior. No chain ID occurs in CREATE2 formula; prediction alone is not deployment or recoverability proof."
        ]
      }
    },
    {
      "id": "create2-contract-addresses-fact-collision",
      "articleSlug": "create2-contract-addresses",
      "statement": "Collision: Creation fails when the destination already has nonzero nonce or nonempty code under the specified collision rules.",
      "sourceIds": [
        "source-9d6e8c178ca966e9"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-9d6e8c178ca966e9",
          "locator": "Specification; Clarifications"
        }
      ],
      "scope": {
        "collection": "ethereum",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T18:12:41.505Z",
        "reviewer": "Codex independent automated reviewer /root/verify_ethereum_100",
        "notes": [
          "Read EIP-1014 address formula, salt/deployer/init-code inputs, clarification that init code produces runtime code and existing nonce/code collision rules.",
          "Added Solidity execution-context source for initialization behavior. No chain ID occurs in CREATE2 formula; prediction alone is not deployment or recoverability proof."
        ]
      }
    }
  ],
  "sources": [
    {
      "id": "eip1014",
      "label": "Skinny CREATE2",
      "publisher": "Ethereum Improvement Proposals",
      "url": "https://eips.ethereum.org/EIPS/eip-1014",
      "locator": "Specification; Clarifications",
      "note": "Contract creation address derived from deployer, salt and initialization-code hash.",
      "version": "EIP/ERC-1014; retrieved document hash recorded",
      "checkedAt": "2026-10-02T17:03:42.283Z",
      "contentSha256": "cbb767237cef6c22bd8d5b6225d0828b95986688cdc27edd35f853b843918176",
      "recordId": "source-9d6e8c178ca966e9"
    },
    {
      "id": "eth-jsonrpc",
      "label": "Ethereum JSON-RPC",
      "publisher": "ethereum.org contributors",
      "url": "https://ethereum.org/en/developers/docs/apis/json-rpc/",
      "locator": "eth_getTransactionByHash; eth_getTransactionReceipt; eth_call; eth_getLogs; eth_getCode; eth_estimateGas; eth_getBalance; eth_getStorageAt; eth_getTransactionCount; default block parameter",
      "note": "RPC response fields, transaction receipts, call simulation and log filtering.",
      "version": null,
      "checkedAt": "2026-10-02T17:03:42.060Z",
      "contentSha256": "ed13997ec4f415dff80883add0730d4e64bcc8c17b95dd4f6c27aed0241a4073",
      "recordId": "source-a5154b4118a3d15f"
    },
    {
      "id": "eth-accounts",
      "label": "Ethereum accounts",
      "publisher": "ethereum.org contributors",
      "url": "https://ethereum.org/en/developers/docs/accounts/",
      "locator": "Account types; An account examined; Account creation",
      "note": "Key-controlled and code-controlled accounts, balances, nonces and storage.",
      "version": null,
      "checkedAt": "2026-10-02T17:03:41.958Z",
      "contentSha256": "262a5694899ae6f774aacae66b13d6929b658ecc9e23c276af9e23ee9455f034",
      "recordId": "source-2fb64d6fc5cedb00"
    },
    {
      "id": "solidity-delegatecall",
      "label": "Solidity: Delegatecall and Libraries",
      "publisher": "Solidity contributors",
      "url": "https://docs.soliditylang.org/en/v0.8.30/introduction-to-smart-contracts.html",
      "locator": "Delegatecall and Libraries; Storage, Memory and the Stack; Logs; Message Calls",
      "note": "Execution uses another contract’s code in the caller’s context and storage.",
      "version": "Solidity 0.8.30 documentation",
      "checkedAt": "2026-10-02T17:03:42.822Z",
      "contentSha256": "9fde27b9eb16bcd47d5e9fb73a80d2d3b288ae7b74ac56b29956267028fe7a55",
      "recordId": "source-7399ee01181109d4"
    }
  ],
  "related": {
    "articles": [
      "ethereum-chain-id",
      "ethereum-smart-accounts",
      "verified-contract-source"
    ],
    "dossiers": [],
    "wallets": []
  },
  "revisionHistory": [
    {
      "date": "2026-10-02",
      "kind": "published",
      "summary": "First publication after primary-source research and independent automated verification."
    }
  ],
  "citation": "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/"
}
