’18年版マイニングプール構築法④(stratum-mining構築)

最後の難関、stratum-mining

構築に関する質問の中で一番多いstratum-mining。さくっと入れれるように手順を整理。

非常によくまとまっているQuickstart Guide Install MPOS on Ubuntu 16.04 というサイトがあるのですが、いくつか問題があるので(pipバージョン違いによるエラー、catのあたりでエラー、足りないライブラリがある、必要ないライブラリを入れている…etc)、簡単に入るようにシェルスクリプトを最初から作りました。

早速導入

pipバージョン違いによるエラーはpython -m で回避
下記の内容をシェルスクリプトに保存して実行するだけで入るはず。(ubuntu16.04でサーバ構築後、’18年版マイニングプール構築法②のcoindを入れた環境で検証を実施。)

cd ~
sudo apt-get update
sudo apt-get dist-upgrade -y python-twisted python-mysqldb python-dev python-setuptools python-memcache python-simplejson python-pip memcached python-pylibmc python-mysqldb
pip install --upgrade pip
sudo easy_install -U distribute
sudo python -m pip install autobahn
sudo python -m pip install pycrypto
git clone https://github.com/ahmedbodi/stratum-mining.git
cd stratum-mining
git submodule init
git submodule update
cd ~
cd stratum-mining/externals/stratum
cat <<EOF > setup.py
#!/usr/bin/env python
#from distribute_setup import use_setuptools
#use_setuptools()
#python setup.py sdist upload
from setuptools import setup
from stratum import version
setup(name='stratum',
version=version.VERSION,
packages=['stratum',],
py_modules=['distribute_setup',],
zip_safe=False,
install_requires=['twisted', 'ecdsa', 'pyopenssl', 'autobahn',]
)
EOF
sudo python setup.py install
cd ~/stratum-mining/externals/litecoin_scrypt
sudo python setup.py install #ここでscryptのマイニングに対応させる
sudo sed -i s/autobahn.websocket/autobahn.twisted.websocket/ /usr/local/lib/python2.7/dist-packages/stratum-0.2.13-py2.7.egg/stratum/websocket_transport.py
cp ~/stratum-mining/conf/config_sample.py ~/stratum-mining/conf/config.py

設定

設定ファイルはconfディレクトリ内のconfig.pyを編集します。

vi stratum-mining/conf/config.py

必ず設定しないといけない場所

まずは先頭部分、coindとの接続に関する設定を行います。

CENTRAL_WALLET = 'set_valid_addresss_in_config!' # マイニング先のcoindのアドレスを指定
COINDAEMON_TRUSTED_HOST = 'localhost' # coindの接続先を指定
COINDAEMON_TRUSTED_PORT = 28332       # ポートを指定
COINDAEMON_TRUSTED_USER = 'user'      # coindで設定したrpcuserを指定
COINDAEMON_TRUSTED_PASSWORD = 'somepassword' # coindで設定したrpcpasswordを指定

COINDAEMON_ALGO = 'riecoin' #通貨のアルゴリズムを指定。dogeはscrypt,kumaはquarkを指定。

対応アルゴリズムはscrypt, sha256d, scrypt-jane, skeinhash, quark, riecoinとなります。
これ以外のアルゴリズムに対応する場合は、別途アルゴリズムの定義関数をもってきて、pythonで使えるようにインストールする必要があります。(2017年度版のプール構築の記事でyescryptを追加する方法が記載されています)

次に、stratum-miningの待受ポート設定をします。

# ******************** TRANSPORTS *********************
--- 中略 ---
# Port used for Socket transport. Use 'None' for disabling the transport.
LISTEN_SOCKET_TRANSPORT = 3333 # マイナーが指定するポートを設定 

次は、DBとの接続設定です。stratum-miningではマイナーから提出された成果(share)をMPOSで作成したshareテーブルに書き込んでいきます。その為の書き込み先の指定になります。また、MPOSで設定されたworkerを読み出すことも行っています。

# ******************** Database  *********************
---中略---
# MySQL
DB_MYSQL_HOST = 'localhost'  #DBサーバ名
DB_MYSQL_DBNAME = 'pooldb'   #DB名(mposなど)
DB_MYSQL_USER = 'pooldb'     #DBへの接続ユーザ名
DB_MYSQL_PASS = '**empty**'  #DBへの接続パスワード。emptyは危険なので避ける

以上で最低限の設定は終わりです。
なお、よくプールの説明で出てくる難易度については、

VDIFF_MIN_TARGET

の部分で設定します。
プール難易度は、まずは1から初めて自動設定でどの程度になるか、MPOSのworkerの画面など見ながら試行錯誤するのが良いかと思います。

起動

cd ~/stratum-mining/
twisted -ny launchar.tac

初回起動はあえてデーモン化せずにログを確認できるように-nyをつけます。
問題なければCTRL+Cで終わらせて、twisted -y launchar.tac で起動。

動作確認

twistd -nyで起動すると画面にログが詳しく表示されるので、このログを追っていきます。
ポイントは「ERROR」から始まる行がないか、自分が思っている暗号化アルゴリズムが指定されているかを確認します。

うさぎコイン採掘所のbunnycoinのtwistdのログを一部下記に貼り付けます。(dogecoinなど、他にscryptを使っているコインも同じように表示されるかと思います。)

2018-04-25 18:07:59,622 DEBUG halfnode # Logging initialized
2018-04-25 18:07:59,623 DEBUG halfnode # Got to Halfnode
2018-04-25 18:07:59,623 DEBUG halfnode # ########################################### Loading LTC Scrypt #########################################################
2018-04-25 18:07:59,623 DEBUG halfnode # ########################################### NOT Loading SHA256 Transaction Message Support ######################################################
2018-04-25 18:07:59,624 DEBUG coinbasetx # Logging initialized
2018-04-25 18:07:59,624 DEBUG block_template # Logging initialized
2018-04-25 18:07:59,624 DEBUG block_template # Logging initialized
2018-04-25 18:07:59,659 DEBUG coinbaser # Logging initialized
2018-04-25 18:07:59,659 DEBUG bitcoin_rpc_manager # Got to Bitcoin RPC Manager
2018-04-25 18:07:59,659 DEBUG bitcoin_rpc # Got to Bitcoin RPC
2018-04-25 18:07:59,660 INFO mining # Connecting to litecoind...
2018-04-25 18:07:59,660 INFO bitcoin_rpc # Checking for submitblock
2018-04-25 18:07:59+0900 [-] Log opened.
2018-04-25 18:07:59+0900 [-] twistd 16.0.0 ( 2.7.12) starting up.
2018-04-25 18:07:59+0900 [-] reactor class: twisted.internet.epollreactor.EPollReactor.
2018-04-25 18:07:59,711 DEBUG bitcoin_rpc # submitblock detected.
2018-04-25 18:07:59,711 INFO mining # Found submitblock
2018-04-25 18:07:59,716 INFO mining # Coin detected as POW
2018-04-25 18:07:59,716 INFO mining # Connected to the coind - Begining to load Address and Module Checks!
2018-04-25 18:07:59,716 DEBUG coinbaser # Got to coinbaser
2018-04-25 18:07:59,720 INFO coinbaser # Coinbase address 'コインのアドレス' is valid

確認すべきポイント
・アルゴリズムが指定されているものになっているか(上記では### Loading LTC Scrypt ###になっている。)
・coindとの通信が正しく行われているか(上記では「Coinbase address ‘コインのアドレス’ is valid」と表示。これでcoindと正しく通信が行われている。)
上記2点がクリアできているか確かめてみましょう。

よくあるエラーとしては、mysqlの接続設定ミス、coindとの接続設定ミスがあります。ログは英語ですが、内容を見てエラー部分の設定見直しを行いましょう。

マイニング開始

ここまでできたらマイニング開始です。ufw等のファイアウォールソフトでマイニング先のポートを開けて、自分のPCでマイニングテストです。
ユーザとwokerをMPOSで作成した後に、実際にマイニングを行います。

yay!!が出たらおめでとうございます!プールが動き出しました!

ここからMPOSを中心に実際の運用に合わせた設定修正などが必要になりますが、ひとまずお疲れ様でした!

いろんなアルゴリズムに対応させたい!

掘りたいコインのアルゴリズムに対応させたい!という話が出てくるかと思います。scryptだけだと物足りないよね。これは2017年度版のstratum-mining導入記事が参考になるかと思います。bitzenyが利用しているyescryptに対応させる話があるので、これを参考にしてみてください。

上の記事でyescryptに対応させるパッチを入手し、下の記事で適用させています。