Sui Display 入门

  • sycute
  • 更新于 2024-03-26 09:28
  • 阅读 892

介绍 SuiNetwork 的 Display 功能


title: display description: sui display 介绍 keywords: [sui, nft, display]

1. 介绍

通常,每个 NFT 都会有个图像信息需要展示。用户拥有一个 NFT Object,如何在钱包/浏览器中以图片形式展示? 常用的定义方式如下:

struct NFT has key {
    id: UID,
    name: string,
    image_url: string, // 钱包/浏览器等通过这个值显示图片
}

前端拿到用户的 NFT 信息之后,通过image_url属性再次访问图片信息。 但是在Sui这里,更推荐使用Display

2. display

sui 对象 Display 标准是一个模版引擎,可以对类型的链下显示进行链上管理。通过 Display 将对象的数据替换为模版字符串。可以使用 {property} 语法访问所有对象属性,然后将他们作为模板字符串的一部分插入。

struct Display has<NFT> key {
    name: {name},
    image_url: {imageUrl},
}

建议的基本属性集包括:

  • name:对象名称
  • description:对象描述
  • image_url:对象的图像的 URL 或 blob
  • thumthumbnail_url:用于钱包、浏览器或其他产品作为浏览的小图像的 URL
  • project_url:项目的 URL
  • link:在应用程序中使用的对象的链接

3. 实践

通过一个合约来看下是如何使用的。

关键代码如下:

// 定义有哪些 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 函数

mint

这里使用如图示例参数,然后在浏览器查看该交易内容,F12 可以看到这样一个请求

json-rpc

// 请求 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"这些就是按照模版组装好的字符串,这样浏览器/钱包等就可以通过访问指定链接展示图片信息。


  • 原创
  • 学分: 4
  • 分类: Sui
  • 标签: Move 
点赞 2
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
sycute
sycute
0x80d6...FdC9
电报联系 @luosanzhang