P2P協議告訴你「狀態根如何實現?」

買賣虛擬貨幣
今天,我們將分享一個當前正在開發的方案——透過P2P訊息傳播的狀態分佈,看看狀態根原理是如何在Neo3環境下執行的。
網路協議Neo網路上的共識節點和普通節點都以P2P的方式連線。每個節點都與網路上的其他節點有多個連線,以確保新資訊的快速傳播。節點間的通訊是以訊息的形式實現的,每個訊息都攜帶一個指令和需要處理的負載資料。訊息可以是對區塊鏈資料的查詢請求,例如最新的區塊資訊,也可以是攜帶了高優先順序的資訊,例如共識資料。由於網路上的所有節點都會不停地監聽傳入的P2P訊息,P2P網路是將一個達成共識的狀態進行分佈化的理想場所。這種方法最初由Igor Coelho提出:
“我認為較好的方法是透過P2P訊息推送狀態雜湊,並由共識節點進行簽名,這樣節點仍可以跟蹤“正式的”狀態,而不必將它們永遠鎖定在區塊鏈上。”解耦狀態與區塊頭方法不同的是,透過P2P網路進行狀態分佈化意味著達成共識的全域性狀態永遠都不會上鍊。這樣可以將狀態從區塊中解耦,透過為潛在的效能改進預留空間來滿足最初的提案目標。此外,由於狀態永遠不會在鏈上提交,因此依舊可以部署那些會影響狀態的Bug修復程式碼,而不會引入與區塊資料的衝突。如果發生這種情況,可以分配新的簽名雜湊。Neo核心開發者Jeff Solinsky表示:“如果Neo的新版本需要解決一些會改變MPT雜湊的問題,可以透過分發離線的MPT雜湊文件,其中將包含由共識節點簽名的新MPT雜湊。客戶端可以在從離線的區塊檔案中重新同步區塊鏈時載入該雜湊檔案。”這種方法的一個潛在缺點是,網路協議上的額外負載可能會影響交易吞吐量,因為新增新訊息或提高訊息頻率會減少其他任務的處理時間。但是,如果狀態根雜湊分佈在現有訊息(例如與共識過程相關的訊息)中,這種負擔將會最小化。
- 解耦狀態 -解耦旨在讓資料模型、業務邏輯、檢視顯示三層之間彼此降低耦合,把關聯度降到最低,不至於牽一髮而動全身。實施提案在決定以P2P訊息的方式實現狀態分佈後,Neo軟體工程師張濤簡要概述了這一可能的實現方案。其中詳細說明了3個可能的實現方向:- 將狀態根新增到PrepareRequest共識訊息,並將簽名新增到Commit共識訊息中;
- 使用單獨的dBFT流程就狀態根達成共識;- 區塊建立完畢後讓共識節點簽名並廣播當前狀態根。由於其他開發人員傾向於第一種和第三種方案,張濤提議將兩種方案進行結合。在這種情況下,共識節點將狀態根與新塊一起傳送,如方案1所述,但是未確認的狀態根可以透過共識節點簽名進行驗證,如方案3所述。張濤還分享了兩個需要解決的問題。在升級的情況下,開始生成新狀態根鏈時以及將其向其他節點進行廣播時將需要大量的P2P訊息,從而會對效能產生不利影響。但由於每個全節點仍將生成本地狀態根,因此僅需要檢查由共識節點簽名的最新狀態根。這樣就不再需要生成大量的P2P訊息,因為每個輕節點或全節點僅需要最新的狀態根即可進行驗證。上文已經基本介紹瞭如何透過P2P協議在Neo3中實現狀態根。狀態根作為實現Neo3 MPT資料結構的關鍵之一,下一篇「三分鐘入門Neo3」將介紹MPT樹的基本原理以及簡單的支付驗證邏輯。

免責聲明:

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

推荐阅读

;