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





