Ich bin neu bei Ethereum und habe alles versucht, um Testnet von zwei lokalen Maschinenknoten zu verbinden. Ich habe versucht, zwei Konsolen auf einer einzigen Maschine von admin.addPeers (nodeUrl) auszuführen, und konnte eine Verbindung herstellen. Wenn ich mit demselben für verschiedene Maschinen mit derselben Netzwerk-ID versucht habe, wird die Peer-Anzahl als Null angezeigt. Bitte helfen Sie, dies zu lösen. vielen Dank im Voraus
Da Sie zwei Knoten auf zwei verschiedenen Computern ausführen, müssen Sie die IP-Adresse des Knotens angeben, während Sie eine Verbindung herstellen addPeer(enodeURI)
.
Ausführliche Anleitung:
Sie müssen auf jeder Maschine, auf der Sie einen Knoten starten möchten, dieselbe Genesis-Datei haben.
Alle Knoten sollten gleich sein--networkid
Das --rpcport
und --port
sollte für jede Geth-Instanz unterschiedlich sein.
Wenn Sie auf demselben Computer arbeiten, sollte jede Geth-Instanz unterschiedliche --datadir
.
Geth-Instanzen starten:
Knoten 1:
geth --genesis path/to/genesis.json --datadir path/to/directory --networkid 1234 --port 30301 --rpcport 8101 console
Knoten 2:
geth --genesis path/to/genesis.json --datadir path/to/directory --networkid 1234 --port 30302 --rpcport 8102 console
--maxpeers
Sie können Befehle wie und hinzufügen, --nodiscover
wenn Sie möchten.
Suchen Sie nach dem Starten dieser Instanzen nach einer ähnlichen Meldung auf der Konsole:
I0829 13:30:07.347738 3987 backend.go:303] Successfully wrote genesis block. New genesis hash = 82b6159155c00fb0b420046012a02257a176ad5dcfce4be4a15da39c166518e2
Wenn dies der Fall ist, haben Sie die Nodes erfolgreich mit einer privaten Blockchain gestartet. Wenn Sie eine ähnliche Meldung wie sehen Warning: Wrote default ethereum genesis block
, stimmt etwas nicht.
Verbindungsknoten:
Knoten 1: (auf der JavaScript-Konsole)
admin.nodeInfo.enode
Die Ausgabe wird in etwa so aussehen:
"enode://da97197a3335806658f17fdc167e943bd040fdf59ed882389d5f87b29f31362b12f13bd58438b7b5619497b54bab252a696cafc7cdd9696c4db1cacdb7e6a962@[::]:30301"
Beachten Sie, dass die Portnummer am Ende des URI 30301 ist.
Knoten 2:
Führen Sie denselben Befehl auf Knoten 2 aus und Sie erhalten am Ende eine ähnliche Ausgabe mit 30302:
"enode://47e61e304d802fb98403fbf877e1018d13044630a16eb9c15c1d0fb139d465e02d995acd239768f6ced04579d9639d8a75c73c30d7443a9d6d6146a44c8b5e7b@[::]:30302"
Um diese Knoten zu verbinden, finden Sie die IP-Adresse von Knoten 2 heraus. Da es sich um ein lokales Netzwerk handelt, sollte jeder Computer eine eindeutige private IP-Adresse haben. Bei Verwendung der addPeer(enodeURI)
Funktion sollte das [::]
in der enodeURI durch die IP-Adresse der Maschine ersetzt werden, auf der der Knoten ausgeführt wird. Jetzt auf Knoten 1:
admin.addPeer("enode://47e61e304d802fb98403fbf877e1018d13044630a16eb9c15c1d0fb139d465e02d995acd239768f6ced04579d9639d8a75c73c30d7443a9d6d6146a44c8b5e7b@10.0.0.123:30302")
Nachdem dieser Befehl true zurückgibt , net.peerCount
sollte der 1 zurückgeben und admin.peers
die Details des hinzugefügten/verbundenen Knotens zurückgeben. Überprüfen Sie vor dem Verbinden, ob auf beiden Knoten net.listening
wahr zurückgegeben wird .
Quellen:
Rolands Antwort ist gut, aber Sie sollten bedenken, dass Geth (und alle bisherigen Ethereum) an dieselben Standardports gebunden sind, was bedeutet, dass Sie sie von ihren Standardeinstellungen ändern müssen, wenn Sie mehrere Instanzen auf demselben Host ausführen (z. B. 127.0.0.1). .
Es ist ziemlich einfach, einfach die Standardports für jede Instanz zu erhöhen und dann ein (Bash-)Skript zu erstellen, um sie unabhängig (als Hintergrundprozesse) auszuführen.
Wenn Sie mehr Unabhängigkeit zwischen den Geth-Instanzen wünschen, sollten Sie für jede ein separates Datenverzeichnis erstellen (ändern Sie das Befehlszeilenargument --datadir aus der anderen Antwort):
--datadir "~/privethnet/geth_client"
--datadir "~/privethnet/geth_bootstrap"
Erstellen Sie eine Datei namens genesis.json mit folgendem Inhalt:
{
"nonce": "0xdeadbeefdeadbeef",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x0",
"gasLimit": "0x8000000",
"difficulty": "0x400",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": {
}
}
Führen Sie Folgendes aus:geth --datadir ./ init genesis.json
geth --identity "nodeA" --rpc --rpcport "8000" --rpccorsdomain "*" --datadir "~/privethnet/" --port "30303" --ipcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --rpcapi "db,eth,net,web3" --autodag --networkid 1900 --nat "any" console
geth --identity "nodeB" --rpc --rpcport "8000" --rpccorsdomain "*" --datadir "~/privethnet/" --port "30303" --ipcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --rpcapi "db,eth,net,web3" --autodag --networkid 1900 --nat "any" console
Fügen Sie den Peer mithilfe der URL des Peers hinzu:
Suchen Sie den Peernode aus dem Startprotokoll von geth0712 13:34:00.865021 p2p/discover/udp.go:217] Listening, enode:...
admin.addPeer(nodeURL)
Überprüfen Sie, ob ein Peer-Knoten hinzugefügt wurde:admin.peers
Beispiele für nodeURLS sind: Node A nodeURL:
enode://da97197a3335806658f17fdc167e943bd040fdf59ed882389d5f87b29f31362b12f13bd58438b7b5619497b54bab252a696cafc7cdd9696c4db1cacdb7e6a962@151.62.56.89:30303
Node B nodeURL:
enode://9d4687d7cfa8c2215d2f2b4278a3e0ab4bde22ab838dd203b234866d69405b4b704fce4a71638f8c66018ba187a3599c612267ac382589bb81131c7dc18ff251@151.62.56.89:30303
Ein Benutzer auf Github namens FleetingCloud hat ein nettes UI-Skript im Befehlsstil zum Einrichten von Ethereum in einem privaten Netzwerk zusammengestellt. Ich empfehle es sehr.
https://libraries.io/github/FleetingClouds/InitializeEthereumPrivateNetwork
Bearbeiten:
Führen Sie nach dem Klonen des Repos einfach das Skript initializeEthereumPrivateNetwork.sh aus. Es wird Sie dann fragen, wie Sie Ihr Netzwerk benennen möchten, die Verzeichnisse der Geth auf Root- und Client-Knoten usw.
--genesis ist nicht mehr gültig. Sie müssen stattdessen init verwenden. Hier ist mein Code, den ich durch Schritt 1 ersetzt habe:
geth --identity "MyTestNode" --nodiscover --networkid 1999 --port 30301 -- rpcport 8101 --datadir /home/appo/geth/ init /home/appo/.json console
Sie können beliebige Flags und Ports festlegen, dies ist nur der Code, den ich auf meinem Computer ausgeführt habe.
Stepan Jakowenko
Pratik Gaikwad