【Filecoin源碼倉庫全解析】第四章:存儲需求方(用戶)的配置操作

歡迎大家來到第四章,經過前章 【Filecoin源碼倉庫全解析】第三章(下):存儲提供方(礦工)的配置操作的內容閱讀後,我們應該會對Filecoin市場機制中的礦工對象有了更詳細的認知,對礦工事務的生命週期有了具象化地理解。

本章,我們將重點介紹存儲需求方(用戶)的配置操作,並反過來驗證第三章中存儲礦工後續挖取新塊的過程,幫助大家融會貫通,並在工程上驗證整個挖礦行爲的生命週期。

4.1 存儲需求方(用戶)

我們在3.2章節中,描述了Filecoin體系下的各個身份和角色,其中,存儲客戶(Storage clients)定位爲想存儲數據的需求方用戶,也是Filecon所期望構建的雙邊市場中十分重要的一環,類比滴滴打車的乘車者。

Filecoin存儲市場(上帝)將以公開透明的方式,搭建一個被記錄在鏈上的訂單池,供所有存儲需求方(客戶)選擇和匹配存儲提供方(礦工)。

4.2 導入數據資源並獲取CID

在Filecoin存儲網絡之上,我們需要先將所存數據導入自身Filecoin節點客戶端,並按照與IPFS很類似(應該是複用了)的處理流程進行了文件切片、散列處理和DAG建立,並生成子文件索引和內容ID(即:CID,在2.2章詳細介紹過)。

4.2.1 導入文本

echo "Hi my name is jialesoho"> jialesoho.txt

export CID=`go-filecoin client import ./jialesoho.txt`

# 反向驗證是否成功導入
go-filecoin client cat $CID

4.2.2 導入圖片

export CID=`go-filecoin client import ~/Desktop/your_test_img.jpg`

go-filecoin client cat $CID > image.png && open image.png

4.2.3 導入視頻

export CID=`go-filecoin client import ~/Desktop/your_test_video.mp4`

4.3 查看Ask訂單池

3.5章節中,我們模擬了礦工角色,併成功發送了ask訂單至Filecoin存儲市場之中,這裏,我們再啓動一臺機器模擬用戶節點,對全網的Ask訂單池進行查詢,並根據存儲端(礦工)報價選擇交易對象:

go-filecoin client list-asks --enc=json | jq

執行上述命令,遍歷訂單池後,會得到形如下方的json對象,解釋一下每個字段意義:

{

  "Miner": "fcqllepeqmcq9qnjff3rqfaz02ks8dvmandx4sa2d",//礦工ID
  "Price": "2.5",//價格,單位FIL/byte/block
  "Expiry": 588,//多少區塊高度後訂單過期
  "ID": 0,//同一個礦工ID可能具備多個Ask訂單,用ID區分
  "Error": null//
}

如果需要在終端中依賴礦工ID來進行control+F快速選定,建議直接鍵入go-filecoin client list-asks

4.4 選訂存儲協議

當我們在Ask訂單池上選定好心儀的訂單和礦工ID後,便可通過如下指令簽約了:

go-filecoin client propose-storage-deal <miner> <data> <ask> <duration>
  • miner:心儀的礦工ID信息
  • data:4.2中所存數據的CID信息
  • ask:同一個礦工ID可能具備多個Ask訂單,此數據在訂單池中可查
  • duration:持續存儲所經歷的區塊個數(平均30s一個新塊產生,一天有效期大約需2880個新塊)

注意:

  • 因爲是自己給自己灌數據,所以小編測試使用的是自己搭建的存儲礦工節點,minerID:fcqllepeqmcq9qnjff3rqfaz02ks8dvmandx4sa2d,對應節點名稱:jialesohoHK

  • 小編資源有限,儘量保證這臺機器(還是友商好心贊助的)能穩定在線,並將本節點所獲取的所有Mock FIL收益用以長期創建Ask訂單,便於大家可以直接接入測試,不需要再自己模擬一個存儲端(礦工)機器了(經濟下行,能幫大家省一些是一些)。

如下圖所示,若選定存儲協議成功,將直接更新訂單狀態爲accepted,並返回DealID

問題與勘誤

如上圖所示,大部分朋友可能會遇到:

Error: error creating payment: context deadline exceeded

這邊小編復現了這個場景,並針對這個問題,和一些熱心的讀者交流(感謝詹總,東方風來、chinmusic),分析了一些可能造成的原因和解決方案,大家可以對號入座試試:

1)檢查是否FIL金額足夠

用戶子彈不夠…自然無法支付訂單…,請檢查餘額,或者不要傳太大的數據,注意單價是按照 byte (FIL/byte/block)來計算。

2)檢查礦工節點狀態

確保礦工節點在線,且是mining狀態。

3)檢查P2P連接狀態

Filecoin體系中,節點網絡與IPFS節點網絡拓撲類似,每一個節點的鄰居集羣是有限的,通過彼此的鄰居來間接建立聯繫是很常見的,因此,很有可能礦工節點和用戶節點彼此並不直接相連,而需要吐槽的是,在測試網階段,官方建議我們在確保礦工節點在線的同時,也需要直接將兩個節點相連接

我們可以通過minerAddrsID來搜索礦工節點ID,並通過節點ID搜索其網絡地址multiAddrs,並直接建立P2P連接操作如下:

export peerID=`go-filecoin addresss lookup minerID`

export multiAddrs=`go-filecoin swarm findpeer $peerID`

go-filecoin swarm connect $multiAddrs

注意:

目前測試網的出塊收益是直接劃到worker礦工賬戶下的,而我們看到,通過剛纔上方描述的p2p連接過程,是可以通過worker礦工的minerAddrsID層層索引到對方節點的IP地址,這對於收益方是存在相當大的安全隱患。

這不,官方這段時間就做了如下調整,未來,將出塊收益直接劃到owner賬戶下,賬戶ID並不用暴露在交易市場中,提高了賬戶的安全性。

5)確保所存單份數據大小小於扇區容量

如果是devnet-user,小於單個扇區所分配的256MB即可。

6)清空消息池

go-filecoin mpool ls | xargs -L1 go-filecoin mpool rm

具體緣由可追蹤此 issue:https://github.com/filecoin-project/go-filecoin/issues/1965

4.5 發送數據並建立微支付通道

當我們使用go-filecoin client propose-storage-deal <miner> <data> <ask> <duration>接受訂單後,用戶節點將與存儲端礦工節點建立微支付傳輸通道(防止單點故障,儘可能保證雙方權益),即:傳輸百分之多少的piece數據,才支付對應百分之多少的FIL金額,這種微支付過程相當於把一手交錢一手交貨這件事又做到了極致,拆分得更細小了,一直到最終整個文件傳輸完成。我們可以來看一下微支付中每個細分Payments的接口實現:

type Payments interface {
    //建立每個pieceID所對應的微支付事務
    Setup(target Address, piece Cid, value TokenAmount) ID
    //生成鏈上支付憑證
    MakeVouchers(id ID, start, end BlockHeight, count int) []Voucher
    //異常後恢復支付憑證
    RedeemVoucher(v Voucher, proof Proof)
}

同時,爲了防止女巫攻擊,Filecoin中節點與節點之間的數據傳輸,也會使用到IPFS中的bitswap模塊(信用分系統)來過濾惡意節點和作弊節點

之後,存儲端礦工節點會在一定時間間隔(可配置,默認爲120秒)自動啓動密封(seal)過程,即:獲取之前微支付通道中暫存區域的所有數據,並將其密封到礦工的承諾存儲區域中。此時,訂單狀態將轉爲staged。 注意,此過生成PoRep和PoSt的生成,比較耗存儲端礦工機器資源:

在密封完成並且礦工在鏈上生成憑證信息後,訂單狀態將移至posted

我們可以通過go-filecoin client query-storage-deal <dealID>來查詢訂單狀態,也可以通過go-filecoin client payments <dealID>來查詢這筆訂單的鏈上憑證信息:

如下圖所示:

4.6 在儀表盤中回看存儲端狀態

登錄Filecoin網絡儀表盤:http://user.kittyhawk.wtf:8010/

由於在第一章中,我們對存儲端礦工節點設置了心跳鏈接,存儲端礦工節點的數據信息會不間斷地同步至Filecoin全網監控儀表盤上:

搜索了一下jialesohoHK,找到了我們的存儲端礦工節點信息,值得關注得是StoragePowerProvenStorage兩個參數此時都有了數值,我們的存儲端礦工節點此時擁有了自己的算力:0.05%,即參與新塊的生成的權益概率爲萬分之五,此值計算與存儲量證明(Proof of Storage)邏輯強相關。

有機器資源多的朋友,可以在測試過程中增加存儲交易訂單成單量,從而拉高ProvenStorage數值,進而提高StoragePower算力,這樣,後續參與出塊的概率將大大增加。

同時,儀表盤也帶給了我們許多其他統計,例如:近30天,IPFSMain(星際大陸團隊)是測試礦工的主力軍(有資源真心好),並且算力增長集中在2月18-20號左右,出塊率提升顯著,爲優秀的中國礦工團隊點贊!

擴展:PoSt與PoRep的生命週期這塊還沒深挖,後面值得單獨開章節研究,這裏留個口子。


至此,我們也通過工程操作,反向驗證了第三章中所描述的存儲礦工生命週期。

我們將在下一章《【Filecoin源碼倉庫全解析】第五章:檢索服務(礦工)的配置操作》中介紹與存儲市場並駕齊驅而又息息相關的檢索市場,以及檢索服務(礦工)的基本配置操作。

參考文獻:

往期系列文章回顧:

【Filecoin源碼倉庫全解析】第一章:搭建Filecoin測試節點
【Filecoin源碼倉庫全解析】第二章:如何創建賬戶錢包並獲取FIL Mock代幣
【Filecoin源碼倉庫全解析】第三章(上):存儲提供方(礦工)的配置操作
【Filecoin源碼倉庫全解析】第三章(下):存儲提供方(礦工)的配置操作

本章贊助品牌:

礦世大陸:一家專業的製造IPFS智能挖礦設備科技企業,提供智能硬件的設計、開發、製造及OEM 生產服務,同時滿足客戶在挖礦環節的配套需求,提供輕錢包支持、POC 礦池支持、存證算力合約平臺支持、礦場託管等綜合性服務。爲企業級客戶提供整套商業模式輸出、運營指導、市場指導、市值管理、商業落地方案,提供專屬挖礦軟件開發,系統維護、ERC20代幣制作、錢包開發、POC礦池開發、算力合約平臺開發等區塊鏈礦業技術開發服務。公司總部位於華中地區最大的城市武漢,擁有最成熟完整的產業供應鏈,我們的服務輻射全球,用戶遍及世界。我們置身於區塊鏈革命的第一線,投身IPFS生態建設,我們堅信IPFS將爲世界帶來更好的上網體驗,創造更大的商業價值。

感謝 礦世大陸(http://www.ksminer.com/)嘉樂SOHO的原創內容提供支持。

聯繫作者:

本人從業經驗有限,不免有不足之處,歡迎指正和更多討論,可私信微信公衆號:jialesoho,或者加我微信:daijiale6239,如果覺得對您有幫助,可以幫點擊好看推廣打賞支持噢,感激不盡!

(識別圖中二維碼,關注嘉樂SOHO微信公衆號)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章