反击!多位资深开发者反驳某些批评Move系公链的言论
受访者:
Wubuku—低代码Dapp开发平台dddappp创始人
Nanne2022—资深Move生态开发者
Zhou Qi—以太坊生态存储类项目EthStorage创始人
Li—资深Move生态开发者
Jolestar—支持Move的Layer2项目Rooch创始人
eternal—Move社区成员
前情提要:在2023年6月21日,名为“刺耳的Whistle”的媒体发表了一篇题为《开技术倒车!Aptos和Sui其实是联盟链,生命取决于资本的耐心》的文章(原文链接在本文末尾处)。文章主要内容是关于作者北辰对一位疑似来自芯片巨头高通公司的通信工程师Steven的采访记录,并对Aptos和Sui做出了诸多批判。文中称Steven是经常对区块链发表暴论的技术专家,并称Sui不是区块链的正确方向,Aptos和Sui用的都是联盟链的技术。
此文一出,便在一些Web3社区引发广泛传播和争议。包括以太坊社区和Move社区在内的,诸多业内技术人员,都对此文做出了批判。
本着实事求是精神,我们与多位业内技术大咖进行了访谈,针对《开技术倒车!Aptos和Sui其实是联盟链,生命取决于资本的耐心》中有争议的12个论点进行讨论。
1.关于这篇批判Move系公链的文章在标题和结尾处,反复提到“所有的Move系公链本质上就是一个联盟链。”
Nanne2022:区分联盟链和公链有多种指标,最重要的是节点的准入门槛。联盟链节点需要获得官方的许可才可以进入网络中,并且不允许用户私自搭建同步数据的全节点。联盟链的数据只有节点内部可以同步,外界想获取数据,只能通过联盟链内部节点对外提供的接口。
而公链的全节点没有准入门槛,共识节点Validator质押足额的资产就可以进入。
此外,在技术上可以区分是公链还是联盟链,比如共识和网络通讯层面,公链和联盟链的设计就不一样。联盟链只考虑固定数量的节点,设计原则就是节点是官方许可制,不是无许可制的。这样会使得联盟链的技术实现相对简单。事实上,Aptos和Sui用的都不是联盟链的技术,而是公链。
真正为人所诟病的无非是Aptos和Sui不够去中心化(相比于以太坊),并且Sui官方在二级市场上有控制SUI流动性的能力。
注:目前包括Aptos和Sui在内的绝大多数公链,全节点都没有准入门槛。Aptos的共识节点质押100万枚APT就可以运行,Sui的共识节点需要质押3000万枚SUI,都不需要获得官方的许可。
2.关于文章开头声称,Aptos和Sui其实没有区块,也没有链。
Wubuku:首先,Aptos 有区块,只要看一下它的 Node API文档就清楚。
其次,Sui的确没有区块的概念,因为它用了针对交易数据的DAG结构。但是,狭义的“区块链”没有那么重要,实现 Web3 愿景需要的是“去中心化的账本”,不是某种特定的数据结构。
3.关于文章作者认为,“web3圈的人挺没见识,比如Dfinity(ICP)出现后,很多人就很兴奋,觉得叙事宏大,能解决很多问题,但其实那就是云原生的故事,微软、IBM都搞了多少年了。”
Jolestar:ICP的构建路径的确有问题。但这个作者应该是觉得“去中心化的云计算”这条路不对,但Web3就是去中心化的云原生。
4.关于文中嘉宾Steven认为,“自以太坊以来,没有再出现什么新的技术范式。”
Zhou Qi: 如果是指最早的以太坊,其实它和它以外的技术范式更迭都很快。ZK,DA,Verkle Tree,交互式欺诈证明,这些技术范式的最早发起者都不是以太坊基金会,但很快就被以太坊借鉴并吸收。
比如,以太坊在DA方面借鉴了Celestia,在PoS共识协议上借鉴了Cosmos的Tendermint。ZK也不算以太坊本身的技术,但是在推广ZK概念上,以太坊基金会花了不少力气。
另外,Move语言也算是技术范式上的创新。Algorand和Cardano在POS上的范式创新也很重要,只是还没有经历大规模的考验。
5.关于Steven认为,“Solidity是一种编译型语言,Move是解释型语言。”
Nanne2022:如果要用“编译型”和“解释型”来划分,Solidity和Move应该被划分到一种类别中。
传统意义的划分中,编译型语言是将代码编译成比较接近机器底层的形式,比如汇编语言,然后由机器链接运行。解释型语言,是将代码编译成某种更上层的字节码,然后由这种字节码的解释器直接解释运行字节码,比如 Ruby,Python。
如果从这个角度来讲,Solidity和Move都是先被编译成虚拟机能够解释的字节码,具体执行时再由解释器输出为底层硬件能够理解的机器码。无论怎么理解解释型和编译型,Solidity和Move都是处在同一类别下的。
eternal:Solidity和Move写的合约,都是先在开发合约的IDE平台所在的主机本地完成编译,上传到链上时存的都是字节码Bytecode。从语言被编译器和解释器处理的整个流程来看,Solidity和Move没什么本质的不同。
6.关于Steven认为,“Move语言是前Facebook的联盟链项目Libra创造的,基于Rust语言来实现,是为联盟链而生的。Move继承了Rust的硬件资源管理,有良好的并行能力。”
Wubuku:首先,Starcoin 就采用了Move作为合约开发语言,共识算法上沿用了比较经典的POW,和联盟链就没有任何关系。然后,Rust是为系统编程设计的语言,Move 是为“智能合约开发”而重新设计的语言。所谓的“Move继承了Rust语言的硬件资源管理”,其实风马牛不相及。再者,不能因为Move 的“面向资源编程”在一定程度上受到了 Rust 所有权机制(用于实现内存安全的)的启发,就说“Move继承了Rust语言的硬件资源管理能力”。
eternal:无论是Solidity还是Move写的合约代码,最后都被放到沙盒化的虚拟机里运行了,根本就感知不到底层的硬件资源。Move没有像Rust那样的“硬件资源管理能力”。此外,现在已经有Rooch和ZkMove这类支持Move语言的以太坊Layer2,写Move合约不是非要在Aptos和Sui上。
7.关于Steven认为,“Move不是一种好的语言,因为如果脱离了Aptos和Sui等项目,Move就没法用。”
Nanne2022:这对于Solidity也是完全一样的。如果Solidity脱离了支持EVM的链,也没法用。“XXX 不是一种好的语言,因为你如果脱离了XXX生态,XXX 语言就没法使。”这一套放很多编程语言身上也是一样的。
eternal:Steven会这么说,主要是因为Solidity和Move需要专门的虚拟机才能执行,这需要专用的程序,但统治整个互联网开发领域的Java一样需要专门的虚拟机。如果放在上世纪末Java刚推出不久时,也有人会说:“Java如果脱离了JVM生态,就没法用,所以不是一种好的语言”。
8.关于Steven认为,“Aptos和Sui的整个体系是从Libra继承过来的,在Libra基础上有改进,但改进不大。”
Wubuku:Aptos 主网上线时间较早,其实和 Starcoin 相对接近,但是共识是更“环保”的 PoS。
Sui 的改进其实相当激进,在公链/网络的状态存储模型方面,Sui Move 进行了相当彻底的重写,抛弃了Starcoin和Aptos的账户存储模型,采用对象存储模型。在这几个不同公链上做过应用的Move开发者们,一定对其中的明显差异深有感触。不能因为人家有团队成员是从 Libra 出来的,就天然认为人家就指望着啃老本。
9.关于Steven认为,“Libra就是一个带版本号的关系型数据库,每次交易都会更新一下账本状态,这与传统区块链完全不同。区块链账本只会新增字段,不会修改已有的字段。这种全局状态控制的方式只适合联盟链,不适合公链。”
Li:区块链本质就是一个可验证的Key-Value数据库,没有必要非把它和关系型数据库分个高下。
Zhou Qi:以太坊的账本状态模型StateTree就可以修改已有数据,是支持增删改查、带版本号的Key-Value存储模型。而且其他的传统区块链账本也可以删数据,比如比特币链上的utxo用掉了,就被删掉了。
Jolestar:感觉Steven对状态树StateTree的理解不太准确。
10.关于Steven认为,“Aptos设立时间戳来安排区块链上的执行次序,不需要在矿工之间形成广泛的共识。这么做容易被攻击......区块时间容易预估,导致Aptos的安全级别下降。”
Li:Aptos的记账模型是和以太坊基本一致的账户模型,用的BFT共识也不是靠时间戳来定序的。所谓的“区块时间(出块时间)”可以预估,无非会让不同时刻的leader提前暴露,理论上可能有遭到ddos攻击的隐患。但这属于可用性问题,和安全性没有联系,而且Aptos每个时间点的Leader暴露时间只有几十秒,每秒都在轮换Leader。
eternal:Aptos无论是区块还是交易,都要经过至少2/3的矿工(Validator)共识,并不是“不需要在矿工之间形成广泛的共识”。只不过Aptos上的交易数据被共识,是在打包进区块前就完成,区块中不需要包含完整的交易数据,只要有摘要就行。
Zhou Qi:某个时间点的出块者被预估,理论上是可以被ddos的。但secret leader election可以解决这方面的问题。
11.关于Steven认为,“Aptos只是一个关系型数据库......跟传统的关系型数据库没什么两样。”
Wubuku:以我这种做了二十多年传统企业应用和互联网应用的资深 CRUD boy的体验,Aptos和“关系型数据库”提供的体验有天壤之别。
Li:区块链本质就是一个可验证的Key-Value数据库,没有必要非把它和关系型数据库分个高下。
12.关于Steven认为,“Sui并不需要所有的节点都达成共识......
Sui把交易分为简单交易和复杂交易,简单交易只要签名就结束了,复杂交易只需要BFT一致就行。
任何交易只要能提交,理论上可以单独完成验证......Sui直接抛弃了区块链最基本的共识。”
Nanne2022: 共识的含义是,系统中多数节点对某个消息的确认,能在一定时间内达成稳态(也即能够继续处理后续消息)。Sui中的交易,无论是简单交易还是复杂交易,都需要收集一遍节点的签名,超过2/3的节点响应,简单交易才会完成共识,复杂交易才会进入下一步共识流程。
简单交易不会和其他交易发生冲突,天然可并行。既然如此,自然可以把简单交易和复杂交易分开做共识验证,这样可以提速。
至于Sui为什么能够实现交易的快速确认,和它采用的Narwhal内存池协议也有很大关系。Narwhal 保证了要共识的消息能够在本地直接获取,使节点能在本地直接完成共识,不需要再从网络中获取类似区块的消息。
Wubuku:Sui比较特殊,可以针对简单交易和复杂交易,采用不同的共识方式,这个要从 Sui 采用的对象模型说起。
Sui 的对象模型包含Owned Objects和Shared Objects两大类型。其中,Owned Objetcs类似比特币的UTXO,但却是“增强版的UTXO”。相比之下,Shared Objects更贴近处理全局数据的以太坊合约账户。
Sui的简单交易往往只涉及Owned Objects,后者类似UTXO,只有其Owner可以操作,并且有版本号,天然支持被并行处理。那么,只涉及Owned Objects的简单交易当然可以在共识验证上走捷径,不需要和其他交易放在一起排序。