GPUに全く縁のない素人がCPUマイニングを構築してみた

ブロックチェーンのAdvent Calendar 2017が空いてたので
飛び入りで参加さしてもらいました。

私の前提としては、GPUを使う人生をそもそも歩んでこなかったし、
グラフィックなんてCPUの内蔵グラフィックス
あるんやからそれ使えればええんや！と思ってる人でした。

確かにそう思ってました。

ました。。。

しかし、世は大GPU時代。機械学習での画像処理はGPUがないと回せないし、HMDで未来を体験したくてもオンボードグラフィックでは無理。もちろんマイニングなんて以ての外。

そして、Youtuberになるた(ry

途方に暮れていたひねくれ者の私はCPUマイニングという僥倖に出会ったのであった。

という長い前置きは置いといて、中身に入りましょう。

今回はWindowsに限って話します。

## 実行ファイルのダウンロード

まずはBitzenyの[公式サイト](http://bitzeny.org/)から自身のOSに
合った実行ファイルをダウンロードして下さい。殆どの方がSSE4.1をダウンロード
して問題はないとは思いますが、気になる方は[こちら](http://d.hatena.ne.jp/merom686/20101002/1286025834)を確認するとよいでしょう。

注意していただきたい点が、`minerd.exe`にウイルスが混入していた事が過去にあり、殆どのアンチウイルスソフトで`minerd.exe`がウイルス判定されます。[^1]
したがって、アンチウイルスソフトの設定で`minerd.exe`をホワイトリストに登録して下さい。

また、ホワイトリストに入れてもソフトによってはアプリケーションレベルでのファイアウォールに引っかかり、通信できない場合もあるので、そうなった際も、別個ホワイトリストに入れて頂けたらと思います。

[^1]: 現在は問題ありません。

## プールマイニング

次にマイニングプールでは、個別に掘るのは厳しくなっている現状もあり、マイニングプールを行う前提で話を進めます。[^2]

[^2]: Bitcoinのような状態ではありません。

マイニングプールは多数あり、以下に一部抜粋させていただきます。
（worker数は本エントリ記載時点）
その他のプールは[BitzenyWiki](http://bitzeny.cswiki.jp/)をご覧ください。
詳しい登録方法などはここでは省略します。

- [BitZeny選民プール-High Hashrate pool-](https://zny.arunyastyle.com/) - 招待制、140workers
- [みずたまり（bitzenyマイニングプール）](https://bitzeny.mizutamari.work/index.php) - 800workers
- [LA Bitzeny Pool](https://lapool.me/bitzeny/index.php) - 国内最大、6,654workers

ハッシュレートに自信のある方(最低5Hz/s必要)は
招待制にはなりますが、選民プールが個人的におすすめです。
運営している方が、TwitterやBitzenyフォーラムにおり、
連絡が付きやすいという点でも安心できると思います。

また、 サーバによっては非常に不安定なところもあるので、マイニングプール変更に備えて以下に記載するworker設定は同様にしておいた方がいいと思います。

ログイン後、それぞれのサイトの`My Account>My Workers`でworkerを登録をします。
次にワーカー名とパスワードを設定し、Add New Workerをクリックします。
私の場合、ワーカー名はどのホストかわかるように、パスワードはデフォルトで`password`としています。
名前に関して、全てのホストを同じworkerとして登録することは可能ですが、PC毎に分けることを推奨しています。（台数が多くなると管理がしにくくなるため）
 
## batファイルの作成とマイニング

次に、ローカル環境に戻ってバッチファイルの設定をします。
ここで、保存してある場所に`PATH`が通ってなければ、環境変数に`minerd.exe`を
保存してある場所を記述しておきましょう。下記の例では、`%USERNAME%`下に
ダウンロードしたディレクトリをフルパスで指定する場合の例を以下に記載します。[^3]

[^3]: stratumってNTPのプロトコルだと思ってました。
		
```bat:zny_miner.bat
C:\Users\%USERNAME%\minerd.exe -a yescrypt -o
	 stratum+tcp://jp.lapool.me:3114 -u ユーザ名.ワーカー名 -p パスワード
```

プールは[LA Bitzeny Pool](https://lapool.me/bitzeny/index.php)になります。
プールによって難易度別にポート番号を分けている
場合もあるので適宜確認して下さい。


他のプールに変更する場合は、`stratum+tcp:\\`以下の
ドメイン名とポート番号を適宜変更して下さい。
この場合もbatファイルに`PATH`を通している必要があります。

batファイルを実行して、以下のように(yay!!)と
画面にでればマイニングができています。
簡単ですね。おめでとうございます。

![miner.JPG](https://qiita-image-store.s3.amazonaws.com/0/114202/f025d69f-64dd-534d-36f8-975d536c4a36.jpeg)


## バックグラウンドで動かしたい場合

マイニングPCで作業をしていてターミナルが邪魔という事があります。
その場合はWIndowsに標準で含まれているVBScriptを使用して
`zny_miner_bg.vbs`を作成し、バックグラウンドで実行しましょう。
スクリプトは以下になります。`zny_miner_bg.vbs`を
実行すれば、バックグラウンドでマイニングされます。
		
```vbs:zny_miner_bg.vbs
Set sh = CreateObject("WScript.Shell")
sh.Run "miner.bat" ,0 ,False
```

バックグラウンドで動作するので、まずはbatファイルで正しく
マイニングできているかテストしておくといいのかもしれません。

上記のような場合、`taskmgr`を開いて、`minerd.exe`のプロセスの優先度を下げたり
して、CPUリソースを上手く分けたほうがいいかもしれません。
（尤も、CPUマイニング専用PCとして利用する人が多いとは思いますが、、、）


## ウォレットをどこで保持するか

[公式サイト](http://bitzeny.org/)にあるウォレットでもいいのですが、初回に2014年からのブロックの
全記録を更新するため、最新の状態まで記録するのに最低でも半日以上かかります。

また、その後の起動も鬼のように遅くストレスがたまるだけなので正直あまりオススメできません。

そこで、Webウォレットの[bitzenyウォレット](https://bitzeny.jp/)を利用しましょう。また、マイニングプールで得られたコインはプールの自動送金機能などを使用して、各自自身のウォレットに送金しておきましょう。

先日、ウクライナの取引所[Liqui](https://liqui.io/)の1200億円のハッキングなんて話もあり、Webで持つのは一抹の不安はありますが、サーバダウンで落ちまくったりするプールサーバに直置きするよりかは自身のWebウォレットを持っておく方がまだ安心できるのではないでしょうか？

## 最後に

既に行なってる人には当たり前レベルの話になってしまいましたが、CPUでもマイニングできるという事をしらない人はこれを期にマイニングをはじめてみては如何でしょうか。

ところで最近、BItzenyの開発者([@bitzeny](https://twitter.com/bitzeny))が戻ってきたみたいで、一部界隈では盛り上がってますね。大量保有者が存在する現状をどうするんだろうか、と個人的に心配しております。

気になったことといえば、プールマイニングにて自身でブロックを掘り当てた場合、個人で掘っても同様の難易度で発見者になる可能性があるのかということです。

[Bitzenyフォーラム](https://bitzeny.info/)でも掘り当てられるスペックがあるのであれば、ソロマイニングでも掘り当てられるという人もいれば、皆のハッシュレートを使ってるのでソロでは掘り当てられないと言っている人もいます。

どちらが正しいのですかね。詳しい方教えて頂けると幸いです。


それでは。