私有鏈乙太坊握手失敗 創世區塊不匹配
我正在兩個虛擬機之間建立一條私有鏈。
第一個節點開始挖礦成功,兩個VM之間的連接沒有問題。
但是當我嘗試將第二個節點連接到第一個節點時,我收到了這個錯誤:
調試
$$ 05-08|09:21:11 $$乙太坊握手失敗
id=e8d86dae37655a1b conn=dyndial err=“創世區塊不匹配 - dfc3e94e54007bba (!= 573969da5d11c81a)”
我將 genesis.json 文件從第一個節點複製到第二個節點,它們怎麼會不匹配?
我用來啟動第一個節點的命令是:
geth --identity nodeBcDev1 --nodiscover --networkid 9191 --port 60830 --maxpeers 5 --lightkdf --cache 512 --rpc --rpccorsdomain "*" --datadir "C:\BlockChain\Data" --minerthreads 2 --mine
從第二個節點連接的命令:
geth --networkid 9191 --port 60830 --rpc --rpcport 8545 --rpccorsdomain "*" --datadir "C:\BlockChain\Data" --minerthreads 2 --bootnodes "enode://41cc17dydeefide8018c39054653d638430c3abfe3f77g009dc9294h0e8a9d62a5b819fb5810391fddab560d4c1bf9d1c9b110c6fbe603731388a993751bd95e@10.0.0.1:60830" --verbosity 4
最後是 genesis.json 文件:
{ "nonce" : "0x0000000000000055", "mixHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "difficulty" : "0x1", "gasLimit" : "0x800000", "timestamp" : "0x0", "extraData" : "", "coinbase" : "0x0000000000000000000000000000000000000000", "alloc" : {}, "config" : { "chainId": 9191, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 } }
我的客戶端 ID 與網路 ID 匹配,並且我知道連接成功,因為握手失敗上方的行是:
DEBUG[05-08|09:21:11] Ethereum peer connected id=df887467936a7c9b conn=dyndial name=Geth/v1.8.0-unstable/linux-amd64/go1.9.4
真的很迷茫……
這是設置本地網路的常見問題。有四個主要問題可以停止同步塊。
- 不匹配的創世區塊。
- 沒有添加引導節點。
- 網路 ID 不匹配。
- 無法訪問節點系統
如何檢查兩個或多個節點的創世塊是否相同?
在您的 geth 控制台中鍵入以下命令。
> admin.nodeInfo.protocols.eth.genesis
0x981XXXXXXXXXXXXxxxxxxxxxXXXXXXXXXxxxxxxXXXXXxxxXXXXXxxxXXx 加入兩個節點,兩個創世文件應該匹配。如果它不匹配的geth節點將拒絕連接,因為重放攻擊。即你需要用相同的 genesis.json 來初始化你的節點。請不要編輯 genesis.json
–無發現:
當您使用此選項時,您的節點將不會暴露給外部系統進行掃描。那麼如何將此節點添加到另一個節點,使用–bootnodes或admin.addPeer(’’);
網路 ID 不匹配
在執行您的 geth 節點時,您的網路 ID 可能不匹配,或者您可能忘記添加。在 geth 命令時使用 –networkid 。
無法訪問節點系統
由於某些網路防火牆設置,您的埠無法訪問。與 AWS 一樣,您需要為 EC2 實例添加要啟用的 tcp 埠。
有關更多詳細資訊,請參閱以下連結: https ://medium.com/mercuryprotocol/how-to-create-your-own-private-ethereum-blockchain-dad6af82fc9f
我解決了同樣的問題
$ geth init genesis.json
在啟動節點之前。