AVATA 平台 NFT 元数据规范
一、什么是元数据Metadata?
二、推荐的元数据实施方式
I 【底层链API接入】(原SDK接入方式):
NFT 和 MT
// 原生NFT数据结构
{
"sender": "",
"recipient": "",
"denom": "",
"id": "",
"uri": "http://example.com/example.json", // 此处为元数据JSON文件的储存位置
"data": "",
"name": "",
"uri_hash": "",
"denom_name": "",
"nft_name": ""
},
// 原生MT数据结构
{
"id": "",
"denom_id": "",
"amount": "",
"data": {
"uri":"http://example.com/example.json" // 此处为元数据JSON文件的储存位置
},
"sender": "",
"recipient": "",
"denom_name": ""
}
// http://example.com/example.json 为元数据JSON文件的储存位置
response,err := client.Get("http://example.com/example.json")
if err != nil {
return
}
// 读取文件二进制数据
resultBytes, err := ioutil.ReadAll(response.Body)
if err != nil {
return
}
// 使用 sha-256 计算摘要
hashBytes := sha256.Sum256(resultBytes)
// 生成 hash 字符串
uriHash := hex.EncodeToString(hashBytes[:])
fmt.Println(uriHash)
II 【 AVATA多链跨链分布式应用服务平台】
// 发行文昌链原生NFT,入参时在uri中指定元数据JSON文件的url
{
"name": "string",
"uri": "http://example.com/example.json", // 此处为元数据JSON文件的储存位置
"uri_hash": "string",
"data": "string",
"recipient": "string",
"tag": {
"key1": "string",
"key2": "string",
"key3": "string"
},
"operation_id": "string"
}
// 发行文昌链原生MT,入参时在data.uri中指定元数据JSON文件的url
{
"data": {
"uri":"http://example.com/example.json" // 此处为元数据JSON文件的储存位置
},
"amount": 1,
"recipient": "string",
"tag": {
"key1": "string",
"key2": "string",
"key3": "string"
},
"operation_id": "string"
}
三、资产元数据规范建议
{
"description": "Friendly Creature that enjoys long swims in the ocean.",
"external_url": "https://oss.bianjie.ai/20220914010854282a92892.html",
"image": "http://example.com/example.png",
"name": "Dave Starbelly",
"attributes": [ ... ],
}
{
"name": "", // NFT名称
"description": "", // NFT的文字介绍,值为String格式,发行方可以根据前端应用的需求来定义字符串格式和解析方式,比如支持Markdown语法等;
"description_url":[], // NFT介绍的网络素材,值为图片url数组,可以使用海报或长图以便在应用端展示对NFT的图文介绍;
"external_url": "", // 外部链接,值为网页的url,可以允许跳转到指定的外部页面,可用于指向发行方的原生应用或跳转到指定的NFT应用场景web页面;
"image": "", // NFT图片,值为图片的url
"animation_url":"", // 多媒体素材,值为素材的url,如视频、音频、3D模型、HTML(可允许使用 JavaScript 画布、WebGL 等构建丰富的体验和交互式 NFT)
"background_color":"", // NFT卡片背景色
"attributes": [ // NFT的属性集合,项目方可以根据业务属性自定义该NFT的属性分类以及取值
// 默认的String类型属性
{
"trait_type": "Base",
"value": "Starfish"
},
// 默认的number类型属性
{
"trait_type": "level",
"value": "5"
},
// 指定为Boost样式的number类型属性,可以与默认的number类型进行不同的前端展示
{
"display_type": "boost_number",
"trait_type": "Aqua Power",
"value": 40
},
// 指定为Boost样式的百分比number类型属性,可以与默认的number类型进行不同的前端展示
{
"display_type": "boost_percentage",
"trait_type": "Stamina Increase",
"value": 10
},
// 指定数值样式的number类型属性,可以与默认的number类型进行不同的前端展示
// max_value为可选项,赋值则指定该属性的最大值
{
"display_type": "number",
"trait_type": "排名",
"value": 1,
"max_value": 30
},
// 日期类型属性
{
"display_type": "date",
"trait_type": "birthday",
"value": 1546360800
}
]
}
四、关于资产类别元数据的建议
irita tx nft issue <denom-id> --schema=<schema-content or path/to/schema.json> --mint-restricted=<mint-restricted> --update-restricted=<update-restricted>
contract MyCollectible is ERC721 {
function contractURI() public view returns (string memory) {
return "https://metadata-url.com/my-metadata";
}
}
/*
发行文昌链原生 NFT
接口:https://apis.avata.bianjie.ai/v1beta1/nft/classes,入参时在uri中指定元数据JSON文件的url
*/
{
"name": "string",
"class_id": "string",
"symbol": "string",
"description": "string",
"uri": "http://example.com/example.json", // 此处为Class元数据JSON文件的储存位置
"uri_hash": "string",
"data": "string",
"owner": "string",
"tag": {
"key1": "string",
"key2": "string",
"key3": "string"
},
"operation_id": "string"
}
/*
发行文昌链原生 MT
接口:https://apis.avata.bianjie.ai/v1beta1/mt/classes
入参时在data.uri中指定元数据JSON文件的url
*/
{
"name": "string",
"owner": "string",
"data": {
"uri": "http://example.com/example.json", // 此处为Class元数据JSON文件的储存位置
},
"tag": {
"key1": "string",
"key2": "string",
"key3": "string"
},
"operation_id": "string"
}
{
"name": "", // NFT Class的名称,值为String类型
"description": "", // NFT Class的文字描述,值为String类型
"image": "", // NFT Class的图片,值为图片的url
"external_url": "", // NFT Class的外部链接,值为网页的url
}
修改于 超过 1 年前