Γνωρίζετε: Ο αναμενόμενος χρόνος μεταξύ δύο μπλοκ Bitcoin είναι κατά μέσο όρο \(10\) λεπτά. Τώρα κάνετε μια σημαντική συναλλαγή Bitcoin και περιμένετε με ανυπομονησία να δείτε εάν και πότε θα εμφανιστεί στο επόμενο μπλοκ:
e50bfacc95975a4e7545d83d8954645f
Εφόσον δεν έχετε ελέγξει πότε ολοκληρώθηκε το προηγούμενο μπλοκ, στην πραγματικότητα αναμένετε κατά μέσο όρο \( \frac{t}{2} = \frac{10}{2} = 5 \) λεπτά χρόνου αναμονής. Αφού \(5\) μεγάλα λεπτά, ελέγξτε πότε όντως ολοκληρώθηκε το τελευταίο μπλοκ:
e50bfacc95975a4e7545d83d8954645f
Το τελευταίο μπλοκ ολοκληρώθηκε ήδη πριν από \(7\) λεπτά. Τώρα που γνωρίζετε αυτές τις πληροφορίες, ο αναμενόμενος χρόνος αλλάζει από \(5\) λεπτά σε συνολικά \(10\) λεπτά. Αυτό σημαίνει: Σε περίπου \(3\) λεπτά θα είναι πιθανότατα τόσο μακριά. Εκδίδεις την εντολή ξανά και ξανά. Και περίμενε. Μετά από άλλα \(10\) λεπτά έχετε την αίσθηση ότι κάτι δεν πάει καλά.
Αλλά μετά το θυμάσαι Παράδοξο αναμονής:
Εάν τα λεωφορεία λειτουργούν κάθε \(t\) λεπτά κατά μέσο όρο, ο χρόνος αναμονής για μια τυχαία ώρα άφιξης στη στάση του λεωφορείου δεν αντιστοιχεί σε \(\frac{t}{2}\) λεπτά, αλλά στην περίπτωση εκθετικής κατανομής αποστάσεις \(t\) .
Οι εμφανίσεις μπλοκ Bitcoin είναι μια διαδικασία Poisson και επομένως κατανέμονται εκθετικά. Δεδομένου ότι οι διαδικασίες Poisson είναι χωρίς μνήμη, το επόμενο μπλοκ ολοκληρώνεται επίσης σε \(10\) λεπτά κατά μέσο όρο. Αυτό ισχύει πάντα - όσο καιρό κι αν περιμέναμε. Η ποιότητα της έλλειψης μνήμης ισχύει τόσο προς τα πίσω όσο και προς τα εμπρός στο χρόνο.
Πως είναι αυτό δυνατόν?
Για να γίνει αυτό, εξετάζουμε τις ακόλουθες δύο δηλώσεις:
- Α) Ο πραγματικός μέσος χρόνος αναμονής μεταξύ δύο μπλοκ είναι \(10\) λεπτά, όχι \(20\) λεπτά.
- Β) Εάν επιλεγεί ένα τυχαίο χρονικό σημείο, αναμένουμε ότι το προηγούμενο μπλοκ \(10\) λεπτά στο παρελθόν και το επόμενο μπλοκ \(10\) λεπτά στο μέλλον. Έτσι μπορούμε να περιμένουμε χρόνο αναμονής \(20\) λεπτών μεταξύ των μπλοκ.
Ελέγχουμε και τις δύο δηλώσεις.
Για να γίνει αυτό, εξάγουμε πρώτα τα σχετικά δεδομένα, συγκεκριμένα τους χρόνους στους οποίους ολοκληρώθηκαν τα μπλοκ, σε ένα αρχείο TXT (που θα πραγματοποιηθεί με έναν τοπικά εκτελούμενο πλήρη κόμβο με βάση το bitcoind ):
e50bfacc95975a4e7545d83d8954645f
Αυτό μας δίνει το ακόλουθο αρχείο κειμένου , το οποίο τώρα επεξεργαζόμαστε περαιτέρω και αποθηκεύουμε στο /time.txt . Το ακόλουθο πρόγραμμα Rust χρησιμοποιείται για αυτό με το αρχείο /Cargo.toml:
e50bfacc95975a4e7545d83d8954645f
Το αρχείο /src/main.rs περιέχει την πραγματική λογική δοκιμής:
e50bfacc95975a4e7545d83d8954645f
Εγκαθιστούμε τις εξαρτήσεις, κατασκευάζουμε το πρόγραμμα και το ξεκινάμε:
e50bfacc95975a4e7545d83d8954645f
Πράγματι, και οι δύο προτάσεις είναι αληθείς όταν αναλύουμε την έξοδο:
e50bfacc95975a4e7545d83d8954645f
Αυτό μπορεί επίσης να εξηγηθεί διαισθητικά ως εξής: Εάν οι χρόνοι μπλοκ ποικίλλουν σημαντικά, ο συγκεκριμένος χρόνος αναμονής ποικίλλει - εάν πραγματοποιήσουμε τη συναλλαγή σε τυχαία χρονική στιγμή, η πιθανότητα είναι μεγαλύτερη να καταλήξουμε σε ένα διάστημα στο οποίο ο χρόνος αναμονής είναι μεγαλύτερος από 10 λεπτά, επειδή αυτά τα διαστήματα καταλαμβάνουν επίσης περισσότερο χώρο στη γραμμή χρόνου λόγω του μεγαλύτερου χρόνου.