Как в Casper финализировать блок, если предыдущие блоки не подтверждены?

Как объясняется в сообщении в блоге Ethereum , одним из следствий консенсуса по ставке является следующее:

блок может оставаться неподтвержденным, даже если блоки после этого блока полностью завершены.

Данный пример имеет смысл, учитывая независимое предостережение:

если их транзакция была подтверждена и завершена в блоке 20101, и они знают, что независимо от содержимого блока 20100 эта транзакция будет иметь определенный результат, то результат, который их интересует, завершается, даже если части истории до результата не .

Но что, если чья-то транзакция в блоке 20101 действительно зависит от блока 20100?
Тогда как 20101 можно доработать, если 20100 нет?


Для большей ясности пример: аккаунт E получает 1 ETH со счета D в блоке 20101. Но что, если некоторые из неподтвержденных блоков на высоте 20100 имеют баланс D как 2 ETH, а некоторые имеют баланс D как 0 ETH. Это возможно? Или как завершение 20101 устраняет 20100 блоков-кандидатов, у которых недостаточно баланса для D?

Если причина в том, что валидаторы не будут делать ставки на финализацию 20101, если они не уверены, что в предыдущих блоках у D было больше 0 ETH, что, если они ошибутся, все сделают ставку вслепую, последуют друг за другом и действительно финализируют 20101? Теперь каждый должен построить историю, чтобы в 20100 году на счете D был баланс больше 0 ETH?

Каковы пробелы в понимании выше и как можно завершить блок, если предыдущие блоки не подтверждены?

Ответы (1)

Хороший вопрос. Каспар ясно формулирует идею переписывания истории.

Во-первых, блоки за длительный период времени в истории (например, 3 месяца) заблокированы, завершены, не могут быть изменены, и валидаторы не могут изменить свой голос.

Во-вторых, в течение этого времени валидаторы проводят итерационные раунды ставок, чтобы прийти к выбранному блоку. Эта ставка происходит один раз в каждом блоке. Таким образом, даже если один блок имеет большинство голосов одновременно, валидаторы могут переключиться на другой. Но, из одного из сообщений в блоге:

если валидаторы слишком резко меняют свои ставки, например голосуя с высокой вероятностью по одному блоку после голосования с очень высокой вероятностью по другому, то их жестко наказывают

Чтобы ответить на другой вопрос:

Но что, если некоторые из неподтвержденных блоков на высоте 20100 имеют баланс D как 2 ETH, а некоторые имеют баланс D как 0 ETH. Это возможно?

Эта ситуация эквивалентна форку в GHOST. В GHOST сеть в конечном итоге сходится к самой тяжелой цепочке (той, за которой стоит наибольшее количество PoW). В Caspar рациональных валидаторов будет стимулировать сначала проголосовать слабо, а затем со временем повторно голосовать, чтобы сойтись в блоке с наибольшим количеством валидаторов. Несмотря на то, что отзыв имеет штраф, штраф меньше, чем голосование за неправильный блок.

Если причина в том, что валидаторы не будут делать ставки на финализацию 20101, если они не уверены, что в предыдущих блоках у D было больше 0 ETH, что, если они ошибутся, все сделают ставку вслепую, последуют друг за другом и действительно финализируют 20101? Майнеры должны отслеживать, сколько балансов на счетах, было бы бессмысленно дорабатывать 20101 без одновременного предварительного голосования за блок, который дает E достаточно эфира для транзакции.

Этот пост Влада может помочь: https://blog.ethereum.org/2015/08/01/introduction-casper-friendly-ghost/

Изменить: я также нашел этот документ Виталика: http://vitalik.ca/files/finality.html