从 2020 年初开始,以太坊 DeFi 呈爆发式的增长,由 COMP,YFI 等引发的流动性挖矿导致以太坊急剧拥堵,矿工费一度提高至 500 Gwei,DeFi 手续费高达上百美金。以太坊拥堵不堪,亟需一种可扩展的智能合约方案。
10 月上旬,V 神发表评论 「以 Rollup 为中心的以太坊路线图」,开启了二层网络浪潮,ZK Rollups 和 Optimism Rollups 竞相出镜。ZK Rollups 和 OP Rollups 采用了两种完全不同的证明模式,分别是:有效性证明和错误性证明。
ZK 的有效性证明是将一批次的交易和对应的完整性证明发送到以太坊的智能合约进行验证,如果验证正确则被合约接受,验证错误则拒绝交易;OP 属于错误性证明,是数据状态运营者将数据提交,并附加押金,在一段时间内任何人都可以发布非交互式的错误证明,如果这段时间内无人成功验证错误,则状态获得终局性,反之,成功证明错误则会罚没运营者押金。
ZK 和 OP 的区别在于对状态终局采用了两种不同的方式。我把 ZK 类比为 PoW,他是通过密码学算法验证结果有效性;而 OP 更像是 PoS,是运营者抵押资金(像 Staking 一样),采用了一系列的「治理」手段达到最终目的。ZK 由于密码学理论和技术的限制,由于其「指令集」过于简洁,难以处理复杂的业务程序;OP 的问题在于治理机制,需要将资金进行锁定并限制了流动性。
不管是 ZK 还是 OP,能对以太坊进行扩容的根本都在于对数据压缩和链外计算。如下图所示,为了节省一层网络的负载,数据进行了极大的压缩并将计算迁移到二层进行处理,此时一层存储的数据减少,并且只需要对状态进行验证即可,极大的降低了一层的负载。
但是降低负载并不代表无限负载。一层的区块大小和 gas 具有上限,并且在将来仍有大量的 gas 会消费在一层 DeFi 和组合性应用中,因此二层必定会和一层抢占资源,并且多个二层之间也会涉及到资源抢占问题。最终在有限资源下会不会存在某些二层无法上链、无法打包交易,那么二层是否会因此停机?就算二层不进行停机,一直在二层进行没有限制的交易,当资产需要要回到一层时,是否会存在过多的数据需要在一层验证,最终导致无法验证。另外,二层的组合行也是一个比较严重的问题。
以太坊是一台「世界计算机」,其设计初衷即是在区块链上完成计算和存储。在链上做计算意味着区块链网络中的所有节点都必须对计算过程进行处理,链上计算模式的成本不可能太低。就算采用二层的扩容方式,也仅仅是对数据和计算进行了压缩,但仍然需要计算过程(验证)在一层进行处理。
本文旨在介绍一种新的计算范式,与以太坊在链上计算的模式不同,该计算范式将计算完全放在链下,链上只作存储,此时区块链仅需要保证存储的可用性和确定性。假设一个计算的入参是确定性的,那么这个计算的输出结果也应该是确定的。比如 x + y = z 这个程序,如果 x 和 y 的值都是在链上记录,分别是 x = 1 和 y = 2,那么公式在任何地方计算结果 z 始终为 3。只要程序的参数在链上确定性的记录下来,那么程序其实也不需要在链上运行(任何人任何地方链下运行),其结果依然是确定可信的。由于计算过程与链完全解耦,计算参数完全依赖确定性存储,我们将这样的计算范式称为:存储计算范式。
我们知道,不管是冯诺依曼结构还是哈佛结构的计算机,其本质都是一台通用图灵机。
图灵机是一台假想的机器,由一条无限长的纸带和一个带状态寄存器的纸带读取机器组成。读取器会在纸带上来回移动并将新的参数写入纸带。这样一台假想的机器可以进行任意复杂的计算(图灵完备)。
借助区块链技术,我们可以将图灵机的纸带替换为区块链,可以得到下图中的新型计算模型(存储计算范式):
可以编写一个业务程序,将程序的代码提前上传到区块链上(上图区块高度 102)。任何人都可以将程序从可信的区块链中下载并运行起来,程序的读取和输出端都是区块链(纸带)。由于区块链具备可追溯、不可伪造的特性,因此链下程序的输入输出也具备确定性。程序加载来自区块链的确定性参数,最终生成的程序状态也是确定性的。
存储计算范式将程序的源代码、输入输出存储在区块链上。运行程序时,加载链上可信的源代码,对链上的可信参数进行链下计算,输出状态也必定具备一致性。任何人都可以运行程序,任何人运行的结果都一致的,达到可信计算的目的。
模型理论上可行,但将以太坊作为确定性存储依然过于昂贵,会到导致应用的成本激增。使用以太坊有限的区块大小作为存储也会使应用的扩展性大打折扣。借助 Arweave,一条以永久存储为目标的区块链,我们可以将存储计算范式进行实践。
Arweave 是一个基于区块链的文件存储协议,它具有一次性付费,永久存储文件的特点,它实现了一套简单的经济激励规则,让矿工能长久的存储数据。
永久存储是 AR 的核心功能,因此首先需要明确永久存储的成本。统计发现存储成本每年都在以惊人的速度降低,其中每 GB 的存储成本平均每年下降 30.57%。经计算,成本会收敛到一个常数,得出一个永久存储的成本。AR 使用这个收敛的永久成本作为数据存储的收费基准。下图所示,存储 1 GB 的数据消费 2.45 个 AR,花费约为 $9.8 (由于 AR 价格波动,存储花费也会有一定的波动)。
在有了收费基准后,怎么让矿工永久保存这些数据呢?AR 引进了全新的挖矿机制:开采一个新的区块时,会随机链到先前的一个「回忆块」,要求矿工证明可以访问这个回忆块的数据,才能开采出一个有效的新区块。这会激励矿工尽量多的存储历史区块。同时,该算法还激励矿工存储「稀有」区块,因为当稀有区块被选为回忆块时矿工能在更小的竞争下开采出新的区块,以达到数据永存的目的。
AR 能保证数据永存、价格稳定,便宜。依赖区块链技术,AR 存储的数据也具备可验证可追溯的特性,非常适合作为可信计算的「图灵机纸带」。
存储计算范式能运行的关键在于数据永存和成本固定(低廉),只有永存能使数据始终「可得」,得到这些数据才能在链下计算出一致性的状态;成本的固定或低廉,能让应用的共识成本始终保持在一个稳定的范围,不会像以太坊那样,在区块拥堵的情况下出现激烈竞争资源的情况,稳定的成本使应用更具备可用性。
将存储计算范式与 AR 结合,我们可能获得了一个比较完美的确定性图灵机,一个可以实践应用的新型可信计算模型。
存储计算范式至少具备以下优势:
可以进行任意复杂度的计算。计算能力取决于链下机器的性能;
降低共识成本。共识的成本仅包含存储成本,不再包含计算成本。计算成本由应用的运营者(链下计算者)提供;
具备可组合性和优秀的「分片」能力。应用只需要从链上加载自己关心的数据,多个应用之间组合时加载多个应用的数据,运营者不再需要下载所有数据(比如运行一个 dapp 需要整个 geth 的支撑);
极强的可拓展性。一是共识成本的的降低提高了拓展性,二是数据不仅是下载「分片」,也能达成上传「分片」,因此性能瓶颈仅仅是网络带宽;
不限制编程语言。只需要将目标程序提前存入区块链并将程序的所有入参序列化上链。
我们对 Rollups 和 ETH 2.0 进行了深入研究,所有的努力方向都在将计算链外化,而最终的目标可能就是完全的链下计算。在探索的过程中,可以得出这样一个结论:在程序没有二义性的情况下,只要输入输出的存储具备确定性,那么程序的计算结果也一定具备确定性。
存储计算范式是一种完全不同于以往区块链计算模型的新事物,或许还需要很多时间让大众来接受和认可,但它一定是更接近本质(图灵机)的优秀可信计算范式。
感谢以太坊爱好者阿剑老师对 Rollups 和 ETH 2.0 的深度解读,星火矿池喵叔对 SmartWeave 的引介以及星火矿池李培对 Arweave 和 LazyLedger 的深入研究。
原文标题:《区块链存储 ARWEAVE:图灵机的纸带,可信计算新范式》
撰文:outprog,imToken 后端开发与智能合约开发