{"id":"EIP-1167","name":"Minimal Proxy Contract","status":"Final","chain":"both","category":{"id":"infrastructure","name":"Infrastructure","description":"Foundational patterns enabling other standards"},"journeyStages":[{"id":"infra","name":"Infrastructure","description":"Foundational patterns"}],"uxImpact":"Many contracts share identical code via lightweight clones — same interface, different addresses. Design implications: when displaying contract info, detect clones and show the 'master' contract's verified source/audit status, group clone contracts in portfolio views, indicate 'Clone of [verified contract]' badges. Design decisions: whether to surface clone relationships prominently (transparency) or hide complexity (simplicity); how to handle trust signals when master contract upgrades.","hasDetailedContent":true,"content":{"id":"EIP-1167","summary":"EIP-1167 defines minimal proxy contracts (clones) that delegate all calls to an implementation contract. This lets you deploy many contracts cheaply by creating tiny proxies pointing to shared code—why creating an NFT collection or DAO doesn't cost $500 in gas.","applicability":{"whenToUse":["Your product addresses: deploying contracts is expensive.","Your product addresses: factory patterns cost too much.","The flow should deliver: tiny 45-byte proxy cloned for ~$5-10.","You are designing a one-click contract creation experience with visible states and recovery paths."],"whenToAvoid":["Show \"Powered by [Implementation]\" with link.","Always link to implementation on block explorer.","Clearly label \"Your contract\" vs \"Implementation\".","Protocol plumbing is invisible and never surfaces in user-facing UI."]},"designerTakeaways":["You can design UI that delivers tiny 45-byte proxy cloned for ~$5-10.","You can design UI that delivers clone factory creates instances cheaply.","You can each user gets their own contract cheaply in the interface."],"problemsSolved":[{"problem":"Deploying contracts is expensive","oldWay":"Full contract bytecode deployed each time (~$200-500)","newWay":"Tiny 45-byte proxy cloned for ~$5-10","impact":"critical"},{"problem":"Factory patterns cost too much","oldWay":"Each user's vault/collection is full deployment","newWay":"Clone factory creates instances cheaply","impact":"critical"},{"problem":"Can't afford per-user contracts","oldWay":"Share one contract, complex accounting","newWay":"Each user gets their own contract cheaply","impact":"high"},{"problem":"Code duplication on chain","oldWay":"Same bytecode stored thousands of times","newWay":"One implementation, many proxies","impact":"medium"}],"uxPatterns":[{"name":"One-Click Contract Creation","description":"User creates their own contract instantly","mockup":"concept/nft-gallery","userFlow":["User fills in contract parameters","Sees cost comparison (clone vs full)","Clicks create","Clone deployed in seconds","Gets their own contract address"]},{"name":"Factory Dashboard","description":"View all clones created from a factory","mockup":"concept/nft-gallery","userFlow":["Admin views factory dashboard","Sees all clones created","Monitors adoption and gas savings","Links to implementation for verification"]},{"name":"Clone Verification","description":"Show user their clone points to verified code","mockup":"concept/proxy-pattern","userFlow":["User checks their contract","Sees it's a proxy (not full code)","Views implementation it delegates to","Confirms implementation is verified/audited","Trusts their clone is safe"]},{"name":"Personal Vault Creation","description":"User gets their own vault contract","mockup":"concept/proxy-pattern","userFlow":["User selects vault type","Sees low deployment cost","Can learn why it's cheap (clone pattern)","Creates vault","Gets personal contract address"]}],"uiComponents":[{"name":"CloneDeployer","description":"Form for creating new clone instance","states":["configuring","deploying","deployed","error"],"props":["factoryAddress","initParams","onDeploy"]},{"name":"GasSavingsIndicator","description":"Shows savings from using clone vs full deploy","states":["calculating","ready"],"props":["fullDeployCost","cloneCost","savings"]},{"name":"ProxyVerificationBadge","description":"Badge showing proxy points to verified impl","states":["verified","unverified","loading"],"props":["proxyAddress","implementationAddress","isVerified"]},{"name":"FactoryCloneList","description":"List of all clones from a factory","states":["loading","loaded","empty"],"props":["clones[]","onCloneClick"]},{"name":"CloneExplainerTooltip","description":"Explains how minimal proxy works","states":["collapsed","expanded"],"props":["showDiagram"]}],"antiPatterns":[{"pattern":"Hiding that contract is a proxy","why":"Users deserve to know how their contract works","instead":"Show \"Powered by [Implementation]\" with link","severity":"high"},{"pattern":"Not linking to verified implementation","why":"User can't verify the code their proxy uses","instead":"Always link to implementation on block explorer","severity":"high"},{"pattern":"Confusing proxy address with implementation","why":"User looks up wrong address, sees weird bytecode","instead":"Clearly label \"Your contract\" vs \"Implementation\"","severity":"medium"},{"pattern":"Not explaining gas savings","why":"User doesn't understand the value they're getting","instead":"Show \"Saved ~$150 using clone pattern\"","severity":"medium"},{"pattern":"Using clones for upgradeable contracts","why":"EIP-1167 clones are immutable, confuses with upgradeable","instead":"Clarify: \"Your clone points to fixed implementation\"","severity":"medium"}],"onMonad":[{"aspect":"Clone Deployment","ethereum":"Clone deploy still costs ~$5-10","monad":"Near-zero cost clone creation","designImplication":"Can create per-transaction contracts if needed"},{"aspect":"Factory Throughput","ethereum":"Factory limited by block gas limits","monad":"Parallel execution enables high clone throughput","designImplication":"Bulk clone creation for airdrops/onboarding viable"},{"aspect":"User Contract Pattern","ethereum":"Still consider shared contracts for cost","monad":"Per-user contracts always affordable","designImplication":"Every user can have isolated contract by default"},{"aspect":"Delegate Call Speed","ethereum":"Delegate call adds small overhead","monad":"Optimized execution minimizes proxy overhead","designImplication":"Proxy pattern has negligible performance cost"}],"keyTakeaways":["EIP-1167 = tiny proxy pointing to shared implementation","Creates contracts cheaply (95%+ savings)","Always link to the verified implementation","Explain to users their clone uses audited code","Clones are immutable—not upgradeable proxies"],"technicalNotes":"EIP-1167 minimal proxy is exactly 45 bytes of bytecode that delegatecalls to a hardcoded implementation address. All storage lives in the proxy, logic in the implementation. The proxy cannot be upgraded—it permanently points to one implementation. This is different from upgradeable proxies (EIP-1967) where the implementation can change."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-1167","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=EIP-1167","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/EIP-1167","markdown":"https://www.eipsfordesigners.com/standards/EIP-1167/content.md","agent":"https://www.eipsfordesigners.com/standards/EIP-1167/agent.md","api":"https://www.eipsfordesigners.com/api/standards/EIP-1167","official":"https://eips.ethereum.org/EIPS/eip-1167","discussion":"https://ethereum-magicians.org/search?q=EIP-1167"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}