翻译:m-NFT 协议的动态交互扩展
原文:Dynamic Interaction Extension for m-NFT Protocol
译注:本文作者为 Cipher,翻译内容如果有任何可以改进之处,恳请不吝赐教
介绍
m-NFT 是一个活跃的 NFT 标准草案,已被 Nervos CKB 上的一些社区驱动的产品和团队所采纳。NFT 作为一种社交代币,不应该是静态以及单向性的。想象一个动态的 NFT,允许持有人与发行人和其他持有人互动,形成一个更广泛的 NFT 概念和边界。
我已经观察到许多动态交互的 NFT 产品了,例如 PixEOS 1,Open Satoshi 1,async.art 等。然而,在动态交互接口和参数的标准方面却没有什么进展。没有具体的标准,第三方钱包和探索者就不能正确地访问和渲染 NFT,因此不能提供与原生应用程序相同的用户体验。
在这里,我们提出了一个动态交互标准,大大扩展了 m-NFT 的功能,以建立基于游戏的 NFT、多人合作艺术、生成艺术、社会实验和其他社区参与的作品。有了这个标准,钱包和其他应用程序可以很容易地访问 m-NFT,以提供各种用户动作和表达。
动态部分
NFT 的多媒体信息在某些条件下是否应该是可变的或改变的,这仍然是一个有争议的问题。由于区块链世界是如此不可预测,新技术新思想每天都在涌现,我们决定不在这个问题上做过多的挖掘。但相反,我们选择赋予 m-NFT 更多表达力的能力,使其更加强大。
每个 m-NFT 都有一个 renderer
字段,用来设置图像、视频、声音或其他媒体的显示。它可以是任何类型的 URI,包括中心化的 URL,去中心化的 ipfs 地址等。动态部分的想法很简单,显示层向 URI 提供各种上下文参数,以表明它分别返回可变的内容。上下文参数可以包括代币的发行指数、持有者的地址、持有时间、epoch 数、分布均匀性、周转次数等。
var | format | description |
---|---|---|
tid | integer | token index under same NFT class |
holdsec | integer | holding time (UTXO live length in seconds) |
char | hex | NFT characteristic bytes |
state | hex | NFT state byte |
configure | hex | NFT configure byte |
subset | string | subset description defined in extinfo_data , optional |
有了这些 context parameters
,我们可以为已经分发的每个 NFT 创造一个变化的前景。这将会释放出巨大的可能性,例如根据持有期的不同而改变活体宠物的形象。
交互部分
由于 NFT 的主要特征之一是社会性,因此在设计协议时考虑 NFT 持有者之间的交互非常重要。m-NFT 协议中有一个 8 字节的characteristic
属性,用于用户对发行者或其他持有人的反馈或互动。默认情况下,持有者可以根据自己的意愿将此参数更改为任何字节。所以用户可以设置不同的特征数据来互相交流他们的想法。
例如,如果我们将 characteristic
的前两个字节解释为 ISO Alpha-2 国家代码,第三个字节解释为灯光状态。每个持有者都可以设定他们最喜欢的国家,为她点燃一盏灯。通过链上收集的所有这些数据,我们可以生成一个动态的全球灯光地图,随着 NFT 持有人的选择变化而变化。
有时候,8 字节的characteristic
对于某些动作描述来说是不够的,比如角色塑造。
有时发行者想把持有人的行为限制在一个小范围内。因此,我们引入extinfo_data
使交互部分更加强大,首先,作为惯例,我们将第一个extinfo_data
字段设置为 json 字符串,它包含以下变量。
var | present | value | description |
---|---|---|---|
"id" |
must | "ce" |
identity bytes for characteristic extension |
"vs" |
optional | string |
subset description for characteristic, such as “face”, “location”, … |
"va" |
optional | hex for 8byte shield | set characteristic = characteristic & va |
"vo" |
optional | hex for 8byte shield | set `characteristic = characteristic |
id
属性用于告诉应用程序应该如何解释它。vs
属性指的是 characteristic
所描述的内容。例如,如果我们铸造了 1 万个「crypto avatar」NFTs,其中 1 千个设置为「vs」=「face」,1 千个设置为「vs」=「body」,……,其余的设置为「vs」=「ornament」。由于我们有了单独的 characteristic
字段来描述一个 NFT 的不同细节,使得 NFTs 的表达力大大增强。va
和 vo
字节被设置为约束用户交互。我们可以铸造一个具有面部整形能力的 avatar NFT,但持有者只能修改眉毛,而其他特征是预先定义和固定的。
// valid extinfo_data examples
{
"id" : "ce",
"vs" : "nose",
"va" : "ffff00000000000000",
"vo" : "000018000000000000"
}
{
"id" : "ce",
"va" : "ffff00000000000000"
}
{
// empty is also valid
}
最后,应用程序将解析 extinfo_data
字段,计算 c = (c & va) | vo
,其中 c
表示 characteristic
,然后将 characteristic
和subset
(设置为vs
) 传递给渲染器 URI。
总结
通过动态交互扩展,我们可以让 NFTs 更具社交性、可玩性和不可预测性。期待在不久的将来出现的众多可能性。