区块链研习社IPFS/filecoin技术架构分析区块链大学

filecoin技术架构分析之八:filecoin源码分析之协议

2019-03-05  本文已影响8人  杨尉

本文作者:先河系统杨尉;原创作品,转载请注明出处

目录

8.1 协议概览图

retrieval_protocol.png

8.2 源码信息

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
上一篇下一篇

猜你喜欢

热点阅读