{"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":"Contract addresses are predictable before deployment — enables 'pay to future address' patterns. Design implications: show users their contract address upfront during deployment flows, enable deposit UIs for addresses that don't exist yet, support counterfactual wallet onboarding where users can receive funds before activating their wallet. Design decisions: balance showing predictable addresses (builds trust) vs. complexity of explaining 'this address exists but has no code yet'. Multi-Chain Checklist recommends CREATE2 at Medium priority for consistent addresses across L2s ('one address everywhere'). Cross-chain address consistency is a designer-facing decision — users expect the same address on every network.","hasDetailedContent":true,"content":{"id":"EIP-1014","summary":"EIP-1014 introduced CREATE2, allowing contracts to be deployed to predictable addresses. Instead of addresses depending on the deployer's nonce, CREATE2 uses a formula: address = hash(deployer, salt, bytecode). This means you can know an address before the contract exists, enabling counterfactual wallets, gasless onboarding, and trustless contract deployments.","applicability":{"whenToUse":["Your product addresses: contract addresses were unpredictable.","Your users needed deployed wallet before receiving funds.","The flow should deliver: address is deterministic: same inputs = same address always.","Connect flows must list wallets with names, icons, and explicit user choice."],"whenToAvoid":["Clear messaging: \"Address reserved, wallet deploys on first use\".","Show \"Deployed ✓\" or \"Not deployed, will deploy on first tx\".","Use CREATE2 for consistent cross-chain addresses when possible.","Protocol plumbing is invisible and never surfaces in user-facing UI."]},"designerTakeaways":["You can address is deterministic: same inputs = same address always.","You can design UI that delivers share future wallet address.","You can design UI that delivers same CREATE2 params = same address on every EVM chain."],"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":"Same CREATE2 params = same address on every EVM chain","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","mockup":"concept/proxy-pattern","userFlow":["User starts wallet creation","CREATE2 address calculated immediately","Address shown before any transaction","User can receive funds right away","Wallet deploys on first outgoing tx"]},{"name":"Same Address Everywhere","description":"Show consistent address across chains","mockup":"concept/bridge","userFlow":["User views their universal address","See deployment status per chain","Same address shown for all chains","Can deploy to new chains on demand","Receive funds on any chain with same address"]},{"name":"Pre-Deployment Fund Receipt","description":"Receive and display funds before wallet deployment","mockup":"concept/tx-status","userFlow":["Funds sent to CREATE2 address","User notified of incoming funds","Balance shown even without deployment","Clear explanation funds are safe","Option to deploy and access immediately"]}],"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: \"Address reserved, wallet deploys on first use\"","severity":"high"},{"pattern":"Hiding deployment status","why":"Users don't know if they can transact yet","instead":"Show \"Deployed ✓\" or \"Not deployed - will deploy on first tx\"","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 CREATE2 address immediately, deploy lazily","severity":"medium"}],"onMonad":[{"aspect":"Fast Deployment","ethereum":"Deployment transaction takes 12+ seconds","monad":"Sub-second deployment confirmation","designImplication":"Deployment feels instant, can happen transparently on first tx"},{"aspect":"Same Address on Monad","ethereum":"CREATE2 gives same address on all EVM chains","monad":"Works identically, same address available on Monad","designImplication":"Emphasize \"same address on Monad\" for cross-chain users"},{"aspect":"Deployment Cost","ethereum":"Deployment can be expensive ($50+ in high gas)","monad":"Much cheaper deployment costs","designImplication":"Can be more aggressive about deploying rather than counterfactual"}],"relatedStandards":[{"id":"ERC-4337","relationship":"Account abstraction uses CREATE2 for counterfactual wallet addresses"},{"id":"EIP-1167","relationship":"Minimal proxies often deployed via CREATE2 for deterministic addresses"},{"id":"EIP-5202","relationship":"Blueprint contracts use CREATE2 for efficient contract deployment"},{"id":"EIP-7702","relationship":"Smart wallet features work with CREATE2-deployed wallets"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-1014","type":"official-spec"},{"label":"Discussion","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-04-05","lastUpdated":"2026-04-05"}}