マイニング入門
ビットコインのマイニングをしてみようと、前回古いゲーミングPCにUbuntu Server20.04をインストールしNVIDIAドライバを設定しました。
今回はマイニングサービスにアカウントを作成して、そこで提供されるアプリを使って実際にマイニングしてみたいと思います。
セキュリティの面を考えなければ、Windowsでも、MACでも、PCのスペックがなくても、GPUがなくてもここで書かれているマイニング自体は可能です。
マイニング
マイニングは今は個人でやるより皆で協力して行う方が主流なようです。そのイメージは共同で宝くじを買うのに似ています。ひとりでやると当たれば大きいですが、ほとんど当たりません。一方、皆でやれば取り分は少なくなりますが、誰かが当たれば分け前があります。宝くじと違うところは早いもの勝ちで当たりがでたら次のくじに移ることです。処理能力が高い機器をもっている人は何度もくじをひくことができます。なのでそのような機器を持たない人たちは自分たちの機器を持ち合って強者に負けないようにしています。
その協力の場をマイニングプールと呼ぶそうです。マイニングプールは管理者がマイニングの場を提供するとともに全体の作業を監視します。発掘に成功すると管理者は一定の料率を取って残りを作業量に応じてメンバーに分配します。
今回はMINERGATEというマイニングプールを使う事にしました。作業量に応じて報酬を保存してくれるのでウォレット(文字通りビットコインを保存しておく財布)を持つ必要がなく、マイニングアプリも提供してくれているのですぐに始められます。
アカウントの作成も簡単でメールアドレス(ユーザー名)とパスワードを設定するだけで登録完了です。
今回は手軽さを重要視してのことでしたが、本気でマイニングを考えている人はマイニングプールの選択は重要ですし、それ以前にサイト自体の信頼性も評価しないといけません。
MINERGATEはサービスは4月30日からメンテナンスに入っているらしく、ビットコインのマイニングが停止されていたので、アルトコインであるモネロをマイニングしてみました。アルトコインというのはビットコインではないけれどそれに似た暗号資産の事を指します。
minergate-cli
マイニングアプリのダウンロードをします。筆者は前述の通りの構成なので、Ubuntu用のCUIアプリ(migrate-cli)をダウンロードしました。最新バージョンである1.7が動かなかったので、最終的にはArchiveにある1.6を利用しました。
もっとわかりやすい方がいいという人向けにWindows版のGUIツールやスマホ版もあるようですが、普段利用する端末に出所がよくわからないアプリをインストールするのは、セキュリティの観点からあまりお勧めできません。それに、CUIの方が軽量な分マイニング効率も良くなります。
また、Windows版のアプリはCUI版でも「望ましくない可能性のあるアプリが見つかりました」とセキュリティが反応し起動を止めると思います。これはccminer等の他のマイニングアプリも一緒です。おそらく、アプリが単体で悪さをするのではなく、第三者やマルウェアがマイニングソフトを知らないうちに設置して他人のPCでマイニングするのを避けるためでしょう。実際にそのような事象が多発しています。
とはいえセキュリティの問題が頻発している現在、用心することにこしたことはありません。そのような理由から、使わなくなったPCにUbuntuをインストールして利用しています。ただ、稼働を許可してしまえばWindows版のCUIもほぼ同じ操作が可能だと思われます。
Ubuntu(Linux)版のアプリの説明になりますが、ダウンロードしたファイルはdebファイルになっているので「dpkg -i MinerGate-xFast-cli-1.6-ubuntu.deb」としてインストールします。Windows版のCUI版の場合は展開するだけです。
minergate-cliに存在するオプションは次の通りです。オプションの後、通貨設定、GPU設定と続きます。
- -h
ヘルプを表示します
- -u
ユーザーを指定します(emailアドレス)
- -l
GPUのリストを表示します。これで表示される装置IDを使って利用するGPUを指定することができます。
- -v
バージョンを表示します。
オプションの後に続く通貨の設定は、通貨名 CPUスレッド数です。
通貨名の部分ではまず、--のあとに通貨名を入れます。bcn,etc,eth,xmc,zmr,xecなどの値を指定できます。
CPUスレッド数はデフォルトで8です。0にすることで、最適な数を自動設定してくれるようです。
ここまででCPUマイニングができます。たとえばビットコインを2スレッドでマイニングしたい場合は次のようにします。
GPUマイニングをしたい場合は最後に、-gを付けます。装置IDはデフォルトで0です。装置IDは、-lオプションで確認できます。
装置IDが1のGPUを使ってイーサリアムクラッシックをマイニングするには次のようにします。
さらに--no-cpuを付与すると、GPUマイニングだけになります。
実際に開始すると次のようなメッセージが出ます。まず接続待ちがあります。
[2021-06-02 05:19:56] [ info ] Hardware AES supporting status 1 [2021-06-02 05:19:57] [ info ] Init miner with cpus 2 [2021-06-02 02:58:47] [warning ] Trying to reconnect... [2021-06-02 02:58:47] [ info ] Waiting connection ...
そのあとステータス画面を繰り返し表示するようになります。次のようにハッシュレートが0(0.0 H/s)が続いている時はプログラムが動いているだけで何もしていません。
[2021-06-02 03:01:16] [ info ] Diff: 0 CPU/GPU: 0.0 H/s / 0.0 H/s accepted/bad 0/0 [2021-06-02 03:01:17] [ info ] Diff: 0 CPU/GPU: 0.0 H/s / 0.0 H/s accepted/bad 0/0 [2021-06-02 03:01:18] [ info ] Diff: 0 CPU/GPU: 0.0 H/s / 0.0 H/s accepted/bad 0/0 [2021-06-02 03:01:19] [ info ] Diff: 0 CPU/GPU: 0.0 H/s / 0.0 H/s accepted/bad 0/0 [2021-06-02 03:01:20] [ info ] Diff: 0 CPU/GPU: 0.0 H/s / 0.0 H/s accepted/bad 0/0 [2021-06-02 03:01:20] [ info ]
マイニングがしているときは次のようにハッシュレートが表示されます。
Client: running CPU (2 threads): running (CUDA) NVIDIA GeForce GTX 960: running [2021-06-02 05:40:25] [ info ] Diff: 8873 CPU/GPU: 778.9 H/s / 150.2 H/s accepted/bad 400/0 [2021-06-02 05:40:26] [ info ] Share Accepted! [2021-06-02 05:40:26] [ info ] Diff: 8873 CPU/GPU: 782.9 H/s / 150.2 H/s accepted/bad 401/0 [2021-06-02 05:40:27] [ info ] Diff: 8873 CPU/GPU: 787.1 H/s / 150.2 H/s accepted/bad 401/0 [2021-06-02 05:40:28] [ info ] Diff: 8873 CPU/GPU: 791.2 H/s / 150.2 H/s accepted/bad 401/0 [2021-06-02 05:40:29] [ info ] Diff: 8873 CPU/GPU: 795.2 H/s / 150.2 H/s accepted/bad 401/1
Share Accepted!が表示されたときシェアが受け入れられたことを意味します。binance.com「マイニングプールの説明」によれば、シェアとは仕事の量を意味します。これは行末の表示項目のaccepted/badのaccepted側に累積していきます。
シェアはこの後に説明する本来の作業で見つけようとしているものとは別のものですが、これを見つけた時にマイニングプールに報告しします。マイニングプールはその量を使って報酬の分配率を決定します。
結果の確認
結果はMINERGATEのWebページのダッシュボードから確認できます。トップ画像はそのダッシュボードの画面です。Unconfirmedの項目に受け入れられたシェアの数に応じてコインがたまっているのが確認できます。実際に発掘最中だとstatusがONLINEになり、マイニングのハッシュレートが表示されます。またPoolの項目でマイニングプールのハッシュレート、Worldの項目では通過全体のハッシュレートやブロックチェーンのHight(数量)が確認できます。
もしこのMINERGATEで腰を据えてマイニングしたいという場合に、この画面で注意したいのはinvalid shareの件数です。これは不正なシェアを送った回数で、この件数が多いとペナルティがあるということなので注意したいところです。ちゃんとしたアプリを利用していれば非常に少なくなるという記述もありましたが、古いバージョンのCLIツールで発掘しようとした際にこの数値が増えました。
筆者はそこまで到達していないので詳しい事はわかりませんが一定額以上のコインがたまったら出金ができるようになっているそうです。3時間ほどで貯めることができた0.000034190652モネロは出金の下限には届きませんでしたが、執筆時点のレートで計算すると約1円でした。100Wの電気を1時間使用した際の電気代はおよそ2.7円だそうです。発掘中GTX 960は使用電力75W近辺で稼働していたので、少なくともこのGPUでは元はとれません。
マイニングを考える場合、獲得できる金額と電気代のトレードオフを意識する事が重要です。その環境は常に変化します。常に貨幣価値が変化しますし、発掘難易度も変わります(同じ電力で発掘できる量が変わります)。採算に合わなくても会社の利益を電気代で消してビットコインに変換しよう、なんて考える経営者もいるかもしれません。
ブロックチェーン
一連の作業は一体何をしているのか?というとブロックチェーンをつなぐ作業をしています。ただ、実際に自分のパソコンがつなぐ作業まで到達するのは稀です。多くはブロックチェーンをつなぐ為のパーツであるハッシュを探す作業をしています。
MUFG:「ブロックチェーン」の詳細は参考ページに載っていますが、「ネットワークに接続した複数のコンピューターによりデータを共有することで、改ざん防止や透明性を高めるしくみ」がブロックチェーンです。
いままで改ざんが容易だったコンピューティングの世界において、この発明は画期的なものだと言われています。
取引をブロック単位でまとめて、次のブロックにいく際は一つ前のブロックを「ハッシュ化」して含めます。ハッシュがよくわからない場合は取引全体を暗号化してある程度短い長さの文字列にしてしまうことだと考えてください。このブロックの記録を多くのコンピューターが保持することで改ざんが難しくなります。
ビットコインにおいては、そのブロックが10分毎に代わるように調整されます。次のブロックに採用するハッシュを特定の値以下にするという制約を設け、その基準を自動で上下させることで難易度を変えます。これを「ディフィカルティー」と呼びます。
ブロック内に記録された取引内容をただハッシュ化するとその値は常に固定なので、それを変化させるために「ナンス」という32ビットの数値が用いられます。ハッシュ値がディフィカルティ―を下回るようなナンスを見つけるのがマイニングの作業になります。
調べ方は単純で、仮にナンスを作成しハッシュ化してみて、ディフィカルティーを下回るかどうかを調べるだけです。下回らなかったら次のナンスを試します。ハッシュは16進数の文字列なので数値化することができ、それは文字通りの数値の大小の比較になります。
マイニングプールでは共同作業をしているコンピュータ(リグと呼ばれます)が同じ値を調べて無駄にならないように、ナンスの範囲を分割します。
このナンスと取引履歴のハッシュ化を一秒間にどれだけ行っているかが、先ほどでてきたハッシュレートです。これはリグ単体だけでなく、マイニングプール毎、通貨種毎にも表示されたりします。マイニングプール毎や通貨種毎のハッシュレートは、どれだけ賑わっているかや競争率の高さを判断する鍵になります。
まとめ
ビットコインやアルトコインでは、報酬の存在によってそのブロックチェーンが途切れないようになっています。また、報酬が多くなりすぎて貨幣の価値が極端に下がらないようにディフィカルティーが存在します。
マイニングとはを簡単にまとめると、ビットコイン、アルトコインの運用の一旦を担い、その報酬を受け取るということになります。