Μετάβαση στο κύριο περιεχόμενο

Η Λευκή Βίβλος του Ethereum

Αυτή η εισαγωγική εργασία δημοσιεύτηκε αρχικά το 2014 από τον Vitalik Buterin, τον ιδρυτή του Ethereum, πριν από την έναρξη του εγχειρήματος το 2015. Αξίζει να σημειωθεί ότι το Ethereum, όπως πολλά έργα λογισμικού ανοιχτού κώδικα που καθοδηγούνται από την κοινότητα και έχει εξελιχθεί από την αρχική του σύλληψη.

Παρότι ήδη αρκετών χρόνων, διατηρούμε αυτό το έγγραφο επειδή εξακολουθεί να λειτουργεί ως χρήσιμη αναφορά και ακριβής αναπαράσταση του Ethereum και του οράματός του. Για να μάθετε για τις τελευταίες εξελίξεις γύρω από το Ethereum και πώς γίνονται οι αλλαγές στο πρωτόκολλο, προτείνουμε αυτόν τον οδηγό.

Ερευνητές και ακαδημαϊκοί που αναζητούν μια ιστορική ή κανονική έκδοση της Λευκής Βίβλου [από τον Δεκέμβριο του 2014] θα πρέπει να χρησιμοποιήσουν αυτό το PDF.

Ένα επόμενης γενιάς Έξυπνο Συμβόλαιο και Αποκεντρωμένη Πλατφόρμα Εφαρμογών

Η ανάπτυξη του Bitcoin το 2009 από τον Σατόσι Νακαμότο έχει συχνά χαρακτηριστεί σαν μια ριζική εξέλιξη του χρηματοπιστωτικού συστήματος, αποτελώντας το πρώτο παράδειγμα ψηφιακού στοιχείου που ταυτοχρόνως στερείται υποστήριξης ή "εγγενούς αξίας(opens in a new tab)" και κεντρικού εκδότη ή ελεγκτή. Παρόλα αυτά, ένα αναμφισβήτητα πιο σημαντικό μέρος του πειράματος του Bitcoin είναι η υποκείμενη τεχνολογία blockchain σαν ένα εργαλείο διανεμημένης συναίνεσης και η προσοχή να ξεκινά ραγδαία να μετατοπίζεται σε αυτήν την όψη του Bitcoin. Συνήθως αναφερόμενες εναλλακτικές εφαρμογές της τεχνολογίας blockchain περιλαμβάνουν τη χρήση ψηφιακών περιουσιακών στοιχείων εντός του blockchain για την απεικόνιση προσαρμοσμένων νομισμάτων και χρηματοοικονομικών μέσων ("χρωματιστά νομίσματα(opens in a new tab)"), την ιδιοκτησία μιας υποκείμενης φυσικής συσκευής ("έξυπνη ιδιοκτησία(opens in a new tab)"), μη εναλλάξιμα κρυπτοπαραστατικά όπως ονόματα τομέων ("Namecoin(opens in a new tab)"), καθώς και πιο περίπλοκες εφαρμογές που περιλαμβάνουν ψηφιακά περιουσιακά στοιχεία που ελέγχονται άμεσα από ένα κομμάτι κώδικα που εφαρμόζει αυθαίρετους κανόνες ("έξυπνα συμβόλαια(opens in a new tab)") ή ακόμα και αποκεντρωμένους αυτόνομους οργανισμούς(opens in a new tab) (DAO) που βασίζονται σε blockchain. Αυτό που σκοπεύει να παρέχει το Ethereum είναι ένα blockchain με μια ενσωματωμένη, πλήρως λειτουργική γλώσσα προγραμματισμού Turing που μπορεί να χρησιμοποιηθεί για τη δημιουργία «συμβολαίων» ικανών να κωδικοποιούν αυθαίρετες συναρτήσεις μετάβασης κατάστασης, επιτρέποντας στους χρήστες να δημιουργούν οποιοδήποτε από τα συστήματα που περιγράφονται παραπάνω, καθώς και πολλά άλλα που δεν έχουμε φανταστεί ακόμα, απλά γράφοντας τη λογική σε λίγες γραμμές κώδικα.

Εισαγωγή στο Bitcoin και τις υπάρχουσες έννοιες

Ιστορικό

Η έννοια του αποκεντρωμένου ψηφιακού νομίσματος καθώς και εναλλακτικών εφαρμογών όπως τα μητρώα ιδιοκτησίας, υπάρχει εδώ και δεκαετίες. Τα ανώνυμα πρωτόκολλα ηλεκτρονικού χρήματος των δεκαετιών του 1980 και 1990, που βασίζονταν κυρίως σε ένα κρυπτογραφικό στοιχείο γνωστό ως τύφλωση Chaumian, παρείχαν ένα νόμισμα με υψηλό βαθμό απορρήτου, αλλά τα πρωτόκολλα αυτά απέτυχαν σε μεγάλο βαθμό να κερδίσουν έδαφος λόγω της εξάρτησής τους από έναν κεντρικό μεσάζοντα. Το 1998, το b-money(opens in a new tab) του Wei Dai έγινε η πρώτη πρόταση που εισήγαγε την ιδέα της δημιουργίας χρήματος μέσω της επίλυσης υπολογιστικών γρίφων καθώς και της αποκεντρωμένης συναίνεσης, αλλά η πρόταση ήταν φτωχή σε λεπτομέρειες σχετικά με τον τρόπο με τον οποίο θα μπορούσε να εφαρμοστεί πράγματι η αποκεντρωμένη συναίνεση. Το 2005, ο Hal Finney εισήγαγε την έννοια των επαναχρησιμοποιήσιμων αποδείξεων εργασίας(opens in a new tab), ένα σύστημα που χρησιμοποιεί ιδέες από το b-money μαζί με τους υπολογιστικά δύσκολους γρίφους Hashcash του Adam Back για να δημιουργήσει μια ιδέα για ένα κρυπτονόμισμα, αλλά και πάλι δεν κατάφερε να φτάσει στο ιδανικό καθώς βασίστηκε σε αξιόπιστους υπολογιστές ως back-end. Το 2009, ένα αποκεντρωμένο νόμισμα εφαρμόστηκε για πρώτη φορά στην πράξη από τον Satoshi Nakamoto, συνδυάζοντας καθιερωμένα πρωτόκολλα για τη διαχείριση της ιδιοκτησίας μέσω κρυπτογραφίας δημόσιου κλειδιού με έναν αλγόριθμο συναίνεσης για την παρακολούθηση του ποιος κατέχει νομίσματα, γνωστό ως «proof-of-work» (απόδειξη εργασίας).

Ο μηχανισμός πίσω από την απόδειξη εργασίας ήταν μια σημαντική ανακάλυψη στον τομέα επειδή έλυσε ταυτόχρονα δύο προβλήματα. Πρώτον, παρείχε έναν απλό και μέτρια αποτελεσματικό αλγόριθμο συναίνεσης, επιτρέποντας στους κόμβους του δικτύου να συμφωνούν συλλογικά σε ένα σύνολο κανονικών ενημερώσεων στην κατάσταση του Bitcoin. Δεύτερον, παρείχε έναν μηχανισμό για την επιτρεπόμενη ελεύθερη είσοδο στη διαδικασία συναίνεσης, επιλύοντας το πολιτικό πρόβλημα του καθορισμού του ποιος μπορεί να επηρεάσει τη συναίνεση, ενώ παράλληλα αποτρέπει τις επιθέσεις Sybil. Αυτό το πετυχαίνει αντικαθιστώντας ένα τυπικό εμπόδιο στη συμμετοχή, όπως η απαίτηση να είναι κάποιος εγγεγραμμένος ως μοναδική οντότητα σε έναν συγκεκριμένο κατάλογο, με ένα οικονομικό εμπόδιο, το βάρος ενός μεμονωμένου κόμβου στη διαδικασία ψηφοφορίας συναίνεσης είναι άμεσα ανάλογο με την υπολογιστική ισχύ που διαθέτει ο κόμβος. Από τότε, έχει προταθεί μια εναλλακτική προσέγγιση που ονομάζεται proof-of-stake (απόδειξη συμμετοχής), η οποία υπολογίζει τη σημαντικότητα ενός κόμβου ως ανάλογο των αποθεμάτων του σε νόμισμα και όχι των υπολογιστικών πόρων. Η συζήτηση σχετικά με τα συγκριτικά πλεονεκτήματα των δύο προσεγγίσεων ξεφεύγει του πεδίου εφαρμογής αυτού του εγγράφου, αλλά θα πρέπει να σημειωθεί ότι και οι δύο προσεγγίσεις μπορούν να χρησιμοποιηθούν ως η ραχοκοκαλιά ενός κρυπτονομίσματος.

Το Bitcoin ως σύστημα μετάβασης κατάστασης

Μετάβαση κατάστασης Ethereum

Από τεχνική άποψη, ο λογαριασμός ενός κρυπτονομίσματος όπως το Bitcoin μπορεί να θεωρηθεί ως ένα σύστημα μετάβασης κατάστασης, όπου υπάρχει μια «κατάσταση» που αποτελείται από την κατάσταση κατοχής όλων των υπαρχόντων Bitcoin και μια «συνάρτηση μετάβασης κατάστασης» που λαμβάνει μια κατάσταση και μια συναλλαγή και επιστρέφει μια νέα κατάσταση που είναι το αποτέλεσμα. Σε ένα τυπικό τραπεζικό σύστημα, για παράδειγμα, η κατάσταση είναι ένας ισολογισμός, μια συναλλαγή είναι ένα αίτημα για μετακίνηση $X από το A στο B και η συνάρτηση μετάβασης κατάστασης μειώνει την αξία στον λογαριασμό του A κατά $X και αυξάνει την τιμή στον λογαριασμό Β από $X. Εάν ο λογαριασμός του Α έχει αρχικά λιγότερο από $X, η συνάρτηση μετάβασης κατάστασης επιστρέφει ένα σφάλμα. Ως εκ τούτου, μπορεί κανείς να ορίσει επίσημα:

APPLY(S,TX) -> S' or ERROR

Στο τραπεζικό σύστημα που ορίζεται παραπάνω:

APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 }

Αλλά:

APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR

Η «κατάσταση» στο Bitcoin είναι η συλλογή όλων των νομισμάτων (τεχνικά, "υπόλοιπο συναλλαγής που δε δαπανήθηκε" ή UTXO) που έχουν κρυπτορυχθεί και δεν έχουν δαπανηθεί ακόμη, με κάθε UTXO να έχει μια ονομασία και έναν ιδιοκτήτη (που ορίζεται από μια διεύθυνση των 20 byte που ουσιαστικά είναι ένα κρυπτογραφικό δημόσιο κλειδίfn1). Μια συναλλαγή περιέχει μία ή περισσότερες εισαγωγές, με κάθε εισαγωγή να περιέχει μια αναφορά σε ένα υπάρχον UTXO και μια κρυπτογραφημένη υπογραφή που παράγεται από το ιδιωτικό κλειδί που σχετίζεται με τη διεύθυνση του κατόχου και ένα ή περισσότερα αποτελέσματα, όπου με κάθε αποτέλεσμα να περιέχει ένα νέο UTXO που πρέπει να προστεθεί στην κατάσταση.

Η συνάρτηση μετάβασης της κατάστασης APPLY(S,TX) -> S' μπορεί να οριστεί κατά προσέγγιση ως εξής:

  1. Για κάθε εισαγωγή στο TX:
    • Εάν το αναφερόμενο UTXO δεν βρίσκεται στο S, επιστρέψτε ένα σφάλμα.
    • Εάν η υπογραφή που υποβάλλεται δε συμφωνεί με αυτή του κατόχου του UTXO, επιστρέφει σφάλμα.
  2. Εάν το άθροισμα των ονομασιών όλων των εισαγωγών UTXO είναι μικρότερο από το άθροισμα των ονομασιών όλων των αποτελεσμάτων UTXO, επιστρέφει ένα σφάλμα.
  3. Επιστρέφει το S με όλες τις εισαγωγές UTXO να έχουν αφαιρεθεί και όλα τα αποτελέσματα UTXO να έχουν προστεθεί.

Το πρώτο μισό του πρώτου βήματος αποτρέπει τους αποστολείς συναλλαγών από το να ξοδεύουν νομίσματα που δεν υπάρχουν, το δεύτερο μισό του πρώτου βήματος αποτρέπει τους αποστολείς συναλλαγών από το να ξοδεύουν νομίσματα άλλων και το δεύτερο βήμα επιβάλλει τη διατήρηση της αξίας. Προκειμένου να το χρησιμοποιήσετε για πληρωμή, το πρωτόκολλο είναι το ακόλουθο. Ας υποθέσουμε ότι η Alice θέλει να στείλει 11,7 BTC στον Bob. Πρώτα, η Alice θα αναζητήσει ένα σύνολο διαθέσιμων UTXO που θα της κατέχει συνολικά έως τουλάχιστον 11,7 BTC. Ρεαλιστικά, η Alice δε θα μπορέσει να πάρει ακριβώς 11,7 BTC. Ας πούμε ότι το μικρότερο που μπορεί να πάρει είναι 6+4+2=12. Στη συνέχεια δημιουργεί μια συναλλαγή με αυτές τις τρεις εισόδους και δύο εξόδους. Η πρώτη έξοδος θα είναι 11,7 BTC με τη διεύθυνση του Bob και η δεύτερη έξοδος θα είναι η υπόλοιπη «αλλαγή» 0,3 BTC, με ιδιοκτήτρια την ίδια την Αλίκη.

Εξόρυξη

Τα μπλοκ του Ethereum

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

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

  1. Ελέγξτε εάν το προηγούμενο μπλοκ στο οποίο παραπέμπει το μπλοκ υπάρχει και είναι έγκυρο.
  2. Ελέγξτε ότι η χρονική σήμανση του μπλοκ είναι μεγαλύτερη από εκείνη του προηγούμενου μπλοκfn2 και μικρότερη από τις επόμενες 2 ώρες
  3. Ελέγξτε ότι η απόδειξη εργασίας στο μπλοκ είναι έγκυρη.
  4. Αφήστε το S[0] να είναι η κατάσταση στο τέλος του προηγούμενου μπλοκ.
  5. Υποθέστε ότι το TX είναι η λίστα συναλλαγών του μπλοκ με n συναλλαγές. Για όλα τα i σε 0...n-1, ορίστε το S[i+1] = APPLY(S[i],TX[i]). Εάν κάποια εφαρμογή επιστρέψει σφάλμα, εξέλθετε και επιστρέψτε «false».
  6. Επιστρέψτε «true» και καταχωρίστε το S[n] ως την κατάσταση στο τέλος αυτού του μπλοκ.

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

Η μία συνθήκη εγκυρότητας που υπάρχει στην παραπάνω λίστα και δε βρίσκεται σε άλλα συστήματα είναι η απαίτηση χρήσης της «απόδειξης εργασίας». Ο ακριβής όρος είναι ότι ο διπλός κατακερματισμός SHA256 κάθε μπλοκ, που θεωρείται ως αριθμός 256-bit, πρέπει να είναι μικρότερος από έναν δυναμικά προσαρμοσμένο στόχο, ο οποίος κατά τη στιγμή της συγγραφής αυτού του κειμένου είναι περίπου 2187. Ο σκοπός αυτού είναι να κάνει τη δημιουργία ενός μπλοκ υπολογιστικά «δύσκολη», αποτρέποντας έτσι τους επιτιθέμενους με «Sybil» από το να ξαναφτιάξουν ολόκληρη την κρυπτοαλυσίδα προς όφελός τους. Επειδή το SHA256 έχει σχεδιαστεί για να είναι μια εντελώς απρόβλεπτη ψευδοτυχαία συνάρτηση, ο μόνος τρόπος για να δημιουργήσετε ένα έγκυρο μπλοκ είναι απλά με δοκιμή και λάθος, αυξάνοντας επανειλημμένα τη μοναδικότητα και βλέποντας εάν ο νέος κατακερματισμός ταιριάζει.

Με τον τρέχοντα στόχο των ~2187, το δίκτυο πρέπει να κάνει κατά μέσο όρο ~269 προσπάθειες πριν βρεθεί ένα έγκυρο μπλοκ. Γενικά, ο στόχος επαναβαθμονομείται από το δίκτυο κάθε 2016 μπλοκ, έτσι ώστε κατά μέσο όρο ένα νέο μπλοκ να παράγεται από κάποιο κόμβο του δικτύου κάθε δέκα λεπτά. Για να αποζημιώσουν τους κρυπτορύχους για αυτό το υπολογιστικό έργο, ο κρυπτορύχος κάθε μπλοκ δικαιούται να συμπεριλάβει μια συναλλαγή που τους δίνει 25 BTC κυριολεκτικά από το μηδέν. Επιπλέον, εάν οποιαδήποτε συναλλαγή έχει μεγαλύτερη συνολική ονομασία στις εισαγωγές της παρά στις εξόδους της, η διαφορά πηγαίνει επίσης στον κρυπτορύχο ως «τέλος συναλλαγής». Παρεμπιπτόντως, αυτός είναι επίσης ο μόνος μηχανισμός με τον οποίο εκδίδονται τα BTC. Η αρχική κατάσταση δεν περιείχε κανένα νόμισμα.

Για να κατανοήσουμε καλύτερα τον σκοπό της κρυπτόρυξης, ας εξετάσουμε τι συμβαίνει σε περίπτωση κακόβουλου εισβολέα. Καθώς η υποκείμενη κρυπτογράφηση του Bitcoin είναι γνωστό ότι είναι ασφαλής, ο εισβολέας θα στοχεύσει το ένα σημείο του συστήματος Bitcoin που δεν προστατεύεται άμεσα από την κρυπτογράφηση: τη σειρά των συναλλαγών. Η στρατηγική του εισβολέα είναι απλή:

  1. Αποστέλλει 100 BTC σε έναν έμπορο σε αντάλλαγμα για κάποιο προϊόν (κατά προτίμηση ένα ψηφιακό αγαθό ταχείας παράδοσης)
  2. Περιμένει την παράδοση του προϊόντος
  3. Δημιουργεί μια άλλη συναλλαγή στέλνοντας τα ίδια 100 BTC στον εαυτό του
  4. Προσπαθεί να πείσει το δίκτυο ότι η συναλλαγή του στον εαυτό του προηγήθηκε.

Μόλις ολοκληρωθεί το βήμα (1), μετά από λίγα λεπτά ένας κρυπτορύχος θα συμπεριλάβει τη συναλλαγή σε ένα μπλοκ, ας πούμε το μπλοκ με αριθμό 270000. Μετά από περίπου μία ώρα, θα έχουν προστεθεί πέντε ακόμα μπλοκ στην αλυσίδα μετά από αυτό το μπλοκ, με καθένα από αυτά τα μπλοκ να δείχνει έμμεσα στη συναλλαγή και έτσι να την «επιβεβαιώνει». Σε αυτό το σημείο, ο έμπορος θα αποδεχτεί την πληρωμή ως οριστική και θα παραδώσει το προϊόν. Δεδομένου ότι υποθέτουμε ότι πρόκειται για ένα ψηφιακό αγαθό, η παράδοση είναι ακαριαία. Τώρα, ο επιτιθέμενος δημιουργεί άλλη μια άλλη συναλλαγή στέλνοντας τα 100 BTC στον εαυτό του. Εάν ο επιτιθέμενος απλά τη δημοσιεύσει στο δίκτυο, η συναλλαγή δεν θα διεκπεραιωθεί. Οι εξορύκτες θα προσπαθήσουν να εκτελέσουν το APPLY(S,TX) και θα παρατηρήσουν ότι το TX καταναλώνει ένα UTXO που δεν υπάρχει πλέον στην κατάσταση. Έτσι, αντί για αυτό, ο επιτιθέμενος δημιουργεί μια «διακλάδωση» στην κρυπτοαλυσίδα, ξεκινώντας από την εξόρυξη μιας άλλης έκδοσης του μπλοκ 270000 που δείχνει στο ίδιο μπλοκ 269999 ως γονικό αλλά με τη νέα συναλλαγή στη θέση της παλιάς. Επειδή τα δεδομένα του μπλοκ είναι διαφορετικά, απαιτείται επανάληψη της απόδειξης εργασίας. Επιπλέον, η νέα έκδοση του μπλοκ 270000 του επιτιθέμενου έχει διαφορετικό κατακερματισμό, οπότε τα αρχικά μπλοκ 270001 έως 270005 δεν «δείχνουν» σε αυτό. Έτσι, η αρχική αλυσίδα και η νέα αλυσίδα του επιτιθέμενου είναι εντελώς ξεχωριστές. Ο κανόνας είναι ότι σε μια διακλάδωση η μακρύτερη κρυπτοαλυσίδα θεωρείται η αληθινή, οπότε οι νόμιμοι εξορύκτες θα εργαστούν στην αλυσίδα 270005 ενώ ο επιτιθέμενος μόνος του θα εργάζεται στην αλυσίδα 270000. Για να καταφέρει ο επιτιθέμενος να κάνει την κρυπτοαλυσίδα του μεγαλύτερη, θα πρέπει να έχει περισσότερη υπολογιστική ισχύ από όλο το υπόλοιπο δίκτυο μαζί για να προλάβει (εξ ου και η «επίθεση 51%»).

Merkle Trees

SPV στο Bitcoin

Αριστερά: Αρκεί να παρουσιαστεί μόνο ένας μικρός αριθμός κόμβων σε ένα δέντρο Merkle για να δοθεί η απόδειξη της εγκυρότητας ενός κλάδου.

Δεξιά: Οποιαδήποτε προσπάθεια αλλαγής οποιουδήποτε μέρους του δέντρου Merkle θα οδηγήσει τελικά σε μια ασυνέπεια κάπου πιο πάνω στην αλυσίδα.

Ένα σημαντικό χαρακτηριστικό της δυνατότητας κλιμάκωσης του Bitcoin είναι ότι το μπλοκ αποθηκεύεται σε μια πολυεπίπεδη δομή δεδομένων. Ο «κατακερματισμός» ενός μπλοκ είναι στην πραγματικότητα μόνο ο κατακερματισμός της κεφαλίδας του μπλοκ, ένα κομμάτι δεδομένων περίπου 200 byte που περιέχει τη χρονική σήμανση, το nonce, τον κατακερματισμό του προηγούμενου μπλοκ και τον ριζικό κατακερματισμό (root hash) μιας δομής δεδομένων που ονομάζεται δέντρο Merkle που αποθηκεύει όλες τις συναλλαγές στο μπλοκ. Ένα δέντρο Merkle είναι ένας τύπος δυαδικού δέντρου, που αποτελείται από ένα σύνολο κόμβων με ένα μεγάλο αριθμό φύλλων κόμβων στο κάτω μέρος του δέντρου, που περιέχουν τα υποκείμενα δεδομένα, ένα σύνολο ενδιάμεσων κόμβων όπου κάθε κόμβος είναι ο κατακερματισμός των δύο παιδιών του και τελικά ένας μόνο ριζικός κόμβος, που σχηματίζεται επίσης από τον κατακερματισμό των δύο παιδιών του, αντιπροσωπεύοντας την «κορυφή» του δέντρου. Ο σκοπός του δέντρου Merkle είναι να επιτρέψει την αποσπασματική παράδοση των δεδομένων σε ένα μπλοκ: ένας κόμβος μπορεί να μεταφορτώσει μόνο την κεφαλίδα ενός μπλοκ από μία πηγή, το μικρό μέρος του δέντρου που τον αφορά από μια άλλη πηγή και να είναι ακόμα σίγουρος ότι όλα αυτά τα δεδομένα είναι σωστά. Ο λόγος για τον οποίο αυτό λειτουργεί είναι ότι οι κατακερματισμοί διαδίδονται προς τα πάνω: εάν ένας κακόβουλος χρήστης προσπαθήσει να αντικαταστήσει μια ψεύτικη συναλλαγή στο κάτω μέρος ενός δέντρου Merkle, αυτή η αλλαγή θα προκαλέσει αλλαγή στον κόμβο πάνω από αυτόν και στη συνέχεια μια αλλαγή στον κόμβο πάνω από αυτόν, αλλάζοντας τελικά τη ρίζα του δέντρου και επομένως τον κατακερματισμό του μπλοκ, κάτι που συνεπάγεται ότι το πρωτόκολλο θα το καταχωρίσει ως εντελώς διαφορετικό μπλοκ (σχεδόν σίγουρα με άκυρη απόδειξη εργασίας).

Το πρωτόκολλο δέντρου Merkle είναι αναμφισβήτητα απαραίτητο για τη μακροπρόθεσμη βιωσιμότητα. Ένας «πλήρης κόμβος» στο δίκτυο Bitcoin, ο οποίος αποθηκεύει και επεξεργάζεται ολόκληρο το κάθε μπλοκ, καταλαμβάνει περίπου 15 GB χώρου στο δίσκο του δικτύου Bitcoin από τον Απρίλιο του 2014 και αυξάνεται κατά περισσότερο από ένα gigabyte τον μήνα. Επί του παρόντος, αυτό είναι βιώσιμο για κάποιους επιτραπέζιους υπολογιστές και όχι για κινητά τηλέφωνα, ενώ αργότερα στο μέλλον θα μπορούν να συμμετέχουν μόνο επιχειρήσεις και χομπίστες. Ένα πρωτόκολλο γνωστό ως «απλοποιημένη επαλήθευση πληρωμής» (SPV) επιτρέπει την ύπαρξη μιας άλλης κατηγορίας κόμβων, που ονομάζονται «ελαφροί κόμβοι», οι οποίοι κάνουν λήψη τις κεφαλίδες των μπλοκ, επαληθεύουν την απόδειξη εργασίας στις κεφαλίδες των μπλοκ και στη συνέχεια μεταφορτώνουν μόνο τα «κλαδιά» που σχετίζονται με τις συναλλαγές που τους αφορούν. Αυτό επιτρέπει στους ελαφρούς κόμβους να προσδιορίζουν με ισχυρή εγγύηση ασφάλειας την κατάσταση οποιασδήποτε συναλλαγής Bitcoin και το τρέχον υπόλοιπό τους, ενώ μεταφορτώνουν μόνο ένα πολύ μικρό μέρος ολόκληρης της κρυπτοαλυσίδας.

Εναλλακτικές εφαρμογές κρυπτοαλυσίδας

Η ιδέα της λήψης της υποκείμενης ιδέας της κρυπτοαλυσίδας και της εφαρμογής της σε άλλες έννοιες έχει επίσης μια μακρά ιστορία. Το 2005, ο Nick Szabo παρουσίασε την έννοια των ασφαλών τίτλων ιδιοκτησίας με εξουσία ιδιοκτήτη(opens in a new tab), ένα έγγραφο που περιγράφει πώς οι «νέες εξελίξεις στην τεχνολογία αναπαραγόμενης βάσης δεδομένων» θα καταστήσουν δυνατή την αποθήκευση από σύστημα που βασίζεται σε κρυπτοαλυσίδα ενός μητρώου για το ποιος κατέχει ποια γη, δημιουργώντας ένα περίπλοκο πλαίσιο που περιλαμβάνει έννοιες όπως η παραχώρηση γης, η αντίθετη κατοχή και ο γαιοϊστικός φόρος αξίας γης. Ωστόσο, δεν υπήρχε δυστυχώς κανένα αποτελεσματικό σύστημα αναπαραγόμενης βάσης δεδομένων εκείνη την εποχή και ως εκ τούτου το πρωτόκολλο δεν εφαρμόστηκε ποτέ στην πράξη. Μετά το 2009, ωστόσο, αφού αναπτύχθηκε η αποκεντρωμένη συναίνεση του Bitcoin, άρχισαν γρήγορα να εμφανίζονται πολλές εναλλακτικές εφαρμογές.

  • Namecoin — δημιουργήθηκε το 2010, το Namecoin(opens in a new tab) περιγράφεται καλύτερα ως μια αποκεντρωμένη βάση δεδομένων καταχώρισης ονομάτων. Σε αποκεντρωμένα πρωτόκολλα όπως το Tor, το Bitcoin και το BitMessage, πρέπει να υπάρχει κάποιος τρόπος ταυτοποίησης των λογαριασμών ώστε οι υπόλοιποι να μπορούν να αλληλεπιδράσουν μαζί τους, αλλά σε όλες τις υπάρχουσες λύσεις ο μόνος τύπος αναγνωριστικού που είναι διαθέσιμος, είναι ένα ψευδοτυχαίο hash, όπως το 1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWy. Ιδανικά, θα μπορούσε κανείς να έχει έναν λογαριασμό με ένα όνομα όπως «george». Ωστόσο, το πρόβλημα είναι ότι εάν κάποιος μπορεί να δημιουργήσει έναν λογαριασμό με το όνομα «george», τότε κάποιος άλλος μπορεί να χρησιμοποιήσει την ίδια διαδικασία για να καταχωρίσει το «george» και για τον εαυτό του και να τον υποδυθεί. Η μόνη λύση είναι ένα παράδειγμα τύπου «πρώτος που καταχωρίζει κερδίζει», όπου ο πρώτος καταχωρίζων κερδίζει και ο δεύτερος χάνει — ένα πρόβλημα που ταιριάζει τέλεια στο πρωτόκολλο συναίνεσης του Bitcoin. Το Namecoin είναι η παλαιότερη και πιο επιτυχημένη εφαρμογή ενός συστήματος καταχώρισης ονομάτων χρησιμοποιώντας μια τέτοια ιδέα.
  • Χρωματιστά νομίσματα — Ο σκοπός των χρωματιστών νομισμάτων(opens in a new tab) είναι να λειτουργήσουν ως πρωτόκολλο που επιτρέπει στους ανθρώπους να δημιουργήσουν τα δικά τους ψηφιακά νομίσματα ή στη σημαντική απλή περίπτωση ενός νομίσματος με μία μονάδα, ψηφιακά κρυπτοπαραστατικά, στην κρυπτοαλυσίδα του Bitcoin. Στο πρωτόκολλο των χρωματιστών νομισμάτων, κάποιος «εκδίδει» ένα νέο νόμισμα αποδίδοντας δημόσια ένα χρώμα σε ένα συγκεκριμένο Bitcoin UTXO και το πρωτόκολλο ορίζει αναδρομικά το χρώμα άλλων UTXO να είναι το ίδιο με το χρώμα των στοιχείων εισαγωγής που χρησιμοποίησε η συναλλαγή που τα δημιούργησε (ισχύουν κάποιοι ειδικοί κανόνες στην περίπτωση εισόδων μεικτού χρώματος). Αυτό επιτρέπει στους χρήστες να διατηρούν πορτοφόλια που περιέχουν μόνο UTXO ενός συγκεκριμένου χρώματος και να τα στέλνουν σαν κανονικά bitcoin, ανατρέχοντας στην κρυπτοαλυσίδα για να προσδιορίσουν το χρώμα οποιουδήποτε UTXO λαμβάνουν.
  • Metacoin — Η ιδέα πίσω από ένα metacoin είναι να έχουμε ένα πρωτόκολλο που υπάρχει πάνω από το Bitcoin, χρησιμοποιώντας συναλλαγές Bitcoin για να αποθηκεύει συναλλαγές metacoin αλλά έχοντας μια διαφορετική συνάρτηση μετάβασης κατάστασης, APPLY. Επειδή το πρωτόκολλο metacoin δεν μπορεί να αποτρέψει τις μη έγκυρες συναλλαγές metacoin από το να εμφανιστούν στην κρυπτοαλυσίδα του Bitcoin, προστίθεται ένας κανόνας ότι εάν το APPLY'(S,TX) επιστρέψει ένα σφάλμα, το πρωτόκολλο προεπιλέγει APPLY'(S,TX) = S. Αυτό παρέχει έναν εύκολο μηχανισμό για τη δημιουργία ενός αυθαίρετου πρωτοκόλλου κρυπτονομίσματος, πιθανώς με προηγμένες λειτουργίες που δεν μπορούν να υλοποιηθούν μέσα στο ίδιο το Bitcoin, αλλά με πολύ χαμηλό κόστος ανάπτυξης καθώς ο χειρισμός των πολυπλοκοτήτων της εξόρυξης και της δικτύωσης γίνεται ήδη από το πρωτόκολλο Bitcoin. Τα metacoin έχουν χρησιμοποιηθεί για την υλοποίηση ορισμένων κατηγοριών χρηματοοικονομικών συμβάσεων, καταχώρισης ονομάτων και αποκεντρωμένου ανταλλακτηρίου.

Κατά συνέπεια, γενικά υπάρχουν δύο προσεγγίσεις για την κατασκευή ενός πρωτοκόλλου συναίνεσης: η κατασκευή ενός ανεξάρτητου δικτύου και η κατασκευή ενός πρωτοκόλλου πάνω από το Bitcoin. Η πρώτη προσέγγιση, αν και αρκετά επιτυχημένη στην περίπτωση εφαρμογών όπως το Namecoin, είναι δύσκολη στην υλοποίηση. Κάθε μεμονωμένη εφαρμογή πρέπει να δώσει ώθηση σε μια ανεξάρτητη κρυπτοαλυσίδα, καθώς και να κατασκευάσει και να δοκιμάσει όλο τον απαραίτητο κώδικα μετάβασης κατάστασης και δικτύωσης. Επιπλέον, προβλέπουμε ότι το σύνολο των εφαρμογών για την τεχνολογία αποκεντρωμένης συναίνεσης θα ακολουθήσει μια κατανομή ισχύος όπου η συντριπτική πλειοψηφία των εφαρμογών θα είναι πολύ μικρή για να εγγυηθεί τη δική της κρυπτοαλυσίδα, και σημειώνουμε ότι υπάρχουν μεγάλες κατηγορίες αποκεντρωμένων εφαρμογών, ιδιαίτερα οι αποκεντρωμένοι αυτόνομοι οργανισμοί, που πρέπει να αλληλεπιδρούν μεταξύ τους.

Η προσέγγιση που βασίζεται στο Bitcoin, από την άλλη πλευρά, έχει το μειονέκτημα ότι δεν κληρονομεί τα χαρακτηριστικά απλοποιημένης επαλήθευσης πληρωμής του Bitcoin. Το SPV λειτουργεί για το Bitcoin επειδή μπορεί να χρησιμοποιήσει το βάθος της κρυπτοαλυσίδας ως ένδειξη της εγκυρότητας. Σε κάποιο σημείο, όταν οι πρόγονοι μιας συναλλαγής πηγαίνουν αρκετά πίσω, είναι ασφαλές να πούμε ότι ήταν νόμιμα μέρος της κατάστασης. Τα μεταπρωτόκολλα που βασίζονται στην κρυπτοαλυσίδα, από την άλλη πλευρά, δεν μπορούν να αναγκάσουν την κρυπτοαλυσίδα να μη συμπεριλάβει συναλλαγές που δεν είναι έγκυρες στο πλαίσιο των δικών τους πρωτοκόλλων. Κατά συνέπεια, μια απόλυτα ασφαλής υλοποίηση του μεταπρωτοκόλλου SPV θα έπρεπε να σαρώσει προς τα πίσω μέχρι την αρχή της κρυπτοαλυσίδας του Bitcoin για να προσδιορίσει εάν ορισμένες συναλλαγές είναι έγκυρες ή όχι. Επί του παρόντος, όλες οι «ελαφριές» υλοποιήσεις των μεταπρωτοκόλλων που βασίζονται στο Bitcoin στηρίζονται σε έναν αξιόπιστο διακομιστή για την παροχή των δεδομένων, ένα κατά πάσα πιθανότητα εξαιρετικά ανεπαρκές αποτέλεσμα, ειδικά όταν ένας από τους κύριους στόχους ενός κρυπτονομίσματος είναι η εξάλειψη της ανάγκης για εμπιστοσύνη.

Σενάρια επέκτασης

Ακόμα και χωρίς καμία επέκταση, το πρωτόκολλο Bitcoin διευκολύνει πραγματικά μια αδύναμη έκδοση μιας έννοιας «έξυπνων συμβολαίων». Το UTXO στο Bitcoin μπορεί να ανήκει όχι μόνο σε ένα δημόσιο κλειδί, αλλά και σε ένα πιο περίπλοκο σενάριο που εκφράζεται σε μια απλή γλώσσα προγραμματισμού που βασίζεται σε στοίβα. Σε αυτό το παράδειγμα, μια συναλλαγή που ξοδεύει αυτό το UTXO πρέπει να παρέχει δεδομένα που ικανοποιούν το σενάριο. Πράγματι, ακόμη και ο βασικός μηχανισμός ιδιοκτησίας δημόσιου κλειδιού υλοποιείται μέσω ενός σεναρίου: το σενάριο παίρνει ως στοιχείο εισαγωγής μια υπογραφή ελλειπτικής καμπύλης, την επαληθεύει έναντι της συναλλαγής και της διεύθυνσης που κατέχει το UTXO και επιστρέφει 1 εάν η επαλήθευση είναι επιτυχής και 0 σε διαφορετική περίπτωση. Υπάρχουν και άλλα πιο περίπλοκα σενάρια για διάφορες πρόσθετες περιπτώσεις χρήσης. Για παράδειγμα, μπορεί κάποιος να κατασκευάσει ένα σενάριο που απαιτεί υπογραφές από δύο εκ των τριών ιδιωτικών κλειδιών για να επικυρωθεί («multisig»), μια ρύθμιση χρήσιμη για εταιρικούς λογαριασμούς, ασφαλείς λογαριασμούς εξοικονόμησης και ορισμένες καταστάσεις εγγύησης εμπόρων. Τα σενάρια μπορούν επίσης να χρησιμοποιηθούν για την πληρωμή αμοιβών για λύσεις σε υπολογιστικά προβλήματα και μπορεί κάποιος ακόμη και να κατασκευάσει ένα σενάριο που λέει κάτι σαν «αυτό το Bitcoin UTXO είναι δικό σου αν μπορείς να παράσχεις μια απόδειξη SPV ότι έστειλες μια συναλλαγή Dogecoin αυτής της αξίας σε μένα», επιτρέποντας ουσιαστικά αποκεντρωμένη ανταλλαγή μεταξύ κρυπτονομισμάτων.

Ωστόσο, η γλώσσα σεναρίων όπως εφαρμόζεται στο Bitcoin έχει αρκετούς σημαντικούς περιορισμούς:

  • Έλλειψη πληρότητας Turing - Αυτό σημαίνει ότι, ενώ υπάρχει ένα μεγάλο υποσύνολο υπολογισμού που υποστηρίζει η γλώσσα σεναρίων του Bitcoin, δεν υποστηρίζει σχεδόν τίποτα. Η κύρια κατηγορία που λείπει είναι οι βρόχοι. Αυτό γίνεται για να αποφευχθούν οι άπειροι βρόχοι κατά την επαλήθευση συναλλαγών. Θεωρητικά είναι ένα ξεπερασμένο εμπόδιο για τους προγραμματιστές σεναρίων, καθώς οποιοσδήποτε βρόχος μπορεί να προσομοιωθεί απλώς επαναλαμβάνοντας τον υποκείμενο κώδικα πολλές φορές με μια δήλωση «if», αλλά οδηγεί σε σενάρια που είναι μη αποδοτικά ως προς τον χώρο. Για παράδειγμα, η υλοποίηση ενός εναλλακτικού αλγόριθμου υπογραφής ελλειπτικής καμπύλης θα απαιτούσε πιθανώς 256 επαναλαμβανόμενους γύρους πολλαπλασιασμού που περιλαμβάνονται όλοι ξεχωριστά στον κώδικα.
  • Τυφλότητα αξίας (Value-blindness) - Δεν υπάρχει τρόπος ένα σενάριο UTXO να παρέχει λεπτομερή έλεγχο του ποσού που μπορεί να αναληφθεί. Για παράδειγμα, μια ισχυρή χρήση ενός συμβολαίου oracle, θα μπορούσε να ήταν ένα συμβόλαιο ασφάλισης, όπου ο Α και ο Β βάζουν 1000 δολάρια σε BTC και μετά από 30 ημέρες το σενάριο στέλνει BTC αξίας 1000 δολαρίων στον Α και το υπόλοιπο στον Β. Αυτό θα απαιτούσε ένα oracle για να προσδιοριστεί η αξία του 1 BTC σε δολάρια, αλλά ακόμα και τότε είναι μια τεράστια βελτίωση όσον αφορά την εμπιστοσύνη και την απαίτηση υποδομής σε σχέση με τις πλήρως συγκεντρωτικές λύσεις που είναι διαθέσιμες τώρα. Ωστόσο, επειδή τα UTXO είναι όλα ή τίποτα, ο μόνος τρόπος για να επιτευχθεί αυτό είναι μέσω του πολύ ανεπαρκούς κατακερματισμού του να έχουμε πολλά UTXO διαφορετικών ονομαστικών τιμών (π.χ. ένα UTXO 2k για κάθε k έως 30) και της επιλογής oracle για το ποιο UTXO θα αποσταλεί στον Α και ποιο στον Β.
  • Έλλειψη κατάστασης — Το UTXO μπορεί είτε να ξοδευτεί είτε όχι. Δεν υπάρχει ευκαιρία για συμβόλαια ή σενάρια πολλαπλών σταδίων που διατηρούν οποιαδήποτε άλλη εσωτερική κατάσταση πέρα ​​από αυτό. Αυτό δυσκολεύει τη δημιουργία συμβολαίων επιλογών πολλαπλών σταδίων, αποκεντρωμένων προσφορών ανταλλαγής ή πρωτοκόλλων κρυπτογραφικής δέσμευσης δύο σταδίων (απαραίτητα για ασφαλείς υπολογιστικές αμοιβές). Σημαίνει επίσης ότι το UTXO μπορεί να χρησιμοποιηθεί μόνο για τη δημιουργία απλών, εφάπαξ συμβολαίων και όχι πιο σύνθετων «καταστατικών» συμβολαίων, όπως οι αποκεντρωμένοι οργανισμοί και καθιστά δύσκολη την υλοποίηση μεταπρωτοκόλλων. Η δυαδική κατάσταση σε συνδυασμό με την τυφλότητα αξίας σημαίνει επίσης ότι μια άλλη σημαντική εφαρμογή, τα όρια ανάληψης, είναι αδύνατη.
  • Τυφλότητα κρυπτοαλυσίδας - Το UTXO είναι τυφλό στα δεδομένα της κρυπτοαλυσίδας, όπως το nonce, η χρονική σήμανση και ο κατακερματισμός του προηγούμενου μπλοκ. Αυτό περιορίζει σοβαρά τις εφαρμογές στα τυχερά παιχνίδια και σε πολλές άλλες κατηγορίες, στερώντας τη γλώσσα σεναρίων από μια πιθανώς πολύτιμη πηγή τυχαιότητας.

Κατά συνέπεια, βλέπουμε τρεις προσεγγίσεις για την κατασκευή προηγμένων εφαρμογών πάνω από τα κρυπτονομίσματα: τη δημιουργία μιας νέας κρυπτοαλυσίδας, τη χρήση σεναρίων πάνω από το Bitcoin και τη δημιουργία ενός μεταπρωτοκόλλου πάνω από το Bitcoin. Η δημιουργία μιας νέας κρυπτοαλυσίδας επιτρέπει απεριόριστη ελευθερία στην κατασκευή ενός συνόλου χαρακτηριστικών, αλλά με κόστος τον χρόνο ανάπτυξης, την προσπάθεια προώθησης και την ασφάλεια. Η χρήση σεναρίων είναι εύκολη στην υλοποίηση και την τυποποίηση, αλλά με πολύ περιορισμένες δυνατότητες, ενώ τα μεταπρωτόκολλα, αν και εύκολα, εμφανίζουν προβλήματα δυνατότητας αναβάθμισης. Με το Ethereum, σκοπεύουμε να δημιουργήσουμε ένα εναλλακτικό πλαίσιο που παρέχει ακόμη μεγαλύτερα κέρδη στην ευκολία ανάπτυξης καθώς και ακόμη ισχυρότερες ιδιότητες ελαφρών πελατών, ενώ ταυτόχρονα επιτρέπει στις εφαρμογές να μοιράζονται ένα οικονομικό περιβάλλον και την ασφάλεια της κρυπτοαλυσίδας.

Ethereum

Η πρόθεση του Ethereum είναι να δημιουργήσει ένα εναλλακτικό πρωτόκολλο για την κατασκευή αποκεντρωμένων εφαρμογών, το οποίο παρέχει ένα διαφορετικό σύνολο ανταλλαγμάτων που πιστεύουμε ότι θα είναι πολύ χρήσιμο για μια μεγάλη κατηγορία αποκεντρωμένων εφαρμογών, με ιδιαίτερη έμφαση σε καταστάσεις όπου ο γρήγορος χρόνος ανάπτυξης, η ασφάλεια για μικρές και σπάνια χρησιμοποιούμενες εφαρμογές και η δυνατότητα διαφορετικών εφαρμογών να αλληλεπιδρούν πολύ αποτελεσματικά, είναι σημαντικές. Το Ethereum το κάνει αυτό κατασκευάζοντας ουσιαστικά το απόλυτο θεμελιώδες στρώμα: μια κρυπτοαλυσίδα με μια ενσωματωμένη γλώσσα προγραμματισμού με πληρότητα Turing, επιτρέποντας σε οποιονδήποτε να γράφει έξυπνα συμβόλαια και αποκεντρωμένες εφαρμογές όπου μπορούν να δημιουργήσουν τους δικούς τους αυθαίρετους κανόνες για ιδιοκτησία, μορφές συναλλαγών και λειτουργίες μετάβασης κατάστασης. Μια βασική έκδοση του Namecoin μπορεί να γραφτεί σε δύο γραμμές κώδικα, ενώ άλλα πρωτόκολλα, όπως τα νομίσματα και τα συστήματα φήμης, μπορούν να κατασκευαστούν σε λιγότερες από είκοσι. Τα έξυπνα συμβόλαια, τα κρυπτογραφικά «κουτιά» που περιέχουν αξία και την ξεκλειδώνουν μόνο εάν πληρούνται ορισμένες προϋποθέσεις, μπορούν επίσης να κατασκευαστούν πάνω στην πλατφόρμα, με πολύ μεγαλύτερη ισχύ από αυτή που προσφέρουν τα σενάρια του Bitcoin λόγω των πρόσθετων δυνάμεων της πληρότητας Turing, της επίγνωσης της αξίας, της επίγνωσης της κρυπτοαλυσίδας και της κατάστασης.

Λογαριασμοί Ethereum

Στο Ethereum, η κατάσταση αποτελείται από αντικείμενα που ονομάζονται «λογαριασμοί», με κάθε λογαριασμό να έχει μια διεύθυνση 20 byte και οι μεταβάσεις κατάστασης να είναι άμεσες μεταφορές αξίας και πληροφορίας μεταξύ των λογαριασμών. Ένας λογαριασμός Ethereum περιέχει τέσσερα πεδία:

  • Το nonce, έναν μετρητή που χρησιμοποιείται για να εξασφαλιστεί ότι κάθε συναλλαγή μπορεί να υποβληθεί σε επεξεργασία μόνο μία φορά
  • Το τρέχον υπόλοιπο ether του λογαριασμού
  • Τον κώδικα συμβολαίου του λογαριασμού, εάν υπάρχει
  • Τον αποθηκευτικό χώρο του λογαριασμού (κενό από προεπιλογή)

Το «ether» είναι το κύριο εσωτερικό κρυπτοκαύσιμο του Ethereum και χρησιμοποιείται για την πληρωμή τελών των συναλλαγών. Γενικά, υπάρχουν δύο τύποι λογαριασμών: εξωτερικά κατεχόμενοι λογαριασμοί, που ελέγχονται από ιδιωτικά κλειδιά και λογαριασμοί συμβολαίων, που ελέγχονται από τον κώδικα συμβολαίου τους. Ένας εξωτερικά κατεχόμενος λογαριασμός δεν έχει κώδικα και κάποιος μπορεί να στείλει μηνύματα από έναν εξωτερικά κατεχόμενο λογαριασμό δημιουργώντας και υπογράφοντας μια συναλλαγή. Σε έναν λογαριασμό συμβολαίου, κάθε φορά που ο λογαριασμός συμβολαίου λαμβάνει ένα μήνυμα, ο κώδικάς του ενεργοποιείται, επιτρέποντάς του να διαβάζει και να γράφει στον εσωτερικό χώρο αποθήκευσης και να στέλνει άλλα μηνύματα ή να δημιουργεί με τη σειρά του συμβόλαια.

Σημειώστε ότι τα «συμβόλαια» στο Ethereum δεν πρέπει να θεωρούνται ως κάτι που πρέπει να «εκπληρωθεί» ή να «τηρηθεί». Αντίθετα, είναι περισσότερο σαν «αυτόνομοι αντιπρόσωποι» που ζουν μέσα στο περιβάλλον εκτέλεσης του Ethereum, εκτελώντας πάντα ένα συγκεκριμένο κομμάτι κώδικα όταν «προκαλούνται» από ένα μήνυμα ή συναλλαγή και έχοντας άμεσο έλεγχο της δικής τους ισορροπίας ether και του δικού τους αποθηκευτικού χώρου κλειδιού/τιμής για την παρακολούθηση των διαρκών μεταβλητών.

Μηνύματα και Συναλλαγές

Ο όρος «συναλλαγή» χρησιμοποιείται στο Ethereum για να αναφερθεί στο υπογεγραμμένο πακέτο δεδομένων που αποθηκεύει ένα μήνυμα το οποίο πρόκειται να σταλεί από έναν εξωτερικά κατεχόμενο λογαριασμό. Οι συναλλαγές περιέχουν:

  • Τον παραλήπτη του μηνύματος
  • Μια υπογραφή που ταυτοποιεί τον αποστολέα
  • Το ποσό ether που θα μεταφερθεί από τον αποστολέα στον παραλήπτη
  • Ένα προαιρετικό πεδίο δεδομένων
  • Μια τιμή STARTGAS, που αντιπροσωπεύει τον μέγιστο αριθμό υπολογιστικών βημάτων που επιτρέπεται να κάνει η εκτέλεση της συναλλαγής
  • Μια τιμή GASPRICE, που αντιπροσωπεύει το τέλος που πληρώνει ο αποστολέας ανά υπολογιστικό βήμα

Τα πρώτα τρία είναι τυπικά πεδία που αναμένονται σε οποιοδήποτε κρυπτονόμισμα. Το πεδίο δεδομένων δεν έχει καμία λειτουργία από προεπιλογή, αλλά η εικονική μηχανή έχει ένα λειτουργικό κώδικα που μπορεί να χρησιμοποιήσει ένα συμβόλαιο για να αποκτήσει πρόσβαση στα δεδομένα. Ως παράδειγμα χρήσης, εάν ένα συμβόλαιο λειτουργεί ως υπηρεσία εγγραφής τομέα στην κρυπτοαλυσίδα, τότε μπορεί να επιθυμεί να ερμηνεύσει τα δεδομένα που του περνάνε ως περιεχόμενα από δύο «πεδία», το πρώτο πεδίο είναι ένας τομέας για εγγραφή και το δεύτερο πεδίο είναι η διεύθυνση IP για να το καταχωρίσει. Το συμβόλαιο θα διαβάσει αυτές τις τιμές από τα δεδομένα του μηνύματος και θα τις τοποθετήσει κατάλληλα στον αποθηκευτικό χώρο.

Τα πεδία STARTGAS και GASPRICE είναι κρίσιμα για το μοντέλο αντι-άρνησης υπηρεσίας του Ethereum. Για να αποφευχθούν τυχαίοι ή εχθρικοί άπειροι βρόχοι ή άλλη σπατάλη υπολογισμών στον κώδικα, κάθε συναλλαγή υποχρεούται να ορίσει ένα όριο για το πόσα υπολογιστικά βήματα εκτέλεσης κώδικα μπορεί να χρησιμοποιήσει. Η θεμελιώδης μονάδα υπολογισμού είναι το «gas». Συνήθως, ένα υπολογιστικό βήμα κοστίζει 1 gas, αλλά ορισμένες λειτουργίες κοστίζουν υψηλότερα ποσά σε gas επειδή είναι πιο δαπανηρές από υπολογιστική άποψη ή αυξάνουν την ποσότητα δεδομένων που πρέπει να αποθηκευτεί ως μέρος της κατάστασης. Υπάρχει επίσης ένα τέλος 5 gas για κάθε byte στα δεδομένα συναλλαγής. Η πρόθεση του συστήματος τελών είναι να απαιτεί από έναν επιτιθέμενο να πληρώνει ανάλογα για κάθε πόρο που καταναλώνει, συμπεριλαμβανομένων του υπολογισμού, του εύρους ζώνης και της αποθήκευσης. Κατά συνέπεια, κάθε συναλλαγή που οδηγεί το δίκτυο να καταναλώνει μεγαλύτερη ποσότητα οποιουδήποτε από αυτούς τους πόρους πρέπει να έχει ένα τέλος gas περίπου ανάλογο με την αύξηση.

Μηνύματα

Τα συμβόλαια έχουν τη δυνατότητα να στέλνουν «μηνύματα» σε άλλα συμβόλαια. Τα μηνύματα είναι εικονικά αντικείμενα που δε σειριοποιούνται ποτέ και υπάρχουν μόνο στο περιβάλλον εκτέλεσης του Ethereum. Ένα μήνυμα περιέχει:

  • Τον αποστολέα του μηνύματος (υπονοείται)
  • Τον παραλήπτη του μηνύματος
  • Το ποσό ether που θα μεταφερθεί μαζί με το μήνυμα
  • Ένα προαιρετικό πεδίο δεδομένων
  • Η τιμή STARTGAS

Βασικά, ένα μήνυμα είναι σαν μια συναλλαγή, με τη διαφορά ότι παράγεται από ένα συμβόλαιο και όχι από έναν εξωτερικό παράγοντα. Ένα μήνυμα παράγεται όταν ένα συμβόλαιο που εκτελεί τρέχοντα κώδικα εκτελεί το opcode CALL, το οποίο παράγει και εκτελεί ένα μήνυμα. Όπως μια συναλλαγή, ένα μήνυμα οδηγεί τον λογαριασμό παραλήπτη να εκτελέσει τον κώδικά του. Έτσι, τα συμβόλαια μπορούν να έχουν σχέσεις με άλλα συμβόλαια με τον ίδιο ακριβώς τρόπο που μπορούν οι εξωτερικοί παράγοντες.

Σημειώστε ότι η επιχορήγηση gas που ανατίθεται από μια συναλλαγή ή συμβόλαιο ισχύει για το συνολικό gas που καταναλώνεται από αυτήν τη συναλλαγή και όλες τις επί μέρους εκτελέσεις του. Για παράδειγμα, εάν ένας εξωτερικός παράγοντας Α στείλει μια συναλλαγή στο Β με 1000 gas και το Β καταναλώνει 600 gas πριν στείλει ένα μήνυμα στο C και η εσωτερική εκτέλεση του C καταναλώνει 300 gas πριν επιστρέψει, τότε το Β μπορεί να ξοδέψει άλλα 100 gas πριν εξαντληθεί το gas.

Συνάρτηση Μετάβασης Κατάστασης Ethereum

Μετάβαση κατάστασης ether

Η συνάρτηση μετάβασης κατάστασης Ethereum, APPLY(S,TX) -> S' μπορεί να οριστεί ως εξής:

  1. Ελέγχεται εάν η συναλλαγή είναι σωστά διαμορφωμένη (δηλαδή έχει τον σωστό αριθμό τιμών), η υπογραφή είναι έγκυρη και το nonce ταιριάζει με το nonce του λογαριασμό αποστολέα. Εάν αυτό ισχύει, επιστρέφει σφάλμα.
  2. Υπολογίζεται το τέλος συναλλαγής ως STARTGAS * GASPRICE και προσδιορίζεται η διεύθυνση αποστολής από την υπογραφή. Αφαιρείται το τέλος από το υπόλοιπο του λογαριασμού του αποστολέα και αυξάνεται το nonce του αποστολέα. Εάν το υπόλοιπο δεν επαρκεί, επιστρέφει σφάλμα.
  3. Εκκινεί GAS = STARTGAS και αφαιρείται μια συγκεκριμένη ποσότητα gas ανά byte για πληρωμή των byte στη συναλλαγή.
  4. Μεταφέρεται η αξία συναλλαγής από τον λογαριασμό του αποστολέα στον λογαριασμό παραλήπτη. Εάν ο λογαριασμός παραλήπτη δεν υπάρχει ακόμα, δημιουργήστε τον. Εάν ο λογαριασμός παραλήπτη είναι ένα συμβόλαιο, εκτέλεση κώδικα του συμβολαίου είτε μέχρι την ολοκλήρωση είτε μέχρι να εξαντληθεί το gas της εκτέλεσης.
  5. Εάν η μεταφορά αξίας απέτυχε επειδή ο αποστολέας δεν είχε αρκετά χρήματα ή η εκτέλεση του κώδικα έμεινε από gas, αναστρέψτε όλες τις αλλαγές κατάστασης εκτός από την πληρωμή των τελών και προσθέστε τα τέλη στον λογαριασμό του εξορύκτη.
  6. Διαφορετικά, επιστρέφονται τα τέλη για όλο το υπόλοιπο gas στον αποστολέα και στέλνονται τα τέλη που πληρώθηκαν για το καταναλωθέν gas στον κρυπτορύχο.

Για παράδειγμα, υποθέστε ότι ο κώδικας του συμβολαίου είναι:

if !self.storage[calldataload(0)]:
  self.storage[calldataload(0)] = calldataload(32)

Σημειώστε ότι στην πραγματικότητα ο κώδικας του συμβολαίου είναι γραμμένος σε χαμηλού επιπέδου κώδικα EVM. Αυτό το παράδειγμα είναι γραμμένο σε Serpent, μια από τις γλώσσες υψηλού επιπέδου μας για σαφήνεια και μπορεί να μεταγλωττιστεί σε κώδικα EVM. Ας υποθέσουμε ότι ο αποθηκευτικός χώρος του συμβολαίου ξεκινάει άδειος και αποστέλλεται μια συναλλαγή αξίας 10 ether, με 2000 gas, με τιμή gas 0,001 ether και 64 bytes δεδομένων, όπου τα bytes 0-31 αντιπροσωπεύουν τον αριθμό 2 και τα bytes 32-63 αντιπροσωπεύουν τη συμβολοσειρά CHARLIE. Η διαδικασία για τη συνάρτηση μετάβασης κατάστασης σε αυτήν την περίπτωση είναι η εξής:

  1. Ελέγξτε ότι η συναλλαγή είναι έγκυρη και καλά διαμορφωμένη.
  2. Ελέγξτε ότι ο αποστολέας της συναλλαγής έχει τουλάχιστον 2000 * 0,001 = 2 ether. Εάν είναι, τότε αφαιρέστε 2 ether από τον λογαριασμό του αποστολέα.
  3. Εκκινήστε το gas = 2000. Υποθέτοντας ότι η συναλλαγή είναι μήκους 170 bytes και η τιμή ανά byte είναι 5, αφαιρέστε 850 ώστε να απομένουν 1150 gas.
  4. Αφαιρέστε άλλα 10 ether από τον λογαριασμό του αποστολέα και προσθέστε τα στον λογαριασμό του συμβολαίου.
  5. Εκτελέστε τον κώδικα. Σε αυτήν την περίπτωση, είναι απλό: ελέγχει αν η αποθήκευση του συμβολαίου στον δείκτη 2 χρησιμοποιείται, παρατηρεί ότι δε χρησιμοποιείται και έτσι ορίζει τον αποθηκευτικό χώρο στον δείκτη 2 στην τιμή CHARLIE. Ας υποθέσουμε ότι αυτό παίρνει 187 gas, άρα η υπολειπόμενη ποσότητα gas είναι 1150 - 187 = 963
  6. Προσθέστε 963 * 0.001 = 0.963 ether πίσω στον λογαριασμό του αποστολέα, και επιστρέψτε την κατάσταση που προκύπτει.

Εάν δεν υπήρχε συμβόλαιο στον λήπτη της συναλλαγής, τότε το συνολικό τέλος συναλλαγής θα ήταν απλά ίσο με την παρεχόμενη τιμή GASPRICE πολλαπλασιασμένη με το μήκος της συναλλαγής σε bytes και τα δεδομένα που αποστέλλονται μαζί με τη συναλλαγή θα ήταν άσχετα.

Σημείωση: Τα μηνύματα λειτουργούν ισοδύναμα με τις συναλλαγές όσον αφορά τις αναστροφές: εάν η εκτέλεση ενός μηνύματος εξαντλήσει το gas, τότε η εκτέλεση αυτού του μηνύματος και όλες οι άλλες εκτελέσεις που προκαλούνται από αυτήν αναστρέφονται, αλλά οι γονικές εκτελέσεις δε χρειάζεται να αναστραφούν. Αυτό σημαίνει ότι είναι «ασφαλές» ένα συμβόλαιο να επικοινωνήσει με ένα άλλο συμβόλαιο, καθώς εάν το Α καλεί το Β με G gas, τότε είναι σίγουρο ότι η εκτέλεση του Α θα χάσει το πολύ G gas. Τέλος, σημειώστε ότι υπάρχει ένα opcode, το CREATE, που δημιουργεί ένα συμβόλαιο. Οι μηχανισμοί εκτέλεσής του είναι γενικά παρόμοιοι με το CALL, με τη διαφορά ότι το αποτέλεσμα της εκτέλεσης καθορίζει τον κώδικα ενός συμβολαίου που δημιουργήθηκε πρόσφατα.

Εκτέλεση κώδικα

Ο κώδικας στα συμβόλαια Ethereum είναι γραμμένος σε μια γλώσσα «bytecode» χαμηλού επιπέδου, που βασίζεται σε στοίβα, που αναφέρεται ως «κώδικας εικονικού μηχανήματος του Ethereum» ή «κώδικας EVM». Ο κώδικας αποτελείται από μια σειρά byte, όπου κάθε byte αντιπροσωπεύει μια λειτουργία. Γενικά, η εκτέλεση κώδικα είναι ένας άπειρος βρόχος που αποτελείται από την επαναλαμβανόμενη εκτέλεση της ενέργειας στο τρέχον πρόγραμμα καταμέτρησης (που ξεκινά από το μηδέν) και στη συνέχεια την αύξηση του προγράμματος καταμέτρησης κατά ένα, μέχρι να φτάσει στο τέλος του κώδικα ή να ανιχνευθεί ένα σφάλμα ή εντολή STOP ή RETURN. Οι λειτουργίες έχουν πρόσβαση σε τρεις τύπους χώρου για αποθήκευση δεδομένων:

  • Στη στοίβα, έναν χώρο «Last In First Out» (μπαίνει τελευταίο βγαίνει πρώτο) στον οποίο μπορούν να προστεθούν και να αφαιρεθούν τιμές
  • Στη μνήμη, έναν άπειρα επεκτάσιμο πίνακα byte
  • Στον μακροχρόνιο αποθηκευτικό χώρο του συμβολαίου, μια αποθήκη κλειδιού/τιμής. Σε αντίθεση με τη στοίβα και τη μνήμη, που επαναφέρονται μετά το τέλος του υπολογισμού, ο αποθηκευτικός χώρος διατηρείται μακροπρόθεσμα.

Ο κώδικας μπορεί επίσης να έχει πρόσβαση στην τιμή, τον αποστολέα και τα δεδομένα του εισερχόμενου μηνύματος, καθώς και στα δεδομένα κεφαλίδας μπλοκ και ο κώδικας μπορεί επίσης να επιστρέψει έναν πίνακα byte δεδομένων ως αποτέλεσμα.

Το τυπικό μοντέλο εκτέλεσης του κώδικα EVM είναι εκπληκτικά απλό. Ενώ το εικονικό μηχάνημα του Ethereum εκτελείται, η πλήρης υπολογιστική κατάστασή του μπορεί να οριστεί από το (block_state, transaction, message, code, memory, stack, pc, gas), όπου το block_state είναι η παγκόσμια κατάσταση που περιέχει όλους τους λογαριασμούς και περιλαμβάνει υπόλοιπα λογαριασμών και αποθηκευτικό χώρο. Στην αρχή κάθε κύκλου εκτέλεσης, η τρέχουσα εντολή βρίσκεται λαμβάνοντας το pcο byte του code (ή 0 εάν pc >= len (code)) και κάθε εντολή έχει τον δικό της ορισμό ως προς τον τρόπο με τον οποίο επηρεάζει το tuple (πλειάδα). Για παράδειγμα, το ADD αφαιρεί δύο στοιχεία από τη στοίβα και προωθεί το άθροισμά τους, μειώνει το gas κατά 1 και αυξάνει το pc κατά 1 και το SSTORE αφαιρεί τα δύο κορυφαία στοιχεία από τη στοίβα και εισάγει το δεύτερο στοιχείο στον αποθηκευτικό χώρο του συμβολαίου στον δείκτη που καθορίζεται από το πρώτο στοιχείο. Αν και υπάρχουν πολλοί τρόποι για να βελτιστοποιήσετε την εκτέλεση του εικονικού μηχανήματος του Ethereum μέσω της μεταγλώττισης just-in-time, μια βασική εφαρμογή του Ethereum μπορεί να γίνει σε λίγες εκατοντάδες γραμμές κώδικα.

Κρυπτοαλυσίδα και Κρυπτόρυξη

Εφαρμογή διαγράμματος μπλοκ Ethereum

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

  1. Ελέγξτε εάν το προηγούμενο αναφερόμενο μπλοκ υπάρχει και είναι έγκυρο.
  2. Ελέγξτε ότι η χρονική σήμανση του μπλοκ είναι μεγαλύτερη από αυτή του προηγούμενου αναφερόμενου μπλοκ και μικρότερη από 15 λεπτά από το επόμενο
  3. Ελέγξτε ότι ο αριθμός μπλοκ, ο βαθμός δυσκολίας, η βάση συναλλαγών, η θυγατρική βάση και το όριο gas (διάφορες έννοιες χαμηλού επιπέδου συγκεκριμένες για το Ethereum) είναι έγκυρα.
  4. Ελέγξτε ότι η απόδειξη εργασίας στο μπλοκ είναι έγκυρη.
  5. Αφήστε το S[0] να είναι η κατάσταση στο τέλος του προηγούμενου μπλοκ.
  6. Αφήστε το TX να είναι η λίστα συναλλαγών του μπλοκ, με n συναλλαγές. Για όλα τα i σε 0...n-1, ορίστε S[i+1] = APPLY(S[i], TX[i]). Εάν οποιαδήποτε εφαρμογή επιστρέψει σφάλμα ή εάν το συνολικό gas που καταναλώθηκε στο μπλοκ μέχρι αυτό το σημείο υπερβαίνει το GASLIMIT, επιστρέψτε σφάλμα.
  7. Αφήστε το S_FINAL να είναι το S[n], αλλά προσθέτοντας την ανταμοιβή μπλοκ που καταβάλλεται στον κρυπτορύχο.
  8. Ελέγξτε εάν η ρίζα του δέντρου Merkle της κατάστασης S_FINAL είναι ίση με τη ρίζα τελικής κατάστασης που παρέχεται στην κεφαλίδα του μπλοκ. Εάν ναι, το μπλοκ είναι έγκυρο. Διαφορετικά, δεν είναι έγκυρο.

Η προσέγγιση μπορεί να φαίνεται ιδιαίτερα ανεπαρκής με την πρώτη ματιά, επειδή πρέπει να αποθηκεύει ολόκληρη την κατάσταση με κάθε μπλοκ, αλλά στην πραγματικότητα η απόδοση θα πρέπει να είναι συγκρίσιμη με αυτή του Bitcoin. Ο λόγος είναι ότι η κατάσταση αποθηκεύεται στη δομή δέντρου και μετά από κάθε μπλοκ μόνο ένα μικρό μέρος του δέντρου χρειάζεται να αλλάξει. Έτσι, γενικά, μεταξύ δύο συνεχόμενων μπλοκ το μεγαλύτερο μέρος του δέντρου θα πρέπει να είναι το ίδιο και επομένως τα δεδομένα μπορούν να αποθηκευτούν μία φορά και να αναφερθούν δύο φορές χρησιμοποιώντας δείκτες (δηλαδή, τους κατακερματισμούς των υποδέντρων). Για την επίτευξη αυτού του σκοπού χρησιμοποιείται ένας ειδικός τύπος δέντρου, γνωστός ως «δέντρο Patricia», συμπεριλαμβανομένης μιας τροποποίησης της έννοιας του δέντρου Merkle που επιτρέπει την αποδοτική εισαγωγή και διαγραφή κόμβων και όχι μόνο την αλλαγή τους. Επιπλέον, επειδή όλες οι πληροφορίες κατάστασης αποτελούν μέρος του τελευταίου μπλοκ, δεν υπάρχει ανάγκη αποθήκευσης ολόκληρου του ιστορικού της αλυσίδας μπλοκ — είναι μια στρατηγική που, εάν μπορούσε να εφαρμοστεί στο Bitcoin, υπολογίζεται ότι παρέχει εξοικονόμηση χώρου κατά 5-20 φορές.

Μια συχνή ερώτηση είναι «πού» εκτελείται ο κώδικας του συμβολαίου, όσον αφορά το φυσικό υλισμικό. Αυτό έχει μια απλή απάντηση: η διαδικασία εκτέλεσης του κώδικα συμβολαίου αποτελεί μέρος του ορισμού της συνάρτησης μετάβασης κατάστασης, η οποία αποτελεί μέρος του αλγόριθμου επικύρωσης μπλοκ, οπότε εάν μια συναλλαγή προστεθεί στο μπλοκ Β, η εκτέλεση κώδικα που προκαλείται από αυτήν τη συναλλαγή θα εκτελεστεί από όλους τους κόμβους, τώρα και στο μέλλον, που μεταφορτώνουν και επικυρώνουν το μπλοκ Β.

Εφαρμογές

Γενικά, υπάρχουν τρεις τύποι εφαρμογών πάνω από το Ethereum. Η πρώτη κατηγορία είναι οι χρηματοοικονομικές εφαρμογές, που παρέχουν στους χρήστες πιο ισχυρούς τρόπους διαχείρισης και σύναψης συμβάσεων χρησιμοποιώντας τα χρήματά τους. Αυτό περιλαμβάνει υποδιαιρέσεις νομισμάτων, χρηματοοικονομικά παράγωγα, συμβάσεις αντιστάθμισης κινδύνου, πορτοφόλια αποταμίευσης, διαθήκες και τελικά ακόμη και κάποιες κατηγορίες συμβάσεων πλήρους κλίμακας. Η δεύτερη κατηγορία είναι οι ημιχρηματοοικονομικές εφαρμογές, οι οποίες αφορούν χρήματα αλλά υπάρχει επίσης μια σημαντική μη νομισματική πλευρά σε αυτό που γίνεται. Ένα τέλειο παράδειγμα είναι η αυτόματη εφαρμογή ανταμοιβών για λύσεις σε υπολογιστικά προβλήματα. Τέλος, υπάρχουν εφαρμογές όπως η ηλεκτρονική ψηφοφορία και η αποκεντρωμένη διακυβέρνηση που δεν είναι καθόλου χρηματοοικονομικές.

Συστήματα ψηφιακών στοιχείων

Τα συστήματα κρυπτοπαραστατικών εντός της κρυπτοαλυσίδας έχουν πολλές εφαρμογές που ποικίλλουν από υποδιαιρέσεις νομισμάτων που αντιπροσωπεύουν περιουσιακά στοιχεία, όπως το δολάριο ΗΠΑ ή ο χρυσός έως μετοχές εταιρειών, μεμονωμένα κρυπτοπαραστατικά που αντιπροσωπεύουν έξυπνη ιδιοκτησία, ασφαλή μη πλαστοποιήσιμα κουπόνια και ακόμη και συστήματα κρυπτοπαραστατικών χωρίς καμία σχέση με την παραδοσιακή αξία, που χρησιμοποιούνται ως συστήματα πόντων για παροχή κινήτρων. Η εφαρμογή των συστημάτων κρυπτοπαραστατικών στο Ethereum είναι απροσδόκητα εύκολη. Το βασικό σημείο που πρέπει να κατανοηθεί είναι ότι όλα όσα είναι ένα νόμισμα ή ένα σύστημα κρυπτοπαραστατικών, θεμελιωδώς, είναι μια βάση δεδομένων με μία λειτουργία: αφαιρέστε X μονάδες από τον Α και δώστε X μονάδες στον Β, με την προϋπόθεση ότι (i) ο Α είχε τουλάχιστον X μονάδες πριν από τη συναλλαγή και (ii) η συναλλαγή εγκρίθηκε από τον Α. Το μόνο που χρειάζεται για την εφαρμογή ενός συστήματος κρυπτοπαραστατικών είναι η εφαρμογή αυτής της λογικής σε ένα συμβόλαιο.

Ο βασικός κώδικας για την εφαρμογή ενός συστήματος κρυπτοπαραστατικών στη Serpent έχει ως εξής:

def send(to, value):
  if self.storage[msg.sender] >= value:
    self.storage[msg.sender] = self.storage[msg.sender] - value
    self.storage[to] = self.storage[to] + value

Πρόκειται ουσιαστικά για μια κυριολεκτική εφαρμογή της συνάρτησης μετάβασης κατάστασης του «τραπεζικού συστήματος» που περιγράφεται παραπάνω σε αυτό το έγγραφο. Πρέπει να προστεθούν μερικές επιπλέον γραμμές κώδικα για να προβλεφτεί το αρχικό βήμα διανομής των νομισματικών μονάδων στην πρώτη θέση και μερικές άλλες ακραίες περιπτώσεις και ιδανικά να προστεθεί μια συνάρτηση που θα επέτρεπε σε άλλα συμβόλαια να ερωτούν για το υπόλοιπο μιας διεύθυνσης. Αλλά αυτό είναι όλο. Θεωρητικά, τα συστήματα κρυπτοπαραστατικών που βασίζονται στο Ethereum και λειτουργούν ως υποδιαιρέσεις νομισμάτων μπορούν ενδεχομένως να περιλαμβάνουν ένα άλλο σημαντικό χαρακτηριστικό που λείπει από τα μετανομίσματα εντός αλυσίδας που βασίζονται στο Bitcoin: τη δυνατότητα πληρωμής τελών συναλλαγής απευθείας σε αυτό το νόμισμα. Ο τρόπος με τον οποίο θα εφαρμοστεί αυτό είναι ότι το συμβόλαιο θα διατηρεί υπόλοιπο σε ether, με το οποίο θα επιστρέφει το ether που χρησιμοποιείται για την πληρωμή των τελών στον αποστολέα και θα αναπληρώνει αυτό το υπόλοιπο συλλέγοντας τις εσωτερικές μονάδες νομίσματος που λαμβάνει ως τέλη και πουλώντας τις ξανά σε έναν συνεχή δημόσιο πλειστηριασμό. Οι χρήστες θα πρέπει έτσι να «ενεργοποιήσουν» τους λογαριασμούς τους με ether, αλλά μόλις το ether είναι εκεί θα είναι επαναχρησιμοποιήσιμο επειδή το συμβόλαιο θα το επιστρέφει κάθε φορά.

Χρηματοοικονομικά παράγωγα και νομίσματα σταθερής αξίας

Τα χρηματοοικονομικά παράγωγα είναι η πιο κοινή εφαρμογή ενός «έξυπνου συμβολαίου» και μία από τις απλούστερες να εφαρμοστούν σε κώδικα. Η βασική πρόκληση στην υλοποίηση χρηματοοικονομικών συμβάσεων είναι ότι η πλειοψηφία τους απαιτεί αναφορά σε ένα εξωτερικό τιμοκατάλογο. Για παράδειγμα, μια πολύ επιθυμητή εφαρμογή είναι ένα έξυπνο συμβόλαιο που παρέχει κάλυψη από την αστάθεια του ether (ή άλλου κρυπτονομίσματος) σε σχέση με το δολάριο ΗΠΑ, αλλά αυτό απαιτεί το συμβόλαιο να γνωρίζει ποια είναι η αξία του ETH/USD. Ο απλούστερος τρόπος για να γίνει αυτό είναι μέσω ενός συμβολαίου «τροφοδοσίας δεδομένων» που διατηρείται από ένα συγκεκριμένο μέρος (π.χ. NASDAQ) που είναι σχεδιασμένο έτσι ώστε αυτό το μέρος να έχει τη δυνατότητα να ενημερώνει το συμβόλαιο σύμφωνα με τις ανάγκες και να αποτελεί μια διεπαφή που επιτρέπει σε άλλα συμβόλαια να στείλουν ένα μήνυμα σε αυτό το συμβόλαιο και να λάβουν πίσω μια απάντηση που παρέχει την τιμή.

Με δεδομένο αυτό το κρίσιμο συστατικό, το συμβόλαιο αντιστάθμισης κινδύνου διαμορφώνεται ως εξής:

  1. Αναμονή μέχρι το μέρος Α να εισάγει 1000 ether.
  2. Αναμονή μέχρι το μέρος Β να εισάγει 1000 ether.
  3. Καταγραφή της αξίας των 1000 ether σε δολάρια ΗΠΑ, υπολογισμένη με ερώτηση στο συμβόλαιο τροφοδοσίας δεδομένων, στον αποθηκευτικό χώρο, ας πούμε ότι είναι $x.
  4. Μετά από 30 ημέρες, επιτρέψτε στον Α ή τον Β να «ενεργοποιήσουν ξανά» το συμβόλαιο για να στείλουν $x αξία σε ether (υπολογισμένη με νέα ερώτηση στο συμβόλαιο τροφοδοσίας δεδομένων για να λάβετε τη νέα τιμή) στον Α και το υπόλοιπο στον Β.

Ένα τέτοιο συμβόλαιο θα είχε σημαντική προοπτική στο εμπόριο κρυπτονομισμάτων. Ένα από τα βασικά προβλήματα που αναφέρονται σχετικά με το κρυπτονόμισμα είναι το γεγονός ότι είναι ασταθές. Αν και πολλοί χρήστες και έμποροι μπορεί να θέλουν την ασφάλεια και την ευκολία της διαχείρισης κρυπτογραφικών περιουσιακών στοιχείων, μπορεί να μην επιθυμούν να αντιμετωπίσουν την προοπτική της απώλειας 23% της αξίας των κεφαλαίων τους σε μία μόνο ημέρα. Μέχρι τώρα, η λύση που προτεινόταν συχνότερα ήταν τα περιουσιακά στοιχεία που υποστηρίζονται από εκδότη. Η ιδέα είναι ότι ένας εκδότης δημιουργεί μια υποδιαίρεση νομίσματος στο οποίο έχει το δικαίωμα να εκδίδει και να ανακαλεί μονάδες και παρέχει μία μονάδα του νομίσματος σε όποιον του παρέχει (offline) μία μονάδα ενός καθορισμένου υποκείμενου περιουσιακού στοιχείου (π.χ. χρυσό, δολάριο ΗΠΑ). Ο εκδότης στη συνέχεια υπόσχεται να παράσχει μία μονάδα του υποκείμενου περιουσιακού στοιχείου σε όποιον επιστρέψει μία μονάδα του κρυπτοπεριουσιακού στοιχείου. Αυτός ο μηχανισμός επιτρέπει σε οποιοδήποτε μη κρυπτογραφικό περιουσιακό στοιχείο να «υπερισχύσει» σε ένα κρυπτογραφικό περιουσιακό στοιχείο, υπό την προϋπόθεση ότι ο εκδότης είναι έμπιστος.

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

Συστήματα Ταυτότητας και Φήμης

Το Namecoin(opens in a new tab), το παλαιότερο εναλλακτικό κρυπτονόμισμα, προσπάθησε να χρησιμοποιήσει μια κρυπτοαλυσίδα τύπου Bitcoin για να παρέχει ένα σύστημα εγγραφής ονομάτων, όπου οι χρήστες μπορούν να καταχωρίσουν τα ονόματά τους σε μια δημόσια βάση δεδομένων μαζί με άλλα δεδομένα. Η κύρια αναφερόμενη περίπτωση χρήσης είναι για ένα σύστημα DNS(opens in a new tab), που αντιστοιχεί τα ονόματα τομέα όπως το «bitcoin.org» (ή στην περίπτωση του Namecoin, «bitcoin.bit») σε μια διεύθυνση IP. Άλλες περιπτώσεις χρήσης περιλαμβάνουν την επικύρωση email και ενδεχομένως πιο προηγμένα συστήματα φήμης. Ακολουθεί το βασικό συμβόλαιο για την παροχή ενός συστήματος εγγραφής ονομάτων τύπου Namecoin στο Ethereum:

def register(name, value):
  if !self.storage[name]:
    self.storage[name] = value

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

Αποκεντρωμένος αποθηκευτικός χώρος

Τα τελευταία χρόνια, έχουν εμφανιστεί αρκετές δημοφιλείς νεοφυείς επιχειρήσεις αποθήκευσης αρχείων στο διαδίκτυο, με την πιο σημαντική να είναι το Dropbox, που επιδιώκει να επιτρέψει στους χρήστες να ανεβάσουν ένα αντίγραφο ασφαλείας του σκληρού δίσκου τους και να αποθηκεύσει η υπηρεσία το αντίγραφο ασφαλείας και να επιτρέψει στον χρήστη να έχει πρόσβαση σε αυτό σε αντάλλαγμα για μια μηνιαία αμοιβή. Ωστόσο, σε αυτό το σημείο η αγορά αποθήκευσης αρχείων είναι μερικές φορές σχετικά αναποτελεσματική. Μια επιφανειακή ματιά σε διάφορες υπάρχουσες λύσεις δείχνει ότι, ιδιαίτερα στο επίπεδο των «απατηλών κοιλάδων» 20-200 GB όπου δεν ισχύουν ούτε οι δωρεάν ποσοστώσεις ούτε οι εκπτώσεις επιχειρηματικού επιπέδου, οι μηνιαίες τιμές για την κύρια αποθήκευση αρχείων είναι τέτοιες που πληρώνετε περισσότερο από το κόστος ολόκληρου του σκληρού δίσκου σε έναν μόνο μήνα. Τα συμβόλαια Ethereum μπορούν να επιτρέψουν την ανάπτυξη ενός αποκεντρωμένου οικοσυστήματος αποθήκευσης αρχείων, όπου οι μεμονωμένοι χρήστες μπορούν να κερδίζουν μικρές ποσότητες χρημάτων νοικιάζοντας τους δικούς τους σκληρούς δίσκους και ο αχρησιμοποίητος χώρος μπορεί να χρησιμοποιηθεί για να μειώσει περαιτέρω το κόστος αποθήκευσης αρχείων.

Το βασικό υποστηρικτικό στοιχείο μιας τέτοιας συσκευής θα ήταν αυτό που ονομάσαμε «αποκεντρωμένο συμβόλαιο Dropbox». Αυτό το συμβόλαιο λειτουργεί ως εξής. Πρώτον, χωρίζετε τα επιθυμητά δεδομένα σε μπλοκ, κρυπτογραφώντας κάθε μπλοκ για προστασία της ιδιωτικής ζωής και δημιουργείτε ένα δέντρο Merkle από αυτό. Στη συνέχεια, κάνετε ένα συμβόλαιο με τον κανόνα ότι, ανά N μπλοκ, το συμβόλαιο θα επιλέξει έναν τυχαίο δείκτη στο δέντρο Merkle (χρησιμοποιώντας τον προηγούμενο κατακερματισμό μπλοκ, προσβάσιμο από τον κώδικα συμβολαίου, ως πηγή τυχαιότητας) και θα δώσει X ether στην πρώτη οντότητα που θα εκτελέσει μια συναλλαγή με μια απλοποιημένη απόδειξη πληρωμής τύπου επαλήθευσης ιδιοκτησίας του μπλοκ σε αυτόν τον συγκεκριμένο δείκτη του δέντρου. Όταν ένας χρήστης θέλει να μεταφορτώσει ξανά το αρχείο του, μπορεί να χρησιμοποιήσει ένα πρωτόκολλο μικροπληρωμών (π.χ. πληρώνει 1 szabo ανά 32 kilobyte) για να ανακτήσει το αρχείο. Η πιο αποδοτική προσέγγιση είναι ο πληρωτής να μη δημοσιεύσει τη συναλλαγή μέχρι το τέλος, αλλά αντ' αυτού να αντικαταστήσει τη συναλλαγή με μια ελαφρώς πιο κερδοφόρα με το ίδιο nonce μετά από κάθε 32 kilobyte.

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

Αποκεντρωμένος Αυτόνομος Οργανισμός

Η γενική έννοια ενός «αποκεντρωμένου αυτόνομου οργανισμού» είναι αυτή μιας εικονικής οντότητας που έχει ένα συγκεκριμένο σύνολο μελών ή μετόχων οι οποίοι, ίσως με πλειοψηφία 67%, έχουν το δικαίωμα να ξοδεύουν τα κεφάλαια της οντότητας και να τροποποιούν τον κώδικά της. Τα μέλη θα αποφασίζουν συλλογικά για τον τρόπο κατανομής των κεφαλαίων του οργανισμού. Οι μέθοδοι για την κατανομή των κεφαλαίων ενός DAO θα μπορούσαν να ποικίλλουν από προκλήσεις, μισθούς έως και πιο εξωτικούς μηχανισμούς όπως ένα εσωτερικό νόμισμα για την ανταμοιβή της εργασίας. Αυτό ουσιαστικά αναπαράγει τα νομικά ζητήματα μιας παραδοσιακής εταιρείας ή μη κερδοσκοπικού οργανισμού, χρησιμοποιώντας μόνο κρυπτογραφική τεχνολογία κρυπτοαλυσίδας για την επιβολή του νόμου. Μέχρι στιγμής, μεγάλο μέρος της συζήτησης γύρω από τους DAO έχει επικεντρωθεί στο «καπιταλιστικό» μοντέλο μιας «αποκεντρωμένης αυτόνομης εταιρείας» (DAC) με μετόχους που λαμβάνουν μερίσματα και διαπραγματεύσιμες μετοχές. Μια εναλλακτική, που πιθανώς περιγράφεται ως «αποκεντρωμένη αυτόνομη κοινότητα», θα ήταν όλα τα μέλη να έχουν ίσο μερίδιο στη λήψη αποφάσεων και θα απαιτούσε τη συμφωνία του 67% των υφιστάμενων μελών με την προσθήκη ή την αφαίρεση ενός μέλους. Η απαίτηση ότι ένα άτομο μπορεί να έχει μόνο μία συμμετοχή θα πρέπει στη συνέχεια να επιβληθεί συλλογικά από την ομάδα.

Ένα γενικό περίγραμμα για το πώς να κωδικοποιήσετε έναν DAO είναι το εξής. Ο απλούστερος σχεδιασμός είναι απλώς ένα κομμάτι αυτοτροποποιούμενο κώδικα που αλλάζει εάν τα δύο τρίτα των μελών συμφωνούν σε μια αλλαγή. Αν και ο κώδικας είναι θεωρητικά αμετάβλητος, μπορεί κανείς εύκολα να το παρακάμψει και να έχει πραγματική μεταβλητότητα έχοντας κομμάτια του κώδικα σε ξεχωριστά συμβόλαια και αποθηκεύοντας τη διεύθυνση των συμβολαίων που πρέπει να καλούνται στον τροποποιήσιμο αποθηκευτικό χώρο. Σε μια απλή εφαρμογή ενός τέτοιου συμβολαίου DAO, θα υπήρχαν τρεις τύποι συναλλαγών, που διακρίνονται από τα δεδομένα που παρέχονται στη συναλλαγή:

  • [0,i,K,V] για να καταχωρίσετε μια πρόταση με δείκτη i για να αλλάξετε τη διεύθυνση στον δείκτη αποθήκευσης K σε τιμή V
  • [1,i] για να καταχωρίσετε μια ψήφο υπέρ της πρότασης i
  • [2,i] για να ολοκληρώσετε την πρόταση i εάν έχουν γίνει αρκετές ψήφοι

Το συμβόλαιο θα είχε στη συνέχεια ρήτρες για καθέναν από αυτούς. Θα διατηρούσε ένα αρχείο όλων των ανοιχτών αλλαγών αποθήκευσης, καθώς και μια λίστα με το ποιος ψήφισε για αυτές. Θα είχε επίσης μια λίστα με όλα τα μέλη. Όταν οποιαδήποτε αλλαγή στον αποθηκευτικό χώρο φτάσει στα δύο τρίτα των μελών που ψηφίζουν γι' αυτήν, μια τελική συναλλαγή θα μπορούσε να εκτελέσει την αλλαγή. Ένας πιο εξελιγμένος σκελετός θα είχε επίσης ενσωματωμένη δυνατότητα ψήφου για χαρακτηριστικά, όπως η αποστολή μιας συναλλαγής, η προσθήκη μελών και η αφαίρεση μελών και μπορεί ακόμη να προβλέπει για την ψήφο τύπου Liquid Democracy (ρευστής δημοκρατίας)(opens in a new tab) (δηλαδή ο καθένας μπορεί να αναθέσει σε κάποιον να ψηφίσει για αυτόν και η ανάθεση είναι μεταβατική, οπότε εάν ο Α αναθέσει στον Β και ο Β αναθέσει στον Γ, τότε ο Γ καθορίζει την ψήφο του Α). Αυτός ο σχεδιασμός θα επέτρεπε στον DAO να αναπτυχθεί οργανικά ως μια αποκεντρωμένη κοινότητα, επιτρέποντας στους ανθρώπους να αναθέσουν τελικά την εργασία φιλτραρίσματος του ποιος είναι μέλος σε ειδικούς, αν και, σε αντίθεση με το «τρέχον σύστημα», οι ειδικοί μπορούν εύκολα να εμφανίζονται και να εξαφανίζονται με την πάροδο του χρόνου καθώς τα μεμονωμένα μέλη της κοινότητας αλλάζουν τους προσανατολισμούς τους.

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

Περαιτέρω Εφαρμογές

1. Πορτοφόλια αποταμίευσης. Ας υποθέσουμε ότι η Alice θέλει να κρατήσει τα κεφάλαιά της ασφαλή, αλλά ανησυχεί ότι είτε θα χάσει είτε κάποιος θα παραβιάσει το ιδιωτικό της κλειδί. Βάζει ether σε ένα συμβόλαιο με τον Bob, μια τράπεζα, ως εξής:

  • Η Alice μόνη της μπορεί να αποσύρει το πολύ 1% των κεφαλαίων ανά ημέρα.
  • Ο Bob μόνος του μπορεί να αποσύρει το πολύ 1% των κεφαλαίων ανά ημέρα, αλλά η Alice έχει τη δυνατότητα να κάνει μια συναλλαγή με το κλειδί της για να αποκλείσει αυτήν τη δυνατότητα.
  • Η Alice και ο Bob μαζί μπορούν να αποσύρουν οτιδήποτε.

Κανονικά, το 1% ανά ημέρα είναι αρκετό για την Alice και αν η Alice θέλει να αποσύρει περισσότερα μπορεί να επικοινωνήσει με τον Bob για βοήθεια. Εάν το κλειδί της Alice παραβιαστεί, τρέχει στον Bob για να μετακινήσει τα κεφάλαια σε ένα νέο συμβόλαιο. Εάν χάσει το κλειδί της, ο Bob θα βγάλει τελικά τα κεφάλαια. Εάν ο Bob αποδειχθεί κακόβουλος, τότε η Alice μπορεί να απενεργοποιήσει τη δυνατότητά του να αποσύρει.

2. Ασφάλιση καλλιέργειας. Μπορεί εύκολα να δημιουργηθεί ένα χρηματοοικονομικό παράγωγο συμβόλαιο χρησιμοποιώντας μια ροή δεδομένων καιρού αντί για οποιοδήποτε δείκτη τιμής. Εάν ένας αγρότης στην Αϊόβα αγοράσει ένα παράγωγο που αποδίδει αντίστροφα με βάση τις κατακρημνίσεις στην Αϊόβα, τότε, εάν υπάρχει ξηρασία, ο αγρότης θα λάβει αυτόματα χρήματα και, εάν υπάρχει αρκετή βροχή, ο αγρότης θα είναι ευτυχισμένος γιατί οι καλλιέργειές του θα πάνε καλά. Αυτό μπορεί να επεκταθεί γενικά στην ασφάλιση φυσικών καταστροφών.

3. Αποκεντρωμένη ροή δεδομένων. Για τα χρηματοοικονομικά συμβόλαια διαφοράς, μπορεί στην πραγματικότητα να είναι δυνατή η αποκέντρωση της ροής δεδομένων μέσω ενός πρωτοκόλλου που ονομάζεται SchellingCoin(opens in a new tab). Το SchellingCoin λειτουργεί ουσιαστικά ως εξής: Ν μέρη βάζουν όλα στο σύστημα την αξία ενός δεδομένου στοιχείου (π.χ. την τιμή ETH/USD), οι τιμές ομαδοποιούνται και όλοι μεταξύ του 25ου και 75ου παίρνουν ένα κρυπτοπαραστατικό ως ανταμοιβή. Όλοι έχουν το κίνητρο να παράσχουν την απάντηση που θα παράσχουν όλοι οι άλλοι και η μόνη αξία στην οποία μπορεί ρεαλιστικά ένας μεγάλος αριθμός παικτών να συμφωνήσει είναι η προφανής προεπιλογή: η αλήθεια. Αυτό δημιουργεί ένα αποκεντρωμένο πρωτόκολλο που μπορεί θεωρητικά να παρέχει οποιοδήποτε αριθμό τιμών, συμπεριλαμβανομένης της τιμής ETH/USD, της θερμοκρασίας στο Βερολίνο ή ακόμη και του αποτελέσματος ενός συγκεκριμένου δύσκολου υπολογισμού.

4. Έξυπνη εγγύηση πολλαπλών υπογραφών. Το Bitcoin επιτρέπει συμβόλαια συναλλαγών πολλαπλών υπογραφών όπου, για παράδειγμα, τρία από τα πέντε κλειδιά μπορούν να ξοδέψουν τα κεφάλαια. Το Ethereum προβλέπει μεγαλύτερο βαθμό λεπτομέρειας. Για παράδειγμα, τέσσερις από τους πέντε μπορούν να ξοδέψουν έως και 10% την ημέρα, και δύο από τους πέντε μπορούν να ξοδέψουν έως και 0,5% την ημέρα. Επιπλέον, η πολλαπλή υπογραφή Ethereum είναι ασύγχρονη, καθώς δύο μέρη μπορούν να καταχωρήσουν τις υπογραφές τους στην κρυπτοαλυσίδα σε διαφορετικές ώρες και η τελευταία υπογραφή θα στείλει αυτόματα τη συναλλαγή.

5. Υπολογιστικό νέφος. Η τεχνολογία EVM μπορεί επίσης να χρησιμοποιηθεί για τη δημιουργία ενός ελεγχόμενου περιβάλλοντος υπολογισμού, επιτρέποντας στους χρήστες να ζητούν από άλλους να εκτελούν υπολογισμούς και στη συνέχεια προαιρετικά να ζητούν αποδείξεις ότι οι υπολογισμοί σε ορισμένα τυχαία επιλεγμένα σημεία ελέγχου έγιναν σωστά. Αυτό επιτρέπει τη δημιουργία μιας αγοράς υπολογιστικού νέφους όπου οποιοσδήποτε χρήστης μπορεί να συμμετάσχει με τον επιτραπέζιο υπολογιστή, το φορητό υπολογιστή ή τον εξειδικευμένο διακομιστή του και ο τυχαίος έλεγχος μαζί με τις καταθέσεις ασφαλείας μπορούν να χρησιμοποιηθούν για να διασφαλιστεί ότι το σύστημα είναι αξιόπιστο (δηλαδή ότι οι κόμβοι δεν μπορούν να εξαπατήσουν επικερδώς). Ωστόσο, ένα τέτοιο σύστημα μπορεί να μην είναι κατάλληλο για όλες τις εργασίες, αφού οι εργασίες που απαιτούν υψηλό επίπεδο επικοινωνίας μεταξύ διεργασιών, για παράδειγμα, δεν μπορούν εύκολα να γίνουν σε ένα μεγάλο νέφος κόμβων. Άλλες εργασίες, ωστόσο, είναι πολύ πιο εύκολο να παραλληλοποιηθούν. Έργα όπως το SETI@home, το folding@home και οι γενετικοί αλγόριθμοι μπορούν εύκολα να εφαρμοστούν πάνω σε μια τέτοια πλατφόρμα.

6. Τυχερά παιχνίδια μεταξύ ομοτίμων. Οποιοσδήποτε αριθμός πρωτοκόλλων τυχερών παιχνιδιών μεταξύ ομοτίμων, όπως το Cyberdice(opens in a new tab) του Frank Stajano και του Richard Canon, μπορεί να εφαρμοστεί στην κρυπτοαλυσίδα του Ethereum. Το απλούστερο πρωτόκολλο τυχερών παιχνιδιών είναι στην πραγματικότητα απλώς ένα συμβόλαιο διαφοράς στο επόμενο κατακερματισμένο μπλοκ και πιο προηγμένα πρωτόκολλα μπορούν να κατασκευαστούν από εκεί, δημιουργώντας υπηρεσίες τυχερών παιχνιδιών με μηδενικές σχεδόν προμήθειες και χωρίς καμία δυνατότητα εξαπάτησης.

7. Αγορές προγνώσεων. Παρέχοντας ένα oracle ή ένα SchellingCoin, η εφαρμογή των αγορών προγνώσεων είναι επίσης εύκολη και οι αγορές προγνώσεων μαζί με το SchellingCoin μπορεί να αποδειχθούν η πρώτη κυρίαρχη εφαρμογή της futarchy(opens in a new tab) ως πρωτόκολλο διακυβέρνησης αποκεντρωμένων οργανισμών.

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

Διάφορα και ανησυχίες

Τροποποιημένη εκτέλεση GHOST

Το πρωτόκολλο GHOST [Greedy Heaviest Observed Subtree (Άπληστο βαρύτερο παρατηρημένο υποδέντρο)] είναι μια καινοτομία που παρουσιάστηκε για πρώτη φορά από τους Yonatan Sompolinsky και Aviv Zohar τον Δεκέμβριο του 2013(opens in a new tab). Το κίνητρο πίσω από το GHOST είναι ότι οι κρυπτοαλυσίδες με γρήγορους χρόνους επιβεβαίωσης πάσχουν επί του παρόντος από μειωμένη ασφάλεια λόγω ενός υψηλού ποσοστού παλαιών μπλοκ, επειδή τα μπλοκ χρειάζονται κάποιο χρόνο για να διαδοθούν μέσω του δικτύου. Εάν ο εξορύκτης Α εξορύξει ένα μπλοκ και στη συνέχεια ο εξορύκτης Β τύχει να εξορύξει ένα άλλο μπλοκ πριν το μπλοκ του εξορύκτη Α διαδοθεί στον Β, το μπλοκ του εξορύκτη Β τελικά θα σπαταληθεί και δεν θα συμβάλλει στην ασφάλεια του δικτύου. Επιπλέον, υπάρχει ένα ζήτημα συγκεντρωτισμού: εάν ο εξορύκτης Α είναι μια δεξαμενή κρυπτόρυξης με ισχύ κατακερματισμού 30% και ο Β έχει ισχύ κατακερματισμού 10%, ο Α θα έχει κίνδυνο να παράγει ένα παλιό μπλοκ το 70% του χρόνου (αφού το άλλο 30% της ώρας ο Α παρήγαγε το τελευταίο μπλοκ και έτσι θα λάβει δεδομένα εξόρυξης αμέσως), ενώ ο Β θα κινδυνεύει να παράγει ένα παλιό μπλοκ το 90% του χρόνου. Έτσι, εάν το διάστημα μπλοκ είναι αρκετά σύντομο ώστε το ποσοστό παλαιών μπλοκ να είναι υψηλό, ο Α θα είναι σημαντικά πιο αποτελεσματικός απλώς λόγω του μεγέθους του. Συνδυάζοντας αυτά τα δύο αποτελέσματα, οι κρυπτοαλυσίδες που παράγουν μπλοκ γρήγορα είναι πολύ πιθανό να οδηγήσουν σε μια δεξαμενή κρυπτόρυξης με αρκετά μεγάλο ποσοστό της ισχύος κατακερματισμού του δικτύου για να έχει πραγματικό έλεγχο της διαδικασίας κρυπτόρυξης.

Όπως περιγράφεται από τους Sompolinsky και Zohar, το GHOST επιλύει το πρώτο ζήτημα της απώλειας ασφάλειας δικτύου συμπεριλαμβάνοντας παλιά μπλοκ στον υπολογισμό του ποια αλυσίδα είναι η «μεγαλύτερη». Δηλαδή, όχι μόνο ο γονέας και οι περαιτέρω πρόγονοι ενός μπλοκ, αλλά και οι παλιοί απόγονοι του προγόνου του μπλοκ (στην ορολογία Ethereum, «θείοι») προστίθενται στον υπολογισμό για το ποιο μπλοκ έχει τη μεγαλύτερη συνολική απόδειξη εργασίας να το υποστηρίζει. Για να λύσουμε το δεύτερο ζήτημα της μεροληψίας συγκεντρωτισμού, πηγαίνουμε πέρα από το πρωτόκολλο που περιγράφεται από τους Sompolinsky και Zohar και παρέχουμε επίσης ανταμοιβές μπλοκ στους παλιούς: ένα παλιό μπλοκ λαμβάνει το 87,5% της βασικής του ανταμοιβής, και ο ανιψιός που περιλαμβάνει το παλιό μπλοκ λαμβάνει το υπόλοιπο 12,5%. Ωστόσο, δεν αποδίδονται τέλη συναλλαγής στους θείους.

Το Ethereum εφαρμόζει μια απλοποιημένη έκδοση του GHOST που πηγαίνει μόνο επτά επίπεδα κάτω. Συγκεκριμένα, ορίζεται ως εξής:

  • Ένα μπλοκ πρέπει να καθορίζει έναν γονέα και πρέπει να καθορίζει 0 ή περισσότερους θείους
  • Ένας θείος που περιλαμβάνεται στο μπλοκ Β πρέπει να έχει τις ακόλουθες ιδιότητες:
    • Πρέπει να είναι άμεσο παιδί του προγόνου της k γενιάς του Β, όπου 2 <= k <= 7.
    • Δεν μπορεί να είναι πρόγονος του Β
    • Ένας θείος πρέπει να είναι μια έγκυρη κεφαλίδα μπλοκ, αλλά δε χρειάζεται να είναι ένα προηγουμένως επαληθευμένο ή ακόμα και έγκυρο μπλοκ
    • Ένας θείος πρέπει να διαφέρει από όλους τους θείους που περιλαμβάνονται σε προηγούμενα μπλοκ και όλους τους άλλους θείους που περιλαμβάνονται στο ίδιο μπλοκ (μη διπλή συμπερίληψη)
  • Για κάθε θείο U στο μπλοκ Β, ο εξορύκτης του Β παίρνει επιπλέον 3,125% που προστίθεται στην ανταμοιβή coinbase του και ο εξορύκτης του U παίρνει το 93,75% μιας τυπικής ανταμοιβής coinbase.

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

Χρεώσεις

Επειδή κάθε συναλλαγή που δημοσιεύεται στην κρυπτοαλυσίδα επιβάλλει στο δίκτυο το κόστος της ανάγκης λήψης και επαλήθευσής της, υπάρχει ανάγκη για κάποιο ρυθμιστικό μηχανισμό, που συνήθως περιλαμβάνει τέλη συναλλαγής, για την πρόληψη της κατάχρησης. Η προεπιλεγμένη προσέγγιση, που χρησιμοποιείται στο Bitcoin, είναι να έχει καθαρά προαιρετικά τέλη, βασισμένη στους κρυπτορύχους να ενεργούν ως οι φύλακες και να ορίζουν ελάχιστα δυναμικά. Αυτή η προσέγγιση έχει γίνει δεκτή με πολύ θετικό τρόπο στην κοινότητα Bitcoin, ιδιαίτερα επειδή «βασίζεται στην αγορά», καθιστώντας δυνατό τον καθορισμό της τιμής από την προσφορά και τη ζήτηση μεταξύ εξορυκτών και αποστολέων συναλλαγών. Το πρόβλημα με αυτή τη σκέψη είναι, ωστόσο, ότι η επεξεργασία συναλλαγών δεν είναι αγορά. Αν και είναι διαισθητικά ελκυστικό να ερμηνεύσουμε την επεξεργασία συναλλαγών ως μια υπηρεσία που προσφέρει ο εξορύκτης στον αποστολέα, στην πραγματικότητα κάθε συναλλαγή που περιλαμβάνει ένας εξορύκτης θα πρέπει να διεκπεραιωθεί από κάθε κόμβο στο δίκτυο, οπότε το μεγαλύτερο μέρος του κόστους επεξεργασίας συναλλαγών βαρύνει τρίτα μέρη και όχι τον εξορύκτη που παίρνει την απόφαση εάν θα τη συμπεριλάβει ή όχι. Έτσι, είναι πολύ πιθανό να προκύψουν προβλήματα «τραγωδίας των κοινών αγαθών».

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

  1. Μια συναλλαγή οδηγεί σε k πράξεις, προσφέροντας την ανταμοιβή kR σε οποιονδήποτε εξορύκτη τη συμπεριλάβει, όπου το R ορίζεται από τον αποστολέα και το k και το R είναι (περίπου) ορατό στον εξορύκτη εκ των προτέρων.
  2. Μια πράξη έχει κόστος επεξεργασίας C για οποιονδήποτε κόμβο (δηλαδή όλοι οι κόμβοι έχουν ίση απόδοση)
  3. Υπάρχουν N κόμβοι εξόρυξης, καθένας με ακριβώς ίση ισχύ επεξεργασίας (δηλαδή 1/N του συνόλου)
  4. Δεν υπάρχουν πλήρεις κόμβοι μη εξορύξεώς.

Ένας κρυπτορύχος θα ήταν πρόθυμος να επεξεργαστεί μια συναλλαγή εάν η αναμενόμενη ανταμοιβή είναι μεγαλύτερη από το κόστος. Έτσι, η αναμενόμενη ανταμοιβή είναι kR/N καθώς ο εξορύκτης έχει πιθανότητα 1/N να επεξεργαστεί το επόμενο μπλοκ, και το κόστος επεξεργασίας για τον εξορύκτη είναι απλά kC. Συνεπώς, οι κρυπτορύχοι θα συμπεριλάβουν συναλλαγές όπου kR/N > kC, ή R > NC. Σημειώστε ότι το R είναι το τέλος ανά πράξη που παρέχεται από τον αποστολέα και είναι συνεπώς ένα κατώφλι για το όφελος που αποκτά ο αποστολέας από τη συναλλαγή και το NC είναι το κόστος για ολόκληρο το δίκτυο μαζί, για την επεξεργασία μιας πράξης. Συνεπώς, οι κρυπτορύχοι έχουν το κίνητρο να συμπεριλάβουν μόνο εκείνες τις συναλλαγές για τις οποίες το συνολικό ωφελιμιστικό όφελος υπερβαίνει το κόστος.

Ωστόσο, στην πραγματικότητα υπάρχουν αρκετές σημαντικές αποκλίσεις από αυτές τις υποθέσεις:

  1. Ο εξορύκτης πληρώνει πράγματι υψηλότερο κόστος για την επεξεργασία της συναλλαγής από τους άλλους κόμβους επαλήθευσης, καθώς ο επιπλέον χρόνος επαλήθευσης καθυστερεί τη διάδοση του μπλοκ και ως εκ τούτου αυξάνει την πιθανότητα το μπλοκ να γίνει παλιό.
  2. Υπάρχουν πράγματι μη εξορύσσοντες πλήρεις κόμβοι.
  3. Η κατανομή της ισχύος κρυπτόρυξης μπορεί να καταλήξει να είναι ριζικά άνιση στην πράξη.
  4. Υπάρχουν κερδοσκόποι, πολιτικοί εχθροί και τρελοί, των οποίων η συνάρτηση χρησιμότητας περιλαμβάνει την πρόκληση ζημιών στο δίκτυο και μπορούν να δημιουργήσουν έξυπνα συμβόλαια το κόστος των οποίων είναι πολύ χαμηλότερο από το κόστος που καταβάλλουν άλλοι κόμβοι επαλήθευσης.

(1) συμπεριλαμβάνονται λιγότερες συναλλαγές για τον εξορύκτη και (2) αυξάνει το NC. Ως εκ τούτου, αυτές οι δύο επιδράσεις τουλάχιστον εν μέρει ακυρώνουν το ένα το άλλο. Πώς;(opens in a new tab) Τα σημεία (3) και (4) αποτελούν το μεγαλύτερο ζήτημα. Για να τα λύσουμε, απλά εφαρμόζουμε ένα κυμαινόμενο όριο: κανένα μπλοκ δεν μπορεί να έχει περισσότερες πράξεις από τον BLK_LIMIT_FACTOR επί τον μακροπρόθεσμο εκθετικό κινούμενο μέσο όρο. Συγκεκριμένα:

blk.oplimit = floor((blk.parent.oplimit \* (EMAFACTOR - 1) +
floor(parent.opcount \* BLK\_LIMIT\_FACTOR)) / EMA\_FACTOR)

Οι σταθερές BLK_LIMIT_FACTOR και EMA_FACTOR ορίζονται προσωρινά σε 65536 και 1,5 αντίστοιχα, αλλά πιθανότατα θα αλλάξουν μετά από περαιτέρω ανάλυση.

Υπάρχει ένας άλλος παράγοντας που αποθαρρύνει τα μεγάλα μεγέθη μπλοκ στο Bitcoin: τα μπλοκ που είναι μεγάλα θα χρειαστούν περισσότερο χρόνο για να διαδοθούν και έτσι θα έχουν μεγαλύτερη πιθανότητα να γίνουν παλιά. Στο Ethereum, τα μπλοκ υψηλής κατανάλωσης gas μπορούν επίσης να χρειαστούν περισσότερο χρόνο για να διαδοθούν τόσο επειδή είναι φυσικά μεγαλύτερα όσο και επειδή χρειάζονται περισσότερο χρόνο για να επεξεργαστούν τις μεταβάσεις κατάστασης συναλλαγής για επαλήθευση. Αυτό το αντικίνητρο καθυστέρησης είναι μια σημαντική εκτίμηση στο Bitcoin, αλλά λιγότερο στο Ethereum λόγω του πρωτοκόλλου GHOST. Συνεπώς, η εξάρτηση από ρυθμιζόμενα όρια μπλοκ παρέχει μια πιο σταθερή βάση.

Υπολογισμός και Πληρότητα Turing

Μια σημαντική σημείωση είναι ότι το εικονικό μηχάνημα του Ethereum έχει πληρότητα Turing. Αυτό σημαίνει ότι ο κώδικας EVM μπορεί να κωδικοποιήσει οποιονδήποτε υπολογισμό που μπορεί πιθανώς να πραγματοποιηθεί, συμπεριλαμβανομένων των άπειρων βρόχων. Ο κώδικας EVM επιτρέπει τη δημιουργία βρόχων με δύο τρόπους. Πρώτον, υπάρχει μια εντολή JUMP που επιτρέπει στο πρόγραμμα να πηδήξει πίσω σε ένα προηγούμενο σημείο στον κώδικα και μια εντολή JUMPI για να κάνει υπό όρους άλμα, επιτρέποντας δηλώσεις όπως while x < 27: x = x * 2. Δεύτερον, τα συμβόλαια μπορούν να καλούν άλλα συμβόλαια, επιτρέποντας ενδεχομένως τη δημιουργία βρόχου μέσω αναδρομής. Αυτό οδηγεί φυσικά σε ένα πρόβλημα: μπορούν οι κακόβουλοι χρήστες ουσιαστικά να αποκλείσουν τους εξορύκτες και τους πλήρεις κόμβους αναγκάζοντάς τους να μπουν σε έναν άπειρο βρόχο; Το ζήτημα προκύπτει λόγω ενός προβλήματος στην επιστήμη υπολογιστών που είναι γνωστό ως το πρόβλημα τερματισμού: δεν υπάρχει τρόπος να πούμε, στη γενική περίπτωση, εάν ένα δεδομένο πρόγραμμα θα σταματήσει ποτέ να τρέχει.

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

  • Ένας επιτιθέμενος δημιουργεί ένα συμβόλαιο που εκτελεί έναν άπειρο βρόχο και στη συνέχεια στέλνει μια συναλλαγή ενεργοποίησης αυτού του βρόχου στον κρυπτορύχο. Ο κρυπτορύχος θα επεξεργαστεί τη συναλλαγή, θα εκτελέσει τον άπειρο βρόχο και θα περιμένει να εξαντληθεί το gas του. Ακόμα και αν η εκτέλεση μείνει από gas και σταματήσει στη μέση, η συναλλαγή εξακολουθεί να είναι έγκυρη και ο εξορύκτης εξακολουθεί να διεκδικεί τα τέλη από τον επιτιθέμενο για κάθε υπολογιστικό βήμα.
  • Ένας επιτιθέμενος δημιουργεί έναν πολύ μακρύ άπειρο βρόχο με σκοπό να αναγκάσει τον εξορύκτη να συνεχίσει να υπολογίζει για τόσο μεγάλο χρονικό διάστημα που μέχρι να ολοκληρωθεί ο υπολογισμός, θα έχουν βγει μερικά ακόμη μπλοκ και δεν θα είναι δυνατό για τον εξορύκτη να συμπεριλάβει τη συναλλαγή για να διεκδικήσει τα τέλη. Ωστόσο, ο επιτιθέμενος θα πρέπει να υποβάλει μια τιμή για STARTGAS που περιορίζει τον αριθμό των υπολογιστικών βημάτων που μπορεί να κάνει η εκτέλεση, επομένως ο εξορύκτης θα γνωρίζει εκ των προτέρων ότι ο υπολογισμός θα χρειαστεί υπερβολικά μεγάλο αριθμό βημάτων.
  • Ένας επιτιθέμενος βλέπει ένα συμβόλαιο με κώδικα κάποιας μορφής όπως send(A,contract.storage[A]); contract.storage[A] = 0 και στέλνει μια συναλλαγή με ακριβώς αρκετό gas για να εκτελέσει το πρώτο βήμα αλλά όχι το δεύτερο (δηλαδή κάνει ανάληψη αλλά δεν αφήνει το υπόλοιπο να μειωθεί). Ο δημιουργός του συμβολαίου δε χρειάζεται να ανησυχεί για την προστασία από τέτοιες επιθέσεις, επειδή εάν η εκτέλεση σταματήσει στη μέση, οι αλλαγές αναστρέφονται.
  • Ένα χρηματοοικονομικό συμβόλαιο λειτουργεί λαμβάνοντας το διάμεσο εννέα ιδιόκτητων ροών δεδομένων για να ελαχιστοποιήσει τον κίνδυνο. Ένας επιτιθέμενος αναλαμβάνει τον έλεγχο μιας από τις ροές δεδομένων, η οποία έχει σχεδιαστεί να τροποποιείται μέσω του μηχανισμού κλήσης μεταβλητής διεύθυνσης που περιγράφεται στην ενότητα σχετικά με τους DAO και τη μετατρέπει σε εκτέλεση άπειρου βρόχου, προσπαθώντας έτσι να αναγκάσει οποιαδήποτε προσπάθεια διεκδίκησης κεφαλαίων από το χρηματοοικονομικό συμβόλαιο να μείνει από gas. Ωστόσο, το χρηματοοικονομικό συμβόλαιο μπορεί να ορίσει ένα όριο gas στο μήνυμα για να αποτρέψει αυτό το πρόβλημα.

Η εναλλακτική λύση στην πληρότητα Turing είναι η μη πληρότητα Turing, όπου δεν υπάρχουν τα JUMP και JUMPI και επιτρέπεται να υπάρχει μόνο ένα αντίγραφο κάθε συμβολαίου στη στοίβα κλήσεων σε κάθε δεδομένη στιγμή. Με αυτό το σύστημα, το σύστημα τελών που περιγράφεται και οι αβεβαιότητες σχετικά με την αποτελεσματικότητα της λύσης μας ενδέχεται να μην είναι απαραίτητα, καθώς το κόστος εκτέλεσης ενός συμβολαίου θα μπορούσε να περιοριστεί πάνω από το μέγεθός του. Επιπλέον, η μη πληρότητα Turing δεν είναι καν τόσο μεγάλος περιορισμός. Από όλα τα παραδείγματα συμβολαίων που έχουμε συλλάβει εσωτερικά, μέχρι στιγμής μόνο ένα απαιτούσε έναν βρόχο και ακόμη και αυτός ο βρόχος θα μπορούσε να αφαιρεθεί κάνοντας 26 επαναλήψεις ενός κομματιού κώδικα μιας γραμμής. Δεδομένων των σοβαρών επιπτώσεων της πληρότητας Turing και του περιορισμένου οφέλους, γιατί απλά να μην έχουμε μια μη πλήρη Turing γλώσσα; Στην πραγματικότητα, ωστόσο, η μη πληρότητα Turing απέχει πολύ από μια καθαρή λύση στο πρόβλημα. Για να δούμε γιατί, εξετάζουμε τα ακόλουθα συμβόλαια:

C0: call(C1); call(C1);
C1: call(C2); call(C2);
C2: call(C3); call(C3);
...
C49: call(C50); call(C50);
C50: (run one step of a program and record the change in storage)

Τώρα, στείλτε μια συναλλαγή στον Α. Έτσι, σε 51 συναλλαγές, έχουμε ένα συμβόλαιο που περιλαμβάνει 250 υπολογιστικά βήματα. Οι εξορύκτες θα μπορούσαν να προσπαθήσουν να εντοπίσουν τέτοιες λογικές βόμβες εκ των προτέρων, διατηρώντας μια τιμή δίπλα σε κάθε συμβόλαιο που καθορίζει τον μέγιστο αριθμό υπολογιστικών βημάτων που μπορεί να κάνει και υπολογίζοντας αυτό για συμβόλαια που καλούν άλλα συμβόλαια αναδρομικά. Αυτό θα απαιτούσε από τους εξορύκτες να απαγορεύσουν συμβόλαια που δημιουργούν άλλα συμβόλαια (αφού η δημιουργία και εκτέλεση όλων των 26 συμβολαίων παραπάνω θα μπορούσαν εύκολα να ενσωματωθούν σε ένα μόνο συμβόλαιο). Ένα άλλο προβληματικό σημείο είναι ότι το πεδίο διεύθυνσης ενός μηνύματος είναι μεταβλητό, οπότε γενικά μπορεί να μην είναι καν δυνατό να πούμε ποια άλλα συμβόλαια θα καλέσει ένα δεδομένο συμβόλαιο εκ των προτέρων. Συνολικά, έχουμε ένα αναπάντεχο συμπέρασμα: η πληρότητα Turing είναι εκπληκτικά εύκολη στη διαχείριση και η έλλειψη πληρότητας Turing είναι εξίσου αναπάντεχα δύσκολη στη διαχείριση, εκτός εάν οι ακριβώς ίδιοι έλεγχοι είναι στη θέση τους, αλλά σε αυτή την περίπτωση γιατί απλά να μην αφήσουμε το πρωτόκολλο να έχει πληρότητα Turing;

Νόμισμα και Έκδοση

Το δίκτυο Ethereum περιλαμβάνει το δικό του ενσωματωμένο νόμισμα, το ether, το οποίο εξυπηρετεί τον διπλό σκοπό της παροχής ενός πρωτογενούς στρώματος ρευστότητας για να επιτρέπεται η αποτελεσματική ανταλλαγή μεταξύ διαφόρων τύπων ψηφιακών περιουσιακών στοιχείων και πιο σημαντικά της παροχής ενός μηχανισμού για την πληρωμή τελών συναλλαγής. Για λόγους ευκολίας και για την αποφυγή μελλοντικών διαφωνιών (δείτε την τρέχουσα συζήτηση mBTC/uBTC/satoshi στο Bitcoin), οι ονομαστικές αξίες θα επισημανθούν εκ των προτέρων:

  • 1: wei
  • 1012: szabo
  • 1015: finney
  • 1018: ether

Αυτό θα πρέπει να θεωρηθεί ως μια επεκταμένη έκδοση της έννοιας των «δολαρίων» και των «λεπτών» ή των «BTC» και των «satoshi». Στο εγγύς μέλλον, αναμένουμε ότι το «ether» θα χρησιμοποιηθεί για συνηθισμένες συναλλαγές, το «finney» για μικρο-συναλλαγές και το «szabo» και το «wei» για τεχνικές συζητήσεις σχετικά με τα τέλη και την υλοποίηση πρωτοκόλλου. Οι υπόλοιπες ονομαστικές αξίες μπορεί να γίνουν χρήσιμες αργότερα και δεν πρέπει να συμπεριληφθούν στους πελάτες σε αυτό το σημείο.

Το μοντέλο έκδοσης θα έχει ως εξής:

  • Το ether θα κυκλοφορήσει σε μια πώληση νομίσματος στην τιμή των 1000-2000 ether ανά BTC, ένας μηχανισμός που αποσκοπεί στη χρηματοδότηση του οργανισμού Ethereum και στην πληρωμή για την ανάπτυξη που έχει χρησιμοποιηθεί με επιτυχία από άλλες πλατφόρμες όπως το Mastercoin και το NXT. Οι πρώτοι αγοραστές θα επωφεληθούν από μεγαλύτερες εκπτώσεις. Τα BTC που θα προκύψουν από την πώληση θα χρησιμοποιηθούν εξ ολοκλήρου για την πληρωμή μισθών και ανταμοιβών σε προγραμματιστές και θα επενδυθούν σε διάφορα κερδοφόρα και μη κερδοσκοπικά έργα στο οικοσύστημα Ethereum και κρυπτονομισμάτων.
  • Το 0,099x του συνολικού ποσού που πωλήθηκε (60102216 ETH) θα διατεθεί στον οργανισμό για την αποζημίωση των πρώιμων συνεισφερόντων και την πληρωμή εξόδων σε ETH πριν από το μπλοκ γένεσης.
  • Το 0,099x του συνολικού ποσού που πωλήθηκε θα διατηρηθεί ως μακροπρόθεσμο απόθεμα.
  • Το 0,26x του συνολικού ποσού που πωλήθηκε θα διατεθεί στους κρυπτορύχους ανά έτος για πάντα μετά από αυτό το σημείο.
ΟμάδαΑρχικήΜετά 1 χρόνοΜετά 5 χρόνια
Νομισματικές μονάδες1.198X1.458X2.498X
Αγοραστές83.5%68.6%40.0%
Προπώληση δαπανημένων αποθεματικών8.26%6.79%3.96%
Αποθεματικό που χρησιμοποιείται μετά την πώληση8.26%6.79%3.96%
Κρυπτορύχοι0%17.8%52.0%

Μακροπρόθεσμος ρυθμός ανάπτυξης προμήθειας (ποσοστό)

Πληθωρισμός Ethereum

Παρά τη γραμμική έκδοση νομίσματος, όπως ακριβώς και με το Bitcoin, ο ρυθμός αύξησης της προσφοράς τείνει στο μηδέν με την πάροδο του χρόνου.

Οι δύο κύριες επιλογές στο παραπάνω μοντέλο είναι (1) η ύπαρξη και το μέγεθος μιας δεξαμενής δωρεών και (2) η ύπαρξη μιας μόνιμα αυξανόμενης γραμμικής προσφοράς, σε αντίθεση με μια περιορισμένη προσφορά όπως στο Bitcoin. Η δικαιολόγηση της δεξαμενής δωρεών είναι η εξής. Αν η δεξαμενή δωρεών δεν υπήρχε και η γραμμική έκδοση μειωνόταν σε 0,217x για να παρέχει το ίδιο ποσοστό πληθωρισμού, τότε η συνολική ποσότητα του ether θα ήταν 16,5% ​​λιγότερη και έτσι κάθε μονάδα θα ήταν 19,8% πιο πολύτιμη. Κατά συνέπεια, στην ισορροπία θα αγοραζόταν 19,8% περισσότερο ether, οπότε κάθε μονάδα θα ήταν και πάλι εξίσου πολύτιμη όπως πριν. Ο οργανισμός θα είχε επίσης 1,198x περισσότερα BTC, τα οποία μπορούν να θεωρηθούν ως διαιρεμένα σε δύο κομμάτια: τα αρχικά BTC και τα επιπλέον 0,198x. Επομένως, αυτή η κατάσταση είναι απολύτως ισοδύναμη με τη δωρεά, αλλά με μια σημαντική διαφορά: ο οργανισμός κατέχει καθαρά BTC και ως εκ τούτου δεν έχει κίνητρο να υποστηρίξει την αξία της μονάδας ether.

Το μοντέλο μόνιμης γραμμικής αύξησης της προσφοράς μειώνει τον κίνδυνο της υπερβολικής συγκέντρωσης πλούτου που κάποιοι βλέπουν στο Bitcoin και δίνει στα άτομα που ζουν στις παρούσες και μελλοντικές εποχές μια δίκαιη ευκαιρία να αποκτήσουν νομισματικές μονάδες, διατηρώντας παράλληλα ένα ισχυρό κίνητρο για να αποκτήσουν και να κρατήσουν ether επειδή ο «ρυθμός αύξησης της προσφοράς» ως ποσοστό εξακολουθεί να τείνει στο μηδέν με την πάροδο του χρόνου. Υποθέτουμε επίσης ότι επειδή τα νομίσματα χάνονται πάντα με την πάροδο του χρόνου λόγω απροσεξίας, θανάτου κ. λπ. και η απώλεια νομίσματος μπορεί να μοντελοποιηθεί ως ποσοστό της συνολικής προσφοράς ανά έτος, ότι η συνολική προσφορά νομίσματος σε κυκλοφορία θα σταθεροποιηθεί τελικά σε μια τιμή ίση με την ετήσια έκδοση διαιρεμένη με το ποσοστό απώλειας (π.χ. σε ποσοστό απώλειας 1%, όταν η προσφορά φτάσει τα 26X, τότε θα κρυπτορυχθούν 0,26X και θα χαθούν 0,26X κάθε χρόνο, δημιουργώντας μια ισορροπία).

Σημειώστε ότι στο μέλλον είναι πιθανό το Ethereum να μεταβεί σε ένα μοντέλο απόδειξης συμμετοχής (proof-of-stake) για ασφάλεια, μειώνοντας την απαίτηση έκδοσης σε κάτι μεταξύ μηδέν και 0,05X ανά έτος. Σε περίπτωση που ο οργανισμός Ethereum χάσει χρηματοδότηση ή εξαφανιστεί για οποιοδήποτε άλλο λόγο, αφήνουμε ανοιχτό ένα «κοινωνικό συμβόλαιο»: ο καθένας έχει το δικαίωμα να δημιουργήσει μια μελλοντική υποψήφια έκδοση του Ethereum, με τη μόνη προϋπόθεση ότι η ποσότητα του ether πρέπει να είναι το πολύ ίση με 60102216 * (1,198 + 0,26 * n) όπου n είναι ο αριθμός των ετών μετά το μπλοκ γένεσης. Οι δημιουργοί είναι ελεύθεροι να πουλούν συλλογικά ή να αναθέτουν με άλλο τρόπο μέρος ή το σύνολο της διαφοράς μεταξύ της επέκτασης προσφοράς που βασίζεται στην απόδειξη συμμετοχής και της μέγιστης επιτρεπόμενης επέκτασης προσφοράς για την πληρωμή της ανάπτυξης. Οι υποψήφιες αναβαθμίσεις που δεν συμμορφώνονται με το κοινωνικό συμβόλαιο μπορούν δικαιολογημένα να διακλαδωθούν σε συμμορφούμενες εκδόσεις.

Συγκεντρωτισμός Εξόρυξης

Ο αλγόριθμος εξόρυξης Bitcoin λειτουργεί βάζοντας τους εξορύκτες να υπολογίζουν το SHA256 σε ελαφρώς τροποποιημένες εκδόσεις της κεφαλίδας του μπλοκ εκατομμύρια φορές ξανά και ξανά, μέχρι τελικά ένας κόμβος να βρει μια έκδοση της οποίας ο κατακερματισμός είναι μικρότερος από τον στόχο (συνήθως περίπου 2192). Ωστόσο, αυτός ο αλγόριθμος κρυπτόρυξης είναι ευάλωτος σε δύο μορφές συγκεντρωτισμού. Πρώτον, το οικοσύστημα κρυπτόρυξης έχει αρχίσει να κυριαρχείται από τα ASIC (ειδικά ολοκληρωμένα κυκλώματα εφαρμογής), ειδικά σχεδιασμένα μικροτσίπ για το έργο της κρυπτόρυξης Bitcoin και ως εκ τούτου χιλιάδες φορές πιο αποτελεσματικά σε αυτό. Αυτό σημαίνει ότι η κρυπτόρυξη Bitcoin δεν είναι πλέον μια ιδιαίτερα αποκεντρωμένη και ισότιμη προσπάθεια, αφού απαιτεί κεφάλαιο εκατομμυρίων δολαρίων για αποτελεσματική συμμετοχή. Δεύτερον, οι περισσότεροι εξορύκτες Bitcoin δεν εκτελούν πραγματικά επικύρωση μπλοκ τοπικά, αλλά αντίθετα βασίζονται σε μια κεντρική δεξαμενή κρυπτόρυξης που παρέχει τις κεφαλίδες των μπλοκ. Αυτό το πρόβλημα είναι πιθανώς χειρότερο: κατά τη στιγμή της συγγραφής αυτού του κειμένου, οι τρεις κορυφαίες δεξαμενές κρυπτόρυξης ελέγχουν έμμεσα περίπου το 50% της ισχύος επεξεργασίας στο δίκτυο Bitcoin, αν και αυτό μετριάζεται από το γεγονός ότι οι εξορύκτες μπορούν να στραφούν σε άλλες δεξαμενές κρυπτόρυξης εάν μια δεξαμενή ή μια συμμαχία επιχειρήσει μια επίθεση 51%.

Η τρέχουσα πρόθεση του Ethereum είναι να χρησιμοποιήσει έναν αλγόριθμο κρυπτόρυξης όπου οι εξορύκτες απαιτείται να αντλούν τυχαία δεδομένα από την κατάσταση, να υπολογίζουν τυχαία επιλεγμένες συναλλαγές από τα τελευταία N μπλοκ στην κρυπτοαλυσίδα και να επιστρέφουν τον κατακερματισμό του αποτελέσματος. Αυτό έχει δύο σημαντικά οφέλη. Πρώτον, τα συμβόλαια Ethereum μπορούν να περιλαμβάνουν οποιοδήποτε είδος υπολογισμού, οπότε ένα ASIC του Ethereum θα ήταν ουσιαστικά ένα ASIC για γενικό υπολογισμό, δηλαδή μια καλύτερη CPU. Δεύτερον, η κρυπτόρυξη απαιτεί πρόσβαση σε ολόκληρη την κρυπτοαλυσίδα, αναγκάζοντας τους εξορύκτες να αποθηκεύουν ολόκληρη την κρυπτοαλυσίδα και να είναι τουλάχιστον σε θέση να επαληθεύουν κάθε συναλλαγή. Αυτό καταργεί την ανάγκη για κεντρικές δεξαμενές κρυπτόρυξη. Αν και οι δεξαμενές κρυπτόρυξης μπορούν ακόμα να εξυπηρετήσουν τον θεμιτό ρόλο εξομάλυνσης της τυχαιότητας όσον αφορά την κατανομή των ανταμοιβών, αυτή η λειτουργία μπορεί να εξυπηρετηθεί εξίσου καλά από δεξαμενές μεταξύ ομοτίμων χωρίς κεντρικό έλεγχο.

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

Κλιμάκωση

Μια κοινή ανησυχία σχετικά με το Ethereum είναι το ζήτημα της δυνατότητας κλιμάκωσης. Όπως το Bitcoin, το Ethereum πάσχει από το μειονέκτημα ότι κάθε κόμβος στο δίκτυο πρέπει να επεξεργάζεται την κάθε συναλλαγή. Με το Bitcoin, το μέγεθος της τρέχουσας κρυπτοαλυσίδας είναι περίπου 15 GB, και αυξάνεται κατά περίπου 1 MB την ώρα. Εάν το δίκτυο Bitcoin επρόκειτο να επεξεργαστεί τις 2000 συναλλαγές της Visa ανά δευτερόλεπτο, θα αυξανόταν κατά 1 MB ανά τρία δευτερόλεπτα (1 GB ανά ώρα, 8 TB ανά έτος). Το Ethereum πιθανότατα θα εκτεθεί ένα παρόμοιο πρότυπο ανάπτυξης, που επιδεινώνεται από το γεγονός ότι θα υπάρχουν πολλές εφαρμογές πάνω από την κρυπτοαλυσίδα Ethereum, αντί για μόνο ένα νόμισμα, όπως συμβαίνει με το Bitcoin, αλλά βελτιώνεται από το γεγονός ότι οι πλήρεις κόμβοι Ethereum χρειάζεται να αποθηκεύουν μόνο την κατάσταση αντί για ολόκληρο το ιστορικό της κρυπτοαλυσίδας.

Το πρόβλημα με ένα τόσο μεγάλο μέγεθος κρυπτοαλυσίδας είναι ο κίνδυνος κεντρικού ελέγχου. Εάν το μέγεθος της κρυπτοαλυσίδας αυξηθεί σε, ας πούμε, 100 TB, τότε το πιθανό σενάριο θα ήταν ότι μόνο ένας πολύ μικρός αριθμός μεγάλων επιχειρήσεων θα εκτελούσε πλήρεις κόμβους, με όλους τους κανονικούς χρήστες να χρησιμοποιούν ελαφρούς κόμβους SPV. Σε μια τέτοια κατάσταση, προκύπτει η πιθανή ανησυχία ότι οι πλήρεις κόμβοι θα μπορούσαν να ενώσουν τις δυνάμεις τους και να συμφωνήσουν όλοι να εξαπατήσουν με κάποιο κερδοφόρο τρόπο (π.χ. να αλλάξουν την ανταμοιβή μπλοκ, να δώσουν στον εαυτό τους BTC). Οι ελαφροί κόμβοι δεν θα είχαν τρόπο να ανιχνεύσουν κάτι τέτοιο αμέσως. Φυσικά, πιθανότατα θα υπήρχε τουλάχιστον ένας ειλικρινής πλήρης κόμβος και μετά από λίγες ώρες οι πληροφορίες σχετικά με την απάτη θα διέρρεαν μέσω καναλιών, όπως το Reddit, αλλά τότε θα ήταν πολύ αργά: θα έπρεπε οι κανονικοί χρήστες να οργανώσουν μια προσπάθεια να μπλοκάρουν τα συγκεκριμένα μπλοκ, ένα τεράστιο και πιθανώς ανέφικτο πρόβλημα συντονισμού σε παρόμοια κλίμακα με αυτήν μιας επιτυχημένης επίθεσης 51%. Στην περίπτωση του Bitcoin, αυτό αποτελεί σήμερα πρόβλημα, αλλά υπάρχει μια τροποποίηση της κρυπτοαλυσίδας που προτάθηκε από τον Peter Todd(opens in a new tab), η οποία θα μετριάσει αυτό το ζήτημα.

Στο άμεσο μέλλον, το Ethereum θα χρησιμοποιήσει δύο πρόσθετες στρατηγικές για να αντιμετωπίσει αυτό το πρόβλημα. Πρώτον, λόγω των αλγορίθμων κρυπτόρυξης που βασίζονται στην κρυπτοαλυσίδα, τουλάχιστον κάθε κρυπτορύχος θα αναγκάζεται να είναι πλήρης κόμβος, δημιουργώντας ένα κατώτατο όριο στον αριθμό των πλήρων κόμβων. Δεύτερον και πιο σημαντικό, ωστόσο, θα συμπεριλάβουμε μια ενδιάμεση ρίζα δέντρου κατάστασης στην κρυπτοαλυσίδα μετά την επεξεργασία κάθε συναλλαγής. Ακόμη και αν η επικύρωση μπλοκ είναι κεντρική, εφόσον υπάρχει τουλάχιστον ένας ειλικρινής κόμβος επαλήθευσης, το πρόβλημα κεντρικού ελέγχου μπορεί να παρακαμφθεί μέσω ενός πρωτοκόλλου επαλήθευσης. Εάν ένας εξορύκτης δημοσιεύσει ένα μη έγκυρο μπλοκ, αυτό το μπλοκ πρέπει είτε να έχει κακή μορφοποίηση είτε η κατάσταση S[n] να είναι λάθος. Δεδομένου ότι είναι γνωστό ότι το S[0] είναι σωστό, πρέπει να υπάρχει κάποια πρώτη κατάσταση S[i] που δηλώνει ότι είναι λάθος όπου το S[i-1] είναι σωστό. Ο κόμβος επαλήθευσης θα παρέχει τον δείκτη i, μαζί με μια «απόδειξη μη εγκυρότητας» που αποτελείται από το υποσύνολο των κόμβων δέντρου Patricia, που χρειάζεται για την επεξεργασία APPLY(S[i-1],TX[i]) -> S[i]. Οι κόμβοι θα μπορούν να χρησιμοποιήσουν αυτούς τους κόμβους για να εκτελέσουν αυτό το μέρος του υπολογισμού και να δουν ότι το S[i] που δημιουργήθηκε δεν ταιριάζει με το S[i] που παρέχεται.

Μια άλλη, πιο εξελιγμένη επίθεση θα περιελάμβανε τη δημοσίευση ατελών μπλοκ από κακόβουλους εξορύκτες, έτσι ώστε οι πλήρες πληροφορίες να μην υπάρχουν καν για να προσδιοριστεί εάν τα μπλοκ είναι έγκυρα ή όχι. Η λύση σε αυτό είναι ένα πρωτόκολλο πρόκλησης - απόκρισης: οι κόμβοι επαλήθευσης εκδίδουν «προκλήσεις» με τη μορφή δεικτών στόχων συναλλαγών και κατά την παραλαβή ενός κόμβου, ένας ελαφρύς κόμβος αντιμετωπίζει το μπλοκ ως μη αξιόπιστο έως ότου ένας άλλος κόμβος, είτε ο εξορύκτης είτε ένας άλλος επαληθευτής, παρέχει ένα υποσύνολο κόμβων Patricia ως απόδειξη εγκυρότητας.

Συμπεράσματα

Το πρωτόκολλο Ethereum σχεδιάστηκε αρχικά ως μια αναβαθμισμένη έκδοση ενός κρυπτονομίσματος, παρέχοντας προηγμένες λειτουργίες όπως η εγγύηση εντός αλυσίδας, τα όρια ανάληψης, τα χρηματοοικονομικά συμβόλαια, οι αγορές τυχερών παιχνιδιών και τα παρόμοια μέσω μιας εξαιρετικά γενικευμένης γλώσσας προγραμματισμού. Το πρωτόκολλο Ethereum δεν θα «υποστήριζε» καμία από τις εφαρμογές απευθείας, αλλά η ύπαρξη μιας γλώσσας προγραμματισμού με πληρότητα Turing σημαίνει ότι θεωρητικά μπορούν να δημιουργηθούν αυθαίρετα συμβόλαια για οποιονδήποτε τύπο συναλλαγής ή εφαρμογή. Αυτό που είναι πιο ενδιαφέρον για το Ethereum, ωστόσο, είναι ότι το πρωτόκολλο Ethereum ξεπερνά κατά πολύ το νόμισμα. Πρωτόκολλα γύρω από την αποκεντρωμένη αποθήκευση αρχείων, τον αποκεντρωμένο υπολογισμό και τις αποκεντρωμένες αγορές προβλέψεων, μεταξύ δεκάδων άλλων τέτοιων εννοιών, έχουν τη δυνατότητα να αυξήσουν σημαντικά την αποτελεσματικότητα της βιομηχανίας υπολογισμών και να παρέχουν μια τεράστια ώθηση σε άλλα πρωτόκολλα μεταξύ ομοτίμων προσθέτοντας για πρώτη φορά ένα οικονομικό επίπεδο. Τέλος, υπάρχει επίσης ένας σημαντικός αριθμός εφαρμογών που δεν έχουν καμία σχέση με χρήματα.

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

Σημειώσεις και περαιτέρω υλικό για διάβασμα

Σημειώσεις

  1. Ένας ψαγμένος αναγνώστης μπορεί να παρατηρήσει ότι στην πραγματικότητα μια διεύθυνση Bitcoin είναι ο κατακερματισμός του δημόσιου κλειδιού της ελλειπτικής καμπύλης και όχι το ίδιο το δημόσιο κλειδί. Ωστόσο, στην πραγματικότητα είναι απόλυτα θεμιτό η κρυπτογραφική ορολογία να αναφέρεται στον κατακερματισμό του δημόσιου κλειδιού ως το ίδιο το δημόσιο κλειδί. Αυτό συμβαίνει επειδή η κρυπτογράφηση του Bitcoin μπορεί να θεωρηθεί ως ένας προσαρμοσμένος αλγόριθμος ψηφιακής υπογραφής, όπου το δημόσιο κλειδί αποτελείται από τον κατακερματισμό του δημόσιου κλειδιού ECC, η υπογραφή αποτελείται από το δημόσιο κλειδί ECC που είναι συνδεδεμένο σειριακά με την υπογραφή ECC και ο αλγόριθμος επαλήθευσης περιλαμβάνει τον έλεγχο του δημόσιου κλειδιού ECC στην υπογραφή έναντι του κατακερματισμού του δημόσιου κλειδιού ECC που παρέχεται ως δημόσιο κλειδί και στη συνέχεια την επαλήθευση της υπογραφής ECC έναντι του δημόσιου κλειδιού ECC.
  2. Τεχνικά, η διάμεσος των 11 προηγούμενων μπλοκ.
  3. Εσωτερικά, το 2 και το «CHARLIE» είναι και τα δύο αριθμοί [fn3] (#notes), με το δεύτερο να είναι σε αναπαράσταση βάσης μεγάλου άκρου 256. Οι αριθμοί μπορούν να είναι το λιγότερο 0 και το πολύ 2256-1.

Περισσότερες πληροφορίες

  1. Εγγενής αξία(opens in a new tab)
  2. Έξυπνη ιδιοκτησία(opens in a new tab)
  3. Smart contracts(opens in a new tab)
  4. B-money(opens in a new tab)
  5. Επαναχρησιμοποιούμενες αποδείξεις εργασίας(opens in a new tab)
  6. Ασφαλείς τίτλοι ιδιοκτησίας με εξουσία κατόχου(opens in a new tab)
  7. Λευκό βιβλίο Bitcoin(opens in a new tab)
  8. Namecoin(opens in a new tab)
  9. Το τρίγωνο του Zooko(opens in a new tab)
  10. Λευκό βιβλίο των έγχρωμων νομισμάτων(opens in a new tab)
  11. Λευκό βιβλίο Mastercoin(opens in a new tab)
  12. Αποκεντρωμένες αυτόνομες εταιρείες, περιοδικό Bitcoin(opens in a new tab)
  13. Απλοποιημένη επαλήθευση πληρωμής(opens in a new tab)
  14. Merkle trees(opens in a new tab)
  15. Patricia trees(opens in a new tab)
  16. GHOST(opens in a new tab)
  17. StorJ και Αυτόνομοι Πράκτορες, Jeff Garzik(opens in a new tab)
  18. Ο Mike Hearn για την Έξυπνη Ιδιοκτησία στο Φεστιβάλ Turing(opens in a new tab)
  19. Ethereum RLP(opens in a new tab)
  20. Δέντρα Merkle Patricia του Ethereum(opens in a new tab)
  21. Peter Todd για τα δυαδικά δέντρα Merkle συνολικά(opens in a new tab)

Για την ιστορία του Λευκού βιβλίου, δείτε αυτό το wiki(opens in a new tab).

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

Ήταν χρήσιμο αυτό το άρθρο;