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