如何在本地 Geth 專用網路上獲取節點以發現其對等點的對等點
我正在開發一個私有區塊鏈,該區塊鏈由在不同埠上執行的 4 個節點組成。
我試圖讓每個節點將其連接傳遞給它的對等點,因此網路將是完全連接的(每個節點都有其他節點作為它的對等點)。但是,節點不會發現其對等點的對等點。
節點 1 被指定為
bootstrap node
,節點 2 和 3 在啟動時連接到它。但是,節點 1 將節點 2 和 3 作為其對等節點,而它們每個都將節點 1 作為其自己的對等節點。我希望節點 2 和 3 能夠相互發現。此外,當我
admin.addPeer(node4's enode)
從節點 1 執行時,它不會廣播給它的對等方。我的問題:如何啟用對等發現協議,其中每個節點都將其所有對等點與每個對等點通信?
我知道有一些技巧可以解決這個問題。例如,我可以簡單地將其他 3 個節點的
enode
地址傳遞給--bootnodes
Geth 中的每個節點。或者我可以只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 圖像來執行私有網路。你可以學到很多關於同伴自我發現的知識。