Go-Ethereum

對等發現在專用網路上不起作用

  • August 10, 2017

我正在使用以下命令執行 3 個節點:

geth --verbosity 4 --autodag --nat any --genesis /opt/blockchain/genesis.json \
    --datadir /opt/blockchain/data --networkid 4828 --port 30303 --rpc \
    --rpcaddr 10.48.247.25 --rpcport 8545 --rpcapi db,eth,net,web3,admin \
    --rpccorsdomain '*' --fast --mine --ipcdisable

每個genesis.json file節點都是相同的(我已經對它們進行了校驗)。

發生的情況是節點無法單獨找到彼此,我必須手動連接它們 throw admin.addPeer

為了測試它,我在控制台中創建了一個間隔循環,admin.peers每 1 秒列印一次:

var interval = setInterval(function(){console.log(admin.peers)}, 1000);

如果如果將節點連接1到節點21--2),則它們會保持相互連接和斷開連接。但是節點3無法連接到其中任何一個。

為什麼會這樣?

每個 geth 實例都需要發現至少一個與您的私有網路的其餘部分連接的其他實例。

您可以指定一個(或多個)geth 實例作為引導節點,所有其他實例首先連接到該引導節點,以便在您的私有網路中找到其他對等點。要指定非引導節點實例最初應連接到的引導節點,請使用以下命令行參數(來自https://github.com/ethereum/go-ethereum/wiki/Connecting-to-the-network#connecting-to -網路):

geth --bootnodes "enode://pubkey1@ip1:port1 [enode://pubkey2@ip2:port2 [enode://pubkey3@ip3:port3]]"

您也可以指定一個(或多個)節點作為其他對等方將始終連接到的靜態節點(來自https://github.com/ethereum/go-ethereum/wiki/Connecting-to-the-network#static -nodes ) 通過/static-nodes.json為每個 geth 實例添加具有以下內容的文件:

[
 "enode://f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae2e826f293c481b5325f89be6d207b003382e18a8ecba66fbaf6416c0@33.4.2.1:30303",
 "enode://pubkey@ip:port"
]

如果您的 static-nodes.json 文件中只有一個 geth 實例,請記住刪除逗號“,”(任何人都可以幫助指導在同一機器和同一網路上執行兩個 geth 客戶端嗎?)。

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