Wie kann in Casper ein Block abgeschlossen werden, wenn vorherige Blöcke unbestätigt sind?

Wie in einem Ethereum-Blogbeitrag erklärt , ist eine Konsequenz von Consensus-by-Wette:

ein Block kann unbestätigt bleiben, selbst wenn Blöcke nach diesem Block vollständig abgeschlossen sind.

Das gegebene Beispiel macht angesichts des Vorbehalts unabhängig Sinn:

Wenn ihre Transaktion in Block 20101 bestätigt und abgeschlossen wurde und sie wissen, dass diese Transaktion ungeachtet des Inhalts von Block 20100 ein bestimmtes Ergebnis haben wird, dann wird das Ergebnis, das ihnen wichtig ist, abgeschlossen, obwohl Teile der Historie vor dem Ergebnis dies nicht sind .

Aber was ist, wenn jemandes Transaktion in Block 20101 von Block 20100 abhängt?
Wie kann dann 20101 abgeschlossen werden, wenn 20100 es nicht ist?


Zur weiteren Verdeutlichung ein Beispiel: Konto E erhält 1 ETH von Konto D in Block 20101. Aber was ist, wenn einige der unbestätigten Blöcke auf Höhe 20100 das Guthaben von D als 2 ETH und einige das Guthaben von D als 0 ETH haben. Ist das möglich? Oder wie eliminiert das Finalisieren von 20101 die 20100-Kandidatenblöcke, die kein ausreichendes Gleichgewicht für D haben?

Wenn ein Grund darin besteht, dass Validatoren nicht darauf setzen, 20101 abzuschließen, es sei denn, sie sind sich sicher, dass D in den vorherigen Blöcken mehr als 0 ETH hat, was ist, wenn sie einen Fehler machen, alle blind wetten, einander folgen und 20101 abschließen? Jeder muss jetzt eine Historie konstruieren, damit Konto D im Jahr 20100 einen Saldo von mehr als 0 ETH hat?

Was sind die Lücken im obigen Verständnis und wie kann eine Sperre abgeschlossen werden, wenn vorherige Sperren unbestätigt sind?

Antworten (1)

Gute Frage. Caspar verdeutlicht die Idee, die Geschichte neu zu schreiben.

Erstens sind Blöcke aus einem langen Zeitraum in der Geschichte (wie 3 Monate) gesperrt, abgeschlossen, dürfen nicht geändert werden, und Prüfer können ihre Stimme nicht ändern.

Zweitens durchlaufen Validatoren innerhalb dieser Zeit iterative Wettrunden, um zu einem ausgewählten Block zu konvergieren. Diese Wetten finden einmal pro Block statt. Selbst wenn also ein Block zu einem Zeitpunkt die Mehrheit der Stimmen hat, können die Validatoren zu einem anderen wechseln. Aber aus einem der Blogbeiträge:

Wenn Validatoren ihre Wetten zu stark ändern, indem sie beispielsweise mit hoher Wahrscheinlichkeit für einen Block stimmen, nachdem sie mit sehr hoher Wahrscheinlichkeit für einen anderen gestimmt haben, werden sie streng bestraft

Um eine andere Frage zu beantworten:

Aber was ist, wenn einige der unbestätigten Blöcke auf Höhe 20100 das Guthaben von D als 2 ETH und einige das Guthaben von D als 0 ETH haben? Ist das möglich?

Diese Situation entspricht einem Fork in GHOST. In GHOST konvergiert das Netzwerk schließlich zur schwersten Kette (eine mit dem meisten PoW dahinter). In Caspar würde ein rationaler Validator einen Anreiz erhalten, zunächst schwach abzustimmen und dann im Laufe der Zeit umzukehren, um sich dem Block mit den meisten Validatoren anzunähern. Auch wenn das Revoting eine Strafe hat, ist die Strafe kleiner als die Abstimmung über den falschen Block.

Wenn ein Grund darin besteht, dass Validatoren nicht darauf setzen, 20101 abzuschließen, es sei denn, sie sind sich sicher, dass D in den vorherigen Blöcken mehr als 0 ETH hat, was ist, wenn sie einen Fehler machen, alle blind wetten, einander folgen und 20101 abschließen? Es liegt an den Bergleuten, den Kontostand im Auge zu behalten, es würde keinen Sinn machen, 20101 abzuschließen, ohne gleichzeitig vorher für einen Block zu stimmen, der E genug Ether für die Transaktion gibt.

Dieser Beitrag von Vlad kann helfen: https://blog.ethereum.org/2015/08/01/introducing-casper-friendly-ghost/

Bearbeiten: Ich habe auch dieses Dokument von Vitalik gefunden: http://vitalik.ca/files/finality.html