背景
2021年11月,随着波卡主网正式开启平行链插槽拍卖,波卡生态顿时成为一股耀眼的新势力。在波卡生态中,Gear则是相对被低估的项目之一。作为波卡智能合约平台,Gear在技术上支持异步编程和并行计算、WASM虚拟机,据称Gear的运行速度大幅高于传统EVM链,其TPS(每秒交易数量)可比以太坊和BSC、Polygon等EVM系公链高出几个数量级。Gear CEO Nikolay Volf也明确表示,Gear将支持DApp开发者使用Rust、C、C++等主流开发语言部署智能合约,并推出适用于不同应用的模板和库,让开发者仅修改部分参数就能轻松地部署DApp,尽可能增强其兼容性。
Gear的定位是一条新公链。但Gear官方未表示支持EVM,这将使其失去目前在区块链开发中占主导、数量广泛的Solidity开发者,不利于Gear生态的快速建设。而其Gear网络节点支持“并行处理”(在同一时刻运行多个任务)和“异步编程”(调用某函数功能的结果可延时返回)的能力可以很大程度上使Gear的TPS比普通公链高出几个数量级。所以可以采用将这两项技术迁移到EVM生态中,提高占主导地位Solidity的TPS。
基础区块链框架是Polkadot网络的重要组成部分。它使希望创建新区块链的团队不必从头开始编写,就可以在网络实施和共识代码上浪费精力。
基础涵盖多个方面,包括共识机制(块终结、验证器投票系统、容错)、网络层(p2p连接、消息发送和数据复制功能)、完整节点模板、数据库抽象、通过WASM的客户端更新机制(无硬叉)和其他重要模块。Gear使用的基板框架。这有助于满足企业级分散项目的最理想需求——容错、复制、标记化、不变性、数据安全和生产级跨平台持久数据库。
Gear本身被实现为一个定制的Substrate运行时,引入了高级本地扩展(通过主机功能)以提高性能。使用Substrate构建区块链允许Gear作为副链部署在任何兼容的中继链上,如Polkadot和Kusama。Polkadot网络Polkadot是下一代区块链协议,旨在联合多个专门构建的区块链,允许它们在规模上无缝运行。
核心技术
状态
与任何区块链系统一样,Gear保持分布式状态。编译到WebAssembly的运行时代码成为区块链存储状态的一部分。Gear支持无叉运行时升级的定义功能。如果使用最终小工具,也可以保证最终完成状态。 存储状态包括下面的三个组件:
- 程序和内存(包括程序代码和它的私有空间)
- 消息队列(网络中全球消息队列)
- 账户(网络账户和他们的余额)
程序和内存
程序代码存储为一个不可变的Wasm blob。每个程序都有一个固定数量的单独内存,在初始化过程中为程序保留,并在消息处理之间保持(所谓的静态区域)。Gear实例为每个程序保留单独的内存空间,并保证其持久性。
一个程序只能在自己专门分配的内存空间内进行读写,不能访问其他程序的内存空间。单个内存空间在程序初始化期间为程序保留,不需要额外费用(包括在程序初始化费用中)。
程序可以从Gear实例提供的内存池中分配更多内存。程序可以以64KB的块为单位分配所需数量的内存页。每个额外的内存块分配都需要一笔gas费。
每个分配的内存块(64KB)分别存储在分布式数据库后端,但在程序访问其内存的运行时,Gear节点会构建连续的运行时内存,并允许程序在其上运行而无需重新加载。 Gear节点使用惰性加载技术,因此如果执行进程需要页面,那么页面会被放入内存,而不是立即加载所有页面。每次程序正常完成执行后,都会保存程序的状态及其内存。
使用持久内存对于确保数据密集型dApps的成功至关重要。在这里,每次需要处理程序时加载程序的传统方法似乎没有得到优化。具有多对多关系的分散应用程序受益于持久内存方法。
消息队列
Gear实例包含一个全局消息队列。使用Gear节点,用户可以向特定程序发送包含一条或多条消息的事务。这会填充消息队列。在块构造过程中,消息将出列并路由到特定程序。
账户
对于公共网络,为了防止DoS攻击,需要交易处理的气体/费用。Gear提供了一个余额模块,允许存储用户和程序余额并支付交易费用。
状态转换
Gear支持以下类型的事务:
- 1.创建程序(用户上载新程序-智能合约)
- 2.发送消息(程序或用户填充消息队列)
- 3.取消消息队列(验证器(块生成器)取消多条消息队列,运行关联程序)
- 4.平衡传输(Gear引擎执行用户程序验证器平衡传输)
为了交流创建的Actor模型
并发系统的主要挑战之一是并发控制。它定义了不同程序之间正确的通信顺序,并协调对共享资源的访问。潜在问题包括竞赛条件、死锁和资源匮乏。 并发计算系统可以分为两类通信:
- 共享内存通信——当并发程序通过更改共享内存位置的内容进行通信时。
- 消息传递通信-意味着通过消息交换进行并发程序通信。
消息传递并发比共享内存并发更容易理解。它通常被认为是一种更健壮的并发编程形式。
通常,消息传递并发比共享内存具有更好的性能特征。在消息传递系统中,每个进程的内存开销和任务切换开销较低。有很多数学理论可以理解消息传递系统,包括Actor模型。
对于进程间通信,Gear使用Actor模型方法。Actor模型越来越受欢迎,并在许多新的编程语言中使用,通常作为一种一流的语言概念。Actor模型的原则是,程序从不共享其状态,只在彼此之间交换消息。
参与者发布出现在消息队列末尾的消息。将消息放入队列需要一些小费用,足以支付消息引起的程序加载和分派。消息由验证器节点出列,并重复此操作,直到达到gas_limit。 虽然在普通的Actor模型中,无法保证消息的顺序,但Gear提供了额外的保证,即两个特定程序之间的消息顺序是保持不变的。
内存并行
每个程序单独的独立内存空间允许在Gear节点上并行处理消息。消息可以分为多个流,以便并行处理。流的数量是为整个网络配置的,可以等于典型验证器节点的CPU内核数量。每个流都包含用于定义的一组程序的消息。它涉及从其他程序或外部影响(例如,用户的事务)发送的消息。
例如,给定一个消息队列,其中包含针对100个不同程序的消息,以及在配置了2个处理流的网络上运行的Gear节点。Gear引擎使用运行时定义的流数,将目标程序的总数除以流数,并为每个流创建一个消息池(每个流50个程序,由验证器节点的2个CPU核心进行处理)。
程序被分发到不同的流中,每条消息都出现在定义了其目标程序的流中。因此,所有发往特定程序的消息都出现在单个处理流中。
在每个周期中,目标程序可以有多条消息,一个流可以处理多个程序的消息。消息处理的结果是将来自每个流的一组新消息添加到全局消息队列中,然后循环重复。消息处理过程中生成的结果消息通常发送到其他地址(通常返回源或下一个程序)。
内部流
遵循分散原则,Gear网络由许多计算设备组成,这些节点共享一个全局状态。 智能合约开发者(客户端)要做到这一点,客户必须有一个与Gear相连的账户,并有足够的资金支付交易费。
当用户上传程序时,接口将事务发送到任意网络节点。然后,该节点验证事务,如果一切正常,则将其放入事务池,在该池中,它将在网络中的所有节点之间共享。
在Gear中,参与者(用户和程序)通过一条或多条消息相互发送事务。这会填充全局消息队列。网络中的一个特殊节点(collator)将在下一个块中处理事务。在块构造期间,消息在块构造时间的保留空间内出列和处理。建议的区块由其他节点验证,并根据协商一致机制最终确定。消息处理结果以状态保存。
总结
Gear项目优缺点
优点:
- 支持功能更齐全、速度更快的WASM虚拟机,支持Rust、C/C++等主流语言;
- 支持不同交易事件的并行执行,支持智能合约编程和执行的异步化,可大幅加快程序运行速度,使TPS数量级远高于EVM系公链;相比于Solana,Gear的安全性可由波卡中继链加以保障。
- 比起大多数公链(尤其是EVM系公链),性能和架构更贴近传统计算机环境;
- 项目创始人及CEO有波卡母公司 Parity Technologies的任职背景,与波卡创始人Gavin Wood关系较近,项目早期便获得Web3基金会和Parity Technologies及知名VC三箭资本的融资。
缺点:
- 由于采用较难实现的并行架构和异步编程,其潜在复杂性与区块链状态的确定性有关,但不同的节点有不同数量的CPU核心,所以需要通过开发特殊的尖端算法来克服,这方面的开发难度不容小觑。
- 即便是在设计上极尽缜密和周到,并行处理模式在长期运行中都可能出现Bug。2018年时,EOS创始人BM针对EOS白皮书里提到的、很难真正实现的“并行性”parallelism,曾表示:“能解决这个问题的人,之前必须有开发至少3个区块链系统的经验。”此外,Solana也曾提出支持并行架构的“Sealevel”技术方案,但尚未实际落地。
- Gear尚未启动测试网,距离主网正式投入使用及获得波卡插槽拍卖可能还有较长时间,这将使其失去在波卡生态的先发优势。
- Gear目前主要支持Rust和C语言,尤其以Rust语言为主。但Rust语言的学习难度较大,开发者数量可能有限。
- Gear官方未表示支持EVM,这将使其失去目前在区块链开发中占主导、数量广泛的Solidity开发者,不利于Gear生态的快速建设;
- Gear的安全性取决于波卡中继链,其未来的繁荣将受制于波卡生态本身。波卡在未来可能出现的缺陷或将严重影响Gear。
|