手把手教你搭建以太坊私有鏈:從零開始的實驗指南**
以太坊作為全球領先的智能合約平臺,其公有鏈雖然功能強大,但在某些場景下(如企業內部應用、數據隱私要求高的項目、開發測試等),搭建一條私有鏈或聯盟鏈更為合適,私有鏈允許參與者對交易數據進行完全控制,無需擔心公有鏈上的網絡擁堵和高昂Gas費用,本文將詳細介紹如何通過Geth(Go-Ethereum)客戶端,從零開始搭建一條簡單的以太坊私有鏈,并進行基本的交互實驗。
實驗目的
- 理解以太坊私有鏈的基本概念與搭建原理。
- 掌握使用Geth客戶端初始化、啟動私有鏈的方法。
- 學會在私有鏈上創建賬戶、查看賬戶信息、轉賬及部署簡單智能合約。
- 體驗私有鏈的運行機制與特點。
實驗環境準備
- 操作系統:Linux (Ubuntu 18.04/20.04)、macOS 或 Windows (本文以Linux為例)。
- Go語言環境:Geth是Go語言編寫的,需要安裝Go (建議1.16及以上版本)。
# 安裝Go (以Ubuntu為例,具體版本請參考Go官網) sudo apt update sudo apt install golang-go
- Geth客戶端:可以從以太坊官方GitHub下載編譯好的二進制文件或自行編譯。
# 下載并解壓Geth (示例版本v1.10.25,請替換為最新穩定版) wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.25-4167d45b.tar.gz tar -xzf geth-linux-amd64-1.10.25-4167d45b.tar.gz sudo cp geth-linux-amd64-1.10.25-4167d45b/geth /usr/local/bin/ geth version # 驗證安裝
- 文本編輯器:如VS Code, Vim等,用于編寫智能合約。
- Solidity編譯器 (solc):用于編譯智能合約。
# 安裝solc (通過npm,需先安裝Node.js) sudo apt install nodejs npm npm install -g solc
實驗步驟
設計創世區塊 (Genesis Block)
私有鏈的第一個區塊——創世區塊需要我們手動定義,創建一個名為custom.json的文件,內容如下:

{
"config": {
"chainId": 15, // 私有鏈ID,避免與公有鏈沖突 (1-14為公有鏈保留)
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {
// 預分配一些以太坊給指定地址,可選
"0x1234567890123456789012345678901234567890": {
"balance": "100000000000000000000" // 100 ETH
}
},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x4000", // 初始難度,私有鏈可以設置低一些方便挖礦
"extraData": "",
"gasLimit": "0xffffffff",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
說明:
chainId:私有鏈的唯一標識符,非常重要。alloc:預分配地址和余額,方便初始測試。difficulty:挖礦難度,私有鏈可以設置較低值,以便快速出塊。
初始化私有鏈
使用Geth的init命令,根據創世區塊文件初始化私有鏈數據目錄。
cd my_private_chain # 使用創世區塊文件初始化 geth --datadir "./data" init ../custom.json
執行成功后,會在./data目錄下生成geth、keystore、chaindata等文件夾,用于存儲鏈數據、賬戶信息和區塊數據。
啟動私有鏈節點
初始化完成后,啟動私有鏈節點。

geth --datadir "./data" --nodiscover --rpc --rpcaddr "0.0.0.0" --rpcport "8545" --rpcapi "db,eth,net,web3,personal" --mine --minerthreads 1 --console
參數說明:
--datadir "./data":指定數據目錄。--nodiscover:禁止節點自動發現其他節點,適用于私有鏈。--rpc:啟用HTTP-RPC服務。--rpcaddr "0.0.0.0":RPC服務監聽地址,0.0.0.0表示監聽所有網絡接口。--rpcport "8545":RPC服務端口,默認8545。--rpcapi "db,eth,net,web3,personal":允許通過RPC調用的API列表。--mine:開啟挖礦。--minerthreads 1:挖礦線程數,根據CPU核心數調整。--console:啟動后自動進入JavaScript控制臺,方便交互。
啟動后,節點會開始嘗試挖礦,由于我們設置了較低的難度,出塊會很快,如果沒有預分配地址或預分配地址沒有解鎖,節點會使用默認的coinbase地址挖礦。
私有鏈交互 (通過Geth控制臺)
當看到miner.start()返回的哈希值,并且區塊高度開始增長時,表示節點運行正常,我們可以在Geth控制臺進行以下操作:
-
查看賬戶信息:

// 查看當前賬戶列表 personal.listAccounts // 應該能看到預分配的地址(如果解鎖了)和默認的coinbase地址 // 查看當前使用的賬戶(默認為coinbase) eth.coinbase
-
創建新賬戶:
// 創建一個新賬戶,并設置密碼(注意:控制臺輸入密碼不會顯示) personal.newAccount("your_password") // 記住返回的新賬戶地址 -
解鎖賬戶:
// 解鎖賬戶,以便進行交易(如轉賬、部署合約) personal.unlockAccount(eth.coinbase, "your_coinbase_password") // 解鎖預分配的賬戶(如果需要) // personal.unlockAccount("0x1234567890123456789012345678901234567890", "alloc_password") -
轉賬 (發送ETH):
// 從coinbase賬戶向新創建的賬戶轉賬1 ETH // 參數:發送方,接收方,金額(單位:wei),單位 eth.sendTransaction({from: eth.coinbase, to: "0x新創建的賬戶地址", value: web3.toWei(1, "ether")}) // 查看交易狀態,返回交易哈希 // 交易被打包后,接收方余額會增加 -
查看余額:
// 查看指定地址的余額(單位:wei) web3.eth.getBalance("0x1234567890123456789012345678901234567890") // 轉換為ether顯示 web3.fromWei(web3.eth.getBalance("0x1234567890123456789012345678901234567890"), "ether") -
停止/開始挖礦:
// 停止挖礦 miner.stop() // 開始挖礦 miner.start(1) // 1為線程數
部署和調用智能合約 (可選)
- 編寫智能合約: 創建一個簡單存儲合約
SimpleStorage.sol:
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。



