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