FileCoin白皮书翻译

                      Filecoin: A Decentralized Storage Network

IPFS是一个分布式传输协议,而Filecoin是做在IPFS其上的激励层,通过Token激励模式(矿工通过抵押代币存储内容获得激励),在IPFS上构建了一个去中心化存储市场,类似于以太坊和以太币之间的关系。本博客主要对Filecoin的白皮书进行尝试性翻译,如果有错误,欢迎大家纠正。

翻译

译者:[email protected],本博客版权归译者所有,未经许可,禁止转载

这里附上原文链接:FileCoin白皮书


摘要

当今互联网正处于一场革命之中:去中心化的开放服务正在取代中心化的专有服务;可靠的算力正在取代可信的团体;可迅速恢复的内容寻址正在取代脆弱的地址寻址;点对点的算法市场正取代无效率的整体式服务。比特币、以太坊和其他区块链网络已经证明了去中心化的交易账单是有用的。这些公共账本能够处理复杂的智能合约应用程序和交易价值数百亿美元的加密资产。在没有中心化的管理和可信的第三方的前提下,公共账本保证参与者形成一个能够提供有用支付服务的去中心化网络,这些系统是互联网开放服务的第一个实例。通过去中心化的网络,,面向全球的点对点的分布式版本文件系统提供对数十亿文件的服务,IPFS已经证明了内容寻址的有用性。它从网络孤岛中解放数据,存活于网络分区中、支持离线工作、通过特殊审查制度进行路由并且保证数字信息的永久性。

文件币(Filecoin)是一个分布式的存储网络,可将云储存转变为算法市场。该算法市场运行在带有本地协议代币(也可称为“文件币”)的区块链上,矿工可以为客户提供存储获得收益。相反的,客户可以花费文件币雇佣矿工来存储或发布数据。与比特币一样,Filecoin通过给予矿工大量奖励来竞争挖矿,但FileCoin挖矿算力与主动存储成正比,直接为客户提供有用的服务(这一点与比特币不同,比特币算力的用处仅限于保证区块链共识机制上。)这种方式给矿工提供了一个强大的动力,尽可能多地累积存储空间并将其租给客户。该协议将这些积累的资源聚合到一个能让世界上任何人都可以相信的自我修复的存储网络。该网络通过对内容进行复制和扩散实现系统的稳健性,同时会自动检测和修复副本失效。客户端也可以选择复制参数以防范不同的威胁模型。该协议的云存储网络还能够提供安全性,因为该内容是客户端之间的端到端加密,而存储提供者无权访问加密密钥。Filecoin作为IPFS之上的激励层,能够为任意数据提供存储基础架构。它尤其适用于扩散数据、构建和运行分布式应用程序以及实现智能合约。

这篇文章内容主要包括:

(a)介绍Filecoin网络,给出这个协议的概述,同时详细的逐步解释几个组件。

(b)将分布式存储网络(DSN)方案及其属性正式化,然后像DSN一样构建Filecoin。

(c)介绍一个新类型的存储证明方案--复制证明,它允许证明任何数据副本都存储在物理独立的存储中。

(d)介绍一个新颖的基于顺序复制证明和存储作为激励度量的有用共识机制。

(e)将可验证市场正式化并构建两个市场--存储市场和检索市场,它们分别管理如何向Filecoin写入数据和从Filecoin读取数据。

(f)讨论Filecoin使用案例,怎么连接其他系统以及如何使用这个协议。

备注:Filecoin是一项正在进行的工作。正在对其进行积极的研究,这篇论文的最新版本会发布在 https://filecoin.io。如有意见和建议,请发送电子邮件至[email protected]与我们联系。

目录

1  介绍                                                                                                           

      1.1  基本组成部分                                                                                                                       

      1.2  协议概述                                                                                                                             

      1.3  论文组织结构   

2  分布式存储网络的定义

     2.1  容错系统

     2.2  属性                                                                                                                                                                                

3  复制证明和时空证明

     3.1  目的 

     3.2  复制证明  

     3.3  时空证明 

     3.4  PoRep和PoSt实际应用

     3.5  在Filecoin的用法                                                                              

4  Filecoin:一个DSN 架构 

     4.1  设置

     4.2  数据结构 

     4.3  协议 

     4.4  保证和要求                                                                                                                                  

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

     5.1  可验证市场

     5.2  存储市场 

     5.3  检索市场                                                                                                                                                                           

6  有用的共识         

     6.1  目的

     6.2  Filecoin共识                                                                                                                                                                           

7  智能合约

     7.1  Filecoin中的合约

     7.2  与其他系统集成      

8  未来工作   

     8.1  正在进行的工作 

     8.2  开放性问题

     8.3  证明和形式验证                                                                                                                                                                    

1  介绍

Filecoin是一种协议代币,它的区块链运行在名为时空证明的新型证明机制中,其中由存储数据的矿工创建区块。通过独立存储提供商,Filecoin协议提供数据存储和检索服务,而不依赖于单一的第三方作担保。在这一过程中:

  1. 用户为数据存储和检索支付代币
  2. 存储矿工提供存储来获得代币
  3. 检索矿工通过提供数据来获得代币

1.1 基本组成部分

Filecoin协议建立在四个新颖的组件之上。

1. 去中心化存储网络(Decentralized Storage Network (DSN)):

我们提供一个由独立存储和检索服务的独立服务提供商网络的的抽象(在第二节) 。接着,我们提出了Filecoin协议作为激励,可审计和可验证的DSN构建(在第四节)。

2. 新型的存储证明:

我们提出两种新型的存储证明(在第三节):

(1)复制证明( Proof-of-Replication)允许存储提供商证明数据已复制到其自己的专用数据物理存储设备上。执行唯一的物理副本,使验证者能够检查证明者是否不存在将多个数据副本重复数据拷贝到同一存储空间。

(2)时空证明(Proof-of-Spacetime)允许存储提供商证明他们在指定的时间内存储了一些数据。

3. 可验证市场:

我们将存储请求和检索请求作为订单,将其建模为由Filecoin网络运营的两个分散的可验证市场(在第五节)。在正确提供服务时,验证市能确保执行付款。在存储市场和检索市场中,矿工和客户能够分别提交存储订单和检索订单。

4. 有用的工作量证明(Proof-of-Work):

我们将展示如何基于可用于共识协议的时空证明来构建有用的工作量证明。矿工们不需要花费大量算力来“挖矿”,而必须在网络中存储数据。

1.2 协议概述

  • Filecoin协议是一个建立在区块链和具有原始代币的去中心化存储网络。客户花费代币来存储数据和检索数据,而矿工们通过提供存储和检索数据来赚取代币。

  • Filecoin DSN 分别通过两个可验证市场处理存储和检索请求:存储市场和检索市场。客户为所要求的服务设置价格,矿工为所提供的服务设置价格,并向市场提交他们的订单。

  • 市场由Filecoin网络运营,该网络采用时空证明(Prooof-of-Spacetime)和复制证明(Proof-of-Replication)来保证矿工正确存储他们承诺存储的数据。

  • 最后,矿工能参与新区块的创造。矿工对下一个区块的影响与他们当前在网络中使用的存储量成正比。

图1是Filecoin协议的骨架,使用了在论文后面定义的术语,图2是Filecoin协议的一个例子。

1.3 论文组织机构

本文的其余部分安排如下。我们在第2节中介绍了理论上的DSN方案的定义和要求。在第3节中,我们定义和提出在Filecoin中使用的复制证明和时空证明协议,通过这些协议以加密方式验证数据是否按照所做的交易进行连续存储。第4节描述Filecoin DSN的具体实例,描述数据结构,协议和各参与者的交互。第5节定义并描述了可验证市场的概念,已经它们的实现--存储市场和检索市场。第6节描述了使用Proof-of-Spacetime协议进行演示,并评估矿工对网络的贡献,这对扩展区块链和区块分配奖励是必需的。第7节简要介绍了Filecoin中的智能合约。最后,第8节我们将讨论的未来工作。

FileCoin白皮书翻译_第1张图片

FileCoin白皮书翻译_第2张图片

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

我们引入去中心化存储网络(DSN)的概念。DSNs聚合由多个独立的存储商提供的存储,并通过自协调方式向客户端提供数据存储和数据检索服务。协调是去中心化的,不需要受信任的第三方:通过不同协议协调和检查各缔约方执行的操作,实现系统的安全。DSNs可以采用不同的协调策略,包括“拜占庭协议”、“Gossip协议”或者CRDTs,选择哪个协议取决系统的需要。随后,在第四节,我们提供了Filecoin DSN的结构。

定义 2.1.  

DSN方案( \prod_{}^{})是由存储提供商和客户端运行的协议元组:(Put, Get, Manage)

  • Put(data)→ key : 在唯一的标识符密钥下,客户端执行Put协议来存储数据。
  • Get(key)→ data:  客户端执行Get协议来检索当前使用密钥存储的数据。
  • Manage(): 参与者网络通过Manage协议来协调管理:控制可用存储、审核一些供应商提供服务并修复可能的故障、管理协议由存储提供商。管理协议由存储提供程序运行,通常与客户端或审计师网络一起运行。                                                       

DSN方案( \prod_{}^{})必须保证数据的完整性和可检索性。以及容忍一下各节中定义的管理和存储故障。

2.1 故障容错

2.1.1 管理错误

我们把管理错误定义为由参与者在管理协议中引起的拜占庭错误。DSN方案依赖于其潜在管理协议的容错性。违反对管理错误的容错假设可能会影响系统的活跃度和安全性。

例如,DSN方案二的管理协议就需要利用拜占庭协议(BA)来审计存储提供商。在这样一种协议下,网络接收存储提供商的存储证明,并运行BA来确认这些证明的有效性。如果BA允许n个节点中出现最多 f个故障,那么我们的DSN能够容忍f< n/2故障节点。在违反这些假设的情况下,审计工作可能需要做出妥协。

2.1.2 存储错误

我们将存储错误定义为阻止客户端检索数据的拜占庭错误。例如,存储矿工丢失他们的数据,检索矿工停止他们的服务。一个成功的Put操作定义是(f,m)-容错,即是它的输入数据被存储在m个独立的存储提供商(总共有n个)中,并且它可以容忍最多f个拜占庭存储提供商。参数f和m取决于协议的实现。协议设计者可以修改f和m的值,或者留给用户自己修改。将Put(data) 扩展为Put(data,f,m)。如果有小于f个故障存储提供者,则对存储数据的Get操作是成功的。

例如,考虑一个简单的方案。它的Put协议设计为每个存储提供者存储所有的数据。在这个方案里,m=n,并且f=m-1。但总是f=m-1吗,不一定的,有些方案可能采用可擦除式设计(erasure coding),其中每个存储提供者存储数据的特定部分,这样使得m个存储供应商中的x个需要检索数据,在这种场景下f=m-x。

2.2 属性

我们首先描述DSN体系所必须的两个属性,然后描述Filecoin DSN体系需要的另外的一些其他属性。

2.2.1 数据完整性

该属性要求不存在一个敌对节点A能够说服客户在执行Get命令后去接受那些被更改了的或被伪造的数据。

定义 2.2

一个DSN方案(Π)提供了数据完整性:如果在使用密钥k的情况下,对数据d任意成功的Put操作,那就不存在敌手A能使得客户接受d',因为使用密钥k执行Get命令后得到的d和d'不相同。

2.2.2 可恢复性

该属性满足了以下要求:给定我们Π中的容错假设,如果有些数据已经成功存储在Π中并且存储提供者继续遵循协议,那么客户最终能够检索到数据。

定义 2.3

一个DSN体系(Π)提供可恢复性:如果利用密钥成功执行Put命令,将数据得以保存,那么也会存在用户使用相同的密钥成功执行Get命令,得到想要的副本数据。(这个定义并不保证每次Get操作都能成功,如果每次Get操作最终都能返回数据,那这个方案是公平的)。

2.3 其他属性

DSNs可以提供特定于其应用程序的其他属性。我们定义了Filecoin DSN所需要的三个关键属性:公开可验证性、可审查性和激励兼容性。

定义2.4

一个DSN方案(Π)是公开可验证的:对于每个成功的Put操作,存储网络的存储提供者可以生成数据当前正在被存储的证明。这个存储证明一定能说服任何只拥有私钥却没有数据的有效验证者。

定义2.5

一个DSN方案(Π)是可审查的:如果它产生了可验证的操作轨迹,那么在未来它被审查,可以证明在数据的有效时间内对数据的存储确实是真正的存储了。

定义2.6

一个DSN方案(Π)是激励可兼容的:如果存储提供者由于成功提供了存储数据和检索数据的服务而获得激励,或者因为作弊而得到惩罚。所以存储提供者的明智策略就是去好好存储数据。

3 复制证明与时空证明

在Filecoin网络,存储提供者必须让他们的客户相信,客户所付费的数据已经被他们存储。在实践中,存储提供者将生成"存储证明"(POS)给区块链网络(或客户自己)来验证。在本小节,我们介绍和概述在Filecoin中所使用的“复制证明”n (PoRep)和“时空证明”(PoSt)实现方案。

3.1 动机

存储证明(POS)方案,比如“数据持有性验证”(PDP)[2]和“可恢复性证明”(PoR)[3,4]方案。它允许一个将数据外包给服务器(即证明人P)的用户(即验证者V)可以反复检查服务器是否依然存储数据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]

定义3.1

PoRep方案使有效的证明者P能够使验证者V确信P正在存储副本R,副本R是某些数据D的物理独立副本,同时也是P中唯一的副本。PoRep协议包含下边多项式时间算法:(Setup, Prove, Verify)

PoRep.Setup(1λ, D) → R, SP , SV , 其中SP和SV是P和V的方案特定的设置变量,λ是一个安全参数。PoRep.Setup用来生成副本R,并且给予P和V必要的信息来运行PoRep.Prove 和 PoRep.Verify。一些方案可能要求证明人或者是有互动的第三方去运算PoRep.Setup。

PoRep.Prove(SP , R, c) → πc,其中c是验证人V发出的随机验证, πc是证明人产生的可以访问数据D的特定副本R的零知识证明。

PoRep.Prove由P(证明人)为V运行,给V(验证者)生成πc。

PoRep.Verify(Sv , c, πc) → {0, 1},用来检测证明是否是正确。PoRep.Verify由V运行,并说服V自己相信P已经存储了R。

3.3时空证明

存储证明(POS)方案允许用户在挑战(challenge)期间,检查存储提供者存储的外包数据是否正处于保存中。我们如何使用POS方案去证明数据在一定时间内一直处于被存储的呢?这个问题的答案就是,用户要不断地重复给存储提供者发起挑战。然而每次交互所需要的通信复杂度会成为系统(如Filecoin系统)的一个瓶颈,因为存储提供者被要求提交他们的证明到区块链网络。

为了回答这个问题,我们介绍了新的证明,“时空证明”,它可以让验证者检查存储提供商是否在一段时间内存储了他/她的外包数据。这对提供者的直接要求是:(1)生成顺序的存储证明(在我们的例子里是“复制证明”)来作为确定时间的一种方法 (2)递归地组合执行,从而产生一个简短的证明。

定义3.2

*(时空证明)PoSt方案使得有效的证明人P能够说服一个验证者V相信P在一段时间t内一直存储着一些数据D。PoSt包含下边多项式时间算法:?(Setup, Prove, Verify)

PoSt.Setup(1λ,D)->Sp,Sv,其中SP和SV是P和V的特定方案的设置变量,λ是一个安全参数。PoSt.Setup用来给予P和V必要的信息来运行PoSt.Prove 和 PoSt.Prove。一些方案可能要求证明人或者是有互动的第三方去运算PoSt.Setup。

PoSt.Prove(Sp , D, c, t) → πc,其中c是验证人V发出的随机挑战, πc是证明人在一段时间内可以访问数据D的的证明。PoSt.Prove由P(证明人)运行,并生成πc给V(验证者)。

PoSt.Verify(Sv , c, t, πc) → {0, 1},用来检测证明是否正确。PoSt.Verify由V运行并说服V自己相信P在一段时间内一直存储数据D。

 

3.4 PoRep和PoSt实际应用

我们感兴趣的是PoRep和PoSt的应用构建,可以应用于现存系统而不是依赖于可信任的第三方或者硬件。我们给出了PoRep的一个构建(请参见基于密封的复制证明[5]),它在Setup过程中需要一个非常慢的顺序计算密封的执行来生成副本。PoRep和PoSt的协议草图在图4给出,Post的底层体系的证明步骤在图3中。

3.4.1 构建加密区块

1.防碰撞散列: 我们使用一个防碰撞的散列函数:CRH : {0, 1}*?→ {0, 1}O(λ)?。我们还使用了一个防碰撞散列函数MerkleCRH,它将字符串分割成多个碎片,构造出二叉树并递归应用CRH,然后输出树根。

2.zk-SNARKs(零知识证明): 我们的PoRep和PoSt的实际实现依赖于零知识证明(zk-SNARKs)[6,7,8]。因为zk-SNARKs是简洁的,所以证明信息简短并且很容易验证。更正式地,定义L为NP语言,C为L的决策回路。一个可信任的参与方执行一次setup时会产生两个公共密钥:证明密钥pk和验证密钥vk。证明密钥pk使任何(不可信)的证明者都能产生证明π,对于她选择的实例x,x∈L。非交互式证明π是零知识和知识证明。任何人都可以使用验证密钥vk验证证明π。特别是zk-SNARK的证明可公开验证:任何人都可以验证π,而不与产生π的证明者进行交互。证明π具有恒定的大小,并且可以被及时验证,即验证π在|x|中是线性的。

一个zk-SNARKs要满足C的多项式时间算法的元组是:(KeyGen, Prove, Verify)

KeyGen(1λ,C)→ (pk, vk),输入安全参数λ和C,KeyGen产生概率样本pk和vk。这两个密钥作为公共参数发布,可在Lc?上用于证明/验证。

Prove(pk, x, w) → π 在输入pk、x和NP声明见证w下,证明人执行Prove产生一个非交互的证明π,用来证明x ∈ Lc?这句话。

Verify(vk, x, π) → {0, 1} 当输入vk,输入x和证明 π,如果满足x ∈ Lc?,则验证者执行Verify输出1。

我们建议感兴趣的读者参看[6,7,8]对zk-SNARK系统的正式介绍和实现。

通常而言这些系统要求KeyGen是由可信任参与方来运行。关于可扩展的计算完整性和私密性(SCIP)系统的新工作[9]显示了避免这个初始步骤的有希望的方向,因此才做出上面的信任假设。

3.4.2 封装操作(Seal)

封装操作的作用是(1)通过要求证明者存储其公钥唯一的D的伪随机置换,来强制副本是物理上独立的副本,从而执行存储n个副本时,n个独立副本将被存储于磁盘空间中(因此是副本存储大小的n倍)和(2)在执行PoRep.Setup的时候,强制生成副本的时间要大大的长于预计响应挑战的预期时间。有关密封操作的更正式定义,请参见[5]。上述的操作可以用Sealτ?τAES?256?来实现,并且τ使得Sealτ?τAES?256?需要花费比诚实的“挑战-证明-验证”顺序多10-100倍的时间。请注意,对τ的选择是重要的,这使得运行Sealτ?τAES?256?比证明人随机访问R花费更多时间显得更加明显。

3.4.3 PoRep构建实践

本节描述PoRep协议的构建,并总结了一个已在图4包括了的简单协议草图。实现和优化的细节略过了。

创建副本 Setup算法通过封装Seal算法生成一个副本并提供证明。证明人生成副本并将输出(不包括副本R)发送给验证者。


你可能感兴趣的:(IPFS,#,Filecoin,区块链)