【Monacoin】ubuntu14.04にインストールしてマイニングまでやってみた話

# はじめに
秋葉原で【モナ広告プロジェクト2017】が開催されるなど、界隈で非常に盛り上がっているモナコイン。
価格も700円を上回って、その盛り上がりはますます広がっていくと予想されています。
※2017/12/2現在

今回はそんなMonacoinとcpuminerをUbuntuにインストールし、マイニングを走らせてみたので、その方法をご紹介します。

最近は盛り上がっているので、ヘタなスペックではマイニング報酬を得られないかもしれませんが、流行りのブロックチェーンに触ることも出来るので、ぜひ一度試してみてください！

# 実行環境
- Ubuntu14.04

# 使用するパッケージのインストール

``` bash:install.sh
sudo apt-get install git git-core build-essential libssl-dev libdb++-dev libminiupnpc-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev libboost-test-dev libevent-dev  libboost-all-dev automake autoconf libtool
```

# Monacoin起動
## Monacoinのダウンロード
Monacoinはオープンソースとして公開されているので、ソースをcloneしてきましょう。
※公式サイトはこちら
https://monacoin.org/

```bash:monacoin.sh
git clone https://github.com/monacoinproject/monacoin.git
```

## ビルド&インストール
```bash
# monacoinのdirに入る
cd monacoin

# makeファイルの生成
./autogen.sh
./configure --with-incompatible-bdb --without-gui

# インストール
sudo make
sudo make install

# 生成されたdaemonとclientをパスの通るところへコピー
sudo cp src/monacoind /usr/bin/
sudo cp src/monacoin-cli /usr/bin/
```
これでmonacoindとmonacoin-cliが叩けるようになります。

## monacoin.confの生成
monacoinはconfファイルを読み込んで起動するため、confファイルを作成していきます。

```bash
# monacoinディレクトリの作成
mkdir ~/.monacoin
vim ~/.monacoin/monacoin.conf
```

```bash:monacoin.conf
# rpcコマンドを受け付けるかどうか
server=1

# rpcコマンドを受け付ける際のユーザー名とパスワード、ポート番号の設定
rpcuser=[user名]
rpcpassword=[パスワード]
rpcport=4444

daemon=1
gen=0
```
※confファイルについての詳細はこちらから
https://en.bitcoin.it/wiki/Running_Bitcoin#Bitcoin.conf_Configuration_File


## monacoindの起動
```bash
# daemon起動
monacoind &

# Block数や自分の残高等、様々な情報を確認する
monacoin-cli getinfo

# 残高を確認する
monacoin-cli getbalance

# ブロックチェーンアドレスを生成する
monacoin-cli getnewaddress [好きなアカウント名]
```
※他のコマンドについてはこちらから
https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list

これでmonacoinの起動は完了です。
続いて、cpuminerの準備をしていきます。

# cpuminer起動
続いて、マイニングを行うため、cpuminerのインストールを行っていきます。

## cpuminerのダウンロード
こちらもオープンソースとして公開されているので、まずはcloneしていきます。
※githubはこちらから
https://github.com/tpruvot/cpuminer-multi

```bash:cpuminer.sh
git clone https://github.com/tpruvot/cpuminer-multi.git
```

## ビルド&インストール
```bash
# cpuminer-multiのdirに入る
cd cpuminer-multi

# build用のshellを叩きます
# これで上手く動かなければ、monacoinと同じように、./autogen.shからやる感じです
sh ./build.sh
sudo make
sudo make install
```

## cpuminerの起動
cpuminerを起動していくのですが、基本的にはdaemon起動にすると思うので、まずログの吐き出し先を作っていきます。

```bash
sudo touch /var/log/cpuminer.log
sudo chmod 666 /var/log/cpuminer.log
```

続いてcpuminerを起動していきます。
2回目以降の起動が楽なので、今回はshellを作ってみました。

```bash:cpuminer-start.sh
#!/bin/sh

#-------------------------------------
# 'monacoin-cli getnewaddress'で作成したアドレス
echo "マイニング報酬を受取るアドレスを入力してください"
read ADDR
#-------------------------------------

# confファイルの読み込み
. ~/.monacoin/monacoin.conf
if [ -z ${rpcport} ]; then
  echo "rpcportが定義されていません"
  exit
fi
if [ -z ${rpcuser} ]; then
  echo "rpcuserが定義されていません"
  exit
fi
if [ -z ${rpcpassword} ]; then
  echo "rpcpasswordが定義されていません"
  exit
fi

[cpuminerまでのpath]/cpuminer-multi/cpuminer -a lyra2REv2 -o localhost:${rpcport} -O ${rpcuser}:${rpcpassword} --coinbase-addr=${ADDR} --api-bind 0 --timeout=1000 --scantime=15 -D 2>&1 > /var/log/cpuminer/cpuminer.log &

echo "cpuminerを起動しました"
```
pathだけ変更していただければ使えます。
これにてminerの起動も完了です。

## logの見方
最後にminerのlogの見方だけ、コメントでご紹介します。

```logos
# 普段のログはこんな感じです
# 現在のブロック数とCPUが毎秒どれくらいの数ハッシュを算出しているのかが出力されます
[2017-12-02 15:32:48] Current block is 1177781
# このエラーは良く吐かれますが、miningは動いているのでいつもスルーしています
[2017-12-02 15:32:48] JSON-RPC call failed: Method not found
[2017-12-02 15:33:02] CPU #0: 56.79 kH/s
[2017-12-02 15:33:02] CPU #1: 57.35 kH/s
[2017-12-02 15:33:03] Current block is 1177781
[2017-12-02 15:33:26] Current block is 1177782

# miningが成功するとこのログを吐きます。yes！が目印ですね
[2017-12-02 15:30:43] accepted: 1/1 (100%), 9067 kH/s yes!
```

# おわりに
Monacoinの起動からマイニングの起動までをご紹介しました。
MonacoinはLitecoinベースで作られており、そのLitecoinはBitcoinベースで作られているので、ソースの中身はだいぶBitcoinに近いものになっています。

また、Monacoinは有名所のコインで唯一の日本製のコインなので、今後の反映を応援していきたいところです。

普段、業務でBlockchainのカスタマイズに携わったりもしているので、これからはqiitaでBlockchain周りについても、紹介していこうと思います。


# 参考文献
- [仮想通貨で遊ぼう！『ubuntu 16.04でmonacoinをインストールしてみた編』](https://ameblo.jp/namuyan/entry-12256711228.html)
- [monacoin.confについて](https://en.bitcoin.it/wiki/Running_Bitcoin#Bitcoin.conf_Configuration_File)
- [monacoin-cliのコマンドについて](https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list)