eth
Geth 安裝:
1. 安裝 go 語言
安裝 go 主要是為了去編譯 go-ethereum 源碼
平日里一般我都是用 gvm 去安裝和管理不同版本的 go尿扯,但 gvm 在阿里云上默認(rèn)是連不上所需要的 golang 下載服務(wù)器的奠涌。于是直接用下面一條命令搞定。
yum install golang
安裝的版本不是最新的但也還是可以用的擂错。
# go version
go version go1.9.6 linux/amd64
2. 安裝 git
安裝 git 主要是為了拉取 go-ethereum 源碼
直接通過 yum 安裝的版本比較老
我是通過下面的命令安裝的:
yum install
https://centos6.iuscommunity.org/ius-release.rpm
yum install epel-release
yum install git2u
得到下面的 git 版本
# git version
git version 2.16.4
安裝go編譯器
sudo apt-getinstall -ybuild-essential golang
3. 最后,構(gòu)建geth
cdgo-ethereum
make geth
gethhelp
把getn加入到配置文件里etc/profile
#geth
exportPATH=$PATH:/root/soft/go-ethereum/build/bin
source/tc/profile
[root@BC-OL-Host-1/]# vim ~/.bashrc
4. 鏈接節(jié)點命令:
nohup geth --syncmode
"full" --cache 2048 --datadir /root/data/ethData --ipcpath./geth.ipc --rpc --rpcaddr 0.0.0.0 --port 8445 --maxpeers 999 &
參考地址:https://blog.csdn.net/ULi_cloud/article/details/80668590
https://blog.csdn.net/qq_25870633/article/details/82931782
性能調(diào)節(jié)選項:
–cache value 調(diào)整內(nèi)存分配 最小16MB,默認(rèn)128MB
–trie-cache-gens value 內(nèi)存中存儲節(jié)點數(shù)收津,默認(rèn)為120
--datadir “/your/database/path”
指定以太坊數(shù)據(jù)和密鑰目錄伙窃,在開啟私有鏈時需指定私有鏈目錄偏友,默認(rèn)為公有鏈目錄。
--ipcpath "geth.ipc" 指定IPC接口
--rpcaddr value 指定HTTP-RPC 服務(wù)監(jiān)聽地址对供,默認(rèn)為“l(fā)ocalhost”
--rpcport value 指定HTTP-RPC 服務(wù)監(jiān)聽端口位他,默認(rèn)為8545
--maxpeers value 設(shè)置允許最大連接節(jié)點數(shù)目,默認(rèn)為25
--ws 開啟 WS-RPC 服務(wù)
--wsaddr value 指定WS-RPC 服務(wù)監(jiān)聽地址产场,默認(rèn)為 “l(fā)ocalhost”
--wsport value 指定 WS-RPC 服務(wù)監(jiān)聽端口鹅髓,默認(rèn)值:8546
--wsapi value 指定WS-RPC 開啟API,默認(rèn)為 “eth,net,web3”
--wsorigins value 指定允許“websockets”請求的地址
5. 監(jiān)控同步狀態(tài)
可以通過下面的命令 attach 到運行的節(jié)點京景,這里的 data 為上面啟動 geth 時指定的 datadir 目錄窿冯。
# geth attachdata/geth.ipc
Welcome to the
Geth JavaScript console!
instance:
Geth/SamewayProdNode1/v1.8.13-stable-225171a4/linux-amd64/go1.9.6
modules:
admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0
web3:1.0
然后調(diào)用 eth.syncing, 如下面所示,可以看到當(dāng)前的同步狀態(tài)确徙,我這邊節(jié)點已經(jīng)運行一段時間了醒串,可以看到當(dāng)前區(qū)塊和最新區(qū)塊高度是比較接近的。剛開始這兩個數(shù)字差別是比較大的鄙皇,在運行一天后這兩個數(shù)字就開始比較接近芜赌,給人的感覺好像是快要同步完了,但實際上要再跑一天左右才能真正同步完成伴逸。
> eth.syncing
{
currentBlock: 6143193,
highestBlock: 6143296,
knownStates: 91512910,
pulledStates: 91498893,
startingBlock: 0
}
在同步的過程中我們通過 eth.blockNumber 去查看當(dāng)前區(qū)塊號的話會顯示為0
> eth.blockNumber
0
這個時候看 geth 的輸出的話缠沈,可以看到下面的日志
INFO [08-14|04:32:20] Imported new block headers
INFO [08-14|04:32:24] Imported new block receipts
INFO [08-14|04:32:33] Imported new state entries
可以通過 net.peerCount 來看自己的這個節(jié)點連了多少個其它節(jié)點進(jìn)行數(shù)據(jù)同步。如果返回結(jié)果為0,就要自查一下了洲愤。
> net.peerCount
8
當(dāng)看到 geth 日志里是下面的信息
# tail nohup.out
INFO
[08-16|14:20:15.307] Imported new chain segment blocks=1 txs=117 mgas=7.979
elapsed=761.592ms mgasps=10.477 number=6156276 hash=56b327…03c068 cache=905.73mB
INFO
[08-16|14:20:32.926] Imported new chain segment blocks=1 txs=42 mgas=2.325
elapsed=143.505ms mgasps=16.204 number=6156277 hash=f577a7…1c6104 cache=905.59mB
INFO [08-16|14:20:35.940]
Imported new chain segment blocks=1 txs=121 mgas=7.992 elapsed=776.752ms
mgasps=10.289 number=6156278 hash=c92744…2d1448 cache=905.67mB
調(diào)用 eth.blockNumber 得到的數(shù)字不再是 0 了
> eth.blockNumber
6156294
恭喜你颓芭,區(qū)塊數(shù)據(jù)已經(jīng)同步完成了,該節(jié)點可以接收交易請求了柬赐。
6. 常見問題
問題: 如果非正常關(guān)閉 geth 進(jìn)程亡问,比如機(jī)器強(qiáng)制重啟的時候,如果這個時候以太坊正在執(zhí)行數(shù)據(jù)庫寫操作肛宋,下次啟動 geth 進(jìn)程時就很容易碰到下面的錯誤信息:
Fatal: Error
starting protocol stack: missing block number for head header hash
方案: 很不幸玛界,目前還沒有特別好的解決辦法
需要通過下面的命令移除區(qū)塊鏈數(shù)據(jù)并從新同步數(shù)據(jù)
# geth removedb--datadir data
問題: 數(shù)據(jù)同步經(jīng)常落后主網(wǎng)若干區(qū)塊,落后也不是很多悼吱,往往也就幾十個區(qū)塊慎框,等段時間可以完成同步,可過段時間又落于主網(wǎng)了
方案: 確保節(jié)點監(jiān)聽端口 30303 已經(jīng)在防火墻打開后添,此端口在防火墻放行后笨枯,可大大提高主網(wǎng)數(shù)據(jù)同步的穩(wěn)定性
有相關(guān)需求的,可以定制交易所服務(wù)