翻译: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 characteristicbytes | 
| state | hex | NFT statebyte | 
| configure | hex | NFT configurebyte | 
| 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 更具社交性、可玩性和不可预测性。期待在不久的将来出现的众多可能性。