Το Bitcoin είναι μια ιδέα ψηφιακού νομίσματος που παρουσίασε ο θρυλικός και αινιγματικός Satoshi Nakamoto το 2009, χρησιμοποιεί την τεχνολογία blockchain ως υποδομή και λειτουργεί αποκεντρωμένα, από άτομο σε άτομο. Το Whitepaper που έγραψε ο Nakamoto για να εξηγήσει αυτή την ιδέα είναι απαραίτητο ανάγνωσμα για όποιον θέλει να καταλάβει το bitcoin και τα κρυπτονομίσματα γενικότερα. Δεν εξηγεί μόνο το bitcoin ως έννοια, αλλά και το πώς μπορεί ένα σύστημα ανοχής βυζαντινών σφαλμάτων να λειτουργήσει σε αποκεντρωμένο περιβάλλον.
Πρώτα απ' όλα, όποιος ενδιαφέρεται για το Bitcoin πρέπει να ξέρει ότι ο σημαντικότερος παράγοντας που έκανε την ιδέα του bitcoin πραγματικότητα είναι η τεχνολογία blockchain — και να καταλάβει πώς λειτουργεί αυτή η τεχνολογία.
Τι είναι το blockchain;
Το blockchain είναι μια αλυσίδα από μπλοκ, καθένα από τα οποία περιέχει δεδομένα, και δεν εποπτεύεται ούτε διαχειρίζεται από καμία κεντρική αρχή. Αυτές οι αλυσίδες πληροφορίας είναι κρυπτογραφικά ασφαλισμένες και δεν μπορούν να φιμωθούν χάρη στην αποκεντρωμένη δομή τους. Το blockchain χρησιμοποιεί στη βάση του δύο δομές δεδομένων: δείκτες (pointers) και συνδεδεμένες λίστες.
Δείκτες
Οι δείκτες είναι μεταβλητές που δείχνουν πού βρίσκεται μια άλλη μεταβλητή. Υπό κανονικές συνθήκες, οι μεταβλητές στον προγραμματισμό περιέχουν δεδομένα. (Στο παράδειγμα int a = 10, η ακέραια μεταβλητή a έχει τιμή 10.) Οι δείκτες, αντίθετα, δεν αποθηκεύουν μια τιμή ως δεδομένα, αλλά δείχνουν τη θέση της μεταβλητής που κρατά αυτά τα δεδομένα.
Συνδεδεμένες λίστες
Οι συνδεδεμένες λίστες είναι από τις σημαντικότερες μονάδες στις δομές δεδομένων και χονδρικά μοιάζουν κάπως έτσι.
Μια ακολουθία μπλοκ, καθένα από τα οποία περιέχει συγκεκριμένα δεδομένα και συνδέεται με το επόμενο μπλοκ μέσω ενός δείκτη. Η μεταβλητή του δείκτη περιέχει τη διεύθυνση του επόμενου κόμβου και έτσι εξασφαλίζεται η σύνδεση. Όπως είδαμε στον τελικό κόμβο, ο τελευταίος δείκτης δεν περιέχει κανένα δεδομένο.
Το σημαντικό εδώ είναι ότι κάθε δείκτης περιέχει τη διεύθυνση του επόμενου μπλοκ. Πού βρίσκεται λοιπόν ο δείκτης προς το πρώτο μπλοκ; Το πρώτο μπλοκ ονομάζεται genesis block και ο δείκτης του βρίσκεται μέσα στο ίδιο το σύστημα.
Ο δείκτης hash είναι ένας δείκτης που περιέχει το hash του προηγούμενου μπλοκ.
Το hash είναι μια διαδικασία που παίρνει δεδομένα οποιουδήποτε μήκους και, μέσω μιας συγκεκριμένης συνάρτησης, παράγει αποτέλεσμα πάντα ίδιου μήκους, ανεξάρτητα από το περιεχόμενο των δεδομένων. Στην περίπτωση του Bitcoin, η συναλλαγή μεταφοράς λαμβάνεται ως δεδομένο και περνά από τον αλγόριθμο SHA-256 για να παραχθεί αποτέλεσμα σταθερού μήκους. Ανεξάρτητα από το μήκος των δεδομένων που εισάγονται, ο αλγόριθμος SHA-256 παράγει πάντα αποτέλεσμα μήκους 256 bit.
Στην απλούστερη μορφή του, το blockchain είναι μια συνδεδεμένη λίστα, όπως φαίνεται παρακάτω.
Το blockchain είναι μια συνδεδεμένη λίστα στην οποία κάθε μπλοκ περιέχει δεδομένα και έναν δείκτη hash που δείχνει στο μπλοκ που προηγείται. Τι είναι λοιπόν ο δείκτης hash; Οι δείκτες hash μοιάζουν πολύ με τους απλούς δείκτες, αλλά εκτός από τη διεύθυνση του προηγούμενου μπλοκ περιέχουν και το hash των δεδομένων εκείνου του μπλοκ. Αυτή η μικρή διαφορά στη δομή είναι που κάνει την τεχνολογία blockchain τόσο ασφαλή.
Ας υποθέσουμε για μια στιγμή ότι ένας επιτιθέμενος θέλει να χτυπήσει το μπλοκ 3 και να αλλάξει τα δεδομένα του. Λόγω της συνάρτησης hash, η παραμικρή αλλαγή στα δεδομένα θα αποτυπωθεί στο αποτέλεσμα ως τεράστια διαφορά. Η ελάχιστη αλλαγή στα δεδομένα του μπλοκ 3 θα αλλάξει το hash που είναι αποθηκευμένο στο μπλοκ 2, η αλλαγή στο μπλοκ 2 θα επηρεάσει το hash στο μπλοκ 1, οπότε θα έπρεπε να αλλάξει ολόκληρη η αλυσίδα, κάτι αδύνατο. Αυτή είναι η μέθοδος που κάνει τα blockchain αδύνατο να φιμωθούν.
Τι είναι η εξόρυξη;
Η εξόρυξη είναι η διαδικασία που απαιτείται για τη δημιουργία νέων bitcoin. Η εξόρυξη bitcoin λειτουργεί με την αρχή Proof of Work — POW. Με απλά λόγια: η επίλυση ενός προβλήματος πρέπει να είναι πολύ δύσκολη, αλλά μόλις το λύσεις, η ορθότητα της λύσης σου πρέπει να αποδεικνύεται πολύ εύκολα.
Πριν φτάσουμε στο πώς το Bitcoin αξιοποίησε το POW ως έννοια, ας προσπαθήσουμε να καταλάβουμε γιατί τα κρυπτονομίσματα χρειάζονται ένα τέτοιο σύστημα.
Πριν από το Bitcoin είχαν δημιουργηθεί διάφορα ψηφιακά νομίσματα, όμως όταν στήνεις ένα αποκεντρωμένο δίκτυο από άτομο σε άτομο στο ψηφιακό περιβάλλον, το μεγαλύτερο εμπόδιο είναι το λογικό πρόβλημα που ονομάζεται πρόβλημα των βυζαντινών στρατηγών. Επειδή ο Nakamoto κατάφερε να ξεπεράσει αυτό το πρόβλημα στο bitcoin με το POW, το bitcoin μπόρεσε να ξεκινήσει τη ζωή του και συνεχίζει δυναμικά.
Το πρόβλημα των βυζαντινών στρατηγών
Ας συνεχίσουμε εξηγώντας το πρόβλημα των βυζαντινών στρατηγών, που χρησιμοποιείται συχνά και σε ακαδημαϊκές μελέτες. Οι βυζαντινοί στρατηγοί που σχεδιάζουν επίθεση στην εχθρική πόλη έχουν δύο προβλήματα:
Οι στρατηγοί βρίσκονται πολύ μακριά ο ένας από τον άλλον, οπότε είναι αδύνατο μια κεντρική αρχή να διευθύνει την πολιορκία.
Ο εχθρός διαθέτει επίσης ισχυρό στρατό, άρα η επίθεση πρέπει να γίνει από όλους τους στρατηγούς ταυτόχρονα για να υπάρξει επιτυχία.
Ενώ οι πολιορκητικοί στρατοί περικυκλώνουν την πόλη, κάθε στρατός μεταβιβάζει το μήνυμα της διαταγής από τον στρατό στα δεξιά του στον στρατό στα αριστερά του, και έτσι διατηρείται η επικοινωνία. Το πρόβλημα όμως είναι ότι όταν έρθει η διαταγή «επιτιθέμεθα την Τετάρτη», κάποιος στρατός μπορεί να μην είναι έτοιμος και να στείλει πίσω μήνυμα: όχι, επίθεση την Παρασκευή. Ή ο στρατιώτης που μεταφέρει το μήνυμα μπορεί να αιχμαλωτιστεί από τον εχθρό, ή το περιεχόμενο του μηνύματος να αλλοιωθεί. Σε ένα τόσο ανασφαλές περιβάλλον, κάθε επίθεση θα αποτύχει αν δεν επιτευχθεί πλήρης συντονισμός.
Το ίδιο λογικό πρόβλημα ισχύει και για τα δίκτυα blockchain που αποτελούν την υποδομή κρυπτονομισμάτων όπως το bitcoin. Πρόκειται για απίστευτα μεγάλα δίκτυα — πώς να εμπιστευτούμε κάθε άνθρωπο μέσα σε αυτά; Μπορεί να θέλουμε να στείλουμε σε κάποιον 4 ether, αλλά πώς να είμαστε σίγουροι ότι κάποιος κακόβουλος δεν θα κάνει το ποσό 40 ether;
Ο Satoshi Nakamoto κατάφερε να ξεπεράσει αυτό το λογικό πρόβλημα εισάγοντας το πρωτόκολλο proof of work. Ας δούμε πώς λειτουργεί:
Όταν ο πολιορκητικός στρατός θέλει να μεταφέρει το μήνυμα «επιτιθέμεθα τη Δευτέρα» στον στρατό στα αριστερά του, πρέπει να ακολουθήσει τα εξής βήματα·
Πρώτα, στο αρχικό μήνυμα ανατίθεται μια τυχαία τιμή μίας χρήσης που ονομάζεται «nonce». Το nonce μπορεί να είναι οποιαδήποτε τιμή στο δεκαεξαδικό σύστημα.
Έπειτα, το κείμενο του μηνύματος μαζί με την τιμή nonce περνά από τη συνάρτηση hash και προκύπτει ένα αποτέλεσμα. Στη φανταστική επίθεση που εξετάζουμε, ας υποθέσουμε ότι οι διοικητές συμφώνησαν να μοιράζονται μεταξύ τους μόνο τα αποτελέσματα της συνάρτησης hash που ξεκινούν με πέντε μηδενικά.
Αν το αποτέλεσμα της συνάρτησης hash είναι το επιθυμητό, προωθούν το μήνυμα στον επόμενο στρατηγό. Αν τα αποτελέσματα δεν ταιριάζουν, πρέπει να αλλάξουν τυχαία την τιμή nonce και να επαναλάβουν τη διαδικασία μέχρι να προκύψει αποτέλεσμα με πέντε μηδενικά στην αρχή. Ένα τέτοιο σύστημα απαιτεί απίστευτα μεγάλο χρόνο και υπολογιστική ισχύ.
Αν ο στρατιώτης που μεταφέρει το μήνυμα αιχμαλωτιστεί ή αλλάξει το περιεχόμενο του μηνύματος, το αποτέλεσμα του hash θα διαφέρει ριζικά λόγω των ιδιοτήτων της συνάρτησης hash. Ελέγχοντας το μήνυμα, οι στρατηγοί θα διαπιστώσουν ότι τα πρώτα πέντε ψηφία του hash δεν είναι μηδενικά και θα ματαιώσουν την επίθεση.
Ωστόσο, αν και είναι πολύ απίθανο, κάθε συνάρτηση hash μπορεί να δώσει συγκρουόμενα αποτελέσματα. Θεωρητικά, όταν το A και το B είναι δύο ξεχωριστές είσοδοι, δεν θα έπρεπε να υπάρχει πιθανότητα να ισχύει H(A) = H(B), αλλά στην πραγματική εφαρμογή καμία συνάρτηση hash δεν είναι πλήρως ανθεκτική σε συγκρούσεις.
Λοιπόν, σε αυτή τη μικρή πιθανότητα, τι γίνεται αν ο στρατιώτης που μεταφέρει το μήνυμα αιχμαλωτιστεί, το μήνυμα αλλάξει και το hash βγει ακριβώς όπως το περιμένουν οι στρατηγοί; Θα ήταν φυσικά μια χρονοβόρα διαδικασία, αλλά όχι αδύνατη. Απέναντι σε αυτό, οι στρατηγοί χρησιμοποιούν την αριθμητική τους υπεροχή.
Το πρόβλημα ξεπερνιέται αν τρεις στρατηγοί στέλνουν μηνύματα προς τα αριστερά ταυτόχρονα, αντί ένας μόνο στρατηγός να μεταβιβάζει με τη σειρά το μήνυμα από τα δεξιά προς τα αριστερά. Αν οι στρατηγοί συνθέσουν από τα δικά τους μηνύματα ένα αθροιστικό μήνυμα, το περάσουν από τη συνάρτηση hash, αναθέσουν στο αποτέλεσμα μια τιμή nonce και το ξαναβάλουν στη συνάρτηση hash, αυτή τη φορά τα πρώτα έξι ψηφία του αποτελέσματος πρέπει να είναι μηδενικά.
Σε αυτό το στάδιο, το να βρεθεί η τιμή nonce αυτού του μηνύματος και να αλλοιωθεί το περιεχόμενό του γίνεται σοβαρή σπατάλη χρόνου.
Το έργο όμως των στρατηγών που λαμβάνουν το μήνυμα είναι εύκολο· αρκεί να προσθέσουν την τιμή nonce που τους δόθηκε στο αποτέλεσμα hash και να συγκρίνουν τα αποτελέσματα. Αυτό το βήμα είναι μια πολύ γρήγορη και απλή διαδικασία. Αυτή η ιδέα είναι ο μηχανισμός λειτουργίας της αρχής proof of work.
Η εύρεση της τιμής nonce για το κατάλληλο hash απαιτεί τεράστια υπολογιστική ισχύ και χρόνο
Αντίθετα, ο έλεγχος των αποτελεσμάτων και η διαπίστωση τυχόν κακόβουλης πρόθεσης παίρνει ελάχιστο χρόνο.
Έτσι ακριβώς εφαρμόζουν οι εξορύκτες το πρωτόκολλο proof of work στην εξόρυξη Bitcoin. Χρησιμοποιούν την υπολογιστική τους ισχύ για να λύσουν το κρυπτογραφικό πρόβλημα που έχουν μπροστά τους και να δημιουργήσουν το επόμενο μπλοκ. Στο blockchain του Bitcoin, τα μπλοκ δημιουργούνται κάθε 10 λεπτά.
Πώς γίνονται οι μεταφορές στο δίκτυο Bitcoin;
Ας πούμε ότι ο John θέλει να στείλει λίγα bitcoin στον Dave. Πώς γίνεται αυτή η μεταφορά; Οι μεταφορές bitcoin λειτουργούν πολύ διαφορετικά από τις μεταφορές παραστατικού χρήματος. Αν ο John ήθελε να δώσει 10 USD στον Dave, θα έβγαζε φυσικά το χαρτονόμισμα των 10 USD από το πορτοφόλι του, θα του το έδινε και η μεταφορά θα είχε ολοκληρωθεί. Στο bitcoin όμως είναι διαφορετικά· δεν είναι κάτι που κατέχουμε φυσικά. Αυτό που έχουμε είναι η απόδειξη ότι έχουμε bitcoin.
Υπάρχουν δύο πράγματα που πρέπει να ξέρουμε και να προσέξουμε·
Οι εξορύκτες επιβεβαιώνουν και ασφαλίζουν τις συναλλαγές μεταφοράς με τα δεδομένα που τοποθετούν στο μπλοκ που δημιουργούν. Χρεώνουν επίσης προμήθεια για αυτή την υπηρεσία.
Στα παραστατικά νομίσματα, δεν γνωρίζουμε ούτε παρακολουθούμε την ιστορία του χαρτονομίσματος που κρατάμε. Δεν υπάρχει πρακτικός τρόπος να γίνει αυτό. Στο bitcoin, αντίθετα, κάθε συναλλαγή μεταφοράς καταγράφεται στο δίκτυο.
Υπό το πρίσμα αυτό, ας δούμε τη μεταφορά bitcoin ανάμεσα στον John και τον Dave. Αυτή η μεταφορά έχει δύο μέρη· είσοδο και έξοδο (input-output).
Για να πραγματοποιήσει ο John τη μεταφορά, πρέπει να έχει bitcoin από προηγούμενες μεταφορές. Όπως αναφέραμε, όλες οι μεταφορές καταγράφονται στο δίκτυο bitcoin.
Ο John πρέπει να συγκεντρώσει τα bitcoin από τις μεταφορές που έλαβε νωρίτερα με τα ονόματα TR(0), TR(1) και TR(2), να δημιουργήσει μια νέα μεταφορά με το όνομα TR(INPUT) και να τη στείλει στον Dave. Εδώ το TR(INPUT) γίνεται τα δεδομένα εισόδου για τη νέα μεταφορά.
Κάπως έτσι μοιάζει, χονδρικά, η μεταφορά bitcoin από την πλευρά της εισόδου.
Τα δεδομένα εξόδου θα περιέχουν απλώς την ποσότητα bitcoin που πρέπει να έχει ο Dave μετά τη νέα μεταφορά και τα υπόλοιπα ρέστα, που επιστρέφουν στον John ως τιμή TR(INPUT) στην επόμενη μεταφορά του.
Αν εξαιρέσουμε το μέρος των ρέστων, η διαδικασία περιλαμβάνει ένα μόνο αποτέλεσμα εξόδου, είναι όμως δυνατές και μεταφορές με πολλαπλά αποτελέσματα εξόδου. Αυτή η περιγραφή δείχνει απλά πώς γίνεται μια μεταφορά στο δίκτυο bitcoin. Για να συμβούν όμως όλα αυτά με επιτυχία, πρέπει να πληρούνται ορισμένες προϋποθέσεις.
Προϋποθέσεις που πρέπει να τηρούν οι μεταφορές:
TR(INPUT) > TR(OUTPUT). Η μεταφορά εισόδου πρέπει πάντα να είναι μεγαλύτερη από τη μεταφορά εξόδου. Σε κάθε μεταφορά, η διαφορά ανάμεσα στην είσοδο και την έξοδο (έξοδος + ρέστα) καταβάλλεται στους εξορύκτες ως προμήθεια. Δηλαδή: Προμήθεια εξόρυξης = TR(INPUT) - (TR(OUTPUT) + ΡΕΣΤΑ)
Στην πλευρά της εισόδου πρέπει να ισχύει TR(0)+TR(1)+TR(2)=TR(INPUT). Με άλλα λόγια, ο John πρέπει να έχει αρκετά bitcoin για να στείλει στον Dave. Αν δεν έχει αρκετά bitcoin για να εκτελεστεί η συναλλαγή, η μεταφορά απορρίπτεται από τους εξορύκτες.
Τώρα ο Dave πρέπει να αποδείξει ότι είναι ο κάτοχος των bitcoin που του στάλθηκαν. Ο John κρυπτογράφησε τη μεταφορά bitcoin με το δημόσιο κλειδί του Dave. Ο Dave μπορεί να ανοίξει αυτή την κρυπτογράφηση μόνο με το ιδιωτικό του κλειδί.
Παράλληλα, ο John πρέπει να αποδείξει ότι έχει αρκετά bitcoin για να στείλει στον Dave. Το κάνει υπογράφοντας τη μεταφορά που θέλει να εκτελέσει με το δικό του ιδιωτικό κλειδί. Οποιοσδήποτε μπορεί να την ανοίξει με το δημόσιο κλειδί του John και να επαληθεύσει ότι όντως διαθέτει την απαιτούμενη ποσότητα bitcoin. Αυτή η απόδειξη ονομάζεται δεδομένα υπογραφής.
Τα δεδομένα εισόδου (μαζί με τα δεδομένα υπογραφής) και τα δεδομένα εξόδου προστίθενται και περνούν από τον αλγόριθμο hash SHA-256. Το αποτέλεσμα αυτού του αλγορίθμου ονομάζεται μεταφορά.
Ένα πράγμα πρέπει να θυμόμαστε: για να γίνει μια μεταφορά bitcoin, ο εξορύκτης που εξόρυξε το μπλοκ πρέπει να τοποθετήσει φυσικά τη μεταφορά μέσα στο μπλοκ. Ο εξορύκτης που εξόρυξε το μπλοκ μπορεί να λάβει προμήθεια για όλες τις μεταφορές που έβαλε σε αυτό. Καθώς οι όγκοι των μεταφορών αυξάνονται με τον χρόνο, οι μεταφορές πρέπει να περιμένουν να εμφανιστεί νέο μπλοκ, επειδή τα μπλοκ γεμίζουν εντελώς. Στην πράξη, όσοι δεν θέλουν να περιμένουν πληρώνουν υψηλότερη προμήθεια εξόρυξης, ώστε η μεταφορά τους να ξεχωρίζει και να γίνεται πιο ελκυστική για τους εξορύκτες.
Έτσι προέκυψε η αρχή replace-by-fee. Λειτουργεί απλά ως εξής: Ακόμη κι αν ο John έστειλε 5 BTC στον Dave, η συναλλαγή δεν μπαίνει ποτέ σε μπλοκ και μένει σε εκκρεμότητα επειδή η προμήθεια εξόρυξης κρατήθηκε χαμηλή. Δεν υπάρχει τρόπος αναίρεσης ή ακύρωσης της συναλλαγής, καθώς τα ξοδεμένα bitcoin δεν ανακτώνται. Ωστόσο, αν ο John κάνει μεταφορά στην ίδια διεύθυνση για το ίδιο ποσό BTC με υψηλότερη προμήθεια εξόρυξης, η παλιά μεταφορά θεωρείται άκυρη και η νέα περιμένει να εκτελεστεί.
Το μέλλον του Bitcoin και των κρυπτονομισμάτων γενικότερα είναι γεμάτο αμέτρητες δυνατότητες. Οι εφαρμογές του blockchain δεν γνωρίζουν όρια και τα έργα στον τομέα γίνονται μέρα με τη μέρα πιο επιτυχημένα και πιο ασφαλή.
Στη διαδρομή από τα εμπορευματικά νομίσματα στη χρήση πολύτιμων μετάλλων όπως ο χρυσός και ο άργυρος, και από εκεί στο χαρτονόμισμα και τα ονομαστικά νομίσματα, η ιδέα του χρήματος στο εικονικό περιβάλλον δεν είναι και τόσο καινούργια — έγινε όμως εφαρμόσιμη μόλις στην πρόσφατη ιστορία.
Κατά κάποιους είναι μια ομάδα μέσα στη CIA, κατά άλλους εξωγήινος, ίσως πράγματι να είναι ένας cyberpunk ονόματι Satoshi Nakamoto. Όποιος κι αν είναι, μας άφησε μόνους να αποφασίσουμε τι θα κάνουμε στη συνέχεια με τις ιδέες του και την εφαρμογή τους, που αλλάζουν εντελώς τον τρόπο που βλέπουμε τα περιουσιακά μας στοιχεία και τον τρόπο που τα φυλάμε. Άνοιξε τον δρόμο για ιδέες πιο προχωρημένες από τη δική του και έπεισε τον κόσμο να υιοθετήσει μια εντελώς διαφορετική οπτική.

Ο Satoshi δεν παρέλειψε να κρύψει ένα μήνυμα στο genesis block, το αρχικό μπλοκ που εξόρυξε και έγραψε ως hard code. Καταγράφοντας την ημερομηνία 3 Ιανουαρίου 2009, επισύναψε έναν τίτλο από τους βρετανικούς Times εκείνης της ημέρας για τις τράπεζες που ευθύνονταν για την παγκόσμια οικονομική κρίση· «Ο υπουργός βρίσκεται στα πρόθυρα δεύτερης διάσωσης των τραπεζών». Πιθανότατα με αυτά τα λόγια σατιρίζει το σύστημα των κεντρικών τραπεζών. Δεν είναι γνωστό γιατί ο Satoshi δημιούργησε αυτή τη μη ξοδεύσιμη διεύθυνση στο αρχικό μπλοκ. Μέχρι σήμερα έχουν σταλεί ανώνυμα 16 BTC σε αυτή τη διεύθυνση, και γι' αυτό η συνολική προσφορά των 21 εκατομμυρίων bitcoin δεν θα συμβεί ποτέ στην πραγματικότητα.
Χρειάστηκαν μόλις 9 χρόνια για να φτάσει το Bitcoin σε επίπεδα που τρομάζουν τις κεντρικές τράπεζες του κόσμου, και έχει ακόμη πολύ δρόμο μπροστά του.
