5.5 挖礦的激勵和策略

我們在這一章花了很多篇幅討論作為一個礦工的主要挑戰:買到好的硬件、找到廉價的電費,然後盡快開始運行,然後期待一些好運氣。不過在挑選一個區塊開挖之前,每個礦工都需要做一些策略上的選擇:

1.需要包括哪些交易?礦工可以選擇將哪些交易放進他的區塊裡。默認的規則是選擇那些交易費比較高的交易。

2.對哪一個區塊進行挖礦運算?礦工可以選擇在哪個區塊上進行挖礦。默認的做法是在最長的那條區塊鏈上繼續挖下去。

3.在同一高度的多個區塊中做選擇。如果兩個不同的區塊在同一時間被宣佈發現,這就造成了一個區塊的分叉,每個區塊都是可以被延續下去的,因為它們都符合最長區塊鏈原則。礦工必須選擇其中一個區塊接龍下去。默認的做法是選擇最先被監聽到的那一個區塊。

4.什麼時候宣佈新的區塊?當礦工找到一個有效區塊之後,他們要決定什麼時候向比特幣網絡宣佈這一個區塊。默認做法是立刻宣佈,但他們也可以選擇等一下。

礦工其實面臨很多決定。每個決定都有一個默認策略,直到這本書撰寫之時,絕大多數的比特幣客戶端都是按照該默認策略運行的。非默認策略也有可能使得挖礦收益更高,很多人積極研究如何找到這樣的策略。讓我們來看看幾種可能有別於默認策略的做法,這些做法可能使得挖礦收益更高。在接下來的內容中,我們假設一個運行非默認策略的礦工掌控一定的比特幣網絡挖掘市場份額,設為α。

分叉攻擊

最簡單的攻擊就是分叉攻擊(forking attack),這是一個顯而易見的獲利方式——重複支付。一個惡意的礦工給一個受害者鮑勃發送了一些比特幣來購買其服務和貨品。鮑勃等到這筆支付交易被放進了最長鏈之後,甚至還等到了6個證實的時候確認支付安全之後,才開始發貨或者提供服務。

現在這個礦工開始跳到前一個區塊上開始重新挖礦——就是在那個包含他給鮑勃的支付交易區塊之前的那一塊。在這個分叉的區塊鏈裡,他插進了另一個替代交易——或者進行一個雙重支付——把那些已經支付給鮑勃的比特幣重新發送回自己的地址裡(見圖5.15)。

圖5.15 分叉攻擊

註:一個惡意的礦工給受害者鮑勃發送了一些比特幣來購買其服務和貨品。然後這個礦工進行了一個分叉攻擊,創建了一個包含衝突交易的更長的分叉,在新的共識鏈中給鮑勃的支付就變成了無效的交易。

想要這個攻擊成功,被分叉的區塊鏈必須要覆蓋當前最長的一條鏈,一旦這個情況發生,支付給鮑勃的交易就不再存在於共識的區塊鏈裡。如果這個礦工掌握佔優勢的哈希算力的話,也就是說α > 0.5,這種攻擊就會成功。也就是說,即使有大量的隨機變數,這個分叉最終會變成最長的一條鏈,也就是正當有效的共識鏈。甚者,因為這些幣已經被用過了(在新的共識鏈上),這筆支付給鮑勃的交易永遠不可能再回到區塊鏈上了。

51%是必要的嗎?如果α > 0.5的話,發動一個分叉攻擊是很有可能發生的。但在實際中,用稍低的算力也可以發動一個那樣的攻擊,因為有類似於網絡擁塞之類的其他因素。在主鏈上挖礦的其他礦工會因為一個正常的原因產生一些過時的區塊——因為有網絡延時。但是一個中心化的攻擊者本身則不會有這個延遲,他可以進行更快速的通信並且生成更少的過時區塊,這可能會節省1%甚至更多的算力。

擁有近乎50%算力的攻擊者可能需要花很長時間才可能成功,因為有隨機性。算力超過50%越多,攻擊就會變得越容易也越有效。人們經常討論51%的攻擊,是因為51%是一個分水嶺,超過51%的時候分叉攻擊就會成為可能。實際上,這種攻擊的成功概率是呈梯度變化的。

可操作的對策。我們不清楚分叉攻擊在現實中是否一定成功。因為大家可以覺察到這個攻擊,社區可以對此做出決定,即使分叉鏈更長也可以拒絕接受。

攻擊和幣值(exchange rate)。更加重要的是,這種攻擊可以摧毀大家對比特幣的信心,比特幣的擁有者們就想要把資產轉移出去,以至於比特幣價格崩潰。因此,雖然一個具有51%算力的攻擊者可能會在短期內利用雙重支付進行欺騙並獲得額外的收益,但是從長期來看,其實他們這麼做造成的損失可能更大。

所以發動這種攻擊的人其實是想通過打擊信心來摧毀比特幣。有點類似於邦德電影裡的反派想要對諾克斯堡裡的所有的黃金進行輻射污染,使其變得沒有價值一樣,這類攻擊被稱為金手指攻擊(Goldfinger attack)。這種攻擊者的目的可能就是摧毀整個貨幣,可能是由於他可以通過要麼做比特幣空頭交易,要麼擁有大量的競爭貨幣而獲益。

通過賄賂來進行分叉攻擊

通過購買足夠多的礦機來控制大部分的算力,是一件非常困難而且昂貴的任務。但可能還是會存在其他簡單的方法來進行分叉攻擊:相比直接購買算力以獲取超越所有其他人算力的昂貴做法,賄賂那些有能力的礦工來為你來工作也是可能的。

有幾種賄賂其他礦工的方法。其中一個方法是「系統外的」(out of band)——可能找到一些礦工然後直接用現金來賄賂他們。當然一個更加聰明的辦法是創建一個新的礦池,然後提供更好的獎勵來吸引其他礦工來加入,即使礦池運行可能因此而虧損。雖然這種獎勵不可能長期維持下去,但是可以維持足夠長的一段時間直到可以發動一個成功的分叉攻擊,然後獲利。還有一種方法是在你的分叉區塊鏈裡留下足夠多的「小費」,多到足以讓其他礦工離開最長鏈來加入你的分鏈,礦工們希望你的鏈成為最長的鏈,這樣一來他們可以收取你留下的小費。

不管是哪種賄賂的方式,核心思路都是一樣的:有別於直接獲得大量算力,攻擊者去賄賂那些已經擁有算力的人,讓他們幫助自己分叉出另外一條最長的區塊鏈。

可能礦工們並不願意去幫助一個攻擊者,因為這麼做會危害整個貨幣的價值,而他們已經在此之上投入了相當多的資金和礦機。從另一方面看,雖然礦工們作為一個整體可能希望保持貨幣的價值,但是他們可能做不到一致行動。個別礦工可能會因為短期利益,將個人利益置於集體利益之上。從經濟學的角度來看,那就是個經典的「公地悲劇」了。

這些假想在現實中未曾發生。賄賂攻擊是否可行,這依舊是一個懸而未決的問題。

臨時保留區塊攻擊

假設找到一個區塊之後,默認的做法是你會立刻向全網宣佈找到的區塊。但是如果你想進行一個臨時保留區塊攻擊(temporary block-withholding attacks),你也可以不立刻宣佈,然後在這塊上面繼續挖礦,期望你可以在其他礦工找到下一個區塊之前連續找到兩個有效區塊,在整個過程中秘密地保留你所發現的區塊。

如果你已經擁有兩個公共區塊鏈上超前的秘密區塊,那麼全網剩下的礦工所做的挖礦努力都會被浪費,其他的礦工都會在他們認為最長的鏈上繼續挖礦,一旦他們宣佈他們找到了一個有效區塊,你可以立刻宣佈你所秘密保留的兩個區塊,這樣你的區塊鏈立刻變成了最長的有效鏈,而其他人辛苦挖出來的區塊馬上就變成了一個孤塊而被丟棄(見圖5.16),你的這種行為被稱為自私挖礦(selfish mining)。通過使網絡上的其他礦工浪費算力計算出來的區塊瞬間過期,可以有效地增加你的挖礦獲利。

圖5.16 自私挖礦圖示

註:圖中顯示了其中一種攻擊方式。(1)攻擊之前的區塊鏈。(2)攻擊者挖到的區塊,保留著,在此之上繼續挖礦。(3)攻擊者運氣很好,在全網其他礦工之前發現了第二個區塊,並繼續保留。(4)非攻擊者找到了一個區塊,並進行廣播。攻擊者立刻廣播他所保留的兩個區塊,使得區塊4變成了孤島,浪費了其他人之前所用的算力。

這裡面的關鍵是你需要運氣好到連續發現兩個區塊,風險在於你只領先了一個區塊,其他人就已經向網絡宣佈發現了一個有效區塊。如果這種情況發生,你必須立刻宣佈你的秘密區塊,這叫造成了一個區塊的分叉,每個礦工都需要選擇哪一個區塊繼續挖下去。當然,你希望大部分其他礦工最早監聽到你的區塊並在上面繼續挖礦。由於這種攻擊的有效性嚴重依賴你贏得這個競賽的能力,所以網絡位置至關重要。你可以嘗試跟所有的節點建立鏈接,以使得你的區塊可以第一個到達其他的節點。

假設只有50%的機會可以贏得這個競賽,在α>0.25的情況下,自私挖礦可以比默認策略更有收益。如果α>0.333,即使你輸掉每一個這種競賽,仍然可以獲得更高的收益。這種攻擊的存在是令人震驚的,原來大家都相信如果沒有很大的算力——比如α≤0.5——不會有比默認策略更有利的挖礦策略。所以,即使某個礦工控制的算力低於50%,也是有可能通過切換到其他的挖礦策略來獲取更多的收益。

到2015年為止,臨時保留區塊攻擊僅僅是理論上的,在實際中並沒有觀察到這類攻擊事件,自私挖礦則很容易被檢測到,因為這種策略會增加同時宣佈區塊的概率。

黑名單與懲罰分叉攻擊

如果一個礦工想把一個來自地址X的交易列入黑名單,換句話說,他想凍結從該地址出來的錢,讓這些錢變得不可用。或許他想用這個辦法來敲詐勒索一筆錢,或許他們之間有仇,還有可能是政府執法部門認為那些地址有問題,需要礦工的配合來凍結這些幣。

傳統觀點都認為在比特幣裡這種黑名單沒有辦法有效施行。因為即使有些礦工會拒絕把交易放進區塊鏈裡,其他一些礦工可能會。如果你真的想把一筆交易列入黑名單,你可以嘗試其他一些更加激烈的手段,比如,懲罰分叉(punitive forking),你可以宣佈拒絕在包含來自該地址的交易的區塊鏈上工作。如果你擁有大部分市場運算能力,那應該足以保證這個黑名單上的交易永遠不會被公佈。確實,在這種情況下,其他礦工很有可能不會再試圖把這筆交易放入區塊鏈裡,因為這麼做有可能使得他們自己的區塊鏈被分叉,這會導致他們發現的區塊被刪除。

羽量級分叉

如果沒有很大的算力,上述的幾個分叉攻擊在現實中都不太可能實現。如果你宣佈拒絕接受包含某些特定交易的區塊鏈,但這條鏈被網絡上的其他礦工所接受並形成最長鏈的話,你就會發現自己被永遠排除在共識鏈之外(這就是一個硬分叉),所有你做的挖礦工作統統浪費了。更加糟糕的是,黑名單上的交易仍然存在於最長的區塊鏈上。

換句話說,考慮到還有其他礦工的存在,用懲罰分叉把特定交易放入黑名單的手段並不可靠。然而,有另一個更明智的方法可以做到這一點。與其一看到從地址X裡出來的交易就宣佈你會進行永久分叉,不如宣佈你將會嘗試分叉,但過一段時間你可能會放棄封殺的嘗試。例如,你可以宣佈:當k個區塊證實了從這個地址出來的交易是正當的時候,你便會回到最長鏈。[1]

如果你在一個區塊證實後便放棄,把那筆從地址X出來的交易成功封殺的概率是α2。原因是你必須要在其他礦工找到下一個區塊之前找到連續兩個區塊,這樣才能成功地丟棄那個包括地址X交易的區塊。α2是你連續找到兩個區塊的概率。

α2這個概率看上去不是很好。就算你掌控了20%的全網算力,也只有4%的成功概率來封殺那筆你不希望出現在區塊鏈上的交易。但這已經不錯了,至少你還有可能說動其他礦工來加入你。只要你把你的計劃公開了,其他礦工便會知道:如果他們膽敢把這個來自地址X的交易加入自己的區塊,便有α2的可能會喪失自己已經發現的區塊〔被你的羽量級分叉攻擊(feather forking)所消滅〕。只要他們不是有很強的主觀意願把這個交易包括進來並且這個交易沒有很高的交易費,他們可能更願意規避那α2失掉過往挖礦獎勵的風險,而不是獲取那筆交易費。

這就演化為:其他挖礦者經過理性的思考,將決定加入你對X地址的封殺行動,這樣你便可以成功地封殺X即使α<0.5。所以這個攻擊要想成功,重點在於確保其他礦工相信你將會進行分叉攻擊。

逐漸轉移到用交易費來獎勵挖礦

直到2015年,交易費還不是那麼重要,因為區塊獎勵在礦工總收入裡占比超過99%。但每4年,區塊獎勵就會被減半,最終區塊獎勵將會變得很低,低到交易費變成了礦工的主要收入來源。屆時礦工會如何應對還屬未知。他們會不會更加激進地要求實行最低交易費?礦工會不會聯合起來逼迫比特幣網絡實行最低交易費制度?

未解的問題

總結來說,理論上礦工可以自由地選擇挖礦的策略,但在實際中我們觀察到的是大部分礦工都選擇了默認策略來挖礦,雖然沒有完整的模型可以證明默認策略(default strategy)就是最佳的。在本章中,我們討論過幾個特定案例,有大量算力的礦工有可能執行非默認策略來獲取更大的收益。在挖礦策略上,實踐是領先於理論的。在實踐中,大多數礦工還是選擇了默認策略,而且比特幣運行得也很好。但是,從理論上,我們還無法論證這是一個穩定的機制。

默認策略能否在實際運行中一直保持有效,對於這一點我們也沒有把握。比特幣運行所依賴的現實條件也一直在改變。礦工們變得越來越中心化和專業化,整個系統的算力也越來越大。另外,從長期來看,比特幣的獎勵將從固定的挖礦獎勵為主轉變為交易費為主。我們真的不知道這將會如何演變,基於博弈理論對此進行預測也是一個非常有趣的前沿研究領域。

延伸閱讀

關於挖礦硬件演變的一篇優秀論文:

Taylor, Michael Bedford. 「Bitcoin and the Age of Bespoke Silicon.」In Proceedings of the 2013 International Conference on Compilers, Architectures and Synthesis for Embedded Systems .Washington,DC: IEEE Press, 2013.

關於比特幣和加密貨幣的知識系統化文章,特別是第三部分關於穩定性:

Bonneau, Joseph, Andrew Miller, Jeremy Clark, Arvind Narayanan, Joshua A. Kroll, and Edward W.Felten. 「Research Perspectives and Challenges for Bitcoin and Cryptocurrencies.」 Presented at the 2015 IEEE Symposium on Security and Privacy, San Jase,CA,May 2015.

一份完整的分析2011年不同礦池激勵機制的文章(有些信息有點過時,但是整體上還是值得參考):

Rosenfeld, Meni. 「Analysis of Bitcoin Pooled Mining Reward Systems.」arXiv preprint arXiv:1112.4980(2011).

幾篇研究挖礦策略的論文:

Eyal, Ittay, and Emin Gun Sirer.「Majority Is Not Enough: Bitcoin Mining Is Vulnerable,」In Financial Cryptography and Data Security . Berlin and Heidelberg:Springer,2014.

Kroll, Joshua A., Ian C. Davey, and Edward W. Felten.「The Economics of Bitcoin Mining, or Bitcoin in the Presence of Adversaries.」In Proceedings of the Workshop on the Economics of Information Security 2013. Berlin:Springer-Verlag,2013.

Eyal, Ittay. 「The Miner\'s Dilemma.」 Presented at the 2015 IEEE Symposium on Security and Privacy, San Jose,CH,May 2015.

[1] 給自己留條後路,見機行事。——譯者注

《區塊鏈:技術驅動金融》