[挖礦] 架設礦池的兩三事
最近架了 Electroneum (ETN) 的礦池,有鑑於算力還是不太夠,
只好再寫一些廢話業配自己的礦池了,礦池網站 : https://omine.ga
- 網誌好讀版 : https://goo.gl/dzQ5rP
- 文內有些不太重要的連結就沒有搬過來,有興趣再去看就好
- PTT 網頁版 : https://www.ptt.cc/bbs/DigiCurrency/M.1521619008.A.F72.html
------------------------------------------------------------------------------
Outline
架設一個「Functionable」的礦池其實很簡單,到 GitHub 把別人寫好的 Node.js
Mining Pool 直接搬回家裝一裝馬上就能上線了,但實際上運行起來還是有很多「眉眉
角角」的存在,不過這些細節未必是別人不會跟你講,有時候反而是「別人覺得你應該
知道」。如果對於有相關經驗的人來說這些可能都只是常識,對我來講並不是,所以我
也會假設其他人都跟我一樣因而寫了這篇「圖解礦池架設」(https://goo.gl/QPn5tg),
就是想讓同樣有興趣架設礦池的新手能用比較熟悉的圖形介面去操作。
目前各個加密貨幣佔全網算力 10% 以上的礦池不在少數,我完全能理解大家喜歡在幾分
鐘就出塊的礦池挖礦 (實際上我也是),但這種超大型礦池的存在一方面也就違反的去中
心化的初衷,完全的去中心化是不可能也不合理的,不過能有更多的礦池來維護整體網
路的節點也絕非壞事,所以才會想從粗淺的技術面向去討論礦池架設,讓有興趣的人能
了解更多細節,也從完全 Newbie 的角度去談談「那些別人不會跟你講的事」。
------------------------------------------------------------------------------
而這篇會以「CryptoNight」算法的礦池為例,代表的加密貨幣包括「門羅幣」Monero
(XMR)、Electroneum (ETN)、Bytecoin (BCN) ...等。這個算法的特性在於可以使用
CPU 挖礦、硬體門檻低、抗 ASIC 設計,可以說是對實現去中心化的作法比較具體而
且嚴格。
------------------------------------------------------------------------------
Chapter 1 礦池選擇
這邊講的並不是選擇要挖哪個幣,CryptoNight 算法的貨幣都可以通用同一個礦池架構
。實際上困難的部分都有箇中翹楚先幫你做好了,光在 GitHub 上就能看到好幾十個版
本的 CryptoNight 礦池,就我所瞭解所有的分支都是從 @zone117x 的
node-cryptonote-pool 分叉而來的,這個最原始的版本即使在現在還是非常輕便好用,
並不佔據太多的伺服器資源。同類型我看到功能最完善的大概是 @SadBatman 的版本,
但很可惜它的有些功能是只設計給 Sumokoin 使用的,很多新部件都直接在 Javascript
內寫死,並不會自動抓取 Config 檔,為了把它套用在 ETN 上也是花了我不少腦細胞。
https://i.imgur.com/LaFIIrb.jpg
還有另一個赫赫有名的分支就是 @Snipa22 的版本,大家最熟悉的 SupportXMR 就是使
用這個版本架設而成的,但因為它多了註冊登入的功能 (這部分會用到 MySQL Database
),對我來說管理上比較麻煩也消耗更多的資源而因此作罷,何況我自己也是非常討厭註
冊會員的人,更不要說去管理了。
目前看到最完整的礦池版本包括以下額外功能 :
- TLS/SSL 連線
- 健康狀態監控
- Email 通知
- 自訂起付額
- 自訂礦工名稱
- 個別礦工圖表
- 出塊獎勵預測
其實這些也都不是多瞎趴的功能,但當別人的礦池有你卻沒有那差距就出來了,都已經
沒巨量算力吸引人了細節總要加減顧一下。
------------------------------------------------------------------------------
Chapter 2 技術困難
礦池的運作邏輯其實很簡單,單純就是一架一個節點 (Node) 和隨時可以轉帳的錢包然
後讓別人連線進來挖礦,每個人上繳的 Shares 都紀錄在 Redis 資料庫裡,有出塊就按
照比例大家一起分贓,所有數據再輸出成 API 從網頁介面呈現出來讓礦工可以查看。我
原本想更有條理的去討論每一個環節遇到的問題,但發現其實問題就是莫名其妙一大堆
根本沒有條理,所以只會大概提幾個代表。
Section 1 作業系統
在架設礦池的作業系統大概分成兩種,分別是 Linux 和 Windows Server,Windows
Server 我沒用過但聽說是微軟出的整人道具所以不討論。而且目前大部分網路上能
找到的資料也都是基於 Linux 系統或 Docker 的環境,所以一定是推薦用 Linux 啦
,但要用哪個發行版呢?其實我覺得沒什麼差,礦池並不是真的會讓伺服器附載量超
大或完全不能接受斷線的進程 (可能掉一兩個 Shares),但如果你到網路上去找推薦
的作業系統多半得到的結果就輕量穩定選 Debian 或 CentOS、專業選 Red Hat、新潮
選 Ubuntu Server,當然這些都是很主觀 (甚至很固著) 的評價,也像我說的礦池並
不是對伺服器環境要求很嚴苛的進程所以可以選擇自己習慣的作業系統就好了。
https://i.imgur.com/OecECZX.jpg
那我選擇 Ubuntu Server 主要是社群中新的資料比較完備 (雖然大部分是 Desktop
版本的但都通用),加上本身也比較熟悉 Ubuntu 的操作 (不過在 SSH 裡其實也都是
一個樣)。當然如果你是租用 GCP 或 AWS 等雲端主機可能沒這麼多選擇,而且它們
提供的也都是已經虛擬化的機器所以也不適合再去用 ESXi 做虛擬化管理,那就只好
有什麼 Linux 就用什麼囉。
Section 2 TLS/SSL
礦工跟礦池的連線需要加密,礦池網站連線也需要加密,API 也要加密,基本上現在
什麼都需要 TLS/SSL,尤其是網站架設的部分,Google 搜尋引擎已經確認了會優先
收錄 HTTPS 安全連線的網頁,而大部分的挖礦程式也早已開始支援 TLS/SSL 的連線
。
https://i.imgur.com/fHXdHdD.png
這部分會先從礦池埠口 (Port) 的加密連線開始說起,在我一開始安裝的礦池版本是
沒有這個功能的所以我一直很鬼打牆的想要靠 Reverse Proxy 來達成,其實 Proxy
本身並沒有問題但我一直把他想成熟悉的 HTTP Protocol,一直想靠 Nginx 做一個
反向代理來加密挖礦埠口,這個想法就跟想把一台汽車開在水上一樣蠢,因為不同的
傳輸協定就像講著不同的語言,就算成功傳了過去對方的接口也是聽不懂。所以最後
還是去找比較新版本的礦池來將功能移植過來再加上「Let's Encrypt」的 SSL 憑證
才完成的。
而網頁伺服器大部分人應該都會想到使用 Apache、Nginx 加上憑證就可以成功升級
HTTPS,但我真的對寫落落長的 Config 檔很感冒,所以推薦一個會自動簽發憑證、
設定檔簡短的的伺服器「Caddy」,它會將架設的網站直接預設為 SSL 連線 (自動幫
你用 Certbot) 而且 Config 檔只要一行就可以正確運行了,大部分的功能也都算完
備 (Proxy、Gzip、Cache ...等),但需要注意的是伺服器端的 Cache 是需要額外裝
插件的,如果懶得用可以用 Cache-Control 開啟瀏覽器端快取的控制就好。
而網頁介面會抓取 API 提供的數據加以圖形化,所以 API 也得要用 SSL 傳輸才可
以,不然在以加密的連線中呼叫未加密的物件會被瀏覽器拒絕,作法其實是和礦池本
體一樣的就不多贅述。
Section 3 網站優化
這部分其實並不困難,單純是因為礦池為了讓你可以隨裝即用寫了非常多 Javascript
去抓取 Config 檔,所以你只要改好 Config 檔礦池網站幾乎就可以直接上線了,以
及外連了不少 JS 腳本和 CSS 樣式表,這兩部分對 SEO (搜尋引擎最佳化) 都是不太
友善的做法,所以我們要做的事就是盡可能把不必要的 JS 刪掉改成更容易檢索的元
素,以及自己 Host 所有的外連檔案並且把同類型的檔案合併,我做的更絕一點就是
直接給它一個 <script> 或 <style> 然後全部塞進去,這樣連外連都免了。
寫程式要做 Code Beautify (排版),但網頁要上線卻剛好相反,最好的情況就是原始
碼都擠在一起想看都看不懂,這樣才能將網頁大小降到最低、瀏覽器解析速度提升到
最快,所以要善用「JS Compressor」和「CSS Compressor」來將程式碼壓縮。
以及所有靜態元素都要快取 (Cache),可以將「JS、CSS、IMG」全部整理在一個資料
夾內然後用你習慣的架站伺服器針對這個資料夾設定一個禮拜以上的瀏覽器快取。
https://i.imgur.com/pS83ZVN.jpg
可以藉由 Google PageSpeed Insights 來看看你的網站目前優化的如何,也可以根據
Google 所提供的建議來去修正網站,雖然並不是每一個項目都會直接影響到 SEO 但
絕對會反應在使用者的感官上,如果礦池網站載入速度慢人家可能就會覺得伺服器品
質不好所以不挖了 (雖然根本是兩個不同的系統)。
------------------------------------------------------------------------------
Chapter 3 算力告急
這大概是所有剛起步的礦池都會遇到的問題吧,我目前也是非常煩惱算力不夠導致出塊
頻率低的情況,畢竟要好幾天才能出一個區塊對礦池來說真的是一點都不討喜,那目前
唯一能做的就是盡量完善礦池的功能和一直到 PTT 業配自己的礦池。其實光從礦池選
擇上就反應了去中心化是一件很難達成的事,大家都會想十分鐘出一次區塊、每天收一
次付款,而且經營已久的大礦池 (Nanopool、Mining Pool Hub) 又提供超多貨幣的礦
池,造成不少新興小幣的挖礦事業都被固定大戶給包走了。
https://i.imgur.com/Y2R8eg6.jpg
出塊頻率低就有點像抽樂透,如果小於理論時間就出塊那等於是大賺,像我一開始去
Nicehash 買算力來挖,因為運氣好的關係最後的收益是花費的兩倍,但一定就會有相反
的情況,可能挖了半天就是不出塊,大家也分不到錢。因此在礦池中加了「預估下次出
塊獎勵」讓大家可以看到下一次能拿到多少,也算是一種挖礦動力吧。
------------------------------------------------------------------------------
Chapter 4 待解的問題
其實最初會想要架礦池是為了 Bypass Coinhive,我本身應該可以算是奈米戶裡面的重
度使用者了,在 Coinhive 的平均算力可以達到 2000 H/s 以上,所以就想架一個礦池
讓所有 JS Miner 連線到自己的礦池,一來避掉了三成手續費,二來我想靠超低難度的
挖礦埠口讓收益最大化,但現實往往沒我想的順利,我所說的其實我都做到了,但在超
低難度的情況下會很平凡的出 Shares 對礦池來說是不小的附載,如果改成浮動難度又
非常容易被 Timeout (實際上可能是對方已經跳出網頁),種種的因素造成附載量最小
化和收益最大化無法兼顧,可能會需要一個更好的礦池機制來去針對網頁挖礦優化,所
以這部分就暫時告吹了。
https://i.imgur.com/11xvRyv.jpg
也不得不說 Coinhive 收三成手續費其實有它的道理在,第一它是用 Hashes 計算收益
並不是 Shares,在瀏覽器挖礦時其實算力非常低 (Ryzen5 1600 只能跑 100H/s),要挖
到出 Share 其實是有點難度的,它直接以 Hashes*0.7 計價我個人認為是合理的,這部
分我也曾經寫信去靠北過怎麼收這麼多,當時它回應我它們其實賺的沒有大家想像的多
甚至有時會賠本經營,我現在開始有點相信它了,但那 Coinhive 到底賺什麼?由於
Monero 手續費非常高,大部分礦池也都有設定較高的起附門檻甚至得自行負擔轉帳費,
Coinhive 也不例外,要達到 0.5 XMR 才能免手續費,我猜它就是賺那些永遠領不出來
的 Dust,光用想的就覺得很可怕,因為要靠網頁挖礦挖到 0.5 XMR 可不是簡單事啊。
------------------------------------------------------------------------------
P.S.
有關於礦池架設的資源在網路上其實一點都不少,只是多半都是英文的資料,我自己習
慣要查什麼也都是用英文來找,有遇到任何問題其實可以翻一翻 GitHub 的 Issues,
裡面往往有不少前人也可能遇過同樣的困難。
再講一些廢話,其實整個幣圈的中文資源一點都不少,技術向的文章可以說是寫的會讓
人看到痛哭流涕那種,但不知道為何從 Google 搜尋非常多關鍵字最後跳出來的都是那
幾個專 PO 拔辣新聞的媒體網站,好的文章反而都被埋沒了,這點真的是滿讓人不解的
,如果想找有內容的文章可以上 Medium 這個平台逛逛,有滿多不錯的資源。
- 最後還是廣告一下自己的礦池 : 台灣 Electroneum 礦池 (https://omine.ga)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.238.107.163
※ 文章網址: https://www.ptt.cc/bbs/DigiCurrency/M.1521619008.A.F72.html
※ 編輯: JHBC (36.238.107.163), 03/21/2018 15:58:01
推
03/21 16:10,
6年前
, 1F
03/21 16:10, 1F
推
03/21 16:26,
6年前
, 2F
03/21 16:26, 2F
→
03/21 16:31,
6年前
, 3F
03/21 16:31, 3F
市值前 50 的幣真的不用想了,除非礦池自己就是礦場
推
03/21 16:37,
6年前
, 4F
03/21 16:37, 4F
推
03/21 17:27,
6年前
, 5F
03/21 17:27, 5F
推
03/21 17:42,
6年前
, 6F
03/21 17:42, 6F
不過這篇文應該又可以再多加一項了,剛剛被人指控說人數造假,
在昨天為了讓礦池無縫更新所以我直接開了另一個礦池但使用完
全一樣的 Port 跟資料庫,但造成 Redis 在人數的統計上等於被
多算了一次所以會卡不少人數在礦池介面 (實際上是沒有影響),
而對方指控的依據是直接看網站的原始碼然後說礦池的人數是寫
死在 73 人,下面是它的證據 (?)
https://i.imgur.com/yDCbwCa.jpg
如果自己架礦池應該也很清楚礦池網站是用 Javascript 抓取 API
的資料來呈現的才對,被這麼有創意的方式指控我也是滿驚訝的...
※ 編輯: JHBC (36.238.107.163), 03/21/2018 17:46:32
※ 編輯: JHBC (36.238.107.163), 03/21/2018 18:25:01
→
03/21 18:27,
6年前
, 7F
03/21 18:27, 7F
→
03/21 18:27,
6年前
, 8F
03/21 18:27, 8F
※ 編輯: JHBC (36.238.107.163), 03/21/2018 18:36:06
推
03/21 19:01,
6年前
, 9F
03/21 19:01, 9F
推
03/21 19:09,
6年前
, 10F
03/21 19:09, 10F
→
03/21 20:20,
6年前
, 11F
03/21 20:20, 11F
推
03/21 22:11,
6年前
, 12F
03/21 22:11, 12F
推
03/21 22:32,
6年前
, 13F
03/21 22:32, 13F
推
03/21 23:06,
6年前
, 14F
03/21 23:06, 14F
推
03/21 23:28,
6年前
, 15F
03/21 23:28, 15F
→
03/22 00:27,
6年前
, 16F
03/22 00:27, 16F
推
03/22 15:56,
6年前
, 17F
03/22 15:56, 17F
推
03/22 17:10,
6年前
, 18F
03/22 17:10, 18F
推
03/23 13:16,
6年前
, 19F
03/23 13:16, 19F
推
03/26 23:01,
6年前
, 20F
03/26 23:01, 20F
DigiCurrency 近期熱門文章
PTT數位生活區 即時熱門文章