仮想通貨のマイニングプールを作ってみた(BitZeny編)


この記事は 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.EU - ヨーロッパで開催されるVPS

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の導入) | 間宮さんのさくっと仮想通貨


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください