Windows10で仮想通貨Ethereumをマイニングする

## はじめに

仮想通貨が再び高騰しプチブームになっている昨今（2021年3月），ちょうどマイニングを始めようと思っている方も多いと思います。実際，GeForce RTX 3060でマイニングの制限が～，ドライバの抜け道が～，店舗での品薄が～，と世間で騒がれていますね。
私個人としては昔遊びでやっていたのですが，住んでいた場所の規約上マイニングができなかったためしばらく離れていました。最近生活環境が一変してマイニング可能になり再び始めてみたので手順を備忘録として残しておきます。
今回マイニングするのはEthereum（イーサリアム）という仮想通貨です。通貨そのものについては触れませんが，技術的に面白い通貨ですのでぜひ調べてみてください。

※ちなみにWindows10でのマイニングはWDDMドライバの関係で遅くなることがあるそうです

## れっつ，まいにんぐ
仮想通貨のマイニングは，ある問題を解くために計算して解を最初に導いた人が報酬を得る，みたいな仕組みになっています。解を得られるかどうかは宝くじみたいなもので運にもよりますが，とにかくたくさん演算することが重要です。Ethereumだと一回3~4Ethの報酬が得られます。高騰時は1Eth=20万円，低迷時でも2万円くらいなので十分に報酬が高いことは明らかですね。ただ，マイニングの参加者も多くなったことから一人で解を得るのが確率的にほぼ不可能になりました。

そこでマイニングプールという仕組みが出来上がりました。プールという一つのシステムに沢山の人が演算量を提供することで採掘の確率を上げ，採掘できた場合は演算量に応じて参加者に分配という仕組みになっています。一人でマイニングする場合では報酬が１か０でしたが，マイニングプールだと貢献さえすれば少しでも報酬が得られますので安定した収入が得られます。みんなで宝くじを買って，当たったら分配するみたいなことと同じです。マイニングといったら基本的にどの通貨でもマイニングプールの仕組みに参加するということになります。

### 1. パソコンを用意しよう

基本的にはGPU（GeForceシリーズ）が載ったデスクトップPCを使いましょう。EthereumはGPUがないとマイニングできません。仮想通貨の種類によってはCPUでのマイニングもできますが，はっきり言って雀の涙程度の演算量ですのでお遊びにしておきましょう。ちなみにCPUならAndroidやMacでもマイニングできます。

OSに関して，今回はWindows10上で動作させていますが，ハードウェアのパフォーマンスを発揮させるならLinux，もしくは，DockerやVagrantを用いた仮想マシン上のLinuxにしたほうが良さそうです。

### 2. マイニングプールを選ぼう

適当に検索して有志が構築したマイニングプールを選びましょう。今回は検索で一番上にヒットしたBitflyのマイニングプールを使用します。

- Ethereum (ETH) mining pool : https://ethermine.org

マイニングプールはたくさんありますが，払い出しの手数料，マイニングの参加者とハッシュレート，インタフェースなどが異なりますのでこだわって探すのも良いと思います。ただ，参加者が少なければ報酬が得られなかったり，運営の雲行きが怪しければ閉鎖して通貨が取り出せなくなったりすることもあるので安定したプールを選ぶのが吉です。

通常，マイニングプールではアカウントを作成できるのですが，Bitflyはアカウントがない代わりにEthereumのWalletのアドレスが対応しています。なのでどこかしらでEthereumのWalletを作成しましょう。私はMetaMaskというサービスで作成しました🦊

- MetaMask : https://metamask.io/

### 3. マイニングツールを選ぼう

マイニングのツールも多種多様にありますが，なんだかんだでCUIのソフトが安定している印象です。Bitflyのサイト内にマイニングのツールが紹介してありますので参考にしてください。

- https://ethermine.org/start

感染すると仮想通貨のマイニングを勝手にしてしまうマルウェアが現れたことからマイニングツールのexeファイルというのはウィルス対策ソフトやブラウザで除去されてしまいます。クリプトジャッキングといってこっそりマイニングしちゃうWebサイトも問題視されましたね。ツールをダウンロードするブラウザを変えたり（Chromeは駄目でEdgeはOKだった），セキュリティ機能をオフにしたり，例外的な許可を与えたりしてマイニングツールが生き残れるようにしてあげましょう。

今回はEthminerというツールを使用することにしました。GitHubのReleasesからethminer-0.18.0-cuda9.1-windows-amd64.zipをダウンロード，解凍しました。

- https://github.com/ethereum-mining/ethminer/releases/tag/v0.18.0

cudaはインストールしてなくても大丈夫でした。

### 4. マイニングしてみよう

コマンドプロンプトで解凍したフォルダに入ってethminerコマンドを試しに打ってみましょう。

```
C:\Users\hoge\ethminer\bin>ethminer -h


ethminer 0.18.0
Build: windows/release/msvc

Ethminer - GPU ethash miner
minimal usage : ethminer [DEVICES_TYPE] [OPTIONS] -P... [-P...]

Devices type options :

    By default ethminer will try to use all devices types
    it can detect. Optionally you can limit this behavior
    setting either of the following options
    -G,--opencl         Mine/Benchmark using OpenCL only
    -U,--cuda           Mine/Benchmark using CUDA only

Connection options :

    -P,--pool           Stratum pool or http (getWork) connection as URL
                        scheme://[user[.workername][:password]@]hostname:port[/...]
                        For an explication and some samples about
                        how to fill in this value please use
                        ethminer --help-ext con

Common Options :

    -h,--help           Displays this help text and exits
    -H,--help-ext       TEXT {'con','test',cl,cu,api,'misc','env'}
                        Display help text about one of these contexts:
                        'con'  Connections and their definitions
                        'test' Benchmark/Simulation options
                        'cl'   Extended OpenCL options
                        'cu'   Extended CUDA options
                        'api'  API and Http monitoring interface
                        'misc' Other miscellaneous options
                        'env'  Using environment variables
    -V,--version        Show program version and exits
```

ベンチマークテストやマイニングのオプションを弄れたりできるようですが，検証できていないので各々で確かめてみてください。
マイニングを始めるには -P オプションでプロトコル，ユーザ，ドメイン，ポートを指定して以下のように打ち込みます。

```batch
ethminer -P stratum1+ssl://ETH_ADDRESS@asia1.ethermine.org:5555
```

何となくsslにしていますが意味はありません。毎回このコマンドを打ったりコピーしたりするのも面倒なのでWindowsならbatch，Linuxならshellのファイルにして，

```
C:\Users\hoge\ethminer\bin>start.bat
```
みたいに起動できるようにすると楽です。停止するときはControl+Cですね。

具体的で詳細な接続の例が以下のサイトにまとめてありますので参考にしてください。

- ethminer/POOL_EXAMPLES_ETH.md : https://github.com/ethereum-mining/ethminer/blob/v0.18.0/docs/POOL_EXAMPLES_ETH.md

プールにアクセスでき，GPUのチェックが完了するとマイニングが始まります。PCにGPUがない場合は動いてくれません。
![startmining.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62268/b929e424-155e-0919-bda8-fee0a3a4b7e7.png)

接続が上手くできていなかったり，何か不具合が生じていたりしても色々表示されるため最初は気づけないかもしれません。途中にAcceptedという文字が出てくればマイニングが進んでいる証拠なので探してみてください。

![accepted.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62268/3576ab52-88df-7891-ede7-cb55b8fd39d9.png)

## マイニングしてみた所感

実はGPUでのマイニングは初だったりするのですが，少し古いGTX1060でも20MHash/secも出るなんてそこそこパワーあるなと感じました。一ヶ月回し続ければ0.02ETHくらいは採掘できるみたいで，仮想通貨の価格が高い状態のままであれば電気代分（4000円）くらいは稼げそうです。とはいえ，今はバブルみたいな状態ですからそのうち下落してペイできなくなると思います。

![dash.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62268/5495ea1a-b744-5d9c-c6bd-c0ae94e48891.png)

稼いでやる！と意気込むよりも，PC作業ついでにマイニングしとくか～，何か貢献したいから回しとくか～，くらいの緩い気持ちでマイニングに取り組むのが良いと思います。もし採掘した通貨を色々使ってみたいというモチベーションがあるのならBitcoinかモナコインをオススメします。Bitcoinはお店や通販で使えますし，モナコインはmonappyというサイトでいろんなやり取りができます。
それでは良きマイニングライフを～！