这篇博客文章从存储提供商(也称为矿工)和想要在Filecoin网络上存储数据的客户端的角度解释了Filecoin交易的工作方式。
查询数据时,本文中的技术说明使用JSON-RPC API与Filecoin网络进行交互。该API主要由应用程序使用。对使用者来讲,您可以使用用户友好的lotus命令行工具,该工具在后台使用JSON-RPC API。
一、介绍
Filecoin网络通过允许任何人作为存储提供商进行参与来实现规模经济。当前,该网络由遍布全球的数百家存储提供商组成。内容寻址和加密存储证明可验证数据会随着时间的推移正确而安全地存储在矿工的硬件上,从而创建了强大而可靠的服务。
这篇博客文章介绍了Filecoin两种交易的基本阶段,即存储交易和检索交易,并详细说明了它们的生命周期。还说明了用于验证系统参与者是否按照其承诺履行其职责的加密证明。
二、Filecoin上的数据
为了将文件存储在Filecoin上,客户端必须首先将其导入其本地Filecoin节点中。此步骤产生数据CID-内容标识符,即唯一描述内容的ID。后来,数据被传输到矿工。在Filecoin上存储文件的另一种方法是通过脱机交易,本文中不介绍。
可以使用以下lotus client
import命令将数据本地导入Filecoin节点。重要的是要记住生成的数据CID(以后在本地节点上也可以使用),因为以后必须使用它来从矿工那里检索数据。
将数据导入本地节点后,用户必须发起交易。这可以通过lotus client deal命令来完成。该命令将数据CID作为输入,生成Filecoin Piece,并以交互方式引导用户完成下面详述的存储交易流程。
该Filecoin 碎片是用户存储Filecoin网络上的数据主机。所述Filecoin 碎片没有设定特定尺寸,但受网络参数控制扇区大小,并且上限很大。如果Filecoin的碎片大于矿工支持的扇区的大小,则必须将其拆分成更多的片段,以使每个片段适合一个扇区。
一个Filecoin碎片是一个CAR含有文件IPLD DAG与它自己的数据/有效载荷CID和片CID。
CAR代表内容可寻址档案-一个CAR文件是任何的序列化表示IPLD DAG作为其块的级联,加描述在文件中的曲线图(与报头根CID)。
当客户想要存储Filecoin网络中的文件,它们通过产生开始IPLD DAG与文件的UnixFS(这是什么lotus client import命令一样)。代表DAG根节点的哈希是IPFS样式的CID,称为数据/有效负载CID。
UnixFS是一种基于protobuf的格式,用于描述IPFS中的文件,目录和符号链接。Filecoin使用UnixFS作为提交到Filecoin网络的文件的文件格式指南。
生成的CAR文件用额外的零位填充,以使该文件成为二叉merkle树。
三、仓储交易流程
用户可以通过交易将数据存储在Filecoin网络中并从Filecoin网络中检索数据。网络中的参与者,矿工(供应方)和客户端(需求方)通过存储交易和检索交易相互交互。
(一)存储交易生命周期
1.发现
客户识别矿工并确定他们当前的要价,即矿工为接受交易而希望收到的attoFIL中每GiB的价格(每纪元(30秒))(1 attoFIL等于10 ^ -18 * FIL)。目前,使用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 POSThttps://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子系统,打包成一个扇区,该扇区随后被密封,并随后被连续证明。
(二)存储挖掘子系统
Storage Mining子系统确保矿工可以有效地将存储提交到Filecoin网络,并且:
1.参加Filecoin存储市场,采取在客户端的数据,并参与到存储交易。
2.参加Filecoin存储功率共识,验证并生成区块以增长Filecoin区块链,并为此赚取区块奖励和费用。
它监督以下过程:
提交新存储并注册新部门
为了在Filecoin中注册一个部门,矿工必须密封该部门。密封是一个繁重的计算过程,它以证明形式(称为复制证明或PoRep)生成数据的唯一表示形式。一旦生成证明,矿工将其压缩并将结果提交给区块链。这是证明矿工确实已经复制了他们同意存储的数据的副本。
不断验证存储(请参见WindowPoSt)
每个存储矿工必须连续提交链上的证明,以证明他们继续存储自己的部门。
声明存储故障并从中恢复(请参阅故障)
未能提交给定部门的上述证明将导致错误,并将对矿工处以罚款。
(三)存储矿工和客户注意事项
如上所述,存储交易在活动和密封之前会在链上发布。这很重要,因为发布交易会将客户的资金锁定在托管链上。因此,矿工可以保证,如果他们确实将某个部门的数据封存,他们将获得报酬。
它有助于将在链上发布的交易视为签订合同,而将合同的达成和激活视为开始进行矿工承诺的工作。
从想要在Filecoin上存储数据的客户的角度来看,交易大致经历以下几个阶段:
1. 为交易提供资金-客户将资金锁定在第三方托管中
2. 向矿工提出协议
3.检查是否有意接受交易
4.将交易的数据传输到矿工-这是通过GraphSync协议完成的。GraphSync是用于在同级之间同步IPLD图的协议。它允许主机向远程对等体发出单个请求,以遍历远程对等体的本地IPLD图上的IPLD选择器。Lotus使用GraphSync协议的ipfs / go-graphsync实现。
5.检查是否接受-确保矿工已接受交易并在链上发布。
6.密封-交易正在进行中,矿工目前正在密封包含该交易的部门。
7. 有效-交易已密封且有效。从此以后,存储提供者/矿工应定期证明他们继续存储数据。有关更多详细信息,请参见下面的时空证明部分。
从通过存储客户数据向客户提供服务的矿工的角度来看,交易大致经历以下几个阶段:
1.验证交易-收到交易建议,并检查其参数(大小,价格等)
2.检查是否有锁定资金-确保客户已锁定资金并可以为交易付款。
3.等待数据-从客户那里接收交易数据。
4.连锁交易的抵押品
5.在链上发布交易
6.密封部门
7.激活交易-从此处开始,存储提供商/矿工会定期提交WindowPoSt证明,以证明他们正在不断存储数据。
四、检索交易流程
与存储交易不同,检索交易主要是通过付款渠道在链下进行的。数据传输是按计量的,并且客户在传输数据时以递增方式向矿工付款。创建支付渠道和兑换凭证是该过程中涉及与Filecoin区块链进行交互的唯一部分。
这是整个过程:
.发现-客户识别拥有所需数据的矿工,并向他们请求检索报价-每字节价格,未密封价格,付款间隔。
2. 付款渠道设置-客户在他们和矿工之间建立付款渠道(如果尚不存在)。
3. 通过付款进行数据传输-矿工将数据发送到客户,直到需要付款为止。当达到特定阈值时,请求付款处理,然后数据传输继续。取决于矿工是否具有在其中的数据块存储与否,他们可能需要首先开封它-一个非平凡和非瞬时操作,这是相反密封在有关存储交易的部分中描述。
客户端尚未成功检索数据的完整副本。
(一)时空证明
上面的部分浏览了许多细节,这些细节使Filecoin独树一帜,并为用户提供了数据的概率保证。本节涵盖Filecoin使用的两个证明,并解释它们如何适应协议以及解决的问题。
时空证明(PoSt)是一种过程,存储矿工可以通过该过程向Filecoin网络证明他们继续代表网络继续存储某些数据的唯一副本。
时空证明今天在Filecoin中表现为两个不同的品种:
1. 时空证明(WindowPoSt);
2.奖励证明(WinningPoSt)。
(二)奖励证明
奖励证明(WinningPoSt)是一种机制,通过这种机制,存储矿工可以为他们对Filecoin网络的贡献而获得奖励。在每个时期的开始,都会选举少量的存储矿工来为每个矿开采一个新的区块。为此,每个矿工的任务是为指定部门提交压缩的存储证明。每个成功创建区块的选举矿工都会获得FIL(区块奖励),并有机会向其他Filecoin参与者收取费用,以将消息包括在区块中。
未能在必要的窗口中执行此操作的存储矿工将丧失其开采区块的机会,但不会因此而受到惩罚。
(三)时空证明
时空证明(WindowPoSt)是一种机制,存储矿工的承诺由Filecoin区块链审核。
每个存储矿工都应保持其承诺的部门。这些部门包含与客户或空部门进行的交易。后者称为承诺容量,即,矿工可以做出容量承诺,用任意数据而不是客户数据填充一个扇区。维护这些扇区可以使存储矿工能够证明他们代表网络保留了空间。
每天分为一系列窗口,当前为48个窗口,持续时间为30分钟(60个周期,因为1个周期等于30秒)
每个存储矿工的保证扇区集都被划分为子集,每个窗口一个子集。
在给定的窗口(30分钟)内,每个存储矿工必须为各自子集中的每个扇区提交时空证明。这要求可以立即访问每个面临挑战的部门,并且将导致zk-SNARK证明作为块中的消息发布到Filecoin区块链。这样,在每个24小时内至少对每个保证存储部门进行一次审核,并保留永久,可验证的公共记录,以证明每个存储矿工的持续承诺。
在上图中,您可以看到示例矿工应在截止日期0(> 16TB),截止日期1(<8TB)和截止日期2(<8TB)内提交WindowPoSt证明,而他们的大多数部门都在截止日期0内提交。每个矿工的截止日期是随机的,并且对于该特定矿工,截止时间分别在纪元1635,纪元1695和纪元1755开始。您可以在SpaceGap工具上查看这些截止日期以及有关矿工的更多详细信息。
Filecoin网络期望存储数据的持续可用性。未能为某个扇区提交WindowPoSt将导致故障,并且将减少提供该扇区的存储矿工。这激励了存储矿工的健康行为。
(四)缺点
如果在证明期内未在Filecoin区块链中包含证明,则会导致故障,这是由于网络连接丢失,存储故障或恶意行为导致的。
当为某个扇区注册了故障时,Filecoin网络将大幅减少本应存储该扇区的存储矿工。也就是说,它将评估对矿工的惩罚(将由矿工所面临的抵押品支付),因为他们没有遵守其储存保证。
部门故障收费分为三种:
[if !supportLists]1. [endif]扇区故障费-在扇区处于故障状态时,每天按扇区支付此费用。费用的大小略大于该行业每天期望获得的大块奖励的金额。如果某个扇区连续两个星期仍存在故障,则该扇区将支付终止费并从连锁状态中删除。
[if !supportLists]2. [endif]部门故障检测费-如果矿工不诚实地报告故障,而是发生区块链发现未报告的故障,这是在发生故障时支付的一次性费用。考虑到PoSt支票的概率性质,这将设置为几天有望由特定部门获得的块奖励。
[if !supportLists]3. [endif]部门终止费-可以通过自动故障或矿工决定在其到期日期之前终止一个部门。收取终止费,原则上是等于一个部门迄今已赚取的收入,但要达到一定的上限,以免影响较长的使用寿命。
在Filecoin Spec网站上了解有关故障和经济性的更多信息。
五、结论
这篇文章涵盖了一些与在Filecoin上存储和检索数据有关的概念,客户和矿工为实现这一目的而参与的协议以及过程中涉及的各种证明和保证。
它从客户和矿工的角度详细说明了存储和检索交易的流程,以及在当事方之一行为不当的情况下Filecoin协议将要执行的处罚。
总而言之,它概述了Filecoin协议如何管理Filecoin网络以形成可靠且不受信任的分散式存储网络的一些基础。