Masa blok Bitcoin

Anda tahu: Jangkaan masa antara dua blok Bitcoin ialah secara purata \(10\) minit. Kini anda membuat transaksi Bitcoin yang penting dan menunggu dengan penuh sabar untuk melihat jika dan bila ia muncul di blok seterusnya:

e50bfacc95975a4e7545d83d8954645f


Memandangkan anda belum menyemak bila blok sebelumnya telah siap, anda sebenarnya menjangkakan purata masa menunggu \( \frac{t}{2} = \frac{10}{2} = 5 \) minit. Selepas \(5\) minit yang panjang berlalu, semak bila blok terakhir sebenarnya telah disiapkan:

e50bfacc95975a4e7545d83d8954645f

Blok terakhir telah pun siap \(7\) minit yang lalu. Setelah anda mengetahui maklumat ini, masa yang dijangkakan berubah daripada \(5\) minit kepada jumlah \(10\) minit. Ini bermakna: Dalam masa kira-kira \(3\) minit ia mungkin akan setakat ini. Anda mengeluarkan arahan berulang kali. Dan tunggu. Selepas satu lagi \(10\) minit anda mendapat perasaan bahawa ada sesuatu yang tidak kena.

Tetapi kemudian anda ingat itu Paradoks menunggu:

Jika bas berjalan secara purata setiap \(t\) minit, masa menunggu untuk masa ketibaan rawak di perhentian bas tidak sepadan dengan \(\frac{t}{2}\) minit, tetapi dalam kes taburan eksponen jarak \(t\) .

Kejadian blok Bitcoin adalah proses Poisson dan oleh itu diedarkan secara eksponen. Memandangkan proses Poisson tidak mempunyai ingatan, blok seterusnya juga disiapkan secara purata dalam \(10\) minit. Itu sentiasa terpakai - tidak kira berapa lama kita telah menunggu. Kualiti ketiadaan ingatan terpakai ke belakang dan ke hadapan dalam masa.

Macam mana boleh jadi?

Untuk melakukan ini, kami mempertimbangkan dua pernyataan berikut:

  • A) Purata masa menunggu sebenar antara dua blok ialah \(10\) minit, bukan \(20\) minit.
  • B) Jika titik masa rawak dipilih, kami menjangkakan bahawa blok sebelumnya \(10\) minit pada masa lalu dan blok seterusnya \(10\) minit pada masa hadapan. Jadi kita boleh menjangkakan masa menunggu selama \(20\) minit antara blok.

Kami menyemak kedua-dua kenyataan.

Untuk melakukan ini, kami mula-mula mengekstrak data yang berkaitan, khususnya masa di mana blok telah disiapkan, ke dalam fail TXT (untuk dijalankan dengan nod penuh yang dijalankan secara tempatan berdasarkan bitcoind ):

e50bfacc95975a4e7545d83d8954645f

Ini memberikan kami fail teks berikut, yang kini kami proses selanjutnya dan simpan dalam /time.txt . Program Rust berikut digunakan untuk ini dengan fail /Cargo.toml:

e50bfacc95975a4e7545d83d8954645f

Fail /src/main.rs mengandungi logik ujian sebenar:

e50bfacc95975a4e7545d83d8954645f

Kami memasang kebergantungan, membina program dan memulakannya:

e50bfacc95975a4e7545d83d8954645f

Sesungguhnya, kedua-dua pernyataan adalah benar apabila kita menganalisis output:

e50bfacc95975a4e7545d83d8954645f

Ini juga boleh dijelaskan secara intuitif seperti berikut: Jika masa blok berbeza dengan ketara, masa menunggu tertentu berbeza-beza - jika kita menjalankan transaksi pada titik masa rawak, kebarangkalian adalah lebih tinggi bahawa kita akan berakhir dalam selang masa di mana masa menunggu lebih lama daripada 10 minit adalah kerana selang ini juga mengambil lebih banyak ruang pada garis masa kerana masa yang lebih lama.

Belakang