如何從兩臺本地機器乙太坊連接到 geth
我是乙太坊的新手,並嘗試了從兩個本地機器節點連接測試網的一切。我嘗試通過 admin.addPeers(nodeUrl) 在單台機器上執行兩個控制台並且可以連接。當我嘗試對使用相同網路 ID 的不同機器進行相同操作時,它顯示對等計數為零。請幫助解決這個問題。提前致謝
由於您在兩台不同的機器上執行兩個節點,因此您需要在連接時提及節點的 IP 地址
addPeer(enodeURI)
。詳細攻略:
- 您需要在希望啟動節點的每台機器上擁有相同的創世文件。
- 所有節點都應該具有相同的
--networkid
- 每個 geth 實例的
--rpcport
and--port
應該是不同的。- 如果在同一台機器上工作,每個 geth 實例應該有不同的
--datadir
.啟動 geth 實例:
節點 1:
geth --genesis path/to/genesis.json --datadir path/to/directory --networkid 1234 --port 30301 --rpcport 8101 console
節點 2:
geth --genesis path/to/genesis.json --datadir path/to/directory --networkid 1234 --port 30302 --rpcport 8102 console
--maxpeers
如果您願意,您可以添加類似的命令--nodiscover
。啟動這些實例後,在控制台上檢查類似的消息:
I0829 13:30:07.347738 3987 backend.go:303] Successfully wrote genesis block. New genesis hash = 82b6159155c00fb0b420046012a02257a176ad5dcfce4be4a15da39c166518e2
如果是這種情況,您就成功地使用私有區塊鏈啟動了節點。如果您看到類似於 的消息
Warning: Wrote default ethereum genesis block
,則說明有問題。連接節點:
節點 1:(在 JavaScript 控制台上)
admin.nodeInfo.enode
輸出將類似於:
"enode://da97197a3335806658f17fdc167e943bd040fdf59ed882389d5f87b29f31362b12f13bd58438b7b5619497b54bab252a696cafc7cdd9696c4db1cacdb7e6a962@[::]:30301"
觀察 URI 末尾的埠號是 30301。
節點 2:
在節點 2 上執行相同的命令,最後你會得到類似的輸出 30302:
"enode://47e61e304d802fb98403fbf877e1018d13044630a16eb9c15c1d0fb139d465e02d995acd239768f6ced04579d9639d8a75c73c30d7443a9d6d6146a44c8b5e7b@[::]:30302"
要連接這些節點,請找出節點 2 的 IP 地址。由於這是一個本地網路,每台機器都應該有一個唯一的私有 IP 地址。使用該
addPeer(enodeURI)
功能時,[::]
應將 enodeURI 中的 替換為執行該節點的機器的 IP 地址。現在,在節點 1 上:admin.addPeer("enode://47e61e304d802fb98403fbf877e1018d13044630a16eb9c15c1d0fb139d465e02d995acd239768f6ced04579d9639d8a75c73c30d7443a9d6d6146a44c8b5e7b@10.0.0.123:30302")
此命令返回true後,
net.peerCount
應返回 1 並admin.peers
應返回添加/連接的節點的詳細資訊。在連接之前,檢查是否在兩個節點上都net.listening
返回true 。資料來源:
Roland 的回答很好,但您應該記住,geth(以及迄今為止的所有乙太坊)綁定到相同的預設埠,這意味著您必須在同一主機上執行多個實例(即 127.0.0.1)時更改它們的預設值.
為每個實例增加預設埠然後創建(bash)腳本以獨立執行它們(作為後台程序)非常容易。
如果您希望 geth 實例之間具有更多獨立性,請考慮為每個實例創建一個單獨的數據目錄(從另一個答案修改**–datadir命令行參數):**
--datadir "~/privethnet/geth_client" --datadir "~/privethnet/geth_bootstrap"