{"id":"ERC-5202","name":"Blueprint Contract Format","status":"Final","chain":"both","category":{"id":"infrastructure","name":"Infrastructure","description":"Foundational patterns enabling other standards"},"journeyStages":[{"id":"infra","name":"Infrastructure","description":"Foundational patterns"}],"uxImpact":"ERC-5202 identifies blueprint bytecode that stores initialization code for later deployment. The blueprint is not a callable application. A deployment action needs a compatible factory or tool, and the resulting instance has its own address, initialization, and control policy.","officialUrl":"https://ercs.ethereum.org/ERCS/erc-5202","lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","kind":"proposal","hasDetailedContent":true,"content":{"id":"ERC-5202","sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-5202","type":"official-spec"}],"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","summary":"ERC-5202 identifies blueprint bytecode that stores initialization code for later deployment. The blueprint is not a callable application. A deployment action needs a compatible factory or tool, and the resulting instance has its own address, initialization, and control policy.","designerTakeaways":["You can badge Blueprint — not callable on blueprint addresses in explorers.","Your interact panel can hide entirely for blueprints with Deploy instance CTA for devs instead.","You can show Deployed from blueprint link on live contract pages."],"applicability":{"whenToUse":["Contract explorer shows factory/blueprint patterns.","Users might land on blueprint via explorer search.","Clone/minimal proxy deployments from blueprint."],"whenToAvoid":["No blueprint contracts in indexed set.","Pure end-user wallet with no explorer.","Only live instance addresses exposed."]},"prototypeFirst":[{"screen":"Blueprint contract page","why":"Prevent interact attempts on template.","covers":["Blueprint detected"],"include":["Blueprint badge","Not callable message","List instances link"]},{"screen":"Live instance with lineage","why":"Trace which template spawned contract.","covers":["Has blueprint parent"],"include":["Deployed from chip","Link to blueprint","Factory tx"]},{"screen":"Contract list filter","why":"Devs want completeness; users want clarity.","covers":["Hide blueprints toggle"],"include":["Filter setting","Blueprint gray rows when shown"]},{"screen":"Blocked interact attempt","why":"Deep link to interact tab still happens.","covers":["Interact disabled"],"include":["This is a template only","View deployments instead"]}],"mentalModel":[{"label":"Blueprint","description":"Template bytecode — not a live app contract."},{"label":"Instance","description":"Deployed callable contract from blueprint."},{"label":"Factory","description":"Contract that deploys instances from blueprint."},{"label":"Lineage","description":"Link instance back to blueprint source."},{"label":"Non-callable","description":"Any interact tx will fail — block in UI first."}],"statesToDesign":[{"state":"Blueprint page view","trigger":"User opens blueprint address.","userNeed":"Not try to call functions.","designResponse":"Blueprint badge; no interact form."},{"state":"Instance page view","trigger":"Live deployed contract.","userNeed":"Normal interact.","designResponse":"Standard UI plus lineage chip."},{"state":"Search hits blueprint","trigger":"Search returns template.","userNeed":"Distinguish from instance.","designResponse":"Blueprint in search results styling."},{"state":"List with blueprints shown","trigger":"Dev toggle on.","userNeed":"Scan templates.","designResponse":"Gray non-interactive rows."},{"state":"List blueprints hidden","trigger":"Default user filter.","userNeed":"Only callable contracts.","designResponse":"Instances only in default list."}],"designDecisions":[{"question":"Hide blueprints from default lists?","recommendation":"Yes default hide; dev toggle show.","rationale":"Cleaner for users; completeness for devs."},{"question":"Interact tab on blueprint?","recommendation":"Remove tab entirely.","rationale":"Empty or error tab feels broken."},{"question":"Lineage on every instance?","recommendation":"Chip linking blueprint if known.","rationale":"Audit and support traceability."}],"problemsSolved":[{"problem":"Users call blueprint and revert","oldWay":"Interact UI on template address","newWay":"Blueprint badge blocks interact","impact":"high"},{"problem":"Cannot trace clone source","oldWay":"Instance appears from nowhere","newWay":"Deployed from blueprint lineage","impact":"medium"},{"problem":"Explorer lists cluttered with templates","oldWay":"Templates mixed with live apps","newWay":"Filter hide blueprints default","impact":"low"}],"uxPatterns":[{"name":"Blueprint Badge Block","description":"Non-callable template contract page.","components":["BlueprintBadge","NoInteractPanel","InstancesLink"],"userFlow":["Open blueprint","See badge","No interact","Browse instances"]},{"name":"Deployed From Lineage","description":"Instance links back to blueprint.","components":["LineageChip","BlueprintLink"],"userFlow":["Open instance","See deployed from","Jump to blueprint"]}],"antiPatterns":[{"pattern":"Full interact UI on blueprint","why":"Guaranteed revert wastes gas","instead":"Remove interact; show template badge","severity":"critical"},{"pattern":"Blueprint identical styling to live contract","why":"Users cannot distinguish","instead":"Distinct blueprint badge and gray styling","severity":"high"},{"pattern":"No lineage on instances","why":"Audit trail broken","instead":"Deployed from chip on instance pages","severity":"medium"}],"vocabulary":[{"use":"Template contract","avoid":"Blueprint bytecode","why":"Plain template language."},{"use":"Not callable","avoid":"Execute disabled on blueprint","why":"Direct user message."},{"use":"Deployed from","avoid":"Clone initCode reference","why":"Lineage language."}],"specConstraints":[{"id":"erc-5202-blueprint-preamble","constraint":"A blueprint is identified by the ERC-5202 FE71 preamble and its encoded version/length fields.","appliesTo":"infrastructure","normativity":"normative","specQuote":"A blueprint contract MUST use the preamble `0xFE71<version bits><length encoding bits>`. 6 bits are allocated to the version, and 2 bits to the length encoding. The first version begins at 0 (`0b000000`), and versions increment by 1. The value `0b11` for `<length encoding bits>` is reserved.","specSection":"Specification","specUrl":"https://ercs.ethereum.org/ERCS/erc-5202#specification","designImplication":"Badge and block interaction only after verifying the deployed bytecode against the complete preamble format; show a blueprint as a template, not as a callable application contract."},{"id":"erc-5202-prefix-verification","constraint":"A matching FE71 prefix can collide with pre-existing bytecode, so indexers should verify compiled source before treating it as a blueprint.","appliesTo":"infrastructure","normativity":"security-considerations","specQuote":"There could be contracts on-chain already which happen to start with the same prefix as proposed in this ERC. However, this is not considered a serious risk, because the way it is envisioned that indexers will use this is to verify source code by compiling it and prepending the preamble.","specSection":"Security Considerations","specUrl":"https://ercs.ethereum.org/ERCS/erc-5202#security-considerations","designImplication":"Do not present a prefix-only heuristic as definitive lineage or non-callability. Where source verification is unavailable, label the blueprint classification as detected or unverified."}],"technicalNotes":"ERC-5202 blueprints: never render interact UI; default-hide in contract lists.","relatedStandards":[{"id":"ERC-1167","relationship":"Minimal proxy clones from templates"},{"id":"EIP-1014","relationship":"CREATE2 deterministic deploys"}],"partialDeployment":{"body":"This guide describes an interface-specific integration. A live deployment has not been verified here. Confirm the target contract, network, and client support before offering these actions; Final describes the specification, not product availability."}},"sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-5202","type":"official-spec"},{"label":"Discussion search","url":"https://ethereum-magicians.org/search?q=ERC-5202","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-5202","markdown":"https://www.eipsfordesigners.com/standards/ERC-5202/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-5202/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-5202","official":"https://ercs.ethereum.org/ERCS/erc-5202","discussion":"https://ethereum-magicians.org/search?q=ERC-5202"},"freshness":{"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18"}}