Go-Ethereum

如何在本地 Geth 專用網路上獲取節點以發現其對等點的對等點

  • October 29, 2018

我正在開發一個私有區塊鏈,該區塊鏈由在不同埠上執行的 4 個節點組成。

我試圖讓每個節點將其連接傳遞給它的對等點,因此網路將是完全連接的(每個節點都有其他節點作為它的對等點)。但是,節點不會發現其對等點的對等點。

節點 1 被指定為bootstrap node,節點 2 和 3 在啟動時連接到它。但是,節點 1 將節點 2 和 3 作為其對等節點,而它們每個都將節點 1 作為其自己的對等節點。我希望節點 2 和 3 能夠相互發現。

此外,當我admin.addPeer(node4's enode)從節點 1 執行時,它不會廣播給它的對等方。

我的問題:如何啟用對等發現協議,其中每個節點都將其所有對等點與每個對等點通信?

我知道有一些技巧可以解決這個問題。例如,我可以簡單地將其他 3 個節點的enode地址傳遞給--bootnodesGeth 中的每個節點。或者我可以只admin.addPeer()在它的每個同行上使用admin.peers. 但我認為 Geth 以某種方式實現了這種自動化,我想使用他們的解決方案。

啟動節點腳本:

geth --networkid 63261 --mine --minerthreads 1 --datadir . --rpc --rpcport "8547" --port "30305" --rpccorsdomain "*" --nat "any" --rpcapi eth,web3,personal,net --unlock 0 --password "./node3password.sec" --ipcdisable --bootnodes "node1enode" console 2>> geth.log

$$ Edit $$: ./BCNetworkName.json在執行 StartNode 腳本之前,我已經將每個節點初始化為指向我的專用網路的 Genesis JSON ( )。geth --datadir ./NodeN init BCNetworkName.json

Bootnodes 是一種幫助網路自我發現的廉價而有效的解決方案,但它們需要趕上適當的創世文件來隔離您的網路。

當你執行 geth 時,創世塊將從頭開始重新創建,然後它開始與塊 1 的對等點同步。

對於您的私有區塊鏈,您需要將此文件提供給您的所有節點,以便它們可以相互通信而無需執行 addpeers。

您可以在此處找到有關創世塊的更多資訊

如果你熟悉 docker,你可以查看這個Github 儲存庫,它使用 geth 圖像來執行私有網路。你可以學到很多關於同伴自我發現的知識。

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