編者按:區塊鏈涉及到的技術很多,從互聯網底層到不明覺厲的密碼學,可是往往關注幣價者多而研究技術的人少。牛市的時候,大家為了炒幣也會努力學習,熊市的時候,反正也沒啥事,我覺得可以更加努力學習。作為一個文科生,我當然會有很多理科生看起來覺得很白癡的問題。作為一個記者,我不難找到業內懂的人用人話給我解釋,而且他們往往不會當面嫌棄我。
這是小明學習筆記第六期,如果有其他有趣問題,歡迎投稿和提問。
———這是華麗麗的正文分割線———
回顧過往,小明學習筆記已經從周更變成月更,這一篇距離上一篇可以說是季更了。由于我現在的工作主要是編輯了,所以一般是帶著記者出去采訪和寫稿,很少自己單獨寫稿,所以學習筆記的更新估計也是綿綿無絕期。
這期要分享的是礦池,首先要感謝 xDAG 的核心開發者謝銳,同時他也是 xDAG 官方挖礦軟件的設計者,年前給我科普了很多這方面的知識。
我最早了解這個行業是在 2017 年采訪 ViaBTC微比特,當時楊海坡總結,礦池就像礦工的聯盟,把大家聚起來挖礦。這個確實已經是礦池非常本質而且通俗的解釋。
我們都知道,隨著比特幣而誕生的 PoW 共識機制,其挖礦的過程本質就是在做隨機數碰撞,誰猜中者這個隨機數誰就可以獲得記賬權、成為這輪的出塊人。因為是亂猜,所以單位時間內猜的次數越多,猜中的概率就越大。
隨著專業礦機等設備出現,比特幣、萊特幣等幣種全網挖礦算力增加,大部分的礦工靠自己SOLo挖礦已經很難挖到幣,礦池應運而生。礦池就像一個聯盟,把這些零散的礦工甚至是礦場集合起來一起挖礦,按算力占比給礦工收益,這樣既可以增加挖到幣的概率、也可以穩定礦工的收入,同時礦池提供的技術也有利于降低挖礦效率。
礦池究竟把什么任務給到礦工?
神魚也曾經總結,礦池其實就是在分派任務給大家算。不過,我想知道得更細節,就是礦工們究竟在算什么?礦池又是怎么分配任務的呢?
《淺談礦池和礦場(礦池篇)》這篇文章舉了個例子說明挖礦的過程:“礦池將區塊難度分成很多難度更小的任務下發給礦工計算,礦工完成一個任務后將結果提交給礦池,叫提交一個 share。假設全網難度要求 n 的值為 100,即前 100 個比特位為 0,礦池可能會給礦工分配一個任務,要求前 30 位為 0,然后再從所有提交的任務中,尋找有沒有湊巧前 100 位為 0 的目標值。”
謝銳告訴我,理論上,礦池給礦工分配任務的方式可以有兩種:
第一種,礦池只是一個節點,打包交易的還是礦工。礦池會把任務的完整信息給到到礦工,礦工打包交易、然后廣播。礦工知道完整信息,但是需要填的東西比較多,簽名也是礦工簽的。
第二種礦池節點直接打包,給到礦工的是結果的中間狀態,或者說非完整信息,礦工填完他要填的東西。塊最后的組合由礦池來做。礦工把 nounce 發給礦池,簽名是礦池。
“唯一不會變的是,你接入這個礦池的數據同步方式。”
看完上面兩種方式,顯然大部分商業運營礦池會選擇第二種,挖礦收益的分配就是按照簽名。如果我既是礦工也是礦池主,兩種沒有區別,大可選擇第一種。
看到上面說的 nounce 值,你大概會有點懵逼,這其實就是我們常說的 PoW 過程中要碰撞的那個隨機數,下面還會解釋。
根據《精通比特幣》一書,挖礦的目標是找到一個使區塊頭哈希值小于難度目標的 nonce。前提是選取的交易已經確定,說到這里,我們就需要來學習一下比特幣的區塊頭結構。
表格來自《精通比特幣》
在區塊頭里面,基本上挖礦節點能改變的東西就兩個:交易和 nounce。既然挖礦的目標是讓區塊頭哈希值小于目標,整個步驟基本上是:決定你要打包的交易并形成對應 merkle tree 根——亂猜一個 nounce —— 把 nounce 放到區塊頭里面哈希一下——才知道有沒有小于目標哈希值,即大于目標難度。
So,基本上你所選的交易和 nounce,都無助于你“預知”最后的哈希值大小(nounce 值大,區塊頭哈希不一定就變大變小),你每一步都只能亂猜。別人一次可能就猜中了,你猜了幾萬次都還沒有中,你唯一能做的就是比別人在同一時間里面猜更多次,這就是礦機在做的事情——把自己所有的精力都集中起來做一件事。
再說說礦機的抗 AISC 屬性
說到礦機,我問真的存在抗 ASIC 的算法嗎? 謝銳總體認為本質上沒有抗 ASIC,不過不同的算法會讓制造 ASIC 礦機的成本更高。
任何 PoW 幣種都會有一套挖礦算法/軟件,ASIC 芯片就是把這個軟件燒成電路。最早的芯片都是專用的,比如收音機的芯片只能做收音機的東西。FPGA(Field Programmable Gate Array) 則是可編程陣列,在硅芯片上施加電壓,一個與門就可以變成非門。這類芯片應用范圍更廣,首先上頭成本比ASIC高;而且為了做得更通用,還是有冗余,沒有 ASIC 高效。所以現在大家會在電腦上設計、在FPGA上設計,然后燒 ASIC。如此類推,GPU 甚至 CPU 能做的計算類型就更多了。如果想知道 FPGA 具體為什么比 CPU 和 GPU 更高效,可以參考這篇文章。
為什么會有冗余?舉個假設性的例子(不準確但有助理解),比如 5 5 ,FPGA 可能沒有 5 這個概念,就要變成 1 1 1 1 1,ASIC就可以直接算 5 5。這讓我想起王嘉平接受 Odaily星球日報采訪時說過一句話:在計算機領域,靈活性/通用和高效往往是沖突的。
“ASIC 最強的就是并行計算 ,FPGA稍微差一點。其實本質上沒有抗ASIC,只能讓它反推的每一步更難,比如要求把東西放在內存里算,比如需要算方差,需要把每個數據都放進內存,GPU 到 FPGA 到 ASIC,(ASIC)需要的顯存芯片可能是 GPU 的 100 倍。(要不要研發某個幣種的 AISIC 礦機)只看成本和收益。”通俗來說,可以理解為研發一臺挖以太坊的 ASIC 礦機比研發比特幣 ASIC 礦機更難,而且同樣時間下研發出來的芯片,對比起普通 CPU/GPU 效果提升不明顯。比特幣可能是提升了成千上萬倍,以太可能提升了幾倍到幾十倍,效果劃不來。
類似的分析也可在公開資料看到,比如耳朵財經的這段話:
“Ethereum使用了Ethash算法,前身為Dagger算法(Vitailk發明),其目的是為了抵制ASIC礦機。如何抵制ASIC礦機呢?通過將挖礦和內存帶寬相捆綁,即降低其他硬件的運算優勢,從而達到挖礦設備平等這一理念。
Ethash算法沒有阻擋ASIC礦機的出現,只是拖延了出現的時間。
綁定內存帶寬意味著可以通過提高內存帶寬速度來提高算力,或者在相同內存帶寬速度下降低功耗,只不過目前內存帶寬價格過高以及ETH價格過低,從成本上考慮,ASIC礦機相較GPU來得不夠劃算。
Litecoin使用的是密碼學家兼程序員Colin Percival于2009年發表的論文Stronger Key Derivation via Sequential Memory-hard Functions上所發明的scrypt算法。原理和Ethash較為相似,都是提高挖礦時內存的使用成本,延緩ASIC礦機的出現。
2014年,Zeusminer研發出了專門針對scrypt算法的ASIC礦機。這也說明通過綁定某一硬件(如內存)從而抬高挖取的使用成本是沒有辦法完全杜絕ASIC礦機。”
現在大部分號稱抗 ASIC 的挖礦算法,都是將內存和計算捆綁。
以太中文網還整理了一下不同 PoW 算法部署 ASIC 之后挖礦效率增長倍數:
SHA256 約1000倍
Scrypt和NeoScrypt 約1000倍
X11和X16R 約1000倍
Equihash 約100倍
Cuckoo Cycle 約100倍
CryptoNight 約50倍
Ethash 約2倍
礦池的收益分配模式
最后簡單提下礦池的收益分配模式,其實這個已經有很多文章解釋過。礦池的分配模式大類有兩種:
第一種是實際出塊情況分幣:時間周期內,礦池挖到多少塊,就按照算力比例分配所得挖礦收益。
這種方式的時間周期一般按挖出塊的時間為止,即兩次挖到塊的時間之內的算力分布比例分配收益;也可以每天結算,如果你所在的礦池爆了好幾個塊,當天的收益就很高,如果礦池一天都沒有挖到什么塊,那么所有人今天都沒有收益。這稱為 PPLNS(Pay Per Last N Shares)。
第二種即按理論值分幣:時間周期內(一般是一天),理論上礦池能得到多少收益,按照算力比例給礦工分錢,相比上一種穩定。
借用這篇文章里的一個例子:假如在某 10 分鐘,你為某礦池提供了 1 T 算力,當時該礦池算力共為 100 T,全網算力 1000 T,比特幣網絡平均每 10 分鐘出一個塊,出塊獎勵為 12.5 個 BTC,礦池占全網總算力的十分之一,礦池收益期望值為 1.25 個 BTC,你的算力占礦池算力的百分之一,無論礦池是否挖到區塊,你的收益都是理論收益 1.25 BTC。這種稱為 PPS(Pay Per Share)。由于 PPS 模式下,礦池承擔風險,所以費用的比率會更高。
行文至此礦池的基本知識科普得差不多了。突然想起最近(我是在年前采訪的……)看文章看到以太坊的空塊率多了很多,我又順便問了一下礦池為什么要挖空塊,得到的回答是省時間:“挖空塊的好處,不用同步數據,也不用下載,而且上傳更快,(不過短時間內)出塊太多會提升難度。”
想知道得更詳細,可以參考《科普入門 | 空塊是什么?為什么礦工要挖空塊? 》這篇文章:
“挖空塊技術唯一的優勢就在于,因為空塊只有一條信息,空塊礦工省去了‘打包’大量信息的時間。這使得空塊礦工挖完這個區塊,直接就可以開始下一個區塊的挖礦。
如果是大礦場甚至礦池級別的硬件,這一操作說起來只是節省了幾秒鐘的時間,不過大礦池幾秒鐘時間的算力,秒秒鐘幾百萬上下真是一點也不夸張啊。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。