ETH2.0 Serenity中網絡的詳細介紹

以太坊第四階段Serenity中網絡的概述

特別感謝Hsaio-Wei Wang、Kevin Mai-Hsuan Chia、John Adler的編輯和有價值的反饋。

在分片區塊鏈中網絡是一個難題,我們如何把分片區塊鏈設計和構建成可擴展的安全點對點網絡?截至本文撰寫之時,尚未有分片區塊鏈系統部署在生產中,因此,我們在如何設計此類P2P網絡方面沒有先例。這是目前以太坊2.0面臨的一個設計問題。這篇文章的目的是讓你加速在ETH2.0 P2P層上進行的研究,也許,可以開始爲ethereum 2.0的這部分研究做出貢獻。在本文中,我假設您熟悉當前的ETH2.0規範

ETH2.0網絡需求

在深入研究當前正在考慮的想法和協議之前,我們首先需要了解serenity的p2p網絡的需求是什麼。

  • 一,網絡中的節點需要能夠輕鬆地同時訂閱多個分片。這包括由信標鏈隨機分配給分片的驗證人節點,以及非驗證節點,即不參與共識協議的節點,它們連接到不同的分片以滿足其特定需求。
  • 二,網絡中的節點需要能夠在分片之間低延遲的跳轉。由於驗證器是隨機分配給分片的,所以它們需要儘可能高效的在分片之間切換是很重要的。因此,節點需要能夠儘快找到並連接到其他節點。
  • 三,我們需要考慮到很多數據是在分片網絡和信標網絡之間的傳遞。這些網絡需要低延遲,以確保網絡中的節點及時接收塊、證明(attestations)等,達到有效地參與協議。這些網絡也需要足夠高的帶寬來傳輸這些數據,即使塊、證明等的大小相對恆定。帶寬和延遲的大小也很難提前估計,但是來自brainbot的jannik初略了估算了帶寬和延遲的大小。請注意,由於Phase 0規範發生了重大變化,這些估計已經過時。

當前設計

根據p2p網絡的設計需要,這些是目前正在考慮的網絡設計思想。這些想法是基於Ethereum Foundation和Protocol Labs的Libp2p團隊之間的合作。Libp2p是構建可擴展peer-to-peer網絡的模塊化框架。雖然它目前還處於試驗階段,但在讓開發人員更簡單的使用p2p網絡方面已經取得了很大進展。

一個高效的PubSub系統: GossipSub

網絡中的節點使用稱爲發佈-訂閱(PubSub)的模式進行通信。在此框架中,發送消息的節點不向特定節點發送消息。相反,它們將這些消息分類爲主題,並將消息發送到訂閱這些主題的節點。發送這些消息的節點稱爲發佈者,訂閱主題的節點稱爲訂閱者。因此,發佈者不必知道他們要發佈給誰,訂閱者也不必知道主題的發佈者是誰。這種發送和接收消息的框架使網絡具有更大的可伸縮性和更動態的網絡拓撲結構。

publish-subscribe框架在特定的libp2p中有不同的變體,其中一個在當前Serenity中考慮的稱爲GossipSub,它使用gossips高效地將消息路由到訂閱者。GossipSub使用來自RandomsubMeshsub的思想以及gossipsub,以便在覆蓋網絡中有效地路由消息。Gossipsub和其他Pubsub變體的主要區別在於它如何發佈消息。Gossipsub消息使用Meshsub發佈,但metadata以gossiping的方式使用Randomsub發送到非mesh對等點。換言之,不在Meshsub創建的mesh中的對等方將能夠獲取主題mesh中消息的metadata,由於在該mesh中的對等節點已訂閱同一主題,則其他節點無需直接訂閱該主題。如果需要,這些對等點可以查詢實際的消息。請注意,這會減少每個peer需要發送的消息量,從而降低由Gossipsub創建的覆蓋mesh網絡中每個對等點的網絡複雜度。

在ETH2.0中,暫定有兩種主題:全局主題和本地主題。全局主題將用於網絡中所有節點都需要知道的消息,例如信標鏈消息和分片IDs。本地主題將用於與特定分片相關的消息,例如所有分片區塊頭頭和分片交易。

使用Kademlia DHT節點路由

節點路由算法是指網絡中的對等點如何決定通過哪些對等點路由消息。換句話說,節點ID如何映射到對等的IP地址和端口號。Kademlia DHT由於它的健壯性和Libp2p中實現的易用性且已在eth1.0中使用,正在考慮在ETH2.0中使用。對於Libp2p實現Kademlia的規範,可以閱讀libp2p的Kademlia規範

節點發現使用Bootnodes和Kademlia DHT

爲了在對等網絡中進行有效的通信,對等點必須能夠找到彼此。在ETH2.0中,將使用Bootnodes和kademlia dht的組合來幫助對等方找到彼此。

Bootnodes是當前eth1.0網絡中使用的一種對等點發現機制,其中希望連接到網絡的新對等點連接到網絡中的一組預定對等點。這些對等點通常在客戶機中硬編碼並由客戶機的開發人員選擇。此過程有助於將新節點加入網絡。kademlia在其規範中提供了這種引導機制。

一旦節點使用kademlia的引導機制加入網絡,它就可以通過查詢自己的k-bucket中最接近所需密鑰的節點來發現新的節點。然後,這些被查詢的節點啓動相同的流程,並返回其結果中最接近所需鍵的節點列表。此過程將重複,直到沒有查詢到的節點返回與所需鍵最接近的節點列表。

Libp2p和Devp2p

您可能已經注意到,在當前p2p網絡堆棧中,上文沒有提到Devp2p。其主要原因是,由於文檔有限,且自2014年提議以來缺乏更改,因此決定將以太坊從devp2p切換到libp2p。此外,libp2p的模塊化設計使我們能夠輕鬆構建分片所需的自定義網絡功能。對於devp2p,我們不容易做到這一點。對於使用libp2p的優點的簡短概述,您可以閱讀Parity Technologies關於他們爲什麼在項目中使用libp2p的文章。

待解決問題

你應該對ETH2.0中的網絡可能是什麼有了一個很好的瞭解,也許,您希望開始解決問題。下面是一個開放的問題列表,你可以從中開始思考如何做出貢獻。這份清單並不詳盡,但它只是一個開始。

驗證人隱私

驗證人集合是以太坊網絡的重要組成部分。它們保持協議運行並確保網絡安全。攻擊者可能想要識別驗證人集合,以便以某種方式攻擊以太坊網絡。想要DDoS特定驗證人節點的攻擊者顯然很難防止,但目標是首先使其很難識別驗證人集合。理想情況下,我們有適當的機制,使得攻擊者只能攻擊所有可用節點的隨機子集。Jannik有一個關於驗證人隱私不同方面的頭腦風暴問題

對於如何提高驗證人的隱私性,有一些建議。然而,所有這些建議都處於集思廣益階段,沒有任何具體的建議。有人建議使用當前的p2p級匿名解決方案,如Tor和/或I2p,Pegasys的工程師Nicolas Liochon分析了這些方法。你可以在這裏讀他的分析。要點是,將ETH2.0網絡集成到tor或I2p網絡中是合理的。我想指出,嘗試將這些技術集成到其他加密貨幣中是有先例的,最著名的例子是Monero。您可以閱讀所有關於Monero在構建KVRI的嘗試,這裏是I2P網絡的C++實現。

討論的另一種方法是基於蒲公英++。其基本思想是創建一個匿名圖作爲底層網絡拓撲的子圖,讓消息沿着匿名圖上僞隨機生成的路徑傳播,然後將消息擴散到周圍的節點。目前,Bitcoin CoreGrin網絡正在考慮蒲公英++。這個提案建議使用蒲公英++協議的前兩個步驟,然後在第三個步驟中,不再簡單地將消息擴散到附近的對等點,而是像在常規Gossipsub中那樣發佈消息。你可以在這裏閱讀提案的細節。

聚合簽名

簽名聚合是ETH2.0的重要組成部分。它的主要用途是將來自認證者(驗證人)的簽名聚合爲一個簽名,以存儲在證明(attestations)中。這就不需要存儲來自證明者的所有簽名。所使用的簽名方案是BLS簽名方案。使用BLS簽名方案的主要優點是,只要生成了簽名,就不再需要簽名者來聚合簽名。你可以在這裏閱讀更多關於BLS簽名方案的細節。現在,我們如何在p2p網絡中聚合這些簽名呢?嗯,我們還不知道。PegaSys團隊目前有一個名爲Handel的提議。這篇論文還沒有發表,但是github存儲庫是公開的,並且在斯坦福區塊鏈會議上進行了討論。然而,還沒有決定。如果你知道怎麼做,請聯繫。

節點發現

當前的節點發現設計對於Phase 0 的testnet階段來說是很好的,但是對於一個生產的、分散的p2p網絡來說不是最優的。節點發現的主要競爭者是discv5。一個版本的discv5部署在geth 1.5及更高版本中,但其他以太坊客戶端不使用discv5。discv5的規範目前正在進行中,並且是非官方的。費利克斯·蘭格(Felix Lange)有一份草稿,你可以在這裏閱讀。

有線協議(Wire Protocol)

有線協議是指設計具體實現。如果我們想讓不同的客戶端相互通信並且互操作,就需要一個有線協議。這是目前正在進行的工作,丹尼·瑞恩(Danny Ryan)已經發布了階段0的最小wire API,一旦指定了特定的wire協議,就可以實現該api。後續階段的wire API需要根據不同的需求來考慮分片。devcon4之前,在布拉格舉行的工作組會議上,開發了ETH2.0的wire協議所需的需求列表。你可以在這裏閱讀細節。也許看看當前的eth1.0有線協議可以幫助設計ETH2.0的有線協議。

傳輸協議

當前的以太坊網絡使用UDP來進行節點發現,而TCP用於所有p2p通信。具體來說,對於節點發現,它在UDP之上使用Kademlia-like的系統,在TCP之上構建自定義傳輸協議RLPX。在對等系統中,UDP是節點發現的常用選擇。TCP的用途是向網絡中的其他對等方發送大量的消息。這種方法常用於許多互聯網應用,如遊戲。但是,TCP有時可能會很慢,因爲TCP需要確保數據包的順序正確,並且需要等待對等方的響應。TCP具有內置的錯誤恢復功能,以便可靠地將數據包發送到網絡中的對等方。

似乎以太坊中使用的傳輸協議還有改進的餘地。也許,我們可以找到一個和UDP一樣快,和TCP一樣可靠的傳輸協議。這種協議的主要競爭者是谷歌在2012年提出的名爲QUIC的實驗性地傳輸。QUIC是一種基於UDP的傳輸協議,旨在提高通過internet發送數據包的性能。此外,QUIC還內置了加密功能。這意味着要阻止對等方之間的通信將更加困難。與TCP相比,使用QUIC的主要優點有兩個。首先,QUIC需要一個包來建立連接,而不是TCP的三方握手。第二,它使用多路複用,使得多個數據流可以獨立地到達其端點,在TCP中,如果數據流中發現錯誤,則連接可以被阻塞。本文討論了在ETH2.0中使用QUIC比TCP的優勢。PegaSys團隊計劃進行更多的研究,以確定其在ETH2.0中的可行性。爲了使ETH2.0有一個可靠而快速的傳輸協議,可能有必要做一個分析,看看需要做哪些改進。

Kademlia DHT的替代方案

在斯坦福區塊鏈會議之後的工作組會議期間,出現了一個共同的主題,即使用Kademlia DHT進行節點發現和節點路由。Kademlia DHT和變體已經在當前以太坊網絡中使用,這是因爲它的知名度。但是,這種廣泛的使用使得以太坊網絡容易受到一系列攻擊,如eclipse攻擊。此外,以太坊網絡沒有充分利用Kademlia的能力。事實上,以太坊並不需要Kademlia的內容發現功能。這些事實表明,我們應該探索對等路由和發現的非kademlia替代方案。

原文鏈接 https://medium.com/@mikerahqc/networking-in-serenity-eth2-0-8bbdb5bd6dd4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章