本章主要讲解怎样将数据通过存储矿工存储到fileocin网络中。

存储流程


FILECOIN是一个分散的存储市场,市场中有需求方—-数据存储方,也有服务方—-存储资源方(矿工),矿工提交ask order(要价单到订单簿中),存储方将数据导入,寻找矿工订单并指定存储到某个矿工中,系统创建支付处理订单,最后成交!(开发网络还没有订单撮合机制,所以需要指定存储矿工,正式网络肯定不是这样的存储模式,不然矿工都会疯狂刷单以提高自己的“算力”)

导入存储文件


在当前目录下创建一个文本文件 hello.txt,把你对filecoin的心声表露出来!haha

echo "Hello Filecoin, I am www.xjxh.io" > ./hello.txt 

导入文件

go-filecoin client import ./hello.txt

导入之后会返回一个文件的ID,后面存储的时候会用到此文件ID,所以把它设置为环境变量,以便后面读取

export CID=Qma5GaVhSRWq8YVYDYCFYtQmJTNZGVYf9kQ4GSrqMab8gZ

查看导入的文件内容

go-filecoin client cat ${CID}

导入图片或视频也是同样的步骤

go-filecoin client import ./Download/filecoin.jpg

导出图片并查看图片是否一致

go-filecoin client cat QmSphQ7aJFgeUgf56cBNtjTtYiyq2YBrjsoBeHzHHZv7jj > ./img.jpg

寻找订单并上传数据

数据导入后,就可以从网络中挑选矿工提交的可用的订单,需要手动选择提交给矿工。

查看所有的订单

go-filecoin client list-asks --enc=json | jq

你能看到网络中所有的订单信息,具体如下:

现阶段如果你知道矿工的挖矿地址,那你也可以直接查看该矿工的订单信息

go-filecoin client list-asks | grep fcqdzp28x8vnph7aedzw3pwlpwrnxjh77zayx75c5

根据订单信息选择一个订单,目前需要指定订单存储。目前矿工之间最大的区别只有价格,后面将加入其他影响因素。选择好订单之后我们就可以通过一下命令将文件传给矿工存储:

go-filecoin client propose-storage-deal <miner> <data> <ask> <duration>

四个参数代表的含义:

  • < miner > 要价单(ask order)中的矿工地址;
  • < data > 前面执行导入(import)文件时返回的 CID;
  • < ask > 要价单(ask order)中的ID,同一个矿工如果提交了多个ask order,这个ID值则不一样;
  • < duration > 数据存储时长,这个时长网络是根据区块数来体现;(每个区块间隔时间是30秒),例如你要存储一天,那你的存储时长 duration = 24H * 60 * 60 / 30 ,结果是2880 个block;

如果提交成功将会返回:Status: accepted 及 dealID;

  • 如果你的存储文件大于矿工可用的存储空间,交易将会失败;
  • 如果你的节点钱包余额不足以支付也将导致交易失败;

发送数据并支付


你的 propose-storage-deal 命令自动将支付交易所需的资金转移到存储矿工的支付渠道。付款的过程将在在交易的整个生命周期内定期向存储矿工发放付款。并不是一次性将支付的FILECOIN支付到矿工

你的数据从一开始自动传输到暂存区,然后矿工将您的文件存储在他们的机器上并开始密封/验证过程。

矿工某个时间间隔(默认为120秒)自动启动密封过程,以获取矿工暂存区域中的所有数据并将其密封到矿工的承诺存储区域中。此时交易状态将转为“暂存”。在密封完成并且矿工提交存储证明后,交易状态将移至“发布”。

检索数据


首先你必须得成功提交了你的存储数据,拿到dealID,小编在测试过程中也遇到了无法提交的错误,在github的issue中发现很多人也遇到了同样的问题,有兴趣的小伙伴可以关注下,目前这个bug官方也会在后面的迭代中解决!https://github.com/filecoin-project/go-filecoin/issues/1965

检索之前,你可以先查看交易状态,确定是否已经发布

go-filecoin client query-storage-deal <dealID>
  • dealID 是前面你提交存储数据交易时返回的ID

在确认交易已经发布之后,你就可以检索你的数据了

go-filecoin retrieval-client retrieve-piece <minerAddress> <CID>

参考文献


Storing on Filecoin

* 本博客的文章允许转载,必须注明:原文来自于个人博客:背着石头飞翔(pkblog.cc) 否则视为侵权!