日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

eos源码赏析(七):EOS智能合约入门之共识机制初探

發(fā)布時(shí)間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 eos源码赏析(七):EOS智能合约入门之共识机制初探 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

????????從丐幫幫主及丐幫長(zhǎng)老的選舉說起。

????????金庸小說中塑造了眾多丐幫幫主的形象,如汪劍通、蕭峰、洪七公、黃蓉、魯有腳、耶律齊、史火龍等。這些幫主在未當(dāng)選幫主之前大都是丐幫中普普通通的一員,后來經(jīng)過投票選舉---也就是吐唾沫的方式當(dāng)上了幫主。這和現(xiàn)在eos的各大BP的競(jìng)選類似,eos的持有者可以通過投票的方式或者代理投票的方式選擇自己意向中的BP,今天我們就從選舉和投票的角度來談?wù)勜蛶椭鬟x舉,來談?wù)別os的投票機(jī)制以及對(duì)共識(shí)的理解。



????????關(guān)于共識(shí)的理解準(zhǔn)備分兩篇來解讀,本篇只針對(duì)在eos中使用到的共識(shí)機(jī)制做簡(jiǎn)單的分析,在接下來的文章中會(huì)結(jié)合eos源碼來解讀BFT-DPoS共識(shí)機(jī)制。說道BFT-DPoS我們就要從Pos機(jī)制和DPos機(jī)制說起,文章文字較多,代碼較少,請(qǐng)謹(jǐn)慎閱讀:

????????那么什么是PoS呢?

????????PoS:Proof ?of ?Stake,也稱股權(quán)證明,類似于財(cái)產(chǎn)儲(chǔ)存在銀行,這種模式會(huì)根據(jù)你持有數(shù)字貨幣的量和時(shí)間,分配給你相應(yīng)的利息。通俗的講,有個(gè)丐幫弟子名為白世鏡,曾是丐幫八袋弟子,他持有這八個(gè)袋子已經(jīng)五年了,要知道這些在丐幫都是資歷的證明。有一天,白世鏡給丐幫立功了,再加上他在丐幫的資歷,幫主就提拔他做了九袋弟子并擢升為執(zhí)法長(zhǎng)老。這就是Pos機(jī)制,一個(gè)丐幫弟子持有的袋子越多,持有的時(shí)間越長(zhǎng)就越有可能上升到丐幫的長(zhǎng)老位。



????????那么什么又是DPoS呢?

????????DPoS:Deligated Proof of Stake,也稱委托股權(quán)證明,eos使用了DPoS的機(jī)制,在eos的白皮書中對(duì)eos為何使用DPoS進(jìn)行了詳盡的解釋,簡(jiǎn)單摘錄如下:

EOS.IO軟件架構(gòu)中采用目前為止唯一能夠復(fù)合上述性能要求的區(qū)塊鏈共識(shí)算(DPoS)。根據(jù)這種算法,全網(wǎng)持有代幣的人可以通過投票系統(tǒng)來選擇區(qū)塊生產(chǎn)者,一旦當(dāng)選任何人都可以參與區(qū)塊的生產(chǎn)。

EOS.IO里預(yù)計(jì)每3秒生產(chǎn)一個(gè)區(qū)塊。任何時(shí)刻,只有一個(gè)生產(chǎn)者被授權(quán)產(chǎn)生區(qū)塊。如果在某個(gè)時(shí)間內(nèi)沒有成功出塊,則跳過該塊。

EOS.IO架構(gòu)中區(qū)塊產(chǎn)生是以21個(gè)區(qū)塊為一個(gè)周期。在每個(gè)出塊周期開始時(shí),21個(gè)區(qū)塊生產(chǎn)者會(huì)被投票選出。前20名出塊者首選自動(dòng)選出,第21個(gè)出塊者按所得投票數(shù)目對(duì)應(yīng)概率選出。所選擇的生產(chǎn)者會(huì)根據(jù)從塊時(shí)間導(dǎo)出的偽隨機(jī)數(shù)進(jìn)行混合。以便保證出塊者之間的連接盡量平衡。

如果出塊者錯(cuò)過了一個(gè)塊,并且在最近24小時(shí)內(nèi)沒有產(chǎn)生任何塊,則這個(gè)出塊者將被刪除。這確保了網(wǎng)絡(luò)的順利運(yùn)行。

在正常情況下,DPOS塊鏈不會(huì)經(jīng)歷任何叉,因?yàn)閴K生產(chǎn)者合作生產(chǎn)區(qū)塊而不是競(jìng)爭(zhēng)。如果有區(qū)塊分叉,共識(shí)將自動(dòng)切換到最長(zhǎng)的鏈條。具有更多生產(chǎn)者的區(qū)塊鏈長(zhǎng)度將比具有較少生產(chǎn)者的區(qū)塊鏈增長(zhǎng)速度更快。此外,沒有塊生產(chǎn)者應(yīng)該同時(shí)在兩個(gè)區(qū)塊鏈分叉上生產(chǎn)塊。如果一個(gè)塊生產(chǎn)者發(fā)現(xiàn)這么做了,就可能被投票出局。


????????仍舊以白世鏡為例,白世鏡和其他二十位長(zhǎng)老共二十一位長(zhǎng)老被吐唾沫選舉出來來維持整個(gè)丐幫的發(fā)展,這就是DPoS的投票機(jī)制,通過持有的布袋投票出自己意向中的丐幫長(zhǎng)老。有一天丐幫需要修改幫規(guī)的第三十二條:若要當(dāng)選丐幫幫主必須接受幫內(nèi)弟子的唾沫洗禮。如何才能修改成功呢,需要這二十一位長(zhǎng)老中的2/3以上的人同意修改才可以,也就是十五位或者十五位以上的長(zhǎng)老簽了字,下一任幫主任職的時(shí)候才能免去唾沫的洗禮,這就是DPoS的可以根據(jù)協(xié)議修改共識(shí)參數(shù)的功能。

????????那么如果在修改幫規(guī)的那一天這二十一位中的其中一位因?yàn)椴辉趫?chǎng)這個(gè)幫規(guī)還能修改成功么?當(dāng)然可以,這就是我們所說的委托股權(quán)證明,比如護(hù)幫長(zhǎng)老被西夏一品堂的人糾纏而不能親臨幫規(guī)修改現(xiàn)場(chǎng),那么他可以把自己的權(quán)利委托給傳功長(zhǎng)老,讓他替自己行使權(quán)利,從而完成幫規(guī)的修改,這就是DPoS的股權(quán)委托證明機(jī)制。

????????當(dāng)然,當(dāng)上了長(zhǎng)老就一勞永逸了么?并不是,拿白世鏡來說由于他和康敏之間不得不說的關(guān)系被丐幫弟子發(fā)現(xiàn)之后,群丐不再支持他做丐幫長(zhǎng)老,因此他就會(huì)被從丐幫長(zhǎng)老的位置上除名,這就是DPoS的不作為淘汰機(jī)制。

????????前些天如火如荼的超級(jí)節(jié)點(diǎn)競(jìng)選亦是如此,持有的eos大都凍結(jié)在交易所里,而各大交易所紛紛聲明自己要參與超級(jí)節(jié)點(diǎn)競(jìng)選的投票,其實(shí)他們這些交易所拿的都是eos持有者的權(quán)益去投票的。因?yàn)閹艃鼋Y(jié)了,相當(dāng)于eos的持有者將投票權(quán)委托給交易所進(jìn)行了投票。這

些超級(jí)節(jié)點(diǎn)如果沒能正確履行自己的權(quán)利和義務(wù),eos的持有者將不再投票支持他們,他們也將從超級(jí)節(jié)點(diǎn)除名,從而產(chǎn)生下一個(gè)新的超級(jí)節(jié)點(diǎn)。

????????那么什么又是BFT-DPoS

????????BFT-DPoS: Byzantine Fault Tolerance- Deligated Proof of Stake,又稱具有拜占庭容錯(cuò)機(jī)制的DPoS。

????????仍舊以丐幫眾位長(zhǎng)老為例,幫主選舉之前需要以眾位長(zhǎng)老的的意見統(tǒng)一才可實(shí)現(xiàn)。于是執(zhí)法長(zhǎng)老白世鏡選出自己意向中的幫主--蕭峰并寫在紙條上傳給傳功長(zhǎng)老,傳功長(zhǎng)老如果同意執(zhí)法長(zhǎng)老的意見則確認(rèn)之后傳遞給護(hù)幫長(zhǎng)老,如果不同意執(zhí)法長(zhǎng)老的意見,則寫出自己意向中的長(zhǎng)老,就這樣依次傳遞下去直到二十一位長(zhǎng)老全部傳遞完,如果有超出2/3以上的長(zhǎng)老同意蕭峰當(dāng)幫主,則蕭峰就可以上任丐幫幫主了。假設(shè)兩位長(zhǎng)老之間傳遞紙條的時(shí)間為3s一次,那么要完成2/3以上的長(zhǎng)老確認(rèn)就至少需要15*3=45s的時(shí)間。

????????有沒有什么更好的辦法呢來縮短這個(gè)幫主選舉確認(rèn)的時(shí)間呢?在eos的最新版本中采用了BFT-DPoS的機(jī)制,即在其中一個(gè)節(jié)點(diǎn)產(chǎn)生區(qū)塊的時(shí)候就通知其他節(jié)點(diǎn)來確認(rèn)這個(gè)區(qū)塊的產(chǎn)生,也就是說當(dāng)白世鏡在紙條上寫下蕭峰的名字的同時(shí)就大吼一聲,讓其他的長(zhǎng)老再他寫下名字的同時(shí)就來確認(rèn)丐幫幫主的人選。接下去傳功長(zhǎng)老也寫下一個(gè)名字并喊其他長(zhǎng)老來確認(rèn),這樣一來,只需要3s便可確認(rèn)一個(gè)區(qū)塊的產(chǎn)生,也就是幫主人選的確認(rèn)。

????????這種產(chǎn)生區(qū)塊就廣播出去并讓其他節(jié)點(diǎn)完成簽名確認(rèn)的過程便稱之為BFT-DPoS。但是問題也隨之而來,我們有過部署nodeos節(jié)點(diǎn)經(jīng)驗(yàn)的小伙伴們都知道,在eos中產(chǎn)生塊的速度為500ms,那么這個(gè)會(huì)不會(huì)因?yàn)闀r(shí)間太短導(dǎo)致別的節(jié)點(diǎn)還沒有簽名確認(rèn)結(jié)束就輪到下一個(gè)區(qū)塊生產(chǎn)者產(chǎn)生區(qū)塊呢?就比如白世鏡長(zhǎng)老寫了一個(gè)名字在紙條上吼了一聲之后等其他長(zhǎng)老來確認(rèn),但是其中一個(gè)長(zhǎng)老年邁,走不快了,還沒來得及確認(rèn),就輪到傳功長(zhǎng)老寫紙條了。這樣就導(dǎo)致了紙條傳遞的延時(shí),在eos鏈上就體現(xiàn)為網(wǎng)絡(luò)延時(shí)同時(shí)產(chǎn)生分叉,如何解決網(wǎng)絡(luò)延時(shí)及分叉這個(gè)問題呢?BM團(tuán)隊(duì)放棄了原來按隨機(jī)順序出塊的設(shè)計(jì),改用記賬人相互協(xié)商后確定的順序。這樣就能保證網(wǎng)絡(luò)延遲較低的記賬人之間能以相鄰的順序出塊。

????????具體eos出塊的規(guī)則及BFT-DPoS共識(shí)機(jī)制在源碼中的體現(xiàn),會(huì)在下一篇文章中結(jié)合著源碼進(jìn)行解讀。

長(zhǎng)按以下二維碼,關(guān)注本公眾號(hào),一起學(xué)習(xí)eos開發(fā).


? ? 微信公眾號(hào)

? ? ? ? ?有任何疑問或者指教請(qǐng)?zhí)砑颖救藗€(gè)人公眾號(hào),當(dāng)然有對(duì)eos開發(fā)感興趣或者金庸粉的也可以添加,備注eos開發(fā)或金庸,拉你進(jìn)群一起交流



? ? ? ? ? ?個(gè)人微信帳號(hào)

總結(jié)

以上是生活随笔為你收集整理的eos源码赏析(七):EOS智能合约入门之共识机制初探的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。