Szenario: Ich betreibe eine private Kette mit einigen Autoritätsknoten. Das gesamte Netzwerk läuft einwandfrei.
Frage
Wie soll ich weitere Autoritätsknoten im Netzwerk hinzufügen? Andere als die in der Genesis-Datei definierten.
Versuch 1
Ich habe die Genesis-Datei aller Knoten im Netzwerk geändert und neu gestartet. Alle sind sich über die neue Autorität einig. Es wurde vom Netzwerk akzeptiert.
Problem
Jetzt füge ich einen neuen Non-Authority-Knoten mit der aktualisierten Genesis-Datei hinzu. Es wird nicht korrekt synchronisiert, stattdessen stoppt es nach einem Fehler bei Block Nr. 2:
Fehler: Engine(NotProposer(Nicht übereinstimmend {erwartet: 00ad89..., gefunden: 0068... }))
Mögliche Lösung
Ich ändere die Genesis und entferne die eine Autorität, die zuvor hinzugefügt wurde, und versuche, sie zu synchronisieren. Es wird korrekt mit dem Block synchronisiert, in dem die Autorität hinzugefügt wurde. Dann stoppt die Synchronisierung. Dann ändere ich Genesis erneut, um diese Autorität hinzuzufügen, um sie mit dem neuesten Block zu synchronisieren.
Ich bin mir nicht sicher, ob dies der richtige Weg ist, Autoritätsknoten im Netzwerk hinzuzufügen?
Info: Ich verwende die Aura Consensus Engine mit Parität.
Das OP gibt an, dass sie Parität verwenden, die ich anfangs übersehen hatte. Aber nur für allgemeine Informationen, hier ist der Prozess für Geth-Benutzer in einem PoA-Netzwerk.
Verwenden
clique.propose('....')
Sie müssen ein Konto für den neuen Knoten mit erstellen
geth --datadir ... new account
Fügen Sie dann clique.propose(..) zu einem Großteil der Knoten hinzu. Versuchen Sie alles, um sicher zu sein.
Sie können https://github.com/paritytech/parity-deploy ausprobieren. Durch Ausführen:
$ ./parity-deploy.sh --config aura
Sie sollten in der Ausgabe von docker-compose.yml sehen, welche Konfiguration für eine Proof-of-Authority-Kette erforderlich ist.
Ich habe Autoritätsadressen in der Genesis angegeben, also musste ich, um dies zu ändern, meine Kette aufspalten. Und spezifizieren Sie die Blöcke, an denen neue Validatoren/Behörden in Kraft treten würden:
Die alte Genesis sah so aus:
"engine": {
"authorityRound": {
"params": {
"stepDuration": "5",
"validators": {
"list": [
"0x0.........8c9606a754bb5aa561a9ec6c283695",
"0x0.........91ed16e1ede42c6b2e3f5801701e05",
"0x0.........0b08407ee70e974009af14b650ab08",
"0x0.........0b4c529b06622f944e7f0007568256",
"0x0.........c237037bd59a5bf36cc15f097a18a1"
]
},
"maximumUncleCountTransition": 9000,
"maximumUncleCount": 0
}
}
}
Jetzt möchte ich weitere Adressen zu dieser Liste hinzufügen. In New Genesis kann ich also multi
Listen verwenden. Es sollte Informationen darüber enthalten, wann neue Validierer in Kraft getreten sind. New Genesis würde so aussehen:
"engine": {
"authorityRound": {
"params": {
"stepDuration": "5",
"validators": {
"multi": {
"0": {
"list": [
"0x0.........8c9606a754bb5aa561a9ec6c283695",
"0x0.........91ed16e1ede42c6b2e3f5801701e05",
"0x0.........0b08407ee70e974009af14b650ab08",
"0x0.........3b4c529b06622f944e7f0007568256",
"0x0.........c237037bd59a5bf36cc15f097a18a1"
]
},
"414437": {
"list": [
"0x0.........8c9606a754bb5aa561a9ec6c283695",
"0x0.........91ed16e1ede42c6b2e3f5801701e05",
"0x0.........0b08407ee70e974009af14b650ab08",
"0x0.........3b4c529b06622f944e7f0007568256",
"0x0.........c237037bd59a5bf36cc15f097a18a1",
"0x0.........d18c1521383a798b151c2b252ed774"
]
},
"432727": {
"list": [
"0x0.........8c9606a754bb5aa561a9ec6c283695",
"0x0.........91ed16e1ede42c6b2e3f5801701e05",
"0x0.........0b08407ee70e974009af14b650ab08",
"0x0.........0b4c529b06622f944e7f0007568256",
"0x0.........9237037bd59a5bf36cc15f097a18a1",
"0x0.........818c1521383a798b151c2b252ed774",
"0x0.........253452bb06ebc3657ce438150aaeb6"
]
}
}
},
"maximumUncleCountTransition": 9000,
"maximumUncleCount": 0
}
}
}
Mit dem Kovan-Validierungsset müssen Sie diesen Schmerz nicht mehr durchmachen. Sie müssen lediglich einen Vertrag in Ihrem POA-Netzwerk bereitstellen und Validatoren hinzufügen/entfernen, indem Sie mit dem Vertrag interagieren.
Verweise:
Ayushya
I am running aura consensus engine using parity
Trevor Oakley
Ayushya
For people using geth, you can use...
er Benutzern helfen könnte, die hier landen.Trevor Oakley