EOS 最新的白皮書中已經(jīng)將共識機(jī)制從 DPoS 升級為了 BFT-DPoS(Byzantine Fault Tolerance - Deligated Proof of Stake,帶有拜占庭容錯(cuò)的委托股權(quán)證明)。
傳統(tǒng) DPoS EOS 項(xiàng)目剛剛發(fā)布的時(shí)候的共識機(jī)制是 DPoS(Deligated Proof of Stake,委托股權(quán)證明),類似于 Bitshares 和 Steem,這種共識機(jī)制采用隨機(jī)的見證人出塊順序,出塊速度為 3 秒,交易不可逆需要45秒。為什么需要 45 秒呢?因?yàn)?DPoS 下,見證人生產(chǎn)一個(gè)新區(qū)塊,才表示他對之前的整條區(qū)塊鏈進(jìn)行了確認(rèn),表明這個(gè)見證人認(rèn)可目前的整條鏈。而一個(gè)交易要達(dá)到不可逆狀態(tài),需要 2/3 以上的見證人確認(rèn),在 EOS 里就是 14 個(gè)見證人。我們假設(shè)一個(gè)交易被包含在 1000 號區(qū)塊中,需要其他13個(gè)見證人輪流出塊至 1013 號區(qū)塊,這樣才能“收集”到14個(gè)見證人對此交易的確認(rèn)(包括生產(chǎn)1000區(qū)塊的見證人)。2/3 以上的見證人確認(rèn)的交易,就是不可逆的交易了,這就是 45 秒確認(rèn)時(shí)間的由來。
BFT的全稱是Byzantine fault tolerance,即拜占庭容錯(cuò)。是解決拜占庭將軍問題中,當(dāng)存在叛徒時(shí),叛徒用盡了各種手段來破壞時(shí),將軍們?nèi)匀荒軌蜻_(dá)成達(dá)成共識。所以叫拜占庭容錯(cuò),容錯(cuò)的意思就是容納節(jié)點(diǎn)出現(xiàn)錯(cuò)誤(或者叛徒),網(wǎng)絡(luò)仍然能達(dá)成一致的行動(dòng),正常運(yùn)作。 在新的機(jī)制下,每個(gè)見證人出塊時(shí)依然全網(wǎng)廣播,其他見證人收到新區(qū)塊后,立即對此區(qū)塊進(jìn)行驗(yàn)證,并將驗(yàn)證簽名完成的區(qū)塊立即返回出塊見證人,不需等待其他見證人自己出塊時(shí)再確認(rèn)。從當(dāng)前的出塊見證人看來,他生產(chǎn)了一個(gè)區(qū)塊,并全網(wǎng)廣播,然后陸續(xù)收到了其他見證人對此區(qū)塊的確認(rèn),在收到 2/3 見證人確認(rèn)的瞬間,區(qū)塊(包括其中的交易)就不可逆了。交易確認(rèn)時(shí)間大大縮短,從 45 秒縮短至 3 秒左右(主要為等待生產(chǎn)區(qū)塊的時(shí)間)。這種機(jī)制可以稱為初級版的 BFT-DPoS 共識機(jī)制。
BFT-DPoS 為了挖掘 EOS 系統(tǒng)的性能,Daniel Larimer 在以上基礎(chǔ)上又進(jìn)行了修改。首先,他將出塊速度由 3 秒 縮短至 0.5 秒,理論上這樣可以極大提升系統(tǒng)性能,但帶來了網(wǎng)絡(luò)延遲問題:0.5 秒的確認(rèn)時(shí)間會(huì)導(dǎo)致下一個(gè)出塊者還沒有收到上一個(gè)出塊者的區(qū)塊,就該生產(chǎn)下一個(gè)區(qū)塊了,那么下一個(gè)出塊者會(huì)忽略上一個(gè)區(qū)塊,導(dǎo)致區(qū)塊鏈分叉(相同區(qū)塊高度有兩個(gè)區(qū)塊)。比如:中國見證人后面可能就是美國見證人,中美網(wǎng)絡(luò)延遲有時(shí)高達(dá) 300ms,很有可能到時(shí)美國見證人沒有收到中國見證人的區(qū)塊時(shí),就該出塊了,那么中國見證人的區(qū)塊就會(huì)被略過。 為解決這個(gè)問題,Daniel Larimer 將原先的隨機(jī)出塊順序改為由見證人商議后確定的出塊順序,這樣網(wǎng)絡(luò)連接延遲較低的見證人之間就可以相鄰出塊。比如:日本的見證人后面是中國的見證人,再后面是俄羅斯的見證人,再后面是英國的見證人,再后面是美國的見證人。這樣可以大大降低見證人之間的網(wǎng)絡(luò)延遲。使得 0.5 秒的出塊速度有了理論上的可能。 為了保證萬無一失,不讓任何一個(gè)見證人因?yàn)榫W(wǎng)絡(luò)延遲的意外而被跳過,Daniel Larimer 讓每個(gè)見證人連續(xù)生產(chǎn) 6 個(gè)區(qū)塊,也就是每個(gè)見證人還是負(fù)責(zé) 3 秒的區(qū)塊生產(chǎn),但是由最初的只生產(chǎn) 1 個(gè)變成生產(chǎn) 6 個(gè)。最惡劣的情況下,6 個(gè)區(qū)塊中,最后一個(gè)或兩個(gè)有可能因?yàn)榫W(wǎng)絡(luò)延遲或其他意外被下一個(gè)見證人略過,但 6 個(gè)區(qū)塊中的前幾個(gè)會(huì)有足夠的時(shí)間傳遞給下一個(gè)見證人。 再來討論 BFT-DPoS 的交易確認(rèn)時(shí)間問題:每個(gè)區(qū)塊生產(chǎn)后立即進(jìn)行全網(wǎng)廣播,區(qū)塊生產(chǎn)者一邊等待 0.5 秒生產(chǎn)下一個(gè)區(qū)塊,同時(shí)會(huì)接收其他見證人對于上一個(gè)區(qū)塊的確認(rèn)結(jié)果。新區(qū)塊的生產(chǎn)和舊區(qū)塊確認(rèn)的接收同時(shí)進(jìn)行。大部分的情況下,交易會(huì)在 1 秒之內(nèi)確認(rèn)(不可逆)。這其中包括了 0.5 秒的區(qū)塊生產(chǎn),和要求其他見證人確認(rèn)的時(shí)間。
來源:http://www./content-4-164551.html
|