深圳市龙华区振华时代广场1201
18188600188

IPFS|Filecoin中的存储和检索交易是什么?

  Filecoin网络由分布在全球各地的数百个存储提供者组成。内容寻址和加密存储证明验证了数据在矿工的硬件上长期正确安全地存储,从而创造了一个强大可靠的服务。

  Filecoin 上的数据

  在Filecoin上存储文件,用户必须首先在其本地Filecoin节点中导入文件。这一步会产生一个数据CID ——即内容标识符,描述该内容的唯一ID。之后,数据被传给矿工。

  将数据导入本地的Filecoin节点,可以通过lotus client import命令来完成。要记住所产生的数据CID(之后在本地节点上也可获取),因为以后从矿工那里检索数据时会用到。

  将数据导入本地节点后,用户需发起交易。这步通过lotus client deal命令来完成。该命令将一个数据CID作为输入,产生一个 Filecoin Piece ,并交互式引导用户完成存储交易流程。

  Filecoin Piece 是用户在Filecoin网络上存储数据的主要协商单位。Filecoin Piece 并没有特定的大小,而是以扇区大小为上限,受网络参数控制。如果一个 Filecoin Piece 大于矿工支持的扇区大小,它必须被分割成更多的碎片,以便每个碎片都适合一个扇区。

  Filecoin Piece
 

  每个 Filecoin Piece 是一个 CAR 文件,包含一个IPLD DAG,有对应的数据CID和piece CID。

  CAR 即 内容可寻址档案,每个 CAR 文件是一个 IPLD DAG 的序列化表示,即将其数据块串起来,再加上描述DAG图的头部信息(还有根CID )。

  当用户要在Filecoin网络中存储文件时,首先要用UnixFS制作文件的 IPLD DAG (这就是lotus client import命令的作用)。代表DAG根节点的哈希是一个IPFS风格的CID,称为 数据 CID 。

  UnixFS是一种基于protobuf的格式,用于描述IPFS中的文件、目录和软链接。在Filecoin中,UnixFS是文件格式标准,文件以此格式提交给Filecoin网络。

  所产生的 CAR 文件用额外的零位来补齐,以便使文件写为二叉merkle树。

  存储交易流程

  用户在 Filecoin 网络中通过交易存取数据。网络的参与者,包括矿工(供给方)和用户(需求方),通过存储交易和检索交易来与对方交互。

  存储交易的生命周期如下:

  1. 发现

  用户先确定矿工及其定价,即矿工为了接受交易而希望收到的每epoch(30秒)每GiB的价格,单位为attoFIL。目前,Filecoin中一笔交易的最短期限为180天。

  您可以通过 JSON RPC API 查询已同步的节点,列出所有当前活跃的矿工,使用 Filecoin.StateListMiners 方法。您可以根据矿工在网络中的信誉和能力进行选择。矿工的信誉指标还未进入 Filecoin 协议。

  当您选好矿工之后,可以用Filecoin.StateMinerInfo 方法来获取矿工的 PeerID ,用于在 libp2p 协议中来与对方建立安全连接。

  接下来,您可以用 Filecoin.ClientQueryAsk 方法获取一个带签名的 StorageAsk 。

  结果包括该矿工愿意接受的交易细节,如接纳的 Filecoin Piece 大小的范围和每GiB每epoch的价格。需要注意的是,提出与矿工的存储要求相匹配的存储交易,只是一个前提条件,但并不足以确保交易被接受 – 存储提供者可能会在之后运行自己的决策逻辑。

  2. 议价和数据发送

  在这一阶段,双方就交易条款达成协议,如交易成本、交易期限、交易起始时间等。然后,数据从用户发至矿工。

  3. 发布

  通过 PublishStorageDeals 消息在链上发布交易,使存储提供方对交易公开负责。

  4. 完成

  交易一旦在链上发布,就会被交给挖矿子系统 ,打包成扇区,随后封装 ,再不断地被证明可用。

  存储挖矿子系统确保 Filecoin 网络的数据由矿工有效保存,并且:

  参与 Filecoin 存储市场 ,承接用户数据,参与存储交易。

  参与 Filecoin 存储算力共识 ,验证和产出区块,让 Filecoin 区块链增长,并获得区块奖励。

  该系统监督以下进程:

  承诺新存储和注册新扇区

  为了在Filecoin中注册一个扇区,矿工必须对该扇区进行 封装 。_封装_过程需要大量计算,以证明的形式产生数据的唯一表示,即复制证明或 PoRep 。一旦证明生成,矿工会对其进行压缩,并将结果提交给区块链。这就证明矿工确实复制了他们同意存储的数据副本。

  证明存储持续可用,所有存储矿工需要持续提交链上证明,以验证扇区被完整存储。

  宣布存储故障和从故障中恢复,如果扇区所需的上述证明如果未成功提交,将导致故障,矿工会受到处罚。

  存储交易是在链上发布后,才会被激活和封装。这一点很重要,因为发布交易会将用户的资金锁定在链上托管。只有如此,在封存数据进扇区之后,矿工的收益才有保障。

  可以将在链上发布交易视为签署合同,将封装和激活交易视为开始做承诺的工作。

  从用户的角度来看,想要用 Filecoin 存储数据,交易大致经过以下几个阶段:

  交易入金,用户将资金锁入代管中

  检索交易流程

  检索交易与存储交易不同,使用支付通道,主要在链下完成。数据传输是按量计价的,用户在数据传输的过程中逐步向矿工支付费用。整个过程中,只有创建支付通道、兑换凭证,是涉及与 Filecoin 区块链交互的。

  整体流程如下:

  发现 – 用户找出拥有其所需数据的矿工,并向其索取检索报价详情 – 每字节价格、解封价格、付款间隔。

  设立支付通道 – 用户需要和矿工之间设立一个支付通道(如果还不存在的话)。

  数据传输与支付 – 矿工向用户发送数据,直到需要支付。当达到一定的阈值时,会要求进行支付处理,之后继续进行数据传输。根据矿工是否在他们的 区块存储 中拥有数据,他们可能需要首先 解封 数据 – 这是一个非常规和非瞬时的操作,这是存储交易一节中描述的 封装 的反向操作。

  此时用户还未获取完整数据。

  时空证明

  时空证明(PoSt)是矿工向 Filecoin 网络提交的证明,证明其正在继续为网络存储数据的唯一副本。

  目前,时空证明在 Filecoin 中以两种类型存在:

  WinningPoSt是奖励存储矿工对 Filecoin网络贡献的机制。

  在每个epoch开始时,一小部分存储矿工被选出来,每个矿工挖出一个新的区块。具体要求是,这些矿工提交指定扇区的压缩存储证明。每个成功创建区块的当选矿工都会获得FIL(区块奖励),以及向其他想在区块中包含信息的 Filecoin 参与者收取费用的机会。

  存储矿工如果在必要的时间窗口内没按要求做到,将失去生产区块的机会,但不会因为没产出区块而受到其他惩罚。

  WindowPoSt是 Filecoin 区块链对存储矿工做出的承诺进行审核的机制。

  每个存储矿工都应该维护他们的承诺扇区。这些扇区包含与用户达成的交易,或也可能为空。后者被称为承诺容量,也就是说,矿工可以做出容量承诺,用任意数据填充一个扇区,而非用户数据。维护这些扇区可以让存储矿工证明他们在代网络预留空间。

  每天被分成几个时间窗口。目前,有48个时间窗口,每个窗口持续30分钟(60个时代,因为一个时代等于30秒)。

  每个矿商的承诺部门被分成若干组,每组对应一个时间窗口。

  在一个时间窗口(30分钟)内,每个存储矿工必须提交该时间窗口内每个扇区的时空证明。这需要随时访问时间窗口的每个扇区,生成ZK snark-proof,并将连接块发布到filecoin区块链。通过这种方式,每24小时将至少对承诺储存的每个部门进行一次审计,并保存一份永久、可核实和公开的记录,以证明每个储存矿工的保守承诺。

  filecoin网络希望存储的数据能够持续可用。未能提交扇区的windowcast将导致失败,并且提供该扇区的存储矿工将受到惩罚。这有助于储存矿工的健康运营。