DPOS

1. ?概要

具體DPOS的算法請(qǐng)參考:

https://www.leiphone.com/news/201706/JfsBmaf6Y0ZtV11R.html

白皮書DPOS部分:https://blog.csdn.net/lsttoy/article/details/80041033?

本文不描述DPOS的理論,網(wǎng)絡(luò)已經(jīng)很多了

? ? ? ? 引用BM的話,任何共識(shí)算法都應(yīng)該考慮以下幾個(gè)問題:

1. ?區(qū)塊應(yīng)該由誰來生成:選舉產(chǎn)生,基于stake的大小產(chǎn)生

2. ?區(qū)塊何時(shí)生成:區(qū)塊生成的時(shí)間和間隔

3. ?區(qū)塊應(yīng)該包含哪些交易:智能合約、交易、消息交互等

4. ?競(jìng)爭(zhēng)的交易歷史應(yīng)該如何解決:分叉如何解決,涉及到活性和一致性的權(quán)衡,一般使用最長(zhǎng)鏈原則。

? ? ? ? 在這些的基礎(chǔ)上增加一條區(qū)塊的確定性:確定性在POW中是永遠(yuǎn)都不會(huì)實(shí)現(xiàn)的,因?yàn)镻OW的記賬者原則上是所有全節(jié)點(diǎn)都可能是,所以只會(huì)無限接近,一般認(rèn)為6個(gè)塊后確定。對(duì)于DPOS,認(rèn)為選舉出的一輪記賬者中,2/3的記賬者認(rèn)同即可確定,區(qū)塊會(huì)認(rèn)為是不可逆的區(qū)塊(最終會(huì)寫到chain下得last_irreversible_block_num中并寫入數(shù)據(jù)庫)。DPOS現(xiàn)在的版本都是等待2/3的記賬者出塊之后確定,后面的Realtime -BFT,即在出塊之后,通知其他記賬者,超過2/3的記賬者認(rèn)同簽名后,記錄該塊為不可逆塊還沒有實(shí)現(xiàn)。

下面描述記賬者的選舉過程:

1. ?抵押獲取投票權(quán)限

在EOS系統(tǒng)中,抵押token以獲取對(duì)應(yīng)比例的band、ram等資源和投票的權(quán)力,需要將token轉(zhuǎn)到合約賬戶'eosio.stake'下,釋放資源后,失去投票權(quán)利,token贖回。

命令行

delegate_bandwidth_subcommand

undelegate_bandwidth_subcommand

delegatebw && undelegatebw

輸入:賬戶、數(shù)額

流程:


2. 記賬者候選人

流程分為注冊(cè)和注銷。

producer注冊(cè):

命令行實(shí)現(xiàn):register_producer_subcommand

? ? ? ? ? ? ? ? ? ? ? ? ?regproducer

輸入:賬戶名、key、url(producer網(wǎng)站)、location(每個(gè)國(guó)家一個(gè)數(shù)字編碼,參考https://eosportal.io/chain/12/producers ,也可以參考移動(dòng)編碼的MCC,例如中國(guó)86)

流程:



producer 的注銷:

命令行:unregister_producer_subcommand

? ? ? ? ? ? ? ? ?unregprod

輸入:賬戶名

流程:查找用戶,并刪除

輸出:void


3. 委托

注冊(cè)和注銷為proxy,可以全權(quán)代理被代理者的投票權(quán),被代理人的投票權(quán)利被收回。

命令行:regproxy_subcommand

? ? ? ? ? ? ? ? ?regproxy

輸入:賬戶名、動(dòng)作:注冊(cè)還是注銷

流程



4. 投票選舉

命令行實(shí)現(xiàn):

? ? ? ? ? ? vote_producer_proxy_subcommand

? ? ? ? ? ? vote_producers_subcommand

? ? ? ? ? ? approve_producer_subcommand

? ? ? ? ? ? unapprove_producer_subcommand

Voteproducer

輸入:本人賬戶名、proxy的賬戶名、候選人列表(最多30人)

流程: 不考慮proxy的情況


輸出:void

?? ? ? ? ? 其中,每個(gè)候選人都獲取相同數(shù)量的投票,最多投30人。

EOSIODawn 4.0 里面一個(gè)重要的改進(jìn)是投票權(quán)的衰減機(jī)制,每位voter每周必須重新投票,否則會(huì)權(quán)重會(huì)衰減,衰減頻率是一周,半衰期是一年,所謂的衰減是指,現(xiàn)在重新計(jì)算的權(quán)重比之前要大,之前的權(quán)重并沒有改變。?

5.?定時(shí)更新生產(chǎn)者信息

EOS 的出塊時(shí)間是500ms一個(gè),所以利用這個(gè)時(shí)間特性實(shí)現(xiàn)了定時(shí)器的功能,收到120個(gè)出塊消息,即一分鐘觸發(fā)一次計(jì)票統(tǒng)計(jì)(因?yàn)?1個(gè)生產(chǎn)者,每人3s,如果是15個(gè)生產(chǎn)者,就應(yīng)該是42s),調(diào)用set_proposed_producers接口將在線的生產(chǎn)者列表和要寫入的區(qū)塊號(hào)保留下來,在出塊的時(shí)候調(diào)用set_new_producers接口寫到header中。

update_elected_producers

輸入:block_time

流程:



6. 編排出塊者順序

在注冊(cè)producer的時(shí)候,用戶需要寫入location,在定時(shí)更新生產(chǎn)者信息的時(shí)候,會(huì)按照location排序,達(dá)到編排的目的。

7.?惡意記賬者的懲罰:

在Casper中需要在投票選擇分叉的時(shí)候需要將token抵押,防止Byzantine user 作惡,對(duì)于EOS而言,所有的懲罰措施都體現(xiàn)在投票上,即下一輪會(huì)被選舉出局,投票抵押的token沒有罰沒機(jī)制,只是會(huì)延遲3天后返還。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 共識(shí)算法DPOS EOS.IO系統(tǒng)利用唯一的分布式共識(shí)算法DPOS(Delegated Proof of Stak...
    冰茶solo閱讀 1,084評(píng)論 0 0
  • 原文:https://steemit.com/dpos/@dantheman/dpos-consensus-alg...
    liuchengxu閱讀 1,885評(píng)論 0 2
  • 今日打卡1:共計(jì)56分鐘 人類從一個(gè)辛苦、緩慢的從事多種勞動(dòng)的單位,變成一個(gè)靠專業(yè)化的單一生產(chǎn)活動(dòng)償付便捷、快速、...
    吟_f3da閱讀 163評(píng)論 0 0
  • 沒錯(cuò),說的就是前幾天完結(jié)的番劇—《Re:TALKERS》,一部戰(zhàn)斗番,一部一半用嘴炮戰(zhàn)斗的番。 1.高燃的...
    吳吳吳吳吳平凡閱讀 6,604評(píng)論 0 3
  • 一直以來我都沒有喜歡的愛豆,沒有特別喜歡的現(xiàn)代作家。 沒有去過很多城市,沒有看過很多書。 你所謂的穩(wěn)定只不過是浪費(fèi)...
    海棠樹子閱讀 442評(píng)論 0 2

友情鏈接更多精彩內(nèi)容