基于一個支持分布式賬本同步的聯(lián)邦拜占庭協(xié)議系統(tǒng)FBAS介紹
加密貨幣是分散化的,因此有許多參與者(或節(jié)點、驗證器)驗證交易。交易總額構(gòu)成的賬本被復(fù)制到所有參與節(jié)點上。但是他們?nèi)绾芜_成一致,哪些交易是發(fā)生了的呢?在比特幣中,這是由計算能力決定的,但是像恒星共識協(xié)議(SCP)這樣的協(xié)商共識協(xié)議也可以用來實現(xiàn)相同的目標。本文解釋了SCP的一個基本構(gòu)建塊,即聯(lián)邦拜占庭協(xié)議系統(tǒng)(FBAS)或“聯(lián)邦投票”,以支持分布式賬本的同步。
拜占庭協(xié)議
在協(xié)商共識協(xié)議中,目標是讓所有節(jié)點都同意一些事實。拜占庭協(xié)議還允許節(jié)點就一個事實達成一致,但是對于大量的拜占庭參與者來說,協(xié)議是健壯的。拜占庭的參與者是協(xié)議的參與者,他們不遵守協(xié)議就會失敗,甚至表現(xiàn)出惡意的行為。在加密貨幣中,這可能會導(dǎo)致故意阻止交易,以啟用雙重支出攻擊的行為。
聯(lián)邦拜占庭協(xié)議系統(tǒng)(FBAS)
FBAS的設(shè)計方式是,即使節(jié)點加入或離開,協(xié)議仍然可以找到共識。如果協(xié)議是基于多數(shù)的,就會出現(xiàn)任意節(jié)點加入?yún)f(xié)議的問題,因為攻擊者可以使用大量節(jié)點來影響一致性。
如果Alice、Bob和Carol以相同的方式定義他們的分片,您將開始對一個主題進行投票,并且第5個人Marvin想要惡意地影響您的共識,那么他可以使用任意數(shù)量的節(jié)點來加入?yún)f(xié)議。只要Marvin不包含在您或您的朋友的任何仲裁片中,他就不能影響任何東西。
一個示例實現(xiàn)
我們構(gòu)建了一個基本的示例,它實現(xiàn)了FBAS,并提供了一個UI來選擇分片并保存投票。您可以在github上找到(并運行)代碼。
下面的例子將從原型上來解釋一些簡單的情況:
我們的節(jié)點被稱為scotch, saw, bacon 和bull.。片的配置類似于前面的示例,每個節(jié)點都定義,任何其他兩個節(jié)點都足以說服該節(jié)點。
節(jié)點“scotch”正在設(shè)置它的仲裁片
為所有4個節(jié)點配置仲裁片
是時候開始達成共識了。在第一個例子中,每個人都會投贊成票。
節(jié)點“scotch”在“交易A”上啟動FBAS
節(jié)點“saw”對“Transaction A”投贊成票
在所有節(jié)點都投贊成票之后,所有節(jié)點將找到一個仲裁片并最終確認該投票。
在節(jié)點“scotch”確認了“TransacTIon A”。
當一個節(jié)點看到一個節(jié)點的法定數(shù)量,為一個主題投票或接受“yes”時,它將接受該主題的“yes”。如果它看到該主題有一個節(jié)點接受“yes”的仲裁,它將移動到確認該主題的“yes”。quorum是一組節(jié)點,其中所有這些節(jié)點都確信自己。quorum可能只有一小塊大小,但也可能更大。在本例中,首先發(fā)現(xiàn)的法定人數(shù)是包含“scotch”(本身)、“saw”和“bacon”的法定人數(shù)?!甋aw’被‘scotch’和‘bacon’說服,‘bacon’被‘scotch’和‘Saw’說服。本例中的任何三個節(jié)點都可以找到?jīng)]有第四個節(jié)點的情況下仲裁。注意,由于仲裁片的配置,并不總是這樣,只是在本例中如此。
讓我們做另一個實例,但這次其中一個節(jié)點投了反對票。
‘Scotch’ 開始投票支持交易B
‘Bacon’投了贊成票。
“Saw”投票反對(見gif)(未找到法定人數(shù))
“Saw”投票否決
‘Bull’ 投了贊成票。
最后一個節(jié)點“Bull”投了贊成票,并找到了法定人數(shù),即“Bull”、“scotch”和“bacon”。他們不關(guān)心“saw”投票“no”,因為其他3個節(jié)點中有2個足以說服“bull”。但是“鋸” “Saw”現(xiàn)在怎么了?
正如你所看到的,“saw”的結(jié)束狀態(tài)——“saw”投票反對,但被接受并確認為“yes”,但這是為什么呢?這是由于第二個條件,它可以導(dǎo)致一個節(jié)點接受一些東西,這被稱為阻塞集。這意味著在每個分片中,至少有一個節(jié)點接受了另一個值。通過這種方式,節(jié)點知道,它投票支持的值永遠不會有仲裁,因此它接受另一個值。在這個例子中,bacon 和bull,都投了贊成票,這就會導(dǎo)致分片。
注:FBAS中明確允許對一件事進行投票并接受另一件事,但是沒有一個正確的節(jié)點能夠確認與它所接受的不同。
這些只是一些基本的例子。我們可以做更多的例子,但是這對本文來說太多了。如果您感興趣,請在我們的Telegram Group 或我們的Discord Server服務(wù)器上給我們反饋。也許我們可以做一個視頻展示的更高級的例子。
恒星共識協(xié)議(SCP)
FBAS只是SCP的一個構(gòu)建塊,它可能不會與SCP本身混淆,因為它比FBAS做的更多。我們目前正在為SCP開發(fā)一個原型,一旦我們運行了一些東西,就會更新給你。