{"id":"ERC-5375","name":"Author NFTs","status":"Final","chain":"both","category":{"id":"security","name":"Security & Trust","description":"Helping users verify, control, and protect their assets"},"journeyStages":[{"id":"authentication","name":"Authentication & Identity","description":"Proving who you are and logging in"}],"uxImpact":"ERC-5375 adds an authorInfo metadata field for NFT author names, addresses, and optional author-consent proofs. A consent proof shows that a signer agreed to be named as an author; the specification explicitly says that consent is not proof that the signer created the NFT. The metadata is normally off-chain and the signed field subset must be shown.","officialUrl":"https://ercs.ethereum.org/ERCS/erc-5375","lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","kind":"proposal","hasDetailedContent":true,"content":{"id":"ERC-5375","summary":"ERC-5375 adds an authorInfo metadata field for NFT author names, addresses, and optional author-consent proofs. A consent proof shows that a signer agreed to be named as an author; the specification explicitly says that consent is not proof that the signer created the NFT. The metadata is normally off-chain and the signed field subset must be shown.","specConstraints":[{"id":"eip55-address-casing","constraint":"All addresses used in ERC-5375 metadata and consent data must follow EIP-55 casing rules.","appliesTo":"application","normativity":"normative","specQuote":"All addresses used in this standard MUST follow the casing rules described in [EIP-55](./eip-55.md).","specSection":"Specification","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#specification","designImplication":"Preserve checksummed address rendering and validation in author previews, consent verification, and copyable metadata."},{"id":"author-info-interface","constraint":"authorInfo is the required authorship-claim interface and the optional author-consent-proof interface.","appliesTo":"application","normativity":"normative","specQuote":"The standard introduces a new JSON field, named `authorInfo`. It provides a REQUIRED interface for authorship claiming, as well as an OPTIONAL interface for author consent proofs.","specSection":"Specification / Authorship Support","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#authorship-support","designImplication":"Label authorship claims and consent proofs as separate states, and do not make consent support appear mandatory when a metadata producer exposes only the claim interface."},{"id":"author-info-metadata-extensions","constraint":"EIP-721 and EIP-1155 metadata documents must include top-level authorInfo when their metadata extensions are supported.","appliesTo":"application","normativity":"normative","specQuote":"- If a contract supports the metadata extension for [EIP-721](./eip-721.md), the JSON document pointed by `tokenURI(uint256 _tokenId)` MUST include the top-level field `authorInfo`\n- If a contract supports the metadata extension for [EIP-1155](./eip-1155.md), the JSON document pointed by `uri(uint256 _id)` MUST include a top-level field `authorInfo`","specSection":"Specification / Authorship Support","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#authorship-support","designImplication":"Check the token's metadata extension before showing an author panel and handle missing authorInfo as an unavailable metadata state rather than an empty verified author."},{"id":"author-list-required","constraint":"The authorInfo schema must require its authors array, even though the array may be empty.","appliesTo":"application","normativity":"normative","specQuote":"\"required\": [ \"authors\" ]","specSection":"Specification / Authorship Support","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#authorship-support","designImplication":"Distinguish a valid empty author list from malformed metadata and avoid inventing an author when the schema contains no entries."},{"id":"author-address-required","constraint":"Each author record must require an address.","appliesTo":"application","normativity":"normative","specQuote":"\"required\": [ \"address\" ]","specSection":"Specification / Authorship Support","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#authorship-support","designImplication":"Render an author record as incomplete until its address is present and validated; a display name alone is not an author identity."},{"id":"consent-info-required","constraint":"If an author record contains consent, authorInfo must contain consentInfo.","appliesTo":"application","normativity":"normative","specQuote":"Moreover, if the `consent` field is present, the `consentInfo` field of `authorInfo` MUST be present.","specSection":"Specification / Authorship Support","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#authorship-support","designImplication":"Treat a consent-bearing author record without consentInfo as invalid and show the missing binding context instead of a verified badge."},{"id":"consent-schema-required-fields","constraint":"Consent data must include version, issuer, and metadataFields.","appliesTo":"application","normativity":"normative","specQuote":"\"required\": [\"version\", \"issuer\", \"metadataFields\"]","specSection":"Specification / Authorship Support","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#authorship-support","designImplication":"Expose the consent schema version, issuer, and signed field selection before accepting a consent proof."},{"id":"consent-proof-required-fields","constraint":"A consent proof must include consentData, publicKey, and signature.","appliesTo":"application","normativity":"normative","specQuote":"\"required\": [\"consentData\", \"publicKey\", \"signature\"]","specSection":"Specification / Authorship Support","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#authorship-support","designImplication":"Keep proof metadata, public key, and signature as separate validation states so a partial record cannot be presented as consent."},{"id":"consent-data-completeness","constraint":"consentData must include every detail not present elsewhere that is needed to verify the authorship consent proof.","appliesTo":"application","normativity":"normative","specQuote":"`consentData` MAY support additional fields as defined by other EIPs. `consentData` MUST contain all the information (which is not already present in other fields) required to verify the validity of an authorship consent proof.","specSection":"Specification / Authorship Support","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#authorship-support","designImplication":"Show unsupported or missing consent fields as an unverifiable proof rather than silently discarding fields introduced by an extension."},{"id":"consent-metadata-canonicalization","constraint":"The signed metadata JSON must contain exactly the selected fields in order, escape non-ASCII characters with uppercase hexadecimal letters, and contain no other whitespace.","appliesTo":"application","normativity":"normative","specQuote":"- MUST contain exactly the same fields as the ones listed in `metadataFields`, in the same order\n- MUST escape all non-ASCII characters. If the escaped character contains hexadecimal letters, they MUST be uppercase\n- MUST not contain any whitespace that is not part of a field name or value","specSection":"Specification / Author Consent","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#author-consent","designImplication":"Show the exact signed field subset and canonical serialization before signing or verification; formatting changes must produce an explicit mismatch state."},{"id":"consent-verification-fields","constraint":"A consent proof must verify that the token metadata contains every metadataFields entry with the same value.","appliesTo":"application","normativity":"normative","specQuote":"- If calling `tokenURI` (for EIP-721) or `uri` (for EIP-1155) returns the URI of a JSON document D2, all the top-level fields listed in `metadataFields` MUST exist and have the same value;","specSection":"Specification / Author Consent Verification","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#author-consent-verification","designImplication":"Compare the signed field values with the current token metadata and show which field changed when the proof no longer matches."},{"id":"consent-signature-verification","constraint":"A consent proof is valid only when its EIP-712 signature computed from the declared fields is valid.","appliesTo":"application","normativity":"normative","specQuote":"- The EIP-712 signature in `signature` (computed using the fields specified in the JSON document) is valid;","specSection":"Specification / Author Consent Verification","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#author-consent-verification","designImplication":"Keep signature validity distinct from metadata availability and from any external claim that the signer is the actual creator."},{"id":"consent-proof-limits","constraint":"A valid consent proof must not be treated as proof that the signer is the actual author; absence of a valid proof for an address may be treated as evidence that the address is not the actual author.","appliesTo":"application","normativity":"normative","specQuote":"Verifiers MUST NOT assume that an NFT with a valid consent proof from address X means that X is the actual author. On the other hand, verifiers MAY assume that if an NFT does not provide a valid consent proof for address X, then X is not the actual author.","specSection":"Specification / Author Consent Verification","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#author-consent-verification","designImplication":"Use labels such as consented author address, not verified creator, and preserve the distinction between a positive consent proof and an absent proof."},{"id":"signature-field-review","constraint":"Authors must verify that all signature fields match the required fields before signing an authorship consent message.","appliesTo":"application","normativity":"security-considerations","specQuote":"A potential attack that exploits this EIP involves tricking authors into signing authorship consent messages against their wishes. For this reason, authors MUST verify that all signature fields match the required ones.","specSection":"Security Considerations / Attacks","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#attacks","designImplication":"Make the signed field list, values, token identity, and issuer visible in the consent approval step so an author can detect a deceptive request."},{"id":"metadata-fields-security","constraint":"Omitting important fields from metadataFields can let a minter change critical information while keeping the author signature valid.","appliesTo":"application","normativity":"security-considerations","specQuote":"A more subtle approach involves not adding important fields to `metadataFields`. By doing so, the author signature might be valid even if the minter changes critical information.","specSection":"Security Considerations / Attacks","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#attacks","designImplication":"Make the signed-field coverage explicit and warn when a consent proof omits product-critical metadata such as name, description, or provenance fields."},{"id":"unverifiable-author-info","constraint":"Smart contract developers should not add unverifiable author information to the JSON document.","appliesTo":"application","normativity":"security-considerations","specQuote":"For this reason, smart contract developers SHOULD NOT add support for unverifiable information to the JSON document. We believe that the most secure way to provide complex authorship information (e.g. the name of the author) is to prove that the information is associated with the _author's address_, instead of with the NFT itself.","specSection":"Security Considerations / Deprecated Features","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#deprecated-features","designImplication":"De-emphasize free-form author names and bind any displayed identity claim to an address-backed policy instead of treating metadata text as proof."},{"id":"nft-replay-identity","constraint":"The chain ID, contract address, and token ID uniquely identify an NFT for replay resistance, so no extra nonce countermeasure is required by this standard.","appliesTo":"application","normativity":"security-considerations","specQuote":"The chain id, the contract address and the token id uniquely identify an NFT; for this reason, there is no need to implement additional replay attack countermeasures (e.g. a nonce system).","specSection":"Security Considerations / Replay Attack Resistance","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#replay-attack-resistance","designImplication":"Bind verification records and signing previews to chain, contract, and token identity, and do not imply that a consent proof is portable to another NFT."},{"id":"optional-authorship-revocation","constraint":"Smart contracts may optionally implement an authorship-consent revocation system.","appliesTo":"application","normativity":"rationale","specQuote":"Smart contracts MAY implement a revocation system, such as the one defined in other EIPs.","specSection":"Rationale — Why not implement a revocation system?","specUrl":"https://ercs.ethereum.org/ERCS/erc-5375#why-not-implement-a-revocation-system","designImplication":"If a contract supports revocation, show the revocation state as conditional metadata. Do not imply that every consent proof has a universal revoke path."}],"applicability":{"whenToUse":["NFT metadata needs structured author names, addresses, and optional consent proofs.","The product can show author consent, signed fields, URI, and an external authenticity policy separately.","The verifier can handle off-chain metadata retrieval and changed/unavailable states."],"whenToAvoid":["The product needs proof that an address created the work or an on-chain metadata record.","The verifier cannot expose the exact authorInfo URI and signed field subset.","The app cannot separate author consent from an external authenticity policy."]},"designerTakeaways":["Label the result as author consent or claimed author consent, not verified authorship.","Show the authorInfo URI, the exact metadata fields covered by the signature, and the recovered address.","Separate consent verification from any marketplace or issuer policy for creator authenticity."],"problemsSolved":[{"problem":"Creators need a structured way to publish attribution","oldWay":"Free-form metadata uses inconsistent names and addresses","newWay":"authorInfo describes authors, addresses, and optional consent data","impact":"high"},{"problem":"A person may be named without agreeing to the attribution","oldWay":"Minter publishes an unverified creator claim","newWay":"A consent proof can show that the signer agreed to be named","impact":"high"},{"problem":"Verifiers cannot tell what a consent signature covers","oldWay":"A badge hides the signed metadata subset","newWay":"Verification shows the URI and selected fields bound by the signature","impact":"medium"},{"problem":"Multiple contributors need separate attribution records","oldWay":"One creator string collapses collaboration","newWay":"authorInfo can list multiple authors and their consent records","impact":"medium"}],"uxPatterns":[{"name":"Author Consent Label","description":"Show a precise consent state on NFT details.","userFlow":["User views NFT","App loads authorInfo","Shows consent verified, unavailable, or changed","Explains that consent does not prove who created the work"]},{"name":"Consent Verification Panel","description":"Expose the URI and signed field subset for independent review.","userFlow":["User opens verification","Sees authorInfo URI and authors list","Sees metadata fields selected in consentData","Checks signature and recovered address","Reads the external authenticity policy if one exists"]},{"name":"Multi-Author Attribution","description":"List each named author and their separate consent state.","userFlow":["User opens collaboration details","Sees each author and address","Expands each consent record","Understands which claims are unverified or missing"]},{"name":"Metadata Change Warning","description":"Make off-chain metadata and field changes visible.","userFlow":["App fetches authorInfo","Checks selected fields and signature","Shows changed or unavailable state when the URI no longer matches","Links to the external policy or source record"]}],"uiComponents":[{"name":"AuthorConsentBadge","description":"Shows author-consent verification status without asserting authorship.","states":["consent-verified","unverified","checking","invalid"],"props":["signature","claimedAuthor","onVerify"]},{"name":"SignatureProofPanel","description":"Detailed signature verification display","states":["collapsed","expanded","verifying"],"props":["signedData","signature","recoveredAddress"]},{"name":"CollaboratorList","description":"Lists named authors and their separate consent states.","states":["loading","loaded","partial-verified"],"props":["authors","roles","signatures"]},{"name":"ProvenancePolicyWarning","description":"Explains missing consent, metadata changes, or an external authenticity policy.","states":["info","warning","unavailable"],"props":["claimedAuthors","metadataUri","consentState","policy"]}],"antiPatterns":[{"pattern":"Calling author consent proof authorship proof","why":"The specification explicitly says a signer can consent without creating the NFT.","instead":"Use author consent language and pair it with an independent creator-authenticity policy.","severity":"critical"},{"pattern":"Treating authorInfo as on-chain permanent storage","why":"authorInfo is a metadata JSON field and is commonly resolved off-chain.","instead":"Show the URI, retrieval state, and signed fields; do not promise on-chain permanence.","severity":"critical"},{"pattern":"Using a generic verified creator badge","why":"Consent does not prove the address is the real creator or prevent fake collections.","instead":"Separate consent, metadata integrity, and external identity/issuer checks.","severity":"high"},{"pattern":"Hiding the signed field selection","why":"A consent signature may cover only selected metadata fields.","instead":"Display the exact fields and schema version used for verification.","severity":"high"}],"keyTakeaways":["ERC-5375 standardizes authorInfo and optional author-consent proofs.","Consent to be named is not proof that the signer authored the NFT.","Show the metadata URI and exact signed field subset.","Use a separate creator-authenticity policy when a product needs one."],"technicalNotes":"ERC-5375 defines an authorInfo JSON field for NFT metadata. Its optional consent data signs selected metadata fields and proves that an address agreed to be considered an author; the specification says verifiers MUST NOT assume that signer actually authored the NFT. The field can be off-chain through tokenURI/uri, so verify the URI, schema, selected fields, public key, and signature before showing author-consent status.","lastUpdated":"2026-09-18","sources":[{"label":"ERC-5375 official specification","url":"https://ercs.ethereum.org/ERCS/erc-5375","type":"official-spec"}],"lastReviewed":"2026-09-18","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-5375","type":"official-spec"},{"label":"Discussion search","url":"https://ethereum-magicians.org/search?q=ERC-5375","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-5375","markdown":"https://www.eipsfordesigners.com/standards/ERC-5375/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-5375/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-5375","official":"https://ercs.ethereum.org/ERCS/erc-5375","discussion":"https://ethereum-magicians.org/search?q=ERC-5375"},"freshness":{"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18"}}