Go-Ethereum

私有鏈乙太坊握手失敗 創世區塊不匹配

  • February 28, 2022

我正在兩個虛擬機之間建立一條私有鏈。

第一個節點開始挖礦成功,兩個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

真的很迷茫……

這是設置本地網路的常見問題。有四個主要問題可以停止同步塊。

  1. 不匹配的創世區塊。
  2. 沒有添加引導節點。
  3. 網路 ID 不匹配。
  4. 無法訪問節點系統

如何檢查兩個或多個節點的創世塊是否相同?

在您的 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

在啟動節點之前。

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