En Casper, ¿cómo se puede finalizar un bloque si los bloques anteriores no están confirmados?

Como se explica en una publicación de blog de Ethereum , una consecuencia del consenso por apuesta es que:

un bloque puede permanecer sin confirmar incluso cuando los bloques posteriores a ese bloque están completamente finalizados.

El ejemplo dado tiene sentido dada la advertencia independientemente :

si su transacción fue confirmada y finalizada en el bloque 20101, y saben que, independientemente del contenido del bloque 20100, esa transacción tendrá un resultado determinado, entonces el resultado que les interesa se finaliza aunque partes del historial antes del resultado no estén .

Pero, ¿qué pasa si la transacción de alguien en el bloque 20101 depende del bloque 20100?
Entonces, ¿cómo se puede finalizar 20101 si 20100 no lo está?


Para mayor claridad, un ejemplo: la cuenta E obtiene 1 ETH de la cuenta D en el bloque 20101. Pero, ¿qué pasa si algunos de los bloques no confirmados en la altura 20100 tienen un saldo de D de 2 ETH y algunos tienen un saldo de D de 0 ETH? es posible? ¿O cómo la finalización de 20101 elimina los bloques candidatos de 20100 que no tienen saldo suficiente para D?

Si una razón es que los validadores no apostarán para finalizar 20101 a menos que estén seguros de que en bloques anteriores D tiene más de 0 ETH, ¿qué pasa si cometen un error, todos apuestan a ciegas, se suceden y finalizan 20101? ¿Todos ahora deben construir una historia para que en 20100 la cuenta D tenga un saldo de más de 0 ETH?

¿Cuáles son las brechas en la comprensión anterior y cómo se puede finalizar un bloque si los bloques anteriores no están confirmados?

Respuestas (1)

Buena pregunta. Caspar hace explícita la idea de reescribir la historia.

Primero, los bloques de un largo período de tiempo en la historia (como 3 meses) se bloquean, finalizan, no se les permite cambiar y los validadores no pueden cambiar su voto.

En segundo lugar, dentro de ese tiempo, los validadores realizan rondas iterativas de apuestas para converger en un bloque elegido. Esta apuesta ocurre una vez cada bloque. Entonces, incluso si un bloque tiene la mayoría de los votos en un momento, los validadores pueden cambiar a otro. Pero, de una de las publicaciones del blog:

si los validadores cambian sus apuestas de manera demasiado drástica, por ejemplo, votando con una alta probabilidad en un bloque después de votar con una probabilidad muy alta en otro, entonces son severamente castigados

Para responder otra pregunta:

Pero, ¿qué sucede si algunos de los bloques no confirmados en la altura 20100 tienen un saldo de D de 2 ETH y algunos tienen un saldo de D de 0 ETH? es posible?

Esta situación es el equivalente a una bifurcación en GHOST. En GHOST, la red finalmente converge en la cadena más pesada (una con la mayor cantidad de PoW detrás). En Caspar, se incentivaría a los validadores racionales a votar débilmente al principio y luego volver a votar con el tiempo para converger en el bloque con la mayor cantidad de validadores. Aunque volver a votar tiene una sanción, la sanción es menor que votar en el bloque equivocado.

Si una razón es que los validadores no apostarán para finalizar 20101 a menos que estén seguros de que en bloques anteriores D tiene más de 0 ETH, ¿qué pasa si cometen un error, todos apuestan a ciegas, se suceden y finalizan 20101? Depende de los mineros hacer un seguimiento de cuánto saldo de cuenta, no tendría sentido finalizar 20101 sin votar previamente por un bloque que le dé a E suficiente éter para la transacción.

Esta publicación de Vlad puede ayudar: https://blog.ethereum.org/2015/08/01/introducing-casper-friendly-ghost/

Editar: también encontré este documento de Vitalik: http://vitalik.ca/files/finality.html