Вы знаете: ожидаемое время между двумя блоками биткойнов составляет в среднем \(10\) минут. Теперь вы совершаете важную биткойн-транзакцию и с нетерпением ждете, чтобы увидеть, появится ли она в следующем блоке и когда.:
e50bfacc95975a4e7545d83d8954645f
Поскольку вы не проверили, когда был завершен предыдущий блок, вы фактически ожидаете в среднем \( \frac{t}{2} = \frac{10}{2} = 5 \) минут ожидания. По истечении \(5\) длинных минут проверьте, когда последний блок был фактически завершен:
e50bfacc95975a4e7545d83d8954645f
Последний блок был уже завершен \(7\) минут назад. Теперь, когда вы знаете эту информацию, ожидаемое время изменится с \(5\) минут до \(10\) минут. Это означает: примерно через \(3\) минут это будет так далеко. Вы отдаете команду снова и снова. И ждать. Еще через \(10\) минут вы почувствуете, что что-то не так.
Но потом вы помните, что Ожидание парадокс:
Если автобусы ходят в среднем каждые \(t\) минут, время ожидания случайного времени прибытия на автобусную остановку не соответствует \(\frac{t}{2}\) минутам, но в случае экспоненциально распределенных расстояния \(t\) .
Появление блоков биткойнов - это процесс Пуассона и, следовательно, их распределение экспоненциально. Поскольку пуассоновские процессы не имеют памяти, следующий блок также выполняется в среднем за \(10\) минут. Это всегда применимо - независимо от того, как долго мы ждали. Качество отсутствия памяти применимо как назад, так и вперед во времени.
Как это может быть?
Для этого рассмотрим следующие два утверждения.:
- A) Фактическое среднее время ожидания между двумя блоками составляет \(10\) минут, а не \(20\) минут.
- Б) Если выбран случайный момент времени, мы ожидаем, что предыдущий блок \(10\) минут в прошлом и следующий блок \(10\) минут в будущем. Таким образом, мы можем ожидать, что время ожидания между блоками составит \(20\) минут.
Проверяем оба утверждения.
Для этого мы сначала извлекаем соответствующие данные, в частности время, в которое блоки были завершены, в файл TXT (который будет выполняться с локально работающим полным узлом на основе биткойн ).:
e50bfacc95975a4e7545d83d8954645f
Это дает нам следующий текстовый файл , который мы теперь обрабатываем и сохраняем в /time.txt . Для этого используется следующая программа на Rust с файлом /Cargo.toml:
e50bfacc95975a4e7545d83d8954645f
Файл /src/main.rs содержит фактическую логику тестирования.:
e50bfacc95975a4e7545d83d8954645f
Устанавливаем зависимости, собираем программу и запускаем:
e50bfacc95975a4e7545d83d8954645f
Действительно, оба утверждения верны, когда мы анализируем вывод:
e50bfacc95975a4e7545d83d8954645f
Это также можно интуитивно объяснить следующим образом: если время блока значительно различается, конкретное время ожидания меняется - если мы выполняем транзакцию в случайный момент времени, вероятность того, что мы окажемся в интервале, в котором время ожидания превышает 10 минут, потому что эти интервалы также занимают больше места на временной шкале из-за большего времени.