本文作者:先河系统杨尉;原创作品,转载请注明出处
目录
8 filecoin源码协议层分析之检索协议
8.3.1 检索矿工
8.3.2 检索客户
8.1 协议概览图
8.2 源码信息
8.3 源码分析
8.1 协议概览图
retrieval_protocol.png
此概览图为当前源码的实现,整个检索的代码还没有完善
目前的逻辑比较简单,需要指定矿工、内容cid即可进行免费检索
8.2 源码信息
version
master分支 619b0eb1(2019年3月2日)
package
retrieval
location
protocol/retrieval
8.3 源码分析
8.3.1 检索矿工
package retrieval imports github.com/filecoin-project/go-filecoin/cborutil github.com/filecoin-project/go-filecoin/proofs/sectorbuilder gx/ipfs/QmTGxDz2CjBucFzPNTiWwzQmTWdrBnzqbqrMucDYMsjuPb/go-libp2p-net gx/ipfs/QmZNkThpqfVXs9GNbexPrfBbXSLNYeKrE7jwFM2oqHbyqN/go-libp2p-protocol gx/ipfs/QmbkT7eMTyXfpeyB3ZMxxcxg7XH8t6uXp49jqzz4HB7BGF/go-log gx/ipfs/Qmd52WKRSwrBK5gUaJKawryZQ5by6UbNB8KVW2Zy6JtbyW/go-libp2p-host io/ioutil constants // 定义检索协议: "/fil/retrieval/free/0.0.0" -retrievalFreeProtocol variables -log+Miner : struct [fields] // 矿工节点,参见minerNode -node : minerNode [methods] // 执行具体的检索服务 // 通过解析协议流数据,执行检索动作并返回 -handleRetrievePieceForFree(s inet.Stream) [functions] // 实例化检索矿工 // 设置处理免费检索的handle方法:handleRetrievePieceForFree +NewMiner(nd minerNode) : *Miner -minerNode : interface [methods] +Host() : host.Host +SectorBuilder() : sectorbuilder.SectorBuilder
8.3.2 检索客户
package retrieval imports constants // 检索内容大小限制 +RetrievePieceChunkSize +Client : struct [fields] -node : clientNode [methods] // 通过cid进行检索 // 通过协议流,发送检索请求以及接受检索回复和数据 +RetrievePiece(ctx context.Context, minerPeerID peer.ID, pieceCID cid.Cid) : io.ReadCloser, error [functions] // 实例化检索客户 +NewClient(nd clientNode) : *Client -clientNode : interface [methods] +Host() : host.Host
作者:杨尉
链接:https://www.jianshu.com/p/17ecdffb913d
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦