Home  Guide  Forum

Difficulty


Το Difficulty είναι ένας αριθμός που ρυθμίζει το πόσο συχνά μπορούν οι miners να βάζουν νέα blocks στο blockchain. Κάθε 2 βδομάδες, δηλαδή κάθε 2016 blocks, το difficulty αλλάζει για να εξασφαλίσει πως κάθε 10 λεπτά θα βγαίνει νέο block.



Γιατί είναι σημαντικό το Difficulty;

Διότι όσοι miners κι αν υπάρχουν, το δίκτυο θα δημιουργεί νέα blocks με μέσο όρο κάθε 10 λεπτά.

Εάν το difficulty έμενε ίδιο τότε με το που θα διπλασιάζονταν οι miners, θα παρατηρούσαμε πως με μέσο όρο 5 λεπτών ένα νέο block θα έμπαινε στο blockchain.



Πώς υπολογίζεται το difficulty;

Με μία απλή μαθηματική πράξη.

difficulty = expected time / actual time

Όπως είπα κάθε 2016 blocks αλλάζει το difficulty. Αφού κάθε 10 λεπτά βγαίνει νέο block τότε το difficulty αλλάζει περίπου κάθε 20160 λεπτά.

Αφού το expected time = 20160, τότε:

difficulty = 20160 / actual time

Εάν υποθέσουμε πως μέσα σε μία μέρα, χιλιάδες νέοι miners αρχίζουν να εξορύκτουν και καταφέρουν να προσθέτουν νέο block κάθε 9 λεπτά τότε μετά από 18144 λεπτά (9 * 2016) θα έχουμε το εξής difficulty:

difficulty = 20160 / 18144 = 1.11

new difficulty = difficulty * 1.11

Φυσικά εάν λιγότεροι miners υπάρξουν τότε το νέο difficulty θα μειωθεί για να υπάρχει ισορροπία.



Πώς το difficulty εξασφαλίζει το χρόνο;

Θα δώσω ένα απλό παράδειγμα.

Σε ένα εύρος από το 1 μέχρι το 100 μπορείς να δημιουργείς έναν τυχαίο αριθμό το λεπτό.



Βάζω ένα σκοπό στη δουλειά αυτή. Πρέπει αυτός ο τυχαίος αριθμός που θα βγάλεις να είναι μικρότερος από έναν που θα σου επιλέξω.
Διαλέγω το 50. Ας τον ονομάσουμε target.



Αφού βγάζεις ένα τυχαίο νούμερο από το 1 μέχρι το 100 κάθε λεπτό τότε με μέσο όρο θα καταφέρεις να βγάλεις νούμερο κάτω από το 50 μέσα σε 2 λεπτά. Προσοχή, δεν είναι σίγουρο το 2 λεπτά. Μπορεί και στο πρώτο λεπτό να βρεις, αλλά μπορεί και 5 λεπτά να προσπαθείς αλλά να βγάζεις συνέχεια πάνω από το 50. Όλα είναι θέμα πιθανοτήτων. Γι'αυτό είπα και μέσο όρο.

Σε αυτό το απλό παράδειγμα το difficulty είναι ίσο με 2.
Γιατί; Ορίστε μια άλλη εξίσωση που υπολογίζει τον target:

target = targetmax / difficulty

=> target = 100 / 2

=> target = 50

Άρα όσο μεγαλύτερο difficulty έχουμε τόσο λιγότερες είναι οι πιθανότητες να βρούμε τον target.

Έτσι λοιπόν και στο mining αυτό που προσπαθείς είναι να βρεις target μικρότερο από αυτόν που έχει αποφασίσει το δίκτυο.
(ανάλογα με το difficulty)




Επειδή κάθε miner μπορεί το λεπτό να δημιουργεί εκατομμύρια τέτοιους αριθμούς, το difficulty είναι γελοία μεγάλο.