星期四 , 3月 28 2024
首页 / 区块之心 / 将大象压缩到忽略不计,FlyClient如何让区块链变得超轻

将大象压缩到忽略不计,FlyClient如何让区块链变得超轻

如果说比特币区块链臃肿得像头重约300公斤的猪,那么以太坊区块链就好比是一头重约3吨的大象。

而且它们还在不断地长胖……

尽管中本聪提出的SPV(简化支付验证)方案,通过只验证区块头数据而有效降低客户端下载和验证的数据,但在以太坊的例子下,其SPV客户端需下载并存储的数据仍然高达3.6 GB(相当于从大象瘦身成了重约6公斤的婴儿),然而,对于移动手机等存储资源较低的设备而言,这样的SPV轻节点实现也是不现实的。

而通常我们所使用的加密货币钱包,则是依赖一个强大的可信任方,其代表客户端验证支付。然而,这种可信实体的存在,极大地降低了加密货币网络的去中心化性。

因此,我们有必要探索一种相比SPV更可行的超轻节点解决方案。

elephant

(图片来自pexels.com)

来自斯坦福大学的Benedikt B¨unz,美国东北大学的Lucianna Kiffer,Kyber Network的Loi Luu以及来自Visa研究部门的Mahdi Zamani,共同提出了一种新的轻量级客户端交易验证协议FlyClient。该协议只要求下载对数数量的区块头来同步和验证交易,同时在执行之间只存储一个区块头。

在以太坊的例子下,其把验证证明数据压缩到500 KB左右,这相当于把原来的一头大象压缩到重约0.83克的微小零件,因此它完全可装入到手机等移动设备。

截至目前,新生代隐私币Grin以及Beam,已在使用FlyClient这种协议。

p6

 

摘要

 

为了确保交易的有效性,比特币和以太坊等加密货币需要求节点验证工作量证明(PoW)区块链是否有效。不幸的是,这通常需要下载和验证所有的交易区块,这意味着当前需要花费用户几天的时间以及大量的带宽和存储资源来验证区块链。因此,资源有限的客户(如手机)无法独立验证交易,其需要信任全节点。作为解决方案,比特币和以太坊提供了已知的轻客户端,我们将其称为简化支付验证(SPV)客户端,其通过只下载区块头数据来验证区块链,因此比全部验证会节省很多的资源。不幸的是,SPV客户端的存储和带宽仍然会随着区块链的长度增长而线性增加。例如,在以太坊中,SPV客户端需要下载并存储超过3.6 GB的数据。

最近,Kiayias等人提出了一种名为工作量证明非交互式证明(NIPoPoW)的解决方案,其要求轻客户端只下载和存储对数数量的区块头。然而,NIPoPoW方案仍然存在着缺点:其简洁的前提是没有攻击者影响诚实链。此外,这种方案只能应用于具有固定区块难度的PoW区块链。而大多数加密货币(包括比特币和以太坊),需要经常根据网络算力调整区块难度,这意味着这种方案无法应用于主流加密货币。

而FlyClient方案,同样只要求下载对数数量的区块头来同步和验证交易,同时在执行之间只存储一个区块头。

目前,研究人员已正式证明了FlyClient的有效性,对于以太坊,这种协议可把验证证明数据压缩到500 KB左右。这是通过使用一种名为MMR(Merkle Mountain Range)承诺的简单设计,以及一个概率区块采样协议实现的。FlyClient克服了NIPoPoW方案的局限性,并在所有测量参数上,生成了更短的证明。研究人员还讨论了如果通过一次软分叉天鹅绒分叉(Velvet fork)方式,将这种协议应用到比特币和以太坊。

 

SPV技术的具体解释和存在的问题

 

如今,很多金融服务提供商可以在低容量客户端上提供数字支付服务,例如手机、可穿戴设备(如智能手表和健身跟踪器)和物联网设备,这增加了便利性和安全性。这些客户端的特点是它们对存储、带宽和计算的的访问有限,但仍需要即时确认延迟。

传统的金融服务为移动客户提供效率和强大的安全保障,它们使用中心化的支付系统,由于设计完全不同,一般不适用于去中心化的加密货币网络(如比特币和以太坊)。另一方面,对于目前对大多数加密货币网络上的交易进行验证的解决方案,并不适用于低容量设备。这通常是因为去中心化协议需要大量的存储、计算和带宽来验证账本交易。这些账本依赖于网络中很多不受信节点之间的状态机复制。

低容量客户端的一个选择,是依赖一个强大的可信任方,其可代表客户端验证支付。然而,这种可信实体的存在,极大地降低了加密货币网络的去中心化性。

工作量证明(POW)区块链:大多数加密货币,包括比特币和以太坊,都维护了一个只能附加数据的区块链账本,它存储了一系列使用加密哈希链接在一起的交易区块。这些区块是通过称为挖矿的工作附加到区块链中的。

当参与节点(即矿工)竞争成为下一个区块记账者时,通常要解决一个计算密集型的难题,这称为工作量证明(POW)。通过区块提出者发起的gossip协议,每个矿工都会收到包含一个PoW解的区块,如果这个解是有效的,矿工们就会把这个区块附加到其本地的区块链副本。因为这一进程不由任何中心方(也不由传统的共识协议)协调,区块链可能会发叉成多个链(例如,由于不同矿工为同一个难题找到了多个解,甚至由于恶意行为)。而其中会达成一条最长的共识链,也被称为诚实(有效)链。

为了在不参与挖矿过程的前提下,验证区块链账本是否有效,客户端可以选择从拥有完整链账本的矿工或全节点下载每个区块。

目前,下载和验证比特币和以太坊所有数据块,分别要求节点下载超过190 GB1.8 TB的数据,这需要花费数天的时间才能完全本地区块链同步。这就造成了存储有限的用户无法实现完全验证数据。

轻客户端:中本聪设计和描述了一种更快的同步机制,称为简化支付验证 (SPV),而允许对区块链上的交易进行轻量级验证的客户端被称为SPV客户端(也被称为轻客户端),它们只下载和验证区块链账本的每个区块头数据。在比特币的例子当中,1个满的区块数据为1 MB,而区块头数据则只有80字节,这就有效节省了开销。值得注意的是,轻客户端并不验证所有的交易,理论上可能会收到一个无效区块链账本。它基本上依赖于假设大多数工作量证明只包含有效的交易,并遵循系统规则。

除了对交易的轻量级验证有用外,轻量级客户端还可以为需要验证区块链上记录的过去事件日志的广泛用户实现各种应用。

例如,SPV证明可用于跨链交易的有效验证。

虽然只依赖区块头可显著降低SPV客户端的验证开销,但是在资源有限的客户端上,仍然会产生很大的开销,特别是考虑到这种开销会随区块数而线性增加。这已经成为以太坊的主要关注点,因为相比比特币10分钟的区块间隔时间,其区块时间只有15秒,且其区块头数据要更大(528字节)。考虑到以太坊区块链的数据块已超过700万个,希望验证以太坊交易的SPV客户端必须下载和存储超过3.6 GB的数据。客户端必须在每次想要验证交易时下载新的数据副本,或者在其存储中保留一个本地副本,并且只下载自上次同步以来所做的更改。在这两种情况下,这都会给客户端带来很大的负担。

而对于侧链而言,问题会进一步扩大。

 

FlyClient协议的简单描述

 

由研究者们提出的这种新型FlyClient区块链验证协议,可用于比特币、以太坊等加密货币。不同于常规的SPV客户端(需使用线性数量的带宽和存储),FlyClient客户端只需要下载对数数量的区块头,以此来验证区块链。而在验证之后,客户端只需要存储一个区块,以有效验证链上是否包含任何交易。FlyClient协议克服了NIPoPoW的局限性。即使面对对手的情况下,它也能提供简洁的证明。

协议通过c ∈ [0, 1) 和λ ∈ N实现参数化,这样敌方最多控制c分数的诚实算力,其成功概率最多为2^(−λ).

在以太坊的背景下,FlyClient证明要小于1KB,相比之下,NIPoPoW方案则需要1.5MB,此外,FlyClient协议可适用于难度发生改变的区块链。

而FlyClient协议的实现,是基于使用了以下这些技术:

  1. 具有可变难度的概率抽样:其引入了一个协议,从具有可变区块难度的远程区块链中随机抽样Oc,λ(log n)个区块头,此外,研究者证明了,只要对手的计算能力不超过诚实节点(原论文是c < 1的百分比),该协议就是安全的;
  2. 高效的链承诺:研究者完善并使用了一种称为MMR(Merkle mountain range)的概念,这是一种高效可更新的承诺机制,这使得证明人能够以较小(固定大小)的承诺来保证整个区块链,同时提供具有位置约束保证的对数区块包含证明;
  3. 非交互式和可转移证明:研究者引入了一个非交互的FlyClient变体,使用Fiat-Shamir 启发式技术允许轻客户端和全节点把证明转发给其他轻客户端,而无需重新计算证明。

 

FlyClient协议的具体表现

 

为了实际测量FlyClient协议的表现,研究者对其在以太坊区块链上进行了实际检测,首先,他们将flyclient与NIPoPoW进行了比较,结果显示NIPoPoW无法处理可变难度的区块链,同时,NIPoPoW和FlyClient的证明大小都是与链长度对数相关的,而其他参数上,FlyClient都要优于NIPoPoW。而相比SPV客户端而言,FlyClient的性能表现则更为突出。

注:所有的计算,都假定以太坊区块头大小为508字节,哈希输出为32字节。另外,MMR节点还包含8个字节来存储难度。

p4

以太坊区块链中SPV客户端和FlyClient客户端的证明大小对比(以KB为单位),我们可以看到,区块高度越高,FlyClient的优势越明显。

 

部署FlyClient协议(不仅适用于所有PoW,也同样适用于很多PoX协议)

 

对于比特币、以太坊等类似区块链协议,运用FlyClient的唯一修改,就是在每个区块中包含MMR根。而我们有三种方法可以把这种MMR根添加到区块当中。第一种方法是硬分叉,其中MMR根被添加到所有区块(包括旧的和新的),在这种情况下,MMR根甚至可以替换到以前区块的当前哈希指针。而例如基于Mimblewimble的Grin和Beam这两种隐私币,已经在使用这种方案,这些区块链可直接部署FlyClient协议。

或者,第二种通过软分叉的方案,可让新区块包含MMR根,而旧区块则不包含MMR根。在软分叉方案中,未升级的矿工不会拒绝新区块,而升级的矿工可能会拒绝掉属于未升级矿工的旧区块。当大多数节点强制执行新的协议规则时,软分叉就会被“激活”。从软分叉发生开始,新的区块将以向后兼容的方式存储MMR根。例如,MMR根可以存储在一笔特殊交易当中。在FlyClient协议中,矿工将提供区块头,这笔特殊交易以及关于这笔交易属于该区块的证明。证明大小将按log(|tx|)成比例增长,其中tx是交易数。

第三条部署路径,被称为天鹅绒分叉(Velvet fork),这是由其他研究者提出的一种分叉方案。在这种方案下,过时矿工的区块不会被拒绝。因此,天鹅绒分叉是对区块链协议的向后兼容更新,并依赖于客户端重新解释区块链数据。对于FlyClient而言,天鹅绒分叉(Velvet fork)将导致常量分数α的区块包含一个MMR根,其导致的证明效率会较低,但对于FlyClient而言,它是一种无争议的部署机制。

为了简单起见,原论文只是在比特币和以太坊的背景下描述了FlyClient这种方案,但其并不仅限于PoW区块链,其还适用于权益证明(PoS)、空间证明(proofof-space)或经过时间证明区块链。这类协议必须允许任何节点单独验证每个区块的有效性,以确保区块创建者已为此区块使用(或烧掉)特定数量的资源。

PoS协议通常从不同的来源中提取随机性,例如以前区块或者多方抛币。其中一些协议根据(可能会导致分叉的)最长链规则增长链。但是, 一些PoS协议(如Algorand和OmniLedger)使用混合设计来避免分叉。虽然FlyClient可以在第一类PoS协议中应用,其只需进行最小的更改即可实现轻量级交易验证,但对于混合经典拜占庭容错的混合型PoS协议,FlyClient则是无能为力的。

 

关于FlyClient协议更详细的内容,读者可阅读原论文内容:https://eprint.iacr.org/2019/226.pdf

或者参考Grin的讨论:https://github.com/mimblewimble/grin/issues/1555

以及Beam的代码实现https://github.com/BeamMW/beam/blob/42ef470c322a230cfa45f7f268bf37987da92057/core/fly_client.cpp

关于 冯先生失眠中

冯先生失眠中
卷而怀之

检查

区块链,只是金融发展的延续吗?

区块链诞生于 2008 年的那 …

发表评论

邮箱地址不会被公开。 必填项已用*标注