對於有志參與 Chia 挖礦的專業人士,入場需要評估 XCH 代幣價格走勢、全網算力增長曲線、設備採購成本等因素。

原文標題:《Chia 挖礦技術分析及建議》
撰文:Henry ,Empower Labs 研究員

初識 Chia 網絡挖礦

相信大家對比特幣 / 以太坊等幣種的挖礦早已非常熟悉。所謂挖礦,其背後的原理是共識問題。許多礦工參與挖礦固然是爲了獲取虛擬貨幣,進而獲得利潤。但究其本質,挖礦的目的是爲了維護一整張分佈式計算網絡,維護共識。而分配給礦工的虛擬貨幣只是這一過程的獎勵而已。

按照中本聰的設想,利用大衆家裏的電腦 CPU 閒置算力就可以構築起一個強有力的分佈式網絡。然而隨着 ASIC 礦機的出現,這種運算能力很容易被專用礦機獲取,從而成了資本的遊戲。而且能源價格也顯著的影響着比特幣的算力。

根據 Chia 的白皮書,Chia 項目的願景是「數字世界的綠色貨幣」。在其設計之初,對選擇算力基礎的目標是「一種分佈廣泛、抗 asic、供應過剩的商品」,而且與電價無關 - 這就是硬盤空間。(廣義的說也包括衆多形態的計算機存儲設施,只要能提供最低 600MiB 的容量——這是 Chia 挖礦軟件能提供的最小 plot 文件,但十分不經濟,且在最新的實現中已不被支持,但還是可以當作測試效能的工具)。

截止本文寫作時,根據 Chia 全網的算力估算其總耗電功率還不到 1000KW。相比 BTC 實屬天差地別。

都是挖礦,Chia 有何不同?

簡而言之,Chia 的挖礦過程如同彩票開獎。參與挖礦的礦工應該提前準備好被稱爲 plot 的文件,然後等着下一個區塊的廣播。這些文件裏的內容和廣播中的內容都是哈希值。哪個幸運兒手中的哈希值與廣播中的最接近,恭喜,他就中了獎,獲得了 XCH 代幣。

按照 Chia 網絡的設計,在主網上線的前三年,每 10 分鐘的產出是 64 個 XCH,由 32 個礦工分享,即每個礦工每天有 4608 次中獎機會,隨後分批遞減。

準備 plot 文件的過程本質就是計算出巨量的哈希值,存儲於磁盤上。官方提供的錢包程序即可完成這種計算過程。錢包客戶端同時附帶了命令行界面的程序(CLI),可供礦工編寫腳本靈活使用。

爲了提高中獎的概率,礦工自然應該準備越多 plot 越好。Chia 網絡的算力單位就是存儲單位,即 MB/GB/TB/PB 等。注意官方使用的單位爲帶有小寫 i 的如 GiB,其含義是以 1024 爲進位,而非硬盤廠商使用的以 1000 爲進位。所以當你看到默認參數說產生一個 plot 需要 239GiB 緩存空間就竊喜以爲 1T 的硬盤可以同時進行 4 個 plot 的時候,先別高興太早,因爲 239GiB 約等於 251GB,而 1T SSD 其實只有 930 多 GB 的實際容量。當然,經過實踐摸索,1T 的 SSD 也完全是可以同時進行 4 個 plot 的,只不過需要參數設置上的一點小技巧。

瞭解過 Filecoin 挖礦的朋友可能會覺得 Chia 挖礦非常相似,從某種程度上確實是這樣。二者都需要大量的存儲設備,並在都需要在正式進行挖礦之前進行預先的準備工作,才能夠生成有效算力,在 Filecoin 中這步被叫做數據填充,而在 Chia 中被叫做 Plot,或者更大衆的叫法-P 盤。不過 Filecoin 挖礦對設備的要求極高,並不只是堆砌存儲設備就可以,遠遠超出了大衆使用範疇,同時還有非常複雜及昂貴的前置抵押等要求。而 Chia 的要求非常親民,沒有抵押、沒有懲罰機制、用個人 PC 就能夠進行操作,這是 Chia 迅速火遍大江南北成功破圈的原因。

不過 Filecoin 和 Chia 的對存儲空間的使用邏輯並不相同,Filecoin 挖礦本質上是對於提供分佈式存儲的一種激勵,而 Chia 則是純粹用這種特殊的機制來維持網絡共識。

Chia 挖礦過程極簡解析

從 4 月中旬 Chia 爆火以來,很多急不可耐的礦工已經或正在準備買硬盤,想大幹一場。從已有的社區討論來看,爲數衆多的計算資源並未得到充分利用。所以,很有必要了解一下 Chia 挖礦的要點,並針對自己的條件加以優化,才能做到高效挖礦。

Chia 的挖礦過程並不是有大容量硬盤就行。有兩部分缺一不可:製作 plot 文件(通常簡稱 p 圖,因爲官方把 plot 翻譯爲耕地)和挖礦(官方翻譯爲耕種)

對於 Chia 來說,挖礦這一步其實是非常輕鬆的行爲,重要的是容量,而不是速度,甚至對挖礦的主機也低到幾乎沒有任何要求。官方甚至推薦用一隻幾十美元的樹莓派加上數個 USB Hub 即可帶動高達 1PB 的算力。畢竟,挖礦的過程就是等着網絡廣播來一串數字,然後跟硬盤裏的哈希值比較一下就可以了。哈希的比較運算是極快的,並不需要把數以 T 計的數據讀進內存進行什麼運算。

這也確實符合 Chia 的出發點——綠色。任何人都可以使用閒置的存儲容量加入 Chia 網絡。挖礦幾乎沒有額外消耗能源,只要開着機,連着網絡,就可以享受每天 4608 次的抽獎,而且是永久的,這很美好。

但是實際上,製作 plot 的過程還是相當消耗資源的,只是消耗的並非電力,而是 SSD。高速大容量固態硬盤成爲了真正的消耗品。這要歸功於(是歸功還是歸咎,且看對存儲行業的影響吧) Chia 設計的計算機制。爲了最終達到既能提供 Proof of Space 證明,又能足夠快的進行檢索這一目標,Chia 製作 plot 的過程實際上分爲四步:

  1. 計算生成 7 張哈希表,主要使用的算法是前向傳播。這一步要處理大量的運算,佔用 CPU 最爲密集。其實這一步已經生成了足以支持 Proof of Space 的全部數據,只不過效率欠佳,所以還需要後續步驟處理。
  2. 用反向傳播算法來清理一遍上面的 7 張哈希表,去除不必要的哈希值,並給表排序。這一步佔用 CPU 也較爲密集,在 1.03 及更早的版本上對內存和緩存盤的佔用也達到頂峯,但 1.04 開始對內存佔用下降。
  3. 對上一步的結果進行壓縮,並將大部分表合併起來。從這一步開始,對 CPU 的消耗降到了較低水平,對內存的佔用仍維持在高位,但緩存盤的佔用開始逐步下降。
  4. 把剩餘的表繼續壓縮成最終的文件格式,並把文件從緩存盤轉移到目標位置。這一步是唯一對目標磁盤進行 IO 操作的。

需要指出的是,Chia 的 plot 文件製作、挖礦、節點維護等工作統統由其錢包軟件完成。該軟件仍然在不斷改進,迭代速度較快。在過去幾個小版本中,其已經在緩存佔用、速度計算等方面有了很大改進。Reddit 論壇上有網友記錄了不同版本軟件 (1,2) 在製作 plot 過程中的各項資源佔用情況,對比可以發現,1.04 版相比更早版本已經減少了近一半的緩存使用量。建議總是使用官方 github 的最新版。

怎麼挖?

對於大多數礦工,要解決的首要問題是第一步,即如何又快又省的製作 plot 文件。

這一過程需要使用 Chia 錢包軟件。Chia 的設計初心其實很簡單,而且絕大多數晦澀難懂的參數都在開發過程中經過的小心的選擇,確保已經是最優值。剩下的,就只是每臺電腦的性能差異帶來的時間差別而已。但恰恰就是這樣的性能差異,構成了截然不同的生態。一邊是業餘玩家想要買幾塊硬盤來試水,另一邊是手持資金生怕錯過風口的大鱷在急切的詢問「一千萬資金該買什麼配置」。在這背後大家關心的都是同一個問題:能搶在全網算力較低的頭礦窗口期挖到多少幣?畢竟,按照 Chia 社區維護的統計數據,同樣的一次 plot 過程,萬元以內的電腦配置,有人可以 4 個小時以內完成,有人卻需要 24 小時以上,這樣的算力差異自然會體現在獲得獎勵數的較大差別。

對此,我們的建議如下。

如果你是業餘玩家,主要依靠一兩臺閒置的電腦,最多額外買幾塊硬盤,那麼幾乎不用費心,完全用默認參數即可。如果願意多付出一點時間研究,最好多試驗幾次併發數,看幾個併發最有效。更進一步的話,可以在 plot 過程中觀察一下 CPU、內存、磁盤 IO 的佔用情況,哪項資源出現了瓶頸,則略微減少其分配,反之亦然。

幾 個非常有用的小技巧:

  • 基於上節論述中引用的 Reddit 網友記錄圖,各項資源在不同的階段利用率是各不相同的,這就意味着與其追求併發數,不如科學分配延遲時間,使得各項資源總處於較高的利用水平。讓若干個併發任務互相延遲一會兒再開始,這不僅意味着 CPU 和內存可以得到較好利用。在 1.04 版軟件發佈之初,網友就試驗成功了通過設置延遲 6 分鐘,成功在 1T SSD 緩存上併發運行四個 plot。考慮到現實中用普通機械硬盤做目標盤的情況較爲普遍,而機械硬盤的 IO 性能較弱,延遲時間還可以避免多個大文件同時競爭機械硬盤的 IO。

  • 製作 plot 的過程雖然有 CPU 和內存密集的運算,但過多分配 CPU 核數和內存數並無明顯改善。如果你有一臺 16G 內存,8 核 16 線程的電腦,沒必要把內存和線程都分配給一個 plot 任務。

  • 對於個人礦工,參照目前的全網算力,僅靠錢包軟件自行挖礦(俗稱 solo 單挖)已經非常不現實了。當然,如前所述,Chia 的挖礦類似於抽獎行爲,哪怕只有一注,理論上也有可能獲獎。但從更現實的角度,個人礦工建議加入礦池從而獲得更可預期的產出。

要銘記一點:家用電腦的民用級 SSD 壽命普遍爲幾百 TB 擦寫量。按照 Chia 官方文檔指出,每製作一個 0.1TB 的默認參數 plot 文件,實際造成的擦寫量約爲 2TB,即 20:1。這意味着一塊擦寫壽命爲 500TB 的民用 SSD 最多能生產出 25TB 的算力就會壽終正寢。*這也是官方強烈不建議在筆記本電腦內置的 SSD 上進行 plot 的原因。

如果你是雄心勃勃入市的準新礦主,那麼我們的建議是購買一些高性能機器專門用作生產 plot 文件,同時再配備少量的低功耗機器專門用作挖礦。爲了高效利用資金,並沒有必要購買高性能整機,最好是按需搭建。假設沒有功耗、尺寸、噪音等限制,那麼使用全尺寸主板搭建開放式的主機較爲理想。Empower Labs 認爲在相當長的時間內,投入數萬元至數十萬元成本搭建 Chia 小型礦場的做法會較爲流行。根據 Empower Labs 的分析和與業內人士交叉驗證,有如下建議:

  • 製作 plot 所需要的核心資源有 CPU、內存、SSD 三部分,需要儘量均衡。

  • 在 CPU 方面,因爲第一、第二階段存在的密集操作,CPU 需要有儘可能高的主頻。其次,爲了同時進行多併發任務,核數也需要多。一部分礦工選擇了二手多路 E5 系統卻發現性能並不盡如人意,其原因在於核數雖多,主頻卻不高。

  • 內存方面,plot 過程耗費的並不算多,而且隨着軟件版本迭代一直有所降低。據實際觀察,在 1.03 版中,單個 plot 過程佔用的內存約爲 4.6GB,而 1.04 和 1.05 版最多不會超過 3.5GB。如果併發任務彼此之間有少許間隔時間,並不會同時到達內存佔用高峯。合理設置的話,以併發數 *3G 甚至更少完全可行。目前並未觀察到 DDR 內存的頻率會產生較大影響,所以無需刻意追求高頻。

  • SSD 方面是差異較爲顯著的,應首選企業級大容量 SSD,兼顧性能和壽命來選擇。企業級 SSD 的壽命多以 PB 計,可以更快產出更多的 plot,平攤成本更低。目前最佳性能的 SSD 多采用 U.2 接口,並非民用級主板常見的 M.2 和 SATA 接口,這也限制了主板的選擇。當然選擇 U.2 轉爲 PCIE 16X 接口的轉接卡也是合理選項。

  • 除了 SSD,服務器主板上常見的 SAS 硬盤接口也是很好的選擇,尤其是當你可以獲取充足的 SAS 硬盤時,以 RAID 卡組成磁盤陣列,經驗證效果往往比單一 SSD 更好。

  • 在操作系統方面,並不一定要選 Windows。Mac 和 Ubuntu/CentOS 等 Linux 系統自身佔用的資源更少,而且 Chia 官方錢包均已支持。如果計劃進行長期不間斷的生產,最好使用命令行界面(CLI),而非圖形界面的 plot 程序。Chia 錢包的圖形界面其實也依靠調用命令行程序來實現 plot。以 Windows 爲例,命令行程序位於 C:\Users_XXXXXXXX_\AppData\Local\chia-blockchain\app-1.0.x\resources\app.asar.unpacked\daemon\chia.exe。其中_XXXXXXXX_是你的 Windows 當前用戶名。目前錢包 GUI 程序經常會出現不穩定的情況,而且錢包程序本身負擔着全節點的同步任務,也會耗費 CPU。所以,CLI 是長期挖礦的更佳選擇。

官網及社區討論中揭示的信息

經過對官網文檔的深度挖掘,以及參考了大量國內外 Chia 社區的討論,發現有一些有價值的信息尚未廣爲人知。

關於-r 的選擇

-r 參數是 chia 命令行程序中指定最大 CPU 線程數的參數。在許多討論中,礦工傾向於認爲越大越好。然而通過深入挖掘,我們發現並非如此。

根據 Chia 的 Github 討論,-r 參數僅僅在 plot 的第一階段,即生成哈希值時起作用。理論上,如果設置-r 6,那麼最佳結果是 6 個 CPU 線程都 100% 參與工作,這一階段的總 CPU 數應爲 600%。但實際上 CPU 的參與程度遠小於此。

在我們的實驗中,使用了 i7-8700 CPU,設置-r 6 單獨進行一個 plot,從 chia.exe 的日誌中可以看到如下輸出:

Starting phase 1/4: Forward Propagation into tmp files... Mon Apr 19 17:22:22 2021
Computing table 1
F1 complete, time: 172.346 seconds. CPU (183.87%) Mon Apr 19 17:25:15 2021
Computing table 2
Forward propagation table time: 964.964 seconds. CPU (312.470%) Mon Apr 19 17:41:20 2021
Computing table 3
Forward propagation table time: 1179.445 seconds. CPU (281.610%) Mon Apr 19 18:00:59 2021
... ...

日誌表明,在 7 張表的計算過程中,CPU 的總使用程度僅爲預計的一半不到。經過多次實驗,提高-r 數可以一定程度提高 CPU 總使用率,但並不明顯。因此我們認爲 CPU 方面,主頻是最影響 plot 速度的關鍵,而非核數。

當然,更高效的做法是並行進行多個 plot 隊列。上述問題揭示的意義在於,首先-r 參數並非獨佔,其次-r 參數的作用週期較短。最佳做法是通過實驗掌握第一階段消耗的時間,通過設置間隔來避開,使得每個並行任務在執行到第一階段的時候,總能通過較大的 r 值來儘可能獨佔 CPU。

關於-b 的選擇

-b 參數是指定最大內存使用量的參數。多數礦工認爲越大越好,實則不然。對比 1.04 和更早的版本,plot 過程中的內存使用高峯從第二階段變化到了第一階段,這是由 Chia 團隊的算法改進引起的。

現在,默認參數-b 3390 已經是反覆優化過的參數,可以保證在排序過程中總是採用效率最高的 uniform sorting 算法。如果降低這一參數,plot 依然可以進行,但可能會回落到效率相對較低的 quick sorting 算法。從下列日誌中,我們可以清楚的看到這一記錄。當可用內存數小於 qs_min 時纔會導致徹底失敗。

Forward propagation table time: 2086.329 seconds. CPU (217.460%) Fri Apr 23 19:04:01 2021
Computing table 4
Bucket 0 uniform sort. Ram: 5.786GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
Bucket 1 uniform sort. Ram: 5.786GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
Bucket 2 uniform sort. Ram: 5.786GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
Bucket 3 uniform sort. Ram: 5.786GiB, u_sort min: 1.625GiB, qs min: 0.812GiB.
Bucket 4 uniform sort. Ram: 5.786GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
Bucket 5 uniform sort. Ram: 5.786GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
Bucket 6 uniform sort. Ram: 5.786GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.

經過觀察,計算處理的七張表中,第四、第五張表是使用內存量最多的,要實現全部 uniform sorting 的內存最低門檻爲 3.250GiB,這也正是-b 3390 要保障的效果。

如果提高內存分配,從日誌來判斷,內存的實際使用量會略微增長,而且日誌總是顯示 uniform sorting,即已經是最佳算法,但對時間縮短並無明顯效果。

這意味着即使並行多達 8 個任務,32G 內存的機器也完全可以勝任。

關於-k 的選擇

在社區討論中,k 值一直是個神祕的存在。按照官方文檔說法,人們從來都不需要 k>32,除非爲了炫耀,或者硬盤就剩那麼一點空間你想填滿它。但中文社區的討論似乎並未關注過它,多數人認爲越大的 k 會帶來越大的中獎率,只是製作 plot 的時間增加太多,不划算。事實完全不是這樣。

K 值的大小直接影響着 plot 文件的大小,但是不論 k 等於幾,製作出來的 plot 文件都是一票。沒錯,就是一文件一票。其實,從抽獎的過程也可以判斷出,數以 T 計的文件如果需要讀取一遍內容才能確定中獎資格的話,10 分鐘不可能夠用。所以,抽獎的過程顯然只是在比較文件哈希而已。

在主網上線之前,k 曾經可以使用更小的值,比如 k=25 時幾分鐘就可以製作好一個 plot 文件。這意味着擁有強力電腦的人可以輕鬆的甩開其他人,快速獲得大量票數。這也是官方爲什麼在主網上線前幾個月確定了最低允許 k=32。按照官方公佈的計劃,如果未來摩爾定律繼續起作用,製作 plot 文件所需的時間將不斷降低。預計在 10 年以後 k=32 將不再適用,屆時官方將會取消 k=32 的抽獎資格,所有 k=32 的文件將作廢。

這也提醒了準備長期持續投入的礦工,在未來某個時候,所有的算力都需要重新制作。而這個時候何時到來,取決於計算機硬件的發展速度。也許這將是推動摩爾定律的重要新因素。

Chia 挖礦面臨的痛點

Chia 的火熱並不是一天造就的。事實上,Chia 項目從 2017 年就創立了,測試網於 2019 年上線,而主網則是剛剛於今年 3 月 19 日上線。作爲歷史悠久的明星項目,主網上線、即將登錄交易所流通、Chia 實體公司計劃短期內上市(特別是有 Coinbase 的珠玉在前)等一系列因素造成了該項目的爆火。爆火帶來的顯著影響就是硬盤設備的漲價和集體脫銷,同時也給 Chia 項目帶來了廣泛的爭議。

毫無疑問,Chia 所致力設計的綠色理念極大的降低了這一區塊鏈項目的參與門檻。正因如此,我們前文所述的問題都是圍繞並不十分複雜的通用硬件和一些軟件參數設置。然而作爲礦工,當下最大的困難是無法獲得足夠的低成本硬盤來構築算力。我們從硬盤渠道商處獲悉,從硬盤廠商到渠道商對此也深感震驚。當前硬盤市場存在着一定程度的囤積居奇。但硬盤廠商和總代一級並未對此感到擔心。全球硬盤生產能力高達數千 EB(1EB=1000PB) , 遠遠超過當前用於 Chia 挖礦這一點算力。供貨和價格情況將在未來一段時間內逐漸明朗。所以並不建議礦工購買高價硬盤,尤其應該小心避免以次充好、以二手充新的情況。

另一個潛在的問題是,雖然製作好的 plot 文件即是永久算力(目前對永久的預期應爲十年左右),存儲在便宜的機械硬盤即可,但機械硬盤也是有壽命的。如何應對天災人禍造成硬盤滅失的情況,當下還未進入多數礦工的考慮範圍,但隨着時間推移,越來越多的礦工會遇到這一挑戰。當下,應對這一挑戰的方案似乎只能由不斷更新存儲設施來解決,而這在硬盤供應現狀下卻成爲了不存在或者十分不經濟的選項。

Chia 挖礦的收益預期

Chia 的發展速度早已超出許多人的預料,包括 Chia 團隊。在白皮書發佈時,Chia 團隊預計主網上線時的算力將達到 40~60PB,然而實際上在 3 月 19 日上線的第二天,算力檢測顯示已經達到 120PB,並且至今一直保持着指數形式上漲,甚至超過了多數人生產 plot 文件的速度。這對礦工而言並不是一件好事。

截止文章發佈之日,Chia 網絡的總存儲已經達到了 900PB。這意味着投入 1T 的算力平均每天僅能產出 0.06 個 Chia,並且算力每天都在大幅上漲。按目前的設備價格,自行搭建算力挖礦,在不考慮電費運維等支出的情況下,每 T 成本已達到 40-50 美元左右。儘管按目前的市場期貨價格以及全網算力情況,回本週期非常的短。但全網算力正在急速攀升,30 天后形成的算力每 T 的平均產出可能只有現在的 1/5 甚至更少。如市場在幾個月後走入下行週期,很可能新增算力的回本週期會拉長到一年甚至數年。

總結

Chia 挖礦的門檻足夠低,對於家用電腦用戶來說,即使不進行任何額外投資,僅僅用現有的硬盤資源,製作幾份文件,嘗試一下參與網絡共識,也是不錯的體驗。同時還可以獲得抽獎機會,一年能中一次獎就是幾百美元的收入,也相當不錯。大量新用戶因爲 Chia 認識了數字貨幣,又在參與挖礦的同時能夠對區塊鏈技術有更直觀的瞭解,他們中的一部分一定會選擇進一步深入探索這個世界。這是我們認爲 Chia 挖礦此次破圈給行業帶來的最大貢獻。

對於有志於參與 Chia 挖礦的專業人士,入場需要評估三個因素。1.XCH 的未來價格走勢,2. 全網算力增長曲線, 3. 設備採購價格、週期及使用安排。建議把這三個因素的所有可能變量都考慮到,計算出風險上限,再合理安排資金入場。

最後需要提醒,當前在售的大部分礦機是即用作存儲挖礦又用來 P 盤,但在 P 盤期結束後會出現大量資源閒置。如果不進行合理規劃,最後的結果可能是買了包含大量內存 CPU 等資源的礦機,結果只是第一個月用來 P 盤,在其餘的全部生命週期都在做一個幾十美元樹莓派都能勝任的工作。隨着大家逐漸意識到 Chia 挖礦的特點,未來 P 盤工作會逐漸和挖礦工作分離,形成更加合理的產業協作。