注:由于版本沖突問題,請嚴格按如下介紹版本進行安裝
安裝所需資料:通過網盤分享的文件:區塊鏈_CSDN
鏈接: https://pan.baidu.com/s/1dn5xcLtwwFy90xhOWKiWyA?pwd=zgzs 提取碼: zgzs?
--來自百度網盤超級會員v6的分享
一、安裝運行Geth所需要的工具
下載并安裝Git、vim、gcc-c++、ntp組件、nodejs以及添加epel第三方安裝源。這些工具的說明如下:
git:安裝相關的組件,下載安裝各類開源代碼與工具的利器;
vim:文本編輯工具,取代vi;
gcc-c++:c/c++編譯工具,用于golang下部分c庫的編譯以及truffle組件的編譯
ntp:網絡時鐘同步組件;Ethereum的rpc網絡需要時間同步;
nodejs:ethereum前端開發JavaScript包管理軟件
epel:網絡第三方的linux安裝包源
yum update -y && yum install vim git gcc-c++ ntp epel-release nodejs -y
安裝編譯C/C++項目所需要的庫:
sudo yum install gcc gcc-gcc++ glibc-devel libstdc++-devel
二、安裝cmake3.15.2
# 下載
wget https://cmake.org/files/v3.15/cmake-3.15.2.tar.gz# 解壓
tar zxvf cmake-3.15.2.tar.gz# 移動文件夾
mv cmake-3.15.2 /usr/local/# 跳轉
cd /usr/local/cmake-3.15.2# 運行配置腳本
./bootstrap# 編譯cmake
gmake# 安裝cmake
gmake install# 配置環境變量
echo "export PATH=/usr/local/cmake-3.15.2/bin:$PATH" >> /etc/profile# 使環境變量生效
source /etc/profile# 驗證安裝
cmake --version
下載由于源問題或者網絡問題失效直接從文章開頭網盤資料中獲取Cmake3.15.2。
三、安裝Golang1.21.0
Geth使用Golang編譯的,所以需要安裝Golang。
安裝Golang,執行如下命令:
# 下載go1.21.0
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz# 解壓
tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz# 環境變量配置方法①
echo "export GOROOT=/usr/local/go" >> /etc/profile
echo "export PATH=/usr/local/go/bin:$PATH" >> /etc/profile
## 使配置生效
source /etc/profile# 環境變量全局配置方法②
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
## 使全局配置生效
source ~/.bashrc# 驗證
go version
四、安裝geth1.9.10
由于安裝過程中存在多種關于版本沖突問題,這里不推薦通過源碼編譯go-ethereum項目進行geth的安裝。如下使用二進制文件安裝(推薦)
下載鏈接地址:Downloads | go-ethereum
或者從文章開頭網盤資料中下載geth1.9.10壓縮包。
tar -zxvf geth-linux-amd64-1.9.10-58cf5686.tar
創建軟連接,移動文件內容到 /usr/local/bin/ 目錄下(這里環境變量默認已經確定,如未指定,請自行修改 /etc/profile 文件)
# 進入geth目錄
cd geth-linux-amd64-1.9.10-58cf5686# 使用root權限創建軟鏈接
sudo ln -s $(pwd)/geth /usr/local/bin/geth# 驗證命令是否可用
geth version
五、關閉防護墻
# 查詢防火墻狀態
systemctl status firewalld
顯示正在running,關閉防護墻
# 關閉防火墻
systemctl stop firewalld# 再次查詢防火墻狀態
systemctl status firewalld
六、Geth初始化
編輯創世塊 genesis.json
# 創建文件夾
mkdir privatechain# 編輯創世塊文件 genesis.json
vim genesis.json# 文件內容:下方本地測試的chainId填寫1337
{"config": {"chainId": 1337,"homesteadBlock": 0,"eip150Block": 0,"eip155Block": 0,"eip158Block": 0,"ByzantiumBlock": 0,"constantinopleBlock": 0, "petersburgBlock": 0},"alloc": {"0xbdda794a097b41309700fdc5bdba880a7763c738": {"balance": "100"}},"coinbase": "0x0000000000000000000000000000000000000000","difficulty": "0x2","extraData": "","gasLimit": "0xffffffff","nonce": "0x0000000000000042","mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000","parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000","timestamp": "0x00"
}# init初始化,--datadir指定數據存儲目錄
geth init genesis.json --datadir ./data
啟動私鏈
geth --datadir ./data \--networkid 1337 \--port 30303 \--rpc \--rpcaddr "0.0.0.0" \--rpcport 8545 \--rpcapi 'db,net,eth,web3,personal' \--rpccorsdomain '*' \--ws \--wsaddr "0.0.0.0" \--wsport 8546 \--allow-insecure-unlock \console 2>>1.log
為啟動私鏈單獨設置腳本文件
# 編輯腳本文件
vim startPrivateChain.sh# 添加如下16行全部內容
#!/bin/bash# 啟動 Geth 私有鏈節點
geth --datadir ./data \--networkid 1337 \--port 30303 \--rpc \--rpcaddr "0.0.0.0" \--rpcport 8545 \--rpcapi 'db,net,eth,web3,personal' \--rpccorsdomain '*' \--ws \--wsaddr "0.0.0.0" \--wsport 8546 \--allow-insecure-unlock \console 2>>1.log# 給文件賦權
chmod 777 startPrivateChain.sh#啟動
./startPrivateChain.sh
初始化完成后進入data文件夾目錄,可以查詢到生成了geth與keystore文件,其中keystore為之后挖礦礦工的密碼,即私鑰,如下5c993678d3358462619906c9d5fbc93e98f1490a為某賬戶的賬戶id,需要通過解密該文件得到用戶的私鑰。
這里展示獲取私鑰的 t.py 文件代碼塊,我在挖礦前給用戶5c993678d3358462619906c9d5fbc93e98f1490a設置了密碼為123,執行如下代碼,生成用戶私鑰。
from eth_account import Account
import json# 替換為你的 keystore 文件路徑
with open("UTC--2025-06-17T03-05-18.222102348Z--5c993678d3358462619906c9d5fbc93e98f1490a") as keyfile:encrypted_key = keyfile.read()password = "123" # 你設置的密碼private_key = Account.decrypt(encrypted_key, password)print("Private key (hex):", private_key.hex())
七、使用錢包metaMask鏈接賬戶
geth基本指令操作
#新增用戶,后面的為密碼
personal.newAccount("123")#可以查看到所有的用戶
eth.accounts#單獨查看某個用戶
eth.accounts[0]#查看錢
eth.getBalance(eth.accounts[0])#挖礦可以使coinbase對應的賬戶增加資產,可以將pending狀態的交易打包完成
#開始挖礦,轉賬交易和truffle部署合約的時候都需要挖礦才能實現
miner.start()#停止挖礦
miner.stop()##轉賬之前需要進行解鎖賬戶,from需要解鎖
personal.unlockAccount(eth.accounts[0], "123")## 執行完轉賬操作后需要進行挖礦,將交易打包進區塊中
## value后面的是轉賬金額,1表示數量,wei表示單位,表示轉了1個wei
eth.sendTransaction({from:eth.accounts[0], to: "xxxx", value: web3.toWei(1)})
通過創建的賬戶,通過步驟六中python代碼獲取到私鑰。
在MetaMask中新建網絡連接
添加自定義網絡,ip自行修改,鏈id為1337,如果之前鏈id不為1337,需要刪除初始化后生成目錄文件,重新修改創世塊genesis.json文件中chainId。
創建成功后,通過私鑰引入賬戶
導入即可
八、補充:挖礦+交易
# 開始挖礦
# start的參數表示挖礦使用的線程數,若不寫表示使用最大線程數。返回true或null表示執行成功
miner.start()# 停止挖礦
miner.stop()
首次啟動挖礦會先生成挖礦所需的 DAG 文件,這個過程有點慢,等進度達到 100% 后,就會開始挖礦。
注:進行合約交易過程中,要使私鏈處于挖礦狀態下
其他交易處理請參考之前關于區塊鏈的相關博客(該博文使用私鏈替換測試鏈Ganache)
區塊鏈使用連接工具demo測試MetaMask、Remix和Ganache-CSDN博客
如下為本博文參考相關內容鏈接(以下內容較老,未介紹現如今的版本沖突問題,僅供參考)
區塊鏈geth的創建,通過truffle把合約部署到geth上,多個節點的同步----ubuntu_geth怎么輕節點同步 國內能用的enode-CSDN博客
CentOS7下安裝Geth,搭建以太坊私有鏈_centos7安裝geth,搭建以太坊私有鏈-CSDN博客
在Ubuntu下使用Geth搭建自己的以太坊私有鏈_ubantu geth miner.start-CSDN博客