498 lines
27 KiB
Markdown
498 lines
27 KiB
Markdown
|
---
|
|||
|
eip: 6596
|
|||
|
title: Historical Asset Metadata JSON Schema
|
|||
|
description: Metadata JSON Schema extension to enhance the discoverability, connectivity, and collectability of historically significant NFTs.
|
|||
|
author: Phillip Pon <phillip@artifactlabs.com>, Gary Liu <gary@artifactlabs.com>, Henry Chan <henry@artifactlabs.com>, Joey Liu <joey@artifactlabs.com>, Lauren Ho <lauren@artifactlabs.com>, Jeff Leung <jeff@artifactlabs.com>, Yvan Fatal <yvan@artifactlabs.com>, Brian Liang <brian@artifactlabs.com>, Seungyong Moon <seungyong@artifactlabs.com>, Joyce Li <joyce@artifactlabs.com>, Phoebe Kwok <phoebe@artifactlabs.com>, Avir Mahtani <avir@artifactlabs.com>, Zeon Chan <zeon@artifactlabs.com>, Antoine Cote <anotine@volla.io>, David Leung (@dhl)
|
|||
|
discussions-to: https://ethereum-magicians.org/t/eip-6596-historical-asset-metadata-json-schema/13090
|
|||
|
status: Draft
|
|||
|
type: Standards Track
|
|||
|
category: ERC
|
|||
|
created: 2023-02-28
|
|||
|
requires: 721, 1155
|
|||
|
---
|
|||
|
|
|||
|
## Abstract
|
|||
|
|
|||
|
This EIP proposes the establishment of a new metadata standard for Historical Asset Tokens (HATs) on the Ethereum
|
|||
|
platform. HATs are tokens that represent a specific historical asset, such as a collectible or a rare item, and provide
|
|||
|
comprehensive context and provenance needed to establish historical significance and value.
|
|||
|
|
|||
|
HAT is the metadata standard and smart contract for historical NFTs. While existing NFT standards offer the mechanism to
|
|||
|
ensure immutability and decentralised ownership of assets on the blockchain, we believe a rich metadata standard (that
|
|||
|
includes data for the underlying asset from its moment of creation to its moment of conversion) will imbue historical
|
|||
|
NFTs with the comprehensive context and provenance needed to establish historical significance and value. Additionally,
|
|||
|
the standard will enhance the discoverability, connectivity, and collectability of all HATs.
|
|||
|
|
|||
|
## Motivation
|
|||
|
|
|||
|
In recent years, the market for collectible and rare items has experienced significant growth, with many people looking
|
|||
|
to buy, sell, and trade these assets in an efficient and secure manner. However, the current market for historical
|
|||
|
assets is often plagued by issues such as fraud, counterfeiting, and lack of transparency.
|
|||
|
|
|||
|
The creation of a standard for HATs on the Ethereum platform has the potential to address these issues and provide a
|
|||
|
secure and transparent marketplace for historical assets. By representing historical assets as tokens on the blockchain,
|
|||
|
it becomes possible to create a permanent, tamper-proof record of ownership and transfer of these assets, while also
|
|||
|
providing a level of transparency and security that is not currently available in traditional markets.
|
|||
|
|
|||
|
The standard is proposed as the number and variety of NFT projects increases. The current [ERC-721](./eip-721.md) has a
|
|||
|
modest metadata
|
|||
|
extension, optionally allowing for the inclusion of “name” and “symbol” functions to identify NFT
|
|||
|
collections, and for "name", "descriptions", and “image” attributes to represent assets. Metadata plays a big role in
|
|||
|
facilitating the search and discovery of NFTs on marketplaces. As the number and variety of NFT projects increases,
|
|||
|
disconnected and limited metadata structures makes it difficult for collectors to navigate through the ocean of NFT
|
|||
|
assets on major marketplaces and make sense of their value.
|
|||
|
|
|||
|
The provenance and history of artworks, artifacts and historical IP can take different forms and be created by
|
|||
|
different issuers. While there is no consolidated archive, a standardised metadata structure provides connectivity
|
|||
|
across NFTs associated with historical and cultural assets, regardless of the medium and issuer. For example, a video
|
|||
|
clip issued by a local filmmaker about the 1997 handover of Hong Kong can be connected to the news coverage by South
|
|||
|
China Morning Post (SCMP) of the Sino-British Joint Declaration via the HAT metadata. While well-informed collectors may
|
|||
|
not need this programmed connectivity, a standardised metadata for HATs will make these connections easily accessible
|
|||
|
for all collectors, scholars, and interested parties.
|
|||
|
|
|||
|
Provenance and context are extremely important for historical assets. The archival and research of significant artworks,
|
|||
|
objects, and collections are ongoing; it is a collaborative effort between creators, artist estates, galleries, auction
|
|||
|
houses, scholars and institutions. The consolidation of information and knowledge is not only crucial to the
|
|||
|
understanding of our cultural heritage; the richer the context, the more valuable the asset is to collectors. A shared
|
|||
|
and standardised metadata structure enriches the context of an NFT. With the establishment of HATs, it is our hope that
|
|||
|
this standardised structure will contribute to the evolution of cultural heritage, and fully capture the context of
|
|||
|
culturally and historically significant assets, thereby ensuring relevant and fair value for all historically
|
|||
|
significant NFTs.
|
|||
|
|
|||
|
## Specification
|
|||
|
|
|||
|
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT
|
|||
|
RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174.
|
|||
|
|
|||
|
This EIP extends [ERC-721](./eip-721.md) and [ERC-1155](./eip-1155.md) with 48 additional properties to capture the
|
|||
|
historical significance of the underlying asset.
|
|||
|
|
|||
|
Compatible contracts, besides implementing the relevant metadata schemas ("Metadata JSON Schema" for
|
|||
|
[ERC-721](./eip-721.md) contracts or "Metadata URI JSON Schema" for [ERC-1155](./eip-1155.md) contracts), must implement
|
|||
|
the following metadata interface.
|
|||
|
|
|||
|
### Historical Asset Metadata Extension TypeScript Interface
|
|||
|
|
|||
|
The following TypeScript interface defines the mandatory and optional properties compatible tokens must conform to:
|
|||
|
|
|||
|
```typescript
|
|||
|
interface HistoricalAssetMetadata {
|
|||
|
name: string; // Name of the HAT
|
|||
|
description: string, // Full description of the HAT to provide the historical context
|
|||
|
image: string; // A URI pointing to a resource with mime type image/* to serve as the cover image of the HAT
|
|||
|
properties: {
|
|||
|
id: string; // An unambiguous identifier of the HAT
|
|||
|
summary: string; // Short description of the HAT, no more than 200 characters
|
|||
|
assetType: // The type of the underlying asset
|
|||
|
"newspaper_cover"
|
|||
|
| "magazine_a1_cover"
|
|||
|
| "newspaper_article"
|
|||
|
| "magazine_article"
|
|||
|
| "photo"
|
|||
|
| "graphic"
|
|||
|
| "video"
|
|||
|
| "audio"
|
|||
|
| "3d_object"
|
|||
|
| "others";
|
|||
|
issuers: string[]; // Organizations or individuals who created the HAT
|
|||
|
issueTimestamp: string; // The date and time the HAT was issued in ISO 8601 format
|
|||
|
edition: number; // Unique serial number of the HAT
|
|||
|
editionCount: number; // Total number of editions available for this HAT
|
|||
|
fileURI: string; // Link to the digital file representing the HAT
|
|||
|
fileSize: number; // Size of the digital file of the HAT in bytes
|
|||
|
fileFormat: string; // MIME type of the digital file of the HAT
|
|||
|
seriesName?: string; // The name of the series this HAT is a part of
|
|||
|
assetFullText?: string; // The full text in the underlying asset of the HAT
|
|||
|
assetCreators?: string[]; // Organizations or individuals who created the underlying asset
|
|||
|
earliestPossibleCreationDate?: string; // Earliest possible creation date of the underlying asset in ISO 8601 date format
|
|||
|
latestPossibleCreationDate: string; // Latest possible creation date of the underlying asset in ISO 8601 date format
|
|||
|
assetCreationGeos?: string; // Country, subdivision, and city where the underlying asset was created. Reference to ISO 3166-2 standard for the short name of the country and subdivision. Utilize the official name for the city if it is not covered in the ISO subdivision
|
|||
|
assetCreationLocations?: string[]; // Specific cities and named locations where the underlying asset was created
|
|||
|
assetCreationCoordinates?: string[]; // Coordinates of the location where the underlying asset was created
|
|||
|
relevantDates?: string[]; // Dates, in ISO 8601 date format, that are referenced and important to the significance of the HAT
|
|||
|
relevantGeos?: string[]; // Country, subdivision, and city that are referenced and important to the significance of the HAT. Reference to ISO 3166-2 standard for the short name of the country and subdivision. Utilize the official name for the city if it is not covered in the ISO subdivision
|
|||
|
relevantLocations?: string[]; // Specific cities and named locations that are referenced and important to the significance of the HAT
|
|||
|
relevantPeople?: string[]; // Individuals that are referenced and important to the significance of the HAT
|
|||
|
relevantEntities?: string[]; // Entities that are referenced and important to the significance of the HAT
|
|||
|
assetLanguages?: string[]; // Languages used in the underlying asset. Reference to ISO 639 for code or macrolanguage names
|
|||
|
assetHeight?: string; // Height of the underlying asset
|
|||
|
assetWidth?: string; // Width of the underlying asset
|
|||
|
assetDepth?: string; // Depth of the underlying asset
|
|||
|
assetFileURI?: string; // Link to a high quality file of the underlying asset
|
|||
|
assetFileSize?: number; // Size of the digital file of the underlying asset in bytes
|
|||
|
assetCopyrightHolder?: string; // Copyright holder of the underlying asset
|
|||
|
assetCopyrightDocumentURI?: string; // Link to the legal contract that outlines the copyright of the underlying asset
|
|||
|
assetProvenanceRecordURI?: string; // Link to the existing provenance record documents of the underlying asset
|
|||
|
isPhysicalAsset?: boolean; // Flags whether the asset is tied to a physical asset
|
|||
|
assetMedium?: string; // The material used to create the physical underlying asset
|
|||
|
assetFormFormat?: string; // The physical form or the digital format of the underlying asset. For digital format, a MIME type should be specified.
|
|||
|
issuerNotes?: string; // Issuer's notes regarding the HAT and its underlying asset
|
|||
|
tokenReplaced?: string; // Token identifier of the token this HAT replaced
|
|||
|
tokenReferenced?: string; // Token identifier of the token this HAT referenced, or is a derivative of
|
|||
|
isOwnerTokenCopyrightRightHolder?: boolean; // Flags whether the HAT token holder is the copyright owner of the HAT. Does not include the copyright to the underlying asset
|
|||
|
tokenCopyrightRightDocumentURI?: string; // Link to legal document outlining the rights of the token owner. Specific dimensions include the right to display a work via digital and physical mediums, present the work publicly, create or sell copies of the work, and create or sell derivations from the HAT
|
|||
|
isOwnerAssetCopyrightRightHolder?: boolean; // Flags whether the HAT token holder is the copyright owner of the underlying asset. Does not include the copyright to the underlying asset
|
|||
|
assetCopyrightRightDocumentURI?: string; // Link to legal document outlining the rights of the token owner. Specific dimensions include the right to display a work via digital and physical mediums, present the work publicly, create or sell copies of the work, and create or sell derivations from the underlying asset
|
|||
|
isOwnerTokenReprintRightHolder?: boolean; // Flags whether the token owner has non-exclusive reprint/second serial rights to the HAT. Does not include the rights to the underlying asset
|
|||
|
tokenReprintRightDocumentURI?: string; // Link to legal document outlining the token owner’s reprint/second serial rights of the HAT
|
|||
|
isOwnerAssetReprintRightHolder?: boolean; // Flags whether the token owner has non-exclusive reprint/second serial rights to the underlying asset. Does not include the rights to the underlying asset
|
|||
|
assetReprintRightDocumentURI?: string; // Link to legal document outlining the token owner’s reprint/second serial rights of the underlying asset
|
|||
|
isEligibleForRelatedTokenAirdrops?: boolean; // Flags whether the token holder is eligible for related HAT airdrops
|
|||
|
isEligibleForMetaverseAccess?: boolean; // Flags whether the token holder can gain access to the HAT metaverse
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### Historical Asset Metadata JSON Schema
|
|||
|
|
|||
|
The following JSON Schema enforces the constraints set out in the above interface definition. Tokens adopting the
|
|||
|
Historical Asset Metadata JSON Schema extension should be validated against the JSON schema prior to minting:
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
"title": "Historical Asset Metadata",
|
|||
|
"type": "object",
|
|||
|
"properties": {
|
|||
|
"name": {
|
|||
|
"type": "string",
|
|||
|
"description": "Name of the HAT"
|
|||
|
},
|
|||
|
"description": {
|
|||
|
"type": "string",
|
|||
|
"description": "Full description of the HAT to provide the historical context"
|
|||
|
},
|
|||
|
"image": {
|
|||
|
"type": "string",
|
|||
|
"description": "A URI pointing to a resource with mime type image/* to serve as the cover image of the HAT",
|
|||
|
"format": "uri"
|
|||
|
},
|
|||
|
"properties": {
|
|||
|
"type": "object",
|
|||
|
"description": "Historical asset attributes",
|
|||
|
"properties": {
|
|||
|
"id": {
|
|||
|
"type": "string",
|
|||
|
"description": "An unambiguous identifier of the HAT"
|
|||
|
},
|
|||
|
"summary": {
|
|||
|
"type": "string",
|
|||
|
"description": "Short description of the HAT, no more than 200 characters"
|
|||
|
},
|
|||
|
"assetType": {
|
|||
|
"type": "string",
|
|||
|
"enum": [
|
|||
|
"newspaper_cover",
|
|||
|
"magazine_a1_cover",
|
|||
|
"newspaper_article",
|
|||
|
"magazine_article",
|
|||
|
"photo",
|
|||
|
"graphic",
|
|||
|
"video",
|
|||
|
"audio",
|
|||
|
"3d_object",
|
|||
|
"others"
|
|||
|
],
|
|||
|
"description": "The type of the underlying asset"
|
|||
|
},
|
|||
|
"issuers": {
|
|||
|
"type": "array",
|
|||
|
"items": {
|
|||
|
"type": "string"
|
|||
|
},
|
|||
|
"description": "Organizations or individuals who created the HAT"
|
|||
|
},
|
|||
|
"issueTimestamp": {
|
|||
|
"type": "string",
|
|||
|
"description": "The date and time the HAT was issued in ISO 8601 format",
|
|||
|
"format": "date-time"
|
|||
|
},
|
|||
|
"edition": {
|
|||
|
"type": "integer",
|
|||
|
"description": "Unique serial number of the HAT"
|
|||
|
},
|
|||
|
"editionCount": {
|
|||
|
"type": "integer",
|
|||
|
"description": "Total number of editions available for this HAT"
|
|||
|
},
|
|||
|
"fileURI": {
|
|||
|
"type": "string",
|
|||
|
"description": "Link to the digital file representing the HAT",
|
|||
|
"format": "uri"
|
|||
|
},
|
|||
|
"fileSize": {
|
|||
|
"type": "integer",
|
|||
|
"description": "Size of the digital file of the HAT in bytes"
|
|||
|
},
|
|||
|
"fileFormat": {
|
|||
|
"type": "string",
|
|||
|
"description": "MIME type of the digital file of the HAT"
|
|||
|
},
|
|||
|
"seriesName": {
|
|||
|
"type": "string",
|
|||
|
"description": "The name of the series this HAT is a part of"
|
|||
|
},
|
|||
|
"assetFullText": {
|
|||
|
"type": "string",
|
|||
|
"description": "The full text in the underlying asset of the HAT"
|
|||
|
},
|
|||
|
"assetCreators": {
|
|||
|
"type": "array",
|
|||
|
"items": {
|
|||
|
"type": "string"
|
|||
|
},
|
|||
|
"description": "Organizations or individuals who created the underlying asset"
|
|||
|
},
|
|||
|
"earliestPossibleCreationDate": {
|
|||
|
"type": "string",
|
|||
|
"description": "Earliest possible creation date of the underlying asset in ISO 8601 date format",
|
|||
|
"format": "date"
|
|||
|
},
|
|||
|
"latestPossibleCreationDate": {
|
|||
|
"type": "string",
|
|||
|
"format": "date",
|
|||
|
"description": "Latest possible creation date of the underlying asset in ISO 8601 date format"
|
|||
|
},
|
|||
|
"assetCreationGeos": {
|
|||
|
"type": "array",
|
|||
|
"items": {
|
|||
|
"type": "string"
|
|||
|
},
|
|||
|
"description": "Country, subdivision, and city where the underlying asset was created. Reference to ISO 3166-2 standard for the short name of the country and subdivision. Utilize the official name for the city if it is not covered in the ISO subdivision"
|
|||
|
},
|
|||
|
"assetCreationLocations": {
|
|||
|
"type": "array",
|
|||
|
"items": {
|
|||
|
"type": "string"
|
|||
|
},
|
|||
|
"description": "Specific cities and named locations where the underlying asset was created"
|
|||
|
},
|
|||
|
"assetCreationCoordinates": {
|
|||
|
"type": "array",
|
|||
|
"items": {
|
|||
|
"type": "string"
|
|||
|
},
|
|||
|
"description": "Coordinates of the location where the underlying asset was created"
|
|||
|
},
|
|||
|
"relevantDates": {
|
|||
|
"type": "array",
|
|||
|
"items": {
|
|||
|
"type": "string",
|
|||
|
"description": "Dates, in ISO 8601 date format, that are referenced and important to the significance of the HAT",
|
|||
|
"format": "date"
|
|||
|
}
|
|||
|
},
|
|||
|
"relevantGeos": {
|
|||
|
"type": "array",
|
|||
|
"items": {
|
|||
|
"type": "string"
|
|||
|
},
|
|||
|
"description": "Country, subdivision, and city that are referenced and important to the significance of the HAT. Reference to ISO 3166-2 standard for the short name of the country and subdivision. Utilize the official name for the city if it is not covered in the ISO subdivision"
|
|||
|
},
|
|||
|
"relevantLocations": {
|
|||
|
"type": "array",
|
|||
|
"items": {
|
|||
|
"type": "string"
|
|||
|
},
|
|||
|
"description": "Specific cities and named locations that are referenced and important to the significance of the HAT"
|
|||
|
},
|
|||
|
"relevantPeople": {
|
|||
|
"type": "array",
|
|||
|
"items": {
|
|||
|
"type": "string"
|
|||
|
},
|
|||
|
"description": "Individuals that are referenced and important to the significance of the HAT"
|
|||
|
},
|
|||
|
"relevantEntities": {
|
|||
|
"type": "string",
|
|||
|
"description": "Entities that are referenced and important to the significance of the HAT"
|
|||
|
},
|
|||
|
"assetLanguages": {
|
|||
|
"type": "array",
|
|||
|
"items": {
|
|||
|
"type": "string"
|
|||
|
},
|
|||
|
"description": "Languages used in the underlying asset. Reference to ISO 639 for code or macrolanguage names"
|
|||
|
},
|
|||
|
"assetHeight": {
|
|||
|
"type": "string",
|
|||
|
"description": "Height of the underlying asset"
|
|||
|
},
|
|||
|
"assetWidth": {
|
|||
|
"type": "string",
|
|||
|
"description": "Width of the underlying asset"
|
|||
|
},
|
|||
|
"assetDepth": {
|
|||
|
"type": "string",
|
|||
|
"description": "Depth of the underlying asset"
|
|||
|
},
|
|||
|
"assetFileURI": {
|
|||
|
"type": "string",
|
|||
|
"description": "Link to a high quality file of the underlying asset",
|
|||
|
"format": "uri"
|
|||
|
},
|
|||
|
"assetFileSize": {
|
|||
|
"type": "integer",
|
|||
|
"description": "Size of the digital file of the underlying asset in bytes"
|
|||
|
},
|
|||
|
"assetCopyrightHolder": {
|
|||
|
"type": "string",
|
|||
|
"description": "Copyright holder of the underlying asset"
|
|||
|
},
|
|||
|
"assetCopyrightDocumentURI": {
|
|||
|
"type": "string",
|
|||
|
"description": "Link to the legal contract that outlines the copyright of the underlying asset",
|
|||
|
"format": "uri"
|
|||
|
},
|
|||
|
"assetProvenanceRecordURI": {
|
|||
|
"type": "string",
|
|||
|
"description": "Link to the existing provenance record documents of the underlying asset",
|
|||
|
"format": "uri"
|
|||
|
},
|
|||
|
"isPhysicalAsset": {
|
|||
|
"type": "boolean",
|
|||
|
"description": "Flags whether the asset is tied to a physical asset"
|
|||
|
},
|
|||
|
"assetMedium": {
|
|||
|
"type": "string",
|
|||
|
"description": "The material used to create the physical underlying asset"
|
|||
|
},
|
|||
|
"assetFormFormat": {
|
|||
|
"type": "string",
|
|||
|
"description": "The physical form or the digital format of the underlying asset"
|
|||
|
},
|
|||
|
"issuerNotes": {
|
|||
|
"type": "string",
|
|||
|
"description": "Issuer's notes regarding the HAT and its underlying asset"
|
|||
|
},
|
|||
|
"tokenReplaced": {
|
|||
|
"type": "string",
|
|||
|
"description": "Token identifier of the token this HAT replaced"
|
|||
|
},
|
|||
|
"tokenReferenced": {
|
|||
|
"type": "string",
|
|||
|
"description": "Token identifier of the token this HAT referenced, or is a derivative of"
|
|||
|
},
|
|||
|
"isOwnerTokenCopyrightRightHolder": {
|
|||
|
"type": "boolean",
|
|||
|
"description": "Flags whether or not the HAT token holder is the copyright owner of the underlying asset. Does not include the copyright to the underlying asset"
|
|||
|
},
|
|||
|
"tokenCopyrightRightDocumentURI": {
|
|||
|
"type": "string",
|
|||
|
"description": "Link to legal document outlining the rights of the token owner. Specific dimensions include the right to display a work via digital and physical mediums, present the work publicly, create or sell copies of the work, and create or sell derivations from the HAT",
|
|||
|
"format": "uri"
|
|||
|
},
|
|||
|
"isOwnerAssetCopyrightRightHolder": {
|
|||
|
"type": "boolean",
|
|||
|
"description": "Flags whether or not the HAT token holder is the copyright owner of the underlying asset. Does not include the copyright to the underlying asset"
|
|||
|
},
|
|||
|
"assetCopyrightRightDocumentURI": {
|
|||
|
"type": "string",
|
|||
|
"description": "Link to legal document outlining the rights of the token owner. Specific dimensions include the right to display a work via digital and physical mediums, present the work publicly, create or sell copies of the work, and create or sell derivations from the underlying asset",
|
|||
|
"format": "uri"
|
|||
|
},
|
|||
|
"isOwnerTokenReprintRightHolder": {
|
|||
|
"type": "boolean",
|
|||
|
"description": "Flags whether or not the HAT token owner has non-exclusive reprint/second serial rights to the HAT. Does not include the rights to the underlying asset"
|
|||
|
},
|
|||
|
"tokenReprintRightDocumentURI": {
|
|||
|
"type": "string",
|
|||
|
"description": "Link to legal document outlining the token owner’s reprint/second serial rights of the HAT",
|
|||
|
"format": "uri"
|
|||
|
},
|
|||
|
"isOwnerAssetReprintRightHolder": {
|
|||
|
"type": "boolean",
|
|||
|
"description": "Flags whether or not the HAT token owner has non-exclusive reprint/second serial rights to the underlying asset. Does not include the rights to the underlying asset"
|
|||
|
},
|
|||
|
"assetReprintRightDocumentURI": {
|
|||
|
"type": "string",
|
|||
|
"description": "Link to legal document outlining the token owner’s reprint/second serial rights of the underlying asset",
|
|||
|
"format": "uri"
|
|||
|
},
|
|||
|
"isEligibleForRelatedTokenAirdrops": {
|
|||
|
"type": "boolean",
|
|||
|
"description": "Flags whether or not the HAT token holder is eligible for related HAT airdrops"
|
|||
|
},
|
|||
|
"isEligibleForMetaverseAccess": {
|
|||
|
"type": "boolean",
|
|||
|
"description": "Flags whether or not the HAT token holder can gain access to the HAT metaverse"
|
|||
|
}
|
|||
|
},
|
|||
|
"required": [
|
|||
|
"assetType",
|
|||
|
"id",
|
|||
|
"issuers",
|
|||
|
"summary",
|
|||
|
"issueTimestamp",
|
|||
|
"edition",
|
|||
|
"editionCount",
|
|||
|
"fileURI",
|
|||
|
"fileSize",
|
|||
|
"fileFormat",
|
|||
|
"latestPossibleCreationDate"
|
|||
|
]
|
|||
|
}
|
|||
|
},
|
|||
|
"required": [
|
|||
|
"name",
|
|||
|
"description",
|
|||
|
"image",
|
|||
|
"properties"
|
|||
|
]
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## Rationale
|
|||
|
|
|||
|
### Choosing to Extend Off-Chain Metadata JSON Schema over On-Chain Interface
|
|||
|
|
|||
|
Both the [ERC-721](./eip-721.md) and [ERC-1155](./eip-1155.md) provides natural extension point in the metadata JSON
|
|||
|
file associated with NFTs to provide enriched dataset about the underlying assets.
|
|||
|
|
|||
|
Providing enriched dataset through off-chain metadata JSON files allow already-deployed NFT contracts to adopt the
|
|||
|
metadata structure in this EIP without upgrade or migration. The off-chain design allows for flexible and progressive
|
|||
|
enhancement of any NFT collections to adopt standard such as this EIP, and to progressively enhance and enrich the
|
|||
|
collection over time.
|
|||
|
|
|||
|
By avoiding the need to newly create or adapt smart contracts, NFT collections can be deployed using audited and battle
|
|||
|
tested smart contract code, thus reducing the risk of adopting and implementing a new standard.
|
|||
|
|
|||
|
### Capturing Attributes Extensions in `properties` property
|
|||
|
|
|||
|
The [ERC-1155](./eip-1155.md) standard has a `properties` property in its JSON Metadata Schema to define an arbitrary
|
|||
|
set of additional metadata or properties to describe an underlying asset. Defining the metadata fields in this EIP over
|
|||
|
this properties preserve the overall shape of the metadata schema of the [ERC-1155](./eip-1155.md), minimizing the
|
|||
|
change needed to list and process the proposed properties.
|
|||
|
|
|||
|
For tokens minted against the [ERC-721](./eip-721.md) standard, only one additional property needs to be added to the
|
|||
|
metadata JSON object to take advantage of the standardized fields, simplifying the adoption of this standard.
|
|||
|
|
|||
|
## Backwards Compatibility
|
|||
|
|
|||
|
This EIP is fully backward compatible with [ERC-721](./eip-721.md) and [ERC-1155](./eip-1155.md).
|
|||
|
|
|||
|
## Security Considerations
|
|||
|
|
|||
|
NFT platforms and systems working with Historical Asset Metadata JSON files are recommended to treat the files as client
|
|||
|
supplied data and follow the appropriate best practices for processing such data.
|
|||
|
|
|||
|
When processing the URI fields, backend systems should take care to prevent a malicious issuer exploiting these fields
|
|||
|
to perform Server-Side Request Forgery (SSRF).
|
|||
|
|
|||
|
Frontend or client-side systems are recommended to escape all control characters that may be exploited to perform
|
|||
|
Cross-Site Scripting (XSS).
|
|||
|
|
|||
|
Processing systems are also recommended to take care with resource allocation to mitigate against buffer overflow due to
|
|||
|
improper processing of variable data such as strings, arrays, and JSON objects. This is to prevent the systems from
|
|||
|
becoming susceptible to Denial of Service (DOS) attack or circumventing security protection through arbitrary code
|
|||
|
exception.
|
|||
|
|
|||
|
The metadata JSON files and the digital resources representing both the token and underlying assets should be stored in
|
|||
|
a decentralized storage network to preserve integrity and to ensure available of data for long term preservation.
|
|||
|
|
|||
|
Establishing the authenticity of the claims made in the Metadata JSON file is beyond the scope of this EIP, and is left
|
|||
|
to future EIPs to propose an appropriate protocol.
|
|||
|
|
|||
|
## Copyright
|
|||
|
|
|||
|
Copyright and related rights waived via [CC0](../LICENSE.md).
|