对不起,大家可能关注了一个爱拖更的公众号...html
不过不拖更,可能这篇也不会有这么多 猛料...git
欢迎你们来到第五章,通过前章 《【Filecoin源码仓库全解析】第四章:存储需求方(用户)的配置操做》的内容阅读后,咱们应该对存储需求方(用户)的配置操做有了系统的了解,并在实践中反过来验证了第三章中所描述的存储矿工挖取新块的过程以及整个的生命周期。github
咱们将在这一章《【Filecoin源码仓库全解析】第五章:检索服务(矿工)的配置操做》中介绍与存储市场并驾齐驱而又息息相关的检索市场,以及Filecoin体系中另外一重要角色:检索服务(矿工) 的基本配置操做。shell
小编认为,检索市场协议在当下的互联网环境中,是很是很是关键,且有潜力的,这也是Filecoin体系设计中的一大亮点。安全
为何这么说?bash
太远的就不追溯了,一块儿来看下,这两天发生在咱们身边,与咱们(公司或者我的)息息相关的事件:服务器
这种事这几年好像愈来愈频繁了,做为一个感同身受的企业客户(如下称为甲方),想吼一句:微信
若是有一次让你从新上谈判桌的机会,你愿意吗?网络
你可能会在谈判桌上看到一份这样的不平等协议:架构
甲方重金购置XXX服务器或者XXX对象存储服务以前,先冻结乙方一部分的抵押金,并同时委托其余方为甲方生成多副本数据冷存。检索数据时,乙方出事了,宕机超过阈值了,甲方可无条件没收抵押金,还有一堆丙丁戊方抢在乙方以前,第一时间当即为您恢复副本数据,并继续提供实时检索服务。(小编猜想,Filecoin未公布的Repair Miner角色设定正是为了平衡这块:你不干,别人抢着干,抵押金会分给最早帮助修复的朋友)
说到这里:
是否是比差遣研发运维兄弟来得省心?
是否是比过后看阿里云脸色来得到理赔更值得推崇?
是否是更能保障甲方的利益?
不知道你怎么想,真有这种好协议,反正我是签订了...
你说巨头们会不会改?
我以为短期内(也多是十几年)、体制难改革...
毕竟这是道人性题,和技术无关...
阿里云作不到,
腾讯云也作不到,
亚马逊应该根本不Care...
但把人性和市场经济研究透了的Filecoin,或许真作获得...
情理之中,有数据黑产的利益驱动,有实力的黑客们都很难淡定。
并且,以如今网民的平均素质,关于自身数据有多值钱这件事,大部分是意识不到的...
身处于目前互联网体制下的巨头们都创建在"网络中间商"的基础上,中间商赚的不只是差价,还有大量的用户数据。
毕竟大部分投资人都比你精明,你就很差奇,那些年的补贴大战,你们究竟烧钱是为了争夺什么?领完红包的你,到底是得了便宜,仍是被人套路?
咱们真的可以相信,中间商有意愿,有能力善待网民的数据?
至少我不相信,大部分"被害人"不相信,协议实验室更不相信...
不只不信,还设计了IPFS+Filecoin这套体系,毕竟 "请把你的脏手从个人隐私数据上拿开" 这件事总归仍是有人带头作的,并且,还作得这么认真且完全...
Filecoin的检索市场则是其中最重要的一环:帮助数据确权和去中间商交易。
看完慷慨激昂的,咱们来点内涵的:
正如Star Li在《Filecoin逻辑梳理及源代码导读》06小节所描述的同样,Filecoin在协议层目前设计的模块有:Hello协议,Storage协议以及Retrieval协议。(PS:小编通读完一遍,以为很棒,做者一样花费了不少心血研究Filecoin源码和架构,并为你们梳理好了其中最为重要的一些关键点,值得你们仔细阅读。)
Retrieval协议用以规范检索市场,负责文件检索读取等交易事务,与负责区块同步的Hello协议和以前详细介绍的Storage市场协议并驾齐驱,分别发挥不一样的专属职能(与存储市场协议不一样,检索市场协议的实时并发响应要求更高,参与链上的事务会更少)。
Filecoin体系下的检索市场(Retrieval Marketing Protocol)是将来真正意义实现Web3.0目标的一个产品雏形。
Web3.0我理解为:消灭网络中间商,建造可信互联网基础设施,让用户真正拥有数据自主权,保障用户身份安全以及数据交易。
须要注意的是,协议实验室目前在这块的开发进度还处于比较早期,优先级并不如其余模块,仅支持检索订单的正常交易和数据响应,版本号也所以暂设为0。
为了搭建一个完善的检索市场,已经部分实现的依赖功能有:
下面将分别介绍每一个子模块的细节:
Filecoin的交易市场将承载大量的实时交易,所以,订单撮合和支付渠道被设计为链下事务,同时在将来,除了使用FIL做为支付媒介,还将使用比特币、以太坊等其余跨链支付方案做为支持。下面是支付通道的相关源码结构:
//通道ID
type ChannelID *big.Int
//区块高度
type BlockHeight *big.Int
//签名
type Signature []byte
//支付收据
type SpendVoucher struct {
Channel ChannelID
Amount *TokenAmount
Sig Signature
}
type PaymentBroker interface {
//用以建立微支付通道
CreateChannel(target Address, eol BlockHeight) ChannelID
//用以更新微支付通道金额数量
Update(channel ChannelID, amt *TokenAmount, sig Signature)
//用以关闭微支付通道
Close(channel ChannelID, amt *TokenAmount, sig Signature)
//用以增长资金
Extend(target Address, channel ChannelID, eol BlockHeight)
//用以收回未使用的资金
Reclaim(target Address, channel ChannelID)
}
// 生成收据信息
func MakeSpendVoucher(ch ChannelID, amt *TokenAmount, sk PrivateKey) *SpendVoucher {
data := concatBytes(ch, amt)
sig := sk.Sign(data)
return &SpendVoucher{
Channel: ch,
Amount: amt,
Sig: sig,
}
}
复制代码
在第三章3.2节中,咱们介绍了检索矿工(Retrieval miners)的角色和职能:比较像内容分发网络CDN的做用,负责“就近”检索和抓取数据,使得更快更好地把数据文件直接经过P2P连接,传输给需求方用户。
而在IPFS和Filecoin的体系下,不光大文件的传输,全部的协议通讯基本都是经过P2P的方式。而这一切都被封装在libp2p模块之中,而libp2p的职责就是负责节点以前的网络发现,协议通讯,数据传输和响应。
检索服务很大程度上也是依赖于libp2p的,在V0版本下的检索市场实现中,基于libp2p,新加了两个与业务强相关的服务功能:
1)基于libp2p的检索消息的响应特征
type RetDealProposal struct {
//被检索数据的CID
Ref Cid
//支付金额
Price TokenAmount
//检索订单的支付通道
Payment PaymentInfo
}
type ResponseStatus uint
const (
Unset = ResponseStatus(iota)
Accepted
Rejected
Error
)
type RetDealResponse struct {
//响应体包括状态码和数据详细信息
Status ResponseStatus
Message string
}
复制代码
2)基于libp2p的检索矿工报价查询响应特征
type RetQuery struct {
//按数据CID信息进行查询请求
Piece Cid
}
type RetQueryResponse struct {
//响应体包括状态码和最低报价
Status RetQueryStatus
MinPrice TokenAmount
}
type RetQueryStatus uint
const (
Unset = RetQueryStatus(iota)
OK
PieceUnavailable
)
复制代码
内容寻址是延用了IPFS协议的设计思想,即我只关心我所要检索的内容,并不关心底层路由系统和网络连接,系统默认会以最优的线路和速度帮我获取。与现有HTTP路径寻址的方式呈现根本的不一样,更具创新性。
Filecoin的检索市场也是使用内容寻址,而且会根据区块链上记录的信息来匹配对应存储了该内容的矿工ID集合(保证数据确权),而后解析成peerID和multiaddress,交给底层libp2p来负责网络路由和创建传输连接。接口定义以下:
type ChainContentRouting interface {
FindProvidersAsync(ref Cid, count int) <-chan pstore.PeerInfo
}
复制代码
目前V0版本的节点客户端设计集成关于检索市场协议的三个命令行功能操做(可是小编亲测的客户端Demo,在工程上实现与设计有一些出入),这三个功能分别是:
USAGE
filecoin retr get <piece-cid> - Retrieve a piece from a miner.
SYNOPSIS
filecoin retr get [--price=<amt>] [--miner=<peerID>] [--] <piece-cid>
ARGUMENTS
<piece-cid> - Content ID of piece to retrieve.
OPTIONS
--price string - Amount of filecoin to offer for this data.
--miner string - Optional Peer ID of miner to connect to. (If unspecified, the chain routing service will be used)
复制代码
USAGE
filecoin retr lookup <piece-cid> - Print a list of miners who have the given piece.
SYNOPSIS
filecoin retr lookup [--sort=<sorttype>] [--] <piece-cid>
ARGUMENTS
<piece-cid>... - Content ID of piece to find.
OPTIONS
--sort string - Output sorting scheme.
复制代码
USAGE
filecoin retr query <minerID> [<piece-cid>] - Query the given retrieval miner.
SYNOPSIS
filecoin retr query [--] <miner-id> [<piece-cid>]
ARGUMENTS
<miner-id> - ID of miner to query.
[<piece-cid>] - Optional cid of piece to query for.
复制代码
咱们试着检索查询一下,于 第四章4.2节 中所导入并成功被存储的文本数据 QmRxRSrZgFfRc...7s1o
来试试:
当存储订单的状态变为posted时,就能够进行被存储数据的检索响应了,须要矿工worker地址和对应数据CID信息:
go-filecoin retrieval-client retrieve-piece <minerAddress> <CID>
复制代码
此过程有必定网络时延,查询成功效果以下图所示:
至此,不管从定位职能,仍是从设计原理,仍是从工程操做角度,咱们应该对目前的Filecoin检索市场都有了更加深刻的了解。
咱们将在下一章《【Filecoin源码仓库全解析】第六章:如何组建多节点矿工集群》中介绍如何在一台机器上构建多节点的方案。
【Filecoin源码仓库全解析】第一章:搭建Filecoin测试节点 【Filecoin源码仓库全解析】第二章:如何建立帐户钱包并获取FIL Mock代币 【Filecoin源码仓库全解析】第三章(上):存储提供方(矿工)的配置操做
【Filecoin源码仓库全解析】第三章(下):存储提供方(矿工)的配置操做
【Filecoin源码仓库全解析】第四章:存储需求方(用户)的配置操做
深圳牛链科技有限公司 ,是一家专一存储类IPFS矿机研发、生产、销售、托管为一体的高科技企业。 目前技术团队包括IPFS硬件技术研发,IPFS协议研究,IPFS底层程序开发,IPFS应用程序研发,并在成都专门成立研发中心。2018年,研发中心团队在研究IPFS底层协议的基础上,开始搭建并运营IPFS高速网络系统,并正积极研发基于IPFS的网络应用。牛链科技的技术研发团队尽心尽力研究Filecoin的运行机制,优化矿场配置,做为一家区块链技术服务提供商,致力于为广大用户提供优质的信息技术服务。牛链但愿以技术驱动效率,为Filecoin落地提供基础设施。
感谢 深圳牛链科技有限公司 对嘉乐SOHO的原创内容提供支持。
本人从业经验有限,难免有不足之处,欢迎指正和更多讨论,可私信微信公众号:jialesoho,或者加我微信:daijiale6239,若是以为对您有帮助,能够帮点击好看推广和打赏支持噢,感激涕零!
(识别图中二维码,关注嘉乐SOHO微信公众号)