本文想通过理顺在 “分片” 这条路上的方向和困局,绘制一张仰望星空与脚踏实地的分片探索者地图。
原文作者:Beam
原文来源:Jsquare Research
2022 年 9 月 15 日,以太坊合并(Merge)。这是一个历史性的时刻,以太坊为此准备了 5 年、推迟了 6 次,由于反复的调试与长期的开发、万众瞩目的晕轮效应,很多人误以为合并会自然而然地带来更高的可扩展性、安全性和可持续性,实际上并不是——我们还是用两个列车的比喻,从 PoW(工作量证明)到 PoS(权益证明)的过渡,只是更换了轨道和轮子,它并不会直接地带来更快的速度、更大的容量、更低的车票费用,真正能完成以上三点的,是一整套解决方案:拥有分片能力的主网搭配增强可扩展性的 Layer2 解决方案。
正如以太坊创始⼈Vitalik Buterin 所指出的,分⽚是可扩展性三难困境下的一种扩容解决⽅案,通过将⽹络中的节点分成更⼩的组,处理不同的事务集并实现并行处理。通过分担处理整个网络上汇总所需的大量数据的负担,就像我们在 Walmart 购物结账时一样,通过多开设几条购物结账的收银通道,可以直观地减少排队时间和提升结账效率。
图 1 分片的简单逻辑
这就是分片的逻辑,直接而简单,然而,魔鬼都在细节中——原理和方向没错,但在实施中总会遇到很多问题。本文想通过理顺在 “分片” 这条路上的方向和困局,绘制一张仰望星空与脚踏实地的分片探索者地图。同时通过比较现有的分片解决方案,找到一些共性的问题,并提出一种可行的探索方向:Shardeum 与动态分片。
一、关于 “分片”
简单来说,考虑不可能三角的制约,从以太坊作为坐标系原点(0,0)出发,按照 “纵向” 和 “横向” 两种思路,我们将当前的区块链的扩展性方法分为两大类:
纵向扩容(Vertical Scaling):通过提高系统现有硬件的性能来实现。建立一个去中心化网络,而网络中的每个节点都具有超级计算能力,即每个节点都需要 “更好” 的硬件——这种方式简单有效,可以达成吞吐量的初步改进,尤其适用于高频交易、游戏以及其他对延迟比较敏感的应用场景。然而这种扩容方式会限制网络的去中心化水平,因为运行验证节点或全节点的成本变高了。维持去中心化水平受限于计算硬件性能的大致增长速度(这就是所谓的 “摩尔定律”:芯片上的晶体管数量每两年会翻一倍,计算成本则会减半)。
横向扩容(Horizontal Scaling):横向扩容一般有几种思路。一种是在区块链的语境下,将某一生态中的交易计算量分散到多个独立的区块链上,每条链都拥有自己的区块生产者和执行能力,这种方式可以充分定制化每条链的执行层,比如节点硬件要求、隐私功能、gas 费用、虚拟机以及许可设置等。另一种横向扩容方案是模块化区块链,将区块链的基础架构划分成执行层、数据可用性层(DA)以及共识层。最主流的区块链模块化机制就是 rollup。还有一种是将一条区块链分成很多片,并行执行。每个分片可以看成一个区块链,也就是说许多区块链可以并行执行。另外,通常还会有一条主链,其唯一的任务就是保持所有分片同步。
需要指出的是,以上的扩容思路都不是孤立存在的,每一种解决方案都是在不可能三角中找到一个权衡点,配合系统中经济力量创造的激励机制设计,达到宏观和微观层面的有效平衡。
为了讨论 “分片”,我们需要从头开始梳理。
依然假设这样一种情景,Walmart 购物结账,为了提高结账效率,降低客户等待时间,我们从单一的结账通道,扩展到 10 个结账窗口,为了避免账本错误,这个时候我们需要制定统一的规则:
第一,如果我们有 10 个收银员,该如何分配他们去哪个窗口工作?
第二,如果我们有 1000 个客户排队等待,该如何决定每一个客户去哪个窗口结账?
第三,这 10 个窗口对应的 10 个单独账本,该如何进行汇总?
第四,为了避免发生账目不匹配的情况,该如何防止收银员出现错误?
这几个问题其实对应了分片中的几个关键问题,分别是:
该如何确定全网的节点 / 验证者属于哪个分片?即:如何进行网络分片(Network Sharding);
该如何确定每一笔交易分配给哪个分片?即:如何进行交易分片(Transaction Sharding);
区块链资料如何在不同分片中储存?即:如何进行状态分片(State Sharding);
复杂意味着风险,在以上所有的基础上,该如何避免整个系统安全性的分裂?
01
网络分片(Network Sharding)
如果我们将区块链简单理解成一种去中心化账本,无论是 PoS 还是 PoW 的共识机制,都是为了让各个节点按一定的既定规则争夺记账权,在这个过程中保证账本的正确性。而网络分片是指,需要另一种既定规则,将区块链网络分片,在尽量降低互相通信的前提下,由各个分片处理链上交易,争夺记账权——即,节点的分组规则。
而在这个过程中遇到的问题是,随着区块链内部节点被划分成不同的片,攻击者的难度和成本会直线下降。我们可以推理,假定这个分组过程的规则和结果是固定且可以预知的,那攻击者想要控制整个区块链网络,只需要定向地控制其中一个分片,收买分片内的部分节点即可。
Near 的创始人 Alexander Skidanov 这样描述这个问题:如果一个有 X 个验证者的单一链决定硬分叉成一个分片链,并将 X 个验证者分成 10 个分片,每个分片现在只有 X/10 个验证者,破坏一个分片只需要破坏 5.1%(51% / 10) 的验证者总数。这就引出了第二点:谁为每个分片选择验证者?只有当所有这 5.1% 的验证者都在同一个分片中时,控制 5.1% 的验证者才是有害的。如果验证者无法选择在哪个分片中进行验证,则控制 5.1% 的验证者的参与者极不可能将所有验证者都放在同一个分片中,从而大大降低了他们破坏系统的能力。
图 2 攻击某个分片的难度大大降低
分片系统必须开发一种机制来信任网络不会从外部分片中逆转这些交易。迄今为止,可能最好的答案是确保分片内的验证者数量高于某个最小阈值,这样不诚实的验证者压倒单个分片的几率就会很低。最常见的办法是构建一定程度上的无偏随机性,依靠数学的方式,将攻击者的成功概率降到最低。比如以太坊,以太坊的解决办法是随机从所有验证者中选出某个分片的验证者,并且每 6.4 分钟(一个 epoch 的长度)更换一次验证者。
图 3 以太坊 2.0 中构想的验证者轮换
说的简单一点就是将节点随机分组,再将工作分配给各组节点独立验证。
然而需要指出的是,区块链中的随机性是一个非常具有挑战性的话题,按照逻辑来说,这个随机数的生成过程不应该依赖于任何特定分片的计算。对于该计算,很多的现有设计思路都是开发一个单独的区块链,维护整个网络。这样的链在 Ethereum 和 Near 中称为 Beacon 链,在 PolkaDot 中称为 Relay 链,在 Cosmos 中称为 Cosmos Hub。
02
交易分片(Transaction Sharding)
交易分片是指关于 “哪些交易要被分配到哪些分片” 的规则制定,则既能够达到并行处理的目的又能避免双花问题的出现。区块链的帐本模型的不同会对交易分片的开发造成影响。
目前区块链网络中存在两类记账方式,分别为 UTXO(Unspent Transaction Outputs,未使用交易输出)模型和账户 / 余额模型,前者的典型代表是 BTC,后者如 ETH。
UTXO 模型:在 BTC 交易中,每笔交易都会有一个或多个输出,UTXO 指尚未花费的区块链交易的输出,可以作为新交易的输入,而已花费的交易输出不可再花费,类似纸币交易情况下的支付和找零,顾客将一张或多张纸币支付给店家,店家则将一张或多张纸币找零给顾客。UTXO 模型下,交易分片需要跨分片通信。一笔交易可能包括多个输入和多个输出,没有帐户的概念,也不会有余额的纪录,一个可能的方式是:按照其交易的某个输入值将其放入哈希函数处理成为离散型的哈希值以确定数据应该去哪个分片。如下:
图 4 针对 UTXO 的一种可能的交易分片思路
为了确保条目以一致的方式放置在正确的分片中,输入到哈希函数中的值都应该来自同一列。此列称为Shard Key。之后,将产生为 1 值的交易都分入分片 1,将产生为 2 值的交易都分入分片 2。而这种方式的弊端在于,分片之间不得不进行通信以避免双花攻击。如果限制跨分片交易将限制平台的可用性,而允许跨分片交易则不得不权衡跨分片通信的成本和性能提升带来的收益。
账户 / 余额模型:系统记录每个账户的余额,在进行交易时,系统检查账户是否有足够余额用于支付,类似于银行转账时,银行会记录每个账户的余额,只有账户余额大于所需转账金额时,交易才能够进行。在账户 / 余额模型下,由于一笔交易只有一个输入,因此只要将交易按照发送者地址进行分片,就可以保证同一个账户的多笔交易在同一个分片中处理,有效防止双花。因此,大多数采用分片技术的区块链,都是像以太坊一样的账户帐本系统。
03
状态分片(State Sharding)
状态分片指的是,在区块链资料是如何分配在不同分片中储存的。
依旧沿用我们 Walmart 排队的例子,每个窗口都有一笔账,他们的账本是如何记录的?如果:客户来排哪个队,就记哪个账,比如 A 客户去了 A 窗口,那第二天该客户去了别的结账窗口比如 B 窗口,而 B 窗口并没有该客户的过往账户信息(比如涉及到了储值卡等结账方式),该怎么办?向 A 窗口调用该客户的账户信息?
状态分片是分片最大的难题,比上述的网络分片和交易分片更棘手。因为在分片机制下,交易会根据地址分配在不同的分片处理,也就是说,状态只会储存在其地址所在的分片中,此时要面临的一个问题是,交易不会只在一个分片中进行,时常会涉及到跨分片(Cross-Sharding)。
考虑一种转账情形,A 账户转账 10U 给 B 账户,而 A 的地址分配在分片 1,交易的纪录也会储存在分片 1。B 的地址分配在分片 2,交易的纪录就会储存在分片 2。
一但 A 要转账给 B,就会形成跨分片交易,分片 2 就会向分片 1 调用过去的交易纪录,确认交易的有效性,如果 A 频繁地打币给 B,分片 2 就必须不断跟分片 1 互动,交易的处理效率便会因此降低。但是,如果不下载和验证特定分片的整个历史,参与者则不一定能确定他们之间交互的状态是某些有效块序列的结果,且这样的块序列确实是分片中的规范链。
因此,相比于无分片的单一链,分片系统面临的新挑战是用户无法直接完全验证任何给定链的有效性和可用性,因为数据太多。必须为用户提供最大限度的去信任和实用的间接方法来验证哪条链是完全可用且有效,以便于他们可确定哪条链是规范链。在实践中,区块链开发者可以使用如下技术解决验证中的一些问题:如委员会、SNARKs/STARKs、渔夫机制、以及欺诈和数据可用性证明等。
有两种思路可以解决这个问题,一个是同步跨分片(Synchronous),即紧耦合(Tight Coupling),每当需要执行跨分片交易时,包含状态转换的相关块都同时发生,每个分片上的节点协作执行交易。看起来很自然,使用体验也最好,该模型最著名的设计称为 Merge Blocks,但在实践中实现这一点很复杂。要完成以上,需要分片之间的验证器彼此同步通信。如果对跨分片事务的需求足够高,性能可能会降低,因为更多的分片工作者必须一起协作来处理跨分片事务。
另一种方式是异步跨分片(Asynchronous),即松耦合(Loosely Coupling)。这种思路的采用更广泛,比如 NEAR、以太坊、Cosmos、Kadena 等。而在这个过程中,最具有挑战的事项是交易的原子性。根据 Scalar Capital 的联合创始人 Jordan Clifford,如果我们想象收据(Receipt)的概念,接收者通过提供源分片中的交易的默克尔路径来证明他们将从外部分片接收了 Token。目标分片使用收据并将其记入收件人的帐户。这必须以原子方式完成。发件人和收件人的帐户要么一起修改,要么不一起修改。如果存在差距或一端失败,发件人可能会欺骗收件人,让他们相信他们已经收到了他们永远不会得到的资金。
这里对原子性一词做出一种生活化的比喻,比如我们想要进行一趟海边旅行,需要同时订购机票以及酒店,如果预定不到酒店,我希望也不要购买飞机票,如果预定不到飞机票,则也不要预定酒店。这就叫做原子性——要不然都成功,要不然就都不要成功。
二、分片的探索与尝试
我们回顾一下以上有关于分片的讨论时,提到的一些关键性问题:
一是如何进行状态分片,即区块链资料是如何分配在不同分片中储存,如果要进行跨分片通讯时,该如何保证其中的效益平衡。
二是如何处理交易的原子性问题,一个分片对于共同访问的状态的修改,需要及时地让另一个分片知道,否则就容易出现状态错乱。
在下文中,我们梳理了业内比较知名的公链以及其技术解决方案。其中可以窥见部分脉络,并在此基础上讨论 Shardeum 的前沿性和革新性。
01
计算分片
Zilliqa 是最早尝试分⽚的智能合约平台之⼀,是分片技术的一种很有益也很有效的尝试。
其成立于 2017 年,由与新加坡国立大学相关的专门研究人员和学者组成的团队推动,主要目标是解决可扩展性问题,专为计算密集型任务而构建。Zilliqa 网络能够通过称为计算分片的并行化过程,在其网络上处理高吞吐量的交易。在分片式区块链网络上,计算交易的任务分布在网络的各个分片上。
从分片过程来说,Zilliqa 将其分为两部分。首先,选择目录服务(DS)委员会节点,然后启动分片过程并将节点分配给每个分片。一旦在分片中验证了交易,便可以通过整个网络对其进行验证,并进入一个全局状态,该状态将所有分片中的交易组合到 Zilliqa 区块链上的单个可验证真相来源。
简单来说,对于区块链中的节点具有的三个主要功能:
- 处理交易
- 打包交易并广播到其他节点
- 存储整个网络的历史账本
Zilliqa 利用了一种简洁有效的思路来解决我们提到的跨分片通讯以及原子性问题,即:只进行计算分片,不进行网络和储存的分片。该平台中的所有节点都存储了完整的状态,并且每个交易都被每个节点接收。为了验证交易,⽹络根据账⼾的地址空间被分割成多个分区。这被称为计算分⽚,因为它划分了验证交易的⼯作,这通常是计算密集型的。由于每个节点仍然接收每笔交易并更新所有账⼾的状态,因此⽹络带宽和存储操作仍然成为瓶颈——⽹络和存储没有分⽚,因此⽆法真正扩展。
02
静态状态分片
更为通用的分片方法是将帐户的地址空间划分为多个称为分片的固定大小区域,并将网络中的节点分配给不同的分片。这称为状态分片。 Near、Elrond 和 Harmony 等平台正在采用这种方法。尽管以太坊最初计划实施状态分片,但新方法仅对数据进行分片以增加可访问性。
2.1 以太坊的数据分片构想
在以太坊环境中,分片将通过分担处理整个网络上汇总所需的大量数据的负担,与 Layer2 协同工作。这将继续减少网络拥塞并增加每秒交易量。
应该指出的是,随着更有效的扩展路径的开发,以太坊的分片计划也在不断发展。以太坊对于未来分片构想其中一个方案版本是基于 “数据可用性” 的分片,“Danksharding” 是一种新的分片方法,它不使用分片 “Chain” 的概念,而是使用分片 “Blob” 来分割数据,同时使用 “数据可用性抽样” 来确认所有数据是否可用。
而另一种方案版本涉及到在方案一的基础上,为每个分片添加额外的功能,使每一个分片更像今天的以太坊主网,允许分片存储和执行代码并处理交易,因为每个分片都将包含其独特的智能合约和账户余额集,跨分片通信将允许分片之间的交易。然而这种方案还在社区辩论中,因为方案一的数据可用性加上 Layer2 的协同,已经可以为以太坊提供足够的可拓展性,因此社区还在评估版本二的经济成本与收益价值。
2.2 Harmony
Harmony 是一个基于 PoS 的分片网络,采用了一种更为标准的分片方法,这种方法的想法是拥有多个称为分片的小型区块链,每个分片负责状态的一部分,以及一个协调它们的区块链,在 Harmony 中称为信标链。我们按照之前的讨论,先看看 Harmony 是如何从下到上解决网络分片、交易分片和状态分片的问题。
网络分片:Harmony 将验证者网络分为不同分片,每个分片都包含一组不同的验证器,它们彼此紧密相连,在它们之间运行共识。
交易分片:Harmony 的交易由单个分片处理和处理。这使得分片能够同时处理交易,提高了区块链的总交易容量。对于交易,用户只需在签名交易中指定 shard_id 字段,表示交易所属的分片。
状态分片:在 Harmony 中,每个分片的验证者都需要存储 1/N 的全局状态,因为他们维护自己的区块链和状态数据库(N= 分片数)。这减轻了验证者对数据可用性的担忧。此外,交叉分片进一步提高了分片之间的状态一致性。
Harmony 主网支持多个分片中的数千个节点,在几秒钟内生成具有即时确定性的块。通过质押机制的安排减少了中心化,同时支持质押委托、奖励复合和双签削减。采用了 EPoS (Effective Proof-of-Stake) 的有效抵押机制和安全的随机分片技术 (Random Sharding),靠协议的规定把大户抵押的代币打散成许多细小的部分,并随机分配到多个分片里,这样任何人就无法把他抵押的代币集中到单一分片内,从而无法攻击单一分片。
而关于跨分片,在跨分片交易和信标链同步的情况下,来自不同分片的验证者通过全球连接的网络跨分片发送消息。根据 Harmony 官方文档,采用了「Kademlia 跨片路由技术」,来控制跨片间通信的网络开销,并且利用「纠删码」对区块广播过程进行优化,使广播者的网络压力更小,避免发送者的网络瓶颈问题,从而实现高效的横向分片扩展。已经装备自己成为第一个完成跨分片消息传递的分片区块链。借助有效的跨分片消息传递协议和全网状设计,分片之间将能够进行无缝通信,随着团队积极朝着这个目标努力,用户和开发人员可以期待今年晚些时候在 Harmony 上的跨分片消息传递协议。
对于 Harmony 上的构建者和开发者来说,这是一个重大突破,因为他们可以通过整理特性和使用驻留在不同分片上的数据来构建。此外,分片间数据的一致性也很重要。这两种追求将决定这种无限可扩展性的可持续性。
2.3 Elrond
Elrond 是一个高吞吐量的公共区块链,旨在提供安全性、效率、可扩展性和互操作性。使 Elrond 与众不同的两个最重要的特性是自适应状态分片和安全的权益证明共识机制。
对于交易、数据和网络,Elrond 采用所有级别的自适应状态分片。动态自适应分片机制将执行分片合并和分片拆分,同时考虑可用验证节点的数量和网络使用情况。由于跨分片的定期节点改组,对恶意攻击保持高弹性。每个 epoch,每个分片中最多 1/3 的节点被重新洗牌到其他分片,以防止串通。在随机性方面,使用 BLS 签名保护随机源,这使其无偏见和不可预测。
而对于分片状态架构上的智能合约采用跨分片执行过程处理,分片负载均衡。跨分片平衡智能合约允许 Elrond 并行运行多个智能合约。
同时,对于跨分片,Elrond 采用他们称为元链(Meta Chain)的设计,可以做到在几秒钟内快速确定跨分片交易(Finality)。通过研究其技术白皮书,我们简化其过程如下:假定 Elrond 网络仅有两个分片和元链。假设用户从他的钱包中生成一笔交易,该钱包的地址位于分片 0,并希望将 EGLD 发送给另一个钱包地址位于分片 1 的用户,则需要下图所示的步骤来处理跨分片交易。
块的结构由包含有关块的信息(块随机数、轮次、提议者、验证者时间戳等)的块头表示,以及包含内部实际交易的每个分片的小块(miniblock)列表。在我们的例子中,对于分片 0 中的一个块,通常会有 3 个小块(miniblock):
一个块中具有相同发送者和接收者的小块的数量没有限制。这意味着具有相同发送者和接收者的多个小块(miniblock)可以出现在同一个块中。在这个过程中,跨分片执行的原子处理单元是一个小块(miniblock):要么立即处理小块(miniblock)的所有事务,要么不处理,小块(miniblock)的执行将在下一轮重试。
Elrond 的跨分片交易策略使用异步模型。验证和处理首先在发送者的分片中完成,然后在接收者的分片中完成。交易首先在发送者的分片中分派,因为它可以完全验证从该分片中的帐户发起的任何交易。之后,在接收者的分片中,节点只需要元链提供的执行证明,进行签名验证和检查重放攻击,最后为接收者更新余额,添加交易金额。
分片 0 处理小块 0 (miniblock 0)中的分片内交易和一组跨分片交易,这些交易的地址来自分片 1 作为小块 1 (miniblock 1)中的接收者。块头和小块(miniblock)被发送到元链。元链通过创建一个新的元链块(元块)来公证分片 0 的块,其中包含有关每个小块(miniblock)的以下信息:发送者分片 ID、接收者分片 ID、小块哈希。
分片 1 从元块中获取小块 1 (miniblock 1)的哈希,从分片 0 请求小块(miniblock),解析交易列表,请求丢失的交易(如果有),在分片 1 中执行相同的小块 1 (miniblock 1)并发送到元链结果块。经过公证,交叉交易集可以被认为是最终确定的。下图显示了完成交易所需的轮数。这些轮次被认为是从第一个包含在小块(miniblock)中到最后一个小块(miniblock)被公证。
图 5 Elrond 的跨分片异步模型
2.4 Near
Near 是一个全状态分片、对开发者友好的可拓展性公链,他们提出了一种新的协议和解决方案,称之为夜影协议(Nightshade)。
与上述两个分片公链不同的是,它的技术架构并不是由一个信标链和多个分片链组成的,而是把系统建模成一个单独的区块链,在区块级别进行了分片,每个分片中有很多 “段”。
图 6 Near 放弃了信标链的做法,采用了 Nightshade 的设计
Nightshade 将系统建模为单个区块链,其中每个块在逻辑上包含所有分片的所有事务,并更改所有分片的整体状态。在物理上,没有参与者下载完整状态或完整逻辑块。相反,网络的每个参与者只维护与他们验证交易的分片相对应的状态,并且块(Block)中所有交易的列表被分成物理块(Chunk),每个分片一个块。
在理想条件下,每个块每个块的每个分片恰好包含一个块,这大致对应于具有分片链的模型,其中分片链以与信标链相同的速度生成块。然而,由于网络延迟,一些块可能会丢失,因此实际上每个块的每个分片都包含一个或零个块。
在 Nightshade 中有两个角色:区块生产者和验证者。在任何时候,系统都包含 w 个块生产者(Block Producer)和 wv 个验证者(Validator),在 near 的模型中 w=100 v = 100, wv = 10, 000。系统包含 n 个分片,在 near 的模型中 n = 1000。在 Nightshade 中没有分片链,而是所有的区块生产者和验证者都在构建一个单一的区块链,称之为主链。主链的状态被分割成 n 个分片,每个区块生产者和验证者在任何时候都只在本地下载了与该分片的某个子集对应的状态子集,并且只处理和验证影响这些部分的交易状态。网络的维护是按时期完成的,其中一个时期是几天的时间段。
块生产者和块生产者根据固定的时间表轮换每个块。区块生产者有一个订单,并按该顺序重复生产区块。例如,如果有 100 个区块生产者,第一个区块生产者负责生产区块 1、101、201 等,第二个区块生产者负责生产 2、102、202 等)。由于块生产与块生产不同,需要维护状态,并且对于每个分片,只有 sww/n 个块生产者维护每个分片的状态,相应地,只有那些 sww/n 个块生产者轮换创建块。
而关于跨分片,如果一个事务需要影响 Near 中的多个分片,则需要分别在每个分片中连续执行。完整的交易被发送到第一个受影响的分片,一旦该交易被包含在该分片的块中,并在该块被包含在一个块中后应用,它会生成一个收据交易,该交易被路由到下一个需要在其中执行事务的分片。如果需要更多步骤,则收据事务的执行会生成新的收据事务,依此类推。具体见下图:
图 7 Near 中的跨分片交易
三、Shardeum 与动态状态分片
由上述对 Harmony、Elrond 以及 Near 的分析中,我们可以看到对于我们提出的两个问题的解答:
1. 目前的 Layer1,最通⽤的分⽚⽅法是将账户的地址划分为多个称为分⽚的固定⼤⼩区域,并将⽹络中的节点分配给不同的分⽚。
2. 在具有状态分片的网络中,同一分片中的合约之间的交易快速而简单,而跨多个分片的交易则慢得多,但并非不可能。如果一个事务需要影响多个分片,则需要在每个分片中连续执行。因为交易被分组到块中并且共识是在块级别完成的,所以影响多个分片的交易有可能在一个分片中被确认,但在另一个分片中被回滚。此外,影响多个分片的事务将需要与它们影响的分片数量成比例的额外处理时间。
但是同时,通过分析目前市场上的探索与解决方案,我们发现了目前阶段公链分片的一些新问题:
1. 在跨分片交易时,如何在避免分片连续执行的基础上,同时保证交易的原子处理?
2. 如果要网络中增加了不足一个分片节点数量的节点,网络如何处理多出来的这部分节点?
作为一个专注于促进区块链的大规模应用、重塑 web3 价值范式与赋能未来的专业投资公司,Jsquare 一直关注区块链的扩展性和安全性,在关注 Web3 运用层的同时,对更去中心化的基础架构、无感的区块链使用体验以及依托于加密技术的安全性未来抱有极大的信心。即使分片的概念并不是新的,即使在这个道路上人们已经探索了一年又一年,我们在接触 Shardeum 的时候,依然觉得他们对于分片赛道的洞察以及他们所做出的革命性技术改善值得我们下注。与这两个问题对应的,Shardeum 提出了两种新颖的解决方式。
3.1 Shardeum 与交易级共识
Shardeum 形成了一种独特的技术与共识算法,该算法将法定人数证明 (PoQ) 与权益证明 (PoS) 相结合,共识算法将通过 trustless 投票收集和验证节点的质押来帮助保护网络。每个交易会在被分组到块 / 分区之前按照收到的顺序进行处理。
而与上述成名已久的公链网络不同,Shardeum 网络上的共识是在每个交易(Transaction)级别而不是块(Block)级别完成的,允许跨分片同时处理事务,而不是像 Near 的块(Block)级共识那样连续处理。这种交易级共识消除了确保原子处理(Atomic Processing)所需的复杂性。因此可以做到秒级的 finality 和低延迟,从而防止网络拥塞。
3.2 Shardeum 与线性扩展
要解释什么叫线性扩展,我们需要想象下面一种情形:
Near 主⽹ 1 个 100 个节点的分⽚。预计将来会添加更多分⽚。Harmony 有 4 个分片,每个分片 250 个节点,主网共 1000 个节点。所有的合约在同一个分片。Elrond 有 3 个分片与 1 个元链,每个分片 800 个节点,主网共 3200 个节点。
如果在 Harmony 中添加 100 个节点,不足一个分片中需要的 250 个节点,Harmony 该如何处理这部分节点?是否可以考虑将这共 1100 个节点分成 11 个分片,每片 100 个节点?
听起来更美好,但是由于某些分片的静态特性,许多额外的节点需要加入网络才能创建新的分片。假如,我们要向上述网络中加入一些节点,如果只增加 1 个单独的节点,是无法提高整个区块的表现的,至少要为目前 “最小分片大小” 数量的节点(在 Near 中即为 100 个节点)——因为目前的分片都是静态分片,不支持线性扩展,还没有生产网络实际能做到静态分片的拆分和合并。
在 “交易级别的共识” 之外,Shardeum 的白皮书提到,一个独特功能是它使用动态状态分片,不同于静态分片中的所有节点都覆盖相同的地址范围,Shardeum 的虚拟分片(也即动态分片)可以让每个节点持有不同的地址范围,覆盖的地址之间存在重叠节点——这样做具有更大的复杂性,但是好处是它允许真正的线性缩放。
通过地址空间和节点对应关系的动态变化,加上一种新的数据可用性证明来做跨分片验证,Shardeum 可以做到拟合或者近似的 “线性扩展”。这种按照 “交易级别” 进行验证和确认的方式,可能会一定程度上牺牲单片内的性能,但是对于网络整体,是非常有益的扩展。
Shardeum 目前拥有 10 个分片,每个分片 128 个节点,共 1280 个节点,主网预计 2022 年第四季度上线。虽然 Shardeum 仍在开发中,但在协议层面使用的 Shardus 技术已被证明可以实现线性扩展。 在 2021 年第三季度的更新活动中,shardus 运行在 AWS t3.medium 硬件上的 1000 个节点的网络被证明可以达到 5000 TPS 的跨分片交易。
图 8 2021 年第三季度,Shardus 被证明可以达到 5000 TPS 的跨分片交易
2022 年 8 月,Shardeum 在具有完整分片功能的测试网 Liberty 2.0 上,通过 ERC20 代币转移成功展示了 100TPS 的能力。通常来说,一个区块链需要几年的时间才能建立并达到更高的 TPS,但 Shardeum 在推出 Liberty 1.0 后不到 4 个月就实现了这一目标。目前,Shardeum 用 50 个节点测试并发布了 Liberty 2.0,其中每个节点存储了约 1/5 的总数据,执行了 1/5 的总交易。
四、结语
一个真正的分片和可扩展的区块链需要从头开始。同样,一个拥有钻石般共识的社区也需要从无到有地构建,而社区的建设从来不比技术的研究和突破轻松容易。我们看到了 Shardeum 测试网上线后,活跃的测试人数以及测试交易数,兴奋于我们发现的革新之路有更多人携手同行,同时也看到了一些质疑的声音,只是我们相信进步的道路是螺旋而曲折的,任何的创意和探索都值得一试。
正如《抱朴子·用刑》中说,“国有六职,百工与居一焉。或坐而论道,或作而行之”。也有一说,与其坐而论道,不如起而行之,Jsquare 始终以开放的态度,希望更多建设者们加入去中心化与分片的测试与探索中。2022 年 4 月 26 日 Shardeum 推出了 Shardeum alphanet(Liberty)1.0,从那时起,很多用户参与了 Shardeum 测试,超过 100K+ 的钱包创建,1000+ 的智能合约部署,导致更大的 TPS 要求。正如我们相信,只有在 Web3 大面积采用的时候,那些高质量高性能去中心化的公链才会在市场竞争中脱颖而出,也正如我们所相信的,那些经历了质疑、指责、公开讨论和反复论证的社区,才能在去中心化的路上走得越来越远。