为什么Movescriptions是更适合智能合约链的铭文2.0设计?

前言

前几天在sui生态中出现了一个创新性的铭文标准MRC20,其首个代币$Move在社区中引起了一定的热度。我在接收到消息之后,也是在第一时间点进官网:https://mrc20.fun/ 准备mint。

官网做得十分简洁,在铸造页面,只有如下的一些铭文的基本信息以及一个蓝色的Mint按钮。在按钮下方用一句话概括出该铭文标准的创新点--“所有的铸造费用都会存储在你的铭文之中,你可以通过燃烧你的铭文取回你的铸造费用,在每轮周期结束之后你的铭文会被发送到你的地址”。

由于之前完全没有接触过Move语言再加上这句话,让我对其实现原理产生了很大的好奇,于是仔细研究了作者的推特,博文以及github开源的代码,输出了这篇文章。

作者背景

jolestar(推特:@jolestar) 是一个善于编程和写作的技术大牛,从他的个人博客网站(https://jolestar.com/)可以看到,他从2007年就开始坚持输出技术文章和人生感悟。从他的个人Github主页也可以看到简介中的三个项目都是与Move语言相关的。

jolestar自述从19年就开始捣鼓Move,此外他还发起了一个Move语言教育类公益项目--星航计划(致敬电影星际迷航),完成课程顺利毕业还可以拿到现金奖励,旨在为Move生态引进更多的开发者。

所以,从上述资料我们可以得知jolestar是一个对Move生态非常熟悉的开发者。

SFT

我们都知道BRC20是在铭文中嵌入JSON文本来表示代币的名称和数量等信息,用NFT(Non-Fungible Token,非同质化代币)的形式来实现FT(Fungible Token,同质化代币)的功能,本质上可以把它归类为一种SFT(Semi-Fungible Token,半同质化资产)。

当然SFT并非jolestar首创,早在2022年9月就由我们华人团队@SolvProtocol主导设计并且正式通过成为以太坊新的代币标准ERC-3525。

同质化代币是指每个代币在功能和价值上都是相等的,没有任何区别,可以互相替换,1 BTC=1 BTC,非同质化代币是指每个代币都是唯一的不可以替换的,1 BAYC  ≠ 1 BAYC,半同质化代币结合了同质化代币和非同质化代币的特性,其关键在于Slot,简单来说Slot代表了一种分类,同一个Slot下会有多个ID(唯一标识),每个ID虽然都可以拥有不同的Value(代币数量),但是同一个Slot下不同的ID可以被认作是相同的可以交换组合拆分的实体。

就拿会员卡积分来举例,假设有两个Slot,分别是肯德基会员卡和星巴克会员卡,中本聪和马斯克分别在肯德基和星巴克办理了会员卡,很显然肯德基的积分和星巴克的积分无法通用,这就是非同质化的,但是肯德基下中本聪卡1的积分可以划转到卡2和卡3下,同理,星巴克下马斯克卡2和卡3的积分可以合并到卡1,在同一个slot下不同ID下的积分就是同质化的

将上述积分替换为brc20的ordi和sats,如下图所示。每一种代币类型可以看成是一个slot,每个slot下记录着不同数量的铭文可以看成一个半同质化代币,每个铭文都拥有一个唯一的铭文id,每个铭文中包含的ordi都是没有区别的。

设计理念

在讲Movescription的设计理念之前,我们先来看看前段时间“万链齐飞”的日子,大多数evm链在设计铭文时参考的是eths的模式,即“通过自转或者往黑洞地址发送一笔转账,并在calldata中附带一组类似于brc20的JSON格式的文本,然后再构建一个索引器来索引链上的数据来完成记账”,这种方式是从链上存储数据的方式来模仿brc20,可谓是“形似而神不似”,没有把链本身智能合约的优势发挥出来。

于是作者在以下推文中提出了他的设计理念(以下文字为精简摘要,全文请点击链接:https://x.com/jolestar/status/1737652966142959982?s=20 查看)

Bitcoin上由于没有智能合约,所以需要使用铭刻JSON的方式来发行FT,而其他智能合约链完全没有必要去使用JSON,所以我总结了铭文的几个启示:1. 它是一种半同质化资产,它的流动性并不如 FT,但这在市场起步阶段是优势。2. 它发行资产的门槛比各链上的 FT 都要低,认知成本也低。各链上发行资产一般都需要部署个智能合约,识别也主要是通过合约地址,而这对新手来说比较困难。而铭文这波把这个门槛基本降到了最低。3. 它的公平发行模式,Bitcoin 上可以理解成通过 Gas 租赁矿工矿机的 PoW 发行模式。

那既然这样,我们为什么不用智能合约来实现一个铭文协议,并且兼具以上特性呢?于是我尝试用 Move 实现了 Movescriptions 协议。首先,它是一种通过 Move 表达的半同质化资产协议。Move 基于数据结构的资产表达方式,非常适合表达这种协议。1. 通过 tick 这个全局唯一的名字来表达类型,借鉴 BRC20,符合 KISS 原则,简单直观。2. value 可以用来表达 FT 的余额,或者 NFT 里面的关键值。3. Metadata 可以附加任意类型的数据。其次,它支持通过 PoW 来分发资产,保证资产的分发更公平,更分散。我称之为智能铭文。

-jolestar

资产的表达方式

Move基于数据结构的资产表达方式,非常适合表达这种协议”。我们该如何理解jolestar所讲的这段话。

首先Move语言引入了Resource的概念,这也是Solidity和Move最大的一个区别,它在弱化数字属性,强调资产属性,使得Move变得安全且强大

Solidity语言体系下的资产在EVM中被编码为 "地址-->资产”的映射,资产的传递只能通过在不同的地址中加减数值,它无法作为参数传递,从函数返回或者存储到另一个资产中,而且这种记账方式很容易被黑客找到漏洞进行重入和双花攻击,如下图所示,这便是一个典型的erc20代币的工作原理。

而在Move语言体系下,资产被定义为Fisrt-class Resource,直译为资源是一等公民,就是表示资源需要作为被首要考虑的编程对象,并且具有两种约束,即稀缺性和访问权限。

现实生活中稀缺性是实物资产的重要属性,比如黄金,既不会凭空增发也不会突然消失,但是在数字资产中并不存在固有的物理稀缺性。所以Move认为数字资产必须以某种编程方式强制执行这种稀缺性,于是Move为各种类型抽象了四个属性:copy(可复制)、key(可索引)、可丢弃(drop)、可储存(store)

但是一旦该变量声明为Resource类型,它只能使用Key和Store属性,无法被添加Copy和Drop属性,如此便从语法结构上保证了资源类型的稀缺性。

一个简单的Resource如下图所示,这就解释了作者所说的基于数据结构表达资产的方式。

我们再来看看Move体系下资源是如何转移的。首先,所有的Resource数据都必须存储在账户下,因为只有分配了账户,才会存在对应的Resource资产,其次,每个Resource只要从账户中取出,就必须要被“使用”,使用内置的move_to方法将资产从账户中取出后,要么将其作为返回值传递给新的账户,要么将其销毁。如下图所示:

资产的可组合性

前面介绍了Resource是一种特殊的结构体,在Move中结构体是可以互相嵌套的,就拿Movescription为例,在Movescription中嵌入了Balance,就是用这种方式将你的铸造费用锁定在铭文中。那么同理MoveScription也可以被其他的资源所嵌套,就像乐高积木一样。

如此一来,MoveScription便打破了Brc20上很多铭文只有Meme叙事的魔咒,可以搭建出各种生态应用,比如作为游戏中的资产,作为Defi中的抵押物等等。

总结

行文至此,我相信你已经可以了解到Movescription这种铭文的设计理念与BRC20有异曲同工之妙。在钱包中,每一个Movescription就是一个NFT(类比Inscription),每一个Movescription都拥有一个Object id(类比Inscription id),账户的代币余额同样需要索引来实现。但是其优势在于很好地利用了Move语言对于资产的表达优势,真正做到了“形似且神似”。

参考资料:

1.https://medium.com/@ThreeDAO/%E4%B8%87%E7%89%A9%E7%A0%94%E7%A9%B6%E9%99%A2-sui%E4%B8%BB%E7%BD%91%E4%B8%8A%E7%BA%BF%E5%9C%A8%E5%8D%B3-%E4%B8%80%E6%96%87%E4%BA%86%E8%A7%A3%E5%85%B6%E8%83%8C%E6%99%AF-%E7%89%B9%E6%80%A7%E5%92%8C%E4%B8%8Eaptos%E7%9B%B8%E6%AF%94%E4%BC%98%E5%8A%A3%E5%8A%BF-c1c75c94c9b5

2.https://medium.com/huobi-research/move%E8%AF%AD%E8%A8%80%E7%9A%84%E5%88%9B%E6%96%B0%E5%92%8C%E6%9C%BA%E9%81%87-409f01d4d51b

3.https://mirror.xyz/bocaibocai.eth/q3s_DhjFj6DETb5xX1NRirr7St1e2xha6uG9x3V2D-A

4.https://jolestar.com/why-move-1/

Subscribe to 熊猫撸白.nft
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.