區(qū)塊鏈去中心化的共識機制PoB解析
每一個區(qū)塊鏈產(chǎn)品,本身就是一個微型社會,一個由網(wǎng)絡(luò)節(jié)點組成的自適應(yīng)組織,這個組織的運行由共識機制來規(guī)范。共識機制是可編程的利益轉(zhuǎn)移規(guī)則,吸引人們參與其中,組成安全網(wǎng)絡(luò),并有序運行。
在IOST目前版本的PoB機制中,區(qū)塊生產(chǎn)委員會擁有17個席位,每10分鐘換屆一次。每次換屆時Servi值最高的17個節(jié)點入選委員會,輪流打包區(qū)塊并獲得獎勵。節(jié)點每次入選委員會都會消耗Servi,未入選的節(jié)點就相對有更多Servi,在下次換屆時有更大的機會入選委員會。在此機制下,一天內(nèi)就可能有上百個節(jié)點入選過委員會。
在PoB機制中,成為備選節(jié)點的準入門檻更低,更多社區(qū)成員可以參與競選。同時,通過高頻率的換屆,大部分備選節(jié)點都有資格入選,委員會的流動性非常高,去中心化程度遠高于EOS采用的基于少量超級節(jié)點和備選節(jié)點的DPoS機制,實現(xiàn)了更好的社區(qū)自治,同時也保障了更高的安全性。
概述
IOST設(shè)計的PoB是一個比DPoS更去中心化的選舉方案,并且具有相同的擴展性。在本文中,我們希望用最簡單清晰的文字描述PoB如何運行。
我們希望設(shè)計一個選舉方案,使得大部分節(jié)點都有資格參與到區(qū)塊生產(chǎn)中,而不是只有頭部的少數(shù)節(jié)點進行區(qū)塊生產(chǎn)。但是,被投Token*越多的節(jié)點仍然擁有更大的機會生產(chǎn)區(qū)塊。
*被投Token:在IOST網(wǎng)絡(luò)中,社區(qū)成員通過抵押Token獲得投票權(quán)。目前版本中,1Token=1票。
為了達到這個目的,我們并不直接采用投票結(jié)果作為選舉結(jié)果,而是引入了一個積分體系——Servi來決定委員會成員。
成為備選節(jié)點
出于對網(wǎng)絡(luò)安全的基本保證,PoB中對于區(qū)塊生產(chǎn)者依然設(shè)有一個基本門檻。在目前版本中,只要獲得超過全網(wǎng)0.1%的Token投票,就可以向區(qū)塊鏈網(wǎng)絡(luò)發(fā)送一筆特定交易并成為備選節(jié)點,參與區(qū)塊生產(chǎn)委員會的競選。
Servi獲取與選舉
雖然投票結(jié)果并不直接決定委員會成員,但是備選節(jié)點的Servi獲取速率與投票結(jié)果是成正比的。
在目前版本中,每屆委員會我們將選出17名委員會成員,每輪選舉分為三步:
1. 社區(qū)成員抵押Token并投票,備選節(jié)點會得到與被投Token等量的Servi。
2. Servi值前17名的備選節(jié)點被選為這輪的委員會成員,負責(zé)下一個時間周期的區(qū)塊生產(chǎn)。
3. 所有入選委員會的17個節(jié)點,最后一名的Servi值清零,其他節(jié)點扣除等量的Servi值。
在目前版本中,選舉的時間周期為10分鐘,也就是說在IOST網(wǎng)絡(luò)中,每10分鐘委員會就會進行一次換屆。
樣例
假設(shè)現(xiàn)在我們的規(guī)則是從5個備選節(jié)點選出3個進入委員會,5個備選節(jié)點A、B、C、D、E當前獲得的票數(shù)從高到低分別為10、8、5、4、1,假設(shè)他們的票數(shù)在這段時間內(nèi)保持不變。
在第一輪選舉中,5個備選節(jié)點的Servi值分別為A(10)、B(8)、C(5)、D(4)、E(1)(接下來用[10, 8, 5, 4, 1]表示)。這時A、B、C的Servi值最高,成為委員會成員,同時他們都被扣除排名末位的C的Servi值,即本屆委員會的最低Servi值——5。D、E的Servi值保持不變,Servi值情況變?yōu)椋?, 3, 0, 4, 1]。
在第二輪選舉中,Servi值在第一輪結(jié)束([5, 3, 0, 4, 1])的基礎(chǔ)上再次加上這些節(jié)點當前的獲投票數(shù)([10, 8, 5, 4, 1]),變?yōu)椋?5, 11, 5, 8, 2]。這時A、B、D成為Servi值最高的備選節(jié)點,所以這屆委員會成員為A、B、D,同時A、B、D都被扣除D的Servi值——8,Servi值情況變?yōu)椋?, 3, 5, 0, 2]。
在第三輪選舉中,Servi值情況變?yōu)椋?7, 11, 10, 4, 3],這時又是A、B、C組成委員會。
在第九輪選舉中,Servi值情況分別為[26, 8, 5, 12, 9],只獲得1票的備選節(jié)點E會第一次入選委員會,委員會成員為A、D、E。
其他細節(jié)
1. 如果有多個備選節(jié)點的Servi值并列第17名,會優(yōu)先選擇更早成為備選節(jié)點的節(jié)點,實際運行中這種情況會很少見。
2. 在完成選舉之后,我們選用委員會成員輪流生產(chǎn)區(qū)塊的方案,也就是在一個時間周期內(nèi)無論委員會成員的Servi值多少,生產(chǎn)區(qū)塊的權(quán)利相等,對所有入選成員都是公平的。
3. 顯然,在大部分情況下,獲投票數(shù)排名第一位的節(jié)點總是會被選入委員會。為此我們設(shè)置了一個Servi值上限,Servi值不能超過被投Token數(shù)的10倍。
4. 備選節(jié)點需要在每6個選舉周期(也就是1小時)內(nèi)發(fā)送一筆特定的驗證交易證明節(jié)點在線,如果沒有,那么他將失去所有獲投票數(shù)并失去備選節(jié)點資格。
5. 如果委員會成員在一個時間周期內(nèi)沒有生產(chǎn)區(qū)塊,那么同樣,他將失去所有獲投票數(shù)并失去備選節(jié)點資格。
6. 投票所用的Token需要7天才能贖回,一個備選節(jié)點失去資格時也一樣,也就意味著發(fā)生以上兩種情況的節(jié)點無法很容易地馬上再次參選。
結(jié)論
我們通過引入一個積分體系——Servi來完成更去中心化的選舉,并且最終節(jié)點生產(chǎn)區(qū)塊數(shù)量的比例會接近于獲投票數(shù)的比例。同時由于它還是一個選舉方案,因此擁有較高的可擴展性。