τι στο καλό είναι τα smart contracts;
Τι μπορεί να κάνει κανείς με αυτά και γιατί είναι σημαντικά;
Πριν ταξιδέψουμε στον κόσμο του DeFi, των stable coins, των NFTs, των DAOs και των λοιπών εξωτικών προορισμών, πρέπει να έχεις μία ιδέα του τι είναι τα “smart contracts”.
(Αν ήδη γνωρίζεις σε βάθος το αντικείμενο, θα δεις ότι κάνω πολλές απλοποιήσεις. Το αντικείμενο είναι πολύπλοκο και πολυδιάστατο, το ξέρω. Επέλεξα να επικεντρωθώ στα σημεία που έχουν σημασία για κάποιον που έρχεται σε πρώτη επαφή με αυτό.)
Θα προσπαθήσουμε να καταλάβουμε τι είναι ένα smart contract με ένα παράδειγμα, πρώτα στο web που όλοι γνωρίζουμε και μετά στο web3.
ο “παραδοσιακός” τρόπος υλοποίησης
Ας πούμε ότι θέλουμε να φτιάξουμε ένα πολύ απλό on-line σύστημα ψηφοφορίας με δύο επιλογές, Ναι/Όχι.
Αυτό που θα έκανε σήμερα ένας web developer θα ήταν πρώτα να στήσει σε έναν server ένα backend πρόγραμμα με δύο πίνακες. Στον ένα θα κρατούσε τους Αριθμούς Ταυτοτητας που έχουν ψηφίσει και στον άλλο πόσες ψήφους έχει συγκεντρώσει το Ναι και πόσες το Όχι.
Θα έφτιαχνε και μία “μέθοδο” (API call) που θα έμοιαζε κάπως έτσι:
καταχώρηση_ψήφου(ΑΔΤ, Ναι/Όχι)
Μετά θα έφτιαχνε το frontend, που θα ήταν μία σελίδα web με δύο πεδία (ΑΔΤ και επιλογή Ναι ή Όχι) και ένα κουμπί “Καταχώριση”.
Όταν θα πατήσεις “Καταχώριση” η σελίδα θα καλέσει το καταχωριση_ψήφου() στον server και αυτός θα τσεκάρει αν έχεις ήδη ψηφίσει. Aν δεν έχεις, θα προσθέσει στον πρώτο πίνακα τον ΑΔΤ και θα αυξήσει τις αντίστοιχες ψήφους στον άλλο.
Όλα καλά ως εδώ, και υπάρχουν αναρίθμητες τέτοιες εφαρμογές που μπορεί όλοι να έχουμε χρησιμοποιήσει, αλλά υπάρχει ένα πρόβλημα: πρόβλημα εμπιστοσύνης.
Γιατί, το τι συμβαίνει πραγματικά στο backend, αν καταχωρήθηκε μία ψήφος σωστά, αν κάποιος ψήφισε μόνο μία φορά ή 100, αν τα Όχι καταχωρούνται μόνο τις μισές φορές και τα Ναι διπλά, το ξέρει μόνο ο developer. Ακόμη κι αν έχει δημοσιεύσει τον κώδικά του, το τι έχει τελικά εγκαταστήσει το ξέρει μόνο αυτός. Κι αν έχει παρέμβει και κάποιος χάκερ, ακόμη κι ο developer άλλο θα νομίζει ότι γίνεται κι άλλο θα γίνεται.
Απλά αναλογίσου τα ερωτήματα που θα προέκυπταν στο μυαλό σου αν έλεγα ότι με δύο, τρεις αλλαγές στα κείμενα, μπορεί να χρησιμοποιηθεί το site μουστοκουλουρο-ή-κουραμπιες.gr για να κάνουμε δημοψήφισμα για ένα θέμα εθνικής σημασίας.
Οπότε μεταθέτουμε το πρόβλημα της εμπιστοσύνης. Εμπιστευόμαστε το σύστημα ψηφοφορίας γιατί εμπιστευόμαστε τον developer ή τον διαχειριστή του server. Π.χ. άλλο βαθμό εμπιστοσύνης δείχνουμε αν ο διαχειριστής είναι ο χρήστης @OMGkai3LOL99 από το twitter κι άλλο αν είναι το Υπ. Εσωτερικών (και για να το πάμε κι ένα βήμα παρακάτω, ανάλογα με την χώρα μπορεί κάποιος να εμπιστεύεται πιο πολύ τον πρώτο ή τον δεύτερο).
ο web3 τρόπος
Αυτό το πρόβλημα εμπιστοσύνης έρχεται να λύσει ένα blockchain με smart contracts, όπως το Ethereum. Ας δούμε πως θα το υλοποιούσε την εφαρμογή ψηφοφορίας κάποιος με την βοήθεια του Ethereum network.
Και πάλι ο developer θα έφτιαχνε ένα πρόγραμμα που μοιάζει με αυτό που περιγράψαμε παραπάνω. Στο Ethereum network, αυτό το πρόγραμμα ονομάζεται “smart contract”. Και αντί να το εγκαταστήσει σε έναν server, θα το εγκαταστήσει στο Ethereum network. Ο όρος που χρησιμοποιείται για αυτή την διαδικασία είναι “smart contract deployment”.
Η πρώτη διαφορά είναι ότι το smart contract δεν “εγκαθίσταται” σε έναν server, αλλά στους πάνω από 3000 Ethereum mining nodes που υπάρχουν αυτή την στιγμή.
Ένα Ethereum mining node, μπορεί να στήσει ο καθένας. Χρειάζεται κάποια τεχνική γνώση, αλλά δεν είναι κάτι τρομερό. Θέλω να πω, αυτά τα nodes δεν είναι 3000 servers της Google ή του Facebook. Είναι 3000 servers από ανθρώπους σε όλο τον κόσμο που έστησαν έναν, είτε στο σπίτι τους, είτε στην εταιρεία τους, είτε σε κάποιο hosting provider και αύριο μπορεί να είναι 4000.
Η δεύτερη διαφορά είναι το τι συμβαίνει όταν η σελίδα στην οποία καταχωρήσαμε την ψήφο μας καλέσει την αντίστοιχη μέθοδο καταχωριση_ψήφου() στο smart contract. Τότε, όλοι αυτοί οι nodes τρέχουν το ίδιο πρόγραμμα και συγκρίνουν μεταξύ τους το αποτέλεσμα (δηλαδή την νέα κατάσταση των πινάκων με το ποιος ψήφισε και τον αριθμό των ψήφων).
Αφού συμφωνήσουν, την αποδέχονται όλοι, και προχωράνε να καταχωρίσουν την επόμενη ψήφο.
Μπορεί ένας, δύο, εκατό nodes να δώσουν λάθος αποτελέσματα είτε γιατί είναι κακόβουλοι είτε γιατί αντιμετώπισαν κάποιο τεχνικό πρόβλημα; Ναι, μπορεί. Αλλά εδώ είναι η καινοτομία και η ομορφιά του blockchain. Το να τρέχεις ένα Ethereum mining node κοστίζει πολλά χρήματα και ο λόγος που το κάνεις είναι για να πληρωθείς σε ETH. Βασικές προϋποθεσεις για να πληρωθείς που έτρεξες το καταχώριση_ψήφου() είναι α) να συμφωνούν τα αποτελέσματά σου με την πλειοψηφία των υπολοίπων nodes και β) να έχεις αποδεχθεί όλα τα προηγούμενα αποτελέσματα όλων των smart contracts και όλων των transactions που έχουν τρέξει ποτέ στο Ethereum.
Σημείωση: Ethereum είναι το network. Ether ή ETH είναι το νόμισμα στο οποίο πληρώνονται οι miners. Συχνά οι δύο όροι χρησιμοποιούνται χωρίς να γίνεται διαχωρισμός, αλλά αυτός είναι ο τυπικός ορισμός.
Απλοποιώ πολύ τα πράγματα, αλλά πίσω από αυτή την διαδικασία υπάρχει ένα ολόκληρο game theory που διασφαλίζει ότι αν οι miners δεν θέλουν να χάνουν χρήματα, πρέπει να κάνουν έντιμα και σωστά την δουλειά τους. Θα μιλήσουμε σε άλλο άρθρο για το blockchain security, το 51% attack και άλλα σχετικά θέματα. Για την ώρα ας κρατήσουμε ότι το κόστος για να “πειράξει” κάποιος το αποτέλεσμα είναι αποτρεπτικό.
Αυτή είναι μία από τις βασικές καινοτομίες που έφερε πρώτα το Bitcoin (και στην συνέχεια τα υπόλοιπα blockchains που εμφανίστηκαν): η αποκέντρωση της εμπιστοσύνης (decentralisation of trust).
Περιορισμοί
Η προσέγγιση αυτή έχει βέβαια και περιορισμούς, που προκύπτουν από το γεγονός ότι ο κώδικας του προγράμματος μας θα τρέξει σε 3000+ υπολογιστές που ο καθένας έχει πάνω του ένα array από πανάκριβες κάρτες γραφικών (χρειάζονται για να τρέχουν κάποιους αλγόριθμους που είναι απαραίτητοι για την λειτουργία του Ethereum) και τα δεδομένα μας θα σωθούν σε περισσότερα από 3000 αντίγραφα για πάντα και ότι η κάθε λειτουργία που θα τρέξουμε πρέπει να ολοκληρωθεί σε ελάχιστα δευτερόλεπτα.
Με λίγα λόγια, το πρόγραμμα μας τρέχει σε ένα από τα πιο ακριβά υπολογιστικά συστήματα που έχουν φτιαχτεί ποτέ και κάθε δευτερόλεπτο υπολογιστικής ισχύος και κάθε byte που σώζουμε, κοστίζει αντίστοιχα πολύ.
Οπότε, όχι, δεν μπορείς να φτιάξεις ένα smart contract που θα παίρνει ένα αρχείο CAD και θα το κάνει render. Τα smart contracts κάνουν απλά πράγματα, όπως να κρατάνε δεδομένα σε σχετικά μικρούς πίνακες, απλές αριθμητικές πράξεις και μεταφορές ETH μεταξύ διευθύνσεων.
Ένας άλλος περιορισμός είναι πως ένα smart contract δεν γνωρίζει τίποτα που δεν είναι μέσα στο blockchain. Έτσι, ενώ μπορείς να έχεις ένα smart contract που όταν δέχεται δύο ETH θα στέλνει ένα στην διεύθυνση του Παναγιώτη και ένα στην διεύθυνση του Σπύρου, δεν μπορείς να έχεις ένα smart contract που θα στείλει αυτόματα 1 ETH στην διεύθυνση ενός αγρότη αν ρίξει χαλάζι στην Θεσσαλία τον Σεπτέμβρη. (Εδώ μπαίνουν τα “oracles”, που κάνουν αυτή την γέφυρα μεταξύ του “έξω” και του “μέσα”, αλλά είναι πολύ μεγάλο θέμα, ίσως για μελλοντικό άρθρο.)
Δυνατότητες
Αυτό που μπορούν να κάνουν τα smart contracts, είναι να τηρούν δεσμεύσεις. Στο κάτω-κάτω, αυτό είναι ένα συμβόλαιο (contract): η τυπική περιγραφή μίας δέσμευσης.
Τα συμβόλαια στην καθημερινή ζωή, όπως αγορές ακινήτων, συμβάσεις εργασίας, και εμπορικές συμφωνίες ή, με την ευρύτερη έννοια, καταστατικά εταιρειών και οργανισμών, ακόμη και το σύνταγμα και οι νόμοι, πολύ σπάνια έχουν πολύπλοκα μαθηματικά. Βασικός λόγος που δεν τα “τρέχουμε” σε υπολογιστές αλλά σε δικηγόρους, συμβολαιογράφους και κοινοβούλια είναι ότι όλοι αυτοί έρχονται με δικλείδες ασφαλείας για το ότι τα συμβόλαια θα υπάρχουν αναλλοίωτα στο μέλλον και ότι θα τηρηθούν.
(Αξίζει να διαβάσεις το άρθρο Computers that can make commitments του Chris Dixon.)
Όταν σε επόμενα άρθρα θα μιλάμε για τις εφαρμογές του web3, η πιο συχνή ερώτηση που θα προκύπτει είναι “και που ξέρω εγώ ότι…” ή “και πως μπορείς να είσαι σίγουρος ότι…” Ε, η απάντηση συνήθως θα είναι ήδη εδώ :-)
Τι μπορεί να υλοποιηθεί ως smart contract με αυτούς τους περιορισμούς και αυτές τις δυνατότητες; Μέχρι στιγμής έχουν υλοποιηθεί με μεγάλη επιτυχία νέα νομίσματα, αποκεντρωμένα ανταλλακτήρια αξιών, δάνεια, οικονομικά παράγωγα, συστήματα ψηφοφορίας και διακυβέρνησης οργανισμών, ψηφιακά πιστοποιητικά ιδιοκτησίας, escrow services, δημοπρασίες και σίγουρα πολλά ακόμη που μου διαφεύγουν.
Συνοπτικά
Στο web3, αντί να έχουμε έναν κεντρικό server στον οποίο τρέχουμε το backend της εφαρμογής μας, μπορούμε να έχουμε ένα blockchain network, όπως το Ethereum.
Τα προγράμματα που τρέχουν σε ένα blockchain network όπως το Ethereum τα ονομάζουμε smart contracts.
Κάθε smart contract έχει κάποιες μεθόδους (API) με τις οποίες μπορούμε να επιδράσουμε μαζί του.
Μπορούμε να εμπιστευθούμε το αποτέλεσμα κάθε φορά που τρέχει ένα smart contract.
Τα smart contracts μας επιτρέπουν να προγραμματίσουμε υπολογιστές που τηρούν δεσμεύσεις, χωρις την ανάγκη εξωτερικών εγγυήσεων.
Υποθέτω έχεις πάρει το μελομακαρονο-ή-κουραμπιες.eth :)