介绍 SuiNetwork 的 Display 功能
通常,每个 NFT 都会有个图像信息需要展示。用户拥有一个 NFT Object,如何在钱包/浏览器中以图片形式展示? 常用的定义方式如下:
struct NFT has key {
id: UID,
name: string,
image_url: string, // 钱包/浏览器等通过这个值显示图片
}
前端拿到用户的 NFT 信息之后,通过image_url
属性再次访问图片信息。
但是在Sui
这里,更推荐使用Display
。
sui 对象 Display 标准是一个模版引擎,可以对类型的链下显示进行链上管理。通过 Display 将对象的数据替换为模版字符串。可以使用 {property}
语法访问所有对象属性,然后将他们作为模板字符串的一部分插入。
struct Display has<NFT> key {
name: {name},
image_url: {imageUrl},
}
建议的基本属性集包括:
通过一个合约来看下是如何使用的。
关键代码如下:
// 定义有哪些 key
let keys = vector[
utf8(b"name"),
utf8(b"image_url"),
utf8(b"project_url"),
];
// 对应的key的值是什么,对应key的定义顺序
let values = vector[
// `name`值 从对象的`name`中获取
utf8(b"{name}"),
// 可以提前设置一个模版,动态拼接
utf8(b"https://github.com/{name}.png"),
// 也可以设置固定值
utf8(b"https://github.com"),
];
...
部署该合约,然后调用 mint
函数
这里使用如图示例参数,然后在浏览器查看该交易内容,F12 可以看到这样一个请求
// 请求 showDisplay 内容
{
"jsonrpc":"2.0",
"id":4,
"method":"sui_multiGetObjects",
"params":[
[
//"0x4c372c5a2202bc42178b26fff3e342db3a5cba1ad35f4a53e048155bb6bab7ab",
"0x8651a86be0724cf6fbd85ceca11f325bbc01f4b64d3c1cd52a753e1c6cb9e9a3"
],
{
"showDisplay":true
}
]
}
// 响应内容为:
{
// ...
{
"data": {
"objectId": "0x8651a86be0724cf6fbd85ceca11f325bbc01f4b64d3c1cd52a753e1c6cb9e9a3",
"version": "24403529",
"digest": "EGx97cr5NuYJ5H9vY2726ZXp6hWapPJXGTtJ6KfpKXF4",
"display": {
"data": {
"image_url": "https://github.com/inscriptiontek.png", // 这里是按照模版拼接好的字段
"name": "inscriptiontek", // 动态值
"project_url": "https://github.com" // 固定字段
},
"error": null
}
}
}
],
// ...
}
从 json-rpc
返回中类似"image_url": "https://github.com/inscriptiontek.png"
这些就是按照模版组装好的字符串,这样浏览器/钱包等就可以通过访问指定链接展示图片信息。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!