{"id":"EIP-1014","name":"Skinny CREATE2","status":"Final","chain":"both","category":{"id":"infrastructure","name":"Infrastructure","description":"Foundational patterns enabling other standards"},"journeyStages":[{"id":"infra","name":"Infrastructure","description":"Foundational patterns"}],"uxImpact":"EIP-1014 introduced CREATE2, which calculates a contract address from a deployer, salt and exact initialization code before deployment. Counterfactual wallets can use this when they have a supported factory and verified control path. A predicted address alone does not guarantee deployment, sponsorship or safe recovery of funds.","officialUrl":"https://eips.ethereum.org/EIPS/eip-1014","lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","kind":"proposal","hasDetailedContent":true,"content":{"id":"EIP-1014","summary":"EIP-1014 introduced CREATE2, which calculates a contract address from a deployer, salt and exact initialization code before deployment. Counterfactual wallets can use this when they have a supported factory and verified control path. A predicted address alone does not guarantee deployment, sponsorship or safe recovery of funds.","applicability":{"whenToUse":["A verified factory and initialization code let your product predict an account address.","The selected chain has a supported deployment and user-control path."],"whenToAvoid":["Funding would precede verification of the factory, code, authorization or recovery path.","You need CREATE2 alone to guarantee sponsorship or automatic deployment on first use."]},"designerTakeaways":["Show which factory, salt, and initialization code determine the predicted address.","Distinguish a predicted address from a deployed and initialized account.","Verify factory support and control on each chain before suggesting the user receive funds at a future address."],"problemsSolved":[{"problem":"Contract addresses were unpredictable","oldWay":"Address depends on deployer nonce, changes if any tx happens first","newWay":"Address is deterministic: same inputs = same address always","impact":"critical"},{"problem":"Users needed deployed wallet before receiving funds","oldWay":"Deploy wallet first, then share address, then receive funds","newWay":"Share future wallet address, receive funds, deploy later","impact":"critical"},{"problem":"Cross-chain address consistency was impossible","oldWay":"Same wallet had different addresses on each chain","newWay":"The same deployer, salt, and exact initialization code produce the same address on networks implementing the same CREATE2 formula; deployability and control still need verification","impact":"high"},{"problem":"Factory contracts couldn't guarantee addresses","oldWay":"User deploys, gets whatever address results","newWay":"User knows exact address before deployment","impact":"high"}],"uxPatterns":[{"name":"Counterfactual Wallet Setup","description":"Show user their wallet address before deployment","userFlow":["User starts wallet creation","CREATE2 address calculated immediately","Address shown before any transaction","Verify the selected chain, factory, initialization code and user control before suggesting funding","Deploy on first use only if this wallet integration supports it; show deployment failures separately"]},{"name":"Predicted address across supported chains","description":"Show consistent address across chains","userFlow":["User opens the predicted address for a specific factory and initialization configuration","See deployment status per chain","Same address shown for all chains","Check that the factory and intended implementation can actually be deployed on each selected chain","Enable receiving only on chains with a verified deployment and recovery path"]},{"name":"Pre-Deployment Fund Receipt","description":"Receive and display funds before wallet deployment","userFlow":["Funds sent to CREATE2 address","User notified of incoming funds","Balance shown even without deployment","Explain how the verified factory and wallet control path will allow access, including deployment requirements and risks","Offer deployment only when the supported factory, authorization and fees are available"]}],"uiComponents":[{"name":"PredictedAddressDisplay","description":"Shows address that will be created via CREATE2","states":["calculated","deployed","has-balance"],"props":["address","isDeployed","balance","onCopy"]},{"name":"DeploymentStatusBadge","description":"Shows whether address is deployed or counterfactual","states":["not-deployed","deploying","deployed"],"props":["isDeployed","chainId","deployedAt"]},{"name":"CrossChainAddressView","description":"Shows same address with deployment status per chain","states":["loading","loaded","error"],"props":["address","chains[]","deploymentStatus{}"]}],"antiPatterns":[{"pattern":"Not explaining counterfactual addresses","why":"Users confused why address exists but wallet doesn't","instead":"Clear messaging: \"Predicted address; deployment requires the supported factory and wallet authorization\"","severity":"high"},{"pattern":"Hiding deployment status","why":"Users don't know if they can transact yet","instead":"Show \"Deployed ✓\" or \"Not deployed; check the supported deployment path\"","severity":"high"},{"pattern":"Showing different addresses per chain for same wallet","why":"Users think they have multiple wallets, send to wrong address","instead":"Use CREATE2 for consistent cross-chain addresses when possible","severity":"medium"},{"pattern":"Requiring deployment before showing address","why":"Adds friction, costs gas before user even receives funds","instead":"Show the predicted address with factory, chain and control prerequisites before enabling funding","severity":"medium"}],"relatedStandards":[{"id":"ERC-4337","relationship":"Account abstraction uses CREATE2 for counterfactual wallet addresses"},{"id":"ERC-1167","relationship":"Minimal proxies often deployed via CREATE2 for deterministic addresses"},{"id":"ERC-5202","relationship":"Blueprint contracts use CREATE2 for efficient contract deployment"},{"id":"EIP-7702","relationship":"Smart wallet features work with CREATE2-deployed wallets"}],"lastUpdated":"2026-09-18","technicalNotes":"CREATE2 computes keccak256(0xff ++ deployer ++ salt ++ keccak256(init_code))[12:]. The salt is 32 bytes and the exact init code matters. Creation fails under the applicable collision rules when the destination has a nonzero nonce or nonempty code. CREATE2 provides neither a wallet factory nor account recovery or automatic first-use deployment. Before funding a predicted account, verify the factory, code, authorization and deployment path on that chain.","lastReviewed":"2026-09-18","specConstraints":[],"sources":[{"label":"EIP-1014 official specification","url":"https://eips.ethereum.org/EIPS/eip-1014","type":"official-spec"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-1014","type":"official-spec"},{"label":"Discussion search","url":"https://ethereum-magicians.org/search?q=EIP-1014","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/EIP-1014","markdown":"https://www.eipsfordesigners.com/standards/EIP-1014/content.md","agent":"https://www.eipsfordesigners.com/standards/EIP-1014/agent.md","api":"https://www.eipsfordesigners.com/api/standards/EIP-1014","official":"https://eips.ethereum.org/EIPS/eip-1014","discussion":"https://ethereum-magicians.org/search?q=EIP-1014"},"freshness":{"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18"}}