Edited at

Nekoniumのマイニングプールを立ててみよう

More than 1 year has passed since last update.


はじめに

Ethereumフォークで国産の仮想通貨「Nekonium」のマイニングプールを構築する方法を記載します。

オープンソースのEthereumマイニングプール「Open Ethereum Pool」をNekonium用に独自にカスタマイズした「Open Nekonium Pool」を使用します。


手順


サーバーの準備


ドメインの取得

ドメインが必要な場合は、ドメイン取得代行サイトで任意のドメインを取得してください。

以前「Nekoniumのパブリックノードを立ててみよう その1」において、バリュードメインで「nekonium.site」というドメインを取得しましたので、そちらを活用します。

6f8a0b14a8ebedac1a4f06f79d869909.png


サーバーの用意

Linuxサーバーを立ち上げます。

今回AWSの「Ubuntu Server 16.04 LTS (HVM), SSD Volume Type」を選びました。

インスタンスタイプはとりあえず「t2.small」にしておきます。


5ba27a6b8503cd2597f5405aa3f0a498.png

2957d9967ab8f48534115b78c48f41dc.png


固定IPの取得

インスタンスが立ち上がったら、「Elastic IP」でグローバル固定IPを取得します。

今回は「54.250.71.179」が割り当てられました。


25c3837c292cd288d1cb3764e591a67e.png

72bfaeee6a2f4d264bd7b6503a8fd729.png


固定IPを関連付ける

「アクション」から、先ほど作成したインスタンスにグローバル固定IPを割り当てます。


365c67cb583b40b5c03345c0d50eb361.png

7621fc71fba839a3e5d30a01e1f3f7f1.png


ファイアウォールの設定

「セキュリティグループ」のインバウンド設定から、今回マイニングプール用に公開する「80」「8080」「8008」「8888」ポートを空けておきます。


092cfc786d31cf4e727b10de26f50abe.png

1837275f3f88e6bad15a98b9734c04bf.png


DNSの設定

今回割り当てられたグローバル固定IPをドメイン名に紐付けます。

バリュードメインのDNS設定からAレコードの「nuko」を「54.250.71.179」に設定します。

13c92210f652f010850188b699672e0d.png


サーバーの設定


インスタンスへの接続

Windowsの場合は「PuTTY」を使用します。詳しい接続方法はAWSのページを参照してください。

Linux インスタンスへの接続 - AWS Documentation

9a8f8d2c537f559ac468f09052fe5a8f.png


ab7c4cc2774f32febd5961a870c946ef.png


Ubuntuのアップデート

ログインができたら、まずUbuntuをアップデートして再起動します。

sudo apt-get update

sudo apt-get dist-upgrade

sudo reboot


build-essentialとmakeのインストール

下記コマンドを実行してbuild-essentialおよびmakeをインストールします。

sudo apt-get install build-essential make


GoLangのインストール

下記コマンドを実行してGoをインストールします。

wget https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz

sudo tar -xvf go1.9.2.linux-amd64.tar.gz

sudo mv go /usr/local

export GOROOT=/usr/local/go

export PATH=$GOPATH/bin:$GOROOT/bin:$PATH

export GOPATH=$HOME/go

go version と入力してgo version go1.9.2 linux/amd64と出力されればインストール成功です。


Redisのインストール

wget http://download.redis.io/redis-stable.tar.gz

tar xvzf redis-stable.tar.gz

cd redis-stable

make

sudo cp src/redis-server /usr/local/bin/

sudo cp src/redis-cli /usr/local/bin/

sudo mkdir /etc/redis

sudo mkdir /var/redis

sudo cp utils/redis_init_script /etc/init.d/redis_6379

sudo cp redis.conf /etc/redis/6379.conf

sudo vi /etc/redis/6379.conf 6379.confを編集します。


6379.conf


<中略>

daemonize no → daemonize yes に変更

<中略>

dir ./ → dir /var/redis/6379 に変更


sudo mkdir /var/redis/6379

sudo update-rc.d redis_6379 defaults

sudo /etc/init.d/redis_6379 start

これでRedisサーバーが起動します。

redis-cliと入力して、pingと打つとPONGが表示されれば正常に稼働しています。

redis-cliを終了する場合はexitと入力します。


nginxのインストール

下記コマンドを実行してnginxをインストールします。

cd ~/

sudo apt-get install nginx


nodejsのインストール

下記コマンドを実行してnodejsをインストールします

cd ~/

sudo apt-get install nodejs

sudo ln -s `which nodejs` /usr/bin/node

nodejs -vと入力すると、バージョンが確認できます。


npmのインストール

下記コマンドを実行してnpmをインストールします

sudo apt-get install npm


gnekoniumのインストール

下記コマンドを実行してgnekoniumをインストールします。

cd ~/

mkdir nekonium

cd nekonium

git clone https://github.com/nekonium/go-nekonium

※もしgitがインストールされていない場合は、sudo apt-get install gitを実行して下さい。

cd go-nekonium

export GOROOT=/usr/local/go

export PATH=$GOPATH/bin:$GOROOT/bin:$PATH

export GOPATH=$HOME/go

make gnekonium


gnekoniumの初回起動


ブロックチェーンの同期

下記コマンドを実行してブロックチェーンの同期を行います。

build/bin/gnekonium --fast --cache=512 console

少し時間がかかります。(15分くらい)


同期終了

Fast sync complete, auto disablingと表示されれば同期が成功したことになります。


プール用アドレスの作成

上記セッションを維持したまま、別セッションで下記コマンドを実行してプール用のNekoniumアドレスを作成します。

cd nekonium/go-nekonium

build/bin/gnekonium account new

パスワードを求められますので、入力して忘れないようにしてください。

Address: {c96e68c38de383e78a48419469ead845bd4b9161}

のように表示されれば、プール用アドレスの作成は完了です。

※この場合、実際のアドレスは頭に「0x」をつけ、「0xc96e68c38de383e78a48419469ead845bd4b9161」となります


マイニングプールの設定


Open Nekonium Pool のインストール

下記コマンドを実行してOpen Nekonium Poolをインストールします。

cd ~/

git clone https://github.com/ROZ-MOFUMOFU-ME/open-nekonium-pool.git

cd open-nekonium-pool

export GOROOT=/usr/local/go

export PATH=$GOPATH/bin:$GOROOT/bin:$PATH

export GOPATH=$HOME/go

make

cp config.example.json config.json

vi config.json 必要に応じてconfig.jsonファイルを編集します。


config.json



<中略>

"unlocker": {
"enabled": true,
"poolFee": 1.0,
"poolFeeAddress": "0xで始まるFee(手数料)を受け取るアドレス",
"donate": true,
"depth": 120,
"immatureDepth": 20,
"keepTxFees": false,
"interval": "10m",
"daemon": "http://127.0.0.1:8293",
"timeout": "10s"
},

"payouts": {
"enabled": true,
"requirePeers": 5,
"interval": "120m",
"daemon": "http://127.0.0.1:8293",
"timeout": "10s",
"address": "0xで始まるプールのアドレス",
"gas": "21000",
"gasPrice": "30000000000",
"autoGas": true,
"threshold": 500000000,
"bgsave": false
},

<中略>


vi www/config/environment.js environment.jsファイルを編集します。


environment.js


<中略>

APP: {
// API host and port
ApiUrl: '//nuko.nekonium.site:8080/',

// HTTP mining endpoint
HttpHost: 'http://nuko.nekonium.site',
HttpPort: 8888,

// Stratum mining endpoint
StratumHost: 'nuko.nekonium.site',
StratumPort: 8008,

<中略>



プールの起動


gnekoniumパスワードファイルの作成

一度全てのセッションを閉じて、新しくセッションを開き、下記コマンドでパスワードファイルを作成しておきます。

cd nekonium/go-nekonium/

vi password

<プール用アドレス作成時のパスワード>


gnekoniumの起動

仮想ターミナルなどを使用してgnekoniumを起動します。

tmux new -s gnekonium

./build/bin/gnekonium --rpc --rpcaddr 0.0.0.0 --rpcport 8293 --unlock 0 --password password


Open Nekonium Pool の起動

仮想ターミナルなどを使用してOpen Nekonium Poolを起動します。

cd ~/

cd open-nekonium-pool

tmux new -s open-nekonium-pool

./build/bin/open-nekonium-pool config.json


フロントエンドの構築

下記コマンドを実行して、フロントエンドの設定をします。

cd www

sudo npm install -g ember-cli@2.9.1

sudo npm install -g bower

npm install

bower install

./build.sh


nginxの設定


defaultファイルの設定

下記コマンドを実行して、nginxの設定をします。

cd ~/

cd /etc/nginx/sites-enabled

sudo vi default defaultファイルを編集します。

upstream api {

server 127.0.0.1:8080;
}

server {
listen 80 default_server;
listen [::]:80 default_server;

root /home/ubuntu/open-nekonium-pool/www/dist;

index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
try_files $uri $uri/ index.html =404;
}

location /api {
proxy_pass http://api;
}
}


nginxの再起動

下記コマンドを実行してnginxを再起動します。

sudo nginx -s reload

http://nuko.nekonium.site/ にアクセスして、

下記のような画面になればプール構築成功です。

10697c7a55d1639d274d0f57e097c4eb.png


おわりに

今回は1インスタンスのみでの簡易的なプール構築方法を記載しましたが、

payoutやunlocker、APIなどはモジュールとして独立して起動することができ、

負荷分散やセキュリティ等の観点から、複数インスタンスでそれぞれ起動することが望ましいです。

また、プール手数料や払い出し間隔、デザインなど、好みで自由にカスタマイズしてみて下さい。

もしプールを構築された場合は、NekoniumのDiscordチャンネルまでご一報頂けますと幸いです。


参考サイト

Setup Ethereum Mining Pool using open source ethereum pool