Χρόνος αποκλεισμού Bitcoin

Γνωρίζετε: Ο αναμενόμενος χρόνος μεταξύ δύο μπλοκ 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 λεπτά, επειδή αυτά τα διαστήματα καταλαμβάνουν επίσης περισσότερο χώρο στη γραμμή χρόνου λόγω του μεγαλύτερου χρόνου.

Πίσω