この記事は RCC OBOG Advent Calendar 2017 の10日目の記事です。
昨日は、@pg_motさんの「もっとGoogle Homeで作ったスマートホームを自慢したい男たち」でした。
大学院を卒業してはやウン年、立派な老害OBとなったik-fibです。
最近では、仕事で決済系のことをしつつ、個人では仮想通貨に興味が出てきました。(とはいえ、ここ数日の値動きは激しすぎて頭がおかしくなってきた)
そんな仮想通貨について、マイニングプールを自前で作ってみたくなったのでやってみました。
マイニングプールとは
そもそも、マイニングプールとはなんでしょうか。
それを説明するために、仮想通貨のマイニングの仕組みについて簡単に説明します。
仮想通貨に使用されているブロックチェーンに新しいブロックを追加するには、だれかがそのブロックを「承認」する必要があります。
ほとんどの仮想通貨では、その「承認」を非常に大きな計算量を必要とするようになっており、多くの機器によって日々計算がされています。(計算量以外での「承認」の仕組みとして、 Proof of Stakeや NEMのProof of Importanceなどもありますが、ここでは割愛します)
その計算合戦に直接参加することもできますが、多くの仮想通貨のネットワークではすでに大量のユーザー、専用機器による大規模なグループもいるため、小さな計算量しかない個人のPCなどで「承認」を成功させ、報酬をもらえる可能性は高くありません。
そのため、基本的に個人等でマイニングに参加する際にはプールに参加する場合が多いです。プールに参加してマイニングを行う場合、そのプール全体で「承認」に取り組み、プールが「承認」に成功したときには、そこまでに貢献した計算量に応じて、報酬が分配されるようになっています。そのため、小さい計算量でもその計算量に応じた報酬を獲得することが可能になっています。
現在、仮想通貨には多くの種類があり、それぞれの通過に対して、多くのマイニングプールがすでに存在しています。
その中で今回作成するのは、BitZeny のマイニングプールです。
BitZenyは、普通のPCで採掘できる仮想通貨と銘打っており、GPUやASIC(計算用の専用機器)での計算が困難になっています。
そのため、個人のPCでも十分マイニングが可能です。(最近、数少ない国産コインであることから、第2のモナコインとして著名な方々にも注目され、採掘難易度は上がっていますが…)
マイニングプールに使用するサーバの契約
マイニングプールは、様々なユーザーからの計算結果を受け取る必要があるため、ある程度安定したサーバが必要になります。
今回は、海外のVPSであるTime4VPSを使用することにしました。
Time4VPSを使用する理由としては、以下のような理由からです。(お試しなのでVPSも新しいのを試してみたかったというのが大きい)
- 価格が安い
- 割りと安定しているという話を聞く
- 前から記事を見かけて試してみたかった
支払い方法として、クレジットカード・PayPalに加えビットコインでの支払いも可能です。
ほとんど、画面の指示通りに登録すれば良いですが、私が少し躓いたところとしては、電話番号登録のところでした。
画面内に + は入力しないでくださいと書いてはいますが、これは本当に+だけを省いて、(日本の番号の場合)国際番号の81は付ける必要があります。
登録後にSMS認証をする必要があるので、上記と合わせて番号間違い等ないように気をつけましょう。
VPSの初期設定をする
VPSを契約しただけでは、セキュリティ等が不安なのでそこを設定していきます。
基本的には、過去に行ってきたVPSの設定とほぼ同じなので今回は割愛します。(これを実行するAnsible playbookを書いたのでそのうち公開したい)
マイニングプールの作成
bitzenyのインストール
公式リポジトリのREADMEにubuntu 14.04でのインストール手順が書いてあるので、それを参考にインストール
(現在のubuntu最新バージョンである16.04にインストールしたので、そちらに合わせて微修正してます)
前提ライブラリのインストール
$ sudo apt-get install build-essential libtool autotools-dev autoconf libssl-dev libboost-all-dev pkg-config
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:bitcoin/bitcoin
$ sudo apt-get update
$ sudo apt-get install libdb4.8-dev libdb4.8++-dev
ビルドエラーの対応修正を行う
bitzenyの公式リポジトリそのままでは、ubuntu 16.04でビルドしたときに以下のエラーが出ます。
rpcrawtransaction.cpp:299:77: required from here
/usr/include/boost/variant/get.hpp:178:5: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE'
BOOST_STATIC_ASSERT_MSG(
^
Makefile:879: recipe for target 'rpcrawtransaction.o' failed
make[3]: *** [rpcrawtransaction.o] Error 1
この問題については、本家bitcoinでも過去のissueで上がっており、対応策もそこから見つかりました。
- https://github.com/bitcoin/bitcoin/issues/6113
- https://github.com/dashpay/dash/pull/328
以下のdiffのように修正するとビルドできます。
diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp
index 1039518..b6f0726 100644
--- a/src/rpcrawtransaction.cpp
+++ b/src/rpcrawtransaction.cpp
@@ -296,7 +296,7 @@ Value listunspent(const Array& params, bool fHelp)
CTxDestination address;
if (ExtractDestination(pk, address))
{
- const CScriptID& hash = boost::get(address);
+ const CScriptID& hash = boost::get(address);
CScript redeemScript;
if (pwalletMain->GetCScript(hash, redeemScript))
entry.push_back(Pair("redeemScript", HexStr(redeemScript.begin(), redeemScript.end())));
(本家にPRは送ったけど、活動ないっぽいし取り込まれない気がする)
- https://github.com/bitzeny/bitzeny/pull/4
また、forkしたリポジトリには、この修正を反映済みです。
- https://github.com/ik11235/bitzeny
ビルドする
$ ./autogen.sh
$ ./configure --without-miniupnpc --without-gui --disable-tests
$ make
(必要に応じて、 make install等でPATHの通っている箇所にインストールしてください)
設定ファイル追加・動作確認
bitzenyのビルドが完了したら、設定ファイルを作成します。
~/.bitzeny/bitzeny.conf
server=1
rpcallowip=localhost
rpcuser=適当なユーザー名
rpcpassword=パスワード
addnode=113.153.209.203
addnode=118.241.118.74
addnode=119.245.16.219
addnode=157.7.222.158
addnode=203.178.132.125
addnode=220.217.202.90
addnode=27.120.112.59
addnode=27.96.51.15
addnode=58.191.220.12
直接rpcでつなげるのは、localhostからだけなので、rpcallowipはlocalhostで問題ありません。
また、後半のaddnodeは設定無しで実行した際、node情報が見つからず同期が始まるまでに非常に時間がかかるので、
LA Mining Poolの DNS Seedより接続先ノードを明示的に追加しています。
これで接続したら以下のコマンドでデーモン起動、および動作確認を行います。
$ .src/bitzenyd -daemon
$ ./src/bitzenyd getinfo
{
"version" : 1010000,
"protocolversion" : 70006,
"walletversion" : 60000,
"balance" : 0.00000000,
"blocks" : 0,
"timeoffset" : 0,
"connections" : 0,
"proxy" : "",
"difficulty" : 0.00006103,
"testnet" : false,
"keypoololdest" : 1512879163,
"keypoolsize" : 101,
"paytxfee" : 0.00000000,
"relayfee" : 0.00001000,
"errors" : ""
}
MPOSのインストール
次にマイニングプールに各自が参加するポータルであるMPOSをインストールします。
mysqlのインストール
MPOSはmysqlを使用するので、別途インストールする必要があります。
$ sudo apt-get install mysql-server
mysql5.7の場合、別途以下の設定が必要です。
(/etc/mysql/mysql.conf.d/mysqld.cnf に以下を追記)
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
ソースコードの取得
$ git clone https://github.com/MPOS/php-mpos.git mpos
初期設定
使用するDB・テーブルの作成
mposで必要なDBを作成した後、リポジトリに含まれているテーブル情報を読み込ませます。
$ sudo mysql -p -e "create database mpos"
$ sudo mysql -p mpos < sql/000_base_structure.sql
mpos用のMySQLユーザーの追加
mpos用に新しくユーザーを作り、そのユーザーはmposDBしかさわれないように設定します。
$ mysql -u root -p
CREATE USER mpos_user@localhost IDENTIFIED BY 'パスワード'
GRANT all ON mpos.* TO mpos_user@localhost;
webサーバのインストール・設定
mposはwebサイトとして動作するアプリケーションなので、別途webサーバの設定が必要です。今回はApacheを使用します。
$ sudo apt-get install apache2 php7.0-mysqlnd php7.0-curl php7.0-json php7.0-curl libapache2-mod-php7.0 php-memcached
そしてmposを/var/www以下に配置してApacheから認識されるようにします。
$ mv ../mpos /var/www/mpos/
$ chown -R www-data /var/www/mpos/templates/compile /var/www/mpos/templates/cache
$ cp /var/www/mpos/tinclude/config/global.inc.dist.php /var/www/mpos/tinclude/config/global.inc.dist.php
そして、この中のpublicがドキュメントルートになるように設定ファイル(/etc/apache2/sites-enabled/000-default.conf に追記 or 同ディレクトリに新規ファイルとして追加)に記載します。
<VirtualHost 212.24.111.39>
DocumentRoot /var/www/mpos/public/
ServerName zenypool.work
[中略]
</VirtualHost>
設定ファイルに設定を追加
mposにDBの接続用の情報や、マイニングウォレットの情報などを設定します。
/var/www/mpos/include/config/global.inc.php
$config['db']['host'] = 'localhost';
$config['db']['user'] = 'mpos_user';
$config['db']['pass'] = '設定したパスワード';
$config['db']['port'] = 3306;
$config['db']['name'] = 'mpos';
[中略]
$config['wallet']['host'] = 'localhost:9252';
$config['wallet']['username'] = 'rpcuser';
$config['wallet']['password'] = 'rpcpass';
$config['currency'] = 'ZNY';
メール送信を有効にする
MPOSでは、ユーザー登録の際にメール認証が必要なので、sendmailやpostfix等でメールを送れるようになっている必要があります。
今回はpostfixを使用します。
$ sudo apt-get install postfix
(設定は割愛します)
ここまで行えば、設定は完了です。
ただ、最初に作られたアカウントがadmin権限を自動的に持つようなので、本来であれば自分しか見られない状態にした上で最初にアカウントを作っておくほうが安全かと思います。
stratum-miningのインストール
stratum-miningは、今回のプールマイニングの要である、複数人でマイニングするプールを管理・処理を行うアプリケーションです。
ソースのDLと必要ライブラリのインストール
はじめに必要なコードをダウンロードします。
$ git clone https://github.com/ahmedbodi/stratum-mining.git stratum-mining
$ git clone https://github.com/ahmedbodi/stratum.git
$ git clone https://github.com/bitzeny/zny_yescrypt_python.git zny_yescrypt_addon
$ git clone https://gist.github.com/9db1723161bc2650a1b1.git stratum-mining-znypatch
次にこれらをインストールしていきます。ただ、最初にこちらを参考にインストールしていたところ、pythonのライブラリが足りずinstallに失敗したため、必要なものを先にインストールしておきます。(python力が低いので手順にミスがあるのか、なにか間違ってたかがわかってない)
$ sudo apt-get install python-setuptools python-pip python-twisted python-mysqldb python-dev python-setuptools python-memcache python-simplejson libmemcached-dev zlib1g-dev
$ sudo pip install Automat
$ sudo pip install incremental
$ sudo pip install constantly
$ sudo pip install zope.interface
$ sudo pip install cryptography
$ sudo pip install pylibmc
launcher.tacの修正
以下のissueと似たようなエラーも発生するため、launcher.tacを以下のように修正します。
diff --git a/launcher.tac b/launcher.tac
index 97e168a..10338fe 100644
--- a/launcher.tac
+++ b/launcher.tac
@@ -3,7 +3,7 @@
# Add conf directory to python path.
# Configuration file is standard python module.
import os, sys
-sys.path = [os.path.join(os.getcwd(), 'conf'),os.path.join(os.getcwd(), 'externals', 'stratum-mining-proxy'),] + sys.path
+sys.path = [os.path.join(os.getcwd(), 'conf'),os.path.join(os.getcwd(), '.'),os.path.join(os.getcwd(), 'externals', 'stratum-mining-proxy'),] + sys.path
- https://github.com/Crypto-Expert/stratum-mining/issues/97
- https://github.com/Crypto-Expert/stratum-mining/issues/375
stratum-miningをyescryptに対応させる
このままでは、stratum-miningはBitZenyのアルゴリズムであるyescryptに対応していないので、対応させる修正を行います
$ cd zny_yescrypt_addon/
$ sudo python setup.py install
$ cd ../stratum-mining-znypatch/
$ patch -p1 < ../stratum-mining-znypatch/stratum.patch
stratum-miningを最新化(gitsubmoduleのアップデート)
$ cd stratum-mining
$ git submodule init
$ git submodule update
$ cd externals/litecoin_scrypt/
$ sudo python setup.py install
stratumのインストール
$ cd stratum-mining/externals/stratum
$ sudo python setup.py develop
各種設定
stratumに必要な各種設定を行います。
はじめに、設定ファイルに必要なBitZenyのウォレットアドレスを取得します。
$ bitzeny-cli getaccountaddress “”
Z*********************************
次にサンプルファイルをコピーして設定ファイルの雛形を作成します。
$ cp stratum-mining/conf/config_sample.py stratum-mining/conf/config.py
その後、stratum-mining/conf/config.pyの以下の項目を編集します。
CENTRAL_WALLET = 'Z*********************************' #bitzenyのウォレットアドレス
COINDAEMON_TRUSTED_HOST = 'localhost'
COINDAEMON_TRUSTED_PORT = 9252
COINDAEMON_TRUSTED_USER = 'zeny-user' #最初に指定したbitzenydのrpcユーザ名
COINDAEMON_TRUSTED_PASSWORD = 'SOMETHINGRANDOMPASS' #最初に指定したbitzenydのrpcパスワード
COINDAEMON_ALGO = 'zny_yescrypt' #zny_yescryptを指定
LISTEN_SOCKET_TRANSPORT = 19666 #stratumで利用する任意のポート (このポートを空ける)
DB_MYSQL_HOST = 'localhost' #DBのホスト名
DB_MYSQL_DBNAME = 'mpos' #mposで利用するDB名
DB_MYSQL_USER = 'mpos-user' #mysqlのユーザー名
DB_MYSQL_PASS = 'SOMETHINGRAMDOMPASSWORD' #mysqlのパスワード
DB_MYSQL_PORT = 3306
POOL_TARGET = 1 # プール難易度
そして、上記で指定したポートを開放しておきます。(そもそもの有効化やhttp[s],ssh等のポートは必要に応じて追加してください)
$ sudo ufw 19666
stratumの修正
このままでは起動しないので、/usr/local/lib/python2.7/dist-packages/stratum-0.2.13-py2.7.egg/stratum/websocket_transport.py
を以下のように修正します。
--- a/usr/local/lib/python2.7/dist-packages/stratum-0.2.13-py2.7.egg/stratum/websocket_transport.py
+++ b/usr/local/lib/python2.7/dist-packages/stratum-0.2.13-py2.7.egg/stratum/websocket_transport.py
@@ -1,4 +1,4 @@
-from autobahn.websocket import WebSocketServerProtocol, WebSocketServerFactory
+from autobahn.twisted.websocket import WebSocketServerProtocol, WebSocketServerFactory
from protocol import Protocol
from event_handler import GenericEventHandler
stratumの起動
$ twistd -ny launcher.tac
これで起動する…はずです。
起動自体は確認したのですが、rpcで接続できているかは未確認です(理由は後述)
twistedを更新
このまま起動しても、twistedが以下のエラーを出力していました。
2017-12-15T19:23:58-0500 [twisted.internet.defer#critical] Unhandled error in Deferred:
2017-12-15T19:23:58-0500 [twisted.internet.defer#critical]
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/Twisted-17.9.0-py2.7-linux-x86_64.egg/twisted/internet/defer.py", line 1386, in _inlineCallbacks
result = g.send(result)
File "/home/ik/stratum-mining/./mining/__init__.py", line 127, in setup
on_startup.callback(True)
File "/usr/local/lib/python2.7/dist-packages/Twisted-17.9.0-py2.7-linux-x86_64.egg/twisted/internet/defer.py", line 459, in callback
self._startRunCallbacks(result)
File "/usr/local/lib/python2.7/dist-packages/Twisted-17.9.0-py2.7-linux-x86_64.egg/twisted/internet/defer.py", line 567, in _startRunCallbacks
self._runCallbacks()
--- ---
File "/usr/local/lib/python2.7/dist-packages/Twisted-17.9.0-py2.7-linux-x86_64.egg/twisted/internet/defer.py", line 653, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/home/ik/stratum-mining/externals/stratum/stratum/server.py", line 35, in setup_finalize
from twisted.application import service, internet
File "/usr/local/lib/python2.7/dist-packages/Twisted-17.9.0-py2.7-linux-x86_64.egg/twisted/application/internet.py", line 54, in
from automat import MethodicalMachine
File "/usr/local/lib/python2.7/dist-packages/automat/__init__.py", line 2, in
from ._methodical import MethodicalMachine
File "/usr/local/lib/python2.7/dist-packages/automat/_methodical.py", line 34, in
@attr.s(frozen=True)
exceptions.TypeError: attributes() got an unexpected keyword argument 'frozen'
そのため、以下のコマンドでtwistedを最新のものに更新します。
$ python -m pip install --upgrade git+https://github.com/twisted/twisted
ただ、このまま更新しただけでも以下のエラーが出ます。
2017-12-15T22:50:06-0500 [twisted.internet.defer#critical]
Traceback (most recent call last):
File "/home/user/.local/lib/python2.7/site-packages/twisted/internet/defer.py", line 1386, in _inlineCallbacks
result = g.send(result)
File "/home/user/stratum-mining/./mining/__init__.py", line 127, in setup
on_startup.callback(True)
File "/home/user/.local/lib/python2.7/site-packages/twisted/internet/defer.py", line 459, in callback
self._startRunCallbacks(result)
File "/home/user/.local/lib/python2.7/site-packages/twisted/internet/defer.py", line 567, in _startRunCallbacks
self._runCallbacks()
--- ---
File "/home/user/.local/lib/python2.7/site-packages/twisted/internet/defer.py", line 653, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/home/user/stratum-mining/externals/stratum/stratum/server.py", line 46, in setup_finalize
import websocket_transport
File "/home/user/stratum-mining/externals/stratum/stratum/websocket_transport.py", line 1, in
from autobahn.websocket import WebSocketServerProtocol, WebSocketServerFactory
exceptions.ImportError: cannot import name WebSocketServerProtocol
~/stratum-mining/externals/stratum/stratum/websocket_transport.py
を以下のように修正します。
index 2f26e2f..13f8336 100644
--- a/stratum/websocket_transport.py
+++ b/stratum/websocket_transport.py
@@ -1,4 +1,4 @@
-from autobahn.websocket import WebSocketServerProtocol, WebSocketServerFactory
+from autobahn.twisted.websocket import WebSocketServerProtocol, WebSocketServerFactory
from protocol import Protocol
from event_handler import GenericEventHandler
memcachedのインストールと実行
stratum-miningがmemcachedを必要としてくるので、インストールします。(なしだとユーザー認証の際にエラーが出た)
2017-12-15T22:54:08-0500 [stderr#error] 2017-12-15 22:54:08,997 ERROR protocol # [Failure instance: Traceback: : error 3 from memcached_get(stratum_ik.test01): (0x2d106f0) CONNECTION FAILURE(Connection refused), host: localhost:11211 -> libmemcached/connect.cc:156
2017-12-15T22:54:08-0500 [stderr#error] /home/ik/stratum-mining/externals/stratum/stratum/protocol.py:192:dataReceived
2017-12-15T22:54:08-0500 [stderr#error] /home/ik/stratum-mining/externals/stratum/stratum/protocol.py:238:lineReceived
2017-12-15T22:54:08-0500 [stderr#error] /home/ik/stratum-mining/externals/stratum/stratum/services.py:13:_handle_event
2017-12-15T22:54:08-0500 [stderr#error] /home/ik/stratum-mining/externals/stratum/stratum/services.py:81:call
2017-12-15T22:54:08-0500 [stderr#error] --- ---
2017-12-15T22:54:08-0500 [stderr#error] /home/ik/.local/lib/python2.7/site-packages/twisted/internet/defer.py:150:maybeDeferred
2017-12-15T22:54:08-0500 [stderr#error] /home/ik/stratum-mining/externals/stratum/stratum/services.py:78:_run
2017-12-15T22:54:08-0500 [stderr#error] /home/ik/stratum-mining/./mining/service.py:81:authorize
2017-12-15T22:54:08-0500 [stderr#error] /home/ik/stratum-mining/./mining/interfaces.py:28:authorize
2017-12-15T22:54:08-0500 [stderr#error] /home/ik/stratum-mining/./mining/DBInterface.py:169:check_password
2017-12-15T22:54:08-0500 [stderr#error] /home/ik/stratum-mining/./mining/DBInterface.py:203:user_exists
2017-12-15T22:54:08-0500 [stderr#error] /home/ik/stratum-mining/./mining/Cache.py:18:get
2017-12-15T22:54:08-0500 [stderr#error] ]
2017-12-15T22:54:08-0500 [stderr#error] None
2017-12-15T22:54:09-0500 [stderr#error] 2017-12-15 22:54:09,290 INFO stats # 0 peers connected, state changed 1 times
以下のコマンドでインストール・有効化を行います。
$ sudo apt-get install memcached
$ sudo service memcached start
(改めて)stratumの起動
$ twistd -ny launcher.tac
これで起動します。
確認の際は、適当なminerソフトから正常にアクセスできるか確認してみましょう。
$ ~/cpuminer/minerd -a yescrypt -o stratum+tcp://localhost:19666 -u user.workername-p password
SSL対応
最終的に外部ユーザーも使える状態にする予定だったので、セキュリティのためhttpsで接続できるようにします。
apacheの対応
最初にapacheのSSLモジュールを有効化します。
$ sudo a2enmod ssl
その後、443ポートで待ち受けるVirtualHostの設定を追加します。
<IfModule mod_ssl.c>
<VirtualHost 212.24.111.39:443>
ServerName zenypool.work
[中略]
</VirtualHost>
</IfModule>
この状態でapacheの再起動を行ったら、すでにhttps://zenypool.work にアクセスできる状態になっているはずので確認します。(証明書のエラーは出る)
$ sudo service apache2 restart
SSL証明書の追加
SSL証明書は、Let’s Encryptを使用して対応します。
Let’s Encrypt 総合ポータルにUbuntu16.04のインストールガイド参考のページがあるのでそれを参考にinstall及び有効化を行います。
$ sudo apt-get install letsencrypt python-letsencrypt-apache
$ sudo letsencrypt
letsencryptはTUI画面で対話式に進んでいきますが、画面の指示に従っていれば問題なく完了します。(HTTP→HTTPSのリダイレクト設定も行ってくれる)
言い訳まとめ
ここまで書いた上で、それぞれ個別の動作等は確認できたのですが、最終的に利用可能なマイニングプールを作るところまで進みませんでした…
理由としてはマイニングを開始するには、最初にインストールしたbitzenyクライアントがbitzenyのブロックチェーンのデータをすべてダウンロード完了しておく必要があるのですが、今日の朝から初めてまだ終わっておりません…
- 執筆中でのブロックダウンロード数: 251620
- 執筆中での総ブロック数: 1074285
$ ./bitzenyd getinfo
{
"version" : 1010000,
"protocolversion" : 70006,
"walletversion" : 60000,
"balance" : 0.00000000,
"blocks" : 251620,
"timeoffset" : 0,
"connections" : 11,
"proxy" : "",
"difficulty" : 0.00535579,
"testnet" : false,
"keypoololdest" : 1512879163,
"keypoolsize" : 101,
"paytxfee" : 0.00000000,
"relayfee" : 0.00001000,
"errors" : ""
}
上記のようにやっと1/4が終わったというぐらいです。
これが終わらないとマイニング自体が始められないので、それの部分が一切チェックできません…
後日ブロックのダウンロードが終わったら、改めて続きを執筆&プールも公開します。
中途半端で申し訳ありません🙇
これで、BitZenyのマイニングプールが完成しました。
作成したマイニングプールは↓です。
まだ、立てたばかりでいろいろテスト中ですが、もしよろしければご利用ください。(不定期に調整のため止める可能性があります。)
こんな半端な記事ですが、もし参考になればこちらに投げ銭いただけるとうれしいです。
- BitZeny: ZsZsuYogueUboHU3tFkPcKf53CEXAVkyZi
- Bitcoin: 1AGPCpn3Z3beAruyHdKMPHA1hrUqYYFAj
- Monacoin: MNfNxYjaxajc4Aja5nY3UD2UMD3DFeMYWB
参考
プールの建て方 – 仮想通貨 @ wiki – アットウィキ
BitZenyのマイニングプールを作る!(①bitzenydの導入) | 間宮さんのさくっと仮想通貨