前言
IPFS以及FileCoin的白皮書知識量比較大,需要花費一些時間成本來學習。
下面先針對挖礦相關的知識進行研究,總結一下Filecoin中挖礦的流程以及相關概念。
What is Filecoin
IPFS(代表協議與技術)首發於2015年,基於IPFS而建立的激勵層: Filecoin(代表激勵層的分布式存儲網絡)。
Filecoin | IPFS | IPLD | libp2p |
---|---|---|---|
價值數據 | 應用數據 | 定義數據 | 傳遞數據 |
激勵/證券化 | 應用 | 對象/文件 | 路由/網路 |
What is Filecoin Mining
Filecoin是存儲挖礦,礦工根據其實際存儲了多少數據並向鏈上提交了復制證明從而獲得有效算力(有效存力),有效算力越高,礦工獲得區塊獎勵的概率越大。
算力越大的礦工,獲得區塊打包的權利或者概率越大,這里就有贏票率和出塊率的參數。贏票率就是贏得選票的概率,出塊率就是獲得區塊獎勵的概率。
與傳統PoW不一樣的是:
1. Filecoin網絡的角色更多,提供數據存儲或數據檢索都可以獲得收益
2. Filecoin有抵押挖礦機制,通過抵押代幣來約束礦工保持長期存儲
3. 獲得區塊獎勵也會有一部分放入鎖定的資金,完成存儲合同后才獲得所有獎勵
Filecoin Mining Process
相關名詞
-
數據封存:封存客戶提交的數據。須經過precommit和commit的過程(后續分析)。
-
復制證明:(Proof-of-Replication, 簡稱PoRep),挖礦者的自證。
-
有效存力:經網絡驗證的有效存儲。
-
贏票率:贏得打包出塊權的概率。
-
時空證明:(Proofs-of-Spacetime,簡稱PoST),挖礦者被驗證。
Tips: 復制證明和時空證明是FIlecoin的兩個關鍵共識機制。
需要注意的是:
- 生成復制證明獲得算力的過程與提交時空證明參與區塊打包是兩個獨立的過程。
- 一般來說有效算力越大,占全網算力占比越高,則贏票率(獲得打包權)越大,贏票率越大則出塊率越高,獲得區塊獎勵也就越多。
- 但是有效算力占比和出塊率並不是絕對對應的,當礦工的有效算力達到一定量級的時候,出塊才會相對穩定。
How The Hardware Works
挖礦主要配置的硬件構成如下:
硬件類型 | 硬件作用 | 選型要點 |
---|---|---|
CPU | 更快的完成數據封裝 | 僅考慮CPU的單一方案下,具備Hash計算指令的AMD處理器相對更優 |
RAM | 封裝32G/64G固定大小扇區需要相應的RAM容量 | 扇區越大所需RAM越大 |
GPU | 在一定的時間內完成零知識證明 | Lotus網絡中只支持N卡 |
硬盤 | 存儲文件/區塊數據 | 需要穩定存儲,預留空間提供查詢服務,參與主網至少100TB容量 |
網絡 | 作用於機器封裝時與存儲礦工的通訊 | 10GbE+網卡和交換機 |
挖礦步驟與資源使用的情況如下:
- 復制證明 PoRep
步驟詳情 | 任務詳情 | 工作硬件 | 預期時間 | 選型要點 |
---|---|---|---|---|
Precommit-P1 | Single thread PoRep SDR encode | CPU | 幾個小時 | 1. 取決於扇區大小和速度 2. AMD處理器SHA拓展可顯著提高速度,或用Intel CPU+FPGA(算法定制)加速 3. 提高主頻可提升速度 |
Precommit-P2 | Poseidon Hash -> Mercle tree | GPU | 45-60mins | 可用CPU替換但會顯著拖慢速度,可用FPGA(算法定制)顯著加速 |
Commit-C1 | generate prove's ready | CPU | 幾十秒 | - |
Commit-C2 | generate zk-SNARK and broadcast to other nodes | GPU | 20-30mins | 可用FPGA(算法定制)顯著加速 |
- 時空證明 PoSt
步驟詳情 | 任務詳情 | 工作硬件 | 預期時間 | 選型要點 |
---|---|---|---|---|
Window-PoSt | 審核曠工的存儲承諾 | GPU | 30mins內(24小時至少1次/每個扇區) | 多核CPU可加速,8核勉強過關,24核輕松過關 |
Winning-PoSt | 在每一個epoch提交存力證明以獲得挖出區塊的機會 | GPU | 1個epoch內完成,目前為25s | 不需太多計算 |
Tips:
以上預期時間為基礎版本與資料參考的時間,通過軟件/硬件優化算法環節可大大減少計算時間。
How The Software Works
節點軟件 | 編程語言 |
---|---|
lotus | Go |
forest | Rust |
fuhon | C++ |
go-filecoin | Go |
Tips:
- Golang開發的lotus項目的節點各項功能較為完善,一般使用這套來運行礦工節點。
- 算法部分的代碼主要用Rust語言實現。