{"id":"ERC-7578","name":"Physical Asset Redemption","status":"Final","chain":"both","category":{"id":"physical","name":"Physical & Real World","description":"Connecting NFTs to physical items"},"journeyStages":[{"id":"specialized","name":"Specialized Interactions","description":"Physical items, AI, social, gaming"}],"uxImpact":"Users holding physical-asset-backed NFTs can inspect issuer-declared real-world details: who issued it, who holds the physical item, where it's stored, legal terms, and declared value. Verify those claims separately before presenting them as trusted.","officialUrl":"https://ercs.ethereum.org/ERCS/erc-7578","lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","kind":"proposal","hasDetailedContent":true,"content":{"id":"ERC-7578","sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-7578","type":"official-spec"}],"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","summary":"Users holding physical-asset-backed NFTs can inspect issuer-declared real-world details: who issued it, who holds the physical item, where it's stored, legal terms, and declared value. Verify those claims separately before presenting them as trusted.","designerTakeaways":["Lay out issuer, asset-holder, storage, terms, jurisdiction, and declared value as issuer-declared fields.","Link legal terms and show their source and jurisdiction; do not present a field as independently verified without evidence.","Show an issuer or custodian verification label only when an external attestation exists and identify that source."],"applicability":{"whenToUse":["NFTs represent vaulted gold, watches, wine, or redeemable physical goods.","RWA platform uses ERC-7578 metadata schema.","Trust requires issuer and custody transparency."],"whenToAvoid":["Pure digital art with no physical claim.","Metadata lacks structured RWA fields.","Regulatory review cannot support displayed claims."]},"prototypeFirst":[{"screen":"Physical backing summary","why":"Buyer diligence starts at structured fields.","covers":["Full metadata","Missing optional fields"],"include":["Issuer row","Custodian","Storage location","Declared value","Jurisdiction"]},{"screen":"Legal terms expand","why":"Lawyers need access; users need skim.","covers":["Terms linked","Missing terms"],"include":["Collapsed legal section","IPFS link","Jurisdiction badge"]},{"screen":"Optional issuer redemption integration","why":"A physical claim journey needs a separate issuer or custodian workflow because ERC-7578 does not define redemption.","covers":["Eligibility from issuer","Application request","Provider status"],"include":["Issuer-provided redeem CTA","Terms and jurisdiction","Shipping/provider source","Unknown or pending state"]},{"screen":"Issuer evidence and terms","why":"Structured fields are claims whose authority and verification source must be visible.","covers":["Attested","Unverified","Missing"],"include":["Issuer-declared label","Attestation source","Terms link","Risk disclosure"]}],"mentalModel":[{"label":"Token","description":"Digital claim on physical asset."},{"label":"Issuer","description":"Entity that minted the claim; treat its fields as issuer-declared until independently verified."},{"label":"Custodian","description":"Who physically holds the item."},{"label":"Declared value","description":"Stated worth — not guaranteed market price."},{"label":"Redemption","description":"Redemption is an optional issuer or custodian process; ERC-7578 exposes physical-asset properties but no redeem or delivery endpoint."}],"statesToDesign":[{"state":"Fully documented asset","trigger":"All key fields present.","userNeed":"Trust and compare.","designResponse":"Complete summary card."},{"state":"Missing optional field","trigger":"Storage or terms absent.","userNeed":"Not think broken.","designResponse":"Not provided gray state."},{"state":"Unverified issuer","trigger":"No attestation.","userNeed":"Extra caution.","designResponse":"Show the issuer or external attestation source and an unverified state when none exists."},{"state":"Issuer redemption request","trigger":"An external issuer or custodian integration accepts a physical claim request.","userNeed":"Know which provider owns the status and terms.","designResponse":"Show provider-sourced status, legal authority, and unknown/pending states; do not attribute it to ERC-7578."},{"state":"Issuer reports completion","trigger":"The external redemption workflow reports delivery or another terminal state.","userNeed":"See what was completed and by whom.","designResponse":"Show the provider event and any token lock/burn policy separately from the ERC-7578 property record."}],"designDecisions":[{"question":"Legal terms upfront?","recommendation":"Collapsed with summary bullets upfront.","rationale":"Compliance accessible without wall of text."},{"question":"Currency display for value?","recommendation":"ISO currency plus formatted amount.","rationale":"Declared value needs unit clarity."},{"question":"Issuer verification tiers?","recommendation":"Verified / Unverified / Unknown badges.","rationale":"Binary verified-only hides nuance."}],"problemsSolved":[{"problem":"Opaque RWA NFTs","oldWay":"JPEG with vague description","newWay":"Structured issuer custody value fields","impact":"critical"},{"problem":"Legal terms inaccessible","oldWay":"Buried broken link","newWay":"IPFS terms with jurisdiction","impact":"high"},{"problem":"Physical claim status is unknown","oldWay":"A product has only email support and no provider state.","newWay":"An optional issuer/custodian integration can expose a provider-sourced status while the UI labels its authority and limits.","impact":"medium"}],"uxPatterns":[{"name":"RWA Summary Card","description":"Structured physical backing fields.","components":["IssuerRow","CustodianRow","ValueDisplay","TermsExpand"],"userFlow":["Open token","Scan backing","Expand legal","Decide trust"]},{"name":"Optional Physical Redemption Tracker","description":"Track an issuer or custodian workflow separately from ERC-7578 property reads.","components":["RedeemCTA","StatusStepper","ShippingForm"],"userFlow":["User opens an issuer-supported claim path","UI shows terms, jurisdiction, and provider","User submits details to the provider","Tracker displays provider status or unknown","Completion is shown only after provider evidence"]}],"antiPatterns":[{"pattern":"No issuer or custody source on RWA detail","why":"Users cannot assess whose claim they are reading.","instead":"Label each field issuer-declared and link external verification or terms when available.","severity":"critical"},{"pattern":"Presenting declared value as a guaranteed price","why":"ERC-7578 exposes a declared value, not a universal market or oracle price.","instead":"Show currency and label the value as declared by the issuer.","severity":"high"},{"pattern":"Attributing redemption tracking to ERC-7578","why":"The standard defines properties and getPropertiesOf, not redeem, shipping, custody, or delivery state.","instead":"Show a provider-owned integration with source, terms, and pending/unknown states.","severity":"medium"}],"vocabulary":[{"use":"Issued by","avoid":"Token issuer address","why":"Entity name primary."},{"use":"Stored at","avoid":"Custodial storage URI","why":"Location language."},{"use":"Declared value","avoid":"Oracle price feed","why":"Legal distinction from market price."}],"specConstraints":[{"id":"property-burn-lifecycle","constraint":"When a token with valid physical-asset properties is burned, its properties must be removed.","appliesTo":"application","normativity":"normative","specQuote":"When a token with valid properties is to be burned, the properties MUST be removed.","specSection":"Specification","specUrl":"https://ercs.ethereum.org/ERCS/erc-7578#specification","designImplication":"Remove or mark physical-asset claims unavailable after burn and do not leave an NFT detail view presenting burned properties as current."},{"id":"property-read","constraint":"getPropertiesOf returns the token’s unique properties and an empty struct when a token is burned or has no properties.","appliesTo":"application","normativity":"normative","specQuote":"The `getPropertiesOf(uint256 tokenId)` function MUST return the unique `properties` of a token. If the ERC-721 token is burned or has no properties set, it SHOULD return an empty `Properties` struct.","specSection":"Specification > Contract Interface","specUrl":"https://ercs.ethereum.org/ERCS/erc-7578#contract-interface","designImplication":"Show a clear empty/unavailable state and distinguish issuer-declared properties from independently verified physical facts."},{"id":"erc721-compat","constraint":"The physical-property standard is compatible with ERC-721.","appliesTo":"application","normativity":"backwards-compatibility","specQuote":"## Backwards Compatibility\n\nThis standard is compatible with ERC-721.","specSection":"Backwards Compatibility","specUrl":"https://ercs.ethereum.org/ERCS/erc-7578#backwards-compatibility","designImplication":"Reuse ERC-721 ownership and identity patterns while layering physical-property status and provenance."},{"id":"property-authenticity","constraint":"Physical properties must be set by a trusted authority that verifies the real asset attributes and prevents unauthorized modification.","appliesTo":"application","normativity":"security-considerations","specQuote":"## Security Considerations\n\nTo ensure authenticity, token properties must be set only via a method that is restricted to a trusted Externally Owned Account (EOA) or contract. This trusted entity must verify that the properties accurately reflect the real physical attributes of the represented asset. Additionally, proper access control mechanisms should be implemented to prevent unauthorized modifications of token properties after they are set.","specSection":"Security Considerations","specUrl":"https://ercs.ethereum.org/ERCS/erc-7578#security-considerations","designImplication":"Show issuer/custodian authority and verification provenance; never turn an onchain property field into an independently verified authenticity badge without evidence."},{"id":"property-initialization","constraint":"When a token is minted, its physical-asset properties SHOULD be initialized beforehand.","appliesTo":"account-implementation","normativity":"normative","specQuote":"When a token is minted, its properties SHOULD be initialized beforehand, with each field being defined as follows:","specSection":"Specification","specUrl":"https://ercs.ethereum.org/ERCS/erc-7578#specification","designImplication":"Treat missing pre-mint properties as an unavailable or unverified state and do not present a token as fully backed without the declared fields."},{"id":"terms-ipfs-link","constraint":"The terms parameter SHOULD be an HTTP link to a document stored on IPFS.","appliesTo":"account-implementation","normativity":"normative","specQuote":"The `terms` parameter SHOULD be an HTTP link to a document that is stored on IPFS. This is to ensure that the document is immutable and can be verified by the NFT holder.","specSection":"Specification","specUrl":"https://ercs.ethereum.org/ERCS/erc-7578#specification","designImplication":"Expose the terms link and its IPFS-backed provenance as a verification aid, while keeping legal interpretation separate from the metadata field."}],"technicalNotes":"ERC-7578 standardizes issuer, asset-holder, storage, terms, jurisdiction, and declared-value properties plus getPropertiesOf. It does not define a redeem or claim endpoint, shipment state, custodian workflow, delivery tracker, or issuer-verification registry. Keep each field issuer-declared unless an external source is shown, and label any redemption flow as an issuer/application integration.","relatedStandards":[{"id":"ERC-6672","relationship":"Multi-redemption perks on same NFT"},{"id":"ERC-721","relationship":"Physical asset metadata extension"}]},"sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-7578","type":"official-spec"},{"label":"Discussion search","url":"https://ethereum-magicians.org/search?q=ERC-7578","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-7578","markdown":"https://www.eipsfordesigners.com/standards/ERC-7578/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-7578/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-7578","official":"https://ercs.ethereum.org/ERCS/erc-7578","discussion":"https://ethereum-magicians.org/search?q=ERC-7578"},"freshness":{"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18"}}