Das private PoA-Netzwerk mint nicht

Ich habe 5 (8 GB/4 vCPU) Tröpfchen (privates Netzwerk aktiviert; die IPs unten sind von diesem privaten Netzwerk), die auf DigitalOcean ausgeführt werden. Ich bin erschrocken, weil der Workflow, den ich unten skizziere, lokal wie ein Zauber funktionierte.

  • Betriebssystem:4.4.0-116-generic #140-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
  • geth:1.7.3-stable-4bb3c89d

Die Droplets haben ufw aktiviert, aber ich habe alle tcp/udp-Ports geöffnet, die für geth/ssh relevant sind.

  1. Zuerst generiere ich dynamisch einen Genesis-Block, der die 5 Nodes als Versiegeler autorisiert und ihnen vorab Ether zuweist (und füge auch 100 andere Konten für die spätere Verwendung hinzu). (Ich habe extradataund andere Attribute von Puppeth)
  2. Danach stelle ich sicher, dass Geth nicht läuft und beende alle Bootnode- oder Geth-Prozesse über SSH.
  3. Dann SCP ich die genesis.jsonund identities.jsan alle Knoten. identities.jsenthält die 5 Coinbase-Konten.
  4. Ich habe erfolgreich initden Genesis-Block auf allen Knoten und starte den Bootnode auf dem ersten Droplet.
  5. Als nächstes ist es an der Zeit, gethmit dem folgenden Befehl auf jedem Knoten zu beginnen:
    • $1 wird mit bash (1-5) from übergebenidentities.js
    • $2 wird per Bash übergeben und ist die interne IP des en1jeweiligen Droplets
geth --datadir=/home/node/ --identity=$1 --port=30300 --rpc --rpccorsdomain=* --rpcapi admin,net,clique,eth,web3,miner,personal --rpcport=8500 - -networkid=187 --preload=/home/identities.js --bootnodes enode://a349b003327c3075b779715a733d5076b986aae0225c48a760cd2b0e768b9654c0179014353ebb34eb0b9e7654caf69ec56d80b1b32705277bad953fb7777585@10.135.29.232:30301 --nodiscover --verbosity=6 --unlock 0 --password /home/password.sec - -nat "extip:$2">> ​​/home/node/console.log 2>&1 &
  1. Da wir das --nodiscoverFlag haben, füge ich alle Knoten mit einem Bash-Skript hinzu, um zuerst von jedem Knoten zu sammeln admin.nodeInfo, und verwende dann rekursiv admin.addPeervia sshund was erfolgreich für jeden Eintrag geth --execzurückkehrt .true

  2. Danach beginnen wir mit dem Mining an 3 von 5 Sealer-Knoten, um einen Konsens zu erzielen.

Allerdings schürfen sie nie irgendwelche Blöcke und bleiben einfach in der folgenden Endlosschleife von stecken, Recalculated downloader QoS valuesobwohl sie sich immer noch als Peers haben, wenn ich admin.peersund überprüfe net.peerCount. Außerdem gibt eine erfolgreiche Überprüfung clique.getSigners()ein Array zurück, das die vorab zugewiesenen und autorisierten Knoten enthält, die auf den Droplets ausgeführt und entsperrt werden.

Die Ausgabe auf Protokollebene von geth mit auf allen Knoten sieht folgendermaßen aus:

TRACE[03-15|13:02:37] Registrierung des Sync-Peers peer=6c8d5ad9f798ede5
DEBUG[03-15|13:02:37] Entspannte Downloader-QoS-Werte rtt=20s Vertrauen=0,333 ttl=1m0s
DEBUG[03-15|13:02:38] Adding static node node="enode://f26f9b43bae5ff8018a723f714f045f55d74a438abf7f043a71c7bf758ebd7fbfa2d31f9bd8f74e06e1d6b0744476013f0a7bf324e06235881a3c1f29fbdad91@10.135.75.26:30300?discport=0"
TRACE[03-15|13:02:38] Neue Wählaufgabe task="staticdial f26f9b43bae5ff80 10.135.75.26:30300"
DEBUG[03-15|13:02:38] Hinzufügen von p2p-Peer-ID=f26f9b43bae5ff80 name=Geth/sealer05/v1.7.3... addr=10.135.75.26:30300 peers=4
TRACE[03-15|13:02:38] Wählaufgabe erledigt task="staticdial f26f9b43bae5ff80 10.135.75.26:30300"
TRACE[03-15|13:02:38] Startprotokoll eth/63 id=f26f9b43bae5ff80 conn=staticdial
DEBUG[03-15|13:02:38] Ethereum-Peer verbunden id=f26f9b43bae5ff80 conn=staticdial name=Geth/sealer05/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9.2
TRACE[03-15|13:02:38] Registrierung des Sync-Peers peer=f26f9b43bae5ff80
DEBUG[03-15|13:02:38] Entspannte Downloader-QoS-Werte rtt=20s Vertrauen=0,250 ttl=1m0s
DEBUG[03-15|13:02:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=0,625 ttl=1m0s
INFO [03-15|13:02:52] Aktualisierter Preis der Transaktionspool-Preisschwelle = 18000000000
INFO [03-15|13:02:52] Minenbetrieb gestartet
INFO [03-15 | 13:02:52] Neue Mining-Arbeitsnummer festschreiben = 1 txs = 0 Uncles = 0 verstrichen = 205,437 µs
TRACE[03-15|13:02:52] Warten auf Slot zum Signieren und Weiterleiten Verzögerung = -99,476 ms
INFO [03-15|13:02:52] Neue Blocknummer erfolgreich versiegelt=1 Hash=4c706b…3edb3c
DEBUG[03-15|13:02:52] Versuche Cache-Statistiken nach Commit-Mißerfolgen=14 Entladen=0
INFO [03-15|13:02:52] 🔨 abgebaute potenzielle Blocknummer=1 Hash=4c706b…3edb3c
DEBUG[03-15|13:02:52] Zähler für veraltete Transaktionen neu einfügen=0
TRACE[03-15|13:02:52] Propagierter Block-Hash=4c706b…3edb3c Empfänger=2 Dauer=2562047h47m16.854s
INFO [03-15 | 13:02:52] Neue Mining-Arbeitsnummer festschreiben = 2 txs = 0 Uncles = 0 verstrichen = 601,597 µs
INFO [03-15|13:02:52] Kürzlich unterschrieben, muss auf andere warten
TRACE[03-15|13:02:52] Angekündigter Block-Hash=4c706b…3edb3c Empfänger=2 Dauer=2562047h47m16.854s
DEBUG[03-15|13:02:52] In die Warteschlange übertragener Blockpeer = 6c8d5ad9f798ede5 Nummer = 1 Hash = b88988…21011c in die Warteschlange gestellt = 1
DEBUG[03-15|13:02:52] Propagierter Block wird importiert Peer=6c8d5ad9f798ede5 Nummer=1 Hash=b88988…21011c
WARN [03-15|13:02:52] Verworfene schlecht propagierte Blocknummer = 1 Hash = b88988…21011c
TRACE[03-15|13:02:52] Propagierter Block-Hash=b88988…21011c Empfänger=1 Dauer=848,472µs
DEBUG[03-15|13:02:52] In die Warteschlange übertragener Blockpeer = 3869118cfc562f9e Nummer = 1 Hash = b88988…21011c in die Warteschlange gestellt = 1
DEBUG[03-15|13:02:52] Propagierter Block wird importiert Peer=3869118cfc562f9e Nummer=1 Hash=b88988…21011c
WARN [03-15|13:02:52] Verworfene schlecht propagierte Blocknummer = 1 Hash = b88988…21011c
TRACE[03-15|13:02:52] Propagierter Block-Hash=b88988…21011c Empfänger=0 Dauer=370,18µs
DEBUG[03-15|13:02:53] In die Warteschlange übertragener Blockpeer = 3869118cfc562f9e Nummer = 1 Hash = dffae0…4fe644 in die Warteschlange gestellt = 1
DEBUG[03-15|13:02:53] Propagierter Block wird importiert peer=3869118cfc562f9e number=1 hash=dffae0…4fe644
WARN [03-15|13:02:54] Fehlerhafte propagierte Blocknummer verworfen=1 Hash=dffae0…4fe644
TRACE[03-15|13:02:54] Propagierter Block-Hash=dffae0…4fe644 Empfänger=1 Dauer=1,629ms
DEBUG[03-15|13:02:54] In die Warteschlange übertragener Blockpeer = 05eb0ebc7dec7aa9 Nummer = 1 Hash = dffae0…4fe644 in die Warteschlange gestellt = 1
DEBUG[03-15|13:02:54] Propagierter Block wird importiert peer=05eb0ebc7dec7aa9 number=1 hash=dffae0…4fe644
WARN [03-15|13:02:54] Fehlerhafte propagierte Blocknummer verworfen=1 Hash=dffae0…4fe644
TRACE[03-15|13:02:54] Propagierter Block-Hash=dffae0…4fe644 Empfänger=1 Dauer=739,317µs
TRACE[03-15|13:03:05] Wählaufgabe erledigt task="Warten auf Ablauf der Wählhistorie (29.999994993s)"
TRACE[03-15|13:03:05] Neue Wählaufgabe task="auf Wählverlauf warten (660.45357ms)"
TRACE[03-15|13:03:06] Wählaufgabe erledigt task="Warten auf Ablauf der Wählhistorie (660,45357ms)"
TRACE[03-15|13:03:06] Neue Wählaufgabe task="auf Wählverlauf warten (702.908968ms)"
TRACE[03-15|13:03:07] Wählaufgabe erledigt task="Warten auf Ablauf der Wählhistorie (702.908968ms)"
TRACE[03-15|13:03:07] Neue Wählaufgabe task="auf Wählverlauf warten (700.379857ms)"
TRACE[03-15|13:03:08] Wählaufgabe erledigt task="Warten auf Ablauf der Wählhistorie (700.379857ms)"
DEBUG[03-15|13:03:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=0,812 ttl=1m0s
DEBUG[03-15|13:03:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=0,906 ttl=1m0s
DEBUG[03-15|13:03:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=0,953 ttl=1m0s
DEBUG[03-15|13:04:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=0,977 ttl=1m0s
DEBUG[03-15|13:04:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=0,988 ttl=1m0s
DEBUG[03-15|13:04:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=0,994 ttl=1m0s
DEBUG[03-15|13:05:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=0,997 ttl=1m0s
DEBUG[03-15|13:05:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=0,999 ttl=1m0s
DEBUG[03-15|13:05:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=0,999 ttl=1m0s
DEBUG[03-15|13:06:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:06:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:06:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:07:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:07:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:07:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:08:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:08:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:08:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:09:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:09:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:09:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:10:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:10:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:10:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:11:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:11:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:11:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:12:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:12:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:12:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:13:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:13:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:13:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:14:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:14:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:14:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:15:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:15:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:15:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:16:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:16:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:16:48] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
DEBUG[03-15|13:17:08] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s
TRACE[03-15|13:17:28] Aktualisieren der Portzuordnung proto=tcp extport=30300 intport=30300 interface=ExtIP(10.135.29.232)
DEBUG[03-15|13:17:28] Neuberechnete Downloader-QoS-Werte rtt=20s Vertrauen=1.000 ttl=1m0s

Ist an diesem Ansatz etwas grundsätzlich falsch? Ich komme wirklich nicht weiter. Jeder Hinweis ist sehr willkommen, da ich wirklich Tage damit verbracht habe, einen Weg zu finden, dies zum Laufen zu bringen.

Antworten (2)

Das Problem konnte gelöst werden, indem nur zwei von 5 autorisierten Versiegelungen in der genesis.json (unter Verwendung von Puppeth) definiert und nur mit --mineund die anderen 3 Knoten ohne gestartet wurden. Wir haben auch einige Sleep-Timer zwischen dem Start der verschiedenen Geth-Instanzen hinzugefügt, vielleicht hat das auch geholfen.

Wenn Sie jemals auf ein ähnliches Problem stoßen, das keine Netzwerkprobleme abschließt, beziehen Sie sich am besten auf EIP 225 auf Github.

Yo sollte --mineals Parameter übergeben werden, wie Shellcoder sagte. Sie können die Bestellung auch über den beigefügten Geth-Client an Mine senden:

- geth attach node_directory/geth.ipc
> miner.start()

Denken Sie daran, dass das Konto im Feld extradata in genesis json als Sealer festgelegt werden sollte.