跳至內容
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 測試網。它是由 Ethereum 核心開發者維護的權益證明網路,Ropsten、Rinkeby、Kovan、Goerli 與 Kiln 等舊測試網皆已棄用。

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

什麼是 Geth 節點?

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

透過 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),並向其他節點請求其餘資料。
  • 依據區塊標頭中的 state root 驗證資料的有效性。
  • 提供給低運算能力的裝置使用,例如嵌入式裝置或手機,這些裝置無法負擔儲存數 GB 的區塊鏈資料。

Full node

Full node 會驗證區塊中的交易是否符合 Ethereum Yellow Paper 所規定的標準。它們這麼做是為了確保透過網路傳送的區塊是真實有效的。你可以信任它們所做的驗證工作。full node 使用這種驗證方式,讓網路維持符合 Ethereum 的要求。

Full node:

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

Archive node

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

Archive node:

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

‍

安裝 Geth 的需求

  • 多核心 CPU(7GB+ RAM)
  • 本機 SSD 硬碟,約需 600GB+ 的可用空間
  • 選用:使用 16/32 GB+ 的 CPU,透過快取(caching)提升效能。使用快取功能(也就是加上 '--cache' 參數)後,Geth 就能從記憶體讀取 state,而不必從硬碟讀取。
  • Mac 使用者需要 Homebrew
  • Linux/Ubuntu 使用者需要 PPA
  • 選用:Parity(想了解更多資訊,可參考如何從 parity 遷移到 Geth)‍

Geth 安裝方式

你可以透過套件管理工具安裝 Geth,例如在 MacOS 上使用 homebrew,或在 Ubuntu 上使用 PPA;也可以直接下載、在 docker 中執行,或甚至從原始碼建置。

在 MacOS 終端機中使用 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 資料夾/root 資料夾的位置,於終端機中執行以下指令,以便執行它:

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 會輸出以下的範例查詢結果:

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

結語

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

不過,如果你想嘗試挖礦,或開發自己專屬的 Ethereum 軟體,安裝並執行 Geth 是相當值得的。如果你只是想掌控自己的節點與錢包金鑰(自行簽署交易,而不依賴第三方軟體),這麼做也很有幫助。使用 Geth,現在你可以打開 Ethereum 開發的整個世界!

Background gradient

打造區塊鏈魔法

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