Meine App verbindet und nutzt dieselbe Blokchain auf jeder Instanz, sie verwendet dieselbe Genesis.json- und Netzwerk-ID.
Entstehung: https://github.com/AugustoL/OpenContent/blob/master/genesis.json
Web3-Dienst, der sich mit derselben Netzwerk-ID verbindet: https://github.com/AugustoL/OpenContent/blob/master/js/services/web3.js
Wenn ich es auf zwei verschiedenen Computern ausführe, wird die vorhandene Blockchain nicht erkannt. SO beginnt es, zwei verschiedene Blockchains mit derselben Genese und Netzwerk-ID abzubauen: S
Was ist der Fehler? Was fehlt mir? Ich habe viel gelesen und es soll funktionieren.
Der Grund, warum sich Ihre beiden geth
Instanzen auf den zwei verschiedenen Computern nicht finden können, ist, dass sie nicht wissen, wo sie mit der Suche nach einander beginnen sollen.
Hinweis: Ich habe den öffentlichen Schlüssel des Knotens zum leichteren Lesen in dieser Antwort gekürzt. Zum Beispiel
"a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c"
wurde zu verkürzt "a979....163c"
. Beim Einrichten Ihres Netzwerks müssen Sie die vollständigen öffentlichen Schlüssel verwenden.
In der öffentlichen Mainnet-Blockchain versucht jeder Peer beim Start, sich mit den „Bootnodes“ zu verbinden, um eine anfängliche Liste von Peers zu erhalten, mit denen er sich verbinden kann. Die Adresse dieser Bootnodes ist wie unten gezeigt in den Zeilen 71-78 von eth/backend.go fest codiert :
defaultBootNodes = []*discover.Node{
// ETH/DEV Go Bootnodes
discover.MustParseNode("enode://a979....163c@52.16.188.185:30303"), // IE
discover.MustParseNode("enode://de47....c786@54.94.239.50:30303"), // BR
discover.MustParseNode("enode://1118....5082@52.74.57.123:30303"), // SG
// ETH/DEV cpp-ethereum (poc-9.ethdev.com)
discover.MustParseNode("enode://979b....37f9@5.1.83.226:30303"),
}
Sobald sich ein Knoten mit dem Bootnode verbindet, erhält er eine Liste mit Adressen für potenzielle Peers, mit denen er sich verbinden kann, und er versucht, sich mit diesen Peers zu verbinden.
In Ihrem privaten Netzwerk gibt es keinen solchen Ausgangspunkt.
In Ihrem privaten Netzwerk geth
wissen Ihre Instanzen nicht, wo sie mit der Suche beginnen sollen, und Sie müssen ihnen einige Hinweise geben. Dazu gibt es drei Möglichkeiten: Verwenden Sie den --bootnodes
Befehlszeilenparameter, fügen Sie eine static-nodes.json
zu Ihrem Datenverzeichnis hinzu oder fügen Sie eine trusted-nodes.json
zu Ihrem Datenverzeichnis hinzu.
Führen Sie geth
auf jedem Ihrer Computer aus und geben Sie Folgendes admin.nodeInfo
in die Befehlszeile ein:
> admin.nodeInfo
{
enode: "enode://d9d9....30d9@[::]:30301?discport=0",
id: "d9d9....30d9",
ip: "::",
listenAddr: "[::]:30301",
name: "Geth/v1.3.6/linux/go1.5.1",
ports: {
discovery: 0,
listener: 30301
},
...
}
Was Sie tun müssen, ist, die Enode-Informationen für Ihre beiden Computer zu erhalten. Ersetzen Sie die [::]
in den enode-Informationen durch die IP-Adresse Ihrer beiden Computer und entfernen Sie die, ?discport=0
falls vorhanden. Ihre Enode-Informationen für jeden Computer sollten dann wie folgt aussehen:
enode://d9d9....30d9@192.168.1.152:30303
enode://1212....3434@192.168.1.253:30303
--bootnodes
LösungBei dieser ersten --bootnodes
Lösung müssen Sie den Bootknoten der Instanz eines Computers für die geth
Instanz des anderen Computers angeben geth
. Auf Computer 1 beginnen Sie also mit dem geth
Hinzufügen des folgenden Parameters:
--bootnodes "enode://1212....3434@192.168.1.253:30303"
static-nodes.json
LösungDiese zweite Lösung besteht darin, die Datei static-nodes.json
in Ihrer zu erstellen --datadir
, daher sollten Dateiname und Pfad in Ihrem Fall ./blockchain/static-nodes.json
. Auf Computer Nr. 1 sollte diese Datei die Enode-Informationen von Computer Nr. 2 enthalten und umgekehrt. Alternativ erstellen Sie einfach eine static-nodes.json
mit den Enode-Informationen beider Computer Nr. 1 und Nr. 2 und kopieren diese static-nodes.json
auf die --datadir
beider Computer. Der Inhalt dieser Datei sollte wie folgt aussehen:
[
"enode://d9d9....30d9@192.168.1.152:30303",
"enode://1212....3434@192.168.1.253:30303"
]
trusted-nodes.json
LösungWie Lösung #2, aber verwenden Sie den Dateinamen trusted-nodes.json
anstelle von static-nodes.json
. Der Unterschied besteht hier darin, dass vertrauenswürdige Knoten nicht zur Anzahl der Peer-Knoten hinzugefügt werden, wenn das --maxpeers
Limit erreicht ist.
--maxpeers
und nicht verwenden--nodiscover
Möglicherweise müssen Sie einen Wert ungleich Null angeben --maxpeers
, damit dies funktioniert. Verwenden Sie beispielsweise den Parameter:
geth ... --maxpeers 2 ...
Und verwenden Sie es nicht --nodiscover
in Ihrer geth
Befehlszeile, da dies die Peer-Erkennung deaktiviert.
Hier sind einige verwandte Fragen, die Ihnen bei der Lösung Ihrer Verbindungsprobleme helfen können:
duplicate
, da es keinen Sinn macht, eine bereits beantwortete Frage zu beantworten, wenn Sie Ähnlichkeiten feststellen. Und die andere Frage wird von Ihnen auch +1 dafür beantwortet.
alwe
AugustoL
alwe
--nodiscover
das nicht eingestellt ist. Hmm, ich vermute, Sie haben auch das Kapitel über „Einrichten mehrerer Knoten“ auf github.com/ethereum/go-ethereum/wiki/… und den Teil über „häufige Probleme mit der Verbindung“ auf github.com/ethereum/go-ethereum/wiki gelesen /Verbinde-mit-dem-Netzwerk ?AugustoL
Peter Szilágyi
30303
.AugustoL