對不起,你們可能關注了一個愛拖更的公衆號…
不過不拖更,可能這篇也不會有這麼多 猛料…
歡迎大家來到第五章,經過前章 《【Filecoin源碼倉庫全解析】第四章:存儲需求方(用戶)的配置操作》的內容閱讀後,我們應該對存儲需求方(用戶)的配置操作有了系統的瞭解,並在實踐中反過來驗證了第三章中所描述的存儲礦工挖取新塊的過程以及整個的生命週期。
我們將在這一章《【Filecoin源碼倉庫全解析】第五章:檢索服務(礦工)的配置操作》中介紹與存儲市場並駕齊驅而又息息相關的檢索市場,以及Filecoin體系中另一重要角色:檢索服務(礦工) 的基本配置操作。
5.1 檢索市場
小編認爲,檢索市場協議在當下的互聯網環境中,是非常非常關鍵,且有潛力的,這也是Filecoin體系設計中的一大亮點。
爲什麼這麼說?
太遠的就不追溯了,一起來看下,這兩天發生在我們身邊,與我們(公司或者個人)息息相關的事件:
事件一: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源碼倉庫全解析】第六章:如何組建多節點礦工集羣》中介紹如何在一臺機器上構建多節點的方案。
參考文獻:
- https://github.com/filecoin-project/specs/blob/master/retrieval-market.md
- https://github.com/filecoin-project/specs/blob/master/payments.md
往期系列文章回顧:
【Filecoin源碼倉庫全解析】第一章:搭建Filecoin測試節點
【Filecoin源碼倉庫全解析】第二章:如何創建賬戶錢包並獲取FIL Mock代幣
【Filecoin源碼倉庫全解析】第三章(上):存儲提供方(礦工)的配置操作
【Filecoin源碼倉庫全解析】第三章(下):存儲提供方(礦工)的配置操作
【Filecoin源碼倉庫全解析】第四章:存儲需求方(用戶)的配置操作
本章贊助品牌:
深圳牛鏈科技有限公司 ,是一家專注存儲類IPFS礦機研發、生產、銷售、託管爲一體的高科技企業。 目前技術團隊包括IPFS硬件技術研發,IPFS協議研究,IPFS底層程序開發,IPFS應用程序研發,並在成都專門成立研發中心。2018年,研發中心團隊在研究IPFS底層協議的基礎上,開始搭建並運營IPFS高速網絡系統,並正積極研發基於IPFS的網絡應用。牛鏈科技的技術研發團隊全力以赴研究Filecoin的運行機制,優化礦場配置,作爲一家區塊鏈技術服務提供商,致力於爲廣大用戶提供優質的信息技術服務。牛鏈希望以技術驅動效率,爲Filecoin落地提供基礎設施。
感謝 深圳牛鏈科技有限公司 對嘉樂SOHO的原創內容提供支持。
聯繫作者:
本人從業經驗有限,不免有不足之處,歡迎指正和更多討論,可私信微信公衆號:jialesoho,或者加我微信:daijiale6239,如果覺得對您有幫助,可以幫點擊好看推廣和打賞支持噢,感激不盡!
(識別圖中二維碼,關注嘉樂SOHO微信公衆號)