geth 不同步開箱即用
我有一個全新安裝的 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-L30
geth
中列出,它們是: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.