【Filecoin源碼倉庫全解析】第五章:檢索市場及檢索礦工

對不起,大家可能關注了一個愛拖更的公衆號...html

不過不拖更,可能這篇也不會有這麼多 猛料...git

歡迎你們來到第五章,通過前章 《【Filecoin源碼倉庫全解析】第四章:存儲需求方(用戶)的配置操做》的內容閱讀後,咱們應該對存儲需求方(用戶)的配置操做有了系統的瞭解,並在實踐中反過來驗證了第三章中所描述的存儲礦工挖取新塊的過程以及整個的生命週期。github

咱們將在這一章《【Filecoin源碼倉庫全解析】第五章:檢索服務(礦工)的配置操做》中介紹與存儲市場並駕齊驅而又息息相關的檢索市場,以及Filecoin體系中另外一重要角色:檢索服務(礦工) 的基本配置操做。shell

5.1 檢索市場

小編認爲,檢索市場協議在當下的互聯網環境中,是很是很是關鍵,且有潛力的,這也是Filecoin體系設計中的一大亮點。安全

爲何這麼說?bash

太遠的就不追溯了,一塊兒來看下,這兩天發生在咱們身邊,與咱們(公司或者我的)息息相關的事件:服務器

事件一:3月2日23點55分阿里雲出現大規模宕機故障

這種事這幾年好像愈來愈頻繁了,做爲一個感同身受的企業客戶(如下稱爲甲方),想吼一句:微信

若是有一次讓你從新上談判桌的機會,你願意嗎?網絡

你可能會在談判桌上看到一份這樣的不平等協議:架構

甲方重金購置XXX服務器或者XXX對象存儲服務以前,先凍結乙方一部分的抵押金,並同時委託其餘方爲甲方生成多副本數據冷存。檢索數據時,乙方出事了,宕機超過閾值了,甲方可無條件沒收抵押金,還有一堆丙丁戊方搶在乙方以前,第一時間當即爲您恢復副本數據,並繼續提供實時檢索服務。(小編猜想,Filecoin未公佈的Repair Miner角色設定正是爲了平衡這塊:你不幹,別人搶着幹,抵押金會分給最早幫助修復的朋友)

說到這裏:

是否是比差遣研發運維兄弟來得省心?

是否是比過後看阿里雲臉色來得到理賠更值得推崇?

是否是更能保障甲方的利益?

不知道你怎麼想,真有這種好協議,反正我是簽訂了...

你說巨頭們會不會改?

我以爲短期內(也多是十幾年)、體制難改革...

畢竟這是道人性題,和技術無關...

阿里雲作不到,

騰訊雲也作不到,

亞馬遜應該根本不Care...

但把人性和市場經濟研究透了的Filecoin,或許真作獲得...

事件二:感謝黑客0xDUDE讓咱們知道中國普通民衆的明文聊天記錄

情理之中,有數據黑產的利益驅動,有實力的黑客們都很難淡定

並且,以如今網民的平均素質,關於自身數據有多值錢這件事,大部分是意識不到的...

身處於目前互聯網體制下的巨頭們都創建在"網絡中間商"的基礎上,中間商賺的不只是差價,還有大量的用戶數據。

畢竟大部分投資人都比你精明,你就很差奇,那些年的補貼大戰,你們究竟燒錢是爲了爭奪什麼?領完紅包的你,到底是得了便宜,仍是被人套路?

咱們真的可以相信,中間商有意願,有能力善待網民的數據?

至少我不相信,大部分"被害人"不相信,協議實驗室更不相信...

不只不信,還設計了IPFS+Filecoin這套體系,畢竟 "請把你的髒手從個人隱私數據上拿開" 這件事總歸仍是有人帶頭作的,並且,還作得這麼認真且完全...

Filecoin的檢索市場則是其中最重要的一環:幫助數據確權和去中間商交易。

5.1.1 定位

看完慷慨激昂的,咱們來點內涵的:

正如Star Li在《Filecoin邏輯梳理及源代碼導讀》06小節所描述的同樣,Filecoin在協議層目前設計的模塊有:Hello協議,Storage協議以及Retrieval協議。(PS:小編通讀完一遍,以爲很棒,做者一樣花費了不少心血研究Filecoin源碼和架構,併爲你們梳理好了其中最爲重要的一些關鍵點,值得你們仔細閱讀。)

Retrieval協議用以規範檢索市場,負責文件檢索讀取等交易事務,與負責區塊同步的Hello協議和以前詳細介紹的Storage市場協議並駕齊驅,分別發揮不一樣的專屬職能(與存儲市場協議不一樣,檢索市場協議的實時併發響應要求更高,參與鏈上的事務會更少)。

5.1.2 職能

Filecoin體系下的檢索市場(Retrieval Marketing Protocol)是將來真正意義實現Web3.0目標的一個產品雛形。

Web3.0我理解爲:消滅網絡中間商,建造可信互聯網基礎設施,讓用戶真正擁有數據自主權,保障用戶身份安全以及數據交易。

5.2 實現程度

須要注意的是,協議實驗室目前在這塊的開發進度還處於比較早期,優先級並不如其餘模塊,僅支持檢索訂單的正常交易和數據響應,版本號也所以暫設爲0。

爲了搭建一個完善的檢索市場,已經部分實現的依賴功能有:

  • 鏈下支付通道的Actor擴展
  • 基於libp2p的檢索服務
  • 鏈上內容尋址接口
  • 節點客戶端的相關命令行操做

下面將分別介紹每一個子模塊的細節:

5.3 鏈下支付通道的Actor擴展

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,
    }
}

複製代碼

5.4 基於libp2p的檢索服務

在第三章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
)

複製代碼

5.5 鏈上內容尋址

內容尋址是延用了IPFS協議的設計思想,即我只關心我所要檢索的內容,並不關心底層路由系統和網絡連接,系統默認會以最優的線路和速度幫我獲取。與現有HTTP路徑尋址的方式呈現根本的不一樣,更具創新性。

Filecoin的檢索市場也是使用內容尋址,而且會根據區塊鏈上記錄的信息來匹配對應存儲了該內容的礦工ID集合(保證數據確權),而後解析成peerID和multiaddress,交給底層libp2p來負責網絡路由和創建傳輸連接。接口定義以下:

type ChainContentRouting interface {
	FindProvidersAsync(ref Cid, count int) <-chan pstore.PeerInfo
}
複製代碼

5.6 命令行操做

目前V0版本的節點客戶端設計集成關於檢索市場協議的三個命令行功能操做(可是小編親測的客戶端Demo,在工程上實現與設計有一些出入),這三個功能分別是:

5.6.1 經過CID檢索數據內容

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)
複製代碼

5.6.2 根據CID查看被檢索數據的全部檢索報價

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.
複製代碼

5.6.3 經過礦工ID查詢該檢索礦工的信息

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.
複製代碼

5.6.4 案例

咱們試着檢索查詢一下,於 第四章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微信公衆號)

相關文章
相關標籤/搜索