請先閱讀最最最簡化的SCP

 

來講聯邦投票(Federated Voting的過程:投票、接受和確認(Voting, accepting, and confirming

 

在一輪聯邦投票中,一個節點可以選擇從投票給某個值 V 開始。我們用午餐吃什麼來舉例。

 

小安向周圍的人大喊(廣播)「我是小安小浪小黑是我的朋友(小安+小浪+小黑就是小安的仲裁切片),我投票(Voting排骨飯。」當小安這樣講時,表示承諾他從來不曾反對吃排骨飯,也永遠不會反對吃排骨飯(但最後吃不吃排骨飯就不一定了,有可能票數太少,後來跟別人吃其他食物)。

 

小安也會聽到身邊的人說他們要投給票什麼,小安只要聽到足夠多的人喊話,就可以根據這些人的朋友的朋友…找到朋友們組成的群體(仲裁)。

 

如果小安發現整群人都投票給排骨飯,他就會轉成接受排骨飯,並向周圍大喊「我是小安小浪小黑是我的朋友,我接受(Accepting排骨飯。」

 

接受(Accepting比單純的投票(Voting提供了更強的保證。當小安投票給排骨飯時,他永遠不會投票給排骨飯以外的食物,但群內的其他人就不一定了。可是小安接受排骨飯時,整個群體的人都不會接受排骨飯以外的食物

 

當然,小安很有可能不會立即看到很多人同意他投的排骨飯,其他人可能會投票給肉羹麵總匯三明治。但是還有另一種方式可以讓小安從單純的投票推進到接受。

 

小安可以接受另一個不同的食物,比如肉圓,即使小安沒有投票給肉圓,也沒有看到整個群體的人都投票給肉圓,但只要小安看到一些特別的朋友接受肉圓就行。

 

我們把這些特別的朋友取個專有名詞,叫做阻塞集(blocking set

 

阻塞集是從小安的每個朋友切片中選擇一個人來組成。顧名思義,它能夠阻止任何其他食物選項。如果這些人都接受肉圓,那麼將永遠不可能形成一個接受不是肉圓的群體,因此小安也接受肉圓是安全的。

 

小安3個朋友切片

 

小浪+老礦工+傑叔,是小安的阻塞集,它從小安3個朋友切片中各挑了一個人。

 

小浪+艾瑪也是小安的阻塞集,因為艾瑪同時出現在小安2個朋友切片中。

 

但是阻塞集不是一個完整的朋友群體。如果有人可以在小安的每個朋友切片中收買一個人(例如收買小浪艾瑪),那麼就很容易欺騙小安接受一個奇怪的食物(如毛鴨蛋!!)。所以接受肉圓並不是午餐投票的結束。相反的,小安必須確認(Confirming它,也就是看到整個群體的人全都接受肉圓。如果走到這一步,其他人最終也都將確認相同的肉圓,因此小安就能把肉圓當作午餐投票結束的結果。

 

午餐吃什麼的聯邦投票

 

投票接受確認的過程構成了一輪完整的聯邦投票。恆星共識協議結合了許多這樣的回合來創建一個完整的共識系統。

 

 

這樣就結束了嗎?不,還沒。

 

共識系統的兩個最重要的屬性是安全性(safety活性(liveness。如果每個參與者最終的決定都一樣,小安小浪永遠不會吃不同的東西,那麼它就是“安全的”。剛剛描述的聯邦投票程序在某種意義上是安全的,如果有人確認吃陽春麵,則沒有其他人會確認吃披薩

 

但“不會確認吃披薩”與“會確認吃陽春麵”是兩回事。可能人多嘴雜,有太多不同的美食被投票,都沒有達到“接受”門檻。拖到下午四點大家才決定午餐吃陽春麵,這樣就是缺乏“活性”。

 

恆星共識協議確保安全性和活性的方法是,對多種美食進行多次聯邦投票,直到一項美食通過SCP的各個投票階段。這部分我們留到提名與投票的篇幅再說明。

 

回首頁