浅谈Filecoin中的存储和检索交易
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 存储数据,交易大致经过以下几个阶段:
交易入金,用户将资金锁入代管中
向矿工提出 交易提议
检查意向来接受交易
数据传输给矿工来进行交易 ,这是通过GraphSync协议完成的。GraphSync是节点之间同步IPLD图的协议。该协议允许本地节点向远程节点发出请求,以获取在远程节点的IPLD图上按选择器搜索所得的结果。Lotus使用的是GraphSync协议的实现ipfs/go-graphsync。
检查是否接受 - 确保矿工已经接受了交易并在链上发布。
封装 - 交易已在链上,矿工正在封装包含交易的扇区。
激活 - 交易已被封存并处于活跃状态。从这里开始,存储提供商/矿工应定期证明他们继续存储数据。
从矿工的角度来看,通过存储用户的数据来提供服务,交易大致经过以下几个阶段:
验证交易 - 收到交易提议,并检查其参数(大小、价格等)。
检查是否有锁定资金 - 确保用户有锁定资金,可以支付交易。
等待数据 - 接收客户提供的交易数据。
为交易提供抵押 用于链上交易。
在链上发布交易上链。
封装扇区激活交易,存储提供者(矿工)定期提交WindowPoSt,证明他们在持续存储数据。
发现 - 用户找出拥有其所需数据的矿工,并向其索取检索报价详情 - 每字节价格、解封价格、付款间隔。
设立支付通道 - 用户需要和矿工之间设立一个支付通道(如果还不存在的话)。
数据传输与支付 - 矿工向用户发送数据,直到需要支付。当达到一定的阈值时,会要求进行支付处理,之后继续进行数据传输。根据矿工是否在他们的 区块存储 中拥有数据,他们可能需要首先 解封 数据 - 这是一个非常规和非瞬时的操作,这是存储交易一节中描述的 封装 的反向操作。
此时用户还未获取完整数据。
WindowPoSt
WinningPoSt
扇区故障费 :需由每个处于故障状态的扇区每天支付。该费用的大小略高于该扇区每天预计获得的区块奖励额。如果一个扇区连续2周以上处于故障状态,该扇区将支付终止费,并从区块链状态中移除。
扇区故障检测费:这是一次性支付的费用,如果该故障是由链上机制检测发现而非矿工诚实上报时收取。考虑到时空证明检查的概率性,该收费额设为对应扇区在若干天时间中的区块奖励。
扇区终止费:一个扇区可能因为故障或矿工主动而在到期日之前终止。收取的终止费原则上相当于一个扇区当前所产生的收益,且不超过一个限额,以免阻碍长时扇区。
声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。
-
【图说100问·Filecoin】第67问:FIL为什么要销毁?
2021-05-08 filecoin -
喧嚣过后复盘Filecoin:FIL6消失后的价格与生态走势
2021-05-06 filecoin -
【图说100问·Filecoin】第66问:Filecoin与BitTorrent等代表分布式存储项目的差别
2021-05-01 filecoin -
【大胆预测】5月Filecoin币价走势
2021-04-28 filecoin -
Filecoin网络目前总质押量约为6573万枚FIL
2021-04-26 filecoin