Go-Ethereum

geth 不同步開箱即用

  • February 1, 2019

我有一個全新安裝的 Ubuntu 16.04,我按照手冊設置 geth

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum

在開始 geth 後它掛斷了

I0925 07:53:21.655924 node/node.go:308] IPC endpoint opened: /home/username/.ethereum/geth.ipc
I0925 07:53:21.656651 p2p/server.go:576] Listening on [::]:30303

0 個對等點,沒有任何反應,沒有同步。htop 顯示 CPU 中的偶爾活動,控制台回答但顯示 0 個對等點:

geth attach
Welcome to the Geth JavaScript console!

instance: Geth/v1.5.0-unstable/linux/go1.6.2
coinbase: 0x4c49eed9cc104695593cd2a9745ce108e28efc09
at block: 0 (Thu, 01 Jan 1970 03:00:00 MSK)
datadir: /home/username/.ethereum
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

> net.listening
true
> net.peerCount
0

難道我做錯了什麼?

引導節點已geth關閉

我已經測試過,對等發現節點間歇性地/大部分都關閉了。


2016 年 9 月 25 日 08:19 更新

我懷疑geth由於最近的記憶體錯誤攻擊和垃圾郵件/ IO 事務攻擊導致客戶端重新啟動時,許多客戶端試圖獲得連接,因此引導節點擁塞。

telnet能夠間歇性地連接到一些引導節點,但geth一個多小時都找不到任何對等節點。

我幾個小時前開始的一個單獨的geth節點在 25 個對等連接上執行良好。

我已經檢查了我已同步到的最新塊的塊雜湊,它與 etherscan.io #2,287,735匹配:

> admin.peers
[]
> eth.blockNumber
2287735
> eth.getBlock(eth.blockNumber).hash
"0x53a331f2c93a796170e3af16f66b998fd0ed5acb8caccb79c2431e111b67419b"

在此處輸入圖像描述


2016 年 9 月 25 日 23:17 更新

@jamiepitts-ethereum 在reddit上說

請立即對此進行測試並回復是否找到對等點並開始為您同步。

在 geth 1.4.12 中,我現在能夠找到對等點並成功開始同步。

我已經測試過,我以前的非同步節點現在會自動同步。我重新測試了與下面引導節點的連接,前 3 個立即連接。

了解導致許多geth節點出現這種不同步情況的原因會很有趣。更新其 bootnode 伺服器上的節點軟體?重新啟動他們的引導節點伺服器?在他們的引導節點伺服器上提供更多連接插槽?


2016 年 9 月 26 日 12:09 更新

有一個geth名為Geth 1.4.13: Into the Woods 的新版本(各種 DoS 修復),您可以從https://github.com/ethereum/go-ethereum/releases/tag/v1.4.13下載。

包含原始碼和一些不同作業系統版本的 .zip 文件已從此頁面提供。下載適合您的作業系統的版本(如果有,或者等到它可用)。

Ubuntu ppa 現在包含http://ppa.launchpad.net/ethereum/ethereum/ubuntu/ trusty/main bootnode amd64 1.4.13+87trusty-0ubuntu1這個新版本,因此只需更新您的 ubuntu 安裝以獲取新版本。

此版本應與其他對等方同步(在上次更新中已解決問題),但與版本 1.4.12 相比,應更快地處理 I/O 垃圾郵件事務。


臨時解決方法

請參閱如何使用 admin.addPeer() 命令從我的同步 geth 節點中提取創建對等節點列表以手動粘貼到我的非同步 geth 節點中?admin.addPeer(...)有關可以粘貼到geth控制台以啟動節點同步的命令列表。


我的測試

2016 年 10 月 1 日更新 13:51 請注意,以下測試不是確定的,因為引導節點通常在埠 30301 上使用 UDP 協議執行,但我使用 TCP 30303 進行測試。請參閱為什麼 java Ethereum 使用 UDP?- 不只是 devp2p TCP乙太坊中的 Enode ID 是什麼?.

檢查geth版本

user@Kumquat:~$ geth version
Geth
Version: 1.4.12-stable
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.5.1
OS: linux
GOPATH=/home/user/go
GOROOT=/usr/lib/go

引導節點在https://github.com/ethereum/go-ethereum/blob/master/cmd/utils/bootnodes.go#L25-L30geth中列出,它們是:

discover.MustParseNode("enode://a979...163c@52.16.188.185:30303"), // IE
discover.MustParseNode("enode://de47...c786@54.94.239.50:30303"),  // BR
discover.MustParseNode("enode://1118...5082@52.74.57.123:30303"),  // SG

// ETH/DEV Cpp Bootnodes
discover.MustParseNode("enode://979b...37f9@5.1.83.226:30303"),

測試第一台伺服器:

user@Kumquat:~$ telnet 52.16.188.185 30303
Trying 52.16.188.185...
telnet: Unable to connect to remote host: Connection timed out

測試第二台伺服器:

user@Kumquat:~$ telnet 54.94.239.50 30303
Trying 54.94.239.50...
telnet: Unable to connect to remote host: Connection timed out

測試第三台伺服器:

user@Kumquat:~$ telnet 52.74.57.123 30303
Trying 52.74.57.123...
telnet: Unable to connect to remote host: Connection timed out

測試第四台伺服器:

bok@Kumquat:~$ telnet 5.1.83.226 30303
Trying 5.1.83.226...
telnet: Unable to connect to remote host: Connection refused

測試網引導節點伺服器上顯示的預期結果

這不是 bootnode 伺服器的正常響應。這是測試網的引導節點伺服器,列在https://github.com/ethereum/go-ethereum/blob/master/cmd/utils/bootnodes.go#L37-L38中:

discover.MustParseNode("enode://e453...d6b8@94.242.229.4:40404"),
discover.MustParseNode("enode://8c33...4592@94.242.229.203:30303"),

第二個引導節點伺服器按預期響應,而不是第一個:

user@Kumquat:~$ telnet 94.242.229.4 40404
Trying 94.242.229.4...
telnet: Unable to connect to remote host: Connection refused

user@Kumquat:~$ telnet 94.242.229.203 30303
Trying 94.242.229.203...
Connected to 94.242.229.203.
Escape character is '^]'.
Connection closed by foreign host.

引用自:https://ethereum.stackexchange.com/questions/8823