————————
分享者:幣圈李白
職位:6block 核心開發工程師
(下面正文摘自6block核心工程師“幣圈李白”的影片直播分享,相應影片請見文末)
最近社羣有很多成員談及爆塊這一問題,我們石榴礦池針對社羣提出的問題,在近兩週的時間裡面對於爆塊進行了深入的測試和研究。(在不利用任何bug的情況下)
現在市場上普遍認為爆塊是個概率性的問題,其概率會圍繞算力佔比而上下波動。但事實不是這樣, 這裡面其實還有很大的最佳化空間,本文將會涵蓋爆塊的最佳化空間以及爆塊方面常見的一些問題。
對於filecoin挖礦,大家一般都會比較關注以下幾個方面:
有機器不一定能有算力
有算力不一定能有爆塊 tb->fil
有爆塊不一定能有解鎖
今天我們就從後面兩個點來展開,第一點我之前談過很多了,所以就不多說了。那麼這個爆塊究竟是怎麼回事呢?其實很簡單,爆塊其持續時間為25秒,在25秒內能完成系統分配的計算,就能實現爆塊。
在filecoin裡面有兩個演算法,爆塊屬於post演算法。簡單來說會有以下幾個步驟:
需要保證獲得上一高度的所有block
計算出隨機數,得到隨機數後便可以判斷自己是否中獎,並且得到中獎的sector序號和sector的資料序號
讀取sector的資料,這裡會需要消耗一定的時間
計算零知識證明得出結果
透過得到的結果構建block並廣播block
獲得上一高度的所有區塊,官方預設給出的的時間是6秒,也就是說預設6秒內全部同步了。所以在6秒的時候就會進入挖礦的步驟了,開始計算拿到隨機數。這要求我們節點的網路延遲要足夠的低,並和多同步節點,同時還要進行同步節點的排序篩選。所以獲得上一高度的所有區塊的限制主要在於網路。
當你有生成新的區塊權利的時候,就要讀取sector的資料,比較重要的是你需要一個低延時的儲存,能讓miner在最短的時間內從sector上得到資料。石榴礦池將儲存和計算進行了分離,worker設定成無狀態,這樣卡了出問題了可以隨時重啟或拿去維修,不會影響整個系統。同時,我們的儲存始終處於低負載的狀態,這樣的狀態下儲存的響應速度會非常的快,當儲存和miner相連之後,便能很快的生成證明。另外,lotus和miner最好要放在一個區域網上或一個電腦上,lotus對外要去連線其他大量的lotus節點,保證廣播足夠的快,以上這些就是我們石榴礦池的架構。
這裡也再談一些常見的問題:
首先是計算和儲存不分離,在這樣的架構下,資料抽取速度很有可能受到影響,並且很難最佳化,很難做到大量的爆塊。
其次就是冗餘和備份帶來的儲存負載,如果盲目的去做冗餘和備份,就會影響讀寫效能從而影響爆塊。
再者是讀寫過程中會互相搶資源,最好的解決方式是讀寫分離。
然後是多miner的問題,這是一個很有創意的想法,主要目的是為了把算力集中在一個賬戶下,比較好宣傳。但多miner會影響爆塊,其讀取資料可能會受到一定的影響。
最後說一下計算零知識證明,它也佔一定的時間,大概幾秒鐘的時間,但可以透過在miner上配顯示卡來節省一定的時間。本身零知識證明的計算也是可以最佳化的,在bellman的庫裡面,最佳化它就可以節省時間了。
爆塊所存在的問題和解決的思路大概就是以上這些了,最後展示下我們兩週測試努力的成果吧:
可以看到最佳化後的成果,爆塊出塊的時間降到了1.7秒。
總體來說,想要減少爆塊的時間,你需要一個低延遲的網路,一個響應及時的儲存系統,還有一個能快速算出wining post的零知識證明計算系統。
好了,今天的分享就到這裡了,謝謝大家!