Go-Ethereum

如何從兩臺本地機器乙太坊連接到 geth

  • March 8, 2018

我是乙太坊的新手,並嘗試了從兩個本地機器節點連接測試網的一切。我嘗試通過 admin.addPeers(nodeUrl) 在單台機器上執行兩個控制台並且可以連接。當我嘗試對使用相同網路 ID 的不同機器進行相同操作時,它顯示對等計數為零。請幫助解決這個問題。提前致謝

由於您在兩台不同的機器上執行兩個節點,因此您需要在連接時提及節點的 IP 地址addPeer(enodeURI)

詳細攻略:

  • 您需要在希望啟動節點的每台機器上擁有相同的創世文件。
  • 所有節點都應該具有相同的--networkid
  • 每個 geth 實例的--rpcportand--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"

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