跳到主要內容

淺談礦池挖礦機制 (Pooled Mining)



開了礦池之後常常被問到一些很弔詭的問題,像是在沒出塊時問「為什麼都沒收入?」或是「收益跟估算的比怎麼少這麼多?」,而且根據我的觀察這些問題在出塊運氣差的時候最常出現,運氣好的時候從來不會有人問「今天怎麼賺這麼多」……。其實這也顯示了部分的礦工對礦池運作機制還是非常不熟悉,這大概要歸因於已經習慣挖 10 分鐘出一次塊的大礦池,在出塊運氣被頻率沖淡、頻繁開塊分贓的情況下,可能有些人就不再去計較這一切是怎麼發生了~


以我的礦池為例 (https://omine.ga),一個很典型的 CryptoNight 礦池



礦池機制

可能對於不少人來說根本沒有試過什麼叫獨立挖礦 (Solo Mining) 所以就直接把所有的挖礦都想成是礦池挖礦,反正就是只要把挖礦程式連上礦池給的地址和連接埠,然後加密貨幣就會隨之入賬了。當然這樣講其實也沒有錯,礦池挖礦除了聚眾合作外,為的就是讓更多人能參與挖礦 (貨幣發行、傳輸) 所以把很多細節都給簡化了。 
如果真的要解釋就得從最基本的講起了,挖礦就像是讓電腦解一個難題,而最先解出來的人就可以獲得獎勵 (加密貨幣),而為了控制獎勵的發放 (貨幣發行) 整體網路會有一定的機制來去制衡,隨著越來越多人參與挖礦,這個難題的難度也就會隨之提升,所以到最後單憑一台礦機的運算能力可能要花上數年才有機會在整體網路中當上那「第一個解出難題的人」,也是因為如此才需要大家一起合作挖礦,讓來自不同地方的礦機同時運算,解出難題時也可以共同分享成果,這就是礦池的基礎概念。 
那根據挖礦的概念推廣,礦池的運作邏輯也是完全相同的,在大部分的分潤模式下只有在出塊的時候才能和礦工分享獎勵,如果是規模不大的小礦池其實仍然很受運氣影響,出塊頻率低會需要更長的時間來讓回報趨近理論值,因此平常都挖大礦池的人就會非常不習慣。




分潤模式

其實無論規模大小,在 CryptoNight 系列礦池大部分都是採 PPLNS 或 RBPPS 的分潤模式,所以出塊運氣都還是由礦工來負擔,也相對會有比較低的手續費。其實分潤模式大同小異,而且也很難講說哪個模式對礦工最好,就長期來看其實是選擇手續費低廉的最賺 (PPLNS、RBPPS),但若短期而言則是 PPS 得到的收入會最接近理論值。以下大概整理了這三種最常見的分潤機制 :
  • PPLNS : 出塊後根據過去的 N 個 Shares 來支付,出塊運氣由礦工承擔,而且對於跳池者來說並不友善,得挖完當下這輪 (N 個 Shares) 才會回歸正常的收益。舉例來說 Nanopool 的 N 就是以「過去三小時的 Shares 」來分配區塊獎勵。
  • PPS : 無視出塊與否,礦池會直接根據上繳的 Shares 給予礦工理論值的付款,運氣成分和孤兒塊 (Orphan Block) 由礦池方承擔,因此手續費多半較高。 
  • RBPPS : 分潤方式算是 PPLNS 和 PPS 的結合體,在是出塊時會根據礦工上繳的 Shares 佔整體比例分配,由礦工承擔運氣,手續費多半較低。




孤兒塊 (Orphan Block)

「為什麼出塊了沒有獎勵?」一出孤兒塊就一定會被問到這個問題,其實嚴格來說孤兒塊並不是出塊,因為它最後沒有被整體網路確認加到區塊鏈中。孤兒塊的產生是因為兩個區塊幾乎在同時被開採出來,而整體網路就會需要達成共識要認證哪一個區塊作為區塊鏈的延續,而先被網路確認的區塊就會成為正宗,另一個就變成孤兒,確認的速度有點取決於距離主節點的距離,如果在地理位置上離大部分的算力較近就可以較快速的將這個區塊的消息傳開,當然即使是超大型礦池還是會有出孤兒塊的時候,所以這部分還是得要看點運氣啦。不過就像先前說的,它嚴格講起來並不算是出塊,所以當然也沒有獎勵囉。但以太坊 (Ethereum) 有另一種機制叫做叔叔塊 (Uncle Block),簡單說就是為了保障比較慢被確認的區塊,它雖然不位於主鏈上但仍然承認它的合法性,就像叔叔雖然不是直系血親但也是有血緣關係,所以也會有一個算法來給予獎勵 (有興趣的可以參考這篇)。





留言



這個網誌中的熱門文章

Linux (Ubuntu) 查詢硬碟容量、剩餘大小指令

在 Ubuntu Desktop 版本或有安裝 GUI 像 Xfce 的 Server 版本當然可以直接從圖形介面查看硬碟容量和已經使用的大小, 但如果是在純 CLI 版本或使用 SSH 連線時呢?那就需要用到指令了。 顯示硬碟容量、已使用、可用大小。 df -h 查詢資料夾所占硬碟的大小。 du -h 查詢檔案大小 ls -l

吃光硬碟讀寫的大怪獸 - Superfetch 是什麼?可以關嗎?

Superfetch 是 Windows 內建的硬碟快取功能,它會預先將檔案讀取起來到 Ram 裡方便稍後做使用,所以常常在工作管理員內都可以看到 Superfetch 往往占掉了不少的硬碟使用量,那這樣的情形是好的嗎?其實理論上並不會有太大影響,畢竟 Superfetch 只是將等會要讀取的內容先預置在 Ram 中,如果不趁硬碟負載小的時候優先讀取,之後反而可能忙不過來呢。當然如果你是使用 SSD 的話可能會為使用壽命擔心, 高頻率的讀取可能加速固態硬碟老化,那在讀取速度原本就很快的 SSD 當然就相對的沒有必要開啟 Superfetch 了。 Superfetch 在電腦待機時吃掉大部分硬碟使用量是很常有的事。 要關閉也很簡單, Win+R > services.msc 打開「服務」,找到 Superfetch。 右鍵 > 內容,將它更改為「 已停用 」後確定即可。

TLS / SSL 金鑰轉檔,「.crt / .key」如何轉成「.pem」?( OpenSSL 教學)

不管是哪個 Certificate Authority (CA) 發的憑證多半金鑰檔都是給「.crt / .key」格式的檔案,像是「ca_bundle.crt」、「 certificate.crt」和「.private.key」這種檔案, 但是在實際使用 (Nginx、Apache...等伺服器) 卻會需要的是「.pem」檔 ,那要怎麼轉換呢?其實可以直接使用 OpenSSL 這個軟體和幾行指令來達成。 OpenSSL 官方網站 :  https://www.openssl.org 下載頁面 :  https://www.openssl.org/source sudo apt-get install openssl 以 Linux (Ubuntu / Debian ...等) 為例,可以直接使用 apt-get 指令下載安裝 OpenSSL,如果是其他系統可以參考官方網站的說明。 openssl rsa -in private.key -text > private.pem openssl x509 -inform PEM -in certificate.crt > certificate.pem openssl x509 -inform PEM -in ca_bundle.crt > ca_bundle.pem 以前述所提到的「ca_bundle.crt」、「 certificate.crt」和「.private.key」三個檔案為例,就可以用上方的指令完成轉檔,其實同副檔名的轉檔指令都相同,所以兩個「.crt」的指令其實是重複的,也要記得套換成自己的檔案名稱。 如果需要申請免費的 SSL 憑證也可以參考之前介紹過的 SSL For Free ,它是使用「Let's Encrypt」核發的憑證,以及如果覺得申請憑證和定期更新太麻煩,也可以考慮自動化的 Caddy Server 能自動幫網站升級 HTTPS。