
區塊鏈選擇規則不僅可以考慮已完成的工作量,還可以考慮礦池的前後一致性。我們可以透過將 chainScore 的定義更改為以下公式來加入礦池的影響:
chainScore = parentChain.score +(block.PoW_score * PCI)
其中 parentChain.score 為前序區塊鏈的評分,block.PoW_score 為該區塊鏈所做的工作量, PCI(礦池前後一致性指數,Pools Consistency Index)為介於0和1之間的值。
這裡的 PCI 表示礦池的前後一致性。讓我們來看一個使用礦池訊息來評估區塊鏈「健康」程度的一個實現。

在最後 3000 個區塊上使用滑動窗口來衡量工作量前後一致性的示例。
chainScore 函數的代碼實現如下所示:

滑動窗口礦池前後一致性增量的參考實現
當網路中多個區塊鏈共存時,我們認為最可能成為共識鏈的,會是那些礦工在持續挖礦的區塊鏈。這種說法並不是百分百正確,但對於大多數情況都是如此,除非出現掌握超過 51% 哈希算力的礦池叛變的情況。
這種結合礦池訊息的方法可以預測區塊鏈的未來是什麼樣的,並懲罰那些惡意行為者,而這些在過去是不可能實現的。當我們對礦池的前後不一致設置非常高的懲罰時,會出現以下兩種情況:
那麼,這種方法在上面所提到的幾種51%算力攻擊面前效果如何?
使用算力租賃服務(例如 NiceHash )來執行攻擊
由於其他礦池不會在他的區塊鏈上繼續挖礦,隨著時間的推移攻擊者會受到礦池前後不一致懲罰。
兩個共掌握全網 60% 哈希算力的礦池聯合執行攻擊
為了解決這個問題,我們不僅需要考慮礦池的哈希算力,還需要考慮在區塊鏈上挖礦的礦池的數量。如果我們有大於 10 個具有大致相同哈希算力的礦池,那麼這個問題就會變得更容易解決。
兩者的結合
例如一個掌握全網 40% 哈希算力的礦池,又租用了全網 30% 的哈希算力執行攻擊。
隨著時間的推移,攻擊者會受到礦池前後不一致懲罰。值得注意的是,即使攻擊者將租用哈希算力挖出區塊的礦工地址設置為原本礦池的地址也無濟於事,因為我們會查看已挖出區塊過去的數據。
使用專用積體電路(ASIC)執行攻擊
這看起來像是長期的 51% 算力攻擊。攻擊者會隨著時間的推移受到礦池前後不一致懲罰,但如果他能繼續堅持下去,他就可能會成為我們參考的「過去的礦池」。在這種情況下,問題演變成了如果一個礦池叛變。
雖然這種方法並沒有解決 51% 算力攻擊,但它能使攻擊者的攻擊成本變得更加高昂,因為攻擊者會在很長一段時間內持續受到懲罰(很多個區塊時間)。
如果幾個礦池突然停止挖礦,監控系統可以發覺這種情況,社群會有一些時間來做出反應,例如開始自己挖礦(但由於懲罰機制的存在他們必須小心)或者只是在發生這種情況時,等待更多後續區塊的確認。
基於這些情況,我們先做了以下假設:
接下來,我們需要用博弈論的方法來對這個假設進行驗證。需要注意的是,可以考慮不調整 PoW 的值,而是使用 PCI 作為附加值來保持 PoW 一致。
本文為巴比特資訊授權刊登,原文標題為「以太坊經典被51%攻擊之後, 國外大神用礦池讓攻擊者付出代價」