Я не спрашиваю, все ли узлы выполняют каждую транзакцию. Я прошу приблизительную временную последовательность событий. Например, в случае попытки двойной траты, а двойная трата вступает в сговор с майнером, добавляющим следующий блок. В какой момент случайный узел в сети, участвующий в майнинге, подтвердит, что это неверно, и пометит проблему?
- Обнаружит ли эту проблему только следующий майнер, который добавит блок?
- Каждый узел проверяет/выполняет транзакцию только в следующий раз, когда они участвуют в майнинге, или только когда они решают PoW и добавляют новый блок?
- В следующий раз, когда они будут онлайн?
- Есть ли триггер, по которому полный узел, который может простаивать, должен запустить код контракта и проверить?
Что, если следующие N майнеров тоже вступают в сговор? Требуется ли только один майнер, чтобы пометить транзакцию как неверную или N+1?
Очевидно, что все узлы не могут выполнить эту транзакцию до того, как будет построен другой блок, поэтому я надеюсь, что существует приблизительная временная шкала событий.
Когда майнер решает головоломку с доказательством работы в блоке, который он/она добывает, он помещает его в заголовок блока и распространяет на другие узлы, о которых он знает. Это могут быть другие майнеры или другие полные узлы, не занимающиеся майнингом.
Новый блок сейчас распространяется. Узлы, которые получают новый блок, должны его проверить.
Полные узлы без майнинга будут делать следующее:
Узлы майнинга делают то же самое, но немного в другом порядке, что позволяет им быстрее начать добычу следующего блока:
Проверка переходов состояний в полном блоке 8Mgas занимает порядка 100-200 мс на приличной машине.
На ваши конкретные вопросы.
Я не спрашиваю, все ли узлы выполняют каждую транзакцию.
Они делают это, чтобы убедиться, что их состояние внутренне непротиворечиво. (На самом деле есть теоретический аргумент, который противоречит этому. Я слышал, что некоторые майнеры на самом деле не проверяют содержимое блока на достоверность, а просто предполагают, что это дает им преимущество в добыче следующего блока.)
В какой момент случайный узел в сети, участвующий в майнинге, подтвердит, что это неверно, и пометит проблему?
Это должно быть помечено первым набором пиров майнера, которые должны проверять переходы состояний.
Обнаружит ли эту проблему только следующий майнер, который добавит блок?
Нет, как указано выше.
Каждый узел проверяет/выполняет транзакцию только в следующий раз, когда они участвуют в майнинге, или только когда они решают PoW и добавляют новый блок?
Нет, когда они получают новый распространяемый блок.
В следующий раз, когда они будут онлайн?
Если они отключатся от сети, когда они вернутся в сеть, и прежде чем они снова начнут майнить, им нужно будет синхронизироваться обратно с головкой сети. Проверка является частью этой синхронизации.
Существует ли триггер, при котором полному узлу, который может простаивать, необходимо запустить код контракта и проверить его?
Триггер заключается в том, что к нему будет добавлен новый блок.
Очевидно, что все узлы не могут выполнить эту транзакцию до того, как будет построен другой блок, поэтому я надеюсь, что существует приблизительная временная шкала событий.
Теоретически да, иначе они не знают, что строят на действительном состоянии.
Транзакции проверяются только во время майнинга, то есть узлами, которые майнят. Все остальные узлы, получив блок, проверяют, правильно ли для блока решение в зависимости от сложности. Таким образом, они только проверяют решение, предоставленное майнером. Если он правильный, то его принимают, если нет, то отвергают.
Вы можете узнать больше о валидности блока в желтой книге, часть 4.4.2: http://yellowpaper.io/
Что касается порядка исполнения, то я совсем не уверен, так как предпочитаю ничего не говорить. Вы также должны заглянуть в желтую бумагу об этом: http://yellowpaper.io/
Исмаэль
Кевин Ларсон
Исмаэль
Исмаэль
Кевин Ларсон
Исмаэль
Исмаэль
Роб Хитченс