以太坊作為全球領(lǐng)先的智能合約平臺(tái)和去中心化應(yīng)用(DApp)的基礎(chǔ)設(shè)施,其節(jié)點(diǎn)網(wǎng)絡(luò)是整個(gè)生態(tài)系統(tǒng)的基石,在Linux操作系統(tǒng)上運(yùn)行以太坊節(jié)點(diǎn),不僅因其開源、穩(wěn)定、高效和高度可定制性而備受開發(fā)者和技術(shù)愛好者的青睞,也是參與網(wǎng)絡(luò)治理、保障數(shù)據(jù)安全、進(jìn)行DApp開發(fā)和測(cè)試的理想選擇,本文將詳細(xì)介紹在Linux環(huán)境下運(yùn)行以太坊節(jié)點(diǎn)的步驟、方法及注意事項(xiàng)。

為何選擇Linux運(yùn)行以太坊節(jié)點(diǎn)?

在開始之前,我們有必要了解為何Linux是運(yùn)行以太坊節(jié)點(diǎn)的優(yōu)選:

  1. 穩(wěn)定性與可靠性:Linux服務(wù)器以其出色的穩(wěn)定性和長時(shí)間運(yùn)行能力著稱,對(duì)于需要7x24小時(shí)在線的區(qū)塊鏈節(jié)點(diǎn)至關(guān)重要。
  2. 高性能:Linux對(duì)系統(tǒng)資源的調(diào)度和管理更為高效,能夠?yàn)橐蕴还?jié)點(diǎn)的同步、交易驗(yàn)證和智能合約執(zhí)行提供更優(yōu)的性能表現(xiàn)。
  3. 開源與自由:Linux本身以及許多以太坊客戶端軟件(如Geth、Nethermind)都是開源的,用戶可以自由地查看、修改和分發(fā)源代碼,確保透明度和安全性。
  4. 強(qiáng)大的命令行工具:Linux的命令行界面(CLI)提供了強(qiáng)大的文本處理和自動(dòng)化能力,方便管理員進(jìn)行節(jié)點(diǎn)配置、監(jiān)控和維護(hù)。
  5. 社區(qū)支持:擁有龐大而活躍的技術(shù)社區(qū),遇到問題時(shí)容易找到解決方案和幫助。
  6. 安全性:Linux的權(quán)限管理和安全機(jī)制相對(duì)完善,能夠有效抵御常見的網(wǎng)絡(luò)攻擊。

準(zhǔn)備工作

在開始安裝和配置之前,請(qǐng)確保您的Linux系統(tǒng)滿足以下基本要求:

  1. 硬件配置

    • CPU:至少2核心,推薦4核心及以上。
    • 內(nèi)存(RAM):至少8GB,推薦16GB或以上,因?yàn)橥絽^(qū)塊鏈數(shù)據(jù)需要大量內(nèi)存。
    • 存儲(chǔ)空間:SSD固態(tài)硬盤是必須的,至少需要1TB可用空間(以太坊主網(wǎng)數(shù)據(jù)量持續(xù)增長,建議預(yù)留更大空間,如2TB或更多)。
    • 網(wǎng)絡(luò)帶寬:穩(wěn)定的互聯(lián)網(wǎng)連接,建議帶寬至少10Mbps以上,且上傳下載速度均衡,因?yàn)楣?jié)點(diǎn)需要同步大量數(shù)據(jù)并與其他節(jié)點(diǎn)通信。
  2. 軟件環(huán)境

    • 操作系統(tǒng):推薦使用Ubuntu 20.04 LTS或22.04 LTS,Debian 10或11等主流穩(wěn)定版Linux發(fā)行版,本文以Ubuntu為例進(jìn)行演示。
    • 更新系統(tǒng):確保系統(tǒng)已更新至最新狀態(tài)。
      sudo apt update && sudo apt upgrade -y
    • 安裝必要工具:如wget, curl, git, build-essential等。
      sudo apt install -y wget curl git build-essential

選擇并安裝以太坊客戶端

以太坊有多種客戶端實(shí)現(xiàn),它們遵循相同的以太坊JSON-RPC API,但性能、特性和資源消耗有所不同,主流的客戶端有:

  • Geth (Go-Ethereum):最廣泛使用的客戶端,功能全面,穩(wěn)定性好,社區(qū)活躍。
  • Nethermind:基于.NET Core構(gòu)建,性能優(yōu)異,內(nèi)存占用相對(duì)較低。
  • OpenEthereum:前以太坊經(jīng)典(ETC)的主要客戶端之一,也曾支持以太坊,但目前開發(fā)活躍度有所下降。
  • Prysm:主要用于以太坊2.0(信標(biāo)鏈)的客戶端,但也可以與執(zhí)行層客戶端配合。

對(duì)于初學(xué)者和大多數(shù)用戶,Geth 是一個(gè)不錯(cuò)的選擇,下面以安裝Geth為例:

  1. 下載Geth二進(jìn)制文件: 訪問Geth官方GitHub發(fā)布頁面(https://github.com/ethereum/go-ethereum/releases)獲取最新版本的下載鏈接,或者使用以下命令(以最新版本為例,請(qǐng)?zhí)鎿Q為實(shí)際版本號(hào)):

    # 獲取最新版本號(hào)(示例,實(shí)際請(qǐng)?zhí)鎿Q)
    GETH_VERSION="1.13.6"
    wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-${GETH_VERSION}-1dc531db.tar.gz
  2. 解壓并安裝

    tar -xvzf geth-linux-amd64-${GETH_VERSION}-1dc531db.tar.gz
    sudo cp geth-linux-amd64-${GETH_VERSION}-1dc531db/geth /usr/local/bin/
    # 驗(yàn)證安裝
    geth version

啟動(dòng)并運(yùn)行以太坊節(jié)點(diǎn)

安裝完成后,就可以啟動(dòng)以太坊節(jié)點(diǎn)了,根據(jù)需求,可以選擇同步主網(wǎng)、測(cè)試網(wǎng)或私有鏈。

  1. 首次同步(主網(wǎng)): 啟動(dòng)Geth并開始同步以太坊主網(wǎng)數(shù)據(jù):

    geth --syncmode full --http --http.addr 0.0.0.0 --http.port 8545 --http.vhosts "*" --ws --ws.addr 0.0.0.0 --ws.port 8546 --ws.origins "*"

    參數(shù)說明:

    • --syncmode full:完整同步模式,下載并驗(yàn)證所有區(qū)塊和交易,是最安全的模式,但耗時(shí)最長,也可選擇--syncmode snap(快速同步,默認(rèn),只下載區(qū)塊頭和最近狀態(tài))或--syncmode trust(信任同步,速度最快但安全性較低,不推薦主網(wǎng)使用)。
    • --http:啟用HTTP-RPC服務(wù),允許其他應(yīng)用通過HTTP API與節(jié)點(diǎn)交互。
    • --http.addr 0.0.0.0:允許任何IP地址訪問HTTP-RPC服務(wù)(生產(chǎn)環(huán)境請(qǐng)謹(jǐn)慎設(shè)置,建議綁定特定IP或使用防火墻限制)。
    • --http.port 8545:HTTP-RPC服務(wù)端口。
    • --http.vhosts "*":允許任何主機(jī)名訪問HTTP-RPC服務(wù)。
    • --ws:啟用WebSocket-RPC服務(wù)。
    • --ws.addr 0.0.0.0:允許任何IP地址訪問WebSocket-RPC服務(wù)。
    • --ws.port 8546:WebSocket-RPC服務(wù)端口。
    • --ws.origins "*":允許任何來源連接WebSocket-RPC服務(wù)。

    首次啟動(dòng)時(shí),Geth會(huì)開始下載區(qū)塊鏈數(shù)據(jù),這個(gè)過程可能需要幾天到幾周的時(shí)間,具體取決于您的網(wǎng)絡(luò)帶寬和硬件性能,期間您可以通過geth attach進(jìn)入JavaScript控制臺(tái),使用eth.syncing查看同步進(jìn)度。

  2. 作為后臺(tái)服務(wù)運(yùn)行(systemd): 為了讓節(jié)點(diǎn)在后臺(tái)持續(xù)運(yùn)行并在開機(jī)時(shí)自動(dòng)啟動(dòng),可以將其配置為systemd服務(wù)。 創(chuàng)建服務(wù)文件:

    sudo nano /etc/systemd/system/geth.service

    在文件中添加以下內(nèi)容(根據(jù)實(shí)際安裝路徑和參數(shù)調(diào)整):

    [Unit]
    Description=Geth Ethereum Client
    After=network.target
    [Service]
    User=your_username  # 替換為您的用戶名
    Group=your_username  # 替換為您的用戶名
    Type=simple
    Restart=always
    RestartSec=5
    ExecStart=/usr/local/bin/geth --syncmode snap --http --http.addr 0.0.0.0 --http.port 8545 --http.vhosts "*" --ws --ws.addr 0.0.0.0 --ws.port 8546 --ws.origins "*"
    StandardOutput=journal
    StandardError=journal
    [Install]
    WantedBy=multi-user.target

    保存并退出,然后啟用并啟動(dòng)服務(wù):

    sudo systemctl daemon-reload
    sudo systemctl enable geth
    sudo systemctl start geth

    查看服務(wù)狀態(tài):

    sudo systemctl status geth
  3. 連接測(cè)試網(wǎng): 如果您想在測(cè)試網(wǎng)上進(jìn)行開發(fā)和測(cè)試,可以使用以下命令(以Ropsten測(cè)試網(wǎng)為例,注意Ropsten已合并,可能已遷移到其他測(cè)試網(wǎng),請(qǐng)查閱最新文檔):

    geth --goerli --syncmode full --http --http.addr 0.0.0.0 --http.port 8545

    --goerli 表示連接Goerli測(cè)試網(wǎng)(請(qǐng)根據(jù)當(dāng)前活躍測(cè)試網(wǎng)調(diào)整參數(shù))。

節(jié)點(diǎn)管理、監(jiān)控與交互

  1. 進(jìn)入JavaScript控制臺(tái): 在運(yùn)行g(shù)eth的終端或新終端中,執(zhí)行:
    geth attach

    進(jìn)入控制臺(tái)后,可以執(zhí)行各種以太坊命令,如:

    • eth.blockNumber:查看最新區(qū)塊號(hào)。
    • eth.syncing:查看同步狀態(tài)。
    • eth.getBalance("以太坊地址"):查詢地址余額。
    • personal.newPassword("password")