在nicehash上怎麼設置礦池
1. 簡單解釋何為51%攻擊
你可能會下意識認為加密貨幣是安全可靠的。怎麼說呢,即使網路犯罪分子以不可思議的規律頻繁攻擊交易所和熱錢包,但底層的區塊鏈技術本身天然抗攻擊,不是嗎?
好吧,其實不然。區塊鏈容易遭受所謂的「51%攻擊」傷害。
當有一組礦工控制超過Token哈希算力(計算能力)的50%時,可能會發生51%的攻擊(也稱為「多數攻擊」)。 實際上,「51%」其實用詞不當; 一個成功的攻擊實際上僅需要50%+ 1的哈希算力。
如果一個群體可以達到如此高水平的控制,就可以通過以下方式輕易毀掉相關幣種。
不進行確認從而阻止產生新的區塊
撤消當前塊上已完成的事務
在網路上發起「雙花」
50%+ 1是確保攻擊成功所需的哈希算力。 但是,也有可能以較低的哈希算力成功進行攻擊。 安全團隊使用統計建模來表明當被控制的哈希算力達到約30%時,漏洞風險可能會開始增加。
比特幣以及其他幾個主流幣種使用工作量證明機制來驗證交易並將其廣播到區塊鏈上。
在白皮書中,比特幣的創始人中本聰簡明扼要地將這個過程概括為「一CPU,一票」:
「工作量證明「實質上是一CPU一票,最長的鏈條代表大多數判斷,因為該鏈條擁有最大量「工作量證明」投入。如果CPU算力的大多數由誠實的節點控制,誠實的鏈條將以超過其他與之競爭鏈條的速度快速生長。
您可能已經注意到上述引文中的大問題:「如果大部分CPU功率由誠實節點控制......」
當不誠實的節點數量超過誠實節點時,問題就出現了。 在這些情況下,他們可以「投票孤立」合法的礦工,確保他們自己控制最長的鏈條,從而控制整個加密貨幣。
中本聰假定,即使礦工可以控制超過50%的節點,他仍然可能「遵守規則」來保護自己的財富:
如果一個貪婪的攻擊者有能力比誠實礦工控制更多CPU算力,他將被迫進行選擇,是通過欺詐以偷回其支付的款項(譯者註:即雙重支付攻擊),還是通過(獲取)生成的新貨幣。他應當會發現,按照規則行事更加有利可圖,這樣的規則有利於他比其他聯合起來的每一個人獲取更多的新貨幣,亦優於破壞系統以及損害自己擁有財富的有效性。
不幸的是,網路犯罪分子並不完全遵循規則。 自中本聰的白皮書發布以來,已有無數的51%攻擊案例。
到目前為止,我們已經利用比特幣來說明51%的攻擊是如何發生的。
然而,雖然在技術層面上比特幣易受攻擊,但在更實際的層面上,由於三個原因,它不太可能成為這個受害者:
1、成本
比特幣網路規模巨大,想要獲得足夠用於攻擊的哈希算力,需要相當大量的資金投入。
據Crypto51稱,對比特幣進行長達一小時的黑客攻擊需要花費237,941美元。 對以太坊進行攻擊的成本同樣令人望而卻步 ——將花費74,837美元。
2、礦池
如今,最大的加密貨幣的礦池分布廣泛。
情況並非總是如此;2014年,Ghash.io大概掌握量51%的比特幣哈希算力。比特幣當時顯然遠不如現在影響大,但仍然令人擔憂。
不得不說Ghash.io賊靠譜,他們幾乎立即放棄了10%算力,並要求社區自願將自己的算力限制在40%內,以保護區塊鏈的長期完整性。
現在最大的比特幣礦池的哈希算力徘徊在20%左右。
3、NiceHash
NiceHash是世界上最大的加密貨幣挖礦算力市場。
據Crypto51估計,NiceHash可以產生的總功率不到比特幣網路總功率的百分之一。 以太坊是5%,比特幣現金是2%。 所有主流幣的百分比都保持相似的低百分比。
因此,即使是武器化的NiceHash也沒有足夠的力量對主流幣進行51%的攻擊。
當你研究較小的幣種時,事情開始發生巨大變化。
就像市值排名前十的幣種,對其發動攻擊基本都是天價,而排名再往後就不好說了。其對應的NiceHash百分比也開始增加。 也有一些較大幣種的百分比令人擔憂。 以太坊經典為82%,門羅幣79%……
2018年5月比特幣黃金遭遇51%的攻擊時,小幣種的脆弱性成為焦點。
比特黃金 ——來自2017年比特幣的硬分叉 - 當時甚至出現不到六個月。
以至於該項目的發言人愛德華·伊斯克拉爾必須告知所有可以交易比特黃金的交易所,將確認數從5個增加到50個,並手動審查大額交易是否存在可疑活動。
「持續攻擊的成本很高。 由於成本很高,攻擊者只有從虛假存款中快速獲得高價值的東西才能獲利。 像交易所這樣的場所,可以自動接受大額存款,允許用戶快速交易另一個幣種,然後自動撤離。 在清算交易資金之前,我們一直建議設置上限以防止此類攻擊,並敦促人工審查BTG的大額存款。「
在很長是一段時間,我們幾乎可以肯定的是,51%攻擊的次數會不斷增加。
但是會有一線希望嗎? 很難說目前存在的數千種山寨幣給最終用戶帶來了什麼實實在在的好處。 如果由此加密世界能圍繞一些較大的幣種進行鞏固,那麼對於該行業的長期健康來說,51%攻擊可能不是一件絕對的壞事。
2. 以太坊stratum協議原理
參照比特幣的 stratum協議 和 NiceHash的stratum協議規范 編寫了一版以太坊版本的stratum協議說明.
stratum協議是目前最常用的礦機和礦池之間的TCP通訊協議。
以太坊是一個去中心化的網路架構,通過安裝Mist客戶端的節點來轉發新交易和新區塊。而礦機、礦池也同時形成了另一個網路,我們稱之為礦工網路。
礦工網路分成礦機、礦池、錢包等幾個主要部分,有時礦池軟體與錢包安裝在一起,可合稱為礦池。
礦機與礦池軟體之間的通訊協議是 stratum ,而礦池軟體與錢包之間的通訊是 bitcoinrpc 介面。
stratum是 JSON 為數據格式.
礦機啟動,首先以 mining.subscribe 方法向礦池連接,用來訂閱工作。
礦池以 mining.notify 返回訂閱號、ExtraNonce1和ExtraNonce2_size。
Client:
Server:
其中:
是 訂閱號 ;
080c是 extranonce ,Extranonce可能最大3位元組;
礦機以 mining.authorize 方法,用某個帳號和密碼登錄到礦池,密碼可空,礦池返回 true 登錄成功。該方法必須是在初始化連接之後馬上進行,否則礦機得不到礦池任務。
Client:
Server:
難度調整由礦池下發給礦機,以 mining.set_difficulty 方法調整難度, params 中是難度值。
Server:
礦機會在下一個任務時採用新難度,礦池有時會馬上下發一個新任務並且把清理任務設為true,以便礦機馬上以新難度工作。
該命令由礦池定期發給礦機,當礦機以 mining.subscribe 方法登記後,礦池應該馬上以 mining.notify 返回該任務。
Server:
任務ID : bf0488aa ;
seedhash : 。每一個任務都發送一個seedhash來支持盡可能多的礦池,這可能會很快地在貨幣之間交換。
headerhash : 。
boolean cleanjobs : true 。如果設為true,那麼礦工需要清理任務隊列,並立即開始從事新提供的任務,因為所有舊的任務分享都將導致陳舊的分享錯誤。如果是 false 則等當前任務結束才開始新任務。
礦工使用seedhash識別DAG,然後帶著headerhash,extranonce和自己的minernonce尋找低於目標的share(這是由提供的難度而產生的)。
礦機找到合法share時,就以」 mining.submit 「方法向礦池提交任務。礦池返回true即提交成功,如果失敗則error中有具體原因。
Client:
任務ID : bf0488aa
minernonce : 6a909d9bbc0f 。注意minernonce是6個位元組,因為提供的extranonce是2個位元組。如果礦池提供3位元組的extranonce,那麼minernonce必須是5位元組
Server:
一般的礦機與礦池通訊過程就如下所示: