Один из них является то, что некоторые говермент (вероятно, США) будет подрывать все наблюдаемые источники времени (NTP, GPS и т.д.) пока Интернет будет продолжать работать. Это совершенно нелепо, так как подавляющее большинство современной цифровой связи является синхронным и опираясь на точные часы, которые спутник синхронизированы.
Сколько времени источников ваш компьютер синхронизируются прямо сейчас? Даже людей, работающих NTP, подавляющее большинство из них соединены лишь небольшая горстка серверов. Вам не нужно, чтобы ниспровергать все источники времени, вам просто нужно подрывать несколько в течение нескольких часов, потому что средний шахтер, вероятно, не даже проверить свои добывающие компьютеры ежедневно. Система, как это может выдержать чертовски много пренебрежения шахтеров, ваши идеи требуют активного управления и, следовательно, являются хрупкими.
Опять же, какое значение Bitcoin финансовой сети есть в наличии действительно точный блок меток времени в любом случае?
Другая сторона этого аргумента предлагает два алгоритма: один в режиме реального времени (для "текущий" блоки) и один в прошлом времени (для "исторический" блоки). Я до сих пор не видел никого, кто был предложен один непрерывный алгоритм, который будет отклонять те же блоки, как, увидев их на p2p сети и при проверке сохраненного blockchain. Вы можете написать доказательство того, что ваша чистая функция "действительный (блок, blockchain, т)" является одновременно независимым от "T" параметр и как-то лучше, чем старый "действительный (блок, blockchain)" функционировать? И для того, что определения "лучше"?
EDIT: поразмыслив, я думаю, что я неправильно понял, что вы говорили, в любом случае, копаться ниже была весьма информативным для меня.
Алгоритм является более простым, чем вы думаете. Каждый блок неизвестного действия, будь то было дано нам пэр, или мы загружаем новые блоки с диска с loadblock, сначала проходит через функцию ProcessBlock (). Одна из первых вещей ProcessBlock () делает это вызывает CheckBlock (), который делает начальную контекстно-независимую проверку корректности. CheckBlock () имеет только один временную метку, связанный чек, и это очень простой:
// Проверяем метки
если (GetBlockTime () > GetAdjustedTime () + 2 * 60 * 60)
возвращать ошибку ("CheckBlock (): блок временной метки слишком далеко в будущем");
Это просто означает, что если блок имеет метку времени, более чем на два часа в дальнейшем мы всегда будем рассматривать его недействительным в соответствии с
Любые обстоятельство. Bitcoin не использует "настенные часы" напрямую, а функция GetAdjustedTime (), определенный в util.cpp принимает среднее значение всех времен для нас узлами мы подключены к, и мы сами, и использует в качестве "время", Однако он не позволит, что медиана изменения, что мы считаем "Теперь" более 70 минут; замена GetAdjustedTime () только с GetTime () хорошо, если вы часы точны. Обратите внимание, как это означает, что если вы установите часы назад во время Bitcoin будут думать совершенно правомерные блоки являются недействительными.
ProcessBlock () сам по себе имеет только один чек времени, связанные с:
// Дополнительные проверки для предотвращения "заполнить память спамить с фиктивными блоками"
Int64 DeltaTime = pblock->GetBlockTime () - pcheckpoint->NTime;
если (DeltaTime < 0)
{
если (pfrom)
pfrom->Обнаружено нарушение (100);
возвращать ошибку ("ProcessBlock (): блок с меткой времени до последней контрольной точки");
}
Этот код выполняется только если блок не является частью того, что Bitcoin думает лучшая цепь, и только убеждается, что блоки до контрольной точки не имеет метку времени после контрольной точки. (Именно поэтому контрольные точки должны быть выбраны из блоков, которые не имеют каких-либо блоков, прежде чем в цепи с метками времени после них) В основном это проверка исправности, чтобы убедиться, что узлы не могут DDoS вы с поддельными блоками.
После того, как ProcessBlock сделал свои проверки, он вызывает AcceptBlock (), чтобы сделать
контекстно-зависимый Проверки, которые зависят от того, каких предыдущих блоков существуют в цепочке. Она также имеет ровно один раз, связанные проверки действия:
// Проверяем метки против пред
если (GetBlockTime () <= pindexPrev->GetMedianTimePast ())
возвращать ошибку ("AcceptBlock (): метка блока слишком рано");
GetMedianTimePast () возвращает медиану временные метки последних 11 блоков так в основном эта проверка только обеспечение того, чтобы блокировать метки времени, на самом деле идет вперед во времени. В настоящее время существует также неявный-зависимость в том, что расчет трудности, GetNextWorkRequired (), использует блок меток времени, но это эффект второго порядка.
Как вы видете,
все проверка блока осуществляется без каких-либо ссылок на текущий момент времени на всех, с одним исключением, что в любой данный момент мы будем рассматривать любой блок недействительный, если он имеет метку времени, более чем на 2 часа в будущее.
Причина, почему это один маленькое правило приводит к относительно точного блока меток времени просто потому, что шахтеры хотят других шахтер, чтобы построить на их блоках, так что имеет смысл, чтобы попытаться сохранить ваши метки времени достаточно точны, что подавляющее большинство шахтеров будет принимать их действительными. Примечательно 51% взломщик, который не заботится о других шахтерах может сделать blockchain временных метки говорят, что они хотят их.
Я хотел бы интерпретирую временные метки в то время, когда блок был известен в сеть - и распространение сети в порядке несколько минут максимума.
Почему вы должны сделать это?
FWIW Я планирую по настройке несколько серверов, которые будут автоматически TIMESTAMP Bitcoin блоков, как они приходят в отношении общественного
RFC3161 временные метки серверов - есть множество публичных, работающих сертификационными органами и другими доверенными лицами - и делает архивы этих отметок времени в открытом доступе. Такого рода идеи может быть то, что вы действительно хотите.