1. IPFSER首页
  2. Filecoin

Filecoin: 一个去中心式存储网络(白皮书)

Filecoin白皮书,了解Filecoin,从了解Filecoin白皮书开始

当今的互联网正处于一股浪潮之中:中心专有式服务正逐渐被去中心式服务所取代;中心式信任方逐渐被可验证式分布计算取代;脆弱的位置寻址逐渐被弹性的内容寻址取代;低效的整体服务逐渐被点对点算法市场取代。比特币、以太坊及其他区块链产品已经证明了去中心化交易分账的有效性。这些公共账本可以处理精密而智能的合同,以加密的方式交易价值数百亿美金的资产。这些系统是开放式互联网最早的实体,去中心化网络的参与者们在没有中心管理或中心式信任方的情况下,提供了很有用处的支付服务。IPFS通过对全球性点对点网络所使用的数十亿文件提供服务,证明了去中心化网络中内容寻址的效用。

Filecoin是一个去中心化的存储网络,它可以将云存储转变为算法市场。这个市场运作在一个拥有本地协议记号(也叫做“Filecoin”)的区块链上,在这个市场上,矿工们通过对客户提供存储服务赚取Filecoin。相对地,客户可以使用Filecoin来雇佣矿工存储或分发数据。同比特币相似,Filecoin矿工们会为了追求回报而竞相开采区块,但Filecoin的开采能力与存储积极性正相关,这可以为客户提供更有效用的服务(而不像比特币,为了维持区块链的一致性而限制其效用)。如此就激励了矿工们尽可能多地积累存储空间并租借给客户。本协议可以将积累起来的资源组织成任何人都可信赖的、有自愈功能的存储网络。这个网络通过复制和分发内容建立自身的鲁棒性,同时还可以自动侦测和修复复制错误。客户可以通过选择复制参数防范不同的风险类型。由于协议在客户方对内容进行了端对端加密,存储空间的提供者无法得到密匙,所以这种云存储网络可以提供足够的安全性。Filecoin作为IPFS顶端的激励层,可以为任意数据提供存储架构,在保存去中心化数据、构建和运行分发应用以及执行智能合约的情况下格外有用。

本文包含以下内容:

  • 介绍Filecoin网络,概述协议并详细介绍几个重要组件。
  • 概述去中心化网络(DSN)的方案和特点,然后通过Filecoin构建一个DSN。
  • 基于存储证明方案,介绍一个名为“复制证明”的新方案,该方案可以使任意的复制数据储存在独立的物理空间中。
  • 介绍一个基于复制证明和存储的新型可工作的一致性作为强度的度量。
  • 建立可验证市场概念并构建两个市场:存储市场和检索市场。他们分别管理写入和读取来自Filecoin的数据。
  • 讨论应用场景、与其他系统的连通性以及如何使用协议。

1.介绍

Filecoin是一种协议标记,它是一个运作在叫做“时空证明”的新型证明上的区块链,在这种协议上,矿工通过存储数据来创造区块。Filecoin通过一系列相互独立的存储提供商来提供存储和读取服务,而非通过单一的协调器。其中:(1)客户通过支付Filecoin来存储和读取数据。(2)存储矿工通过提供存储服务获得Filecoin。(3)检索矿工通过提供数据获得Filecoin

 (1)基本构成

Filecoin协议由以下四个新型组件构成:

  • 去中心化存储网络(Decentralized Storage Network, DSN):我们通过独立的存储提供商构成的抽象网络来提供存取服务(详见第2节)。而后我们会阐述Filecoin协议是一个有激励性的、可审计的、可被证实的DSN架构(详见第4节)。
  • 新型存储证明:我们会介绍两种新兴的存储证明(Proofs-of-Storage)(详见第3节):(1)复制证明(Proof-of-Replication)允许存储提供商来证明数据已经被复制到单一的物理存储器上。强制性单一物理拷贝可以检查和确保提供商没有将多余拷贝放到同一存储器。(2)时空证明(Proof-of-Spacetime)允许存储提供商来证明他们在指定的时间内存储了某些数据。
  • 可验证市场(Verifiable Markets)我们在两个基于Filecoin网络的去中心可验证市场上对存储请求和检索请求进行了建模(详见第5节)。可验证市场可以确保当服务被正常提供的时候执行支付操作。我们还会展示矿工和客户可以分别独立提交存储和检索命令的存储市场和检索市场。
  • 有效的工作量证明(Proof-of-Work):我们会展示如何在时空证明的基础上构建一个可以用在共识协议上的有效工作证明。矿工们不需要浪费计算能力来开采区块,他们只需要在网络中对数据进行存储即可。

(2)协议概览

  • Filecoin是一个建立在区块链上的,拥有本地记号的去中心化存储网络架构。客户通过消费这些记号存储和读取数据,矿工通过存储和提供数据赚取标记。
  • Filecoin DSN分别通过两个可验证市场进行读取请求:存储市场和检索市场。客户和矿工协商服务定价,而后将将订单上传到市场。
  • 这些市场由Filecoin网络来运作,Filecoin网络通过时空证明和复制证明来确保矿工可以执行承诺,正确地存储数据。
  • 最后,矿工们可以参与到新区块的建造中。矿工在新区块中的影响力与他们在网络中提供的存储量正相关。

 (3)白皮书组织

  • 第二节中我们展示我们在理论上对DSN网络的定义和要求。
  • 第三节中我们发展、定义并展示我们的复制证明和时空证明协议,并按照交易约定,使用Filecoin来加密地核实数据被不断地存储。
  • 第四节描述了精确的Filecoin DSN实例,包括数据结构、协议以及参与者交互。
  • 第五节中我们对可验证市场的概念进行了定义和描述,以及他们的概念实现—存储市场和检索市场。
  • 第六节中描述了时空协议的使用,并展示了如何评估矿工对网络的贡献,这对扩大区块链以及分发区块回报至关重要。
  • 第七节简要描述了Filecoin中的智能合约。第八节我们对未来工作做了一些讨论来作为总结。

Filecoin: 一个去中心式存储网络(白皮书)

图一 Filecoin协议草图

Filecoin: 一个去中心式存储网络(白皮书)

图2 Filecoin协议插图,展示了客户和矿工之间的互动,此图分别在“区块链”的上面和下面展示了储存市场和检索市场,随着时间推进从左侧的订单匹配阶段过渡到右侧的结算阶段。请注意,在为检索进行小额支付之前,用户必须为小额支付锁定资金

 

2、去中心化存储网络的定义

本节中我们要介绍去中心化存储网络(DSN)的概念。 DSNs汇聚来自众多独立提供者的存储能力,并通过自我协调的方式为客户提供数据读取服务。这种协调是去中心化的,不需要中心式信任方的参与:协议通过协调和查证独立个体的操作来实现系统的安全运行。根据系统要求,DSNs可以调用不同的协调策略,包括拜占庭协议(Byzantine Agreement),流言算法(Gossip Protocols)或者CRDTs等。稍后在第四节中,我们会提供Filecoin DSN的具体架构。

【定义 一】  DSN方案Ⅱ是由存储提供商和客户运行的协议元组:

(Put; Get; Manage)

  • Put(data)→ key: 客户执行Put协议,在特定的身份密匙(key)下存储数据(data)。
  • Get(key) → data: 客户执行Get协议,读取利用密匙存储的数据。
  • Manage(): 各参与者形成的网络通过Manage协议进行协作,以此来控制可用的存储空间,审查存储提供者供应的服务,以及修复一些可能存在的错误。Manage协议由存储提供商(通常也有客户参与)或者审查网络来运作1。DSN方案Π必须确保数据的完整性和可恢复性,以及在管理和存储中的容错性。这些概念会在后文中给出定义。

2.1 容错

2.1.1 管理错误

我们将存储故障定义为Manage协议参与者导致的拜占庭错误(Byzantine Faults)。基于Manage协议的DSN方案应当具有容错性。如果管理错误违反了容错性假设,可能会影响系统的活跃度和安全性。

举例来说,假设有一个DSN方案Π,它的Manage协议需要拜占庭协议(Byzantine Agreement,BA)来审核存储提供者。在这样一个协议中,网络从存储提供者那里收到存储证明,然后运行BA来验证这些有效性。假节点总数为n,BA最多可以容纳f个错误节点,那么我们的DSN可以容忍的故障节点数为f<n/2 个。如果违反这些假设,审计就要做出妥协。

2.1.2 存储错误

我们将存储错误定义为阻止用户获取数据的拜占庭错误。也就是说,这些错误可能是存储矿工丢失了一些数据片段,或是检索矿工在某些片段中停止了服务。一个成功的Put操作应当是(f,m)-tolerant的形式—如果输入的数据被储存在m个独立存储提供者处(总数为n),可以容纳的拜占庭提供者最多为f。f和m 两个参数取决于协议的实现。协议的设计者可以自行设定这两个参数,也可以把选择交给用户,将Put(data)扩展为Put(data, f, m)。在Get命令中,如果错误的存储提供者数量小于f,该命令就可被成功执行。

举例来说,设想一个简单的方案,其中Put协议被设计为每一个存储提供者都要存储所有的数据。在这个方案中,m=n,f=m-1。但是f=m-1永远成立吗?不,有些方案可能会采用可擦除代码设计,这样的话每个存储提供者都储存整体数据的一部分,这样的话如果m个存储供应者中有x个需要检索数据,就有f=m-x。

2.2 特性

这里我们价绍DSN方案应有的两种特性,以及Filecoin DSN所具备的其他特性。

2.2.1 数据完整性

该属性要求没有任何有限对手(bounded adversary) A可以使客户在Get操作结束的时候接受被更改或伪造的数据。

【定义二】  DSN方案Π在以下情况中提供数据完整性:对任意在密匙k下的数据d进行成功的Put操作,都没有可计算边界的对手(computationally-bounded adversary) A可以让客户在对密匙k执行Get操作结束的时候接受d’,其中d’≠ d。

2.2.2 数据恢复性

该属性要求:给出的Π具有容错假设,如果有些数据已经被成功存储在Π中,并且存储提供者持续遵循协议,那么客户最终应当能够检索到数据。

【定义三】一个具有可恢复性的DSN方案Π要求:如果在密匙下的数据有任意成功的Put操作,其同样存在一个成功的Get操作能让客户检索到数据[1]

2.2.3 其他特性

DSNs可以针对具体应用提供特定的其他属性。本文定义了Filecoin DSN所需要的三个关键属性:公开可验证性、可审查性和激励兼容性。

【定义4】  对于每个成功的Put操作,存储网络提供者可以生成数据已被存储的证明。这个存储证明必须说服任何知道密匙但无法访问其对应数据的有效审核人。满足这种情况的DSN方案Π是公开可验证的。

【定义5】  如果方案能够生成可验证的操作记录,并且该记录在未来可以被查证数据的确在特定的时间内被有效存储,那么一个DSN方案Π是可审查的。

【定义6】  如果存储提供者可以通过存储和检索数据而获得回报,或者因为作弊而得到惩罚—体并且所有存储提供者的最优策略就是存储数据。那么一个DSN方案Π是激励可兼容的。

 

3. 复制证明与时空证明

在Filecoin协议中,存储供应商必须让客户相信,他们的数据已经被完好存储。在实际操作中,存储供应商会生成存储证明(Proofs-of-Storage,POS)给区块链网络(或客户本身)进行验证。

本节中,我们将展示和概括在Filecoin中所使用的复制证明(Proof-of-Replication,PoRep)和时空证明(Proof-of-Spacetime,PoSt)实现方案。

3.1 动机

存储证明(POS)方案,例如可证明数据拥有(PDP)以及可恢复性证明(PoR)方案,它允许用户(即审核人V)将数据外包给服务器(既证明人P)以检查服务器是否依然存储数据D。用户可以用比下载数据还便捷的方式,来验证外包给服务器数据的完整性。服务器通过对一组区块进行随机采样和传送少量数据,来生成概率性的拥有证明,以此作为给用户的怀疑/响应协议。

PDP和PoR方案只允许证明人在怀疑/响应的时候拥有某些数据。在Filecoin中,我们需要更强大的保障,来阻止恶意矿工通过攻击获得不应得的奖励。常见的三种攻击类型有:女巫攻击(Sybil attack)、外包攻击(outsourcing attacks)、生成攻击(generation attacks)。

  • 女巫攻击:恶意矿工可能通过创建多个女巫身份,假装存储了很多拷贝(并从中获取奖励),但实际上只存储了一次。
  • 外包攻击:由于可以快速地从其他存储提供商获取数据,恶意矿工可能提交比他们实际的物理存储容量更大的存储能力。
  • 生成攻击:恶意矿工会宣称要存储大量的数据,但相反,他们使用一些小体积程序有效地生成请求。如果这个程序体积小于他们所宣称的储存容量,就会导致恶意矿工在Filecoin获取区块奖励的可能性增加。奖励本身是应该和当前的存储量正相关的。

3.2 复制证明

复制证明(PoRep)是一个新型的存储证明,它允许服务器(证明人P)向用户(审核人V)证明:数据D已被复制到它专有的物理存储上了。我们的方案是一种交互式协议,证明人P:(a)承诺存储数据D的n个不同的拷贝(独立物理拷贝),然后(b)通过怀疑/响应协议来使审核人V相信P确实已经存储了每个拷贝。我们目前已经知道,PoRep在PDP和PoR方案中,阻止女巫攻击、外包攻击、生成攻击的能力会有所提高。

注意,想要PoRep正式的定义,以及了解它的属性和深入研究的,我们推荐参考[5]

【定义六】  PoRep方案允许有效的证明人P来说服审核人V:数据D的独立物理副本R已被p存储。PoRep协议是多项式时间算法的元组:

(Setup, Prove, Verify)

  • Setup(1λ, D) → R, S, SV, 其中SP和SV是为方案专门设定的P和V变量,λ是一个安全参数。Setup用来生成副本R,以及给予P和V必要的信息来运行PoRep.Prove 和 PoRep.Verify。一些方案可能会要求证明人或者第三方交互来运算PoRep.Setup。
  • Prove(SP, R, c) → πc,其中c是审核人V发出的随机质疑, πc是证明人产生的访问R的证明,R是D的特定副本。Prove由P运行,为V生成πc。
  • Verify(Sv, c, πc)→ {0, 1},用来检测证明是否正确。Verify由V运行,并使V相信P已经存储了R。

3.3 时空证明

存储证明方案允许用户检查存储提供商当时是否存储了外包数据。我们如何使用PoS方案来证明在一段时间内数据被存储了?一个非常自然的答案是要求用户重复(例如,每分钟)对存储提供商发送请求。然而这样的交互所需要的通信复杂度会成为一些系统的瓶颈。像Filecoin这样,存储提供商会被要求提交证明到区块链网络。

为了解决这个问题,我们介绍一个新的证明,时空证明(Proof-of-Spacetime),它可以让审核人检查存储提供商是否在一段时间内存储了他的外包数据。这就对证明人产生了直观的要求:(1)生成连续的存储证明(在本文中是“复制证明”)来作为确定时间的一种方法。(2)递归执行来生成简单的证明。

【定义七】  (时空证明)Post方案可使有效的证明人P能够说服一个审核人V相信P在一段时间内存储了数据D。PoSt是多项式时间算法的元组:

      (Setup, Prove, Verify)

  • Setup(1λ, D) → R, S, SV, 其中SP和SV是为方案专门设定的P和V变量,λ是一个安全参数。Setup用来生成副本R,以及给予P和V必要的信息来运行PoRep.Prove 和 PoRep.Verify。一些方案可能会要求证明人或者第三方交互来运算PoRep.Setup。
  • Prove(SP, R, c) → πc,其中c是审核人V发出的随机质疑, πc是证明人产生的访问R的证明,R是D的特定副本。Prove由P运行,为V生成πc。
  • Verify(Sv, c, πc)→ {0, 1},用来检测证明是否正确。Verify由V运行,并使V相信P已经存储了R。

3.4 PoRep和PoSt实际应用

我们对PoRep和PoSt在现有系统上的应用很感兴趣,希望能构建一个实用性系统,但不依赖任何的中心式第三方或者硬件。我们给出了一个PoRep架构(见“密封的复制证明”[5]),它需要在Setup过程中执行缓慢的顺序计算密封来生成副本。PoRep和PoSt的协议草图详见图4,Post证明步骤的底层机制的见图3。

3.4.1 构建加密区块

防碰撞散列。我们使用一个防碰撞散列函数:CRH : {0, 1}* → {0, 1}O(λ)。以及另一个一个防碰撞散列函数MerkleCRH,它可以将字符串分割成多个部分,构造二叉树并将递归应用到CRH,最后输出根。

zk-SNARKs。我们对PoRep和PoSt的实现依赖于零知识的简洁非交互式知识论(zero-knowledge Succinct Noninteractive ARguments of Knowledge,zk-SNARKs)[6,7,8]。因为zk-SNARKs非常简洁,证明短并且容易验证。形式上来说,就是让L作为NP语言,并用C做为L的判决电路。中心式信任方执行一次设置会产生两个公共密钥:证明密钥pk和验证密钥vk。证明密钥pk可使任何(非信任的)的证明人都能生成证明π来证明x∈L,x是任一实例。非交互式证明π是零知识的,也是知识证明的。任何人都可以使用验证密钥vk来验证π证明。尤其zk-SNARK的证明是可公开验证的:任何人都可以验证π,而不需要与生成π的证明者进行交互。π证明具有恒定的大小,并且可以在| x |的线性时间内得到及时验证。

zk-SNARKs是一个三项式时间算法:

(KeyGen, Prove, Verify)

  • KeyGen(1λ,C)→(pk, vk)。输入安全参数为λ,回路为C,pk和vk是KeyGen的概率样本。这两个密匙是公共参数,可用于证明/审核Lc上的成员。
  • Prove(pk, x, w)→π。在输入pk、输入x并看到NP声明w后,如果x∈LC,证明人Prove会输出非交互式证明π。
  • Verify(vk, x,π)→{0, 1}。当输入vk,x和证明 π,如果有x∈LC,审核人verifier输出1。

建议有兴趣的读者阅读[6,7,8],那里有对zk-SNARK系统的概念和实现更详细的介绍。通常来说系统会要求KeyGen是由中心式可信任参与方来运行的。新型可扩展计算的完整性和隐私性(SCIP)系统[9]展示了一个很有前景的、可以避免这个步骤的发展方向,才有了上面的信任假设。

3.4.2 密封操作

密封操作的作用是:(1)通过要求证明人存储公钥下数据D的伪随机序列,强制副本成为成为相互独立的拷贝,这样提交n个副本后就会产生n个独立的磁盘空间(并占用副本大小n倍的储存空间)。(2)在运行PoRep.Setup的时候强制生成副本,实质上会比预估的质疑响应花费更多的时间。有关密封操作的更正式定义,请参见[5]。上述的操作可以用SealτAES−256实现,SealτAES−256中的τ需要比常规的“质疑-证明-审核”序列多花费10-100倍的时间。所以对τ的选择非常重要的,因为运行SealτBC可能比证明人随机访问R要花费更多时间。

3.4.3 PoRep构建实践

本节将描述PoRep协议的组成,并在图4展示简化的协议草图。我们略过了具体实现方法和优化细节。

创建副本。Setup算法通过密封操作,和正确生成副本的证明,来实现副本的生成。证明人生成副本,并将输出(不包括R)发送给审核人。

Setup

      • inputs:

– prover key pair (pkP ,skP )

– prover SEAL key pkSEAL

– data D

      • outputs: replica R, Merkle root rt of R, proof πSEAL

证明存储。Prove算法生成副本存储的证明。证明人收到来自审核人的随机质疑c。该审核人在树根为rt的Merkle树R中确定叶子节点Rc。证明人生成关于Rc,和其延伸到叶子Rc的Merkle路径的知识证明。

Prove

      • inputs:

– prover Proof-of-Storage key pkPOS

– replica R

– random challenge

      • outputs: a proof πPOS

审核证明。考虑到副本的Merkle树根,和原始数据的散列,Verify算法会审核存储证明的有效性。证明是公开可验证的:分布式系统的节点保持了账本和客户对特定数据的关注,这样就能验证这些证明。

Vetify

      • inputs:

– prover public key, pkP

– verifier SEAL and POS keys vkSEAL, vkPOS

– hash of data D, hD

– Merkle root of replica R, rt

– random challenge, c

– tuple of proofs, (πSEAL, πPOS)

      • outputs: bit b, equals 1 if proofs are valid

3.4.4 PoSt构建实践

本节将描述Post协议架构,并在图4中给出一个简单协议草图。本节忽略实现过程和优化细节。Setup和Verify算法和前文的PoRep架构相同,所以这里只描述Prove。

证明时空。Prove算法为副本生成时空证明。证明人接收来自于审核人的随机质疑,并顺序生成复制证明,证明输出后,经过特定次数的迭代t,可作为其他的输入(见图3)。

Prove

      • inputs:

– prover PoSt key pkPOST

– replica R

– random challenge c

– time parameter t

      • outputs: a proof πPOST

Filecoin: 一个去中心式存储网络(白皮书)

图3 Post.Prove 的基础机制图示显示了随时间推移存储的迭代证明

3.5 在Filecoin中的应用

Filecoin协议采用时空证明来审核矿工提供的存储。因为没有指定的审核人,并且我们希望网络中的任何成员都有审核权,所以为了在Filecoin中使用PoSt,我们把方案改为了非交互式的。我们的审核人在公开的代币模型中运行,所以我们可以从区块链中随机地发出质疑。

Filecoin: 一个去中心式存储网络(白皮书)

图4复制证明和时空证明的协议草图。这里CRH表示了防碰撞的哈希,¯x是等待证明的NP声明,¯w是证人。

4.Filecoin:一个DSN架构

Filecoin DSN是一个建立在激励机制上,可审计、可查证的去中心化存储网络。客户向矿工支付代币来获取数据存储和检索数据服务,矿工提供存储空间和传输带宽来获得回报。矿工们只有当网络能够查证他们在正确提供服务的时候才能获得报酬。

在本节中,我们通过DSN的定义和“时空证明”来梳理Filecoin DSN架构。

4.1 设置

4.1.1 参与者

任何用户都可以成为、存储矿工和/或检索矿工。

  • 客户在DSN中通过Put和Get请求存储或检索数据,并支付代币。
  • 存储矿工为网络提供数据存储。存储矿工通过提供磁盘空间和响应Put请求来参与Filecoin运作。要想成为存储矿工,用户必须用与存储空间成比例的抵押品来抵押。存储矿工通过在特定时间内存储数据,来响应用户的Put请求。存储矿工生成时空证明并提交到区块链网络,来证明他们在特定时间内存储了数据。如果数据失效或丢失,存储矿工将被罚没部分抵押品。存储矿工也可以挖掘新区块。如果挖到了新区块,矿工就能获得挖取新块的奖励和新区块中的交易费用。
  • 检索矿工为网络提供数据检索服务。检索矿工通过提供用户Get请求所需要的数据来参与Filecoin运作。和存储矿工不同,他们不需要抵押品,不需要提交存储数据,也不需要提供存储证明。存储矿工同样可以担任检索矿工。检索矿工可以直接从客户或者从检索市场赚取收益。

4.1.2 网络,N

我们将运行在Filecoin各个节点上的全体用户抽象为一个实体:网络。这个网络作为中介运行整个管理协议。简单来说,区块链中的每个新区块,都由全节点构成的网络来管理。网络可以管理可用存储,验证抵押品,审核存储证明以及修复可能存在的故障。

4.1.3 账本

我们的协议应用在基于账本的货币上。一般来说,我们管这个叫账本 L。在任意给定的时间t(也叫时期)内,所有的用户都能访问t时期的账本Lt,它是这段时期内交易序列的记录。账本只能被追加,不能被篡改。Filecoin DSN协议可以运行在任意可验证Filecoin证明的账本上。在第六节中我们会展示了如何基于有效工作建立一个账本。

4.1.4 市场

存储的需求和供给在两个Filecoin市场相遇:存储市场和检索市场。这两个市场属于去中心化交易所,我们第5节中对其进行阐述。简而言之,客户和矿工们通过向各自的市场提交订单来为服务定价。交易所为客户和矿工们提供了匹配交易和牵线的方法。运行管理协议后,如果服务请求被成功提供,网络会确保矿工得到奖励,客户得到服务。

4.2 数据结构

片段 片段指客户在DSN所存数据的某一部分。例如,数据可以被随意划分为许多片段,每个片段可以由不同的存储矿工来存储。

扇区 扇区指存储矿工向网络提供的磁盘空间。矿工将客户的数据片段存储到扇区,并以此赚取代币。为了存储片段,矿工们必须向网络抵押他们的扇区。

分配表 分配表是一个数据表,记录数据片段的流向和其分配的扇区。分配表在账目下的区块中都会更新,它的Merkle根存储在最新的区块中。在实际操作中,该表用来维持DSN的状态,证明验证的过程中能够保证快速查找。详细内容请参考图5。

订单 订单是请求或提供服务的声明。客户向市场提交出价来请求服务(分别在存储数据的存储市场和检索数据的检索市场),矿工们提交应答订单来提供服务。订单数据结构如图10所示。市场协议将在第5节详细介绍。

订单簿 订单簿是订单的集合。存储市场订单簿请查看第5.2.2节,检索市场订单簿第5.3.3节。

抵押 抵押是向网络提供存储(特别是扇区)的承诺。想要在存储市场接受订单,存储矿工必须将抵押提交给总账。抵押包括了抵押扇区的大小和存储矿工的抵押品(详见图5)。

Filecoin: 一个去中心式存储网络(白皮书)

图5 DSN方案中的数据结构

4.3 协议

本节中我们通过对客户、网络和矿工的介绍,对Filecoin DSN有了一个整体的概括。我们在图7中给出了Get和Put协议的方法,在图8中给出了Manage协议,并用图6给出了一个协议实例。Filecoin整体的协议概览请参见图1。

4.3.1 客户周期

本节会简要介绍客户周期的概念;下文中各协议的深入解释请参考第五节。

  1. Put:客户在Filecoin 中存储数据。

客户通过向矿工支付代币可以对数据进行存储。Put协议在节中有详细介绍。

客户向存储市场的订单簿发起投标(通过向区块链提交订单),就启动了Put协议。当有匹配的矿工应答时,客户就可以将数据片段发送给矿工。双方签署交易订单,并将其发送到存储市场的订单簿。

客户应当能够通过提交多重订单(或者在订单中指定复制扇区)来决定数据的拷贝数量。更高的冗余度可以提高储存的容错率。

  1. Get:客户从Filecoin中取回数据。

客户可以通过向检索矿工支付代币来获取DSN中的任何数据。Get协议在5.3节中有更详细的解释。

客户向检索市场的订单簿投标(向网络提交订单),就开始了get协议。当有匹配的矿工应答被找到,客户就会从矿工处得到数据片段。收到片段后,双方签署交易协议并提交到区块链,证明交易已完成。

4.3.2 挖矿周期(对存储矿工)

我们简单介绍一下挖矿周期。

  1. Pledge:存储矿工向网络抵押存储。

存储矿工通过Manage.PledgeSector在区块链中存放抵押品,来保证向网络提供稳定的存储。抵押品为了保证服务而存在,如果矿工为所存储的数据生成了存储量证明,抵押品就会被退回。如果没有成功生成存储量证明,矿工就得不到抵押品了。

一旦抵押交易在区块链中出现,矿工就可以在存储市场中提供存。矿工们设置价格,并响应市场订单簿中的订单要求。

Manage.PledgeSector

      • inputs:

– current allocation table allocTable

– pledge request pledge

      • outputs: allocTable’
      1. Receive Orders:存储矿工从存储市场获取存储请求。

一旦抵押交易出现在区块链中(在AllocTable中),矿工就能在存储市场中提供存储。他们设定价格并通过Put.AddOrders向市场订单簿响应订单。

Put.AddOrders

      • inputs: list of orders.On
      • outputs: bit b, equals 1 if successful

通过Put.MatchOrders来对客户的报价订单进行匹配。

Put.MatchOrders

      • inputs:

–the current Storage Market OrderBook

– query order to match Oq

      • outputs: matching orders .On

一旦订单匹配,客户就将数据发给存储矿工。存储矿工接收到数据后,运行Put.ReceivePiece 。数据接收完成后,矿工和客户签署交易订单并提交到区块链。

Put.ReceivePiece

      • inputs:

– signing key for Mj

– current orderbook OrderBook

– ask order Oask

– bid order Obid

– piece p

      • outputs: deal order Odeal signed by Ci and Mj
  1. Seal:存储矿工为数据片段准备未来证明。

存储矿工的存储空间被切分为很多扇区,每个扇区包括了分配给矿工的数据片段。网络通过分配表来记录每个存储矿工的扇区。当一个扇区被填满了,这个扇区就被密封(sealed)起来。密封是一种缓慢的顺序操作。密封可以将扇区中的数据转换成为唯一的物理副本,并与存储矿工的公钥相关联。密封在复制证明中是一项必须的操作,相关问题可参见第3.4节。

Manage.SealSector

      • inputs:

– miner public/private key pair M

– sector index j

– allocation table allocTable

      • outputs: a proof πSEAL, a root hash rt
  1. Prove:存储矿工证明他们正在存储数据。

当存储矿工被分配了数据时,必须重复生成复制证明来确保他们正在存储数据(详情参看第3节)。证明被发布在区块链中,并由网络来验证。

Manage.ProveSector

      • inputs:

– miner public/private key pair M

– sector index j

– challenge c

      • outputs: a proof πPOS

4.3.3 挖矿周期(对于检索矿工)

本节简要概括检索矿工的挖矿周期。

  1. Receive Orders:检索矿工从检索市场得到获取数据的请求。

检索矿工设置价格并发送到市场订单簿,并通过向网络发送报价。

Get.AddOrders

      • inputs: list of orders .On
      • outputs: none

然后检索矿工检查是否与客户的订单报价匹配。

Get.MatchOrders

      • inputs:

– the current Retrieval Market OrderBook

– query order to match Oq

      • outputs: matching orders O1..On
  1. Send:检索矿工向客户发送数据碎片。

一旦订单匹配,检索矿工就将数据发送给客户(第5.3节)。数据接收完成后,矿工和客户就签署交易订单提交到区块链。

Put.SendPieces

      • inputs: – an ask orderOask

– a bid order Obid

– a piece p

      • outputs: a deal orderOdeal signed by Mi

4.3.4 网络周期

本节给出简单的网络操作概述。

  1. Assign:网络将客户的数据片段分配给存储矿工的扇区。

客户通过向存储市场提交订单来启动Put协议。当询价单和报价单匹配的时候,参与各方共同为交易担保并向市场提交订单。此时,网络将数据分配给矿工,并将其记录到分配表中。

Manage.AssignOrders

      • inputs:

– deal orders O1deal..Ondeal

– allocation table allocTable

      • outputs: updated allocation table allocTable’
  1. Repair:网络发现故障并试图修复

所有的存储分配都是全网公开的。在每个区块中,网络都会检查储存分配的证明是否存在,以确保它们有效,并按照下列要求正确工作:

  • 如果有部分证明丢失或失效,网络会罚没部分抵押品来惩罚存储矿工。
  • 如果存在大量的证明丢失或失效(由系统参数Δfault定义),网络会认定存储矿工存在故障,将订单设定为失效,并为这部分数据引入新订单,重新进入市场。
  • 如果所有该数据的存储矿工都发生故障,则认定该数据丢失,客户获得退款。

Manage.RepairOrders

      • inputs:

– current time t

– current ledger L

– table of storage allocations allocTable

      • outputs: orders to repair O1.Ondeal, updated allocation table allocTable

Filecoin: 一个去中心式存储网络(白皮书)

图6 Filecoin DSN 的执行示例,按群分组并按照行及时间顺序排序

4.4 担保和要求

以下是关于Filecoin DSN如何实现完整性、可恢复性、公开可验证性和激励兼容性的相关条款。

  • 完整性的实现:数据片段以加密的哈希值来命名,在Put请求后,客户只需要存储哈希即可通过Get操作来检索数据,并可对收到的数据进行完整性检查。
  • 可恢复性的实现:在Put请求中,客户可以指定复制参数和纠删码的类型,还可以将存储方式指定为(f, m)-tolerant。它的意思是如果给定m个存储矿工存储数据时,最多可以容忍f个故障。使用更多的存储矿工进行存储,可以让客户增加数据恢复的机会,以防存储矿工下线或消失。
  • 公开可验证和可审核性的实现:存储矿工需要提交其存储量证明 (πSEAL, πPOST)到区块链。网络中任意用户都可以在不访问数据本身的情况下,验证这些证明的有效性。由于这些证明都存储在区块链上,所有的操作过程都可以被随时查验。
  • 激励兼容性的实现:一般来说,矿工通过提供存储数据获得回报。当矿工承诺存储数据时,他们必须生成证明。如果忽略了证明,矿工就会被惩罚(通过罚没部分抵押品),并且不会得到储存回报。
  • 保密性的实现:如果客户希望维护数据的隐私性,就必须在提交到网络之前,对数据进行加密。

Filecoin: 一个去中心式存储网络(白皮书)

图7 Filecoin DSN中Put和Get协议的描述

Filecoin: 一个去中心式存储网络(白皮书)

图8 Filecoin DSN中Manage协议的描述

5 Filecoin的存储市场和检索市场

Filecoin有两个市场:存储市场和检索市场。这两个市场结构相同但设计不同。存储市场让客户通过付费使得存储矿工储存数据。检索市场让客户向检索矿工付费来取回数据。这两种情况下,客户和矿工都可以设置报价或接受报价。整个交易是由网络来运行—Filecoin中的所有节点构成了拟人化的网络。网络保证了矿工在提供服务时可以得到客户的奖励。

5.1 验证市场

交易市场是一种协议,它们通过促使买家和买家达成交易,促进特定商品和服务的交换。对我们而言,交易应当是可验证的:参与者们构成的去中心化网络必须能够在买家和卖家间对交易进行验证。

这里我们提出验证市场的概念。它没有单一的实体来管理交易,交易是完全透明的,任何人都可以匿名参与。可验证市场协议可以去中心化地完成服务和货品的交易:订单簿的一致性、订单的处理和服务的正确执行都可以由参与者,也就是Filecoin里面的矿工和全部节点,来进行独立验证。简化的可验证市场模型如下:

定义5.1

可验证市场协议分两个阶段:订单匹配和处理。订单是购买或出售抵押品、商品或服务的解决方案,订单簿就是所有订单的集合列表。

Filecoin: 一个去中心式存储网络(白皮书)

图9 可验证市场的一般性协议

5.2 存储市场

存储市场是可验证的市场,它允许客户(即买家)请求存储数据以及存储矿工(即卖家)提供存储空间。

5.2.1 需求

我们根据以下需求来设计存储市场协议:

  • 链式订单簿:重点(1)存储矿工的订单公开的,所以最低价是透明的,客户可以对订单做出最优抉择。(2)客户订单必须提交给订单簿,即使他们选择了最低价格,这样市场就可以对新的订单做出反应。因此为了能被添加到订单簿,我们要求订单必须被添加到Filecoin区块链。
  • 参与者投入抵押:为了避损,防止存储矿工不提供存储或者客户没有支付能力,我们要求参与双方投入抵押资源。为了参与存储市场,存储矿工必须保证在DSN中存入与其存储量成比例的抵押品(更多细节请参考3节)。通过这种方式,网络对承诺存储数据但又不提供存储证明的矿工进行惩罚。同样的,客户必须预存一定数量的资金,以保证其支付能力。
  • 故障自处理:只有在存储矿工反复证明他们已经在约定时间内存储了数据的情况下,订单才会进行结算。网络必须能够验证这些证明的存在性和正确性,并且保证它们按4节修复部分所讲的规则运行。

5.2.2 数据结构

Put订单 有三种类型的订单:出价订单,询价订单和交易订单。存储矿工创建询价订单来提供存储,客户创建出价订单以及请求存储,当双方谈妥价格时,他们共同创建交易订单。订单的数据结构和参数的细节如图10所示。

Put订单簿 存储市场的订单簿是对当前情况有效的,并且对询价,出价和交易订单都是开放的。用户可以通过Put协议中的方法(AddOrders,MatchOrders)与订单簿进行交互。具体方法如图7所示。

订单簿是公开的,对所有用户都有同样的可见性。在每个周期,如果最新的区块中出现新的交易,新订单就会立即被添加到订单簿。如果订单被取消,失效或已被完成,就会被删除。如果订单是有效的,它将被添加到区块链中,也就同时被添加到订单簿:

定义5.2 我们定义出价,询价,交易订单的有效性:

(有效出价单):从客户发出的投标单Ci,Obid:= (hsize, funds[, price,time, coll, coding])>Ci,如果满足下面的条件就是有效的:

  • Ci 在账户里有可用的资金。
  • 时间没有超时。
  • 订单必须保证最少的存储周期(这是个系统参数)。

(有效询价单):从存储矿工发出的询价单Mi,Oask:= (hspace, pricei)Mi,如果满足下面的条件就是有效的:

  • Mi承诺做矿工,并且在订单周期内不会反悔。
  • 空间必须小于Mi的可用存储:Mi承诺的存储减去预留给订单簿的部分(在询价订单和交易订单中)。

(有效交易订单):交易订单Odeal:= (hask, bid,ts)Ci,Mj,如果满足下面的条件就是有效的:

  • 询价(ask)参考这样的订单Oask:它在存储市场的订单簿中储存,并不涉及其他订单。它由Ci签署。
  • 出价(bid)订单参考这样的订单Obid:它在存储市场的订单簿中储存,并不涉及其他订单。它由Mj签署。
  • ts 不能设置为将来的时间,或者太为过去的时间

评论:如果恶意的客户从存储矿工收到了签名的交易,但从来没有将其添加到订单簿,那么存储矿工就无法重新使用交易中涉及的存储。ts可以防止这种攻击,因为超过ts之后,订单就会失效,并无法在订单簿中进行提交。

Filecoin: 一个去中心式存储网络(白皮书)

图10 检索和存储市场的命令数据结构

5.2.3 存储市场协议

简单来说,存储市场协议分两个部分:订单匹配和结算:

  • 订单匹配:客户和存储矿工将交易提交到区块链,这样可以使订单同步到订单簿(步骤1)。当订单匹配时,客户发送数据给存储矿工,双方签署交易协议并提交到订单簿(步骤2)。
  • 结算: 存储矿工将扇区密封(步骤3a),为存储有数据片段的扇区生成存储证明,并定期将其提交到区块链(步骤3b);同时,其余的网络需要验证矿工生成的证明并修复可能存在的故障(步骤3c)。

存储市场协议的详细情况请参考图11。

5.3 检索市场

检索市场允许客户请求特定的数据,并由检索矿工提供该数据。与存储矿工不同的是,检索矿工不要求在特定时间内存储数据或者生成存储证明。网络中的任何用户都可以成为检索矿工,通过提供数据片段来赚取Filecoin代币。检索矿工可以直接从客户接收数据片段,也可以成为存储矿工存储它们。

5.3.1 需求

我们根据以下的需求来设计检索市场协议:

  • 链下订单簿:客户必须能够找到提供所需要数据片段的检索矿工,并在商定价格之后直接交换数据。这意味着订单簿不能通过区块链来运行—否则这将成为快速检索请求的瓶颈—不按此操作的参与者只能看到订单簿的一部分。因此,我们要求双方都参与订单。
  • 无信任方检索:公平交换不可能性的结果[10]提醒我们,交易双方不可能在没有信任方的情况下进行交换。在存储市场中,区块链网络作为(去中心化的)信任方来验证存储矿工提供的存储。在检索市场中,检索矿工和客户交换文件的时候并没有网络的监督。为了实现这种结果,我们要求检索矿工将数据分割成多个部分,每当客户收到一个片段时,矿工们会收到一定的报酬。这种方式中,遇到客户停止付款,或者矿工停止发送数据,任何一方都可以终止交易。值得注意的是,我们必须假设至少有一个检索矿工是诚实的。
  • 支付通道:客户希望付款时可以立即收到数据,而检索矿工只有在确认收到付款后才会提供数据片段。通过公共账本确认交易可能会成为检索请求的瓶颈,所以,我们必须依赖有效的链下支付。Filecoin区块链必须支持快速的支付通道,只有在出现纠纷的情况下才使用区块链,来使交易高效无误地进行。通过这种方式,检索矿工和客户可以快速发送协议所要求的小额支付。在我们未来的工作中,包含了创建一个如[11,12]所述的支付通道网络。

5.3.2 数据结构

获取订单 检索市场中包含三种类型的订单:客户创建的出价订单Obid,检索矿工创建的询价订单Oask,以及存储矿工和客户达成的交易订单Odeal。订单的数据结构如图10所示。

获取订单簿 检索市场的订单簿包含公开有效的出价订单,询价订单和交易订单。与存储市场不同,每个用户所能看到的订单簿都不同。因为订单在网络中传播,每个矿工和客户只会追踪他们所感兴趣那一部分。

Filecoin: 一个去中心式存储网络(白皮书)

图11 存储市场协议详情

5.3.3 检索市场协议

简单来说,检索市场协议分为两个部分:订单匹配和结算:

  • 订单匹配:客户和检索矿工通过广播将订单提交给订单簿(步骤1)。订单匹配后,客户和检索矿工创建小额支付通道(步骤2)。
  • 结算:检索矿工发送小部分的数据片段发送给客户,然后对每个碎片客户会向矿工发送签名收据(步骤3)。检索矿工向区块链提交收据并获得回报(步骤4)。

该协议在图12中有详细解释。

Filecoin: 一个去中心式存储网络(白皮书)

图12 检索市场协议详情

6 有用工作共识

Filecoin DSN协议可以应用在允许验证Filecoin证明的任何共识协议上。在本节中,我们将展示如何引导基于有用工作的共识协议。Filecoin矿工通过生成“时空证明”来参与共识,取代了浪费计算量的工作量证明。

有用工作 如果在保证了区块链安全性的前提下,计算的输出对网络来说是有价值的,我们就认为矿工在共识协议中的工作是有用的。

6.1 动机

虽然确保区块链的安全是至关重要的。但工作量证明证明方案往往会求解一些不能重复的问题,或者需要浪费大量的计算才能找到解决方案的问题。

  • 不可重复的工作:很多区块链要求矿工解决一些难以计算的问题,例如反向求解一个哈希函数。通常情况下这些问题都没有什么用处,除了保护网络安全之外也没有其他价值。我们可以让这件事变得有用吗?

可重复使用工作的尝试:已经有一些人尝试重复使用挖矿能力来进行更有用的计算。有些尝试是要求矿工沿用工作量证明的标准,来进行一些特殊计算。还有其他一些尝试希望用一些目前难以解决但非常有用的问题来替代工作量证明。例如,质数币(Primecoin)重复利用矿工的计算能力来寻找新的质数;以太坊要求矿工沿用工作量证明来执行小程序;Permacoin提供档案管理服务,它要求矿工反向求解哈希函数来证明数据已被归档。虽然这些试探性工作大多很有用,但这些工作中计算能力浪费的现象仍然很普遍。

  • 浪费的工作:解决困难问题在机器损耗和能源消耗方面是十分昂贵的,特别是如果这些问题完全依赖计算能力。当挖矿算法难以并发计算的时候,解决难题的普遍因素就是计算能力。我们可以减少浪费的工作吗?

减少浪费工作的尝试:理想情况下,大部分网络资源应该花费在有用的工作上。一些尝试方案要求矿工使用更节能的解决方案。例如,Spacemint要求矿工着力于磁盘空间而不是计算;虽然更加节能,因为磁盘空间被随机数据填满,所以仍然很浪费。其他的尝试是用传统的基于权益证明的拜占庭协议来取代难题,其中权益拥有者在下一个区块中,按其代币的占有比例进行投票。

我们来设计一个基于用户数据存储的有用工作共识协议。

6.2 Filecoin共识

我们提出了有用工作的共识协议,这个协议中矿工被选出开发新区块的概率(我们称其为矿工的投票权)与其当前储存量在全网中的占比正相关。我们设计了Filecoin协议,这个协议中的矿工更愿意投身于存储而不是计算能力,并以此来平衡挖矿计算。矿工提供存储,并利用自己的计算能力生成数据已被存储的证明,以此参与到这个共识协议中。

6.2.1 挖矿能力建模

功率容错 在我们的技术报告[13]中,我们提出了功率容错,这是对在参与者对协议结果的影响方面进行拜占庭故障重构的抽象。每个参与者控制网络总功率n中的一部分,其中f是故障或竞争参与者控制的部分。

Filecoin功率 在Filecoin中,功率Pti是t时间内,矿工Mi所分配到的存储任务的总和。影响因子Iti是Mi的功率在全网功率中的占比。

在Filecoin中,功率有以下特性:

  • 公开性:网络中正在使用的存储总量是公开的。通过读取区块链,每个人都可以计算任意矿工被分配的存储任务—因此任何人在任意时间点都可以计算出的每个矿工的功率和全网总功率。
  • 公开验证性:对于每个存储任务,矿工都需要生成时空证明来证明自己确实在提供存储服务。通过读取区块链,任何人都可以验证矿工声明的功率是否正确。
  • 可变性:在任意时间点,矿工都可以通过新增抵押扇区和填充扇区来增加新的存储。这样矿工就能对功率大小进行调整。

6.2.2 功率会计与时空证明

在每个∆proof 区块(∆proof 为一个系统参数)中,矿工们都必须向网络提交时空证明,如果网络中大多数功率认为它们有效,证明就可以被成功添加到区块链。在每个区块中,每个完整节点都会会更新AllocTable,添加新的存储任务分配,删除过期和缺少标记的证明。

矿工Mi的功率可以通过分析AllocTable来计算和验证。分析主要有两种方式:

  • 全节点验证:如果节点拥有完整的区块链记录,则可以从初始区块开始,运行NetworkProtocol读取Mi的AllocTable直到当前区块。这个过程可以验证当前每一个分配给Mi的存储的时空证明。
  • 简单存储验证:假设一个轻客户端可以访问一个可以广播最新区块的信任源。轻客户端可以从网络节点中请求:(1)矿工Mi当前AllocTable的入口 (2)能够证明入口包含在最新区块的状态树中的Merkle路径(3)从初始区块到当前区块的头文件。这样轻客户端就可以将时空证明的验证托付给网络。

功率计算的安全性来自于时空证明的安全性。在这个设置里面,PoSt保证了矿工无法对他们所分配的存储量说谎。事实上,他们不能声称存储过量的数据,因为这会耗费很多时间来获取和运行PoSt.Setup。并且 PoSt.Prove是顺序算法,他们无法通过并行计算快速生成证明。

6.2.3 使用功率达成共识

我们预见了通过扩展权益证明共识协议的当下规模(和未来预期)来实现Filecoin共识的多种策略,其中权益被替换为分配式存储。同时我们预见了权益证明协议的改进,我们提出了一个架构,这个架构基于我们前期“预期共识”的工作 [14]。我们的策略是在每一轮中选出一个(或多个)矿工,赢得选举的概率与矿工被分配的存储量成正例。

预期共识 预期共识(Expected Consensus,EC)的基本直觉是确切地、不可预测地、并且秘密地在每个周期中选举一小组领导人集合。在预期中,每个周期内当选的领导人数是1,但也有一些周期内可能有零个或者许多领导人。每个周期中,区块连网络都会扩展一个或多个区块。如果某个周期内没有领导人,网络就会被添加一个空的区块。虽然链中的区块可以被线性排列,但其数据结构是一个有向无环图。EC是一个概率共识,每个周期都比前面的区块更具有确定性,所以最终可以达到足够的确定性,使得出现不同历史的可能性足够小。如果大多数的参与者都通过扩展区块链或签署区块来将自己的权重附加到链上,这个区块就稳固了。

选举矿工 在每个周期,每个矿工都要检查自己是否被选为领导人,这类似于前面的协议:CoA[15],Snow White16],和Algorand[17]。

定义6.1 (Filecoin中的EC选举)如果下面的条件是满足的,则在时段t 内矿工Mi 成为领导人:

Filecoin: 一个去中心式存储网络(白皮书)

其中rand(t)是在时间t内可以从区块链中提取出来的公开的随机变量,Pti是Mi的功率。考虑对于任意的m,L是H(m)的大小,H是一种安全的加密哈希函数, <m>Mi是由Mi签名的信息m,例如:

Filecoin: 一个去中心式存储网络(白皮书)

图13中,我们描述了矿工(ProveElect)和网络节点(VerifyElect)之间的协议。

这种选举方案提供了三种特性:公平性,保密性和公开可验证性性。

  • 公平性:每次选举中每个参与者只有一次机会,因为签名是确定性的并且t和rand(t)是固定的。假设H是安全的加密哈希函数,那么H(<t||rand(t)>Mi)/2L必须是从(0,1)均匀选择的实数,因此,使等式为真的可能性为Pti/Σjptj,这与矿工在在网络中的功率相等。因为这个概率对功率是线性的,这种可能性在分割或者汇总功率的情况下就会被保留。注意随机值rand(t)在没有给出t之前是未知的。
  • 保密性:在给出的数字签名假设中,即便是非常高效的攻击者,在没有密匙Mi的情况下计算出签名的概率也是极小的。
  • 公开可验证性:被选出的领导人 i ∈ Lt可以通过给出t、rand(t)、H(<t||rand(t)>Mi)/2L来说服一个有效的验证者;鉴于前面给出的观点,再有能力的攻击者在没有获胜秘钥的情况下也不能生成证明。

Filecoin: 一个去中心式存储网络(白皮书)

图13 预期共识协议中的领导人选举

 

7. 智能合约

Filecoin给终端用户提供了两种基本操作:存(Put)和取(Get)。这两种操作使用户可以用他们认为合适的价格在市场中存取数据。尽管这些操作已经可以覆盖Filecoin的基本使用场景,我们仍然希望能在存取操作之上,通过部署智能合约来完成一些更复杂的操作。使用者们可以编写新的细分类存储/检索请求,与一般的智能合约类似,我们将其归类为“文件合约”。我们整合出一个合约系统 [18]和一个桥梁系统,来将Filecoin的存储带入到其它区块链中。反之亦然,我们也可以将其它区块链的功能带入进Filecoin。

我们希望Filecoin生态系统中的智能合约越多越好,并希望更多智能合约的开发者们参与进来,组件一个开发社区平台。

7.1 Filecoin中的合约

智能合约允许用户们编写有状态的程序,这些程序可以通过消费代币在市场中进行数据存储/检索,并生成存储证明。用户可以通过向总账发送交易信息触发合约中的函数,来同智能合约进行交互。我们扩展了智能合约系统,使其可以支持Filecoin特定的一些操作(例如市场运营、证明审核等)。

Filecoin特定地支持数据存储合约,同时也支持更多类型的智能合约:

  • Filecoin合约:我们允许用户对他们提供的存储服务情况进行编程。值得一提的例子有:(1)承包矿工:客户可以在不参与市场的情况下,预先指定提供服务的矿工。(2)支付策略:客户可以给矿工设计不同的回报策略。例如薪酬随时间增长的的合约,或者由可信赖的谕示监督下设置存储价格的合约。(3)票据服务:一种允许矿工积累代币,并代表他们的用户支付存储/检索服务的合约。(4)更复杂的操作:客户可以搭建允许数据更新的合约。
  • 智能合约:用户可以像在其它系统(例如以太坊[18])中一样,不直接依赖于存储的使用而将程序和交易关联起来。我们预测这样的应用可能有:去中心化命名系统、资产追踪和crowdsale平台。

7.2 与其他系统的集成  

桥(Bridges)是用来连接不同区块连的工具;虽然桥工具仍在发展之中,我们仍然计划开发跨链交互系统,以便于将Filecoin存储带入到其它区块链技术平台,同时也将其他平台的功能特性带入到Filecoin中。

  • 其他平台中的Filecoin:其他系统,例如比特币(Bitcoin[19])、Zcash[20],特别是以太坊(Ethereum)[18]和Tezos,这些系统都允许开发人员编写智能合约;然而这些平台存储能力低且成本高昂。我们计划提供一个桥梁,将存储和检索功能提供给这些平台。我们注意到IPFS已经被作为一种引用和分发内容的方式,应用于一些智能合约(以及协议代币)中。增加对Filecoin的支持会令这些系统确保IPFS内容的存储以换取Filecoin代币。
  • Filecoin中的其他平台:我们计划为Filecoin和其它区块链服务提供桥接。例如,与Zcash集成可以让Filecoin私密地发送存储请求。

8. 未来的工作

我们的工作为Filecoin网络构架的发展方向指明了清晰而有方向性的道路;当然,这些工作只是我们对去中心化存储系统研究的开始。在本节中我们会指出和说明我们未来要做的三部分工作。这包括了已经完成的和即将发表的一部分工作,一些公开的关于提升现有协议的问题,以及协议的形式化问题。

8.1 正在进行的工作

我们正在进行的工作主要分为以下几点:

  • Filecoin状态树的规格说明。
  • Filecoin及其组件的详细性能评估和基准测试。
  • 完整可执行的Filecoin协议规范。
  • 可赞助检索券模型:这个模型可以使客户C1通过发放单张的可用代币券,赞助另一位客户C2进行数据下载。
  • 分层共识协议:Filecoin的子网可以进行划分,并且在临时或永久划分的时候能持续处理交易。
  • 使用SNARK / STARK的增量区块链快照。
  • Filecoin与以太坊交互(Filecoin-in-Ethereum)的合约接口和协议。
  • 实现区块链归档,用Braid进行跨链标记。
  • 只有在区块链解决冲突的时候才发起”时空证明”。
  • 形式化证明Filecoin DSN的实现和新型存储证明。

8.2 开放型问题

有一些开放型问题,如果被解决了,可能会对网络有整体的改善。但这些问题并不紧急,并不是必须在项目启动前就要解决的。

  • 重构更好的复制证明的密封函数,解码时间复杂度是O(n)(目前是O(nm)),无需SNARK/STARK即可公开验证。
  • 重构更好的复制证明的证明函数,无需SNARK/STARK即可公开验证。
  • 一个透明的、公开课验证的检索证明或其他存储证明。
  • 在检索市场中新检索策略(例如基于概率的支付,零知识条件支付)
  • 为预期共识设计更好的秘密领导人选举,使得每个周期中都有唯一确定的领导人当选。
  • 更好更可信的SNARK方案,允许扩容公共参数(该方案可以运行MPC序列,其中每个附加MPC都严格降低故障率,并且每个MPC的输出都是有效的)。

8.3 证明和形式化验证

由于证明和形式化验证具有明确的价值,我们计划在未来几个月至几年内证明Filecoin网络的许多特性,并开发正式的验证协议规范。其中有几个证明正在实施,还有一些尚在构思当中。但要证明Filecoin的众多属性(如比例缩放,离线使用)将是非常艰难和长期的工作。

  • 预期共识及其变体的正确性证明。
  • 功率容错异步1/2不可能性结果回避正确性的证明。
  • 通用可组合框架中Filecoin DSN的公式化,描述如何将Get,Put和Manage作为理想功能,并证明其实现方法。
  • 形式化建模和证明自动化自愈系统。
  • 形式化验证协议的描述(例如TLA +或Verdi)。
  • 形式化验证的实现(例如Verdi)。
  • Filecoin激励机制的博弈理论分析。

致谢

这项工作是Protocol Labs团队众人汗水的积累,尤其是Protocol Labs的合作者和顾问的帮助、评论和审查。Juan Benet在2014年编写了初始版本的Filecoin白皮书,为本项工作奠定了基础。他和Nicola Greco开发了新的协议,并与团队其他成员合作编写了这份白皮书,团队成员们贡献了评论、总结和审核等工作。特别地,“大卫老爸”David Dalrymple提出了订单范例和其他想法,Matt Zumwalt改进了本文的结构,Evan Miyazono绘制了插图,并总结了文章,Jeromy Johnson在设计协议时提供了很多见解,Steven Allen贡献了富有洞察力的问题和说明。我们也感谢所有的合作者和顾问,尤其是Andrew Miller和Eli Ben-Sasson,与他们的交流对我们提供了很大帮助。

早先版本:

QmZ5fLHwK9d55iyxpke6DJTWxsNR3PHgi6F43jSUgEKx31

引用

[1] Juan Benet. IPFS – Content Addressed, Versioned, P2P File System. 2014.

[2] Giuseppe Ateniese, Randal Burns, Reza Curtmola, Joseph Herring, Lea Kissner, Zachary Peterson, and

Dawn Song. Provable data possession at untrusted stores. In Proceedings of the 14th ACM conference

on Computer and communications security, pages 598{609. Acm, 2007.

[3] Ari Juels and Burton S Kaliski Jr. Pors: Proofs of retrievability for large les. In Proceedings of the

14th ACM conference on Computer and communications security, pages 584{597. Acm, 2007.

[4] Hovav Shacham and Brent Waters. Compact proofs of retrievability. In International Conference on

the Theory and Application of Cryptology and Information Security, pages 90{107. Springer, 2008.

[5] Protocol Labs. Technical Report: Proof-of-Replication. 2017.

[6] Rosario Gennaro, Craig Gentry, Bryan Parno, and Mariana Raykova. Quadratic span programs and

succinct nizks without pcps. In Annual International Conference on the Theory and Applications of

Cryptographic Techniques, pages 626{645. Springer, 2013.

[7] Nir Bitansky, Alessandro Chiesa, and Yuval Ishai. Succinct non-interactive arguments via linear interactive

proofs. Springer, 2013.

[8] Eli Ben-Sasson, Alessandro Chiesa, Daniel Genkin, Eran Tromer, and Madars Virza. Snarks for c:

Verifying program executions succinctly and in zero knowledge. In Advances in Cryptology{CRYPTO

2013, pages 90{108. Springer, 2013.

[9] Eli Ben-Sasson, Iddo Bentov, Alessandro Chiesa, Ariel Gabizon, Daniel Genkin, Matan Hamilis,

Evgenya Pergament, Michael Riabzev, Mark Silberstein, Eran Tromer, et al. Computational integrity

with a public random string from quasi-linear pcps. In Annual International Conference on the Theory

and Applications of Cryptographic Techniques, pages 551{579. Springer, 2017.

[10] Henning Pagnia and Felix C Gartner. On the impossibility of fair exchange without a trusted third party.

Technical report, Technical Report TUD-BS-1999-02, Darmstadt University of Technology, Department

of Computer Science, Darmstadt, Germany, 1999.

[11] Joseph Poon and Thaddeus Dryja. The bitcoin lightning network: Scalable o -chain instant payments.

2015.

[12] Andrew Miller, Iddo Bentov, Ranjit Kumaresan, and Patrick McCorry. Sprites: Payment channels that

go faster than lightning. arXiv preprint arXiv:1702.05812, 2017.

[13] Protocol Labs. Technical Report: Power Fault Tolerance. 2017.

[14] Protocol Labs. Technical Report: Expected Consensus. 2017.

[15] Iddo Bentov, Charles Lee, Alex Mizrahi, and Meni Rosenfeld. Proof of activity: Extending bitcoin’s

proof of work via proof of stake [extended abstract] y. ACM SIGMETRICS Performance Evaluation

Review, 42(3):34{37, 2014.

[16] Iddo Bentov, Rafael Pass, and Elaine Shi. Snow white: Provably secure proofs of stake. 2016.

[17] Silvio Micali. Algorand: The e cient and democratic ledger. arXiv preprint arXiv:1607.01341, 2016.

[18] Vitalik Buterin. Ethereum <https://ethereum.org/>, April 2014. URL https://ethereum.org/.

[19] Satoshi Nakamoto. Bitcoin: A peer-to-peer electronic cash system, 2008.

[20] Eli Ben Sasson, Alessandro Chiesa, Christina Garman, Matthew Green, Ian Miers, Eran Tromer, and

Madars Virza. Zerocash: Decentralized anonymous payments from bitcoin. In Security and Privacy

(SP), 2014 IEEE Symposium on, pages 459{474. IEEE, 2014.

 

 

 

本文来自https://filecoin.io/,经授权后发布,本文观点不代表IPFSER立场,转载请联系原作者。

发表评论

登录后才能评论

联系我们

在线咨询:点击这里给我发消息

邮件:ipfsforce@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code