如何用 CITA 實現一個類 DPoS 的高效能區塊鏈

買賣虛擬貨幣
導讀: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 實現更多創新的落地場景。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;