Wie können wir neue Knoten unter PoA hinzufügen?

Ich habe ein PoA-System erfolgreich implementiert. Aber wie werden nach der Ersteinrichtung (z. B. zwei Knoten) neue Knoten hinzugefügt? Ich verstehe, dass die Annahme eines neuen Knotens ein Abstimmungsprozess ist, aber ich bin mir nicht sicher, wie das implementiert wird.

Hier ist der Link, den ich für die Einrichtung verwendet habe – https://hackernoon.com/setup-your-own-private-proof-of-authority-ethereum-network-with-geth-9a0a3750cda8

Ausgabe von Maschine 2 (mit den Knoten 3,4). Die Knoten 1,2 befinden sich auf Maschine 1 und beide sind Unterzeichner. Auf Knoten 3 wird angezeigt, dass das Konto entsperrt, aber nicht autorisiert ist.

mehr nohup.out INFO [14.04.|17:22:17] Maximale Peer-Anzahl
ETH=25 LES=0 total=25 INFO [14.04.|17:22:17] Peer-to-Peer-Knoteninstanz starten=Geth /v1.8.2-stable-b8b9f7f4/linux-amd64/go1.9.4 INFO [04-14|17:22:17] Zugewiesener Cache und
Dateihandles database=/home/satoshimaca/blockchain2/node3/geth/chaindata cache=7 68 handle=512 INFO [04-14|17:22:18] Initialisierte Kettenkonfiguration
config="{ChainID: 1515 Homestead: 1 DAO: DAOSupport: false EI P150: 2 EIP155: 3 EIP158: 3 Byzantium: 4 Constantinople: Engine : clique}" INFO [04-14|17:22:18] Initialisierung des Ethereum-Protokolls
versions="[63 62]" network=1515 INFO [04-14|17:22:18] Geladene neueste lokale Headernummer=0 hash=fdb68b…8a634f td=1 INFO [04-14|17:22:18 ] Geladene neueste lokale vollständige Blocknummer = 0 Hash = fdb68b…8a634f td=1 INFO [04-14|17:22:18] Geladene neueste lokale schnelle Blocknummer = 0 Hash = fdb68b…8a634f td=1 INFO [04 -14|17:22:18] Geladene lokale Transaktionsjournaltransaktionen=0 gelöscht=0 INFO [04-14|17:22:18] Regenerierte lokale Transaktionsjournaltransaktionen
=0 Konten=0 INFO [04-14|17:22 :18] Starting P2P networking INFO [04-14|17:22:20] UDP listener up
self=enode://7b13a6dc2fd5de476b2a579d702a36ec37587dad1cef7f99501835 4928a279a7733635e3cbd3b2fa1a261c2b37638f2aa46195bc7e1ebfa3c1875c84ecbc8087@[::]:30313 INFO [04-14|17:22:20] RLPx listener hoch
self=enode://7b13a6dc2fd5de476b2a579d702a36ec37587dad1cef7f99501835 4928a279a7733635e3cbd3b2fa1a261c2b37638f2aa46195bc7e1ebfa3c1875c84ecbc8087@[::]:30313 INFO [04-14|17:22:20] IPC endpoint opened
url=/home/satoshimaca/blockchain2/node3/geth.ipc INFO [04-14| 17:22:20] HTTP-Endpunkt geöffnet url= http://localhost:8503 cors
= vhosts=lokaler Host INFO [14.04
:21] Preisschwelle des Transaktionspools aktualisiert Preis=1 INFO [04-14|17:22:21] Etherbase automatisch konfiguriert
address=0xC08832c6cB6df14340F3866B293a705FB9bc378B INFO [14.04.|17:22:21] Bergbaubetrieb starten INFO [14.04 -14|17:22:21] Blockversiegelung fehlgeschlagen
err=unauthorized

Hier ist die Verbindung für Knoten 3 -

nohup geth --datadir node3/ --syncmode 'full' --port 30313 --rpc --rpcaddr 'localhost' --rpcport 8503 --rpcapi 'personal,db,eth,ne t,web3,txpool,miner' - -bootnodes 'enode://601ade737b81f16abdd0ce9983b63eb12050c4ef89c46b8fdbf3e3e6c951cc02dffe36f87200033107cf8b00 7355e780fba16b67d1d46603b1321f07314ea46b@10.132.0.2:30310' --networkid 1515 --gasprice '1' -unlock 'c08832c6cb6df14340f3866b293a70 5fb9bc378b' --password node3/pwdnode3.txt --mine &

Geth auf Knoten 1 gibt diese Peers und diese Enode -

> admin

{ datadir: "/home/satoshimaca/blockchain/node1", nodeInfo: { enode: "enode://64793e6e791115d315550d651cda00342b688ba36728b3d8070b04f4513ff65eb15ffb8f66387f1733340d8732e6ca956f0825cd3fc4e67686e04f63c5d0abc4@[::]:30311", id: "64793e6e791115d315550d651cda00342b688ba36728b3d8070b04f4513ff65eb15ffb8f66387f1733340d8732e6ca956f0825cd3fc4e67686e04f63c5d0abc4", ip: "::", listenAddr: " [::]:30311", Name: "Geth/v1.8.2-stable-b8b9f7f4/linux-amd64/go1.9.4", Ports: { Discovery: 30311, Listener: 30311 }, Protokolle: { eth: { config: {...}, difficulty: 15290, genesis: "0x702d8ca9647d171a6596a775888f71c7c0f3ddb011fbffcb921be685b2ef33b7", head: "0x574671023088dd06c2127cee4e2a70e30782ed3f525d28b537294ac0f3297099", network: 1515 } } }, peers: [{ caps: ["eth/62", "eth/63"], id: "d889d565b3ddc37491d131aed1c23d0a7b30a185bb925f325c7830b2ae710bc127010487f39f32d889afd1284ea31aa893adddda2197f2763485926970620381", name: "Geth/v1.8.2-stable-b8b9f7f4/linux-amd64/go1.9.4", network: { inbound: true, localAddress: "127.0.0.1:30311", remoteAddress: " 127.0.0.1:54108", statisch: falsch, vertrauenswürdig: falsch }, Protokolle: {

Von Knoten 1 - Konto 1 ist definitiv ein Unterzeichner und wird entsperrt, ist dann aber nicht autorisiert.

> clique.getSigners()

["0xc08832c6cb6df14340f3866b293a705fb9bc378b", "0xfc1bdf06d1150e6eeeb229a8500b09df8ccdcbbd", "0xfcad53c780a4f6c66b3daca331fe72fc6559c367"]

Ich habe mehr überprüft und festgestellt, dass Stimmen benötigt werden, was ein manueller Prozess zu sein scheint. Aber ich bin mir nicht sicher, sobald die Entscheidung darüber getroffen ist, wer einen neuen Master-Knoten oder Mining-Knoten haben wird, wie das dann implementiert wird.

Antworten (1)

Das Hinzufügen eines neuen Knotens als Sealer ist so einfach wie der Aufruf:

clique.propose(<NEWSEALER>, true)

Sie benötigen 50% + 1 Stimmen.

Siehe Wie füge ich einen neuen Sealer in Geth 1.6 Proof of Authority hinzu? für mehr Details.

Einzelheiten zur Spezifikation finden Sie unter EIP 225 – https://github.com/ethereum/EIPs/issues/225

Wenn sich die Knoten auf verschiedenen Computern in Google Cloud befinden, wie kann der signierende Knoten die anderen Konten kennen? Ich hatte das Problem schon einmal, als listAccounts nur einige der Konten unter PoW anzeigte. Wird der Unterzeichner aufgrund des Bootnodes über alle Konten informiert?
Er muss nicht wissen, ob das vorgeschlagene Sealer-Konto tatsächlich existiert. Es schlägt einfach eine Adresse vor.
Ich habe clique.propose hinzugefügt und es wird in clique.proposals angezeigt. Es sitzt nur in Vorschlägen. Ich habe den Vorschlag auf den beiden Signaturknoten gemacht. Wie wird der Vorschlag jetzt genehmigt? Gibt es ein clique.approve-Äquivalent?
Nachdem Ihre beiden Sealer die Funktion aufgerufen haben, müssen Sie einige Blöcke warten, bis sie wirksam wird.
Ich kann mich jetzt vom Remote-Knoten aus verbinden, aber es wird als nicht autorisiert angezeigt, wenn ich versuche, zu minen. Ich kann die ursprüngliche Maschine verwenden, die Knoten 1, 2 hat, aber Knoten 3 funktioniert aus der Ferne nicht. Gibt es ein Diagnose-Tool zu verwenden? Geth auf der ersten Maschine zeigt 2 Peers.
Ihr Versiegelungskonto muss eth.coinbase sein und es muss entsperrt sein. Außerdem sollten Sie per Clique-Objekt abfragen, wer die Sealer sind.
Ich habe in der Frage einige Geth-Ausgaben als Bearbeitung hinzugefügt. Ich habe Clique hinzugefügt und dann die Adresse und die Vorschläge wurden gelöscht (ich nehme an, akzeptiert). Es muss eine Möglichkeit geben, zu überprüfen, welche Vorschläge angenommen wurden.
Ich glaube, ich habe es - clique.getSigners. Ich kontrolliere jetzt gerade.