Ich versuche, ein nicht lokales privates Netzwerk mit Go-Ethereum zu erstellen, das auf Docker-Containern ausgeführt wird, die auf verschiedenen virtuellen Maschinen gehostet werden. Es fällt mir schwer, die Knoten dazu zu bringen, sich gegenseitig zu erkennen. Ich frage mich, was die beste Strategie ist, um Peers hinzuzufügen, jetzt wo bootnode nicht richtig funktioniert ( Open Issue #3703 ). Ich habe viele Aspekte des Vertigobr-Projekts verfolgt .
Da ich weiß, dass --nodiscover
dies aktiviert sein sollte, um eine Verbindung mit Knoten außerhalb des privaten Netzwerks zu vermeiden, sind dies meine Fragen:
--nat extip:<VM_EXT_IP>
die bequemste nat
Konfiguration?static-nodes.json
Datei und verbindet er sich automatisch mit den Knoten in der Datei?admin.addPeer("enodeURL")
werden Knoten nur vorübergehend hinzugefügt. Bedeutet das, dass ich meine Liste von Knoten in einer Datenbank verfolgen muss, zum Beispiel die neu generieren muss, static-nodes.json
wenn ein neuer Knoten erstellt wird, und meinen "Haupt"-Knoten neu starten muss, um diese Datei neu zu laden? Gibt es einen einfacheren Weg?Bereiten Sie Ihre nodekey
für jeden Knoten im Voraus vor. Es ist nur eine 512-Bit-Zufallszahl. Speichern Sie sie dann irgendwo ab, zusammen mit den daraus abgeleiteten öffentlichen ECDSA-Schlüsseln.
Die öffentlichen Schlüssel sind die Komponenten, die enode
Sie zum Herstellen von Verbindungen mit der --bootnode
Befehlsoption sowie der admin.addPeer()
Funktion in der Konsole benötigen.
Das Erstellen des enode
ist so einfach wie zum Beispiel das Erhalten von öffentlichen Schlüsseln, IPs und Ports
enode://844c9c9e926a96e67fae7124bf6fcb6ecf37d121e2d3031db4b7d7bdd1388d9fc33c96c70535c65fcf34d8a4258fd40a9a7e2c24ac92bb152bd0261464b845d1@192.168.1.1:9915
Hier ist ein ( nicht sicherer , da nicht verwendeter /dev/random
) Einzeiler, um Ihren zu erhaltennodekey
perl -e '@c=("a".."f",0..9);$p.=$c[rand(scalar @c)] for 1..64; print "$p\n"'
Und hier ist ein schnelles Dienstprogramm zur go
Verwendung der geth
Bibliothek, um Ihren öffentlichen Schlüssel zu erhalten
https://gist.github.com/hermanjunge/8d0998f1fb2fd87870b57c63fe1f46c8
Betty Sánchez
246592eacb950b1a61805dddbd1faa92161befa98d04de52b45f78a8b4f6c0db
und311feee911639c757c305e07675793eb2d5cb3c6011764ad50d1e9c9b5a07ff9e6f4a594f3938552314434be45560a8a3e36850224c288fd8c8a6201103df05c
der lange ist der öffentliche Schlüssel der Enode, richtig? ist der kurze der nodekey (ECDSA-Schlüssel)?Hermann Junge
--nodekeyhex 246592eacb950b1a61805dddbd1faa92161befa98d04de52b45f78a8b4f6
du sicher, dass du immer den gleichenenode
Wert hast.Betty Sánchez
go get github.com/ethereum/go-ethereum/cmd/bootnode
und dann auszuführen,go run main.go --genkey "/some/dir/bootnode.key"
womain.go
sich die Haupt-Go-Datei des heruntergeladenen Bootnode-Ordners befindet.