漣漪共識-所有unl圖的數學確定性?
有人說,漣漪以數學上的確定性達成共識。如果我們分析共識協議,我們可以看到一個特定的驗證者可以對其餘驗證者的狀態有一個非常狹隘的看法。他的聯合國清單中至少有 80% 必須提議將交易包括在內。他們每個人都從 70% 的 unl 列表中收到了這樣的建議等……
除非所有這些節點都代表任何驗證者的 unl 列表的 80%,否則不能假設初始驗證者知道新分類帳已達成全球共識。
一個有問題的例子是一個 unl 圖,它的有向距離大於 6 並且連通性很低。
它是否正確?如果為真,那麼在 unl 圖上做出的假設是什麼,以便發生上述情況?
編輯:2 個斷開的網路不會達到 2 個不同的共識,從而完全了解第二個共識嗎?如果我們假設一個圖和 2 個連接的子圖有一個遠離其邊界的核心。位於該核心內部的驗證者將假定已達成共識,並且只有邊界處的驗證者會知道沒有共識。換句話說,unl 列表不應該是通過對所有可信賴的驗證者進行統一隨機選擇來建構的,還是有可能無法檢測到共識的缺失?
沒有達成共識的結論是一個有效的結論,並且可能由於拓撲不良或拜占庭式故障而導致。確定性總是與過去發生的事情有關。如果不觀察比通常情況更多的點,就不可能確定地知道目前狀態。
因此,每台伺服器都會在它所知道的東西之前用完,應用事務並試圖就它們達成共識。當並且如果實際上產生了共識,伺服器稍後會確定地確定這一點,因此可以確定它所知道的。
從本質上講,共識過程會產生一個稱為“驗證”的簽名消息流,從中可以確定是否在過去的某個時間點確實達成了共識。
可以創建經常無法達成共識的 UNL 拓撲。該計劃是讓 Ripple 伺服器使用一種算法來建構它們的 UNL,這種算法極不可能出現這種拓撲。
即使有完美的拓撲結構,也可能出現兩種拜占庭式故障。
一個並不罕見(大約每 200 輪中的一個)是局部故障。為了達成共識,必須有人宣布達成共識。為此,必須有人首先宣布達成共識。當這種情況發生時,無論誰發表聲明都無法確定其他人是否會宣布相同的共識(或者他們已經這樣做了,所以他不會是第一個)。所以他總是有可能宣布錯誤的共識。
在這種情況下,遭受拜占庭式故障的伺服器很快發現其他驗證者建構了與它不同的分類帳,並開始其重新同步過程。其他伺服器仍然會根據驗證,哪個分類帳是多數分類帳。
一種不太常見的故障類型是完全拜占庭式故障。在這種情況下,多個伺服器聲明了不同的共識,並且沒有明確的多數分類賬。在這種罕見的情況下,整個網路必須重新融合,才能形成真正的共識。Ripple 有一個算法可以做到這一點。伺服器將看到相互衝突的驗證,並確定沒有實際的共識。