あなたが知っている:2つのビットコインブロック間の予想時間は平均\(10\)分です。 今、あなたは重要なビットコイン取引を行っており、それが次のブロックに表示されるかどうか、そしていつ表示されるかを熱心に待っています:
e50bfacc95975a4e7545d83d8954645f
前のブロックがいつ完了したかを確認していないため、実際には平均\( \frac{t}{2} = \frac{10}{2} = 5 \)分の待機時間が予想されます。 \(5\)長い分が経過した後、最後のブロックが実際にいつ完了したかを確認します:
e50bfacc95975a4e7545d83d8954645f
最後のブロックは\(7\)分前に完了しました。この情報がわかったので、予想される所要時間は合計\(5\)分から\(10\)分に変わります。つまり、おそらく\(3\)分ほどで準備が完了します。コマンドを何度も発行します。そして待ってください。さらに\(10\)分後、何かがおかしいと感じ始めます。
しかし、あなたはそれを覚えています 待っているパラドックス:
バスが平均して\(t\)分ごとに運行している場合、バス停へのランダムな到着時間の待機時間は\(\frac{t}{2}\)分に対応しませんが、指数分布の場合距離\(t\) 。
ビットコインブロックの発生はポアソン過程であるため、指数分布します。 ポアソン過程はメモリレスであるため、次のブロックも平均\(10\)分で完了します。 それは常に当てはまります-私たちがどれだけ待っていたとしても。 無記憶性の質は、時間の後方と前方の両方に適用されます。
どうしてそれができるのでしょうか?
これを行うために、次の2つのステートメントを検討します:
- A)2つのブロック間の実際の平均待機時間は\(10\)分であり、 \(20\)分ではありません。
- B)ランダムな時点を選択した場合、前のブロック\(10\)分が過去で、次のブロック\(10\)分が未来であると予想されます。 したがって、ブロック間の待機時間は\(20\)分と予想できます。
両方のステートメントを確認します。
これを行うには、まず関連データ、特にブロックが完了した時刻を TXT ファイルに抽出します ( bitcoindに基づいてローカルで実行されているフルノードで実行されます)。:
e50bfacc95975a4e7545d83d8954645f
これにより、次のテキスト ファイルが得られます。これをさらに処理して/time.txtに保存します。この目的には、ファイル/Cargo.tomlを持つ次のRustプログラムが使用されます。:
e50bfacc95975a4e7545d83d8954645f
ファイル/src/main.rsには、実際のテストロジックが含まれています:
e50bfacc95975a4e7545d83d8954645f
依存関係をインストールし、プログラムをビルドして起動します:
e50bfacc95975a4e7545d83d8954645f
実際、出力を分析すると、両方のステートメントが当てはまります。:
e50bfacc95975a4e7545d83d8954645f
これは、次のように直感的に説明することもできます。ブロック時間が大幅に変化すると、特定の待機時間が変化します。ランダムな時点でトランザクションを実行すると、次のような間隔で終了する可能性が高くなります。待機時間が10分より長いのは、これらの間隔も時間が長いためにタイムライン上でより多くのスペースを占めるためです。