登录 注册
Filecoin(文件币)> Filecoin白皮书(第4章)

【译者:郭世清 toxotguo@gmail.com,版权归译者所有,未经许可,禁止转载】

4 Filecoin:DSN构建

Filecoin DSN是可升级,可公开验证和激励式设计的去中心化的存储网络。客户为了存储数据和检索数据向矿工网络付费。矿工提供磁盘空间和带宽来赚取费用。矿工只有在网络可以审计他们的服务是否正确提供的时候才会收到付款。

在本节中,我们介绍基于DSN的定义和”时空证明“的Filecoin DSN构建。

4.1 环境

4.1.1 参与者

任何用户都可以作为客户端、存储矿工和/或检索矿工来参与Filecoin网络。

  • 客户在DSN中通过Put和Get请求存储数据或者检索数据,并为此付费。

  • 存储矿工为网络提供数据存储。存储矿工通过提供他们的磁盘空间和响应Pug请求来参与Filecoin。要想成为存储矿工,用户必须用与存储空间成比例的抵押品来抵押。存储矿工通过在特定时间存储数据来响应用户的Put请求。存储矿工生成"时空证明”,并提交到区块链网络来证明他们在特定时间内存储了数据。假如证明无效或丢失,那存储矿工将被罚没他们的部分抵押品。存储矿工也有资格挖取新区块,如果挖到了新块,矿工就能得到挖取新块的奖励和包含在块中的交易费。

  • 检索矿工为网络提供数据检索服务。检索矿工通过提供用户Get请求所需要的数据来参与Filecoin。和存储矿工不同,他们不需要抵押,不需要提交存储数据,不需要提供存储证明。存储矿工可以同时也作为检索矿工参与网络。检索矿工可以直接从客户或者从检索市场赚取收益。

4.1.2 网络 N

我们将运行所有运行Filecoin全节点的所有用户细化为一个抽象实体:网络。该网络作为运行管理协议的中介。简单的说,Filecoin区块链的每个新块,全节点管理可用的存储,验证抵押品,审核存储证明已经修复可能的故障。

4.1.3 账本

我们的协议适用于基于账本的货币。为了通用,我们称之为“账本” L。在任何给定的时间t(称为时期),所有的用户都能访问Lt。当处于时期t的时候,账本是追加式的,它由顺序的一系列交易组成。Filecoin DSN协议可以在运行验证Filecoin的证明的任意账本上实现。在第六节中我们展示了我们如何基于有用的工作构建一个账本。

4.1.4 市场

存储需求和供给组成了两个Filecoin市场:存储市场和检索市场。这两个市场是两个去中心化交易所,这会在第5节中详细解释。简而言之,客户和矿工们通过向各自的市场提交订单来设定他们请求服务或者提供服务的订单的价格。交易所为客户和矿工们提供了一种方式来查看匹配出价并执行订单。如果服务请求被成功满足,通过运行管理协议,网络保证了矿工得到报酬,客户将被收取费用。

4.2 数据结构

碎片 碎片是客户在DSN所存储数据的一部分。例如,数据是可以任意划分为许多片,并且每片都可以有不同集合的存储矿工来存储。

扇区 扇区是存款矿工向网络提供的一些磁盘空间。矿工将客户数据的碎片存储到扇区,并通过他们的服务来赚取令牌。为了存储碎片,矿工们必须向网络抵押他们的扇区。

分配表 分配表式衣柜数据结构,可以跟踪碎片和其分配的扇区。分配表在长辈的每个区块都会更新,Merkle根存储在最新的区块中。在实践中,该表用来保持DSN的状态,它使得在证明验证的过程中可以快速查找。更详细的信息,请参看图5。

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

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

抵押 抵押是像网络提供存储(特别是扇区)的承诺。存储矿工必须将抵押提交给账本,以便能在存储市场接受订单。抵押包括了抵押扇区的大小和存储矿工的存放的抵押品。

filecoin-图5.png

4.3 协议

在本节中,我们通过描述客户端、矿工和网络执行的操作来概述Filecoin DSN。我们在图7中介绍了Get和Pug协议的方法,和在图8中的管理协议。一个协议执行的示例如图6所示。图1是Filecoin协议概览。

4.3.1 客户生命周期

我们给出客户生命周期的概览:在第5节接下来的协议会做深度的解析。

  1. Put:客户将数据存储于Filecoin

    客户可以通过向Filecoin中的矿工支付令牌来存储他们的数据。第5.2节详细介绍了Put协议。

    客户通过Put协议向存储市场的订单簿提交投标订单。当找到矿工的匹配报价订单的时候,客户会将数据发给矿工,并且双方签署交易订单将其提交到存储市场订单簿。客户可以通过提交的订单来决定数据的物理副本数量。更高的冗余度会有更高的存储故障容忍度。

  2. Get:客户从Filecoin检索数据。客户可以通过使用Filecoin 令牌向存储矿工付费来检索任何数据。Get协议在第5.3节有详细描述。客户端通过执行Get协议向检索市场订单簿提交投标订单。当找到匹配的矿工报价订单后,客户会收到来自矿工的碎片。当收到的时候,双方对交易订单进行签名提交到区块链来确认交易成功。

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

我们给出一个非正式的挖矿周期概述。

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

    存储矿工通过在抵押交易中存放抵押品来保证向区块链提供存储。通过 Manage.PledgeSector ,抵押品被抵押一段期限是为了提供服务,如果矿工为他们所承诺提交存储的数据生成存储证明,抵押品就回返还给他们。如果存储证明失败了,一定数量的抵押品就会损失。他们设定价格并向市场订单簿提交报价订单,一旦抵押交易在区块链中出现,矿工就能在存储市场中提供他们的存储。

    Manage.PledgeSector • inputs:

    – current allocation table allocTable

    – pledge request pledge

    • outputs: allocTable'

  2. 接收订单:存储矿工从存储市场获取存储请求。他们设定价格并通关过Put.AddOrders向市场订单簿提交报价订单,一旦抵押交易出现在区块链中,矿工就能在存储市场中提供他们的存储。

    Put.AddOrders

    • inputs: list of orders O1..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 O1..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


  3. 密封:存储矿工为未来的证明准备碎片。

    存储矿工的存储切分为扇区,每个扇区包括了分配给矿工的碎片。网络通过分配表来跟踪每个存储矿工的扇区。当存储矿工的扇区填满了,这个扇区就被密封起来。密封是一种缓慢的顺序操作。将扇区中的数据转换成为副本,然后将数据的唯一物理副本与存储矿工的公钥相关联。在“复制证明”期间密封式必须的操作。如下所述在第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

  4. 证明:存储矿工证明他们正在存储所承诺的碎片(数据)。

    当存储矿工分配数据时,必须重复生成复制证明以保证他们正在存储数据(有关更多详细信息,请参看第3节)证明发布在区块链中,并由网络来验证。

    Manage.ProveSector

    • inputs:

    – miner public/private key pair M

    – sector index j

    – challenge c

    • outputs: a proof πPOS


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

我们给出一个非正式的挖矿周期概述。

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

    检索矿工设置价格并向市场订单簿增加报价订单,并通过向网络发送报价单来提供数据。

    Get.AddOrders

    • inputs: list of orders O1..On

    • outputs: none

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

    Get.MatchOrders

    • inputs:

    – the current Retrieval Market OrderBook

    – query order to match Oq

    • outputs: matching orders O1..On

  2. 发送:检索矿工向客户发送数据碎片。

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

    Put.SendPieces

    • inputs: – an ask order Oask

    – a bid order Obid

    – a piece p

    • outputs: a deal order Odeal signed by Mi

4.3.4 网络周期

我们给出一个非正式的网络操作概述。

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

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

Manage.AssignOrders

• inputs:

– deal orders O1deal..Ondeal

– allocation table allocTable

• outputs: updated allocation table allocTable'

  1. 修复:网络发现故障并试图进行修复

    所有的存储分配对于网络中的每个参与者都是公开的。对于每个块,网络会检查每个需要的证明都存在,检查它们是否有效,因此采取行动:

    Manage.RepairOrders

    • inputs:

    – current time t

    – current ledger L

    – table of storage allocations allocTable

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


    • 如果有任何证明的丢失或无效,网络会通过扣除部分抵押品的方式来惩罚存储矿工。

    • 如果大量证明丢失或无效(由系统参数Δfault定义),网络会认定存储矿工存在故障,将订单设定为失败,并为同样的数据引入新订单进入市场。

    • 如果所有存储该数据的存储矿工都有故障,则该数据丢失,客户获得退款。

filecoin-图6.png

4.4 担保和要求

以下是Filecoin DSN如何实现完整性、可检索性,公开可验证性和激励兼容性。

  • 实现完整性 数据碎片以加密哈希命名。一个Put请求后,客户只需要存储哈希即可通过Get操作来检索数据,并可以验证收到的数据的完整性。

  • 实现可恢复性 在Put请求中,客户指定副本因子和代码期望擦除类型。假设给定的m个存储矿工存储数据,可以容忍最多f个故障,则该方式是(f, m)-tolerant存储。通过在不同的存储提供商存储数据,客户端可以增加恢复的机会,以防存储矿工下线或者消失。

  • 实现公开可验证和可审核性 存储矿工需要提交其存储 (πSEAL, πPOST)的证明到区块链。网络中的任意用户都可以在不访问外包数据的情况下验证这些证明的有效性。另外由于这些证明都是存储在区块链上的,所以操作痕迹可以随时审核。

  • 实现激励兼容性 不正式的说,矿工通过提供存储而获得奖励。当矿工承诺存储一些数据的时候,它们需要生成证明。如果矿工忽略了证明就回被惩罚(通过损失部分抵押品),并且不会收到存储的奖励。

  • 实现保密性 如果客户希望他们的数据被隐私存储,那客户必须在数据提交到网络之前先进行加密。


filecoin-图7.png

filecoin-图8.png

关于我们

“因特链” 致力于打造国内最具前瞻性的区块链和跨链技术社区目前主要讨论的公有链项目有Cosmos、Polkadot、EOS、IPFS、Dfinity、Plasma、0xproject、KyberNetwork等。

公司

 联系我们

 浙江-杭州

 lipeng@chainx.org

【浙ICP备17025508号-1】