間宮さんのさくっと仮想通貨

’18年版マイニングプール構築法 ②(coind構築)

coindを構築する

ウォレットのセットアップを行います。ここでは例としてubuntu16.04/DogeCoin・kumacoinを取り上げますが、セットアップ方法の参照~セットアップまでの流れは他のコインでもほぼ同じです。

対象のGitHubのアドレスを探す

DogeCoinはhttps://github.com/dogecoin/dogecoinとなります。GitHubにてソースコードや導入方法が公開されているコインが多いです。Google検索などで引っかかります。
公式のコンパイル方法はこちら:https://github.com/dogecoin/dogecoin/blob/master/doc/build-unix.md
必要なライブラリもここで記載されているので、coindの導入がはじめての人は必要なライブラリも入れておいてください。

導入する

ダウンロードして設定してコンパイル。ここではkumacoindとdogecoindを用意します。
ここで、DogeCoinはBerkeleyDB 5.1を使うのがポイント。(doge公式githubでは5.1で説明されている為。)
他のコインは4.8を利用するものも多いので、競合を避けるため、dogecoin専用にBerkeleyDB 5.1を用意してセットアップしています。
(5.1導入部分はset.shというシェルスクリプトを作って実行)

※初めてプールを作る場合は対象のコインは1つだけのプールから始めましょう。(運用負荷が増えたり、後ほど出てくるMPOSの修正が必要となってくる為、慣れてから増やしていくことをお勧めします。)


■kumacoindの導入
ubuntu16.04 sever用isoイメージからインストールした直後からの導入を想定しています。

sudo apt-get install  -y git build-essential libssl-dev libboost-all-dev libminiupnpc-dev
sudo apt-get install -y pkg-config software-properties-common
sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install -y  libdb4.8-dev
sudo apt-get install -y  libdb4.8++-dev
git clone https://github.com/kumacoinproject/kumacoin.git 
cd kumacoin/src
make -f makefile.unix -j4
sudo mv kumacoind /usr/local/bin

sudoのパスワードを聞かれるので、画面が止まってたら入力待ちになってないか確認してみてください。

■dogecoindの導入

BerkeleyDB5.1をdogeでのみ使うため、下記のシェルスクリプトを予め作って対応します。
set.sh (そのままコンパイルできるように公式の情報を少しだけ変えています)

BITCOIN_ROOT=$(pwd)

# Pick some path to install BDB to, here we create a directory within the dogecoin directory
BDB_PREFIX="${BITCOIN_ROOT}/db5"
mkdir -p $BDB_PREFIX

# Fetch the source and verify that it is not tampered with
wget 'http://download.oracle.com/berkeley-db/db-5.1.29.NC.tar.gz'
echo '08238e59736d1aacdd47cfb8e68684c695516c37f4fbe1b8267dde58dc3a576c db-5.1.29.NC.tar.gz' | sha256sum -c
# -> db-5.1.29.NC.tar.gz: OK
tar -xzvf db-5.1.29.NC.tar.gz

# Build the library and install to our prefix
cd db-5.1.29.NC/build_unix/
#  Note: Do a static build so that it can be embedded into the executable, instead of having to find a .so at runtime
../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX
make install

# Configure Dogecoin Core to use our own-built instance of BDB
cd $BITCOIN_ROOT
./configure LDFLAGS="-L${BDB_PREFIX}/lib/" CPPFLAGS="-I${BDB_PREFIX}/include/" --without-gui --disable-tests

下記コマンドでインストールする

chmod 700 set.sh
sudo apt-get install -y automake
git clone https://github.com/dogecoin/dogecoin.git
cd dogecoin
./autogen.sh
../set.sh
make
sudo make install

これでkumaはBerkeleyDB4.8,dogeはBerkeleyDB5.1でコンパイルできました。

coindを設定する

dogecoind #一度ここでエラーを表示させてディレクトリを作らせる
cd ~/.dogecoin
vi dogecoin.conf

kumacoind #一度ここでエラーを表示させてディレクトリを作らせる
cd ~/.Kumacoin
vi kumacoin.conf

※フォルダ名はKumacoin(頭大文字)、設定ファイルはkumacoin.conf(頭小文字)

dogecoin.conf/kumacoin.confの中身は下記のようにする。

rpcuser=ランダムなユーザ名
rpcpassword=ランダムなパスワード
allowip=192.168.0.0/24 #接続を許可するIP この設定はローカルエリア192.168.0.~からのアクセスのみ許可
server=1
deamon=1
seednode=kumacoin.seed.lapool.me # Kumacoinのみ指定。lapoolさんのDNSシードを使わせてもらう

allowipの設定の意味

allowipは、接続許可の設定です。「プールで使うウォレットをどこから操作できるか」の指定です。
設定しない場合はlocalhostのみ接続許可となります。

面倒だからと、適当に広い範囲の制限を入れるとセキュリティ上重要な問題が生じます。
延々とブルートフォースアタックを受けてコインが流出した事例もあるようです。

coindの起動

kumacoind
dogecoind

同期状況の確認

kumacoind getinfo
dogecoin-cli getblockinfo

現在同期しているブロック同期状況はgetinfoまたはgetblockinfoで取得できます。
getinfoの場合はblockの数字が、getblockinfoの場合は実行後に表示される数字が増えれば、同期開始です。
現在のブロック数に追いつくまでひたすら放置しましょう。

ちゃんと同期できてると、下記のようにconnectionが1以上になり、blocksの値も時間と共に増えていきます。

$ kumacoind getinfo
{
    "version" : "v0.9.2-Antenna-beta",
    "protocolversion" : 60007,
    "walletversion" : 60000,
    "balance" : 0.00000000,
    "newmint" : 0.00000000,
    "stake" : 0.00000000,
    "blocks" : 14012, ### ここの数字が増えていきます ###
    "moneysupply" : 34384925.25306600,
    "connections" : 6, ### ここの数字が1以上になっていることを確認 ###
    "proxy" : "",
    "ip" : "xxx.xx.xx.xxx",
    "difficulty" : 17.69411685,
    "testnet" : false,
    "keypoololdest" : 1525377868,
    "keypoolsize" : 101,
    "paytxfee" : 0.01000000,
    "errors" : ""
}

アドレスの生成と、秘密鍵の出力

プール構築時に使うのでアドレスを作ります。
また、バックアップのために秘密鍵も出力します。

dogecoin-cli getaccountaddress ""
dogecoin-cli dumpprivkey 生成されたアドレス

秘密鍵の出力は何故必要か

プールの運営にウォレットの秘密鍵は不要です。
が、ウォレットに何か有った場合の為に秘密鍵をエクスポートし、流出しない場所に保管します。
印刷して保管するのもアリです。

運用日記でいずれ書こうと思いますが、VPSを借りて運用する場合、「VPS会社がサーバを壊す」場合があります。
かつてbunnycoinのマイニングプールにおいて、bunnycoind起動→過負荷でサーバ強制停止→/run/フォルダ以下全て消えて起動不可能という衝撃の事件が発生することがありました。

wallet.datを使ったバックアップでもOKですが、確実にウォレットのバックアップをサーバの外に取るようにしましょう。

ここまででcoindの設定は終わりです。
次はフロントエンド(Web) 、MPOSの導入に進みます。