# 模块化公链：从链外计算谈起

By [ZZzzzioi_](https://paragraph.com/@zzzzzioi) · 2022-06-23

---

1\. 以太坊发展之困与破局之道
================

随着公链发展的日趋成熟，以以太坊为代表的公链正触及性能发展的天花板，面对不可能三角所带来的发展上的掣肘。目前来看，在保证安全性和去中心化程度不变的前提下，以太坊的区块Gas容量以及出块时间基本达到了理论上的极限，因此从其本身出发的优化已经难以解决相关问题。而生态发展的需要以及使用场景的日益复杂，对性能提高的客观需求却真实存在。在此背景下，分片、Alt L1（替代Layer 1）、Layer2、侧链等解决方案均致力于突破以太坊发展的瓶颈。

随着分片解决方案的搁置，Alt L1、Layer2和侧链成了目前较为主流的扩容解决方案。而Alt L1则受限于不可能三角的限制，不同公链不可避免的在三者之间做出了特定的取舍，如Solana对去中心化特性的弱化。侧链目前的发展也逐渐表现出功能性的趋势，如Ronin特定的对Axie的支持。Layer2则从架构上开始向功能专精的方向发展。总结来看，不同公链依据自身定位与发展特点，在不可能三角中做出了取舍；侧链则逐渐表现出特定功能化的趋势；Layer2在共识和执行层面开始做出分层。三种扩容方案实质上都指向一种解决思路——模块化。

回到模块化本身，计算（执行）功能的分离是较为常见的模块化方式，因此本文从链外计算出发，对几种不同的链外计算模式进行对比分析。

2\. 链外计算的四种模式
=============

### 2.1 Oasis：共识层与执行层（ParaTime）分离的模块化分层设计

Oasis网络是一个运用权益证明（POS）、去中心化的Layer1网络，其使用的模块化架构实现了共识层和智能合约执行层ParaTime层两部分的解耦合。同时在设计上，对共识层进行了尽可能简单化的设计，共识层仅处理Token的转移、质押以及解绑定等较为简单的操作，这一设计类似于Layer2将智能合约的执行与共识操作隔离相类似，均有助于提高网络的安全性与效率。而在ParaTime层的设计上，Oasis将该层的各个ParaTime相分离，不同的ParaTime可针对不同的需求做出相应的优化调整，彼此之间互相独立的完成运行。

![Oasis 平台体系结构      资料来源：Oasis官网](https://storage.googleapis.com/papyrus_images/29983faa3a25d6df0f614ab5a587452934d21b14765783f8e32c0b5baf5c1171.png)

Oasis 平台体系结构 资料来源：Oasis官网

运行时，不同的ParaTime构建各自不同的执行环境、验证机制以及加密机制，智能合约在ParaTime层完成执行后，将其值提交至共识层。共识层则从ParaTime层中接受各类参数值，并将这些值写入下一个区块之中，同时处理较为基础的操作。而在运行过程中，若存在某个ParaTime的运行超载或出错，其仅会影响出错ParaTime提交到共识层的状态更新，不会对其他ParaTime的运行产生影响。为防止某一ParaTime恶意向共识层发送过多的垃圾信息导致共识层运行速度降低，每一ParaTime必须向共识层支付交易费用，从而增加负载攻击的成本来降低被攻击的风险。

![Oasis 平台体系结构      资料来源：Oasis白皮书](https://storage.googleapis.com/papyrus_images/585feade704a71168a923394064e68d74d629db1e3eff391735f072748f2200d.png)

Oasis 平台体系结构 资料来源：Oasis白皮书

在执行结果的验证方面，Oasis采用差异检测来对ParaTime的执行结果进行验证。在执行差异检测时，会从节点中随机选择计算节点组成计算委员会，当委员会所有成员同意结果时，则会接受结果。如若检测到差异，则使用差异解析协议对其进行处理。差异检测成本更低执行更快，而差异解析则往往会耗费更多的成本。具体执行过程中，计算节点首先将执行结果通过Gossip协议网络发送到差异检测器，检测结果若无异常，则由验证器提交至共识层完成处理和出块。若是存在争议，则会启动差异解析协议来确定正确结果，并对产生争议结果的节点进行惩罚，由争议节点支付差异解析的成本。

不同的ParaTime在进行并行运算时，可以将每个结果同步提交至共识层，也可定期提交多个结果的融合值，这一操作与Euler类似（Euler支持实时完成每一步操作，也支持将多步操作打包后统一处理），以此实现ParaTime结果产出量与共识层出块数量的解耦合。但其缺点在于无法确定不同ParaTime之间的相对顺序，如ParaTime A产出的结果TA与ParaTime B产出的结果TB被同时提交至同一区块，则无法判断TA与TB的发生顺序。除此以外，Oasis还支持通过IBC协议为不同ParaTime间提供通信，通过TEE（可信执行环境）为平台提供更高的隐私和安全性。

总结而言，Oasis通过将共识层与计算层分离的方式，实现了节点功能的解耦合，从而大大降低了网络各个节点的运行压力，提高了平台的运行速度。同时其特有的隐私与安全解决方案为整个平台的抗风险性提供了更多的保证，从而为模块化的发展奠定了安全基础。

### 2.2 Arweave：基于存储共识的链下计算

Arweave常被比喻为图灵机的磁带，其通过去中心化的运行方式以及POA（Proof Of Access）为用户提供数据存储服务，同时向提供存储服务的矿工给予AR奖励。POA实现的基础为Arweave独创的Blockweaves结构，每一区块不仅与先前块（Previous Block）相连，还同时与一个召回块（Recall Block）相连，召回块的生成则取决于先前块的哈希值以及区块高度。在决定出块矿工时，矿工必须证明他们能够访问召回块中的数据，从而获得出块权，进而获得出块奖励。因此这就要求矿工1）尽可能多的复制各类区块；2）尽可能的保存难以复制的区块：3）尽可能的保存存储人数较少的区块，从而在开采新块时获得更多的优势。同时由于区块链特有的数据可验证和可追溯的特性，能够极大程度的确保链上数据的可信性，从而实现可信的永久存储。

在以太坊等传统Layer1上，计算、存储以及共识等功能均由节点负责，而SCP（基于存储的共识范式）则将节点的存储与计算功能相分离。简而言之，公链本身更像是计算机硬盘，只负责数据的存储。在保证链上存储数据可信的前提下，智能合约的执行则可以在链下任何具有计算能力的设备上进行。

SCP的理念源于SmartWeave，其为建立在Arweave上的智能合约平台，通过懒惰评估过程（The Process of Lazy Evaluation）将智能合约的执行负担转移到用户身上。具体运行时，可将SmartWeave看作是链外运行的虚拟机。其通过读取应用程序的代码以及Arweave上的输入参数，在本地完成交易的执行，之后再将输出结果与Arweave同步，从而实现链上存储与链下计算的分离。

![SmartWeave 交互过程      资料来源：Arweave Medium](https://storage.googleapis.com/papyrus_images/f2634dbf5bda4039820012e9075c7be40f103d7ea4563ce8f026a25ac806cf44.png)

SmartWeave 交互过程 资料来源：Arweave Medium

SCP的另一个开发实例是Arweave上的everPay。everPay是一个跨链代币支付协议，为用户和商户之间提供实时的代币支付服务。everPay将其他公链的各类资产锁定在一个智能合约之中，并将其映射成相应的资产。如当用户将资产从Ethereum跨链至Arweave时，首先由Coordinator收集和验证交易，并将各笔交易放入序列化的待处理交易池中，随后待处理的交易会被分批打包，每隔一段时间上传至Arweave。此后Detector会对链上全局状态以及账户余额进行验证，任何用户都可以申请成为Detector节点。而Arweave上未经处理的交易则会由Watchmen来使用多重签名或阈值签名来完成，并将完成结果返回至Ethereum。因此，合约的执行均在链下完成，数据均存储于链上，实现存储与计算的分离。

![everPay实现原理      资料来源：everFinance Medium](https://storage.googleapis.com/papyrus_images/e2095d9a12a9cd1d13645c5bc43ad88438bde493f3f813c403aab80f4436a5a9.png)

everPay实现原理 资料来源：everFinance Medium

总结而言，基于存储的共识范式建立起了Offchain-Dapp的原型。链上存储，链下运行，充分发挥链上存储可溯源、不可篡改的特性。在基于数据可信的基础上，解放链上运行所带来的的负载压力，将其分散至用户方，更合理的使用Web3.0资源的同时，提高Dapp的运行效率。

![Offchain-Dapp运行模式      资料来源：Introducing Arweave’s Tech Ecosystem (Part 2),outprog](https://storage.googleapis.com/papyrus_images/59e722b0063433773801d2412722f245606e45bf321eff737d496135daea49a7.png)

Offchain-Dapp运行模式 资料来源：Introducing Arweave’s Tech Ecosystem (Part 2),outprog

### 2.3 MINA：零知识智能合约Snapp

作为目前最为轻量级的公链平台，Mina通过递归零知识证明将区块链替换为了易于验证、大小恒定的加密证明，其大幅减少了每位用户需要下载的数据量，降低用户点对点连接的门槛，提高了网络的去中心化程度。

在此基础上，Mina开发了更具可延展性以及以隐私为中心的Dapp——Snapp，一般而言，Snapp由智能合约和UI界面两部分组成。由于Snapp基于零知识证明（zk-SNARKs）构建，开发者需要构建证明者函数和相应的验证者函数来生成和处理零知识证明。

证明者函数作为Snapp的一部分直接运行在用户的web浏览器，当用户与Snapp的UI界面交互时，用户需要将私有输入（PRIVATE INPUTS）和公共输入（PUBLIC INPUTS）提交给证明者函数以生成零知识证明。

![Snapp证明者函数       资料来源：Mina官网](https://storage.googleapis.com/papyrus_images/49e0764d4139d2c72c04afa4cca92b13c769da6de77458c61139d980890d5758.png)

Snapp证明者函数 资料来源：Mina官网

在生成零知识证明之后，不再需要用户提供任何私有输入，进而保护用户隐私安全。验证者函数则用于验证零知识证明是否通过了证明者函数中定义的所有约束函数，一般由Mina网络完成验证。

![Snapp验证者函数      资料来源：Mina官网](https://storage.googleapis.com/papyrus_images/18310a9765e918fdef6fb0a3caf24e6b459e69b57fced1eec02ae02f745683e2.png)

Snapp验证者函数 资料来源：Mina官网

具体运行上，证明功能在用户的web浏览器上完成，其生成的零知识证明（验证密钥）则会被存储在给定Snapp账户的链上，之后发送至Mina网络进行验证。因此，交易的生成在链下完成，同时该过程会生成可用于验证交易的零知识证明，链上只负责对该证明进行验证，通过验证后将其上链保存，并对Snapp的状态进行更新。

从用户的角度来看，当用户与Snapp进行交互时，用户通过智能合约的前端UI与之进行交互，之后Snapp通过证明者函数将用户输入的数据在本地生成零知识证明，数据可以是私有的（不会被透明公开）也可以是公共（存储在链上或链下）的。除此以外，还会生成与交易有关的Snapp状态更新列表，用于更改Snapp状态。之后用户将数据提交至Mina网络，Mina网络会通过Snapp给出的验证者函数对该笔交易进行验证，成功通过后更新Snapp的状态。

![Snapp用户交互过程      资料来源：Mina官网](https://storage.googleapis.com/papyrus_images/c5d1d7c45ecb29607bb86d56e82ba3eabc74c4c9f03c55933552230df8077133.png)

Snapp用户交互过程 资料来源：Mina官网

### 2.4 Celestia：模块化应用程序特定链

若将模块化堆栈划分为以下四个层次，分别是：1.数据可用层（数据存储）；2.共识层（节点广播）；3.结算层（全局状态的改变）；4.执行层（应用单独状态的改变）。

![不同模式下堆栈区别      资料来源：ForesightNews](https://storage.googleapis.com/papyrus_images/9e9913ae2ff2678c0fa8f2a64ba8d08d719aacd127dc1c03fb29b75722b986b9.png)

不同模式下堆栈区别 资料来源：ForesightNews

单片化的以太坊将四层融合在一起，数据存储、共识以及执行等均集中于单一链上，因此不可避免的需要面对性能上的挑战。而基于Rollup的Layer2扩容方案（包括ZK Rollup与Optimistic Rollup）则将执行层单独分离，从而提高了网络的运行效率。Validium则是在Rollup上的进一步优化，其将数据保存至链下，从而实现数据可用层的分离。数据的链下存储提升了交易的速度，增加了扩容性，同时由于公众无法访问数据，从而提升了隐私保护性。但其缺点在于需要通过额外的委员会对数据可用性进行监护。

最初的Celestia的设计与Layer2的Rollup架构类似，均只将对链上功能进行了二元划分，即普遍意义上的执行和共识的划分。而在此后发布的版本中，Celestia在其上创造了专门用于结算的链——Cevmos，其他执行链可以作为单个信任最小化集群的一部分锚定至其上，从而实现功能的进一步细分。具体架构上，由Celestia实现数据可用和共识，Evmos实现结算，最后同样通过Rollup的方式完成执行。而Celestia最新设计则与Validium的架构类似，将数据可用层放置于Celestia上，而将共识与结算放置于以太坊上。

Celestia的核心目的为解决在不参与共识、以及不用存储所有交易数据的情况下，如何保证各个节点依然能够对交易进行验证，从而证明这个交易可用。其通过自身设计的二维纠删码，以随机抽样的方式对数据进行验证。具体运行时，在全节点发现某一轻节点收到有问题的数据时，会构建一份欺诈证明交给轻节点进行验证。轻节点则通过安全随机抽样的方式获得所需的数据，证明数据是否可信。因此数据的可信由整个网络提供，从而保证了数据可用层的安全问题，为模块化的实现奠定了基础。

![Reed-Solomon 纠删码      资料来源：PANews](https://storage.googleapis.com/papyrus_images/6563c18fa1d58cac049d8fb6e7b4a3990bfc6d6a5cef081a4c3470a3c8d54d65.png)

Reed-Solomon 纠删码      资料来源：PANews

3\. 四种模式的比较分析
-------------

从设计架构上来看，Oasis与Celestia在平台设计时就考虑到了模块化分层设计，因此在设计之初就完成了执行、共识等模块的分层。而Arweave与Mina更类似使用分层解决方案来主动的将执行、共识与存储等功能进行分离，如Arweave的SCP与Mina的Snapp均是在公链运行一段时间后才诞生的。总结而言，前者为设计上的分层，后者为解决方案上的分层。抛开这两类不同路径的整体表现情况，对于现有公链而言，后者解决方案的路径似乎能够更快速的完成共识、执行与存储等功能的分层，并且能根据自身特点做出相应的调整。但如若分层与模块化将成为不久将来的发展方向，前者的设计架构上的转变似乎才能更好的面对未来发展的需求。

从设计理念上来看，Oasis、Arweave与Celestia均已经较为明显的表现出模块化的发展思路和理念，MINA则更类似于早期的发展与探索。Oasis与Celestia由于其本身设计之初就考虑到了模块化分层的理念，因此自始至终都在追求各个功能的解耦合。而Arweave则是在生态发展下后发产生的SCP，而随着生态的日益成熟，各类Dapp实践的增多，模块化发展的路径也日渐清晰。相比于前三者，MINA的发展仿佛有所落后，但其发展过程中所表露出的模块化理念，依然值得我们的重视。

---

*Originally published on [ZZzzzioi_](https://paragraph.com/@zzzzzioi/lJv2pNyyAgqg8bWGSC4J)*
