【出賣眼球的下一步是出租CPU運算力】挖礦如何成為一門新生意,瀏覽器挖礦原理大剖析
熱門挖礦換貼圖遊戲App開發者黃士晉指出,以前是搶注意力,現在是搶CPU的計算時間,除了網路廣告,瀏覽器挖礦可以讓網站獲利模式多一個選擇(攝影/何維涓)。
知名海盜灣網站綁架個人電腦CPU資源來挖礦的事件,打開了瀏覽器挖礦的大門,甚至開始吸引不少網站主,開始思考,如何將加密貨幣的挖礦行為,變成新型態的商業模式。其實,這不是一個新概念,早在5年前,在瀏覽器上跑JavaScript挖礦程式的點子就已經出現了。
「2011年的瀏覽器挖礦,跟現在的概念一模一樣,只不過當時挖得是比特幣。」去年擠進Google Play商店熱門App排行榜的「挖鑽石換Line貼圖」App作者黃士晉觀察,這是一個揪眾幫忙用手機挖礦,再送Line付費貼圖的小遊戲。他也是臺灣區塊鏈社群的活躍者,一直想從虛擬貨幣挖礦行為中,來找出新的應用模式。
海盜灣事件喚起了黃士晉對瀏覽器挖礦的注意後,他開發了一個名為「挖挖」的單頁網站,除了簡單介紹,只在網頁加上了短短幾行的Coinhive挖礦JavaScript程式碼就成了一個利用挖礦獲利的網站。「當有訪客瀏覽挖挖網站時,就會介接到提供挖礦礦池的Coinhive下載挖礦程式,再用訪客的電腦CPU來挖門羅幣(Monero,代號XMR)。
黃士晉解釋,Coinhive網站就是一個虛擬貨幣的礦池,將挖礦需要的Hash雜湊值計算工作,分配給所有連上來的礦工電腦,若有電腦搶先計算出有效的區塊Hash值,先回傳到Coinhive礦池伺服器,再由Coinhive向門羅幣區塊鏈提出,驗證有效後,Coinhive就能得到獎勵,再分潤給上傳這個區塊Hash值的礦工電腦,Coinhive再進行下一次的派工,將區塊計算需要的資訊,再分派給各礦工。若Coinhive回報給門羅幣區塊鏈的Hash值無效(例如有人搶先一步完成這個區塊的計算),Coinhive就會通知各礦工電腦放棄現有計算工作,重新派工,再進行下一輪區塊的計算。
Coinhive的JavaScript挖礦程式,會透過WebSocket通道,自動串連礦工電腦上瀏覽器,將挖礦全程自動化。
為何是門羅幣?1萬倍效能差距可以縮短到35%
這次的挖礦事件,最讓大家疑惑的問題是,為什麼是門羅幣?它為什麼可以利用CPU挖礦?黃士晉指出,門羅幣的抗礦機(ASIC Resistant)特色,正是讓任何瀏覽器都有機會成為礦工的關鍵。黃士晉解釋,2014年誕生的門羅幣,最初的設計就是要開發出一款純CPU可以挖的幣,讓挖礦者必須使用CPU或GPU來計算,以提高挖礦運算的分散程度,避免算力過度集中在大型礦池。
去中心化(Decentralization)是所有加密貨幣的前提與特色,但是門羅幣的設計更是注重這一點,它所使用的演算法稱作Cryptonight,特別針對CPU架構來優化,尤其利用了CPU擅長的AES(進階加密標準)還搭配了高耗記憶體快取的設計,「門羅幣挖礦作業時,必須先載入前幾個區塊的資料來加入計算,它規定就是如此,所以,礦工電腦必須有足夠的記憶體來儲存這些資料。」一般比特幣專用挖礦機,以強化運算為主,不會搭載足夠的記憶體。
再加上,門羅幣Cryptonight演算法有另一個特性是,可以讓JavaScript挖礦程式的效能,不會輸C++語言開發的ASIC大型礦機程式太多,「尤其遠不如其他加密貨幣那樣效能差距極大。」黃士晉表示。
像Coinhive評估,用C++寫的挖礦程式,只比在瀏覽器上執行JavaScript挖礦程式的效能,多了35%而已,不像比特幣,「只靠CPU和GPU挖礦,比起現今最快的ASIC礦機,兩者算力相差了一萬倍,相當懸殊。」他解釋,原因是比特幣挖礦設計,採用SHA-256雜湊演算法,可以使用ASIC軟體輕鬆完成。因此,比特幣礦機憑著架設簡單、便宜且利潤高,導致比特幣的挖礦工作被大型礦池壟斷了。
他指出:「門羅幣採用的Cryptonight演算法,可說是一種ASIC Resistant(抗礦機)」,讓門羅幣礦機的效果變得不像比特幣礦機那樣有效率。
並非技術上無法打造出門羅幣礦機,黃士晉補充,Cryptonight演算法挖礦時,需要載入大量資料,若想實現超高速計算,就算是用DDR記憶體還不夠快,得用更高速的記憶體快取才行,這就帶來相當昂貴的記憶體成本,對礦機廠商而言,不一定能符合回收效益。甚至,「一旦門羅幣礦機真的出現了,這些幣種還可能會進行硬分岔(Hard-fork),就是要讓這些礦機無法使用。」
換句話說,正是ASIC Resistant特色的門羅幣,讓世界各地的礦工,可以在家中用電腦就能進行挖礦。這也是像Coinhive瀏覽器挖礦程式,非選擇門羅幣不可的原因。
短短兩行程式碼讓你的電腦也變成挖礦一份子
海盜灣利用JavaScript瀏覽器挖礦的概念其實並非首例,2011年的Browser Bitcoin Miner就是最早現身的瀏覽器挖礦,只不過當時挖的比特幣的難度僅是現在的百萬分之一。而此次造成熱潮的Coinhive,原本只是德國一家經營圖片農場的公司,為了想辦法替自家的網站賺錢,開啟了用瀏覽器挖門羅幣的生意。
Coinhive自成一個門羅幣的礦池節點,負責同步過去門羅幣的區塊鏈資料,利用兩行短短的程式碼將挖礦資料分散給,每一個串接的瀏覽器執行挖礦,再將結果回傳。
首先,想要透過在網頁介接Coinhive挖礦程式碼的人,要在Coinhive註冊帳號,Coinhive平臺會幫忙設定好Site Key公私鑰,只要將公鑰的部分置換到呼叫Coinhive挖礦程式的兩行程式碼中,再將這兩行短短的程式碼放置在網頁的 或