ラズパイでBitZenyをCPUマイニングする -組み込みエンジニアだってお金が欲しい-

# 組み込みエンジニアだってお金が欲しい
最近、ソフトウェアエンジニアの給料が良くなってきたようです。特に、FinTechやAI関係のエンジニアの給料はうなぎのぼりだそうです。それに比べて、組み込みエンジニアは相変わらず日陰の存在です。

組み込みエンジニアなら誰でも(?)持ってる、ラズパイを使ってお金を稼ぐことが出来ないかと思いました。

# BitZenyとは
ビットコイン等の仮想通貨の採掘(マイニング)には主にGPUが使用されており、組み込みというよりかは、HPCの領域です。しかし、色々調べてみると、[BitZeny](http://bitzeny.org/)という仮想通貨(オルトコイン)がありました。これは、GPUやASICでは不利なアルゴリズム(Yescrypt)を使用しています。これによって、CPUを使用して普通のPCでも採掘できるようになっています。[こちら](https://qiita.com/kotauchisunsun/items/d0b0e0792939a53d558b)の記事だと、ラズパイでのマイニングは採算が取れない、という結果になってしまいましたが、BitZenyならいけるのでは? 

![image.png](https://qiita-image-store.s3.amazonaws.com/0/214268/421d4091-e88f-859c-b876-bf231f67479c.png)
(http://bitzeny.org/)

# マイニングの準備をする
基本的には、[wiki](http://bitzeny.cswiki.jp/index.php?FrontPage)の通りに進めていけばOKです。本記事はQiitaの技術者向けの記事なので、ここはさっと流します。

## BitZenyを受け取れるウォレットを作る
BitZeny Coreというクライアントソフトウェアをインストールしても良いのですが、初回設定にめちゃくちゃ時間がかかるので、オンラインウォレットを使います。https://bitzeny.jp/login のアカウントを作ります。アカウント作成はEメールアドレスを登録するだけですぐにできます。

アカウント作成後、ログインして、「受信アドレス」をコピーしておきます。受信アドレスは、Zから始まる英数字の羅列になります。これはいくらでも作ることが出来るのですが、最初に1つ作成されており、ログイン後のトップ画面に表示されているはずです。ここに、採掘報酬を振り込みます。

## プールに登録する
マイニングには、個人でやるソロマイニングと、みんなでやって報酬を分け合うプールマイニングがあります。ソロマイニングだと上述のBitZeny Coreが必要なので、プールマイニングをします。プールサーバはいくつかあるのですが、ひとまず[LA Bitzeny Pool](https://lapool.me/bitzeny/)を使用します。まずはアカウント作成します。こちらも、Eメールアドレスを登録するだけですぐにできます。

*追記*
本記事では例としてLA Bitzeny Poolを挙げていますが、他にもプールサーバはあります。サーバ負荷低減のためにもワーカー数の少ないサーバーを使用するようにしてください。結果的に採掘が効率的にできて自分のためにもなります。各プールサーバのトラフィック量は[こちら](https://ukkey3.space/BitZenyMiningPoolInformation.php)で確認できます。

参考 (https://www.braveryk7.com/bitzeny-maining-dispersion/)

### 設定をする
My Account -> アカウントの編集 -> Payment Address、に先ほどコピーした受信アドレスを貼り付けます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/214268/0d86ad9f-3f2f-cce7-8d11-b1c6d569f8c2.png)

My Account -> ワーカーの編集、でAdd New Workerします。ひとまずデフォルトの設定で、ワーカーを一つ作ります(ワーカー名=user、パスワード=password)。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/214268/ca58fddf-dc95-3dab-6e04-c45f07b3a433.png)


# ラズパイ用にマイニングプログラムをビルドする
やっとエンジニアリングっぽいことします
## 必要なソフトのインストール
```
sudo apt-get install automake autoconf pkg-config libcurl4-openssl-dev libjansson-dev libssl-dev libgmp-dev make g++
```

万が一インストールに失敗する場合は、`/etc/apt/sources.list`を以下のように編集してから、`sudo apt-get update`をして、再度インストールを試してください。どうも最近(stretchになってから?)、apt-get installでサーバが見つかりませんといったエラーが出ることがあります。

```txt:/etc/apt/sources.list
deb http://ftp.jaist.ac.jp/raspbian stretch main contrib non-free

# deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://archive.raspbian.org/raspbian/ stretch main contrib non-free rpi
```

## ビルドする
WindowsPC用ならマイニング用プログラムが[バイナリ](http://bitzeny.org/)の形で配布されています。しかし、ラズパイ(Linux)用には自分で作る必要があります。下記コマンドで、ソースコードをGitHubから取得して、設定してビルドします。一応、NEONを使用するように指定してみます。(Mac、Linuxも同様に自分でビルドすればできます。やり方やオプションはGitHubのREADMEに書いてあります)

```
git clone https://github.com/bitzeny/cpuminer.git
cd cpuminer
./autogen.sh
./configure CFLAGS="-O3 -mfpu=neon -march=native -funroll-loops -fomit-frame-pointer" 
make
```

# 実行する
下記コマンドで実行します。コマンド中の"ログインユーザー名"はアカウント作成時に指定したログインに使用するユーザ名です。ドット(.)のあとのuserとpasswordは、先ほどワーカー作成時に設定したものになります。もしも違うものを設定した場合はこちらも変更してください。

```
./minerd -a yescrypt -o stratum+tcp://jp.lapool.me:3014 -u ログインユーザー名.user -p password
```

成功すると、下記のようなログが出ます。プールサーバ(LA Bitzeny Pool)のダッシュボードのページを見ると、アカウント残高が増えているはずです。ひとまずUnconfirmedとして反映され、1時間くらいするとConfirmedになります。100ZNY溜まったら自動的に先ほど設定したウォレットに送られます。

```
[2017-12-XX 11:XX:23] Stratum requested work restart
[2017-12-XX 11:XX:23] thread 1: 468 hashes, 0.02 khash/s
[2017-12-XX 11:XX:23] thread 3: 166 hashes, 0.02 khash/s
[2017-12-XX 11:XX:23] thread 0: 452 hashes, 0.01 khash/s
[2017-12-XX 11:XX:23] thread 2: 468 hashes, 0.02 khash/s
[2017-12-XX 11:XX:55] thread 1: 487 hashes, 0.02 khash/s
[2017-12-XX 11:XX:55] accepted: 15/15 (100.00%), 0.06 khash/s (yay!!!)
```

PCで実行したときは約3.4 khash/s、一方ラズパイだと0.06 khash/sでした。何かビルドオプション間違えてるのかな。遅い。。。

## 実行中は
実行中にtopで状態を見ると、ちゃんとCPU使用率が400%(4コア)になっていました。当然、温度もかなり熱くなっていました。ラズパイである長所を生かして、電源だけつないで屋外に放置しました。

# 結果
事前にWindows PCで2時間回したときは、約1.1ZNYの報酬をもらえました。その後、同じく約2時間ラスパイ上で回した結果、0.0214ZNYでした。

もしも一日中(24時間)回したら、以下のようになる計算です(実際には時間によって報酬額は変わってくると思います)。1 ZNY = 23.1円として計算(2017/12/8)。

- Windows PC(Intel Core i7-6700, 3.4GHz x 4物理コア(8論理コア))
	- 13.2 ZNY = 321円 / day
- Raspberry Pi 2(Cortex-A7, 900MHz x 4コア)
	- 0.2568 ZNY = 5.9円 / day

# まとめ
餅は餅屋。マイニングは素直にハイパフォーマンスなマシンでやるべき。ラズパイを使うのは、サーバー負荷を無駄に増やすだけなのでやめた方がいいですね。

とはいえ、今回のことで仮想通貨を始めるいい契機になりました。BitCoinやモナーコインをやるにはだいぶ出遅れた感がありますが、BitZenyならこれから爆上げの期待が持てます。 
(ちょうど、この記事を書いた2日くらい前に、仮想通貨で有名なブロガーさんがBitZenyについて取り上げたようです。そのためか分かりませんが、一気に価値が跳ね上がりました。あと数日早く始めてれば。。。)

マイニングに関しても、今はまだBitZenyの価値が低いため報酬が少ないですが、1ZNY当たりの価値が上がればその分報酬も増えます(その分マイニングも難しくなりますが)。また、BitZenyならXeon等搭載のワークステーションまでいかなくても、普通のPCで十分採掘できるので、時間のあるときにコツコツやっていこうと思います。