Edited at
LeveragesDay 22

CPUマイニング試してみた。

More than 1 year has passed since last update.

書くことが思いつかなかったので、少し前に話題になったCoinhiveについて試してみた

https://coinhive.com/

Coinhiveが何かって言うと簡単に言うとJavascriptを使ってMoneroって言う仮想通貨を採掘するためのサービスです。

採掘出来るのはビットコインではなくMoneroって言う仮想通貨です。

Moneroは一般のコンピュータでもそこそこの速さで計算出来るように設計されたCryptonightというアルゴリズムを利用しているので、

簡単な話高額なGPUを買わなくてもCPUで採掘出来るよ。

ってことで試してみた。

image.png

Javascriptで採掘出来るのでもちろんブログやWebの訪問者が多ければ多いほど採掘出来る仕組みになっています。


CAATPCHAの変わりに!

用意されている採掘の仕組みが、アクセスしている時間に合わせて採掘するっていう仕組みの他にCAPTCHAの変わりに採掘させるって言う仕組みがあります。

image.png

こんな感じで、メーターがMAXになると認証完了になります。

実際使ってみた感じ。メーターがMAXになるまで1分ぐらいかかるし、正直導入されてるとイラッとすると思います。

考えとしてはすごい面白くていいと思うんですけどね。

何かしらのコンテンツをダウンロードさせる変わりにするって言うとかならありかもしれないですが、ログインの度に1分ぐらい待たされたらログインする気すら失せてしまうので、使い所が難しい。


実際に採掘させてみる。


  • サイトに貼り付けるタグ

<script src="https://coinhive.com/lib/coinhive.min.js"></script>

<script>
var miner = new CoinHive.User('< site-key >','username', [options]);
miner.start();
</script>


  • 10000PV + 10secでどれくらいになる?

image.png


マシン単体でも採掘する


  • Webサイトにタグを貼り付ける以外にもローカルマシン単体でも採掘できる

調べてみたところnodejsでやってるのがあった。

https://github.com/cazala/coin-hive

README.mdを見たら、dockerですぐ立てて試せるっぽいので、試してみた。

FROM node:8-slim

# Install latest chrome and puppeteer dependencies
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - &&\
sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' &&\
apt-get update &&\
apt-get install -y google-chrome-unstable gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget

# Install coin-hive
RUN npm i -g coin-hive --unsafe-perm=true --allow-root

# Run coin-hive
CMD coin-hive <site-key> --username=docker

まるっとパクって site-key のところとオプションでusername付けれるっぽいので、適当に付けて見た。


他のオプション

  --username        Set a username for the miner

--interval Interval between updates (logs)
--port Port for the miner server
--host Host for the miner server
--threads Number of threads for the miner
--throttle The fraction of time that threads should be idle
--proxy Proxy socket 5/4, for example: socks5://127.0.0.1:9050
--puppeteer-url URL where puppeteer will point to, by default is miner server (host:port)
--miner-url URL of CoinHive's JavaScript miner, can be set to use a proxy
--dev-fee A donation to the developer, the default is 0.001 (0.1%)
--pool-host A custom stratum pool host, it must be used in combination with --pool-port
--pool-port A custom stratum pool port, it must be used in combination with --pool-host
--pool-pass A custom stratum pool password, if not provided the default one is 'x'


  • 実際に実行したら今感じになった。

image.png


  • 実際に実行したらマシンのファンが最高潮になりました。自宅マシンで数時間(だいたい3時間ぐらい)実行して見て結果

image.png

501760Hashes採掘出来たらしい。



current payout 0.00007240XMR per 1M hashes

1M hashesで 0.00007240XMRらしいので、 24時間30日起動しっぱなしだとしたら、メンドイので500,000hashesで計算。

1日4Mhashs * 30日 = 120Mhashes

0.008688XMR採掘出来るらしい

1XMR = 46000円(投稿日現在) = 約400円!!!!!

マシンフル稼働して、このレベル。全然使えない。。。コア数の多いCPUで回せば、もう2〜3倍ぐらいまでは軽く行けると思うけども、それでもそんなもんですね。マシンが壊れてしまうリスクの方が圧倒的に高いと思います。

ちなみに同時100PVぐらいでは、700Hash/sぐらいでした。

先程の10000PVでの結果だと約1.2MHash 約4円 1万PVで4円 毎日それくらい来ると仮定すると、120円

GoogleAdsenseとかの広告と変わる収入として考えても安すぎて、全然ですね。

ちなみにJSの中身見てたら、こんな感じでズラーーーっと600〜700行書いてあったから読むのやめた。

CoinHive.CRYPTONIGHT_WORKER_BLOB = CoinHive.Res(

" self.CoinHive=self.CoinHive||{};self.CoinHive.CONFIG={LIB_URL:\"https:\/\/coi" +
"nhive.com\/lib\/\",ASMJS_NAME:\"worker-asmjs.min.js\",REQUIRES_AUTH:false,WEBS" +
"OCKET_SHARDS:[[\"wss:\/\/ws001.coinhive.com\/proxy\",\"wss:\/\/ws002.coinhive." +
"com\/proxy\",\"wss:\/\/ws003.coinhive.com\/proxy\",\"wss:\/\/ws004.coinhive.co" +
"m\/proxy\",\"wss:\/\/ws005.coinhive.com\/proxy\",\"wss:\/\/ws006.coinhive.com" +
"\/proxy\",\"wss:\/\/ws007.coinhive.com\/proxy\",\"wss:\/\/ws029.coinhive.com\/" +
"proxy\"],[\"wss:\/\/ws008.coinhive.com\/proxy\",\"wss:\/\/ws009.coinhive.com\/" +
"proxy\",\"wss:\/\/ws010.coinhive.com\/proxy\",\"wss:\/\/ws011.coinhive.com\/pr" +
"oxy\",\"wss:\/\/ws012.coinhive.com\/proxy\",\"wss:\/\/ws013.coinhive.com\/prox" +
"y\",\"wss:\/\/ws014.coinhive.com\/proxy\",\"wss:\/\/ws030.coinhive.com\/proxy" +