《讀懂區塊鏈PoS共識》第六章 PoS中的礦工

買賣虛擬貨幣
礦工(miner),俗稱挖礦的人,這個名字起的非常有暗示性。人類有很多貴重金屬都是從地底下挖出來的,其中黃金還成為過人類共同認同的貨幣,挖黃金的人統稱為礦工,這個概念沿用到了比特幣裡,但比特幣裡面的礦工挖的是比特幣,所以中本聰是把礦工挖比特幣比喻成了礦工挖黃金,實際上,比特幣的確和黃金有著很多相似的設定,總量有限(2100萬枚),越挖會越少;比特幣也希望像黃金一樣,成為人類共同認同的虛擬貨幣。礦工這個角色在比特幣時代裡被廣泛傳播開來,後在區塊鏈時代開始有多種版本的叫法,比如鑄幣人(Minter),鍛造人(Forger),驗證人(Validator),麵包師(Baker),背書人(Endorser)等等,雖然稱呼改變了,但是實際的角色職責並沒發生太大變化。其改變可以理解為專案的差異化需求而已,以下我們統一稱為礦工。比特幣10年,發展的越來越像黃金,美元不再和黃金掛鉤後,黃金從貨幣的位置逐漸演變成出了儲值的功能,而且在支付的道路上越走越遠。而比特幣,還沒成為過支付,就已經開始走向了儲值。這其中,礦工的角色扮演了非常重要的作用。礦工挖比特幣同挖黃金的目的一樣,都是為了獲得利益。但在不同的系統中,他們的職責可不一樣。黃金裡面的礦工,拿著鋤頭去洞裡鑿就可以了,而比特幣的系統裡面,礦工需要給系統提供計算力,同時還需要維護整個網路的穩定。黃金裡,沒有礦工挖掘仍然以物理的形式存在,而比特幣沒了礦工,就什麼都不存在了。所以,礦工是去中心化網路裡面必不可或缺的角色之一。而隨著區塊鏈的發展,不同共識裡面的礦工開始演化出新的權職。如PoW共識裡面的礦工,如同比特幣中礦工,礦工執行著系統編寫好的軟體,提供計算能力給系統,為系統工作,以此來獲得獎勵。PoS共識中的礦工,算力不再是最重要的需求,只需要一定的計算力,在合適的時間完成工作就可以獲得獎勵。PoS的共識演算法,對礦工的依賴同PoW相比,有過之而不及。除了創造新的區塊外,POS中的礦工還會參與到Stake,驗證,鏈上治理等中來,另外,和PoW礦工最大的不同點就是,PoS礦工不再需要一臺高效能的礦機來和其他人競爭挖礦的權利了,與之對應的是,PoS礦工只需要執行一臺足以滿足系統最低配置的伺服器,並且在系統被應用越廣的時候,及時升級伺服器配置,即可以完成PoS中對礦工的要求。
系統硬體要求降低,並不意味這PoS對礦工的要求降低。2016年到2019年發展的PoS專案裡面,對於PoS礦工的軟性要求越來越高。比如要求7x24小時線上,不能隨意分叉系統,參與所有的治理,代表委託人的權益,提供足夠多的工具,監控執行資料,即時升級最新版軟體等等,更有專案要求執行團隊為公司,以保證該礦工能符合要求。所以我們會看到PoS礦工之間,經常有各種會,討論升級,配置,參與討論、治理和投票等。資格PoS專案中的礦工資格,最基本的標準是持幣。然後在持幣量的基礎上,各個專案的要求都有不同,以下列舉目前專案中的一些條件· 持幣量需要10000個,或者佔總量0.1%· Staking量在前100,包括自持有量和委託量
· 幣被鎖倉200000個,鎖倉時間1個月/半年/1年· 節點伺服器配置最低要求· 軟實力,社羣名望,技術實力,7x24小時維護其中各個網路對於持幣量是必選項。持幣量達到一定門檻是為了從某種程度上實現效能提升,而鎖倉是為了讓沒有Bond-Slash的系統達到一定的安全(不排除專案鎖幣的流動性),而委託量的要求則是為了讓大量無法參與網路驗證的持幣人參與網路維護。軟實力比較虛,主要體現在社羣中的表現情況,給大家的第一印象吧。滿足以上資格,那麼就可以進入下一步的節點配置了。配置
一般系統對礦工的配置都不會很高,除非是運用拜占庭容錯混合演算法的專案或是趨向於聯盟(Pemission)的專案。但是對於一個隨意進入(Pemissionless)的區塊鏈專案,一般的重點配置引數如下:· 處理器(CPU)2核/4核· 記憶體(Memory)4G· 頻寬(Bandwidth)5G bit· 硬碟(Disk)200G及以上其中,頻寬要求要稍微高一點,因為一些區塊鏈專案要求節點要長期線上,頻寬高是為了和各個節點之間的通訊保持正常。硬碟,是需要動態擴充的,隨著區塊資料的增多,出塊節點需要儲存完整的區塊資料,所以硬碟容量不足時,需要及時擴充硬碟。
如果執行的節點對外暴露了RPC服務,對應的引數配置需要依據RPC服務的呼叫情況來決定。當然,專案初期和已經發展較為強大的專案需要的配置還不一樣,後者配置需要還會更高一些,比如以太坊專案的引數配置如下(最低需求)· 處理器(CPU):2核· 記憶體(Memory):最小4GB記憶體,如果你使用HDD而不是SSD,則至少8GB· 頻寬(Bandwidth):8+ MBit/sec· 固態硬碟(SSD):>80GB
而以太坊推薦的配置應該是· 處理器(CPU):4核及以上· 記憶體(Memory):最小16GB記憶體· 頻寬(Bandwidth):25+ MBit/sec· 固態硬碟(SSD):>500GB伺服器配置有兩種方式可以選擇
· 自建伺服器--自己購買硬體伺服器,連線電、網,執行服務· 雲伺服器--購買現成的雲伺服器,動態配置引數,執行服務雲伺服器的優點在於靈活,且成本低,大部分專案的礦工都採用的是雲伺服器。而自建伺服器的成本短時間較高,而且需要7x24小時不斷電,不斷網,對環境要求較高,好處是一些服務支援可以直接DIY。目前,大部分節點還是搭在雲伺服器上,如亞馬遜的AWS,Google的雲服務,阿里的雲服務等,這點為去中心化社羣所詬病已久,因為所有的去中心化網路的節點服務仍然是搭建在世界的IT巨頭手裡,社羣曾有人想象,如果想摧毀所有的區塊鏈專案,那麼摧毀亞馬遜和Google就可以了。升級節點執行的程式需要保持在正常的版本,要不然無法正常出塊。很多更新是不會做舊版相容的,所以需要節點及時的關注,節點執行的程式和其實和我們使用的APP一樣,程式為了修復問題,增加新功能,會做更新,維護節點程式的團隊會在合適的時機發布軟體更新,但是這種更新不會像手機APP一樣,向你發更新推送。這個過程需要節點自己來發現,關注社羣,或者自己做監控。網路中,執行不同版本的節點程式可能會導致網路分叉,在比特幣和以太坊上都發生過此類事情。像Bitcoincash位元現金幣的分叉事件,其結果都是礦工執行了不同版本的節點軟體。
舉一個簡單的例子,比特幣的共識當中,沒有機制來保證不分叉,只承認工作量最長的那條鏈。當網路中出現多個版本的程式時,意味著礦工之間出現了分歧。該分歧下,不同版本出來的塊不相容,礦工之間有權利拒絕將該塊下載到本地中。那麼比特幣中就出現了多條分叉,而比特幣會根據工作量來選擇哪條鏈是最終鏈,沒有得到大量算力支援的,會選擇自立門戶,來支援小算力的分叉鏈。PoS中,由於涉及機制的不同,分叉變得不再容易,意味著企圖透過執行不同版本的軟體來完成分叉變得不可能,但是,PoS是允許礦工之間執行不同版本的程式的。除非是硬分叉,節點程式不相容。同時,後來的PoS共識設計當中,都會檢測節點版本的功能,當不相容出現時,低版本的程式會被強制踢出選舉佇列,相當於不能參與選舉出塊了。Tezos主網上線一段時間,發生了粉塵攻擊,因為建立賬號和傳送交易不消耗成本,導致攻擊者傳送了無數多條小額交易,讓整個網路"癱瘓"了一段時間。後Tezos開發團隊緊急設定了手續費,併發布了更新,很多節點第一時間更新了版本,但是仍然有一部分節點滯後,導致小額交易仍然繼續發生,透過社交網路讓大部分的節點都進行更新的效果並不好,後來透過一次強制升級,不對前面相容的協議,讓不升級節點不能獲得出塊權利,這才讓大量節點進行了升級,攻擊者才停止了攻擊。雖然PoS網路允許執行不同版本的程式,但是對於一個健康的區塊鏈網路來說,所有節點還是及時更新版本為好,畢竟在網路初期,很多更新都是為了安全,而不是像現在的app一樣,更新知識帶來了一些好看但不中用的功能。硬體錢包礦工出塊的過程中,需要用到私鑰簽名,以證明你是這個塊的出塊人。這個私鑰儲存在伺服器中,節點程式會在需要的時候呼叫私鑰並讓其簽名,但是節點伺服器是暴露在網路當中的,一旦伺服器被攻擊,私鑰有丟失的風險。
一般程式會對私鑰進行加密後儲存起來,並且儘可能少的呼叫私鑰,就算呼叫私鑰也是呼叫加密後的私鑰,以防止伺服器被攻擊而丟掉私鑰的情況。如在Tezos專案中,將節點宣告為礦工時,需要輸入15個助記詞,並且用一個密碼將其加密後再會儲存到伺服器當中,這樣,即使被攻擊,攻擊者拿到的也是加密後的私鑰,沒有密碼的情況下,私鑰是解不出來的。當然,這依賴於專案方撰寫的伺服器程式,如果專案方並有為礦工考慮這個加密,那麼礦工需要自己來處理這個事情。現在最典型的做法就是使用硬體錢包對外輸出簽名。硬體錢包有很多品牌,目前比較知名的有Ledger,Trezor等,硬體錢包使用者來儲存使用者私鑰,簽名的過程私鑰並不接觸網路,而是將私鑰簽名後的結果直接輸出,這樣可以保證私鑰的安全性。礦工使用硬體錢包用來簽名,相當於給自己的資產加了一層保險,只要硬體錢包不丟失,一般情況是非常安全的。但是硬體錢包不好的一點就是,並不是所有的專案都支援硬體錢包的簽名,參與PoS專案時,需要看看硬體錢包和專案方互相的支援程度,才可以決定是否可以使用硬體錢包來參與出塊簽名。還有一點就是主流的硬體錢包Ledger還是有線的,說明這個硬體錢包得保持插在電腦上,不能取下來,這點來說還是挺不便利的。一個有趣的比喻,硬體錢包很想我們現在所有銀行的U盾,或者說像很早時期的隨身碟,但是網際網路發展到今天,U盾,隨身碟已經變得不太被需要,移動錢包的安全性逐漸變得被接受,雲空間的使用也逐漸使得隨身碟變得不再必須,所以有可能,硬體錢包極有可能是一種過渡產物。終極態不好確定,但是我目前能看到的是當加密貨幣變成主流後,也許主流手機廠商會在手機儲存當中單獨留一塊儲存空間給私鑰,就像三星最近出的手機S10。問題執行節點需要維護好伺服器,這對一個團隊來說是很重要的,因為一旦維護團隊沒有人和維護經驗,那麼碰到問題時沒有及時解決的話,後果將會是極其糟糕的,我列舉以下幾個問題,我們來看看礦工會碰到的問題
防止雙籤:指不能在同一個高度簽署不同個塊,雙籤會被系統Slash或者剝奪出塊權利時刻線上:7x24小時維護網路,斷線斷網都不可以,嚴格的系統會剝奪該節點的出塊權利,設定是Slash節點升級:指節點需要及時升級執行版本,以提升系統安全性配置升級:指節點需要及時監控網路升級後對伺服器的需求,特別是及時提高硬碟容量DDos攻擊:指節點需要有足夠的能力/架構防止網路中發起的DDos攻擊私鑰儲存架構:指節點需要專門的架構/程式來保證節點的私鑰不會丟失
參與治理:指礦工需要及時參與到專案的治理生態,進行投票伺服器運維是件麻煩的事情,如果沒有經驗進來後,需要承擔一定的風險,特別是雙籤的Slash或者是被攻擊後丟掉私鑰的風險,後果極其糟糕。礦工的未來發展礦工將會是去中心化網路中不可或缺的角色之一,在可預見的未來,我覺得會有兩個趨勢· 驗證裝置的簡單化· 礦工群體的專業化
首先,參與區塊生成的機器配置會變得越來越低,從專業的伺服器到電腦,甚至到手機。5G時代的到來,我們會看到越來越多的電器開始聯網,你的傢俱,你的車,都可以成為你執行節點程式的機器,屆時隨時隨地參與到區塊鏈變得可能,同時,個體持幣人Stake參與率也會增高,整個區塊鏈世界更加的去中心化。其次,大礦工群體會越來越傾向於專業化。因為有了委託權益的存在,更專業的礦工會接受到越來越多的委託,礦工有了專業性,維護整個區塊鏈的同時,也可以更好的服務好整個所有委託使用者。專業的礦工負責7x24小時的工作,同時會合理的分配獎勵,委託使用者因為得到好的服務,也更願意參與到區塊鏈中來。兩個趨勢看似矛盾,但實際上會共同發展,最終達到的結果就是專業做大,個體便利。個體礦工會因為便利而存在,但是利益不足以支撐足夠的成本,而做大的礦工會讓整個模型收益,規模化的“生產”會降低成本,使得整個系統被更好的維護。有人會詬病礦工做大後的去中心化問題,我覺得只要存在個體自由參與的便利性存在,整個網路就可以形成足夠的去中心化,相反,專業化的礦工給整個網路帶來的安全性會大於去中心化的需要,而使整個系統收益。所以在可預見的未來裡面,專業的礦工會成批出現,然後和個體礦工達到一個平衡。PoS中的礦工,其實很大一部分都是持幣人,持幣人為系統做功,系統為其付佣金,和PoW相似,但不完全相同。PoS礦工所做的工作,整個過程就像一個公司,月底給員工發工資,同時,為了讓公司發展的更好,對好員工會有激勵,對壞行為會有懲罰。礦工如公司職員,大體是這麼一個角色。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;