以太坊作為全球領先的智能合約平臺,其公鏈雖然功能強大,但在某些場景下(如企業內部應用、開發測試、隱私保護等),搭建一條私有以太坊鏈(私鏈)顯得更為靈活和實用,Geth(Go-Ethereum)是以太坊官方的Go語言實現,功能全面,是搭建以太坊私鏈的首選工具之一,本文將詳細介紹如何使用Geth從零開始搭建一條功能完善的以太坊私鏈。
為什么需要搭建以太坊私鏈?
在開始搭建之前,我們先簡單了解一下搭建私鏈的常見原因:
- 開發與測試:開發者可以在私鏈上自由部署和測試智能合約,無需擔心消耗真實的以太幣(ETH)或受到公鏈網絡擁堵和高Gas費用的影響。
- 企業級應用:企業可以利用私鏈構建內部區塊鏈應用,如供應鏈管理、身份認證、資產追蹤等,實現對數據的可控管理和隱私保護。
- 實驗與學習:對于初學者而言,私鏈提供了一個安全、低成本的實驗環境,可以深入理解以太坊的工作原理、共識機制、節點交互等。
- 特定場景定制:可以根據業務需求對私鏈進行定制化配置,如調整共識算法、區塊大小、Gas限制等。
搭建以太坊私鏈前的準備
-
環境要求:
- 操作系統:Linux(推薦Ubuntu)、macOS 或 Windows,本文以Linux (Ubuntu)為例進行演示。
- Go語言環境:Geth是用Go語言開發的,需要安裝Go(通常Geth安裝包會包含依賴,但提前安裝Go有助于編譯和調試)。
- Git:用于從代碼倉庫獲取Geth(如果選擇源碼編譯安裝)。
-
安裝Geth: 最常用的安裝方式是使用二進制文件直接安裝。

-
直接下載二進制文件(推薦) 訪問 Geth官方GitHub Releases頁面,下載對應操作系統的最新穩定版二進制文件,對于64位Linux系統:

wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.13.0-6c9179e0.tar.gz tar -xvf geth-linux-amd64-1.13.0-6c9179e0.tar.gz sudo mv geth-linux-amd64-1.13.0-6c9179e0/geth /usr/local/bin/
驗證安裝:
geth version
-
使用包管理器(如apt)
sudo apt update sudo apt install geth
-
源碼編譯(適合需要最新功能或自定義編譯的場景)
sudo apt install git golang-go git clone https://github.com/ethereum/go-ethereum.git cd go-ethereum make geth sudo cp build/bin/geth /usr/local/bin/
-
初始化創世區塊
以太坊的每個鏈都有一個“創世區塊”(Genesis Block),它是鏈的起點,私鏈需要我們自定義創世區塊配置文件。

-
創建創世配置文件: 創建一個名為
genesis.json的文件,內容如下,這是一個基本的創世配置示例:{ "config": { "chainId": 15, // 私鏈的ID,用于區分不同的以太坊網絡,公鏈是1,Ropsten是3,這里自定義一個15 "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "berlinBlock": 0, "londonBlock": 0, "mergeNetsplitBlock": 0, "ethash": {} // 如果使用PoW共識,這里配置ethash;私鏈常用PoA,下面會替換 }, "alloc": {}, // 預先分配的賬戶地址和余額,這里留空 "coinbase": "0x0000000000000000000000000000000000000000", "difficulty": "0x20000", // 創世區塊難度,私鏈可以設小一些 "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", // 額外數據 "gasLimit": "0xffffffff", // Gas限制 "nonce": "0x0000000000000042", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": "0x00" }注意:如果我們打算使用權威證明(Proof of Authority, PoA)共識機制(私鏈常用,比PoW更高效且節能),需要修改
config部分,使用Clique PoA共識:{ "config": { "chainId": 15, "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "berlinBlock": 0, "londonBlock": 0, "mergeNetsplitBlock": 0, "clique": { "period": 15, // 出塊時間(秒) "epoch": 30000 // 每隔多少區塊重簽名者列表 } }, "alloc": {}, "coinbase": "0x0000000000000000000000000000000000000000", "difficulty": "0x1", "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", // 后面會添加簽名者地址 "gasLimit": "0xffffffff", "nonce": "0x0000000000000042", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": "0x00" } -
初始化創世區塊: 使用
geth的init命令來根據genesis.json文件初始化數據目錄(data directory):mkdir -p ~/ethereum-private-chain/data geth --datadir ~/ethereum-private-chain/data init ~/ethereum-private-chain/genesis.json
執行成功后,會在
~/ethereum-private-chain/data目錄下生成geth和keystore等文件夾。
啟動私鏈節點
-
啟動第一個節點(創世節點): 假設我們使用Clique PoA共識,并且希望設置一個初始的簽名者(signer)。
我們需要一個賬戶地址作為簽名者,可以使用
geth的account new命令創建新賬戶,或使用已有賬戶,這里我們假設已經創建了一個賬戶,地址為0xYourFirstSignerAddress。啟動節點,并指定創世文件、數據目錄、網絡端口、RPC端口等參數:
geth --datadir ~/ethereum-private-chain/data \ --networkid 15 \ # 必須與genesis.json中的chainId一致 --port 30303 \ # P2P監聽端口,默認30303,私鏈多個節點時需區分 --rpc \ # 啟動RPC服務 --rpcaddr "0.0.0.0" \ # RPC監聽地址,0.0.0.0表示監聽所有網絡接口 --rpcport 8545 \ # RPC端口,默認8545 --rpccorsdomain "*" \ # 允許跨域訪問的域名,開發時可設為"*" --rpcapi "eth,net,web3,personal,miner,
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。



