Filecoin如何进行存储和检索交易

本篇文章从存储提供商(也称为矿工)和想要在 Filecoin 网络上存储数据的客户的角度解释了 Filecoin 交易是如何运作的。

本文中的技术解释在查询数据时使用 JSON-RPC API 与 Filecoin 网络交互。此接口主要由应用程序使用。作为用户,您可以使用用户友好的 lotus 命令行工具,它在幕后使用 JSON-RPC API。

介绍

Filecoin 网络允许任何人作为存储提供商参与,从而实现规模经济。目前,该网络由遍布全球的数百家存储提供商组成。内容寻址和加密存储证明可验证数据随时间的推移是否正确且安全地存储在矿工的硬件上,从而创建了强大可靠的服务。

本篇文章涵盖了 Filecoin 中两类交易的基本阶段,即存储交易和检索交易,并详细介绍了它们的生命周期。还解释了用于验证系统中的参与者是否根据其承诺履行其职责的加密证明。

Filecoin 存储的数据

为了将文件存储在 Filecoin 上,客户端必须首先将它们导入其本地 Filecoin 节点。此步骤生成数据 CID 内容标识符,唯一描述内容的 ID。随后,数据被转移到矿工手中。在 Filecoin 上存储文件的另一种方式是通过离线交易,本文没有讨论这一点。

可以使用 lotus client import 命令将数据本地导入到 Filecoin 节点。记住结果数据 CID(稍后也可以在本地节点上使用)很重要,因为它必须用于以后从矿工那里检索数据。

将数据导入本地节点后,用户需要发起交易。这可以使用 lotus client Deal 命令来完成。该命令将数据 CID 作为输入,生成一个 Filecoin Piece,并以交互方式引导用户完成下面详细描述的存储交易流程。

Filecoin Piece 是协商用户存储在 Filecoin 网络上的数据的主要单位。Filecoin Piece 不是特定大小,而是由扇区大小(由网络参数控制)的上限。如果 Filecoin Piece 大于矿工支持的扇区的大小,则必须将其拆分成更多的 Piece,以便每个 Piece 都适合一个扇区。

Filecoin如何进行存储和检索交易

Filecoin Piece 是包含 IPLD DAG 的 CAR 文件,该 IPLD DAG 具有自己的数据/有效载荷 CID 和 Piece CID。

CAR 代表内容可寻址档案,CAR 文件是任何 IPLD DAG 的序列化表示,作为其块的串联,加上描述文件中图形的头(带有根CID)。

当客户端希望在 Filecoin 网络中存储文件时,他们首先使用 UnixFS 生成文件的 IPLD DAG(这就是lotus client import命令所做的)。表示 DAG 根节点的散列是 IPFS 样式的 CID,称为数据/有效负载 CID。

UnixFS 是一种基于协议的格式,用于描述 IPFS 中的文件、目录和符号链接。UnixFS 在 Filecoin 中用作提交到 Filecoin 网络的文件格式指南。

生成的 CAR 文件用额外的零位填充,以便该文件生成二进制 Merkle 树。

存储交易流程

用户可以通过交易在 Filecoin 网络中存储数据和检索数据。网络中的参与者,矿工(供应方)和客户(需求方),通过存储交易和检索交易进行互动。

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

1. 发现

客户识别矿工并确定他们的当前要求,即每 epoch(30秒)的每 GiB 价格。在attoFIL(1 attoFIL等于10^-18*FIL)中,矿工希望收到以接受交易。目前,Filecoin 中的交易最短持续时间为 180 天。

通过使用 Filecoin.StateListMiners 方法查询同步节点的 JSON RPC API(出于测试目的,使用https://api.node.glif.io公共端点),可以列出所有当前活动的矿工:

curl-XPOST-H"Content-Type:application/json"\  --data '{ "jsonrpc": "2.0", "method": "Filecoin.StateListMiners", "params": [ null ], "id": 1 }' \  'https://api.node.glif.io' | jq{  "jsonrpc": "2.0",  "result": [    "f011303",    "f011092",    ...

您可能希望根据特定提供商在网络中的声誉或实力来决定。矿工的声誉指标还不是 Filecoin 协议的一部分,在本文中也没有涉及。

选择矿工后,您需要获取其 PeerID(例如,使用Filecoin.StateMinerInfo方法),以便通过 libp2p 协议与它们建立安全连接:

curl-XPOST-H"Content-Type:application/json"\  --data '{ "jsonrpc": "2.0", "method": "Filecoin.StateMinerInfo", "params": [ "f03274", null ], "id": 1 }' \  'https://api.node.glif.io' | jq{  "jsonrpc": "2.0",  "result": {    "Owner": "f03261",    "PeerId": "12D3KooWP5D9TmqC45i6L2e2qQHYcuxaUwPdYo6CzqUMVmFEH3N9",    ...

然后可以使用 Filecoin.ClientQueryAsk 方法查询签名的 StorageAsk。这将建立与所选矿工的直接 libp2p 连接,并请求存储报价:

curl-XPOSThttps://api.node.glif.io\     -H "Content-Type: application/json" --data-binary @- << EOF{  "jsonrpc": "2.0", "method": "Filecoin.ClientQueryAsk", "id": 1,  "params": [    "12D3KooWP5D9TmqC45i6L2e2qQHYcuxaUwPdYo6CzqUMVmFEH3N9",    "f03274"  ]}EOF​{  "jsonrpc": "2.0",  "result": {    "Price": "100000000000",    "VerifiedPrice": "100000000000",    "MinPieceSize": 256,    "MaxPieceSize": 34359738368,    "Miner": "f03274",    "Timestamp": 148031,    "Expiry": 1199231,    "SeqNo": 14  },  "id": 1}

结果包括该矿工愿意接受的交易细节,例如允许的 Filecoin Piece 大小范围和每 epoch 每 GiB 的价格。请注意,提出符合矿工存储要求的存储交易方案是前提条件,但不足以确保交易被接受,存储提供商稍后可能会运行自己的决策逻辑。

2. 协商和数据传输


在此阶段,双方就交易条款达成一致,如交易费用、交易期限、交易开始时间等。

然后将数据从客户端传输到矿机。

3. 发布


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

4. 切换

一旦交易在链上发布,它将被移交给 Storage Mining 子系统,以打包到一个扇区中,该扇区稍后会被封存,随后会不断得到证明。

Storage Mining 子系统

Storage Mining 子系统确保矿工可以有效地将存储提交到 Filecoin 网络,并且:

通过接收客户端数据和参与存储交易,参与Filecoin存储市场。参与Filecoin Storage Power Consensus,验证并生成数据块以发展 Filecoin 区块链,并因此而赚取数据块奖励和费用。

它监督以下过程:

提交新存储并注册新扇区

为了在 Filecoin 中注册扇区,矿工必须封装该扇区。封装是一个计算量很大的过程,它以证明的形式生成数据的唯一表示形式,称为复制证明(Proof-of-Replication,简称PoRep)。一旦生成了证据,矿工就会对其进行压缩,并将结果提交给区块链。这是一份证明,证明该矿工确实复制了他们同意存储的数据副本。

持续证明存储(请参阅WindowPoST)

每个存储矿工都必须不断地在链上提交证明,以证明他们继续存储他们的扇区。

声明存储故障并从中恢复(请参阅故障)

未能提交上述特定扇区的证明将导致故障,矿工将受到处罚。

存储矿工和客户端注意事项

如上所述,存储交易在激活和封装之前在链上发布。这一点很重要,因为发布交易会将客户的资金锁定在链上的第三方托管中。因此,矿工保证,如果他们真的封存了某个扇区的数据,他们将获得报酬。

这有助于将在网上发布交易视为签署合同,并将封存和激活交易视为开始做矿工承诺的工作。
从希望在 Filecoin 上存储数据的客户的角度来看,交易大致经历了以下阶段:

为交易提供资金,客户将资金锁定在第三方托管中。向矿工提议一笔交易。检查是否有接受交易的意向。将交易数据传输到矿工,这是通过 GraphSync 协议完成的。GraphSync 是一种用于在对等体之间同步 IPLD 图的协议。它允许主机向远程对等点发出单个请求,以获取遍历远程对等点的本地 IPLD 图上的 IPLD 选择器的所有结果。Lotus 使用 GraphSync 协议的 ipfs/go-raphsync 实现。检查是否接受-确保矿工已经接受了交易,并将其发布在链上。Seal-Deal 处于连锁状态,Miner 目前正在封存包含该交易的一个扇区。有效,交易已封存并处于有效状态。从现在开始,存储提供商/矿工应定期证明他们将继续存储数据。更多细节请参见下面的时空证明部分。

从通过存储客户数据向客户提供服务的矿工的角度来看,这笔交易大致经历了以下几个阶段:

验证交易,接收交易建议书,并检查其参数(规模、价格等)。检查锁定的资金,确保客户已锁定资金,并且可以支付交易费用。等待数据,从客户接收交易数据。为链上交易质押抵押品。在链上发布交易。封装扇区。激活交易,从现在开始,存储提供商/矿工定期提交 WindowPoST 证明,证明他们在持续存储数据。

检索交易流程

检索交易与存储交易不同,检索交易大多是在支付渠道的推动下脱链进行的。数据传输是计量的,客户在传输数据时向矿工支付递增的费用。创建支付渠道和兑换代金券是这一过程中唯一涉及到与 Filecoin 区块链互动的部分。

这是整个过程:

发现,客户端识别拥有所需数据的矿工,并向他们请求检索报价,每字节价格、开封价格、付款间隔。支付渠道设置,客户在他们和矿工之间建立支付渠道(如果还不存在的话)。使用 Payment,Miner 进行数据传输,将数据发送到客户端,直到需要付款。当达到特定阈值时会请求支付处理,在此之后继续进行数据传输。根据矿工在其块存储中是否有数据,他们可能需要首先将其解封,这是一个非常重要且非即时的操作,这与关于存储交易一节中描述的封存相反。

客户端尚未成功检索数据的完整副本。

时空证明

上面几节简要介绍了使 Filecoin 独一无二并为用户提供数据概率保证的许多细节。本节介绍了 Filecoin 使用的两个证明,并解释了它们如何适应协议以及它们解决的问题。

时空证明(PoSt)是存储矿工可以向 Filecoin 网络证明他们代表网络继续存储某些数据的唯一副本的过程。
在如今的 Filecoin 中,时空证明有两种不同的表现形式:

Window Proof-of-Spacetime(WindowPoSt)Winning Proof-of-Spacetime(WinningPoSt)

Winning Proof-of-Spacetime

Winning Proof-of-Spacetime(WinningPoST)是一种奖励存储矿工对 Filecoin 网络做出贡献的机制。在每个时代之初,都会选出一小部分存储矿工,为每个矿分配一个新的区块。作为这样做的一项要求,每个矿工的任务是提交特定扇区的压缩存储证明。每个成功创建区块的当选矿工都会获得 FIL(区块奖励),并有机会向其他 Filecoin 参与者收取费用,以便在区块中包含消息。

在必要的窗口内未能做到这一点的存储矿工将丧失开采区块的机会,但不会因未能做到这一点而受到惩罚。

Window Proof-of-Spacetime

Window Proof-of-Spacetime(WindowPoST)是 Filecoin 区块链审核存储矿工承诺的机制。

每个存储矿工都应该维持其承诺的扇区。这些扇区包含与客户或空扇区达成的交易。后者被称为承诺产能,即矿工可以做出产能承诺,用任意数据填充一个扇区,而不是用客户数据。通过维护这些扇区,存储矿工可以证明他们正在代表网络预留空间。

每天被分成多个窗口,当前为 48 个窗口,持续时间为 30 分钟(60个周期,因为1个周期等于30秒)。

每个存储矿工的质押扇区集被划分为子集,每个窗口一个子集。

在给定的窗口(30分钟)内,每个存储矿工必须提交各自子集中每个扇区的时空证明。这需要随时访问每个受挑战的扇区,并将 ZK-snark 证明作为块中的消息发布到 Filecoin 区块链。通过这种方式,质押存储的每个部门在任何 24 小时内至少审计一次,并保留一份永久的、可核实的和公开的记录,以证明每个存储矿工的持续承诺。

Filecoin如何进行存储和检索交易

在上图中,您可以看到样本矿工应该在截止日期 0(>16TB)、截止日期 1(<8TB)和截止日期 2(<8TB)中提交 WindowPoSt 证明,其大部分扇区都在截止日期 0 内。每个矿工的截止日期是随机的,对于这个特定的矿工,分别从 epoch1635、epoch 1695 和 epoch 1755 开始。您可以在 SpaceGap 工具上查看这些截止日期和有关矿工的更多详细信息。

Filecoin 网络期望存储数据的持续可用性。未能提交扇区的 WindowPoSt 将导致故障,并且提供该扇区的存储矿工将被大幅削减。这激励了存储矿工的健康行为。

故障

如果由于网络连接中断、存储故障或恶意行为而导致网络连接中断、存储故障或恶意行为,则在证明期间内 Filecoin 区块链中未包含证明,则会发生故障。

当某个扇区出现故障时,Filecoin 网络将大幅削减本应存储该扇区的存储矿工;也就是说,它将评估对该矿工的处罚(从矿工提供的抵押品中支付),原因是他们未能履行其存储承诺。

扇区故障费有三种类型:

扇区故障费,当扇区处于故障状态时,每天按扇区支付此费用。这笔费用的规模略高于该扇区预计每天赚取块奖励收入。如果一个扇区连续两周以上仍然出现故障,该扇区将支付终止费,并被从链条状态中移除。扇区故障检测费,这是在发生故障时支付的一次性费用,前提是矿工不诚实地报告故障,而未报告的故障被区块链捕获。考虑到事后检查的概率性质,这被设定为相当于特定扇区预期赚取的几天的整体奖励。扇区终止费,扇区可以通过自动故障或矿工决定在到期日期之前终止。收取终止费,原则上是等于一个扇区迄今已赚取的收入,但要达到一定的上限,以免影响较长的使用寿命。

在 Filecoin Spec 网站上阅读更多关于故障及其经济方面的信息

结论

本篇文章涵盖了与在 Filecoin 上存储和检索数据相关的一些概念,客户和矿工为实现这一目标而参与的协议,以及在此过程中涉及的不同证明和保证。

它从客户和矿工的角度详细说明了存储和检索交易的流程,以及 Filecoin 协议将在其中一方行为不当的情况下执行的惩罚措施。

最后,概述了 Filecoin 协议如何管理 Filecoin 网络的一些基础,从而形成可靠且不可信的去中心化存储网络。

End

非常感谢您对 IPFS&Filecoin 项目的持续支持。我们很高兴继续与您一起,为人类信息建立一个强大的,去中心化和高效的基础。

FilCloud 帮你迅速了解 IPFS 领域的热点技术和应用公众号:filcloud

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)
   
验证码:
微信号已复制,请打开微信添加咨询详情!