从编程语言到 DeFi 协议,「可组合性」是 Web 3.0 里被青睐的名词。但是可组合性并不只是叙事方法,当一种工作模式发展到一定程度势必要变得专精和可拆解。那么区块链在扩容这一令人头痛的问题上在逐渐向模块化推进也是必然。
我们知道区块链的主要堆栈有数据可用层,共识层,结算层和交易执行层。那么单体区块链(monolithic)就是使四层的工作都在一个网络完成。网络中的每一个节点都需要处理数据的验证到交易的执行。
然而可想而知,随着交易量上升,单体区块链逐渐遇到瓶颈。目前用户秉承着去中心化愿景包容着以太坊高额交易费用和远比不过 Visa 的每秒转账速度。
究其核心,单体区块链的瓶颈的核心源于数据的累积,因为区块链的不可篡改性,数据可用是扩容不可以牺牲的前提。
但是为了推动大规模采用(mass adoption),单体区块链势必要向模块化演进。
在考虑到以太坊的发展进程上,Vitalik 曾说过以太坊将会呈现以 rollup 为重心的生态状态。Rollup 是一种将执行层分离出去的扩容解决方法,在链下处理计算,但还是将每笔交易的一部分数据放在链上。Rollup 的吞吐量呈线性增长,因为如果交易量越大,也就意味着越多的数据需要被广播至主网。这样一来,Rollup 吞吐量(throughput)的瓶颈还是落在了底层网络的数据带宽上。
为了跨过这个瓶颈,以太坊的最终扩容计划 - 分片(Sharding)的初步实施就是要让分片出来的链来执行数据可用。
显而易见,单体区块链的发展方向不仅要向模块化推进,专注于做数据可用性的模块化区块链或者方案格外的值得关注。以太坊的目标是在不权衡去中心化和安全性的情况下扩展计算。由于整体区块链架构的限制,数据可用性对于实现去中心化的可扩展性至关重要。
这篇文章将分析专注于数据可用性的模块化区块链和解决方案 - 工作机制以及在设计上的取舍。
总体来说,一旦一个区块链网络把它的工作任务之一外包出去,就可以被称为模块化区块链,这可以是交易执行/结算,共识,或者数据可用。
在文章的这部分,我们将以 Celestia 为例展示模块化的特点与优势。自五月启动测试网以来热度高涨,不少文章就它自身的机制和与以太坊的对比进行了解读和分析。这个第一个专注与模块化的区块链网络将于 2023 年正式上线主网。
10 月 20 日,Celestia 完成 5500 万美元融资,由 Bain Capital Crypto 和 Polychain Capital 领投。据透露,5500 万美元是 Celestia A 轮 和 B 轮的融资总额,而最新一轮融资使得 Celestia 成为了估值达到 10 亿美元的独角兽。
Celestia 是一个可插拔的共识和数据可用性层,它利用 Tendermint 作为共识协议,仅负责交易背后数据的排序和可用(availability)而不管交易的有效性(validity)。看似 Celestia 负责的工作减少了,数据可用其实是区块链确保安全性的核心任务。
Celestia 具有以下特点:
去中心化:既然 Celestia 上的共识层只专注于数据可用性,网络中的轻节点可以利用数据可用采样的方法确认可用性,而无需下载整个区块。而这个轻客户节点可以直接在手机上运行,极大地降低了运行节点的门槛。
扩容性:首先我们来回顾区块链扩容的瓶颈 - 状态膨胀:随着交易量增加,需要执行交易的信息大幅增加,这意味着运行全节点的难度越来越大。Celestia 把区块有效性的问题简化为数据可用的问题 - 这意味着 Celestia 网络只需要轻节点可以保证数据可用性,当越来越多的节点加入数据可用性采样时,区块空间呈线性增长。
安全性:Celestia 的安全性同样取决于网络中的轻节点,只要网络中存在足够的节点进行采样则说明数据被隐藏的可能越小,由此安全性越高。上面提到,Celestia 的轻节点运行门槛足够低,这样的去中心化程度赋能了更高的安全性。
此外,模块化区块链具有以下几点优势:
可插拔,灵活性:首先,用户可以基于 Celestia 部署自己的执行层,从而依靠 Celestia 的数据可用作为安全保障。此外,Celestia 对于“执行层无感知”的状态开放了虚拟机的设计空间 - 它并不需要与 EVM 兼容,这赋予了 VM 的后起之秀充足的展示和竞争机会,比如 LLVM, MoveVM, CosmWasm, FuelVM 等。
费用便宜:在吞吐量增长的情况下,Celestia 的验证费用呈下面右图次线性增长。这是因为数据可用采样的工作原理只需要轻节点随机下载区块中的一小部分数据,所以即使随着数据量增大到特别大,用来验证的数据也不会呈线性增长,所以费用相对便宜且是有上限的。
去信任化是区块链思想的前提,通过验证而不是信任来传递数据。如果我们不能用现有的数据重现某些东西,从区块链的角度来看,那么它就不存在。**用部分数据还原全部数据,这一过程被称为数据可用性证明。**单体区块链实现数据可用性的方式,是将全部数据下载到全节点(full-node),这种方式扩展性较差,对节点的要求也很高。模块化扩容解决方案,则是将数据可用性跟共识和执行层分开。这也被认为是最理想化的方案,因为这不要求对节点升级。
数据可用性分为链上和链下两种方式:
链上:强制区块生产者在链上发布所有交易数据并让验证节点下载它。这通常为单体区块链所用,支持全节点和轻客户端两种方式。另外,Danksharding 采用了全新的方式实现了链上 DA。
链下:区块生产者不会在链上发布交易数据,而是提供加密承诺来证明数据的可用性,以太坊的汇总(rollups)解决方案,以及模块化(Modular)均采用这种方式。
具体实现方式:区块提议者(Block Proposer) 需要将每一个区块的信息发布,节点(Validator) 根据可用数据还原交易信息,并验证 block proposer 发布的信息与节点下载全部数据时还原的信息相同。由于区块提议者只发布部分数据,不排除其隐藏或篡改数据,而对交易发起攻击。这种攻击被称为 “data withholding attacks”。
目前,有以下 4 种方式来避免 “data withholding attacks”:
Data Availability Committees:Pure Validium 通过区块生产者将交易数据存储在链下,这在一定程度上集中化。 DAC 离线记录链下数据的副本,但需要在发生争议时使其可用。 DAC 成员还发布链上证明,以证明上述数据确实可用。
Proof-of-stake data availability committees:任何人都可以成为验证者并在链下存储数据。 但是,他们必须提供“保证金”,并将其存放在智能合约中。 权益证明数据可用性委员会比常规 DAC 安全得多。 它们不仅无需许可和无需信任,而且还具有精心设计的激励机制来鼓励诚实的行为。它一定程度解决了 DAC 的中心化风险的问题。
Data Availability Sampling(DAS):在 DAS 机制中,节点通过对小块多轮随机采样,以验证数据可用性。 由于许多节点同时对块的不同部分进行采样,达到统计意义上对确定性以验证其可用性。DAS 不仅适用于轻客户端数据可用性,也广泛用于模块化 DA 方案。
Data Availability Proofs: 将 DAS 与纠删码(erasure coding) 结合,由于 DAS 并没有验证全部的数据,区块提议者仍有可能实行 “data withholding attack”。 纠删编码是通过在数据本身上增加冗余数据,以此实现用更少的数据还原交易。由于要求区块提议者发布的数据更少了,那么如果区块提议者想实施攻击,就需要保留至少 50% 的区块数据,而未使用纠删码时只需保留 1% 便可实施攻击。
纠删码是一种允许通过添加冗余片段(erasure code)将数据集加倍的技术,可用于重建原始数据。从 CD-ROM 到卫星通信再到二维码,它在信息技术中无处不在。 Mustafa Al-Bassam 在什么是数据可用 一文解释,纠删码允许用户获取一个块,例如 1MB 大,然后将其“放大”到 2MB 大,其中额外的 1MB 是称为纠删码的特殊数据。 如果块中的任何字节丢失,用户可以通过代码轻松恢复这些字节。 即使多达 1MB 的块丢失,您也可以恢复整个块。 相同的技术可以让计算机读取 CD-ROM 中的所有数据,即使它已受损。 目前最常用的是 Reed-Solomon 编码。实现方式是,从 k 个信息块开始,构造相关的多项式,并在不同的 x 坐标处对其进行评估,以获得编码块。 使用 RS 纠删码,随机采样丢失大块数据的可能性非常小。KZG 多项式承诺(KZG Polynomial Commitment )允许基于对未编码信息块的承诺直接验证 Reed-Solomon 编码块,因此不会为无效编码留下空间。
Reed-Solomon 编码过程:
下面我们将通过比较数据可用性,对模块化解决方案进行分析。
Danksharding 是以太坊模块化解决方案。不同于简单的 Sharding,Danksharding 使用 DAS 验证数据可用性,解决了 Sharding 的单个分片上验证者隐藏数据作恶的问题。Sharding 将区块和区块提议者分散在不同的分片上,而 Danksharding 引入合并市场费用 (Merge Fee Market) 的概念,唯一的区块提议者将处理所有的交易数据。同时,将区块建设者和区块提议者分离 (PBS),避免了提升节点要求的问题。
Proto-danksharding (EIP-4844) 是实现完整分片路线图的途径。其提出了一种新的交易类型 “Blob 携带交易” (Blob-carrying Transaction)。Blob 的特点是相同数据大小,比 calldata 要便宜很多,且数据容量大于 calldata。
不同于使用简单的 KZG 多项式承诺,Proto-danksharding 采用的是哈希后的 KZG 多项式承诺,以实现 EVM 兼容和未来容量兼容。
不同于 EIP-4488 试图大幅降低 gas 成本,Blob 并不会降低 gas 费用,但会降低 layer2 协议的交易费用。目的不同,EIP-4488 只是作为临时解决方案,分片将是最终的扩容解决方案。
简单来说,Validium 是以以太坊为中心的 L2 扩容方案,Validium 类似 zkRollup,唯一的区别是它会把数据可用性放在链下。由此,Validium 极大程度的实现扩容 - 达到每秒 9000 笔交易的速度。
为了更好地理解 Validium,不得不提采纳 Validium 实现数据可用性方案的项目 - StarkEX。StarkEX 是由 StarkWare 开发的、 STARK 支持的可扩展性引擎,可被应用于加密货币交易所。StarkEx 于 2019 年夏天上线,它采用 zk-STARK 有效性证明的独立式定制化扩容解决方案。目前有 dYdX、Sorare、Immutable 和 Deversifi 四款产品。
StarkEX 的数据可用性有三种可选择的模式:zk-Rollup,Validium 和 Volition。其中 Validium 是一种链下的数据可用性方案。在这个方案里,数据的安全性由数据可用委员会(DAC)的八个节点来维护。
这个方案的好处是降低的交易费用和隐私性:首先用户不再需要为数据上链而付费,因为大部分的 gas 费用都用在更新链上的状态性上。此外,Validum 把用户的账户额度信息放在链下,由DAC 来保管维护保证了隐私性。
但是用户需要权衡的是虽然 Validium 使交易费用降低且拥有相对的隐私性,但是他们需要信任 DAC 成员。这也是 Validium 方案中最大的弱点。
首先,DAC 的签名钥匙存储在链上,这意味着这些钥匙很容易被攻击。比如攻击者可以把 Validium 转换成只有他们才知道的状态,由此来冻结资产,要求赎金。仅仅由八个成员组成的 DAC 类似于一个名誉证明的网络(Proof-of-Authority),安全性相对较弱。
此外,StarkEX 的 Validium 也相对中心化,因为 Validium 的操作者,或称数据可用性管理者,完全可以冻结用户的资产。他们可以改变哈希后的状态而不向用户披露。然而缺少了这一信息,用户则无法为其账户创建所有权证名。
相比之下,zkRollup 的解决方案不会发生冻结用户资金的问题。这是因为对于 zkRollup 来说重建状态所需的信息必须调用以太坊的交易数据,否则 zkRollup 就会拒绝改变状态(蓝狐笔记,2020)。换句话来说,在 zkRollup 的安全性和状态性均由以太坊主网所保证。只要用户向以太坊上的 zkRollup 合约提交申请即可提取他们的资产。然而,向以太坊主网提交的信息验证请求以及验证的过程均伴随着一小笔 gas 费用,而这笔费用随着交易数量增加而线性增加。所以相比 Validium 的方案,zkRollup 只能实现每秒 2000 笔的交易。
值得一提的是 StarkEX 还有第三种数据可用方案 Volition,但是理解起来相对简单。它是一种混合的数据可用性制度,即让用户来选择把数据可用放在链下或链上,权衡利弊。
之前已经提到,zkRollup 的扩容方案是让交易在链下处理,然后再把结果同步给以太坊上的全节点 - 具有链上数据可用性。
具体来说,如果一个 zkRollup 账户的用户想证明她/他在此账户拥有资产,用户则可以自己提供一个 Merkle Path 并把 状态的改变 或者 最终状态 广播至以太坊网络的每一个全节点(见下图左侧)。这样即使 zkRollup 的操作者作恶想要隐藏某个数据,用户都可以直接从以太坊的网络提取数据。虽然这个方案赋予了用户对数据可用的自主掌握权,或是说“任何人可以自行重建Layer2的状态,以确保抗审查”。但是这伴随而来的是扩容上的瓶颈,因为以太坊网络验证状态改变的这一动作是占用区块空间的。
而 zkPorter 是 zkRollup 的进阶扩容方案,这个方案与前者的区别是,zkPorter account 的用户将不会把状态改变作为 calldata 更新至以太坊主网上,而是发送至由守护者(Guardian)组成的网络(见下图右侧)。
注意这里,与 StarkEX 方案中的 Validium 不同的是,zkPorter 的数据可用性是由守护者(Guardian)来维持和保护的。通过权益证明的方式,守护者质押 zkSync 的代币并且跟踪数据可用性的状态。一旦漏掉任何一笔交易,守护者的质押都将被销毁,相比 Validium 的 DAC 依靠信誉实现安全,zkPorter 则从加密经济上保证安全去掉了需要信任的假设。
虽然 zkRollup 和 zkPorter 是两种扩容方案,但这并不妨碍着两侧的合约和账户无缝交互。此外,从用户体验上来看,zkPorter 账户的交易费用减少了 100 倍。zkPorter 能够实现便宜的交互费用是因为它不像 rollup 那样向以太坊上的全节点发布数据,从而导致成本的增加。
Eigenlayer 是建立在以太坊 POS 基础上的再质押协议 (Re-staking)。通过将权益证明质押的 ETH、包含 ETH 的 LP 代币,或者包含 stETH 的 LP 代币进行二次质押,来运行节点验证服务。这些服务可以包括:中间件、预言机、侧链、二层网络等协议。它提供了一个统一的质押平台,使得其他协议可以直接采用,而不用建立自己的验证器和池子,从而可以将更多精力放在开发核心协议和用户体验上。Eigenlayer 不仅为其他协议的节点验证服务带来了统一标准,也提高了 ETH 质押者的收益。
Datalayr 是建立在 Eigenlayer 之上的数据可用性协议中间件。Datalayr 使用 KZG 多项式承诺和纠删码,结合欺诈证明和强制披露为节点提供诚信保证。它们在测试网拥有 10 MB/s 的吞吐量,这是在不考虑历史数据的情况下。随着节点数量增多,可用的吞吐量就越多,验证也越便宜。拥有 1,000 个节点将使以太坊能够处理 330 TX/s。
Datalayr 的缺点是,尚不知道能激励多少 ETH 质押者提供数据可用性服务。因此,并不能断言其扩展能力和安全性。
Polygon Avail 是一个模块化的数据可用性区块链。旨在为其他的独立链、侧链或链下数据可用性扩展。采用 KZG 多项式承诺,数据可用性抽样(DAS)和纠删码,使得轻客户端也能作为数据可用性验证,而不依赖欺诈证明。Polygon 8 月 30 日发布的测试数据显示,目前,Avail 的出块时间为 20 秒,每个块能够保存大约 2 MB 的数据。 假设平均事务大小为 250 字节,现在每个 Polygon Avail 块可以容纳大约 8,400 个事务(每秒 420 个事务)。
除了用于数据可用性的 Polygon Avail,Polygon 生态的扩容解决方案还包括:
Polygon PoS: EVM 兼容的以太坊侧链,通过一系列无需许可的 PoS 节点确保安全;Polygon Hermez, 基于 zk-rollup的以太坊 layer2;
Polygon Edge:提供可定制的模块化框架,支持私有或公有的以太坊兼容的区块链;Polygon Nightfall, 是一个 Optimistic Rollup,旨在降低私下转移 ERC20、ERC721 和 ERC1155 代币的成本;
Polygon Miden:是基于 zk-STARK 的以太坊二层扩容解决方案,其核心是 Miden VM:一个图灵完备的基于 STARK 的虚拟机,它提供了一定程度的安全性并支持目前在以太坊上不可用的高级功能;
Polygon Zero:使用 Polygon 自己开创的 Plonky2 零知识证明系统,Plonky2 支持高效的递归证明生成,允许 Polygon Zero 水平扩展,这意味着协议的吞吐量不受网络上最弱节点的限制,而仅受可用的总计算量限制。