Ich habe eine private Blockchain auf zwei verschiedenen Maschinen erstellt. Jetzt möchte ich, dass sich diese Knoten als "Peers" miteinander verbinden. Ich benutze die geth
Konsole.
Ich habe folgenden Befehl probiert:
> admin.addPeer("enode://3414c01c19aa75a34f2dbd2f8d0898dc79d6b219ad77f8155abf1a287ce2ba60f14998a3a98c0cf14915eabfdacf914a92b27a01769de18fa2d049dbf4c17694@10.10.23.196:30301");
Hier 10.10.23.196
ist die IP der 2. Maschine und 30301
der Port, auf dem sie läuft.
Ein true
Wert wird angezeigt, aber wenn ich Folgendes eingebe:
> admin.peers
[]
wird angezeigt.
Stimmt etwas mit dem Ansatz nicht? Wenn es hilft, verwende ich den folgenden Befehl, um das Geth auf beiden Computern auszuführen.
geth --identity "Sukhi" --genesis CustomGenesis.json \
--rpc --rpcport "8001" --rpccorsdomain "*" \
--datadir "chaindata" --port "30301" \
--ipcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" \
--rpcapi "db,eth,net,web3" --autodag --networkid 1900 --nat "any" console
Darüber hinaus funktioniert das gleiche Verfahren für zwei eindeutige Knoten auf derselben Maschine.
Ihr Problem ist wahrscheinlich der gleiche Genesis-Block. Sie müssen dieselbe Genesis-JSON-Datei angeben und sicherstellen, dass sie mit allen Befehlen (und auch mit der Init) verwendet wird. Setzen Sie die Ausführlichkeit auf 10, um zu verstehen, was passiert.
Bitte poste die Ausgabe deines geth-Befehls.
Stellen Sie sicher, dass der RPC-Port ( --rpcport
) und der eth-Port ( --port
) in allen Geth-Instanzen unterschiedlich sind. Wenn sich die Computer nicht im selben Netzwerk befinden, müssen Sie beim Hinzufügen von Peers die öffentliche IP-Adresse verwenden. Um zu überprüfen, ob die Instanzen auf einer privaten Blockchain ausgeführt werden, suchen Sie nach dem Starten der Geth-Instanz nach einer ähnlichen Meldung:
I0920 08:59:31.877152 10724 backend.go:303] Successfully wrote genesis block. New genesis hash = 6e92f8b2..........
Wenn Sie stattdessen eine ähnliche Meldung wie diese erhalten, könnten Probleme mit Ihrer Genesis-Datei vorliegen:
I0920 08:59:31.877152 10724 backend.go:303] WARNING: Wrote default Ethereum Genesis Block.
Verwenden Sie net.listening
den Befehl in der JS-Konsole und prüfen Sie, ob er wahr zurückgibt.
Ich bin mir nicht sicher, ob Sie Ihr Problem bereits gelöst haben, aber ich hatte vor einiger Zeit ein ähnliches Problem.
Für mich war das Problem, dass das Netzwerk standardmäßig auf die localhost-IP-Adresse (127.0.0.1) eingestellt ist. Sie sollten das Flag "--rpcaddr" gefolgt von Ihrer IP-Adresse hinzufügen. Es sollte also so aussehen:
--rpcaddr 10.10.23.196
Hoffe das hat geholfen!
Stellen Sie zunächst sicher, dass zwischen den beiden Rechnern eine uneingeschränkte Konnektivität besteht: zB werden die Ports von einer Art Firewall blockiert.
Wenn das kein Problem ist und Sie dieselbe Genesis-Datei verwenden, kann es passieren, dass Sie die Startschwierigkeit in der Genesis-Datei auf niedrig eingestellt haben. Bis zur Schwierigkeitsanpassung werden Blöcke sehr schnell hinzugefügt und die beiden Knoten haben keine Zeit zum Synchronisieren.
Wenn dies Ihnen nicht hilft, könnten Sie eine Ausgabe der Geth-Konsole mit aktivierten Debug-Informationen bereitstellen?
Wenn Sie keine falsche IP-Adresse oder Port eingegeben haben, muss das Problem im Genesis-Block liegen. Um zu überprüfen, ob Sie auf jedem Knoten dieselben Genesis-Blöcke haben, verwenden Sie:
web3.eth.getBlock(0);
Überprüfen Sie das Feld hash
, es muss auf beiden Knoten die gleiche Nummer sein. Wenn dies nicht der Fall ist, verbinden sich die Knoten nicht.
Wenn es übereinstimmt, dann haben Sie Netzwerkprobleme, überprüfen Sie Firewall-Regeln, Portnummern und ähnliches.
Es könnte auch möglich sein, dass Ihre Knoten dieselben Knotenschlüssel haben. Dies kann passieren, wenn Sie das Blockchain-Verzeichnis mit kopieren cp -r
. Dann müssen Sie auf einem der Knoten eine nodekey
Datei löschen, damit ein neuer Schlüssel für den Knoten neu generiert werden kann.
Stellen Sie sicher, dass der Port, den Sie mit dem Flag „--port“ angegeben haben, auf dem zweiten Computer geöffnet ist.
So öffnen Sie diesen Port auf dem zweiten Computer (in Ihrem Fall 30301):
sudo ufw allow 30301
Ich bin neu dabei und habe zwei Tage damit gekämpft .. !
Ja.