Was ist die sicherste minimale Blockierungszeit, die verwendet werden kann, ohne Probleme mit dem Proof-of-Authority-Konsens zu haben?

Im folgenden Blog wurde im allerletzten Absatz Folgendes Vitalik Buterinerwähnt:

Daher kann eine Zielblockzeit von 3 Sekunden (und eine tatsächliche Blockzeit von 5 Sekunden) durchaus praktikabel sein. Wie üblich werden wir zunächst konservativer sein und es nicht so weit treiben, aber eine Blockzeit von 12s scheint dennoch sehr gut erreichbar zu sein.

Ich bin mir nicht sicher, ob diese Aussage für den Proof-of-Authority-Konsens gilt. Bitte sehen Sie sich meine Beispieldatei CustomGenesis.json an .

Beim Proof-of-workKonsens ändert sich die Blockzeit dynamisch basierend auf dem Netzwerk, aber beim Proof-of-AuthorityKonsens ist die Blockzeit fest und wir können sie nicht ändern, nachdem die Blockzeit im Genesis-Block definiert wurde.

"clique": {
  "period": 15,
  "epoch": 30000
}

Zum Beispiel verwendet Rinkeby Ethereum Testnet Proof-of-Authority und seine Blockzeit beträgt 15 Sekunden.

Indem ich diesem Tutorial gefolgt bin, habe ich eine private Kette erstellt, die auf Proof-of-Authorityby using basiert clique consensus engine - proof-of-authority. Standardmäßig werden auch Blöcke von 15 Sekunden empfohlen. Das Problem besteht danach, wenn wir die Blockzeit für die Genesis-Datei festlegen, können wir sie in Zukunft nicht mehr ändern.

$ puppeth
...
How many seconds should blocks take? (default = 15)
> 15

Angenommen, wir haben ein privates Ethereum-Netzwerk mit guter Netzwerkverbindung.

[F] Was könnte die sicherste minimale Blockierungszeit sein, die verwendet werden kann, ohne Probleme mit dem Proof-of-Authority-Konsens zu haben?

Könnte ich beispielsweise 12 Sekunden oder sogar weniger (z. B. 5 Sekunden) für die Blockzeit verwenden, ohne dass es zu Problemen kommt? Wenn nein, mit welchen Problemen werde ich konfrontiert sein?

Vielen Dank für Ihre wertvolle Zeit und Hilfe.

Auf die Frage, welche Blocktime die beste ist, gibt es viele Antworten und Kommentare. Was ist mit period:0 in einem zugelassenen Netzwerk mit bekannten Knoten. Wäre es eine praktikable Option, die Blockzeit auf Null zu setzen (Block on Transaction)?

Antworten (2)

PoA in Aura Consensus Engine of Parity ist standardmäßig auf 5s eingestellt , was getestet wurde, um mit guter Stabilität zu laufen. Das PoA-Netzwerk betreibt eine solche Infrastruktur.

Ich habe einen 1-Sekunden-PoA mit Aura getestet , der über 4 verschiedene geografische Regionen läuft. Dies ist das Minimum, das ich erfolgreich getestet habe :) Stabilitätstests in weiteren Regionen sind noch im Gange. Wird mit weiteren Informationen aktualisiert.

Aktualisieren

Stabilitätstest war erfolgreich. Es gab nur Probleme bezüglich der Zeitsteuerung, die Server müssen mit der gleichen Zeit synchronisiert werden. Nachdem dieses Problem behoben war, gab es keine Probleme mehr.

Die Hauptsache ist, dass sie alle eine synchronisierte Zeit haben müssen.

Mögliche Probleme, denen Sie begegnen könnten:

  • Welcher Server auch immer nicht rechtzeitig synchron ist, kann Blöcke von anderen nicht überprüfen. Derjenige, der nicht synchron ist, folgt also seiner eigenen Kette, wenn er einer der Validator-Knoten ist, oder bleibt hängen, wenn er ein normaler Sync-Knoten ist.
  • Wenn ein Validator aus irgendeinem Grund stoppt, wird ein anderer die Kette fortsetzen, und zu diesem Zeitpunkt wird es eine leichte Instabilität in der durchschnittlichen Blockzeit geben. Aber alles wird wieder normal, wenn alle Validierer wieder online sind.

Ich persönlich finde 5s eine ordentliche Zeit für PoA und läuft ohne Probleme flüssig. Wenn Sie mehr über Aura erfahren möchten, lesen Sie Aura Consensus Protocol Audit .

Was ist der Unterschied zwischen beteeen Auraund Cliqueengine? Könnte ich auch 5 Sekunden für den PoA im Clique-Setup verwenden? @Ayushya
Ja! Sie können 5s auch in Clique verwenden. Der Unterschied in Clique und Aura ist sehr groß, der Hauptunterschied besteht in Geth-Unterstützungen cliqueund Paritätsunterstützungen aura.
Ich betreibe eine private 5s-Clique-Blockchain ohne Probleme auf mehreren Servern, aber (vorerst) alle in Großbritannien. Eine Sache, die Sie beachten sollten, sind Blockgasgrenzen - es ist viel einfacher, mit kleinen Blöcken synchron zu bleiben als mit großen!
Wie können Sie bei Clique das Blockgaslimit ändern, um kleinere Blöcke zu verwenden? Müssen wir es im Genesis-Block definieren? Wie viel Blockgrößenlimit verwenden Sie in Ihrer privaten Kette? @TC8
Wir verwenden vorerst die Standardblockgröße (4,7 Millionen), obwohl es möglich ist, dass sich das ändert. Wir legen das anfängliche Blockgaslimit in genesis.json fest, aber Sie können die Blockgröße auch nach der Genesis durch ` --targetgaslimit <value>` (Standard: 4712388) über Geth manipulieren. Dies ist ein schrittweiser Prozess, da die Änderungsrate begrenzt ist (keine großen Sprünge von einem Block zum nächsten), aber wenn genügend Ihrer Miner alle auf das gleiche Limit zielen, werden sie es irgendwann erreichen.
Wie lange führen Sie Ihre Tests durch?
@SamuelDare einen halben Monat
Stimmt es, dass ein Punkt = 0 im Produktionsmodus ein totales Sicherheitsdesaster wäre, weil nur die ständige Erstellung neuer Blöcke die Integrität der Kette gewährleistet?
@heinob das ist richtig. Und gemäß den aktuellen Client-Implementierungen wird period=0 nicht unterstützt.
@Ayushya: Was meinst du mit "nicht unterstützt"? Ich verwende Geth V1.8.7-stable-66432f38. Damit wird period=0 (Blockerstellung nur bei Bedarf) unterstützt. Oder meinst du "allgemein" nicht unterstützt!?

Sei es eine PoA-, PoW- oder PoS-Kette, die Sie aufbauen möchten, der wichtigste Punkt beim Timing ist, dass Ihre Knoten in der Lage sind, sich zu synchronisieren.

Wenn Ihr Netzwerk privat ist und Sie sicherstellen können, dass Ihr Netzwerk über Knoten mit riesigem Breitband und Ressourcen verfügt, können Sie die Blockzeit erheblich verkürzen.

Es hängt alles von der Infrastruktur ab, auf die sich Ihr Netzwerk stützt. Wenn Ihre verschiedenen Knoten über das weltweite Netzwerk kommunizieren, müssen Sie eine Blockzeit sicherstellen, die lang genug ist, um sicherzustellen, dass die verschiedenen Knoten Zeit haben, sich zwischen jedem Block zu synchronisieren.

Wenn Knoten damit nicht umgehen können, kann es zu unterschiedlichen Netzwerken kommen, da die Knoten in Konflikt geraten und sich möglicherweise gegenseitig ablehnen.

Nun, in PoA wird es viele Sealer geben. Ich bin mir nicht sicher, ob die Ressourcen der kommenden Robbenjäger verfügbar sind. Es kann einen in Asien und einen in den USA geben, daher ist es jetzt schwer zu erraten. Aber es sind 12 Sekunden, aber warum wird die Standardzeit auf 15 Sekunden verlängert? @Als ein
Die Blockzeiten von 15/12 Sekunden beziehen sich auf die öffentliche PoW-Blockchain. Der PoA-Konsens ist einfacher, weil es kein Wettrüsten darüber gibt, wer einen Block versiegeln wird. Ihr wisst schon, wer es sein wird.