Permalink
Switch branches/tags
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
116 lines (59 sloc) 14.6 KB
layout title categories
post
ブラウザで仮想通貨を採掘するサービス "Coinhive" について
JavaScript

ここ最近で急に有名になった、"Coinhive" というサービスがあります。一言でいうと、ブラウザのJavaScriptを利用して仮想通貨 Monero を採掘するためのサービスで、Webサイトに導入することによって来訪者から直接収益をあげたりすることを目的にしています。

有名になったのには理由があって、ユーザーの許可を得ずに勝手に採掘をするサイトが問題になったためです。Pirate Bayの事例などが有名ですね。

個人的にCoinhiveのようなサービスは適切に使われる限り仮想通貨のキラーサービスになりうると期待しています。ここでCoinhiveがどのようなサービスなのか、技術とビジネス両方から注目してみようと思います。

2018-06-12追記: Coinhive をユーザーの許諾なしに利用していたサイトの管理者の方が神奈川県警に家宅捜索を受けたそうです。詳細は経緯の説明サイトを御覧ください。


Coinhiveとは何か

より正確に書くと、Coinhiveは「ユーザーのCPUを利用して収益を上げることで、ビジネスのマネタイズを後押しするサービス」です。わかりやすく、まずは仕組みを紹介したいと思います。

そもそもビットコインを始めとする仮想通貨は、通貨の信用の基盤として計算量を利用しているものがほとんどです。例えば日本円は、日本銀行の信用によって通貨の発行が行われているのですが、仮想通貨の場合は通貨の発行にコンピュータの計算力が必要になり、計算力をたくさん用意した人がより多くのコインを得られる仕組みです。簡単に言うと、CPUをたくさんぶん回すと仮想通貨が手に入ります。

例えばビットコインの採掘で収益をあげようと思うならば、電力の安い中国でビットコイン専用にチューニングされたコンピューターをブンブン回すのが一般的です。ところが、Coinhiveは「普通のユーザーのCPUの力を利用して仮想通貨を採掘する」のが大きな違いです。

安い電力やチューニングされたコンピュータがしのぎを削っている世界で、普通のユーザーが採掘に参加してもほとんど利益は得られず、電気代で赤字になる可能性すらあります。しかし、大きなWebサイトの来訪者全員が僅かばかりでも採掘をしてくれれば、それをすべて合わせるとそこそこの金額になることが期待出来ます。それを簡単に実現してくれるのが、今話題になっているCoinhiveのサービスなのです。

Coinhiveは、非常にシンプルで使いやすいAPIを提供しています。会員登録をして数行のJavaScriptコードをWebに貼るだけで、すぐに来訪者による採掘が可能になります。Coinhive自体は、採掘量の3割を手数料として取るビジネスモデルです。現在JavaScriptで提供されたAPI群ばかりが話題になっていますが、この仕組みはWebサイトだけではなく、ゲームなどのアプリでも利用可能です。


Coinhiveの技術的な背景

Coinhiveの技術に注目してみましょう。まず大前提として、Coinhiveが採掘する仮想通貨はビットコインではなく Monero です。公式ページの説明によると、Moneroは一般のコンピュータでもそこそこの速さで計算出来るように設計されたCryptonightというアルゴリズムを基幹(proof-of-work)に利用していて、GPUを利用せずCPUだけで計算してもGPUの半分ほどの速度が出る(ビットコインの場合はGPUを使うと10000倍速くなる)のが売りであり、JavaScriptで計算する仮想通貨として優れている、ということだそうです。

また実際の計算にはWebAssemblyを利用していて、現在ネイティブCPUの計算量にくらべて65%の採掘量が確保出来ているとのことです。公式ページには書いていませんが、WebAssemblyに対応していない場合はasm.jsで動き、またスレッド(Worker)も利用して効率化を図っています。

上記の情報より、CoinhiveのJavaScriptによる発掘は、本来そのコンピュータで出せる最高の発掘能力に比べ、(CPUで半分)*(WebAssemblyで65%)≒約33% の能力で発掘出来るようです(実際の所GPUを使用した場合もCPUの計算分もあるはずなので、もっと低い可能性があります)。

実際に自分のコンピュータで運用してみたところ、バックグラウンドで採掘結果をWebSocketを使ってサーバにリアルタイム送信していました。通信環境がないとデータを送れないようです。WebSocketの通信頻度は大体5秒に1回0.2Kb未満であり、こちらが問題になることはほとんどないでしょう。


現状Coinhiveでビジネスになるのか

さて、大事なのは「これがどの程度のお金になるのか」ということです。まず明確にしておきたいのですが、現状では広告に比べて全くお金になりません。具体的にどの程度の収益になるのかを示しましょう。

自分のMacBook Pro(Mid 2015, 2.5 GHz Intel Core i7)で1時間Webページに滞在して、0.000029XMR(Moneroの単位)の採掘でした。XMR-USDの取引レートは記事執筆時点で約$90//XMR、USD-JPYが¥113/USDですので、記事執筆時点では1時間の採掘で日本円で約0.29円になります。1PVで滞在時間を3分と多めに見積もっても、0.0145円/PVとなり、いわゆるバナー広告の方が何倍もマシということになります。

さらに、実際問題「ユーザーのCPUを勝手に使うことは許されない」という倫理的問題もあります。ユーザーのCPUが無料であれば良いのですが、当然電気代もかかっているわけですし、モバイル端末の場合はバッテリー問題もあります。今の世間的なイメージだと「せめてCPU使用率40%くらいに抑えてくれ」という感じみたいですが、それは即ち収益の6割減を意味します。というわけで、広告の代用として考えた場合には全く割に合わないことがわかるかと思います。

一部の広告ブロッカーでは、既にCoinhiveをブロックするようになっています。一般的なWebサイトにおいては、例えば「採掘と引き換えに続きを読む」のような形で、ユーザーの同意の元で採掘するようにするのが望ましいと思います。

一方で、そもそも広告モデルでない業種がこのシステムを使う価値は十分にあると思います。例えばWikipediaは広告を貼らずに寄付を募っていますが、「採掘で寄付をしてください」とリンクなどを用意し、そのページに滞在してもらうことで寄付を募るようなやり方はかなり有効なのではないでしょうか。他にもインディーゲームなどでユーザーの許可を得た上で余剰CPUを使って採掘することで、「長く遊んでもらっている人から多くの収入を得る」という理想的なビジネスモデルを作れる可能性もあります。


今後どうなるのか

Coinhiveのようなサービスの今後について考えてみます。

まずCoinhive自体は極めて脆いビジネスモデルであり、(応援はしているのですが)今のままだとサービスの永続は難しいだろうなと思います。すぐに類似サービスによる競争過多になり、今の手数料30%はすぐに10%くらいまで落ちていくのではないかな、と感じています。広告ブロッカーで制限されつつあることも大きなマイナスポイントでしょう。

収益性について考えてみましょう。最近、WebKitでWebGPUのプロトタイプが発表されていましたが、ブラウザからGPUを利用出来るようになることで掘能力も上がる可能性があり、結果的に収益性が増す可能性があります。GPUが使えるだけで、Monero に関しても2倍の採掘量が期待出来るわけですし、ビットコインのような他の仮想通貨の採掘も現実的になるかもしれません。またブラウザでネイティブコードを実行するWebAssemblyも進化しており、最終的にはネイティブの9割以上まで速度が出ることを目標にしています。こういったブラウザの技術革新により将来採掘量が増える期待はあると思います。

しかしですね…いままで敢えて触れずにここまで書いていたのですが、実際の所、最終的に鍵をにぎるのはMoneroなどの仮想通貨からの現金化レートなんですよね…。技術革新で必死に2倍くらいまで採掘量が増えても、レートの増減によってその努力が軽く吹っ飛ばされるくらい仮想通貨は不安定です。大幅なレート増減は日常茶飯事であり、仮想通貨からの収益をビジネスの基幹に添えるには大きなリスクがあることの認識は大切だと思います。

なおMoneroのここ3ヶ月のチャートをこちらに用意しました。

Monero-USD-chart

最低と最高だと4.86倍も差があります。今年の年初の1月1日は$16/XMRだったので、それと最高値を比較すると約9倍にもなりますね。これが100倍になって$10000/XMRくらいのレートで安定してくれれば広告の代用として余裕で成り立つとは思うのですが、こいつらはいきなり1/100くらいになるリスクも普通にあるのに注意です。

実際のチャートはこちらからどうぞ。


ユーザーリソースを用いた仮想通貨採掘の可能性

今までWebサイトで収益を上げる方法は限られていて、ユーザー課金モデル、広告モデル、プラットフォーム手数料モデル、くらいしかありませんでした。それが仮想通貨の登場とブラウザの技術革新によって、Webサイトの来訪者のハードウェアリソースを直接収益に繋げる新しいビジネスモデルの選択肢が出来たこと自体は素晴らしいことだと思います。

現状ユーザーに隠れてこっそりと採掘するサイトが多いという問題など、解決しないといけない課題はまだあります。しかし、ユーザーも見たくないし、サイト制作者も広告以外で収益があがるならば出来れば設置したくない、Win-WinならぬLose-Loseの関係で成り立っている広告の存在を消す可能性があることは、個人的にとても高く評価しています(全ての広告がLose-Loseであるわけではないとは思います、念のため)。

実際のユーザーが滞在した時間と比例した収益が上がることは、広告への誤タップを誘うようなサイトやアプリを減らし、サービス自体の価値を高める方向にインセンティブが働くのではないかと期待出来ます。Coinhiveのようなサービスの登場が、良いサービスが増える流れになるのであれば素晴らしい話だと思います。

現在はユーザーの同意を得ることなく採掘を行うサイトがほとんどですが、採掘をユーザーに明示し、例えば広告を消すとか記事の続きを読めるとか、ユーザーサイドのメリットもはっきり提示した上で導入する事例が増えることを期待しています。

仮想通貨には色々な意見を持っている人が多いと思いますが、現状コンピュータの計算力を直接収益に変換する手段として最も有力であることは間違いないでしょう。まだ仮想通貨も市民権を得たとは言い難いですが、技術の黎明期を越えた頃にはより面白い世界が広がっている可能性が高く、夢のある分野ですね。


Coinhiveを使った採掘のサンプル

具体的にどの程度の収益が上がるのかを視覚化するために、Coinhiveを使った採掘用のスクリプトを用意してみました。実際にスレッド数やCPUパワーをどの程度に設定すればどの程度の負荷がかかり、いくら位の収益が上がるのかをお試し頂けます。現状、全くカネにならないことがお分かりいただけるでしょう。


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

startボタンを押すと採掘が始まり、具体的な収益が表示されます。収益は私の手元に入ることになりますが、きっとジュース1本分もあつまらないことでしょう。万が一300円を超えるようなことがあればWikipediaにでも寄付します。

上記のソースコードはここにあります。


追記

Moneroが高騰し、ブログ公開当初は100円もなかったのにいつの間にか500円を突破したので、宣言通り2018年1月6日にWikipediaに寄付しました。今後いくら高騰しても大丈夫なように1万円寄付しておきました。今度こそ絶対にないと思いますが、もし万が一上記スクリプトの売上が1万円を超えていたら、どなたか私に教えてください。