Czas blokady Bitcoina

Wiesz: Oczekiwany czas pomiędzy dwoma blokami Bitcoina to średnio \(10\) minut. Teraz dokonujesz ważnej transakcji Bitcoin i niecierpliwie czekasz, czy i kiedy pojawi się w następnym bloku:

e50bfacc95975a4e7545d83d8954645f


Ponieważ nie sprawdziłeś, kiedy poprzedni blok został ukończony, w rzeczywistości oczekujesz średnio \( \frac{t}{2} = \frac{10}{2} = 5 \) minut czasu oczekiwania. Po \(5\) długich minutach sprawdź, kiedy ostatni blok został faktycznie ukończony:

e50bfacc95975a4e7545d83d8954645f

Ostatni blok był już ukończony \(7\) minut temu. Teraz, gdy znasz te informacje, oczekiwany czas zmienia się z \(5\) minut na łącznie \(10\) minut. Oznacza to, że za około \(3\) minut prawdopodobnie będzie tak daleko. Wydajesz polecenie w kółko. I czekaj. Po kolejnych \(10\) minutach masz wrażenie, że coś jest nie tak.

Ale wtedy pamiętasz, że Paradoks oczekiwania:

Jeżeli autobusy kursują średnio co \(t\) minut, to czas oczekiwania na losowy czas przyjazdu na przystanek nie odpowiada \(\frac{t}{2}\) minutom, ale w przypadku rozkładu wykładniczego odległości \(t\) .

Wystąpienia bloków Bitcoin są procesem Poissona i dlatego są rozkładane wykładniczo. Ponieważ procesy Poissona są bezpamięciowe, następny blok jest również ukończony średnio w ciągu \(10\) minut. To zawsze obowiązuje – bez względu na to, jak długo czekaliśmy. Cecha niepamięci dotyczy zarówno wstecz, jak i do przodu w czasie.

Jak to możliwe?

Aby to zrobić, rozważymy następujące dwa stwierdzenia::

  • A) Rzeczywisty średni czas oczekiwania między dwoma blokami wynosi \(10\) minut, a nie \(20\) minut.
  • B) W przypadku wybrania losowego punktu w czasie oczekujemy, że poprzedni blok \(10\) minut w przeszłości, a następny blok \(10\) minut w przyszłości. Możemy więc spodziewać się czasu oczekiwania \(20\) minut między blokami.

Sprawdzamy oba oświadczenia.

Aby to zrobić, najpierw wyodrębniamy odpowiednie dane, w szczególności czasy, w których bloki zostały ukończone, do pliku TXT (do przeprowadzenia z lokalnie działającym pełnym węzłem opartym na bitcoindzie ):

e50bfacc95975a4e7545d83d8954645f

Daje nam to następujący plik tekstowy , który teraz przetwarzamy dalej i przechowujemy w /time.txt . Używany jest do tego następujący program Rust z plikiem /Cargo.toml:

e50bfacc95975a4e7545d83d8954645f

Plik /src/main.rs zawiera rzeczywistą logikę testu:

e50bfacc95975a4e7545d83d8954645f

Instalujemy zależności, budujemy program i uruchamiamy:

e50bfacc95975a4e7545d83d8954645f

Rzeczywiście, oba stwierdzenia są prawdziwe, gdy analizujemy dane wyjściowe:

e50bfacc95975a4e7545d83d8954645f

Można to również intuicyjnie wytłumaczyć w następujący sposób: Jeśli czasy bloków znacznie się różnią, to konkretny czas oczekiwania jest różny - jeśli przeprowadzamy transakcję w losowym momencie, jest większe prawdopodobieństwo, że trafimy w interwał, w którym czas oczekiwania jest dłuższy niż 10 minut, ponieważ te interwały zajmują również więcej miejsca na osi czasu ze względu na dłuższy czas.

Plecy