歡迎你們來到第四章,通過前章 【Filecoin源碼倉庫全解析】第三章(下):存儲提供方(礦工)的配置操做的內容閱讀後,咱們應該會對Filecoin市場機制中的礦工對象有了更詳細的認知,對礦工事務的生命週期有了具象化地理解。html
本章,咱們將重點介紹存儲需求方(用戶)的配置操做,並反過來驗證第三章中存儲礦工後續挖取新塊的過程,幫助你們融會貫通,並在工程上驗證整個挖礦行爲的生命週期。git
咱們在3.2章節中,描述了Filecoin體系下的各個身份和角色,其中,存儲客戶(Storage clients)定位爲想存儲數據的需求方用戶,也是Filecon所指望構建的雙邊市場中十分重要的一環,類比滴滴打車的乘車者。github
Filecoin存儲市場(上帝)將以公開透明的方式,搭建一個被記錄在鏈上的訂單池,供全部存儲需求方(客戶)選擇和匹配存儲提供方(礦工)。shell
在Filecoin存儲網絡之上,咱們須要先將所存數據導入自身Filecoin節點客戶端,並按照與IPFS很相似(應該是複用了)的處理流程進行了文件切片、散列處理和DAG創建,並生成子文件索引和內容ID(即:CID,在2.2章詳細介紹過)。json
echo "Hi my name is jialesoho"> jialesoho.txt
export CID=`go-filecoin client import ./jialesoho.txt`
# 反向驗證是否成功導入
go-filecoin client cat $CID
複製代碼
export CID=`go-filecoin client import ~/Desktop/your_test_img.jpg`
go-filecoin client cat $CID > image.png && open image.png
複製代碼
export CID=`go-filecoin client import ~/Desktop/your_test_video.mp4`
複製代碼
在3.5章節中,咱們模擬了礦工角色,併成功發送了ask訂單至Filecoin存儲市場之中,這裏,咱們再啓動一臺機器模擬用戶節點,對全網的Ask訂單池進行查詢,並根據存儲端(礦工)報價選擇交易對象:安全
go-filecoin client list-asks --enc=json | jq
複製代碼
執行上述命令,遍歷訂單池後,會獲得形以下方的json對象,解釋一下每一個字段意義:bash
{
"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
微信
當咱們在Ask訂單池上選定好心儀的訂單和礦工ID後,即可經過以下指令簽約了:網絡
go-filecoin client propose-storage-deal <miner> <data> <ask> <duration>
複製代碼
miner:心儀的礦工ID信息ide
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),分析了一些可能形成的緣由和解決方案,你們能夠對號入座試試:
用戶子彈不夠...天然沒法支付訂單...,請檢查餘額,或者不要傳太大的數據,注意單價是按照 byte (FIL/byte/block)來計算。
確保礦工節點在線,且是mining狀態。
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並不用暴露在交易市場中,提升了帳戶的安全性。
若是是devnet-user,小於單個扇區所分配的256MB便可。
go-filecoin mpool ls | xargs -L1 go-filecoin mpool rm
複製代碼
具體原因可追蹤此 issue:github.com/filecoin-pr…
當咱們使用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>
來查詢這筆訂單的鏈上憑證信息:
以下圖所示:
登陸Filecoin網絡儀表盤:user.kittyhawk.wtf:8010/
因爲在第一章中,咱們對存儲端礦工節點設置了心跳連接,存儲端礦工節點的數據信息會不間斷地同步至Filecoin全網監控儀表盤上:
搜索了一下jialesohoHK
,找到了咱們的存儲端礦工節點信息,值得關注得是StoragePower
與ProvenStorage
兩個參數此時都有了數值,咱們的存儲端礦工節點此時擁有了本身的算力:0.05%,即參與新塊的生成的權益機率爲萬分之五,此值計算與存儲量證實(Proof of Storage)邏輯強相關。
有機器資源多的朋友,能夠在測試過程當中增長存儲交易訂單成單量,從而拉高ProvenStorage
數值,進而提升StoragePower
算力,這樣,後續參與出塊的機率將大大增長。
同時,儀表盤也帶給了咱們許多其餘統計,例如:近30天,IPFSMain(星際大陸團隊)是測試礦工的主力軍(有資源真心好),而且算力增加集中在2月18-20號左右,出塊率提高顯著,爲優秀的中國礦工團隊點贊!
擴展:PoSt與PoRep的生命週期這塊還沒深挖,後面值得單獨開章節研究,這裏留個口子。
至此,咱們也經過工程操做,反向驗證了第三章中所描述的存儲礦工生命週期。
咱們將在下一章《【Filecoin源碼倉庫全解析】第五章:檢索服務(礦工)的配置操做》中介紹與存儲市場並駕齊驅而又息息相關的檢索市場,以及檢索服務(礦工)的基本配置操做。
【Filecoin源碼倉庫全解析】第一章:搭建Filecoin測試節點
【Filecoin源碼倉庫全解析】第二章:如何建立帳戶錢包並獲取FIL Mock代幣
【Filecoin源碼倉庫全解析】第三章(上):存儲提供方(礦工)的配置操做
【Filecoin源碼倉庫全解析】第三章(下):存儲提供方(礦工)的配置操做
本人從業經驗有限,難免有不足之處,歡迎指正和更多討論,可私信微信公衆號:jialesoho,或者加我微信:daijiale6239,若是以爲對您有幫助,能夠幫點擊好看推廣和打賞支持噢,感激涕零!
(識別圖中二維碼,關注嘉樂SOHO微信公衆號)