Метки времени, начинающиеся с блока 145044:
145044: 2011-09-12 15:46:39
145045: 2011-09-12 16:05:07
145046: 2011-09-12 16:00:05 // ~5 minutes before prior block
145047: 2011-09-12 15:53:36 // ~7 & ~12 minutes before 2 prior blocks
145048: 2011-09-12 16:04:06 // after 2 prior blocks but still before 145045
Как это происходит?
Из вики :
Отметка времени считается действительной, если она больше средней отметки времени предыдущих 11 блоков и меньше установленного сетью времени + 2 часа. «Время, скорректированное сетью» — это среднее значение временных меток, возвращаемых всеми подключенными к вам узлами.
Всякий раз, когда узел подключается к другому узлу, он получает от него метку времени UTC и сохраняет свое смещение относительно локального UTC узла. В этом случае время, скорректированное сетью, представляет собой локальный UTC узла плюс среднее смещение от всех подключенных узлов. Однако сетевое время никогда не корректируется более чем на 70 минут по сравнению с локальным системным временем.
Не очевидно, что нет никаких проблем с этим способом отметки времени. См. сообщение в блоге Timejacking & Bitcoin и обсуждение этого здесь .
Основная причина этого в том, что без центральной власти невозможно точно знать, какое сейчас время.
Протокол отклоняет блоки с отметкой времени раньше, чем медиана отметок времени из предыдущих 11 блоков, или позже, чем через 2 часа после текущего сетевого времени. Допустима любая другая временная метка. Обратите внимание, что «сетевое время» может отличаться от фактического времени, поскольку сеть Биткойн пытается исправить неверные настройки часов, принимая медиану времени, сообщаемую всеми подключенными узлами, в качестве сетевого времени.
Вы можете прочитать об атаке, которую это делает возможной , здесь :
Объявляя неточные метки времени при подключении к узлу, злоумышленник может изменить счетчик сетевого времени узла и обманным путем заставить его принять альтернативную цепочку блоков. Это может значительно увеличить шансы на успешную двойную трату, истощить вычислительные ресурсы узла или просто снизить скорость подтверждения транзакции.
Чтобы добавить немного к другим ответам: представьте, что протокол требует увеличения временных меток. Теперь представьте, что кто-то майнит блок с отметкой времени в минуту в будущем, насколько вы можете судить. Что вы делаете? Если вы попытаетесь майнить блоки с временной меткой, которую вы в настоящее время считаете правильной, ваши блоки будут отклонены (поскольку у них будет более ранняя временная метка, чем у последнего принятого блока).
Из-за требования, чтобы сеть легко согласовывала, является ли блок действительным или нет, протокол не может требовать высокоточных временных меток в качестве условия принятия блока как действительного. В результате требование монотонных временных меток, скорее всего, ухудшит ситуацию, а не улучшит ее.
Нет требования, чтобы блоки имели метку времени после предыдущего блока. Единственное требование состоит в том, чтобы метка времени была больше, чем медианная метка времени последних 11 блоков. Таким образом, это означает, что блок может иметь более низкую отметку времени, чем его родитель, в пределах определенной границы.
Это происходит потому, что у майнеров нет идеально синхронизированных часов. В их внутренних часах могут быть небольшие различия, из-за которых они отличаются на несколько секунд. Если майнеру действительно повезло, и он нашел блок вскоре после другого из-за разницы в часах, возможно, его часы все еще отстают от временной метки родительского блока. Здесь, наверное, так и произошло.
Я считаю, что отметка времени основана на машине, на которой размещен биткойн-клиент, отправивший блок, и допускается отклонение, поскольку не у всех правильно синхронизировано время на компьютере.
По крайней мере, один майнинг-пул намеренно устанавливает временные метки на 6 минут вперед, а блок 145045 , по- видимому, принадлежит Элигиусу (транзакция генерации разбита на несколько адресов).
Временные метки блоков не очень точны и могут отличаться на несколько часов. Децентрализованной сети трудно договориться об официальном времени.
Причинами того, что это может быть неточным, являются разные системные времена, отставание, а также майнеры часто меняют время на небольшие величины после того, как они перепробовали все возможные одноразовые номера. Это позволяет им получать новые хэши, используя старые одноразовые номера.
В метке времени блока есть достаточная свобода действий. Отметка времени для блока N должна быть больше медианы сетевого времени, которая рассчитывается как медиана последних 11 блоков, а также меньше, чем network time + 2 hours
, где сетевое время рассчитывается на основе системного времени узла, а также медианы времени сообщают одноранговые узлы.
Временная метка блока должна рассматриваться только как приблизительное время добычи блока. Невозможно заставить майнера включать «фактическое время» , потому что сеть не может установить истинность этого. Поэтому вместо этого сеть накладывает правило, согласно которому метка времени должна соответствовать следующим правилам, чтобы считаться действительной:
(Информация ниже скопирована/вставлена из справочника разработчиков Bitcoin.org )
Время блока — это время эпохи Unix, когда майнер начал хешировать заголовок (по словам майнера). Должно быть строго больше, чем среднее время предыдущих 11 блоков. Полные узлы не будут принимать блоки с заголовками более чем через два часа в будущем в соответствии со своими часами.
Таким образом, блок at height N
может иметь отметку времени, которая следует за отметкой времени блока at height N+1
, если в противном случае он следует этим правилам.
английский
Марч