Noxed #2 徹頭徹尾瞭解 DEXON

第二篇 Noxed 系列帶你瞭解「拜占庭將軍問題」、「即時反應」與「網路容錯」。

DEXON 中文
DEXONZH
8 min readApr 22, 2019

--

上一篇文章中,我們介紹了 DEXON 的特點:交易確認時間短、吞吐量高,而且具備鏈上隨機數。在這篇文章中,我們將聚焦在 DEXON 的核心技術——「拜占庭協議 (Byzantine agreement)」,並且說明拜占庭協議如何幫助 DEXON 成為一條快速又可靠的區塊鏈!

拜占庭將軍問題 (The Byzantine Generals Problem)

在開始之前,我們先來回顧一小段歷史。

拜占庭協議最早是由圖靈獎得主 Leslie Lamport 於 1982 年所提出。當時,Lamport 為了讓大家更容易了解問題的設定,他利用「三位拜占庭將軍遇到的困境」來說明電腦之間要能達成共識的困難程度。

想像一下:有三位將軍已經圍繞在一座城池都周圍,他們的目標是要共同決定「是否要進攻城池」。如果決定要進攻,那麼大家都得一同進攻;如果決定要撤退,大家也必須要一起撤退。但是有一個限制:他們沒辦法三個人聚在一起面對面討論,只能一個一個透過書信溝通。

如果三位將軍都是忠誠、不會騙人的,那麼他們只需要把自己的決定寫在信上,分別寄給其他兩位將軍。等到收到大家的訊息後,再加上自己的一票,取個多數決就可以了。以下圖而言,兩位將軍決定進攻,一位將軍決定撤退,那麼最後的結果就會是進攻。

然而現實總是殘酷的。軍隊中有些將軍可能會背叛大家,並且企圖使忠誠的將軍彼此分裂。比方說,他可以傳送不一致的訊息給不同將軍。以下圖而言,背叛者傳送「進攻」給上方的將軍,但傳送「撤退」給左邊的將軍。如果將軍們只是單純把收到的訊息取多數決,那麼就無法成功達成共識。

所以問題來了:「即使有些將軍可能會背叛大家,那些忠誠的將軍要如何讓彼此達成共識呢?」在實際應用當中,一個系統中每一台電腦就像是一位將軍,他們想要針對一個問題達成共識。然而,這些電腦當中,可能因為硬體故障或是遭受攻擊,導致電腦傳送錯誤或是不一致的訊息。在電腦科學中,用來處理這樣問題的方法,就稱為「拜占庭協議」。

區塊鏈中的拜占庭將軍問題

「哪一個區塊最終可以接上主鏈呢?」這個問題是區塊鏈共識演算法要解決的核心問題。

因此,我們可以這樣用區塊鏈的語言來重述拜占庭將軍問題:每一位礦工(或是出塊候選者)就是一位將軍,他們分別持有他們自己的區塊,而每一位礦工的區塊就像是否進攻的決定。他們希望藉由拜占庭協議來共同決定哪一個區塊可以接上主鏈。而攻擊者就像是背叛大家的將軍,企圖使大家認定不同的區塊,進而使區塊鏈分岔。

DEXON 的拜占庭協議

即使有攻擊者企圖分岔或竄改歷史,一個安全的區塊鏈仍必須要確保「每一位使用者都能看到一樣的主鏈」,而不會輕易地因為惡意攻擊而讓共識瓦解。那麼,DEXON 是如何在有惡意節點的情況下,依然能夠讓每一位使用者達成共識呢?關鍵就在 DEXON 的「拜占庭協議」。

經過了二十多年的發展,人們已經有許多可以抵抗攻擊者的拜占庭協議。不過有些協議效率不佳,有些協議對網路的品質要求很高。而 DEXON 的拜占庭協議除了繼承對攻擊者的抵抗性之外,還有兩個重要的特性可以讓 DEXON 更快更安全。接下來就讓我們來看看這兩個特性分別說了什麼吧!

即時反應 (Responsiveness)

許多區塊鏈都會用一個時間參數來確保安全性。比方說,比特幣設定平均每一塊的間隔是 10 分鐘,而以太坊則是 15 秒。如果隨意降低這些時間參數,就會影響區塊鏈的安全性,甚至使區塊鏈分岔。但是,維持安全的時間參數卻有個副作用:就算網路傳輸速度超級快,電腦的計算效能也超級高,整個區塊鏈網路還是要等到規定的時間後才能出下一塊(在比特幣和以太坊中,時間參數是決定「平均」出塊間隔)。

於是一個很自然的問題來了:「是否有可能創造一個區塊鏈系統,它的運行速度只取決於實際的網路延遲,而不受限於任何的時間參數呢?」

答案是肯定的!DEXON 的拜占庭協議的第一個特性就是「即時反應」。即時反應代表系統可以在不破壞安全性的前提下,運行速度只取決於實際的網路延遲,完全不需額外的等待時間。

那麼 DEXON 是如何同時即時反應又維持安全性呢?簡單來說,DEXON 會事先排好一個出塊者的清單,這個清單每一個小時都會重新選取,而且每一個符合資格的出塊者都會有相等的機會可以出塊。在網路運作正常的時,大家會依照這個清單,每個驗證者只要收到合法的出塊者所產生的區塊,就會立刻驗證其中的交易。一旦驗證成功,驗證者就會立刻將成功的訊息發布在網路上。以上的所有步驟都不需等待任何時間參數,只要收到訊息、完成驗證,馬上就可以進行下一個步驟,這就是 DEXON 擁有超高效率的原因。

網路容錯 (Partition-Resilient)

前段提到在網路運作正常的時,DEXON 可以即時反應,那麼當網路故障時,DEXON 又會發生什麼事呢?這就要提到 DEXON 的拜占庭協議第二項重要的特性——「網路容錯」。網路容錯保證了「在所有的網路故障情況下,安全性都能維持。」

我們是如何做到的呢?在分散式系統的研究中很有名的 CAP 定理宣稱「任何的分散式系統都無法同時達成『一致性 (consistency)』、『可取得性 (availability)』與『網路容錯 (partition-tolerance)』三個特性。」由於區塊鏈的安全性最重要的一點,就是要確保大家能夠看到一樣的主鏈,因此「一致性」在任何情況下都不能犧牲。因此,在網路狀況不佳時,演算法會優先選擇一致性與網路容錯。

雖然當今的網路已經十分穩定,我們還是得提防可能發生的故障(比方說海底電纜斷裂或是雲端服務重啟)。所以,當網路故障超過容忍範圍時,DEXON 就會自動暫停。而當網路恢復時,演算法就會自動重新啟動,完全不需要其他外部的資訊,或者社群的共識。

DEXON 是第一個在同步網路之下,同時具有即時反應與網路容錯的拜占庭協議。有了這兩個特性,在網路運作正常之下,DEXON 擁有超高的效率;在網路故障時,DEXON 又能維持安全,並且在網路恢復後迅速重啟,恢復正常。

在下一篇文章中,我們將探討 DEXON 能夠達成去中心化,支援上千個節點同時運作的核心技術,其中包括:

1. 什麼是「DEXON 的抽籤 (sortition) 機制」?
2. 什麼是「時段 (epoch) 轉換機制」?
3. 公證群是如何選取的?

Noxed 是什麼?

Noxed 是由 DEXON 基金會所製作的全新區塊鏈學習系列,我們將以文字、影片或圖像的方式來闡述 DEXON 的來龍去脈。如果你希望看到更多 DEXON 技術相關的主題,請在留言中告知我們。

立刻加入 DEXON 社群

「社群即是力量」,如果你想更了解 DEXON,或是加入 DEXON 社群成為社群管理員,歡迎加入我們!

Telegram discussions: https://t.me/dexon_foundation
Announcements: https://t.me/dexon_news
Scam alerts: https://t.me/dexon_scam_alerts

👩‍💻 Discord: https://discord.gg/WwZUTFj
👩‍💻 Github: https://github.com/dexon-foundation
👩‍💻 Reddit: https://www.reddit.com/r/DEXONFoundation/

👉 Twitter: https://twitter.com/dexonfoundation
👉 英文 Faceboook: https://www.facebook.com/DEXON.Foundation/
👉 中文 Faceboook: https://www.facebook.com/dexonchinese/
👉YouTube: https://www.youtube.com/channel/UCbg6l4M8QmSrJphxQvKof5g
👉 Medium: https://medium.com/dexon

--

--