跳至內容
0%

什麼是 Geth node,以及如何運行

Alchemy team headshot

作者 Alchemy

發布於 2022年4月18日閱讀時間 2 分鐘

Geth 與節點介紹

Ethereum 節點是屬於 Ethereum 區塊鏈網路的電腦。這些節點是實際運作的電腦,執行檢查、儲存,有時也產生區塊的軟體。

「Client」是這種軟體的名稱。它讓我們能透過 JSON-RPC API 與區塊鏈互動、讀取並驗證區塊鏈,以及讀寫智能合約。

Geth 是其中一種 client,也是最常被使用的之一。它以 Go 語言撰寫,由 Ethereum Foundation 的一群人以及其他協助者維護更新。

Geth 的一些特性:

  • 內建 JavaScript console,可透過「geth console」執行。
  • 這個 client 可以和其他 JavaScript client 搭配使用(web3js)。
  • 內建 Sepolia 等測試網(或可自行架設私有 Ethereum 網路)。
  • 一般被視為其他 Ethereum 節點的標準參考。

在這篇最新的 Alchemy 部落格文章中,我們會學習如何安裝並執行 Geth 節點。

網路(Mainnet 與 testnet)與 Geth

要了解 Geth 節點,我們需要先了解 Ethereum 的不同網路。

Ethereum 有一個核心網路(Mainnet),所有交易都在其上進行,但也設有多個其他測試網路供測試使用(Testnet)。可以利用這些「練習用」區塊鏈,在 localhost 之外嘗試各種區塊鏈功能。

1. Mainnet

Ethereum mainnet是用來產生 Ethereum 的網路。ETH 可以在這個網路上挖礦或在交易所交易,且始終可用。

2. Sepolia

Sepolia是目前 Geth 開發者應該使用的 Ethereum testnet。它是由 Ethereum 核心開發者維護的權益證明(proof-of-stake)網路,舊有的測試網如 Ropsten、Rinkeby、Kovan、Goerli 與 Kiln 已經淘汰。

若要開始在 Sepolia 上建置,可以從水龍頭取得 Sepolia ETH。

什麼是 Geth 節點?

Geth 節點類型示意圖:Ethereum 上的 light、full 與 archive 節點

透過 Geth,你可以建立自己的私有 Ethereum 網路。Ethereum 網路的區塊鏈從一個稱為 genesis block 的根區塊開始,genesis block 中沒有任何交易。

Ethereum 節點有很多種,而 Geth 節點分為三類:light node、full node 與 archive node。

Light node

由於不驗證每一個區塊,light node 不會保存 Ethereum 區塊鏈的完整副本,因此需要依賴 full node 提供的資料。執行 light node 有一些優點,包括啟動較快、儲存空間使用較少,以及運算/記憶體需求較低。但 light node 的信任程度較低,且常需依賴 full node,這可能會造成問題。

Light node:

  • 儲存 header chain,其餘資料則另外請求取得。
  • 根據區塊 header 中的 state root 驗證資料的有效性。
  • 適用於低容量裝置,例如嵌入式裝置或手機,這些裝置無法負擔儲存數 GB 的區塊鏈資料。

Full node

Full node 會驗證區塊中的交易是否符合Ethereum Yellow Paper所定義的規範,藉此確保網路上傳輸的區塊是真實有效的。你可以信任它們的驗證結果。Full node 就是透過這種驗證方式,讓網路維持符合 Ethereum 的要求。

Full node:

  • 儲存完整的區塊鏈資料。
  • 參與區塊驗證,驗證所有區塊與狀態。
  • 推導出所有狀態。
  • 服務網路,並依請求提供資料。

Archive node

Archive node 是會保存完整交易歷史的節點,網路的健全性與結構也仰賴這些節點。

Archive node:

  • 儲存 full node 所保存的一切,並額外建立歷史狀態的存檔。如果你想查詢帳戶餘額或任何鏈上資料,或是單純想可靠地測試自己的交易集合而不進行挖礦,可以使用 OpenEthereum,這時就需要 archive node。
  • 提供的資料量可達數 TB。這使得一般使用者較少使用,但對於區塊瀏覽器、錢包供應商、鏈上分析服務等來說相當實用。
Ethereum 節點在網路中達成 proof-of-work 共識的示意圖
source: https://ethereum.org/en/developers/docs/nodes-and-clients/

‍

安裝 Geth 的需求

  • 多核心 CPU(7GB+ RAM)
  • 本地 SSD 硬碟,至少約 600GB+ 可用空間
  • (選擇性)使用 16/32 GB+ CPU 並搭配快取以最佳化效能。啟用快取功能(即使用 '--cache' 旗標)後,Geth 可以從記憶體讀取 state,而不必讀取硬碟。
  • Mac 使用者請安裝 Homebrew
  • Linux/Ubuntu 請使用 PPA
  • (選擇性)Parity(詳見如何從 Parity 移轉到 Geth)‍

Geth 安裝方式

你可以透過套件管理工具安裝 Geth,例如 MacOS 上的 homebrew 或 Ubuntu 上的 PPA,也可以直接下載、透過 docker 執行,或是從原始碼自行建置。

在 MacOS terminal 使用 Homebrew:

text
Copied
$ brew tap ethereum/ethereum $ brew install ethereum

可以在這裡查看各種實用指令的清單(abigen、bootnode、checkpoint-admin、clef、devp2p、ethkey、evm、faucet、geth 等),或者也可以執行:

text
Copied
$ geth --help

Linux/Ubuntu 的 PPA:

text
Copied
$ sudo add-apt-repository -y ppa:ethereum/ethereum

安裝穩定版 go-Ethereum:

text
Copied
$ sudo apt-get update $ sudo apt-get install ethereum

Docker:

從這裡下載 Docker,然後執行以下指令:

text
Copied
$ docker pull ethereum/client-go:latest

接著執行:

text
Copied
$ docker run ethereum/client-go:latest

執行 Geth

在我們解壓縮 Geth 資料夾/根目錄所在的位置,於 terminal 中執行以下指令即可執行 Geth:

text
Copied
$ ./Geth console --testnet --syncmode "light" --rpc --rpcaddr "localhost" --rpcport "8485" --rpccorsdomain "*" --rpcapi="db,eth,net,web3,personal"

這樣會直接進入 Geth console。

輸入 net 可以查看是否有任何 peer。輸入 eth.syncing 可以查看節點目前是否正在同步。節點有可能要重新啟動後才會開始同步。

例如,執行 eth.syncing 會輸出以下範例查詢結果:

Geth 主控台輸出,顯示 eth.syncing 查詢的區塊同步進度

結語

大多數供一般使用者採用的 web/extension 錢包(如 MetaMask、Coinbase、Rainbow 等)通常都已經內建 Geth。

不過,如果你想嘗試挖礦或開發自己的 Ethereum 客製化軟體,安裝並執行 Geth 仍然值得一試。如果你單純想掌控自己的節點以及錢包的金鑰(自行簽署交易,而非依賴第三方軟體),這麼做也很有用。透過 Geth,你就能開啟 Ethereum 開發的完整世界!

Background gradient

打造區塊鏈魔法

Alchemy 結合最強大的 Web3 開發者產品與工具,並提供資源、社群與卓越的支援。