Architecture

Prysm 客戶端背後的技術棧是什麼?

  • June 10, 2020

Prysm 的主要組件是什麼?Prysm 考慮並決定了哪些數據庫?

Prysm 的架構中是否存在與其他信標鏈客戶端特別不同的元素?

Raul Jordan 來自 Prysm 項目。Prysm 客戶端是用 Go 編寫的 Ethereum 2.0 區塊鏈的開源實現,就像我們熟悉的 go-ethereum 項目是今天的 Ethereum 1.0 一樣。它與乙太坊目前的工作方式大相徑庭,因為它根據乙太坊研究團隊創建的規範實施股權證明和分片。

Prysm 項目旨在對乙太坊 2.0 的大多數使用者有用,他們要麼作為鏈的驗證者參與共識,要麼只是在網路中執行一個完整的節點。乙太坊 2.0 的核心由兩個主要部分組成:

  1. 信標節點,它是一個區塊鏈全節點,負責 p2p 網路、鏈同步、共識和 RPC API 端點
  2. 驗證者客戶端,它是使用者密鑰的瘦包裝器,負責與信標節點通信以提議區塊並對區塊進行投票。

Prysm 程式碼庫是一個monorepo,這意味著它包含了對整個 eth2 執行時有用的各種工具。信標節點和驗證器客戶端的完整實現分別位於項目頂層的./beacon-node和文件夾中。./validator

Prysm 有什麼區別?

Go 是雲伺服器、網路和基礎設施的語言。我們相信,要使 Eth2 取得成功,許多個人和公司將需要在其生產部署中使用簡單的方法來執行節點,並使用強大的工具進行監控和檢測。Prysm 通過利用當今世界上一些最大的公司正在使用的技術堆棧來生產 Golang 應用程序,使用經過驗證的技術為Google、優步等公司的全球數十億使用者提供服務,從而使這一切變得容易。

我們相信堅持行業最佳實踐並提供 Go 和雲基礎設施生態系統中許多人熟悉的工具將使 Prysm 成為成功的 Eth2 客戶端。

什麼是 Prysm 的技術堆棧?

以下是 Prysm 使用的一些技術,這些技術在許多具有大型生產級 Go 部署的公司中使用。

  • Prometheus作為收集所有 Prysm 服務的指標的數據庫,可通過 Grafana 儀表板輕鬆視覺化
  • BoltDB作為持久的鍵值對儲存,它在內部使用 B+ 樹以實現閃電般的快速數據庫讀取和隨機頁面訪問
  • gRPC作為 eth2 節點的 RPC-API 層,包括對負載平衡、跟踪、健康檢查和身份驗證的可插拔支持
  • 協議緩衝區作為程序間通信的核心資料結構,提供比 JSON 高 6 倍的性能。Protobufs 是 gRPC 的標準,並為當今的大量公司提供支持,例如 Uber、Google、Twitter 等。我們的整個 API 在 github.com/prysmaticlabs/ethereumapis 中被指定為協議緩衝區
  • Jaeger用於跨所有 Prysm 組件的分佈式跟踪,使我們非常容易了解分佈式系統(如 eth2)中發生的瓶頸和錯誤
  • Libp2p 作為節點之間對等網路的基礎,由 Protocol Labs 創建
  • Bazel建構系統用於快速、可重複的建構,這對於具有如此重要程式碼的 monorepo 至關重要。整個 Google 和 Uber monorepos 都是用 Bazel 建構的,因為它的功能為建構安全程式碼提供了難以置信的價值。您可以在此處閱讀有關 Uber 與 Bazel 的旅程的更多資訊

Prysmatic Labs 團隊利用此技術堆棧為 Eth2 執行生產 Kubernetes 部署,因此我們非常重視不斷改進它並與我們日常的標準工程實踐保持一致。

乙太坊一直以做事不同於人們在傳統軟體工程學科中習慣的方式而聞名,例如選擇自己的 JSON-API 格式。在 Prysm,我們正在放棄這些規範,而是為我們的堆棧使用更成熟的技術。

Prysm 的架構是什麼樣的?

在執行時,信標節點初始化並維護許多服務,這些服務對於提供乙太坊 2.0 的所有功能都至關重要。這些服務沒有特別的順序,包括:

  • 一種區塊鏈服務,它處理來自網路的傳入塊,提升信標鏈的狀態,並應用分叉選擇規則來選擇最佳頭塊。
  • 運營服務準備從對等方接收到的信標塊中包含的資訊(例如塊存款和證明),以包含在新的驗證器塊中。
  • 包含符合協議所需的乙太坊 2.0 核心功能、實用程序和狀態轉換的核心包。
  • 一種同步服務,它通過網路查詢節點以確保同步最新的規範頭和狀態,並處理來自對等方的傳入塊公告。
  • 一種 ETH 1.0 服務,用於偵聽來自驗證者存款合約和 ETH 1.0 區塊鏈的最新事件日誌。
  • 一個公共 RPC 伺服器,它請求有關信標鏈狀態、最新區塊、驗證者資訊等的資訊。
  • 處理對等連接的生命週期並促進跨網路廣播的 P2P 伺服器。
  • 一個完整的測試套件,用於在跨客戶端的乙太坊 2.0 狀態轉換、基準測試和一致性測試上執行模擬。
  • 我們將這些服務中的每一個隔離到單獨的包中,每個包負責自己的生命週期、日誌記錄和依賴管理。每個 Prysm 服務都實現了一個介面來隨時啟動、停止和驗證其狀態。

您可以在 docs.prylabs.network 閱讀我們的文件

引用自:https://ethereum.stackexchange.com/questions/83274