系统对象:显示对象
显示对象(Display
public struct Display<phantom T: key> has key, store {
id: UID,
/// 包含展示的字段
/// 现支持的字段: name, link, image 和 description.
fields: VecMap<String, String>,
/// 版本号只能有出版人手动更新
version: u16
}
如果一个账户同时持有 MyObject 和 Display
module 0x123::my_module {
public struct MyObject has key {
id: UID,
num_value: u64,
string_value: String,
}
public fun create_display_object(publisher: &Publisher, ctx: &mut TxContext) {
let display_object = display::new<MyObject>(&publisher, ctx);
display::add_multiple(
&mut display,
vector[
utf8(b"num_value"),
utf8(b"string_value"),
],
vector[
utf8(b"Value: {num_value}"),
utf8(b"Description: {string_value}"),
],
);
display::update_version(&mut display);
}
}
为了创建显示对象,我们需要一个指向发布者对象的引用,该对象位于部署 MyObject 的模块中。
假设我们已经创建了这个对象(参见上一课)并将其存储在我们控制的账户中,我们可以使用这个账户来调用 create_display_object
。
创建显示对象后,我们可以通过调用 display::add_multiple
并传递两个向量来添加格式化规则,
一个用于 MyObject 中要显示的字段列表,另一个用于格式化规则。
设置格式化规则后,我们可以调用 display::update_version
来最终确定对显示对象的更新。
一旦创建了显示对象,将会发出一个事件,允许 Sui 网络节点检测显示对象。
随后,每当通过节点 API 获取对象时,其显示字段也会按照指定的格式计算,并与对象的其他字段一起返回。