Wie füge ich Peers in einem privaten Netzwerk hinzu?

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 gethKonsole.

Ich habe folgenden Befehl probiert:

> admin.addPeer("enode://3414c01c19aa75a34f2dbd2f8d0898dc79d6b219ad77f8155abf1a287ce2ba60f14998a3a98c0cf14915eabfdacf914a92b27a01769de18fa2d049dbf4c17694@10.10.23.196:30301");

Hier 10.10.23.196ist die IP der 2. Maschine und 30301der Port, auf dem sie läuft.

Ein trueWert 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.

Ich frage mich, wie sich die beiden Knoten finden?

Antworten (7)

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.

Hi. Im Juli sagten Sie: "Sie müssen dieselbe Genesis-JSON-Datei angeben und sicherstellen, dass sie mit allen Befehlen verwendet wird." Wie geben Sie eine Genesis-Datei ANDERS an, als wenn Sie die Init ausführen? Wie für eine normale Invokation für Geth? Ich habe das gleiche Problem wie OP. (Mein Problemknoten ist geth, meine beiden guten Knoten sind Parität, falls das hilft.) Ich habe auch admin.addPeer ausprobiert und admin.peers gibt mir [] genau wie OP.
github.com/paritytech/parity/wiki/Chain-specification benötigen Sie für die Parität, um Ihre Genesis-Datei in das Paritätsformat zu konvertieren.
Ich glaube du missverstehst. Die Paritätsknoten funktionieren einwandfrei. Die Frage ist, wie man Geth zum Laufen bringt. Also muss ich in die andere Richtung gehen, von Parität zu Geth.
Machen Sie das Gegenteil. geth verwendet auch eine Genesis-Datei. Konvertieren Sie Ihre Parität eins in das Geth-Format.
Können Sie mir sagen, wie das geht? Ich habe eine Genesis-Datei, die ich manuell erstellt habe und die meiner Meinung nach korrekt auf der Parity-Datei basiert. Aber es verbindet sich nicht, also bräuchte ich einige Einzelheiten, wenn Sie sie haben, bitte.
  • Die genesis.json muss in allen Knoten genau gleich sein. Wenn Sie sich nicht sicher sind, versuchen Sie es mit einer Prüfsumme
  • Bitte stellen Sie sicher, dass keine Netzwerkprobleme vorliegen. Wenn Sie eine VM verwenden, versuchen Sie, ein Bridged-Netzwerk oder ein NAT-Netzwerk zu verwenden, damit die Knoten problemlos miteinander kommunizieren können.
  • Bitte achten Sie auf die Portnummern. Unterschiedliche Knoten müssen, wie hier erklärt, unterschiedliche Portnummern haben .
  • Der neue Knoten muss ein wenig minen, um sich mit der Blockchain in Ihrem privaten Testnetz synchronisieren zu können. (von hier ).

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.listeningden 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!

Sie können es auch auf 0.0.0.0 setzen, um alle Adressen zu akzeptieren

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 nodekeyDatei 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 .. !