Filecoin 将区块链引入到分布式存储领域,Filecash 通过新的技术探索权衡安全与效率。

撰文:Luff

正如比特币扩容之争分叉出比特现金,在 Filecoin 诞生三年后,基于不同理念的社区人士发起了首个分叉项目 Filecash。Filecoin 是将区块链引入分布式存储领域的第一个吃螃蟹的人,它希望通过一系列机制设计成为存储人类重要数据的激励相容的网络系统。

但复杂的系统设计使得 Filecoin 的进展举步维艰,执着于「存储有价值数据」的初衷让 Filecoin 饱受争议,主要体现为两点:

  • 技术方案:高证明成本导致网络参与门槛过高
  • 经济模型:抵押、惩罚等机制对矿工过于严苛

作为 Filecoin 的分叉项目,Filecash 试图通过方案改进来平衡社区的利益纷争。本文主要从技术角度阐述 Filecoin 的运行方式及 Filecash 的新探索。

Filecoin 市场机制

为更好理解 Filecoin 的技术原理,我们先简单介绍 Filecoin 的市场机制。Filecoin 构建了两个市场:数据存储市场和数据检索市场,两个市场分别存在矿工和用户。

分布式存储技术改进:从 Filecoin 到 FilecashFilecoin 存储市场与检索市场运行流程,来源 Filecoin 白皮书

存储市场

存储市场是由存储矿工与有数据存储需求的用户参与的市场。存储市场中客户提出存储数据的需求,而存储矿工,提供他们的存储空间和存储服务。一个完整的存储周期如下:

第一,存储矿工提供自身价格及存储要求至订单簿。订单薄是公开的,任何人都可以查看,存储市场的服务价格是由市场所决定。
第二,当客户的需求价格与存储矿工的订单相匹配时候, 交易自动撮合。
第三,验证者验证矿工是否存储有效数据,采用零知识的非交互式证明进行验证,有效保护隐私。

检索市场

检索市场为链下市场,用户可以通过检索市场访问自己所需要的数据,由检索矿工来提供检索服务。检索矿工不参与区块生成环节,直接从客户端获取相应服务费用。

一个完整的检索周期如下:

第一,用户与检索矿工广播出价单和报价单,如发现订单匹配,则在链下订单簿发起交易。
第二,达成交易后,双方建立链下支付及数据传输信道完成交易。
第三,交易完成后,订单和交易提交至区块链记录,并验证交易结果。

Filecoin 如何实现这样一个基于区块链的数据市场?共识机制是关键,它决定了区块链的基本运行逻辑并维护网络安全。

Filecoin 共识机制:预期共识为主,复制证明+时空证明为辅

Filecoin 采用了预期共识为主,复制证明+时空证明为辅的混合共识技术。其中预期共识决定在一个周期内由谁产生 TipSet (Filecoin 网络中的区块集合),而复制证明和时空证明则维护网络稳定安全运行。

预期共识(EC)

预期共识脱胎于权益证明共识机制(PoS),只不过将权益共识里面的代币权益换成了存储。每一轮选举一名或者多名领导矿工来创建新的区块,矿工赢得选举的可能性跟矿工当前的存储能力成正比。

每一轮,选举出来的领导矿工数期望值为 e (某个常数,比如为 5),被选举出来的矿工创建新的区块,并对网络进行广播。 Filecoin 区块链,每个区块高度对应到的是一个区块集合 (Tipset) ,每个区块集合包含数量不定的区块,这种链式结构接近有向无环图 (DAG) 。

Filecoin 希望构建一个开放的、人人可参与的、无需信任的经济系统。首先要保证系统安全稳定运行,防止网络攻击。从存储角度理解,网络面临两个问题:

  • 矿工确实按照用户需求存储了数据的相应备份,并且数据能够被访问;
  • 在合同有效期内,矿工不得删除用户数据。

如何约束矿工实现以上两点?Filecoin 存储证明就是解决之道。Filecoin 存储证明由复制证明(PoRep)与时空证明(PoSt)两部分组成。其中复制证明用于解决第一个问题,而时空证明则解决第二个问题。

复制证明

简单来讲,复制证明就是矿工证明自己真的存储了用户的数据。

用其发明者 Ben Fisch 的话来解释:

「复制证明(PoRep)是一个交互式证明系统。在这个系统中,存储的提供者需要提供可公开验证的证明,来表明其为一个数据文件副本分配了独有的空间资源,而且所存储的数据是可检索的。

进一步说,PoRep 使证明者能够证明他们正在使用不低于需要的最小空间来存储信息,并实际使用该空间来存储有用的信息。同时,PoRep 可以有效地提取存储的任何数据。」
分布式存储技术改进:从 Filecoin 到 Filecash
在复制证明过程中,存储矿工将用户数据存储到扇区(一个扇区大小为 32G 或 64G)。扇区被存满后,矿工对扇区进行封装,封装是一个计算量很大的过程,它会生成数据的唯一标识码。一旦数据被封装,存储矿工生成证明,然后对证明进行零知识证明压缩,最后将压缩结果提交到链上,成为存储承诺完成的证明。

复制证明通过四个阶段来完成:

  1. 密封预交付第 1 阶段(P1):在这个阶段,进行 PoRep SDR 编码。这个阶段受 CPU 限制,是单线程的。这个阶段预计需要几个小时的时间,精确的时间取决于被密封的扇区的大小,当然,也取决于进行密封的机器的规格。
  2. 密封预交付第 2 阶段(P2):在这个阶段,Merkle 树的生成是使用 Poseidon 哈希算法执行的。这个过程主要是 GPU 限制的,但应该预期会慢得多。当使用 GPU 时,此阶段预计需要 45 分钟到 1 小时。
  3. 密封提交阶段 1(C1):这是一个中间阶段,执行生成证据所需的准备工作。它受 CPU 限制,通常在几十秒内完成。
  4. 密封提交阶段 2(C2):最后,这个密封阶段涉及到创建一个 SNARK,在它被广播到区块链之前,它被用来压缩必要的证据。这是一个 GPU 密集型过程,预计需要 20-30 分钟才能完成。

时空证明

复制证明完成后,存储矿工必须证明其持续存储了用户数据,这将通过时空证明完成。时空证明是向存储矿工发出加密挑战的过程,只有直接封装扇区的矿工才能正确回答。存储矿工必须在严格的时间限制内应对这一挑战。Filecoin 中时空证明有两大挑战:WindowPoSt 和 WinningPoSt,此处不作展开。

分布式存储技术改进:从 Filecoin 到 Filecash时空证明底层机制,来源 Filecoin 白皮书

Filecoin 安全机制

Filecoin 白皮书中提到复制证明可有效防止女巫攻击、生成攻击和外包攻击。但需要考虑一个问题:复制证明作为一种证明算法,本身可以否被伪造?答案是肯定的,事实上任何公开的证明都可以被伪造(攻击),机制设计的目的就是提高攻击者的成本,让其攻击成本高于获利就能避免攻击。

不难想象这样一种攻击行为:

矿工在存储用户数据的时候发起复制证明,然后在复制证明完成后删除数据;而在需要时空证明的时候再做一次复制证明。这样,存储矿工别没有持续保存用户数据的备份,但却依旧能够完成整个存储证明而获得奖励。

其实在 Filecoin 存储证明中,复制证明与时空证明是相互依赖的。Filecoin 通过两个证明过程的时间要求来避免攻击。具体来说,时空证明必须在很短的时间内完成,否则无效;而复制证明如果不能在很短的时间内完成的话,就不能发起攻击。当这两个时间的差距越大,安全性就越高。Filecoin 网络对证明时间的要求:

  • 时空证明要在小于一个区块时间内完成(小于 30s),时空证明的时间是网络设定的;
  • 复制证明被设计成通过数小时才能完成,复制证明的时间消耗是由于算法的复杂性造成的。

单纯从安全角度考虑,复制证明所消耗的时间越长,对网络而言越安全,可以从以下两个角度考虑延长复制证明所消耗的时间:

  • 算法长度:步骤越多的算法需要的时间越长
  • 算法可并行性:并行度可以通过增加资源减少运算时间

具体来说,当前 Filecoin 复制证明所采用的 SDR 算法在这两方面都保证了足够的强度。

算法长度通过多步骤计算实现:比如在复制证明中要计算 11 层 labels,这个层数可以调整,层数越多,时间越长;
每层计算之间强依赖关系来去并行化:在计算 labels 时,每一步的计算都依赖上一步的结果,所以不能通过增加资源的方式来缩短计算时间;

但是,安全的代价往往是高成本。Filecoin 在保证网络安全性的同时带来了几个问题:

  • 高昂的计算成本降低了网络的经济效率,类似 PoW 一样通过消耗昂贵的计算资源仅仅达成存储证明,这一点与 Filecoin 白皮书提倡的「有用共识」相悖;
  • 复杂的证明过程提升了对矿机硬件配置的要求,特别是 CPU、GPU 与 RAM 上的成本。

分布式存储技术改进:从 Filecoin 到 Filecash主流 Filecoin 矿商 CPU 与 GPU 配置对比

Filecash 的技术权衡

尽管 Protocol Labs 一直在优化复制证明算法,例如计划升级到 NSE 算法以改善成本和检索延迟,但短期内仍然无法解决效率问题。在安全性与成本的权衡中,Filecash 选择了适当降低安全性,换取更低的参与门槛。

Filecoin 计算资源消耗主要集中在复制证明第一阶段,Filecash 方案优化也主要在这个阶段,体现为以下几点:

  1. 升级 P1 核心算法,将 SHA256 算法升级为 SHA512。由于 AMD 处理器支持 SHA256 扩展,这样会使得 AMD 处理器在 P1 阶段具备极大优势,可能使用英特尔处理器计算 P1 过程需要 30 个小时,而是用 AMD 处理器去只需要 4 个小时。这将导致大量闲置的英特尔机器因为不具备经济效益,无法参与 Filecoin 网络。而升级到 SHA512 算法 Filecash 可同时接纳不同处理器机器。
  2. 将 P1 阶段计算层数由 11 层减为 8 层。参考一些容量证明项目,8 层的计算层数已经能够提供足够的安全性,但是却可以大大提高经济效益。
  3. 修改扇区大小为 16G,降低内存占用量。目前 Filecoin 的扇区大小是 32G 和 64G,这就要求矿工的电脑也至少需要 64G 的内存。一般的普通用户或者家用电脑无法满足这个配置需求,他们将被排除在系统之外。通过降低扇区大小,可以让更多相对低配置的设备(比如家用电脑)参与到早期网络。

Filecash 技术方案核心逻辑是在于降低生态的参与门槛,让大量的闲置的设备,还有家庭的客户能够参与到网络,给网络提供共识。强壮的共识能为生态保驾护航,强壮的共识底层能为生态吸引更多开发者和使用者,活跃的生态才能为矿工提供稳定的挖矿收益,稳定的挖矿收益促进更多矿工参与到挖矿行为中,生态形成良性循环。

Filecoin 的预期共识机制相当于在 PoS 基础上引入复杂证明过程,在太空竞赛第一阶段中表现出的网络性能令人担忧,以至于交易手续费激增,脱离了实际应用场景。针对 TPS 不足,内容无法有效审查等问题,Filecash 调整了共识机制采用了:DPoS + PoRep + PoSt 混合共识。网络围绕矿工开展一系列经济活动,矿工作为底层支撑提供共识和 Token;DPOS 节点作为核心承载,提供可靠的高 TPS 和网络可用性。同时,Filecash 针对虚拟机、跨链、预言机等多个组件进行重新设计和优化,使 Filecash 网络能够无缝的与 ETH\DOT\BTC 等成熟区块链进行交互,解决区块链间应用生态互通困难的问题。

分布式存储领域新格局

Filecoin 早已声名在外,而 Filecash 作为后起之秀能否撼动 Filecoin 还未可知。但是在 Filecoin 团队与社区矿工的纷争之下,关于分叉的声音越来越盛。可以预料的是,随着 Filecoin 主网上线,分布式存储领域会冒出许多新面孔,它们会探索和 Filecoin 不一样的道路。

与其说,Filecash 是在向 Filecoin 发起挑战,不如说 Filecash 是在为分布式存储领域探索新的可能。

毕竟,历史没有记住第一个吃螃蟹的人,却记住了螃蟹的美味。