Ich arbeite an einer privaten Blockchain, die aus 4 Knoten besteht, die auf verschiedenen Ports laufen.
Ich versuche, jeden Knoten dazu zu bringen, seine Verbindungen mit seinen Peers zu kommunizieren, damit das Netzwerk vollständig verbunden ist (jeder Knoten hat jeden anderen Knoten als Peer). Knoten entdecken jedoch nicht die Peers ihrer Peers.
Knoten 1 wird als bezeichnet bootstrap node
, und die Knoten 2 und 3 verbinden sich beim Start damit. Knoten 1 hat jedoch die Knoten 2 und 3 als Peers, während sie jeweils nur Knoten 1 als eigenen Peer haben. Ich möchte, dass sich die Knoten 2 und 3 gegenseitig entdecken.
Wenn ich außerdem admin.addPeer(node4's enode)
von Node 1 aus laufe, wird es nicht an seine Peers gesendet.
Meine Frage: Wie kann ich ein Peer-Discovery-Protokoll aktivieren, bei dem jeder Knoten alle seine Peers mit jedem seiner Peers kommuniziert?
Ich verstehe, dass es einige Hacks gibt, um dies zu umgehen. Pro Instanz kann ich einfach die enode
Adresse jedes der 3 anderen Knoten an jeden Knoten --bootnodes
in Geth weitergeben. Oder ich kann einfach admin.addPeer()
auf jedem seiner Peers verwenden admin.peers
. Aber ich denke, Geth hat das irgendwie automatisiert und ich würde gerne ihre Lösung verwenden.
StartNode-Skript:
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
[Bearbeiten]:
Ich hatte bereits jeden meiner Knoten so initialisiert, dass er auf Genesis JSON ( ./BCNetworkName.json
) meines privaten Netzwerks verweist, bevor ich das StartNode-Skript ausführte.geth --datadir ./NodeN init BCNetworkName.json
Bootnodes sind eine billige und effektive Lösung, um die Selbsterkennung des Netzwerks zu unterstützen, aber sie müssen eine geeignete Genesis-Datei einholen, um Ihr Netzwerk zu isolieren.
Wenn Sie geth ausführen, wird der Genesis-Block von Grund auf neu erstellt und beginnt dann mit der Synchronisierung mit Peers bei Block 1.
Für Ihre private Blockchain müssen Sie diese Datei allen Ihren Knoten zur Verfügung stellen, damit sie miteinander kommunizieren können, ohne Addpeers ausführen zu müssen.
Weitere Informationen zum Genesis-Block finden Sie hier
Wenn Sie mit Docker vertraut sind, können Sie dieses Github-Repository überprüfen, das mit dem Geth-Image spielt, um ein privates Netzwerk zu betreiben. Sie können viel über die Selbstfindung von Gleichaltrigen lernen.
3mrsh
geth --datadir ./NodeN init BCNetworkName.json
auf jedem Knoten ausgeführt, bevor ich das StartNode-Skript ausgeführt habeHerr Riggi
3mrsh
bootnode -genkey bootnode.key
. Dann war mein Skript zum Starten des Bootnode:geth --networkid 63261 --mine --minerthreads 1 --datadir . --rpc --rpcport "8545" --port "30303" --rpccorsdomain "*" --nat "any" --rpcapi eth,web3,personal,net --unlock 0 --password "./node1password.sec" --ipcdisable console 2>> geth.log
3mrsh
Herr Riggi
--nodekey /opt/bootnode/boot.key
3mrsh