最新快讯
4小时前
Web3 生态系统 Fastex 完成 2320 万美元融资
ChainCatcher 消息, Web3 生态系统 Fastex 于 1 月 18 日通过私募和公募完成 2320 万美元融资。据悉,Fastex 提供多样化的产品范围,包括 Fastex Verse、ftNFT 市场、Fastex Chain、Fastex Pay 加密支付系统、Fasttoken 和 Fastex Exchange 加密和法币交易平台。FTN 作为 Fastex 所有产品和服务的实用代币,也是 Fastex Chain 的原生代币。(来源链接)
5小时前
去中心化永续合约交易所 Vest Exchange 完成种子轮融资,Jane Street 等参投
ChainCatcher 消息,去中心化永续合约交易所 Vest Exchange 宣布完成种子轮融资,投资者包括 Jane Street、QCP Capital、Big Brain Holdings、Ascendex、Builder Capital、Infinity Ventures Crypto、Robert Chen (Ottersec)、Pear VC、Cogitent、Moonshot Research、Fugazi Labs。据悉,Vest Exchange 是 Arbitrum 上的去中心化永续合约交易所,使用户能够交易几乎任何资产的永续合约。(来源链接)
5小时前
Andre Cronje:将从 fUSD v1 迁移至 v2,允许 fUSD v2 作为链上收费系统
ChainCatcher 消息,Yearn.finance 创始人 Andre Cronje 发文表示,将从 fUSD v1 迁移至 fUSD v2,允许 fUSD v2 作为链上收费系统,这意味着 Fantom 能够以 FTM 或 fUSD 分配费用,并能够根据使用情况预测未来成本。 fUSD v1 将实施清算,fUSD 债务等于或大于 FTM 或 sFTM 支持的任何头寸都将被清算;在 sFTM 支持的情况下,质押将立即取消质押,并领取所有奖励。此外,为了允许用户平仓,还构建了将 DAI 兑换为 fUSD 的工具,以方便结清未尝债务。(来源链接)
6小时前
PeckShield:攻击 Azuki 社交账户的黑客转移 618 枚 ETH 至 Tornadao Cash
ChainCatcher 消息,据 PeckShield 监测,攻击 Azuki 推特账号的黑客已将被盗资金兑换为 618 枚 ETH 并转移到 Tornadao Cash。钓鱼者地址"0x50…fd7"窃取了 196 枚 NFT,包括 74 个 Otherdeed、56 个 Beanz、12 个 Doodles、2 个 MAYC 和 41 个 PudgyPenguins,该地址目前已经转移了 234 ETH。
6小时前
赵长鹏:相较于币安建立元宇宙更愿意投资其他虚拟现实或元宇宙游戏
ChainCatcher 消息,币安官方博客发布了 1 月 14 日 AMA 的内容总结,赵长鹏在回答"有没有建立币安元宇宙的计划?会由 BNB 提供动力吗?"的问题时表示,如果币安构建一个元宇宙,那么它肯定会由 BNB 提供支持,但由于其(还)不是游戏构建者并且没有游戏构建团队,他更愿意投资其他虚拟现实或元宇宙游戏。 币安产品负责人 Mayur Kamat 表示,今年可能会带来更多"由币安提供支持的元宇宙。"(来源链接)
查看更多
扫码下载链捕手APP
专业的区块链资讯、数据与研究平台

Web3.0 底层语言:Move 弥补了 Solidity 哪些不足?

国盛证券研究所
Web3之窗
2022-12-30 15:15
收藏
Move语言的资源有四个属性:可复制、可索引、可丢弃、可存储,通过这四个属性的不同组合,用户可以方便的定义出任何类型的资源。Solidity的资产是由代币合约赋予用户账户的数值余额,相比较,Move无疑增加了资产的安全性。

作者:宋嘉吉 任鹤义,国盛证券研究所

 

为什么基于Solidity语言的以太坊生态如此庞大,市场依然对新公链有着新期待?Move出自大厂(Meta),被行业普遍看好,前期一些基于Move语言开发的公链得到了市场的青睐和资本的追捧。面向Web3更为丰富的应用,底层语言的进化是基础,Move有哪些优势,弥补了Solidity哪些不足?基于这些特点,Move生态有可能诞生新模式和新应用。

针对已有的编程语言如Solidity,Move语言在很多细节设计考虑的比较周到,如将库与应用逻辑分离开来;但最为突出的特点是资源类型方面,即面向资源的编程。在Dapp应用支持方面,吸收了比特币script和以太坊的smart contract的优点,因此行业普遍对该编程语言比较看好。而针对Solidity被外界诟病的安全问题,move也在尝试解决。

Move是面向资源(resources)的编程语言,资源在Move的世界里是“第一等公民”(first-class resource),其关键特性是自定义资源类型:resources永远不能被复制或隐式丢弃,只能在程序存储位置之间移动。Solidity并不是面向资源的,用户的账户拥有某个Token资产,只是该Token合约分配给用户的一个数值。

而Move创建的Token账户资产是独一无二的资源类型,比如账户A中的资产是保存在A账户中的,虽然也是数值,但不能复制、丢弃或重用,可以被安全地存储和转移。同时,账户资产只能由定义该资源的模块进行创建和销毁,这使得同质化的数值类型的资产可能产生的重入、类似双花或者账户余额出现不平衡的状况得以避免。在这一点上,Move账户资产有些类似比特币的UTXO机制,Token不再是简单的同质化数值,而是可区分的。

为了可以实现更灵活的业务,Move另外定义了4种权限属性:可复制(copy)、可丢弃(drop)、可存储(store)、可检索(key)。这4种属性可以任意组合,来定义资源的属性,方便用户灵活操作。如drop+store+key的组合,定义的资源是不可以复制的,可以避免复制引发的代币增发以及双花的问题,这一点类似NFT以及比特币的UTXO机制。

对于模块化和合约组合性方面,Moe使用了模块和脚本设计,通过传递资源实现合约交互。Solidity(如以太坊)上面的Contract合约通过library(相当于静态库)进行消息的传递,从而实现Contract合约之间的调用、交互。而Move语言使用了模块(module)和脚本(script)的设计,前者类似于Contract合约,Move语言的合约组合性则是模块之间的组合,通过传递资源(即前文提到的resources)。关于组合性方面,Solidity和Move的区别非常明显。

在交易执行方面,Move的并行处理相交Solidity带来区块链性能的极大提升。并行执行(PE)通过识别独立交易并同时执行,这极大提升了区块链的扩展性。Solidity并不支持并行处理,如以太坊上的交易按顺序执行,其他交易置于暂停(排序)状态——因此产生了mempool(内存池)和MEV市场。如基于Move的公链Aptos,利用Block-STM(Software Transactional Memory)引擎实现并行处理,带来性能的明显提升。

 

一:核心观点

 

Move出自大厂(Meta),被行业普遍看好,期间一些基于Move语言开发的公链得到了市场的青睐和资本的追捧。为什么基于Solidity语言的以太坊生态如此庞大,市场依然对新公链有着新期待?Move所拥有的优势,弥补了Solidity哪些不足?基于这些特点,Move生态有可能诞生新模式和新应用。

本文对比Solidity和EVM存在的不足,分析了Move的优势与特点。

 

二:为什么发明Move:弥补Solidity(以太坊)的哪些问题?

 

Move是Meta(原Facebook)公司为其Diem项目(最初是全球稳定币项目Libra)开发的一种安全可靠的智能合约语言,Aptos、Sui等新公链使用的正是move编程语言,这些公链正是看中了Move的优势及其并行处理特性,可拓展单片链的局限。Move是基于Rust的编程语言,但是Move专门针对智能合约进行开发优化,主要用于操作资源,因此入门门槛是低于rust的。

因为主要针对智能合约,因此砍掉了许多Rust多余的操作,更加简洁。为了弥补Solidity和EVM出现的一些不足,Move做了一些优化,使得基于Move的Dapp应用有着更多灵活玩法。

针对已有的编程语言如Solidity,Move语言在很多细节设计考虑的比较周到,如将库与应用逻辑分离开来;但最为突出的特点是资源类型方面,即面向资源的编程。在Dapp应用支持方面,吸收了比特币script和以太坊的smart contract的优点,因此行业普遍对该编程语言比较看好。而针对Solidity被外界诟病的安全问题,move也在尝试解决。

image

2.1.一等资源与数字资产(first-class resource)

与其出现的背景相匹配,Move是面向资源(resources)的编程语言,资源在Move的世界里是“第一等公民”(first-class resource),其关键特性是自定义资源类型:resources永远不能被复制或隐式丢弃,只能在程序存储位置之间移动。它可以像传统的类型一样,可以存储在数据结构中,也可以作为参数传递。

简单的说,他就是传统编程语言中一个不可随意销毁的新数据类型。对比Solidity定义的资产,如以太坊上的某种Token账户,资产只是一个数值,两个账户之间发生转账后,账户资产数值相应的发生变化,不同账户资产的区别就是数值余额,并无本质区别(也就是说资产是同质的)。

同时需要注意,例如以太坊上ERC20代币TokenA,其是一个独立的合约账户,这个合约为用户(账户地址)分配一个数值,代表用户拥有的Token A的数量。从这一点可以看出,Solidity并不是面向资源的,用户的账户拥有某个Token资产,只是该Token合约分配给用户的一个数值。

而Move创建的Token账户资产是独一无二的资源类型,比如账户A中的资产是保存在A账户中的,虽然也是数值,但不能复制、丢弃或重用,可以被安全地存储和转移,用并不完全准确的比喻,可以认为A账户中的资产与其他账户资产在某种意义上是不完全同质的。

同时,账户资产只能由定义该资源的模块进行创建和销毁,这使得同质化的数值类型的资产可能产生的重入、类似双花或者账户余额出现不平衡的状况得以避免。在这一点上,Move账户资产有些类似比特币的UTXO机制,Token不再是简单的同质化数值,而是可区分的。

为了可以实现更灵活的业务,Move另外定义了4种权限属性:可复制(copy)、可丢弃(drop)、可存储(store)、可检索(key)。这4种属性可以任意组合,来定义资源的属性,方便用户灵活操作。如drop+store+key的组合,定义的资源是不可以复制的,可以避免复制引发的代币增发以及双花的问题,这一点类似NFT以及比特币的UTXO机制。

可以这样理解,以太坊(Solidity)的资产是由相应的合约控制,如果把Token A合约比喻为保险箱,保险箱会给所有用户分配一个数值余额,来表达用户所有拥有的Token A资产数量,但资产本身还是放在Token A合约的保险箱内。而Move用户账户本身就是一个单独的大保险箱,由用户自己控制,所有的Token资产都放在这个保险箱内。且这些Token并不是以数字的形式存在,而是不可复制的、权限受用户控制的资源(类型)。

Move语言中的资源定义与权限是分离的,资源的权限属于用户。Solidity中账户资源权限归属于合约,比如以太坊上某个erc20 Token属于相应的合约,如用户在DEX如Uniswap合约进行Token A(权限属于Token A的合约)兑换为Tokend B(权限属于Token B的合约)交易时,无法在Uniswap合约里直接提取自己的A资产换为B资产——因为Uniswap里资产的权限属于其合约。

实际的流程至少三步交易操作:i)首先对Uniswap合约进行授权(approve),授权Uniswap合约代用户提取A合约的资产;ii)进入Uniswap合约进行兑换,提取A后将B存入账户;iii)取消授权(revoke)。但用户一般不会在完成兑换后立刻取消授权(为后续可能还会进行兑换行为节省gas费用),一旦Uniswap合约受到攻击或者出现漏洞,就为用的A Token账户带来风险。需要注意的是,授权/取消授权都需要在以太坊上执行合约操作,从而产生gas费。

从这里我们可以清晰看到,Token A、Token B、Uniswap里的LP资产权限分属于各自的合约,用户无法通过一个账户在三个合约之间自由切换。而Move的资产大账户则不需要跨合约授权,权限是属于用户的,用户直接在DEX里提取A、兑换为B存储到账户里,这个过程可以在一个交易操作里完成,无需授权/取消授权操作,一定程度上提高了安全性。

image

2.2.Move语言的模块化和灵活组合性

此前我们的深度报告《Web3.0时代:开放、隐私、共建》中提出了Web3.0与Web2.0很大的区别在于开放性、可组合性。那么这种开放调用从底层上是如何实现的呢?Move语言又将提供哪些便利?

对于模块化和合约组合性方面,Solidity(如以太坊)上面的Contract合约通过library(相当于静态库)进行消息的传递,从而实现Contract合约之间的调用、交互。而Move语言使用了模块(module)和脚本(script)的设计,前者类似于Contract合约,Move语言的合约组合性则是模块之间的组合,通过传递资源(即前文提到的resources)。关于组合性方面,Solidity和Move的区别非常明显。

以部署Token合约为例,Solidity的Token作为一种服务存在,可以查询余额,而Move的Token则是一种资源,也就是上文提到的“永远不能被复制或隐式丢弃,只能在程序存储位置之间移动”。而这两者之间的区别,可以这样比喻:基于Solidiy的合约之间调用是通过消息服务,如各类接口的调用,Solidity上面的合约交互就好比是两个原始部落之间的贸易交流,为了方便两个部落之间的往来,需要统一生产工具和制作方法等标准信息——即两合约之间的状态同步,实现交互。

A部落发明了石斧头,于是将这个石斧头的用材标准、制作方法等信息告知B部落,由B部落自行生产(这就好比Token A和Token B分别由各自的合约控制)。注意这里为了安全,合约要保持隔离状态,只能传递消息服务,但消息服务显然是可以复制或被丢弃(将石刻信息擦除)。

如果一个合约出现升级,如以太坊NFT接口标准ERC 721、ERC 721A和ERC4907等系列优化升级,就好比A部落发明了铁器,因此需要通过消息服务告知对方部落更新生产配置。一个合约的升级,需要调用过该合约的其他合约进行状态同步,跟随升级。这个工作流程无疑会增加复杂性,以太坊合约的升级迭代也是同样复杂的,且会带来EVM的字节代码膨胀。

Move的世界,合约交互则更具备灵活组合性。还是上面的喻例,作为Move的模块(module)之间交互(即部落之间的交易)是通过传递资源来实现的,这种优化相当于科技升级,A部落并不是告知B部落生产工具的配置信息,而是根据需求,将生产工具(无论是石斧头还是升级后的铁器工具)封装在一辆型号合适的标准运输车中,对方不必需升级生产配置,而是每次只需要接收车辆开走就行。

换句话说,Move的模块之间交互传递的不是消息,而是干脆传递了运输车辆(这是一种资源,永远不能被复制或隐式丢弃,只能在程序存储位置之间移动的资源)。无疑这种模式更具有灵活组合性,接收方收到车辆可以存储,也可以转移给其他方(其他合约),甚至可以将车辆货物卸下来后分装在不同的车辆里。也就是说,一个Move模块的升级,其他使用过该模块的合约自动会升级到最新状态。

2.3.对Web3安全性的改进

Move语言带来的安全改进是多方面的。

Move语言的资源有四个属性:可复制、可索引、可丢弃、可存储,通过这四个属性的不同组合,用户可以方便的定义出任何类型的资源。Solidity的资产是由代币合约赋予用户账户的数值余额,相比较,Move无疑增加了资产的安全性。

Solidity的资产是由相应的Token合约赋予用户的数值。而Move规定资源会存储在由所有者的帐户控制的模块里,资源的所有者具有最高决定权,只有所有者能够决定资源(Resource)的存储和转移。操作权限分离,使得不同场景可以定义不同的权限,这也是安全的一面。

Move资源的设计让数字资产转移不是账户间余额数值的简单加减,而是存储位置间的移动(不可复制、不可丢弃),避免重入和双花攻击。重入指的是黑客抓住代码漏洞,制造恶意合约,在用户转账的同时再次调用转账函数(重入),在不改变账户余额的情况下不断提走资金。对于Solidity语言Token合约的赋值方案,重入攻击和双花的风险都很大。

另外,Move的模块工作模式也大大降低了系统风险——如前文所述,Solidity合约升级需要其他合约作出相应的升级,否则将带来安全隐患,而Move的合约升级非常简单,只需相应合约自身升级,并不需要其他合约作出更新,这在一定程度上规避了合约升级不及时带来的安全风险。

image

2.4.Move的并行处理带来更高的扩展性

在交易执行方面,Move的并行处理相交Solidity带来区块链扩展性的极大提升。并行执行(PE)通过识别独立交易并同时执行,这极大提升了区块链的扩展性。Solidity并不支持并行处理,如以太坊上的交易按顺序执行,其他交易置于暂停(排序)状态——因此产生了mempool(内存池)和MEV市场。对于两个不关联的交易,如果能够并行处理,则高效且可扩展。

如基于Move的公链Aptos,利用Block-STM(Software Transactional Memory)引擎实现并行处理,带来性能的明显提升。其工作理念类似以太坊二层网络的Optimistic Rollup(乐观汇总),交易在区块内是预先排序的,先假设交易之间是没有依赖关系,乐观底执行并行交易。

执行后验证所有交易结果,如果发现一个交易访问了由先前交易修改的内存位置,则该交易无效——因为很明显两个交易是相关的。刷新交易的结果,然后重新执行交易。重复该过程,直到区块中的所有交易都被执行。Block-STM的特点是支持比较复杂的事物,适合多种应用负载工况。

如下图,将Block-STM与区块按交易顺序执行进行了比较。每个区块包含一万笔交易,账户数量决定了区块处理的交易的竞争复杂程度。在低竞争和高竞争情况下,Block-STM比顺序执行的方案实现了8-16倍的加速。当交易任务是顺序的情况下,Block-STM的消耗也更小。由此可见,Move带来的并发性能是非常突出的。

由此可见,在L2(二层网络)之前,主链的并行处理能力亦是公链扩容积极考虑的方案。这为Move生态带来更多的可能性。

风险提示

区块链商业模式落地不及预期:区块链、密码学等相关技术和项目处于发展初期,存在商业模式落地不及预期的风险。

监管政策的不确定性:区块链项目实际运行过程中涉及到多项金融、网络及其他监管政策,目前各国监管政策还处于研究和探索阶段,并没有一个成熟的监管模式,所以行业面临监管政策不确定性的风险。

Web3之窗
探索下一代互联网发展态势,以及相应基础设施
链捕手ChainCatcher提醒,请广大读者理性看待区块链,切实提高风险意识,警惕各类虚拟代币发行与炒作, 如发现站内内容含敏感信息,可点击 “举报”, 我们会及时处理。