科普 | Filecoin网络存储与检索运行机制
注:本文翻译自协议实验室最新博客。注意,将技术概念从一种语言完美地翻译到另一种语言是困难的。因此,并不能保证翻译的准确性。协议实验室博客原文链接如下:https://filecoin.io/blog/posts/how-storage-and-retrieval-deals-work-on-filecoin/
本篇文章从存储提供商(也称为矿工)和想要在Filecoin网络上存储数据的客户端的角度解释了Filecoin交易的工作方式。
查询数据时,本文中的技术说明使用JSON-RPC API与Filecoin网络进行交互。 该API主要被应用程序采用。 作为人类,您可以使用用户友好的Lotus命令行工具,该工具在后台使用JSON-RPC API。
简介
Filecoin网络通过允许任何人作为存储提供商参与来实现规模经济。 当前,该网络由遍布全球的数百家存储提供商(矿工)组成。 内容寻址和加密存储证明可验证数据是否随着时间的推移正确而安全地存储在矿工的硬件上,从而提供稳定可靠的服务。
本文介绍了Filecoin两种交易的基本阶段,即存储交易和检索交易,并详细说明了它们的生命周期。 还阐述了加密证明,用于验证系统参与者是否按照其承诺履行其职责。
Filecoin上的数据
为了将文件存储在Filecoin上,用户必须首先将其导入其本地Filecoin节点中。 此步骤产生数据CID-内容标识符,即唯一描述内容的ID。 后来,数据被传输到矿工。 将文件存储在Filecoin上的另一种方法是通过offline deals,本文未介绍。
可以使用Lotus client import命令将数据本地导入到Filecoin节点。 需要记住生成的数据CID(以后在本地节点上也可以使用),因为以后必须使用它从矿工那里检索数据。
将数据导入本地节点后,用户需要发起交易。 此步骤可以通过Lotus client deal命令来完成。 该命令将数据CID作为输入,生成Filecoin Piece,并以交互方式引导用户完成下面详述的存储交易流程。
Filecoin Piece是协商用户存储在Filecoin网络上的数据的主要单元。Filecoin Piece 没有特定大小,但受网络参数控制的扇区大小上限较大。 如果一个Filecoin Piece大于矿工支持的扇区的大小,则必须将其拆分成更多的片段,以使每个片段适合一个扇区。
一个Filecoin Piece是一个包含IPLD DAG的CAR文件,其IPD DAG具有自己的data/payload CID和 piece CID。
CAR代表内容可寻址地址-CAR文件是任何IPLD DAG的序列化表示,表示其块的级联,外加一个描述文件中图形的标头(带有root CID)。
当客户要在Filecoin网络中存储文件时,他们首先使用UnixFS生成文件的IPLD DAG(这就是Lotus client import命令的作用)。 代表DAG根节点的哈希是IPFS样式的CID,称为data/payload CID。
UnixFS是一种基于protobuf的格式,用于描述IPFS中的文件,目录和符号链接。 Filecoin使用UnixFS作为提交到Filecoin网络的文件的文件格式指南。
生成的CAR文件用额外的零位填充,以使该文件成为二叉树。
存储交易流程
用户可以通过交易将数据存储在Filecoin网络中并从Filecoin网络中检索数据。 参与者,矿工(供应方)和用户(需求方)通过存储交易和检索交易交互。
存储交易的生命周期如下:
1.识别
用户识别矿工并确定他们当前的要价,即矿工接受交易的而收到的attoFIL(1 attoFIL等于10 ^ -18 * FIL)中每GiB的价格(每纪元(30sec。))。 目前,使用Filecoin进行交易的最短期限为180天。
您可以使用Filecoin.StateListMiners方法通过查询同步节点的JSON RPC API(出于测试目的,使用https://api.node.glif.io公共节点)列出所有当前支持的矿工:
curl -X POST -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 -X POST -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 -X POST https://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片段大小范围和每个纪元每GiB的价格。 请注意,提出与矿工的存储需求相匹配的存储交易是前提条件,但不足以确保交易被接受-矿工稍后可能会有自己的决策逻辑。
2.谈判和数据传输
在此阶段,双方就交易条款达成协议,例如交易成本,交易持续时间,交易开始时间等。
然后用户传输数据给矿工。
3.消息发布
该交易通过PublishStorageDeals消息在链上发布,从而使矿工对交易公开负责。
4.交接
交易在链上发布后,将移交给Storage Mining子系统,打包到一个扇区,密封扇区,并随后连续验证。
存储挖矿子系统
存储挖矿子系统可以确保矿工有效地将存储提交到Filecoin网络,并:
1.通过接收客户数据并参与存储交易来参与Filecoin Storage Market 。
2.参与Filecoin Storage Power Consensus,,验证并生成区块以发展Filecoin区块链,并以此获得区块奖励和交易费用。
并监督以下过程:
提交新存储并产生新扇区
为了在Filecoin中生成一个扇区,矿工必须封装该扇区。 扇区封装是一个繁重的计算过程,它以证明形式(称为复制证明或PoRep)生成数据的唯一表示形式。 一旦生成证明,矿工将其压缩并将结果提交给区块链。 这是一份证明,表明矿工确实已复制了他们同意存储的数据的副本。
持续验证存储(请参见WindowPoSt)
每个存储矿工必须持续提交链上证明,以证明他们仍在存储自己的扇区。
声明存储故障并恢复(请参阅Faults)
未能提交给定扇区的上述证明将导致错误,并将对矿工处以罚款。
存储矿工和客户注意事项
如上所述,存储交易在确认时和封装之前会在链上发布。 这很重要,因为发布交易会将客户的资金锁定在托管链上。 因此,矿工可以保证确实将某个扇区的数据封存,以获得报酬。
这有助于将链上发布交易视为签定合同,将达成和开始交易视为矿工开始进行协议的工作。
从想要在Filecoin上存储数据的用户的角度来看,交易大致经历以下几个阶段:
- 为交易提供资金-用户将资金锁定在第三方托管中
- 向矿工提出协议
- 检查是否有意接受交易
- 将交易的数据传输给矿工-通过GraphSync协议完成。 GraphSync是用于在同级之间同步IPLD图的协议。 它允许主机向远程对等体发出单个请求,以获取远程对等体的本地IPLD图上的IPLD选择器的所有结果。 Lotus使用GraphSync协议的ipfs/go-graphsync实现。
- 检查是否接受-确保矿工已接受交易并在链上发布。
- 封装-交易已上链,矿工目前正在封装包含该交易的扇区门。
- 有效-交易已封装且有效。 从此以后,存储提供者/矿工应定期证明他们仍在继续存储数据。 有关更多详细信息,请参见下面的时空证明部分。
从通过存储客户数据向客户提供服务的矿工的角度来看,交易大致经历以下几个阶段:
- 验证交易-收到交易建议,并检查其参数(大小,价格等)
- 检查是否有锁定资金-确保客户已锁定资金并可以为交易付款。
- 等待数据-从客户那里接收交易数据。
- 链上质押
- 在链上发布交易
- 封装扇区
- 开始交易-从此处开始,存储提供商/矿工会定期提交WindowPoSt证明,以证明他们仍在不断存储数据。
检索交易流程
与存储交易不同,检索交易主要是通过付款渠道在链下进行的。 数据传输是按计量的,并且客户在传输数据时以递增方式向矿工付款。 创建支付渠道和兑换凭证是该过程中涉及与Filecoin区块链进行交互的唯一部分。
过程如下:
- 发现-客户识别拥有所需数据的矿工,并向他们请求检索报价-每字节价格,未封装价格,付款间隔。
- 付款渠道设置-在客户和矿工之间建立付款渠道(若尚未建立)。
- 通过付款进行数据传输-矿工将数据发送到客户,直到需要付款为止。 当达到特定阈值时,请求付款处理,然后数据传输继续。 根据矿工是否将数据存储在其block-store中,他们可能需要首先将其解封-非平常且非瞬时的操作,这与有关存储交易的部分中所述的封装过程相反。
客户尚未成功检索数据的完整副本。
时空证明
上面的部分阐述了许多细节,这些细节使Filecoin独树一帜,并为用户提供了数据的概率匹配保证。 本节涵盖Filecoin使用的两个证明,并解释它们如何适应协议以及解决的问题。
时空证明(PoSt)是一种过程,存储矿工可以通过该过程向Filecoin网络证明他们继续存储某些数据的唯一副本。
时空证明如今在Filecoin中表现为两个不同的种类:
- Window Proof-of-Spacetime (WindowPoSt) and
- Winning Proof-of-Spacetime (WinningPoSt)
Winning Proof-of-Spacetime
Winning Proof-of-Spacetime (WinningPoSt)是一种机制,通过这种机制,存储矿工可以为他们对Filecoin网络的贡献而获得奖励。 在每个阶段的开始,都会选举少量的存储矿工来开采一个新的区块。 为此,每个矿工的任务是为指定扇区提交压缩的存储证明。 每个成功创建区块的选举矿工都将获得FIL(区块奖励),并有机会向其他Filecoin参与者收取费用,以将消息打包在区块中。
未能在指定的Window中执行此操作的存储矿工将丧失其开采区块的机会,但不会因此而受到惩罚。
Window Proof-of-Spacetime
Window Proof-of-Spacetime(WindowPoSt)是一种机制,存储矿工的承诺,由Filecoin区块链进行审核。
每个存储矿工都应保持其pledged sectors.。 这些扇区包含为客户封装的扇区或空扇区进行的交易。 后者称为committed capacity,即矿工可以做出容量承诺,用任意数据而不是客户数据填充一个扇区。 维护这些扇区可以使存储矿工可证明其仍在存储数据。
一天分为很多windows,当前一天为48个window,每30分钟提交一次WindowPoSt(总共60个周期,因为1个周期等于30秒)
每个存储矿工的已封装扇区集都被分成子集,每个window一个子集。
在给定的Window时间(30分钟)内,每个存储矿工必须为各自子集中的每个扇区提交时空证明。 这要求可以立即访问每个面临挑战的扇区,并且将使得zk-SNARK证明作为块中的消息发布到Filecoin区块链。 这样,在每个24小时内至少对每个存储扇区进行一次审计,并生成矿工持续保存,可验证的公共记录,以证明每个存储矿工的工作。
如图,您可以看到示例矿工应该在deadlines 0(> 16TB),deadline 1(<8TB)和deadline 2(<8TB)的期限内提交WindowPoSt证明,而他们的大多数部门都在deadline 0内。 截至日期对于每个矿工,是随机分配的。对于某些特定矿工,分别在1635、1695和1755期开始。您可以在SpaceGap工具上检查这些截止日期和有关矿工的更多详细信息。
Filecoin网络重视数据存储的持续可用性。 因此未能为某个扇区提交WindowPoSt将导致故障,并且将削减提供该扇区的存储矿工。 这激励了存储矿工的健康行为。
Faults
如果在证明期内未在Filecoin区块链中包含证明,则会导致故障,这是由于网络连接丢失,存储故障或恶意行为导致的。
当为某个扇区申明故障时,Filecoin网络将大幅减少本应存储该扇区的存储矿工。 也就是说,它将评估对矿工的惩罚(将用矿工所的质押代币支付),因为其没有遵守其储存保证。
扇区故障惩罚分为三种:
- 扇区故障费-在扇区处于故障状态时,每天按扇区支付此费用。 费用的大小略大于该行业每天期望获得的出块奖励的金额。 如果某个扇区连续两个星期仍存在故障,则该扇区将支付终止费并作废。
- 扇区故障检测费-如果矿工不诚实报告故障,而是区块链发现未报告的故障,这是在发生故障时支付的一次性费用。 考虑到PoSt抽查的概率性质,惩罚总额为该扇区几天期望获得的块奖励。
- 扇区终止费-可以通过自动故障或矿工决定在其到期日期之前终止扇区。 收取终止费,原则上是等于一个扇区迄今已赚取的收入,但要达到一定的上限,以免影响较长的使用寿命。
访问Filecoin Spec网站了解更多信息 https://spec.filecoin.io/
结语
这篇文章涵盖了与在Filecoin上存储和检索数据有关的一些概念,客户和矿工为实现这一目的而参与的协议以及过程中涉及的各种证明和保证。
从客户和矿工的角度详细说明了存储和检索交易的流程,以及在当事方之一行为不当的情况下Filecoin协议将要执行的处罚。
总而言之,本文概述了Filecoin协议如何管理Filecoin网络以形成可靠且去信任的分布式存储网络的一些基础。