今天IPFS Filecoin的各種群炸開了鍋,原因是Filecoin內部開發人員透露,下一個Filecoin的測試網絡需要搭配GPU。而且Filecoin內部測試使用的
今天IPFS/Filecoin的各種群炸開了鍋,原因是Filecoin內部開發人員透露,下一個Filecoin的測試網絡需要搭配GPU。而且Filecoin內部測試使用的是2080ti的顯卡。
同時,聊天記錄表明,下一個測試網絡需要在一個區塊時間內完成PoST的計算。晚上下了一下最新的go-filecoin的代碼,看了看。奇怪的是,最新代碼的共識部分(EC)以及節點選舉流程和之前沒有多大的差別。
1. 目前節點選舉流程
核心邏輯在go-filecoin/internal/pkg/mining/worker.go文件中的Mine函數,由以下幾步組成:
· 創建下一個區塊的Ticket
獲取上一個Tipset中的最小的Ticket,并使用NextTicket函數生成下一個區塊的Ticket。計算方式非常簡單,就是對上一個Tipset中的最小的Ticket進行簽名。目前簽名支持兩種算法:BLS以及SECP256K1。默認采用SECP256K1算法。
· 延遲一個區塊時間
一個區塊時間(BlockTime)默認是30秒。目前的代碼實現直接采用Delay。從TODO可以看出,這一部分設計中是想采用VDF。但是,目前代碼還沒有完全實現。
· 從前面一些區塊獲取Election Ticket
從前面一些區塊中獲取最小的Ticket,作為Election Ticket。從前面一些區塊選舉,是為了保證隨機性。
· 生成Election Proof
獲取了Election Ticket,并對其簽名,生成Election Proof。
· 確定是否是Winner
通過IsElectionWinner函數判斷是否是Winner。邏輯也非常明了,查看Election Proof是否小于有效存儲率。如果小于,說明是Winner,可以生產區塊。
整個邏輯非常清楚,計算過程也沒有復雜的計算,最復雜的計算也就是簽名。目前的區塊生成流程沒有必要使用GPU。問題來了,下一版本的區塊生成流程變了。
2. 下一版本的節點選舉流程
下一版本的區塊鏈生成流程,沒有公開源代碼。但是,在Filecoin的設計文檔已經有體現:
https://filecoin-project.github.io/specs/#algorithms__proof_of_spacetime__election_post
PoST的部分多了一個算法:Election PoST。Election PoST,目的是在生成區塊的時候,綁定PoST的計算。也就是說,一個節點需要生成區塊,必須提供PoST的計算和證明。
設計文檔給出了大致的生成區塊的算法:
· 隨機數生成(Sample randomness)
也就是從前面一些區塊獲取一個Ticket,并簽名,簽名結果作為隨機數。
· 確定Partial Ticket
從上述獲取的隨機數,確定K次挑戰的Sector以及相應的數據。由這些數據,上一步驟生成的隨機數和節點的ID生成Partial Ticket。
· 生成PoST證明
如果Partial Ticket的系數小于節點的存儲率的話,說明節點是Winner,可以生成區塊。在生成區塊前,必須生成PoST證明。
顯而易見,新的區塊生成流程,需要在一個區塊時間內,生成PoST證明。PoST證明生成,涉及K次零知識證明(zk-SNARK)的證明計算,相當來說,計算時間較長。通過GPU加速,可以縮短PoST證明的時間。
總結:
Filecoin采用了新的節點選舉算法,在區塊生成時,必須提供PoST的證明。新的設計導致對PoST證明的性能有要求。GPU是目前加速PoST證明生成的可行方案。(Star Li)