作者:Chasey,BuidlerDAO
每一条区块链,都面临着由去中心化、安全性、可扩展性组成的不可能三角。其中,去中心化是区块链技术最大的优势,需要优先保障;而若是想建立长久、可持续的生态,安全性也是不得不做到极致的要素。这就造成了当前公链普遍可扩展性低下的现状。
图源:这么吃藕一看就是自己画的
如何在平衡去中心化与安全性的前提下,提升区块链的吞吐量=扩容,是急需解决的问题。近年来,ETH2.0作为以太坊的扩容愿景,即使经历了多次跳票,仍在世界范围内饱受关注、备受期待。由此也能看出,扩容已经成为了公链用户的群体需求,吞吐量也是在对于一条区块链进行分析、估值时必不可少的指标之一。本文意在提供一个当前区块链扩容方案的全体画像,帮助读者更清晰地理解扩容方案的基础理念。
为什么需要扩容
在开始讨论具体的扩容方案之前,我们先来梳理一下扩容的作用及其必要性。
区块链上的节点分为全节点和轻节点。为了保证交易数据的完整性和安全性,全节点需要储存整个区块链的交易数据;而轻节点仅需要储存BlockHeader,通过向全节点请求相应的Body来验证交易。节点的数量越多,则该链的去中心化程度越强,同时为了达成共识需要处理的工作量也就越多,对于吞吐量的负面影响也就越大。此外,如图所示,比特币的区块容量上限为1MB,而以太坊也因为设置了GasLimit,导致区块大小的上限被控制在了130KB左右。
图源:Blockchair
由于区块大小有限,矿工无法将所有交易都放到同一区块中进行打包,因此他们更倾向于按照预期收益的多少对交易进行排序,并按照价格从高到低有选择性地打包,以确保获得最高的收益。这就导致了GasPrice较低的交易延迟时间过长。如下图所示,以太坊上每分钟约有17万笔交易在等待验证。
图源:Etherscan
当前,比特币的吞吐量低至7TPS(Transaction-per-second),而以太坊的吞吐量也被限制在了15~20TPS.为了方便理解,我们将其与传统线上交易方式的吞吐量相比:PayPal的交易处理速度在200TPS左右,而VISA约为1700TPS,差距颇大。
此外,不断增加的交易数据对于维护区块链所需的存储能力也带来了压力。目前,比特币的储存量已超过400GB,yoy17.4%;而以太坊则将近900GB,平均增速64.30%。
图源:Blockchair
如图所示,每天发生在以太坊上的交易数量超过1,250,000笔,并且随着公链生态的逐渐普及,这个数字在未来会越来越大,吞吐量的压力也越来越大,扩容刻不容缓。
图源:YChart
读到这里,我们已经了解了扩容的重要性,是时候一起看看究竟可以通过哪些手段来实现扩容了。
扩容方案分类
下图为HandbookofResearchonBlockchainTechnology(2020)一书中的插图。在本文中,我们将着眼于图中"WritePerformance"这一部分,从链上与链下两个角度讲解当前已经出现的扩容方案。
图源:HandbookofResearchonBlockchainTechnology(2020)
链上扩容方案
链上扩容方案,指的是通过对于原链的设计进行更改,以达到扩容效果的方案。区块链技术可以拆成六大层级结构:共识层、网络层、数据层、激励层、合约层、应用层。其中前三个是区块链的底层基础,也是链上扩容方案操作的目标。
1.共识层=BFT;中本聪;混合
共识机制,指的是区块链中各个节点对于数据的可用性以及账本状态的一致性达成共识的过程。由于共识机制完全决定了从下载数据到打包出块的整个流程,因此节点对于交易的验证效率严重依赖于共识机制的设计。当前主流的共识机制可以分为BFT类共识、中本聪共识以及混合共识。
BFT类共识
提到BFT计算,需要先讲一下已是老生常谈的拜占庭将军问题:拜占庭帝国致力于开疆扩土,在一场战争中,他们试图派出10支军队分开包围敌人,该敌人最多能够抵御5支拜占庭军队。由于各军队站位较远,各军队的将军们需要通过给其他军队发送进攻/撤退的信号来达成行动共识。将军们所面临的最大问题是:如果某个军队中出现了叛徒,故意发送错误信号,该怎么办?在区块链中,这个问题类似于:区块链中的各个节点通过向其他节点发送信息的方式达成共识,如果网络中出现了叛徒节点,发送了错误的信息,该怎么办?
最为出名的BFT类共识是PBFT,感兴趣的可以自行查看参考文献,表述得非常简单易懂,因此在这里不再赘述。使用此类共识,需要保证各个正常运作的节点使用相同的随机数与区块算法进行计算,并生成区块。当原账本相同时,计算结果相同,生成后的账本不可篡改、永久公开。由于每个节点都需要与其他所有节点同步共识,在节点数量较少时,可以在保证安全性的同时实现极高的吞吐量,随着节点的数量增加,需要处理的数据量也会相应增加,导致处理交易的速度大幅下降。
中本聪共识
中本聪共识主要有ProofofWork工作量证明和ProofofStake权益证明。在这部分我们将附带着PoS的变种DPoS,探讨各个共识机制在吞吐量方面的表现。
PoW:算力决定记账权,不需要设置机制对于节点进行授权。在吞吐量方面,其最大的问题在于难度高导致的出块慢;并且为了保证账本的一致性,还需要故意设置打包延迟。这里的延迟指的是,矿工打包区块后,需要再做至少一个区块的工作量证明,才能确认候选区块。
PoS:持币获取记账权和投票权,打包节点打包候选区块后进行广播,并由投票节点对于候选区块进行投票以决定是否将其加入区块链,投票采用多数制。PoS相较于PoW,由于引入了投票机制,牺牲了部分安全性;而在吞吐量方面,由于打包速度快,并且没有等待时间,因此延迟极低。
DPoS:持币获取投票权,选出董事会负责记账。在PoS之上牺牲了部分去中心化程度,拥有比PoS更高的吞吐量。
混合共识
顾名思义,混合共识指的是结合了不同共识机制优点的共识。如在主链使用PoW确保安全的同时在侧链使用PoS保证吞吐量;结合PoS和PBFT以降节点数量减少到恒定值,从而再次提升吞吐量,等。
2.数据层=扩块;缩数据;DAG
除了共识机制,每个区块中可以打包的交易数量也与交易的吞吐量密切相关。我们可以通过扩大区块容量、缩小交易数据的方式提升区块链吞吐,或是直接采用DAG的数据结构来处理交易。
放宽/取消区块大小限制
扩大区块容量,可以使得每个区块中打包进更多笔交易数据,但是同时会使区块广播的时间增加,提升网络延迟,从而增加硬分叉的风险。
缩小区块中储存的数据
此类方案中,较为出名的有Segwit隔离见证:将区块信息中签名的部分以及用于计算交易ID的数据进行单独管理,从而压缩60%的交易信息量。作为缓解容量问题的辅助方案较为有效,但是不能解决本质问题。
DAG
如下图所示,区块链采用链式结构,其区块头中只能包含一个区块的哈希值;DAG结构下的区块头中可以包含多个区块的哈希值;区块链中新的区块会被添加到链的最后端,不能从链中间续写;DAG可以从之前的区块续写。
图源:RussianBlogs
区块链是同步记账,节点需要在同一时间记录同样的信息;DAG是异步记账,同一时间内不同的节点可以记录不同的信息。因此DAG单位时间内可以打包的交易数量更多,TPS极高。基于DAG的协议目前主要有SPECTRE和PHANTOM两种。
SPECTRE协议通过投票的方式抵御攻击
如下图所示,当区块X和区块Y中所记录的内容相冲突时,记录在区块X之后的区块6~8会记录下与区块X相同的信息X;区块9~11会记录下与区块Y相同的信息Y;区块12同时可以回溯到区块X和区块Y,因此它会记录下与上一轮投票相同的结果,也就是X;区块1~5会根据记录着自己区块信息的区块的投票情况进行投票,由于记录着X的区块较多,1~5选择投票给区块X。
元宇宙游戏开发公司Rekt Studios完成150万美元融资:11月17日消息,位于迪拜的技术初创公司 Rekt Studios 宣布完成 150 万美元融资,旨在推出其首个游戏元宇宙项目 Unseen,该项目支持内容创作者创建游戏、元宇宙建筑和数字资产。[2022/11/18 13:19:08]
由于恶意区块直到开始攻击之前都不会与诚实区块产生关联,使用SPECTRE协议时,只要诚实的节点更多,冲突的交易就能够被排除。其问题在于只适用于一般交易,由于没办法对于全部交易按照时间进行线性排序,因此无法运行智能合约。而PHANTOM协议可以解决这个问题。
图源:AnoverviewofSPECTRE
PHANTOM协议会先通过投票筛选出诚实区块,并对诚实区块进行拓扑排序
在了解其筛选方式前,需要先理解分叉系数k=可以分叉的个数和GHOSTDAG算法=通过追溯历史区块,选择链条最长的一条作为主链,形成子集S,默认该集合中的区块均为诚实区块。此后,针对每一个区块,验证与其没有联系的区块和子集S的交集是否小于等于k,如果小于等于k,则判断为诚实区块,加入子集S.
图源:AnoverviewofPHANTOM
以下图举例说明:假设我们现在需要判断区块I的真实性,由区块I衍生出的区块分别有区块K、M、O、P、R,通过区块I可以追溯到的区块分别有区块C、D、原始区块。这时,与区块I毫不相关的区块分别是区块B、E、F、H、J、L、N、Q、S、T、U,其中与子集S有交集的有区块B、F、J,等于k,因此判断区块I为诚实区块。
图源:PHANTOM:AScalableBlockDAGProtocol
排序方式使用拓扑排序:首先将没有可追溯区块的块作为原始区块0,然后在除去区块0之外的区块中继续选择没有可追溯区块的块作为区块1,如此循环。
图源:Kappo'sBlog
目前使用了?DAG结构的项目中心化程度较高,因此这里不再做更深入的讨论。对于DAG感兴趣的家人可以搜索DAGLabs进行学习。
3.网络层=分片
分片指的是将账本拆分成若干个部分,分别由不同的节点集团进行管理。通过实施状态分片,每个节点需要处理的交易数据变少,不仅可以提升交易处理速度,并且对于节点的性能需求也会相对降低,使得参与挖矿的门槛降低,去中心化程度加强。
图源:Whyshardingisgreat:demystifyingthetechnicalproperties
BAKC系列NFT近24小时交易额增幅超200%:金色财经报道,据OpenSea数据显示,Bored Ape Kennel Club(BAKC)系列NFT近24小时交易额为107 ETH,增幅达214%,24小时交易额排名位列OpenSea第六。[2022/11/7 12:23:46]
Sharding1.0
对于状态分片最初的想法是:将n=64个数据碎片blob添加到信标链中,每个周期内有n个验证节点广播自己的数据碎片blob,并由委员会对于数据的真实性与可用性进行确认,确认完成后的blob被加入执行链。每经过一个epoch重新分配各个分片链所对应的验证者的机制,导致了分片链切换后数据同步不及时的问题,会造成延迟。此外,这种方式还面临着四个问题:无法保证信标链上的每个区块中写入了全部分片需要的交易数据;无法对于全部分片进行全局检查;验证节点可能导致livenessfailure;结合PoS,只要钱够多,控制的节点够多,更容易控制委员会。在ETH发行率降低、验证集中化的背景下,此机制为MEV提供了机会。
DankSharding
为了规避Sharding1.0中的风险,DankSharding提出了两个要点:所有blob都将被加入信标块;每个委员会的成员只对碎片数据的一个子集进行处理,所有信标数据和分片数据可以一起检查。
具体来说,Danksharding的核心机制分为三部分:
数据可用性抽样:编码者使用RS编码进行冗余传输,减少节点的验证压力,同时采用KZG多项式承诺来保证编码正确。在此之上,通过将数据块的分片再次进行分片、并在不同数据块分片间重组的方式对RS编码进行二位扩展,降低全节点数据重构的门槛,从而降低中心化程度;
出块者-打包者分离:将全节点分成出块者和打包者两种角色,低配置的出块者负责去中心化选择打包者并获得打包者的竞价,具备高配置高性能的打包者则通过竞价获取打包记账权,从而解决MEV的价值分配问题;
抗审查清单:出块者指定合法的交易列表,打包者证明自己看到了列表并将列表中的交易包含在打包中,以此防止打包者故意忽略合法的交易。
Proto-Danksharding/EIP-4844
DankSharding的机制实现起来较为困难,作为阶段性的方案,EIP-4844出现了。EIP-4844中引入了具有时效性的blob,类似于移动硬盘,在被写入主网后,blob只存在一段时间,随即被销毁。在EIP-4844的设计中,同样引入了KZG多项式承诺,以确保后续DankSharding实装时可以向前兼容。
LooksRare完成数据库升级:10月13日消息,LooksRare宣布完成数据库升级。
昨日消息,NFT交易平台LooksRare在社交媒体上发文表示,该平台将于明日对数据库进行重大升级,具体升级时间为北京时间18:30 -- 22:30,届时访问该平台或将受限。[2022/10/14 14:27:01]
链下扩容方案
链下扩容方案,指的是在不改变原链构造的前提下,通过在主网之外进行交易处理,来减轻主网的处理压力。主要有状态通道、链下计算、多链三种类型,为了方便理解,我们将侧链和子链全都归在了多链方案之中。
?状态通道
状态通道指的是,在特定参与者之间通过多签等方式锁定区块链状态的一部分->针对通道中出现的状态转换,在所有参与者的同意下,在链下更新状态->确认最终状态,并向主链广播。由于只需要广播最终状态,使用状态通道处理琐碎的相互交易可以有效减少主链上广播的交易数量,降低交易延迟。此外,每个参与者可以通过中介与其他没有打开通道的参与者互动:Alice和Bob之间有通道,Bob和Carol之间有通道,则Alice可以在不另外开启通道的情况下,通过Bob与Carol互动。状态通道透明度低,通常只适用于在特定参与者之间发生的频繁交易。
图源:EthHub
2.链下计算
链下计算,意在通过将验证之外的功能全部移至链下的方式提升链上吞吐量。其主要需要保证安全性与隐私性,具体的操作方式可以分为可验证的链下计算、“飞地”型链下计算、链下安全多方计算和激励驱动型链下计算四种。
图源:Blockchain-BasedReputationSystems:ImplementationChallengesandMitigation
可验证的链下计算:zk-SNARKs,Bulletproofs,zk-STARKs
链下的证明者将链下的计算结果上链,并由链上的验证者进行检验。
“飞地”型链下计算:Enigma,Ekiden
在区块链节点上创建可信执行环境并预设数据接口进行计算。TEE充当黑箱,可以在有效保护数据隐私的同时实现明文数据运算,提升计算效率。
链下安全多方计算
将数据拆分并分发给各个节点,节点根据当前区块链的状态以及各自获得的数据计算状态变化,将各个节点计算出的数据结合,即可获得完整的计算后数据。节点需要计算的数据更少,效率更高。
激励驱动型链下计算
求解者对于交易数据进行计算,在公布结果的同时质押保证金;验证者对于求解者的结果进行验算,如果发现错误,则可以质押保证金并发起链上仲裁,正确的一方将获得用户支付的手续费。
?3.外链=侧链;Rollup
外链指的是,在主链之外创建一条新的区块链,通过跨链将交易处理的一部分转移到新的区块链上执行,并将结果广播给主链,从而提升主链的处理效率。
侧链
侧链是完全独立于主链的区块链,其使用锁定+铸造/销毁的方式将资产从主链投影至侧链,并完全在侧链上完成交易处理与储存的整个流程。侧链的安全性完全依靠于其自身的节点以及共识机制。分为锚定式侧链与联邦侧链两种。
图源:EthHub
Rollup
Rollup与侧链的不同是,其仅在子链上处理交易,数据仍储存在主网上,因此可以在提升交易处理效率的同时享受主网的数据安全性。Rollup按照数据可用性和交易验证方式可以分成四种:
欺诈证明+链下DA=Plasma
Plasma需要在主链上创建一个写入了子链哈希状态转换规则的智能合约,以此连接主链和子链其扩容机制与状态通道类似,通过减少主链需要处理与保存的交易来提升吞吐,只是其在主链之外建立的并不是特定参与者之间的通道,而是共用的具备独立共识机制的新区块链,子链需要定期向主链上的智能合约提交状态更新,在顺利通过7天的质疑期后将区块状态写入主链。其集合了状态通道与侧链的优点:在状态通道模式下,如果需要增加新的参与者,需要在链上重新打开新的通道,而在Plasma中不需要;状态通道向主链同步状态时需要全部参与者的同意,而Plasma不需要;状态通道只保留最终状态,Plasma的状态转换记录在子链上有完整的记录;侧链上的状态转换会直接影响到主链上的状态,因此其资产安全性取决于侧链本身,而Plasma并不是,其安全性依赖于主链。
Plasma机制主要面临的问题是:子链节点需要保留子链上的大量交易数据;节点必须在线。
图源:Plasma:AnInnovativeFrameworktoScaleEthereum
有效性证明+链上DA=ZK-Rollup
zkRollup可以有效改善Plasma所面临的问题。由于这部分的zkRollup和Validium均使用零知识证明作为验证机制,因此在这部分先简单叙述一下零知识证明的概念:零知识证明,指的是在向其他人证明某个命题为真时,除了命题为真之外,不提供其他的信息佐证。比如,A使用零知识证明向B证明他已经成年了,此时B不会知道A的生日,只会知道A已经成年了的这件事。在zkRollup中,使用zkSNARK对于大量的交易进行验证,确定了这些交易的有效性后,只需要向主网上传一个证明这些交易都有效的零知识证明即可。这样做大幅压缩了数据量,可以将交易数据写入主网。
zkRollup也面临着一些问题:零知识证明计算困难;初期需要信任;通用性较差
有效性证明+链下DA=Validium
Validium同样使用零知识证明保证其交易信息的有效性与链下数据的可用性。其与zkRollup的唯一区别是,将数据可用性放到了链下,这使得Validium拥有了更高的吞吐量,但是带来的后果是数据可用性的管理者稍微修改Merklized状态,就可以让用户无法转移资金。如下图,如果d3被修改,d1的所有者将无法获取节点m的信息,而m是证明其账户所有权的必要条件。在zkRollup出现后,Validium基本上是完全失去了竞争力。
图源:ValidiumAndTheLayer2
欺诈证明+链上DA=OptimisticRollup
OptimisticRollup是Plasma的升级版,同时可以解决zkRollup通用性的问题。其默认节点提交的交易信息是正确的,向主网提交交易信息后,会有7天的质疑期,供他人检查交易的正确性。其与Plasma的不同在于,将交易数据写入了链上;与zkRollup的不同在于,不使用零知识证明。在中和了其他两种Rollup的同时,OptimisticRollup也牺牲了部分的吞吐量。
图源:ethereum.org
总结与未来展望
因为不可能三角的存在,注定不会有完美的扩容方案,需要权衡各个方案的代价。?个人认为,由于链上扩容需要支付的代价更高,较为难实现,一般情况下还是会以链下扩容方案为主。
目前的链下扩容方案中,Rollups因其安全性保持优势。不过,虽然通过Rollups可以大幅释放L1的吞吐,在将L2打包的数据传回L1时的速度却仍受以太坊的区块大小所限制。目前以太坊一个块的存储在100kb左右,算下来一分钟内能够处理的Rollups打包的数据不足500kb,而主网除了接收打包的数据之外,还需要处理L1上原有的交易信息,共同导致了链下扩容方案吞吐量的瓶颈。
不过好在可以对于不同方案进行组合:链上方案中,DankSharding的构思正好可以通过使用抽样验证和RS编码大幅降低验证节点的工作量与数据下载量,解决交易处理速度的问题,预计在实装后可以与Rollup相辅相成。而如果把分片的实装当作大前提,在当前的几种Rollups中,OptimisticRollup的成本主要是写入主网的成本,与可以降低该成本的ProtoDanksharding最为适配,因此个人认为在近期内,链下OptimisticRollup+链上ProtoDankSharding会是最佳选择。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。