文章阅读页通栏

区块链组件向链下模型的演化

来源: 区块网 作者:
区块链的主要组成部分是: 共识、网络、记录、计算。 区块链是记录交易输出的共享状态数据库。这些计算的输入是以前计算结果的新输入和当前状态。......
区块链的主要组成部分是: 共识、网络、记录、计算。

区块链是记录交易输出的共享状态数据库。这些计算的输入是以前计算结果的新输入和当前状态。状态转换更新通过对等网络广播,每个节点验证传入的状态更新以达成共识。

通过让网络中的每个参与节点执行计算并就结果输出达成一致,区块链带来了以不可信的方式执行程序的能力,然后将输出记录到一个不可变的分类账中。

这种方法的缺点是,由于吞吐量限制,达到web级别的性能非常不可行。当前计算必须在分配的块时间内计算。例如,EOS的块时间为500ms,因此每个交易的交易时间限制为150ms,以适应分配的块时间。

像以太坊这样的公共账本要求网络中的所有节点保存链中的所有数据,以便能够验证交易。这样做的缺点是很难实现隐私,因为所有对方法和交易输出的输入都是公开可见的。

我们将探讨如何将诸如记录保存(存储)和智能合约(计算)之类的组件移出链,从而在不牺牲安全性和可伸缩性需求的情况下实现更健壮的计算和存储需求。

Off-Chain(链下)

移动某些组件可以缓解上面提到的一些问题。例如,使用链下存储,数据不再需要由所有节点承载,而只需要由执行计算的节点承载。另一个例子是,计算引擎不需要固定在第一层链上;计算可以作为一个链下任务执行,类似于一个没有服务器的平台,例如Function as a Service (FaaS),使用一个与区块链节点解耦的不同执行环境。因为执行不再与链软件耦合,计算可以在不同的节点或服务器上执行。这意味着第1层链现在用作一种方法来注册输入和输出,并作为一种方法来启动计算提供者的计算。

链下数据存储减少了每个节点预期存储的存储需求。在第1层链之外存储数据意味着对处理特定应用程序交易感兴趣的参与者是需要存储数据的人,而不是所有其他节点,如果他们愿意,他们可以这样做。

链下数据存储的一个危险是数据可用性不再得到保证,因为数据不是区块链的一部分,而只是数据的指纹存储在链上。如果数据丢失,则无法执行计算,因此这会影响此应用程序的活性,这是不好的。然而,另一个权衡是,存储在链下的数据可以保持私有和机密性,因为不是所有节点都需要知道数据是什么,而只需要知道那些计算任务的节点。

链下计算可以在很大程度上减少冗余计算,以达到一致。第1层链只能包含执行验证所需的最少量和最必要的信息,而计算是在链下上计算的,但是记录状态转换函数的确定性输出。链下计算可以与链下存储耦合,作为读取输入、提取应用程序和记录输出的手段。

如果你想一下像以太坊这样的区块链是怎么做的,它们聚合交易,按照每个帐户接收到的顺序nonce对交易进行排序,然后根据提供最高费用的交易对它们进行排序。在工作量证明系统中,网络中的每个节点执行相同的例程,导致每个节点具有相同的限制,更不用说浪费计算工作了。

在一个典型的第一层链,如以太坊,状态转换系统是这样的:

链上存储和计算
节点接收交易,其中包括要调用的智能合约和方法等数据,以及该方法的输入。节点读取当前状态并执行创建新状态的交易,并将该状态保存在同一个节点中。这意味着所有计算交易的冗余节点也将所有相同的信息冗余地保存在它们自己的节点中。我们将在下一节中看到,可以将存储卸载到独立的链下存储节点中。

链下存储

当我们开始将存储抽象到一个外链下提供者时,我们立即减少了冗余存储需求。在此场景中,当链节点接收到交易时,必须从存储节点获取初始状态。计算完成后,链节点将结果状态发送到存储节点进行持久化。

使用链上计算的链下存储
还有一个额外的步骤,即计算节点必须验证从存储节点接收到的数据。这个链节点只存储数据的指纹以检查完整性。例如,如果使用IPFS进行链下存储,则链节点存储数据的内容哈希值。当从存储节点接收到数据时,区块链节点重新计算内容哈希值,以验证其所期望的数据。同样,在计算输出状态之后,数据被链下存储在IPFS上,其内容散哈希值存储在链上以供参考。

需要注意的一件重要事情是,当将存储置于链下状态时,我们就失去了ACID(原始性、一致性、隔离性、耐久性)模型中的耐久性原则。让数据在链上活动可以保证数据是可用的,但是将数据移到链下只能保证我们能够验证数据的完整性(一致性)。

一些使用链下存储的项目是谜;其中只有一个引用存储在链上;使用以代理为中心的架构,其中每个dapp维护自己的分布式哈希值表;如果对等节点只维护一个区域文件,就会指定从哪里下载数据;所有的应用程序都作为旁路运行,存储自己的数据,没有应用程序数据链。Dispatch Labs ; 指纹存储在链上,具有通过数据农上传和下载数据的能力,MultiChain ; 其中信息可以发布到离线流,节点可以订阅这些流,Polkadot: 其中每个并行链(parachain)负责存储它们自己的数据,而中继链主要保存会计信息和块头。

以太坊正在考虑一种状态存储的租用方法,在这种方法中,节点可以付费存储数据,否则它们只存储指纹。

链下计算

相似存储如何可以链下卸载,计算可以以类似的方式卸载。状态转移功能可以由一个单独的节点计算到链节点的状态转移函数。这里我们展示了一个链节点如何将计算卸载,而计算节点从链节点读取数据:

链上存储和离线计算
在这个场景中,所有数据都存储在链上,链节点将计算请求连同所需的数据一起发送给链下计算节点。链下节点运行状态转换函数来计算输出状态。

由于计算是在链下卸载的,链节点现在需要对结果状态进行验证,因为计算节点可能报告错误的输出状态。验证机制可以简单地验证结果输出是由计算节点签名的,而计算节点是链节点期望结果来自的节点。
在验证完成后,将保存新状态。

Serverless(无服务器)

由于计算与区块链节点解耦,这意味着计算可以作为无服务器函数运行,如onLamba、OpenFaaS或Kubeless。链下计算允许将区块链分类帐维护状态与无服务器功能相结合。您可以想象一个由链节点、任务协调器和工作人员组成的生态系统:

链下工人集群
例如,可以使用区块链作为基于事件的系统来注册发起链下工作的交易。您可以有一个Kubernetescluster,其中主节点监视on-chain请求,并以任务的形式将工作负载分配给它各自的工作节点,任务可以是无服务器函数或轻量级Docker映像。Kubernetes运行时环境crio对执行进行沙箱化,并且始终可以选择启用更高的安全性,例如使用unikerkernel,它将内核的基本部分与应用程序耦合,以便将应用程序与主机隔离开来。另一种选择是使用微型vm,比如KataContainers,或者是AWS Lambda和AWS Fargate正在使用的fireworks。

为了确保计算的正确性,编排节点可能会冗余地将相同的任务分发给多个工作人员,并得到大多数工作人员的结果。在一个开放的市场中,任何拥有空闲计算能力的人都可以加入一个工人集群,并在完成任务后得到主控制器的奖励。

除了基于任务的链下计算之外,另一种形式就是能够在分配的时间内租用服务器空间。由于很难确定资源提供者是否实际提供了他们所说的资源,因此这种方法往往依赖于信任网络来扩展声誉和信誉网络。

链下计算空间中的一些项目是Truebit、Golem、SONM、iExec、Akash、Hypernet、ArcBlock和Transmute。

链下存储和计算(混合模型)

将链下存储和链下计算结合起来,可以实现两个方面的最佳效果。下面是两个模型如何相互交织的概述:

链下存储和链下计算。使用这种混合模型,可以获得更好的可伸缩性:

链下存储和链下计算
等离子体就是一个例子,它结合了链下存储和计算。Plasma是区块链的层次结构,其中每个子区块链计算状态转换,但被绑定到其父链;子链周期性地写回父链。每个子链负责持久化它们自己的数据。这允许子链以自己的速度运行。父链可以检查状态转换,这意味着子链的状态转换是正确的。

验证链下计算

计算链下计算的节点称为验证器。验证者提交结果并证明计算的正确性。

验证证明的节点称为验证者。验证人检查是有效的证明,如果成功,验证人检查的结果可以持续。

为了减少网络上的负载,验证应该是非交互式的,这意味着验证者应该能够在一条消息中检查验证,从而避免与验证者之间的来回。验证也应该是廉价的,这意味着它的大小应该是小的,它可以相对快速地计算和链上。

zk - snark密码学允许这两种需求。该消息可以在一个步骤和链上进行验证。zk- snark的另一个好处是验证器可以在不知道输入是什么的情况下正确地证明计算。验证者对输入的知识为零。在高水平的zk- snark中,需要将计算过程指定为算术电路。Iden3开发了一些抽象复杂性的库,比如circom、电路编译器和scorksjs 节点。用于生成给定已编译电路的证明的库。

zk- snark的一个缺点是,它需要由创建应用程序的可信方执行一次性设置。恶意的一方可以生成虚假的证据。为了减少对该过程的信任,多方计算是将设置步骤过程分配给互不了解的多个参与者的一种方法。可信设置被称为“有毒的废物”,因为必须创建一个主密钥,然后销毁它,但是总存在未正确消除该密钥的风险。

Bulletproofs 是另一个零知识方案,它不需要像zksnark那样的信任设置。最初,防弹设计用于机密交易的有效距离证明。一般来说,zk- snark更适用于复杂的语句,而bulletproof更适用于简单的语句。防弹证明的一个缺点是,验证比snark证明更耗时。

Zk-STARKs类似于bulletproof不需要设置阶段,因为它不依赖于公钥加密,但是在实践中使用的证明大小仍然相对较大。
Zcash使用zk- snark,但最终将迁移到zk-STARKs。StarkWare和Zcash公司的成员是zk-STARKS的积极研究人员,致力于在区块链中启用隐私功能。

结论

我们研究了将存储和计算转移到离线模型的方法,以及如何使用离线方法保护数据和输入的隐私。链下存储不再局限于链上的需求,计算可能更加复杂,并且与正在使用的软件栈无关。

关键词: 链下  区块链组件  链下存储  
0/300