Author

Topic: Δεν καταλαβαίνεις πως λειτουργεί το Bitcoin; Δες εδώ. (Read 232 times)

legendary
Activity: 1512
Merit: 7340
Farewell, Leo
Το βρίσκω καλύτερο να ποστάρω ένα ωραίο thread εδώ παρά να φτιάξω ένα ολόκληρο site. Ελπίζω να βοηθήσει όσο μπορεί αυτούς που δεν καταλαβαίνουν. Είναι μετάφραση ενός άλλου σάιτ. Έχω προσθέσει και κάποια πράγματα δικά μου.

Πώς δουλεύει το Bitcoin;

Το bitcoin είναι ένας ηλεκτρονικό τρόπος συναλλαγής που δημιουργήθηκε το 2009. Σου επιτρέπει να στείλεις χρήματα σε οποιονδήποτε χωρίς την ύπαρξη μιας κεντρικής εξουσίας, που αποφασίζει πότε θα εκδόσει λογαριασμούς και θα διεκπληρώσει συναλλαγές, όπως για παράδειγμα μία τράπεζα.

Δημιουργήθηκε ως λύση του σύγχρονου χρηματοοικονομικού συστήματος, στο οποίο ένας μικρός αριθμός μεγάλων τραπεζών ελέγχει την έκδοση λογαριασμών και την επεξεργασία συναλλαγών. Οι τράπεζες συγκεντρώνουν τα χρήματα των χρηστών τους και τους αναγκάζουν να τις εμπιστευτούν.

Quote
Banks must be trusted to hold our money and transfer it electronically, but they lend it out in waves of credit bubbles with barely a fraction in reserve. – Satoshi Nakamoto

Η κατάχρηση αυτής της εμπιστοσύνης και η ύπαρξη οικονομικής κρίσης το 2007 ήταν αιτίες για την δημιουργία του Bitcoin, το οποίο λειτουργεί ως σύστημα πληρωμών χωρίς κεντρικό σημείο ελέγχου. Το Bitcoin δημιουργήθηκε το 2009 από έναν προγραμματιστή, που αποφάσισε να κρατήσει την ταυτότητά του κρυφή, παρουσιάζοντας τον εαυτό του με το ψευδώνυμο «Satoshi Nakamoto». Μέχρι σήμερα γνωρίζουμε ελάχιστα πράγματα για αυτόν τον άνθρωπο, όμως πιθανότατα να έχει στην κατοχή του πάνω από 1 εκατομμύριο bitcoins

Τι είναι Bitcoin;

Το Bitcoin είναι απλά ένα πρόγραμμα. Μπορείς να το κατεβάσεις κι εσύ στον υπολογιστή σου: https://bitcoin.org/en/download

Όταν τρέξεις το πρόγραμμα θα συνδεθείς μαζί με άλλους που τρέχουν το ίδιο πρόγραμμα (τους αποκαλούμε nodes), και θα αρχίσουν να σου μοιράζουν ένα αρχείο. Αυτό το αρχείο λέγεται blockchain, και είναι μια μεγάλη λίστα με συναλλαγές (ή αλλιώς transactions).



Όταν γίνει μια νέα συναλλαγή, μεταδίδεται από υπολογιστή σε υπολογιστή μέχρι όλοι να έχουν ένα αντίγραφο της. Κάτα μέσο όρο, κάθε 10 λεπτά ένας τυχαίος υπολογιστής (node) βάζει τις τελευταίες συναλλαγές στο αρχείο blockchain και ύστερα μοιράζει το αρχείο του σε όλο το δίκτυο.



Το αποτέλεσμα; Το πρόγραμμα Bitcoin δημιουργεί ένα μεγάλο δίκτυο από υπολογιστές που επικοινωνούν μεταξύ τους μεταδίδοντας ένα αρχείο που ανανεώνεται συνεχώς με νέες συναλλαγές.


Τι πρόβλημα λύνει το Bitcoin;

Ήταν δυνατόν και πριν το Bitcoin να δημιουργήσεις συναλλαγές και να τις μεταφέρεις σε ένα δίκτυο υπολογιστών. Ωστόσο, το πρόβλημα ήταν πως μπορούσες να φτιάξεις πολλές ψεύτικες συναλλαγές και να τις μοιράσεις στο δίκτυο. Για παράδειγμα, μπορούσες να δημιουργήσεις 2 συναλλαγές που ξοδεύουν τον ίδιο αριθμό coins (ακόμα κι αν δεν αρκούσαν αυτά που έχεις) και να τις στείλεις στο δίκτυο την ίδια χρονική στιγμή. (Διαλέγεις έναν node για την μία και αμέσως μετά, έναν node για την άλλη, αυτοί απλά θα συνέχιζαν να το μοιράζουν)

Αυτό είναι γνωστό ως “double-spend”. Δείτε το παράδειγμα στην εικόνα:



Ακόμη, λοιπόν, κι αν δεν αρκούσαν τα coins που έχεις γι' αυτές τις δύο συναλλαγές, μοίρασες σε κάποιους υπολογιστές την πληροφορία ότι έκανες μία συναλλαγή και σε κάποιους άλλους μία άλλη που δεν θα επιβεβαιωνόταν από τους πρώτους. Οπότε τους ξεγέλασες, διότι όλοι οι υπολογιστές θα έχουν γραμμένο πως έχεις κάνει μόνο μία συναλλαγή. Δεν μπορείς να γνωρίζεις ποια συναλλαγή έγινε πρώτη από τη στιγμή που όλοι οι υπολογιστές στο δίκτυο λειτουργούν ανεξάρτητα. Κάποιοι θα λάβουν την πράσινη πρώτα και άλλοι την κόκκινη. Ποιος ορίζει σε αυτήν την περίπτωση ποια είναι η σωστή και ποια η λάθος; Κανένας.

Το Bitcoin, όμως λύνει αυτό το πρόβλημα αναγκάζοντας τους υπολογιστές να κρατούν όλες τις συναλλαγές που λαμβάνουν, στη μνήμη τους, πριν τις γράψουν στο αρχείο blockchain. Μετά, με μέσο όρο 10 λεπτών, κάποιος τυχαίος υπολογιστής θα γράψει στο blockchain του, όλες τις συναλλαγές και θα αρχίσει να μοιράζει το αρχείο του σε όλο το δίκτυο. Είναι όντως τυχαίος; Όχι ακριβώς... Θα το εξηγήσω καλύτερα πιο μετά. Στην παρακάτω εικόνα μπορείτε να δείτε πως το Bitcoin έλυσε το πρόβλημα του "double-spend":



Ο υπολογιστής που θα καταφέρει να προσθέσει τις συναλλαγές στο blockchain, θα αρχίσει να το μοιράζει και στους άλλους. Οι άλλοι θα επιβεβαιώνουν πως, ισχύει, εκείνος ο υπολογιστής κατάφερε και το έβαλε στο blockchain. Έπειτα, αυτό το ανανεωμένο αρχείο (blockchain) που θα αρχίσει να μοιράζεται σε όλο το δίκτυο θα θεωρηθεί από όλους τους υπολογιστές ως το «σωστό», με αποτέλεσμα να είναι αδύνατο να ξεγελάσεις το δίκτυο.



Όπως είπαμε, κάποιος «τυχαίος» υπολογιστής θα προσθέσει τις συναλλαγές στο blockchain. Θα ήταν καλύτερο να τον πούμε τυχερό παρά τυχαίο. Γιατί; Η διαδικασία του να προσπαθήσεις να βάλεις τις τελευταίες συναλλαγές στο blockchain λέγεται mining, και είναι ουσιαστικά ένας διαγωνισμός.


Πώς δουλεύει το mining;

Αρχικά, κάθε υπολογιστής παίρνει τις τελευταίες συναλλαγές και τις προσθέτει στο memory pool, που είναι απλά μια προσωρινή μνήμη του υπολογιστή (όπως είπα και πριν). Μετά ο καθένας προσπαθεί να κάνει mine τις συναλλαγές από το memory pool στο blockchain.

Για να το καταφέρει αυτό, λέμε πως συγκεντρώνει όλες τις συναλλαγές από το memory pool σε κάτι που λέγεται block, και μετά χρησιμοποιεί επεξεργαστική ισχύ για να τις βάλει στο blockchain και να αρχίζει να το μοιράζει.



Και θα μου πεις, γιατί επεξεργαστική ισχύ; Αν δεν έχεις ασχοληθεί με προγραμματισμό ή κρυπτογραφία στο παρελθόν ίσως να σου φανεί παράξενο. Ας πούμε πως για να καταφέρεις να κάνεις mine το καινούργιο block που θα μοιραστεί σε όλο το κόσμο πρέπει να περάσεις από κάτι που λέγεται hash function. Το hash function είναι μια λειτουργία που μετατρέπει οποιοδήποτε κείμενο σε μια σειρά από τυχαία νούμερα και λατινικούς χαρακτήρες. Είναι μη ανατρέψιμο στην αρχική του μορφή. Αυτό δεν θα εξηγήσω πως ισχύει αλλά θα δώσω ένα παράδειγμα. Ας πάρουμε τον αριθμό 100 και ας υποθέσουμε πως είναι αυτή η «σειρά» από τυχαίους χαρακτήρες. Δεν υπάρχει κάποιος τρόπος για να πάμε στην αρχική του μορφή (που θα είναι για παράδειγμα 2 αριθμοί που θα αθροίζονται), επειδή το 100 βγαίνει από το 50 + 50 βγαίνει και από το 68 + 32.



Για να καταφέρεις να βάλεις το block στο blockchain πρέπει αυτός ο αριθμός (δηλαδή το block hash) να είναι μικρότερος από τον target, ένα νούμερο που όλο το δίκτυο έχει αποδεχτεί να μην υπερβαίνουμε. (Και που αλλάζει σε κάθε block.



Αν το block hash που θα παράξεις δεν είναι μικρότερος από τον target, μπορείς να αλλάξεις κάτι μέσα στο block που λέγεται nonce και να ξαναδοκιμάσεις. Το nonce είναι ένα νούμερο. Τίποτα άλλο. Απλά αλλάζοντάς το, αλλάζει τελείως και το νέο hash και ελπίζεις κάνοντας συνεχώς αυτήν την αλλαγή (δηλαδή βάζοντας το nonce είτε 1 είτε 2 είτε x κτλπ) πως θα βρεις κάποιο hash που να είναι κάτω από τον target.

Όπως είπα, hash είναι μια σειρά από τυχαία γράμματα και αριθμούς. π.χ το hash του «a» είναι:
Code:
ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
Είπα πως το hash πρέπει να είναι μικρότερος αριθμός από τον target. Ακόμα κι αν δεν φαίνεται αριθμός, όταν το μετατρέψουμε σε μορφή decimal θα μπορούμε εμείς οι άνθρωποι να τον διαβάσουμε. π.χ το decimal του από πάνω hash είναι:
Code:
91634880152443617534842621287039938041581081254914058002978601050179556493499



Συνοψίζοντας, η διαδικασία του mining χρησιμοποιεί επεξεργαστική ισχύ, αφού ο υπολογιστής που θα είναι ο γρηγορότερος θα έχει τις περισσότερες πιθανότητες να βάλει το block στο blockchain για να αρχίσει να το μοιράζει.

ΣΗΜΕΙΩΣΗ: Ακόμη κι αν όλοι έχουμε την δυνατότητα να κάνουμε mining, στη σημερινή εποχή δεν έχει κάποιο νόημα να προσπαθήσουμε από το PC μας. Υπάρχουν φθηνά hardwares που κάνουν την δουλειά ενός υπολογιστή εκατοντάδες φορές πιο γρήγορα. Δυστυχώς, μόνο αυτοί που έχουν πολλά hardwares και πρόσβαση σε φθηνό ρεύμα «επιζούν» στο κόσμο των miners.


Πώς γεννιούνται τα bitcoins;

Ως κίνητρο για να χρησιμοποιήσει ο καθένας μας επεξεργαστική ισχύ, το δίκτυο έχει αποδεχτεί να υπάρχει μια ανταμοιβή σε αυτόν που θα καταφέρει να βάλει το τελευταίο block στο blockchain, και είναι ένας συγκεκριμένος αριθμός bitcoins. Μπορούμε να πούμε πως αυτά τα bitcoins γεννιούνται από «κοπανιστό αέρα». Επομένως, αν καταφέρεις και είσαι ο τυχερός που θα κάνει mine το block, θα κερδίσεις ένα ποσό που θα σταλεί στο bitcoin address σου για τον κόπο σου.



Αυτή η ανταμοιβή ονομάζεται block reward. Ξεκίνησε να είναι 50 bitcoins για κάθε block και κάθε 4 χρόνια (δηλαδή κάθε 210.000 blocks) συμβαίνει κάτι που λέγεται halving και μειώνει το reward στο μισό. Στο έτος 2020 που έχουμε τώρα το κάθε block παράγει 6.25 bitcoins.


Γιατί το αρχείο λέγεται “blockchain”;

Όπως είδαμε, οι συναλλαγές δεν μπαίνουν στο blockchain ατομικά. Μαζεύονται πρώτα στο memory pool και μετά οι miners προσπαθούν να τις «λύσουν» για να τις βάλουν στο blockchain, και ένας θα το καταφέρει μοιράζοντάς το σε όλο το κόσμο. Κάθε ένα από αυτά τα blocks χτίζεται πάνω από ένα που υπήρχε από πριν, δηλαδή μιλάμε για μία αλυσίδα από blocks. Εξού και και η λέξη blockchain.



Επίσης, κάθε υπολογιστής πάντα θα θεωρεί την μεγαλύτερη αλυσίδα των blocks που λαμβάνει σαν “αυθεντική” του blockchain. Αυτό σημαίνει πως οι miners θα προσπαθούν να χτίσουν στη μεγαλύτερη αλυσίδα, τα blocks τους. Κάθε block που δεν θα ανήκει σε αυτή θα θεωρηθεί ως άκυρο.



Επομένως, αν κάποιος ήθελε να ξαναγράψει το ιστορικό όλων των συναλλαγών που έχουν γίνει (για δικό του όφελος) θα πρέπει να φτιάξει μια μεγαλύτερη αλυσίδα από αυτή που υπάρχει ήδη (δηλαδή μια αλυσίδα με μεγαλύτερη δυσκολία αθροίζοντας όλα τα blocks) . Για να το πετύχει αυτό θα χρειαστεί μεγαλύτερη επεξεργαστική ισχύ από αυτήν που υπάρχει ήδη, τουλάχιστον «στο μισό» το δίκτυο. (Αυτό είναι γνωστό ως 51% attack)



Με αποτέλεσμα, όσο περισσότεροι miners συμμετέχουν, τόσο πιο δύσκολο θα είναι να φτιάξεις ένα μεγαλύτερο blockchain για να τους ξεγελάσεις.


Πώς δουλεύουν οι συναλλαγές;

Φαντάσου το blockchain σαν ένα μέρος με ασφαλή “κιβώτια”, που τα αποκαλούμε outputs. Αυτά τα outputs κρατούν μέσα τους ένα σημαντικό αριθμό από bitcoins.



Όταν κάνεις μια bitcoin συναλλαγή, διαλέγεις κάποια outputs και τα ξεκλειδώνεις, μετά δημιουργούνται νέα outputs τα οποία τα κλειδώνεις δηλώνοντας πως ανήκουν σε αυτόν που θέλεις να τα στείλεις.



Οπότε όταν στέλνεις σε κάποιον bitcoins ουσιαστικά του δημιουργείς ένα output με ποσοστό από bitcoins που μόνο αυτός μπορεί να ξεκλειδώσει.

Για παράδειγμα, αν ήθελα να σου στείλω κάποια bitcoins, θα ξεκλείδωνα ένα output που μου ανήκει, και θα δημιουργούσα ένα άλλο που θα μπορούσες να ξεκλειδώσεις. Ναι αλλά αν δεν ήθελα να σου στείλω όλο μου το output; Πολύ απλά θα δημιουργούσα ένα δεύτερο output που θα μπορούσα μόνο εγώ να ξεκλειδώσω.



Οπότε λοιπόν οι bitcoin συναλλαγές, συνδέονται μεταξύ τους. Από το block reward που ξεκινούν να γεννιούνται τα bitcoins μέχρι το τελευταίο transaction. Έτσι παρατηρούμε πως δημιουργείται μια δομή γραφήματος.



Τέλος, οι συναλλαγές που γίνονται mined στο blockchain, δηλαδή αυτές που ενημερώθηκε το δίκτυο ότι ξοδεύτηκαν (γκρι), δεν μπορούν να χρησιμοποιηθούν ξανά και τα νέα outputs ανήκουν στα ανάλογα addresses.



Πώς μπορείς να έχεις bitcoins;

Για να μπορείς να αποδέχεσαι bitcoins χρειάζεσαι αυτά που λέμε keys. Φαντάσου τα keys σαν δύο στοιχεία. Τον αριθμό ενός λογαριασμού που μπορείς να μοιράσεις σε οποιονδήποτε, και τον κωδικό του, που δεν πρέπει να μάθει κανένας. Έτσι λοιπόν υπάρχει το public key και το private key.

Για παράδειγμα, αν ήθελα να σου στείλω bitcoins θα μου έδινες το public key σου. Όταν δημιουργώ μια συναλλαγή θα βάλω «ως κλειδαριά» αυτό το δημόσιο κλειδί. Μετά για να αποδείξεις πως σου ανήκει αυτό το public key θα πρέπει να ξεκλειδώσεις τη συναλλαγή. Πως; Με το private key σου.



Πώς μπορείς να φτιάξεις ένα private και public key; Μπορείς μόνος σου με τη βοήθεια της κρυπτογραφίας.

Εν συντομία, το private key σου είναι ένας τυχαίος αριθμός, και το public key σου δημιουργείται από αυτό το private key. Το ωραίο που μας προσφέρει η κρυπτογραφία σε αυτή τη περίπτωση είναι πως δεν μπορείς να μετατρέψεις τη μορφή του public σε private. Τώρα, για το πόσο τυχαίος είναι ο αριθμός του private key... Σκέψου να διαλέγεις ένα νούμερο μεταξύ του 1 και του 115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129, 639,936. Υπάρχουν περισσότερες πιθανότητες να πέσουν δέκα μετεωρίτες αυτή τη στιγμή έξω από το σπίτι σου παρά να δημιουργηθεί ένα private key που υπήρχε ήδη από πριν. Αφού ο υπολογιστής διαλέξει ένα τυχαίο νούμερο μεταξύ αυτού του τεράστιου εύρους θα το περάσει από το hash function (SHA256). Το public key είναι hash του private key. Οπότε μπορείς να αποδίξεις ότι σου ανήκει το public key μόνο αν έχεις το private key σου.



Όταν θέλεις να ξεκλειδώσεις bitcoins υπάρχει κάτι που λέγεται digital signature. Αυτή η «υπογραφή» αποδεικνύει πως σου ανήκει το public key χωρίς να χρειαστεί να αποκαλύψεις το private key σου. Και θα μου πεις, δεν μπορεί απλά κάποιος τότε να μου πάρει την υπογραφή και να μου κλέψει όλα μου τα bitcoins; Το digital signature ισχύει μόνο για μία συναλλαγή οπότε και να το αποκαλύψεις θα είναι άχρηστο.



Ας τα βάλουμε όλα μαζί τώρα.

Για να ξεκινήσεις με το bitcoin, χρειάζεσαι private key και public key. Το private key είναι ένας τυχαίος αριθμός και το public key σου υπολογίζεται από το private key. Αυτά τα keys μπορείς να τα δημιουργήσεις με πολλούς τρόπους. Οι περισσότεροι άνθρωποι χρησιμοποιούν bitcoin wallet.

Για να λάβεις bitcoins δίνεις το public key σε κάποιον. Αυτός δημιουργεί μία συναλλαγή όπου μόνο εσύ μπορείς να ξεκλειδώσεις το output.

Αυτή η συναλλαγή αμέσως θα σταλεί σε κάποιον node και θα μοιραστεί από υπολογιστή σε υπολογιστή μέχρι όλο το δίκτυο να έχει λάβει αυτή τη πληροφορία. Από κει και πέρα ο κάθε node μπορεί αν θέλει να κάνει mine τις τελευταίες συναλλαγές στο blockchain.

Για να γίνει αυτό συγκεντρώνει τις συναλλαγές από το memory pool σε ένα block, και προσπαθεί μέσω του hash function να δημιουργήσει block hash μικρότερο από τον target.

Ο πρώτος miner που θα βρει τέτοιο hash θα βάλει το block του στο blockchain και θα αρχίζει να μοιράζει την επιτυχία του σε όλο το δίκτυο.

Ο miner αυτός θα δημιουργήσει μία ειδική συναλλαγή μέσα στο block, που θα του δίνονται κάποια bitcoins στο address του. Αυτό το block reward είναι το κίνητρο του κάθε miner.
Jump to: