一位Reddit用戶前幾天說,他不明白Avalanche的必要性,也不知道它真正解決了什么問題。這似乎是對Avalanche的一種普遍看法。在這篇文章中,我將盡我最大的努力,闡明目前我們在比特幣現金中遇到的問題,以及Avalanche如何解決這些問題。Avalanche有兩種使用方式——預共識和后共識——所以我將在本文中介紹它們。
?
預共識
有什么問題呢?實際上有兩個——塊傳播和零確認。
塊傳播
我們社區中似乎有很多人認為塊傳播是一個已經解決的問題,因為我們已經了解了塊壓縮算法,比如石墨烯。但這個問題真的沒有徹底解決。我們所有的塊傳播算法,包括Graphene,XThin,Compact Blocks和XThinner,都是依賴網絡中各個節點的內存池來彼此同步的。
如果每個節點已經擁有了區塊中的所有交易,那么塊傳播只會成為一項挑戰,即只傳輸最少的必要數據,以便傳送內存池中的那些在區塊中的交易,而不是完整的交易本身。
但是,內存池可能存在很多原因導致不能同步,特別是當網絡上的交易量增加時。這些原因包括:
1、不同的內存池策略:節點始終可以自由選擇自己的內存池策略。一些節點拒絕非標準交易,而其他節點接受它們。有些節點拒絕接受零費用的交易,而另一些則接受等等。這些差異并不一定會造成一次性的差異,相反,在拒絕其中一個依賴項的節點的內存池中,任何構建在這些交易上的未經確認的交易鏈都將丟失。
2、雙倍花費:當同一時間發送雙倍花費時,不同的節點第一次看到的交易是不一樣的。與上述情況一樣,如果未經確認的交易鏈建立在這一個或另一個交易上,內存池的差異會被放大。
3、高容量:在交易量非常大的情況下,網絡中存在有很多交易,節點最終會因正常的傳播延遲而產生完全不同的內存池。
那么當內存池不同步時會發生什么?這意味著我們的塊壓縮算法不能很好工作,甚至根本無法工作,因為我們需要通過區塊傳輸完整的交易,而它們不在內存池中。
這是BU Gigablock測試網研究的結論之一。在大約100 MB區塊的持續吞吐量下,有時網絡上各個節點的內存池彼此不同步,以至于XThin壓縮算法根本無法為傳播100MB的區塊提供任何壓縮。
而且,由于傳播完整的100MB區塊可能超過10分鐘或者更長的時間,這意味著區塊鏈將會分叉并保持下去,從而導致共識的失敗和系統的全面崩潰。這一點在Peter Rizun的研究中曾提到。
Avalanche有什么幫助?
作為一種預共識機制,Avalanche可以幫助保持內存池的同步,采用不同的方式部署它。在這一點上,我們仍然只討論Avalanche并研究最佳方法,但是如果你要求所有交易在被允許打包之前使用Avalanche,那么你最終會遇到所有的Avalanche-aware節點在網絡共識的設置下允許打包的交易集合,因此區塊總是以最大速度傳播,因為每個節點已經在區塊中具有完整的交易集。
零確認
我們提出了一種改進零確認的雙花證明方法,以防止快速重花攻擊。在這種情況下,攻擊者廣播兩個雙花交易的時間幾乎相同,因為彼此的結果都是非零概率的,所以雙花的兩個交易都會被打包。我們的雙花證明中繼可以幫助商家檢測這些雙倍花費并拒絕付款。
一種難以解決的雙花攻擊是礦工賄賂。在這種情況下,攻擊者向雙重支出交易附加大額交易費試圖賄賂礦工接受它。在之前的一篇文章中,給出的例子是,攻擊者購買了4000美元的電視。他用2000美元的費用廣播雙倍花費。如果有任何礦工接受賄賂,他們可以獲得2,000美元,而攻擊者可以得到2,000美元的折扣。
如果哪怕只有一小部分礦工愿意接受賄賂,零確認對任何人都不起作用,因為在這種支付系統中,在可以進行詐騙的地方,對大多數商家來說5-10%的時間是不可用的。
Peter Rizun 提出的研究表明,今天網絡上有礦工會很樂意接受賄賂來打包雙重支出交易。因此,這是一個我們想要解決的真正問題。
Avalanche有什么幫助?
通過讓節點預先就哪些交易是可以打包的達成共識,它們必然會在區塊被開采之前解決沖突交易(雙重花費)之間的沖突。事實上,Avalanche可以無理由的在幾秒鐘內批準交易。假設我們能做到這一點,任何在接受付款后廣播的雙重支出都不會被接受。即使大多數礦工,甚至所有礦工都愿意接受賄賂打包雙重支出的交易,也是不能做到的。因為他們無法回到過去,逆轉已被Avalanche標記為最終交易的交易。
因此,Avalanche有可能給我們帶來近乎即時的確認。或者至少可以在網絡延遲允許的范圍內以最快的速度批準交易。
后共識
有什么問題呢?
51%攻擊!
回顧白皮書,人們一直都知道比特幣(以及任何POW加密貨幣)很容易受到控制著50%以上網絡算力的惡意方的攻擊。比特幣現金作為SHA-256哈希算法的小算力鏈,處境非常糟糕。因為有許多大型比特幣礦工個人擁有大量的算力,足以對BCH發起攻擊。即使BCH使用不同的挖礦算法并擁有自己獨特的ASICS,但是有足夠資源的惡意人員總是有可能購買足夠的算力來攻擊系統。
事實上,這正是11月份比特幣現金的遭遇。一個不理智、心懷惡意的演員(Craig Wright)使用他的財富(或者更具體地說是Caliv Ayre的財富)購買ASIC,其公開聲明的目標是對比特幣現金進行51%攻擊。最終他們失敗了,但保衛比特幣現金付出了巨大的代價。如果 Craig 和 Calvin有更多的資源或愿意花更多的錢來進行攻擊,那么防御是非常困難的。
當時實施的臨時應急防御策略是在網絡節點構建10個區塊之后,讓網絡節點確定“最終”區塊。最終意味著軟件認為給定的區塊是區塊鏈的最終和永久部分。如果沒有這個規則,當51%攻擊者發布了一個更長的鏈就會發生重組,而現在軟件會忽略這個更長的鏈,因為它試圖覆蓋一個標記為final的塊。
從表面上看,這確定聽起來是個好主意。如果沒有必要的話,那為什么我們還想要保持深度重組和51%攻擊的可能性呢?畢竟,如果歷史交易發生逆轉,貨幣體系就無法運轉。
這個問題的答案與客觀性的概念有關。加入網絡的新節點,或者從缺失狀態返回的節點,只有一個客觀的衡量標準,用于確定他們應該遵循哪條競爭鏈,那就是工作量證明。如果現有節點拒絕深度重組并且遵循具有累積工作量較少的鏈,那么加入網絡的新節點無法知道這一點。結果是,新節點將同步到攻擊者的鏈上,現有節點將跟隨他們自己的鏈,從而導致分裂網絡。
還有一些人擔心,51%的攻擊者可能會利用競爭條件導致現有節點彼此分裂,盡管可能會部署一些技術來緩解此類攻擊。
Avalanche有什么幫助?
Avalanche可以讓我們在不暴露上述問題的情況下完成最終確定。當網絡節點使用Avalanche來協調他們認為有效的鏈時,51%的攻擊者不會利用競爭條件來分裂網絡。
此外,加入網絡的新節點可以使用Avalanche來確定其他人正在關注哪條鏈,并且將避免同步到由51%攻擊者生成的鏈。
因此,在后共識Avalanche的情況下,51%的攻擊者無法執行深度重組或任何重組。這意味著一個確認將具有與當前系統中數千個確認相同的權重。
51%的攻擊者也不能挖空塊并對區塊鏈執行某種形式的拒絕服務攻擊。空塊鏈的開采需要執行一個塊重組操作,其他礦工挖塊都是孤塊。因為Avalanche的存在,這將是不可能的。攻擊者可以做的事情是,他個人挖的51%的區塊是空的,但其他人挖的區塊顯然不會是空的。
Avalanche的安全性如何呢?在某些方面,我們正在繞開POW的權威,這是不是意味著整個系統的安全現在要依賴于Avalanche的安全?答案并不是這樣。
如果你看一下Avalanche論文中的雪球算法,你會注意到一個擁有系統攻擊能力的拜占庭攻擊者只能在他保持攻擊的時候阻止塊的最終確定。舉個例子,他不能使某些節點最終確定是區塊A,而其他節點最終確定是區塊B,從而導致網絡的分裂。
所有這些意味著,如果Avalanche系統受到攻擊,網絡就會默認回到我們從第一天開始使用的中本聰共識。區塊將不會最終確定,節點將遵循工作量累積最多的鏈。一旦攻擊停止,區塊將再次開始最終確定。
因此,在POW之上使用Avalanche協議可以增強系統抵御51%攻擊的能力。它具有以下安全屬性:
如果攻擊者具有》 50%的算力而不是》攻擊Avalanche所需的拜占庭節點所需的閾值,則無法攻擊比特幣現金。
如果攻擊者具有》攻擊Avalanche所需的拜占庭節點所需的閾值但沒有》50%的算力,那么也無法攻擊比特幣現金。
只有攻擊者既具有大部分的算力也具有足夠的可以攻擊Avalanche系統的拜占庭節點,才能實現對比特幣現金的攻擊。
希望這篇文章能夠澄清一些對于Avalanche的誤解。我們還有更多的工作要做,以能夠在預共識和后共識的情況下更好的使用Avalanche。Avalanche似乎是針對比特幣誕生以來存在的一些棘手的問題的有效解決方案。
評論
查看更多