【ハードフォーク対応2018/7/11暫定版】Kotoのプールを立ててみよう


はじめに

Zcashフォークで国産の仮想通貨「Koto」のマイニングプールを構築する方法を記載します。
オープンソースのZcashマイニングプール「z-nomp」をKoto用に独自にカスタマイズした「k-nomp」を使用します。
また、Kotoは2018/8/4にハードフォークが予定されており、今回それに対応したブランチで構築します。

手順

サーバーの準備

ドメインの取得

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

サーバーの用意

Linuxサーバーを立ち上げます。
今回DigitalOceanで、OSは「Ubuntu Server 16.04.4 x64」、
サーバーは「4GB 2vCPUs 80GB 4TB」を選びました。

サーバーの準備完了

1分ほどで構築が完了し、IPアドレスが自動で割り振られます。

ファイアウォールの設定

DigitalOceanのファイアウォール機能で、SSHポート、HTTPポート、kotoポート、Stratumポートなどを開けておきます。

サーバーの設定

インスタンスへの接続

Windowsの場合は「PuTTY」を使用します。
メールで送られてきたパスワードを使用し、rootでログインします。
ログイン後、新しいパスワードを設定します。

ユーザーの作成

ログインができたら、まずrootとは別のユーザー(今回はubuntu)を作成し、sudo権限を付与します。
adduser ubuntu

Adding user `ubuntu' ...
Adding new group `ubuntu' (1000) ...
Adding new user `ubuntu' (1000) with group `ubuntu' ...
Creating home directory `/home/ubuntu' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for ubuntu
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y

gpasswd -a ubuntu sudo

Adding user ubuntu to group sudo

ユーザーの変更

ubuntuユーザーでログインします。
sudo su - ubuntu

Ubuntuのアップデート

Ubuntuをアップデートして再起動します。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo reboot

kotodのビルド

パッケージのインストール

下記コマンドを実行して必要なパッケージをインストールします。
sudo apt-get install build-essential pkg-config libc6-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python python-zmq zlib1g-dev wget bsdmainutils automake curl

kotoのインストール

下記コマンドを実行してkotoをインストールします。
git clone https://github.com/KotoDevelopers/koto.git
cd koto
./zcutil/fetch-params.sh
./zcutil/build.sh -j$(nproc) ※少し時間がかかります

cd src
sudo cp kotod /usr/local/bin
sudo cp koto-cli /usr/local/bin
sudo cp koto-tx /usr/local/bin

kotoの設定

cd
mkdir .koto
cd .koto
vi koto.conf コンフィグファイルを作成、設定します。

koto.conf
rpcuser=username
rpcpassword=password
rpcallowip=127.0.0.1/32
rpcport=8432
daemon=1
server=1
gen=0

kotodの起動

下記コマンドでkotodを起動します。
kotod

Koto server starting

プールアドレスの確認

下記コマンドで、プールアドレスを確認します。
koto-cli getaddressesbyaccount ""

[
  "k1もしくはjzから始まるkアドレス"
]

kアドレスの作成

下記コマンドで、支払用kアドレスを作成します。
koto-cli getnewaddress ""

k1もしくはjzから始まるkアドレス

zアドレスの作成

下記コマンドで、シールド用zアドレスを作成します。
koto-cli z_getnewaddress

zから始まるzアドレス

プールの設定

redisのインストール

下記コマンドを実行してredisをインストールします。
cd
sudo apt-get install redis-server

パッケージのインストール

下記コマンドを実行して必要パッケージをインストールします。
sudo apt-get install build-essential libsodium-dev

nodejsとnpmのインストール

下記コマンドを実行してnodejsとnpmをインストールします
sudo apt-get install -y nodejs npm
sudo npm cache clean
sudo npm install n -g
sudo n v9
sudo npm i npm -g
sudo apt-get purge -y nodejs npm
sudo ln -sf /usr/local/bin/node /usr/bin/node
sudo ln -sf /usr/local/bin/npm /usr/bin/npm

nodejsとnpmのバージョン確認

node -v
npm -v

pm2のインストール

下記コマンドを実行してpm2をインストールします。
sudo npm install -g pm2

k-nompのインストール

k-nompのビルド

下記コマンドを使用してk-nompをビルドします。
※ハードフォーク対応版ブランチからcloneします。
git clone -b koto-hf-dev https://github.com/yoshuki43/k-nomp
cd k-nomp
npm update ※途中で躓く場合はnpm audit fixを一度実行から再度npm updateして下さい。
npm install

k-nompの設定

cp config_example.json config.json
vi config.json

config.json
        <中略>       

        "port": {公開用ポート番号},
        "stratumHost": "{ドメイン名}",

     <中略>

vi coins/koto.json

koto.json
{
    "name": "Koto",
    "symbol": "KOTO",
    "algorithm": "yescrypt",
    "requireShielding": true,
    "nSubsidySlowStartInterval": 43200,
    "nSubsidyHalvingInterval": 1051200,
    "payFoundersReward": false,
    "percentFoundersReward": 20,
    "maxFoundersRewardBlockHeight": 849999,
    "foundersRewardAddressChangeInterval": 17709.3125,
    "vFoundersRewardAddress": [],
    "kotoFoundersReward": [
        {
            "comment": "for mainnet",
            "address": "k3EEgqMM8jpaGW6XXUHpv3kDprMfm1x1VEf",
            "start": 335600,
            "last": 1072799
        }
    ],
    "txfee": 0.0004
}

vi coins/koto-testnet.json

koto-testnet.json
        <中略>       

        "symbol": "TOKO",

     <中略>

vi node_modules/stratum-pool/lib/transactions.js

transactions.js
        <中略>       

        var nVersionGroupId = (txVersion & 0x7fffffff) >= 3 ? util.packUInt32LE(0x2e7d970) : new Buffer([]);

     <中略>

cp pool_configs/koto_example.json pool_configs/koto.json
vi pool_configs/koto.json

koto.json
{
        "enabled": true,
        <中略>
        "address": "{k1もしくはjzから始まるkアドレス}",
        <中略>
        "zAddress": "{zから始まるzアドレス}",
        <中略>
        "tAddress": "{k1もしくはjzから始まるkアドレス(上のaddressとは別のアドレス)}",
        <中略>
        "rewardRecipients": {
        "{k1もしくはjzから始まるkアドレス(手数料を受け取りたいアドレス)}": 1.0
        <中略>
}

k-nompの起動

sudo pm2 start init.js --name k-nomp

pm2のスタートアップ登録

pm2 startup

[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/local/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u ubuntu --hp /home/ubuntu

sudo env PATH=$PATH:/usr/local/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u ubuntu --hp /home/ubuntu

pm2 save

ログの確認

pm2 logs

おわりに

今回Kotoのハードフォーク対応プールの構築方法を記載しました。
ファイアウォールの設定などは各VPSのファイアウォール機能やufw等で適宜行って下さい。
もしプールを構築された場合は、KotoのDiscordチャンネルまでご一報頂けますと幸いです。
またご不明な点があれば上記チャンネルの「ROZ - mofumofu.me#1977」までお申し付け下さい。

参考サイト

ubuntu ユーザを追加して sudo 権限をつける
kotoをUbuntuにインストール
kotoのプールを作成
Ubuntuに最新のNode.jsを難なくインストールする
Node.jsのデーモン化ツールpm2をインストール