導(dǎo)讀:Nervos Network通過分層的設(shè)計(jì)來解決區(qū)塊鏈的不可能三角,Layer 1主要關(guān)注安全,Layer 2關(guān)注性能。作為Nervos Network的Layer 2,讓
導(dǎo)讀:Nervos Network通過分層的設(shè)計(jì)來解決區(qū)塊鏈的“不可能三角”,Layer 1主要關(guān)注安全,Layer 2關(guān)注性能。作為Nervos Network的Layer 2,讓我們來看看如何用CITA實(shí)現(xiàn)一個(gè)DPoS的高性能區(qū)塊鏈。
早期的 CITA 是針對(duì)聯(lián)盟鏈進(jìn)行場(chǎng)景優(yōu)化的。目前的 CITA 是一個(gè)通用的區(qū)塊鏈框架,其設(shè)計(jì)目標(biāo)是可以靈活實(shí)現(xiàn)各種類型的區(qū)塊鏈。CITA 默認(rèn)的配置是 BFT 共識(shí) + EVM 虛擬機(jī),同時(shí)編程框架支持微服務(wù)可替換。例如,CITAHub 社區(qū)的小伙伴們通過底層修改實(shí)現(xiàn)了 POA 和 WASM 虛擬機(jī)等功能。不過利用 CITA 強(qiáng)大的合約功能可以更簡單地實(shí)現(xiàn)記賬機(jī)制的定制化。本文中,我們將介紹如何不修改底層代碼,僅在合約層定制實(shí)現(xiàn)一個(gè)類 DPoS 的高性能公鏈。
以 EOS 為代表的 DPoS 公鏈通常采用代理選舉候選節(jié)點(diǎn)、節(jié)點(diǎn)上任、定期更新記賬節(jié)點(diǎn)的方式實(shí)現(xiàn)記賬節(jié)點(diǎn)的民主化更替。對(duì)應(yīng)地,CITA 也需要實(shí)現(xiàn)選舉合約、共識(shí)節(jié)點(diǎn)治理、節(jié)點(diǎn)分類激勵(lì)以及共識(shí)節(jié)點(diǎn)出塊比例管理等功能。
選舉合約
節(jié)點(diǎn)選舉合約是一個(gè)標(biāo)準(zhǔn)的鏈上智能合約,負(fù)責(zé)節(jié)點(diǎn)注冊(cè)、收集用戶的投票并輸出選舉結(jié)果到節(jié)點(diǎn)管理合約。不同的社區(qū)可能會(huì)對(duì)節(jié)點(diǎn)選舉具有不同的要求,所以這里的投票方案非常靈活。既可以使用系統(tǒng)代幣投票,也可以指定某個(gè) ERC20 的代幣投票,也可以按賬號(hào)投票等等。例如,在偏公鏈的場(chǎng)景下,節(jié)點(diǎn)需要抵押代幣,用戶使用代幣進(jìn)行投票對(duì)節(jié)點(diǎn)進(jìn)行支持;而在一個(gè)存在實(shí)名認(rèn)證服務(wù)的場(chǎng)景下,節(jié)點(diǎn)可能需要獲得盡可能多的實(shí)名用戶的支持。
選舉合約應(yīng)該能夠周期性地輸出得票最多的若干個(gè)節(jié)點(diǎn)到節(jié)點(diǎn)管理合約,同時(shí)能夠給出得票次之的候選節(jié)點(diǎn),他們可以同時(shí)獲得系統(tǒng)激勵(lì)合約的激勵(lì)。
節(jié)點(diǎn)管理合約
CITA 的節(jié)點(diǎn)管理合約( https://docs.citahub.com/zh-CN/cita/system/node)具備兩個(gè)重要的系統(tǒng)功能:增刪共識(shí)節(jié)點(diǎn)、調(diào)整節(jié)點(diǎn)的出塊權(quán)重。這兩個(gè)功能是我們實(shí)現(xiàn)一個(gè)“類 DPoS”共識(shí)的高性能區(qū)塊鏈的核心。節(jié)點(diǎn)管理合約只能由系統(tǒng)超級(jí)管理員權(quán)限的賬號(hào)發(fā)起調(diào)用,我們可以將前面的選舉合約設(shè)置為系統(tǒng)超級(jí)管理員權(quán)限,并允許它調(diào)用節(jié)點(diǎn)管理合約。具體方法可以參考 CITA 治理機(jī)制的定制化設(shè)計(jì)代碼( https://github.com/cryptape/appchain-gov-general)。這樣,選舉合約給出的記賬節(jié)點(diǎn)上任信息就可以直接轉(zhuǎn)化為節(jié)點(diǎn)管理合約的輸入,實(shí)現(xiàn)記賬節(jié)點(diǎn)的無縫更替。
此外,節(jié)點(diǎn)管理合約還可以接收記賬節(jié)點(diǎn)的權(quán)重參數(shù),實(shí)現(xiàn)不同的記賬節(jié)點(diǎn)由于得票占比不同,出塊比例不同的功能。不同的出塊比例意味著后續(xù)出塊的激勵(lì)不同、記賬話語權(quán)不同,從而實(shí)現(xiàn)類似 DPoS 的效果。
需要指出的是,這種模式下 CITA 的每一輪投票仍然是采取 BFT 的每個(gè)節(jié)點(diǎn)一票方式,記賬權(quán)重體現(xiàn)在長期(例如1000個(gè)塊)不同記賬權(quán)重的節(jié)點(diǎn)出塊的數(shù)量比例不同,并非 EOS 等區(qū)塊鏈的 DPoS 共識(shí)中不同權(quán)重的節(jié)點(diǎn) BFT 投票權(quán)重不同。當(dāng)然,作為區(qū)塊鏈框架,CITA 也可以通過修改底層的方式實(shí)現(xiàn)相同的功能,有興趣的開發(fā)者可以提 issue 實(shí)現(xiàn)。
激勵(lì)合約
獲得記賬權(quán)的節(jié)點(diǎn)以及暫未獲得記賬權(quán)但獲得足夠多的投票的候選節(jié)點(diǎn)按照社區(qū)同行的規(guī)則可以獲得出塊獎(jiǎng)勵(lì)或分紅。CITA 采用了“系統(tǒng)自動(dòng)執(zhí)行合約”的機(jī)制,可以實(shí)現(xiàn)每區(qū)塊自動(dòng)執(zhí)行一個(gè)代幣分發(fā)合約( https://docs.citahub.com/zh-CN/cita/system-contract-interface/auto-exec[3] 3 ),從而為記賬節(jié)點(diǎn)和候選節(jié)點(diǎn)分發(fā)獎(jiǎng)勵(lì)。
運(yùn)營方可以在創(chuàng)世塊創(chuàng)建足夠多的系統(tǒng)代幣,鎖定到一個(gè)激勵(lì)合約,并在激勵(lì)合約中編寫按照選舉合約結(jié)果分發(fā)出塊獎(jiǎng)勵(lì)的命令。具體命令可以是類似每區(qū)塊將預(yù)定代幣的 40% 分配給當(dāng)前記賬節(jié)點(diǎn),并將 40% 平均分給在任的記賬節(jié)點(diǎn),剩余 20% 平均分配給候選節(jié)點(diǎn)。當(dāng)然,類似的方案完全由社區(qū)決定,并可以通過投票隨時(shí)修改。
結(jié)論
不同的社區(qū)、不同的行業(yè)領(lǐng)域絕不可能千篇一律,必須有不同的協(xié)作模式。如果每種模式都需要修改底層協(xié)議,編寫底層代碼,那么其開發(fā)難度是不可想象的。CITA 靈活的框架結(jié)構(gòu)以及治理和經(jīng)濟(jì)模型可以實(shí)現(xiàn)非常適合特定社區(qū)的記賬、激勵(lì)模式。期待開發(fā)者利用 CITA 實(shí)現(xiàn)更多創(chuàng)新的落地場(chǎng)景。