Το βιβλίο «Creating Solidity smart contracts for the Ethereum blockchain. Πρακτικός οδηγός"

Το βιβλίο «Creating Solidity smart contracts for the Ethereum blockchain. Πρακτικός οδηγός"
Για περισσότερο από ένα χρόνο εργάζομαι στο βιβλίο «Creating Solidity Smart Contracts for the Ethereum Blockchain. Πρακτικός Οδηγός», και τώρα ολοκληρώθηκε αυτή η εργασία, και το βιβλίο δημοσιευμένο και διαθέσιμο σε Liters.

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

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

Παρακάτω θα βρείτε τον πίνακα περιεχομένων και το πρώτο κεφάλαιο του βιβλίου (επίσης Litrese αποσπάσματα του βιβλίου είναι διαθέσιμα). Ελπίζω να λαμβάνω σχόλια, σχόλια και προτάσεις. Όλα αυτά θα προσπαθήσω να τα λάβω υπόψη κατά την προετοιμασία της επόμενης έκδοσης του βιβλίου.

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

Είναι καλύτερα όχι μόνο να διαβάσετε αυτό το βιβλίο, αλλά να εργαστείτε μαζί του, εκτελώντας πρακτικές εργασίες που περιγράφονται στα μαθήματα. Για να εργαστείτε, θα χρειαστείτε έναν τοπικό υπολογιστή, έναν εικονικό διακομιστή ή έναν διακομιστή cloud με εγκατεστημένο το Debian ή το Ubuntu OS. Μπορείτε επίσης να χρησιμοποιήσετε το Raspberry Pi για να εκτελέσετε πολλές εργασίες.

Στο πρώτο μάθημα Θα εξετάσουμε τις αρχές λειτουργίας του blockchain Ethereum και τη βασική ορολογία, και επίσης θα μιλήσουμε για το πού μπορεί να χρησιμοποιηθεί αυτό το blockchain.

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

Τρίτο μάθημα θα σας διδάξει πώς να πειραματιστείτε με το Ethereum σε έναν φθηνό μικροϋπολογιστή Raspberry Pi. Θα εγκαταστήσετε το λειτουργικό σύστημα Rasberian (OS) στο Raspberry Pi, το βοηθητικό πρόγραμμα Geth που τροφοδοτεί τον κόμβο blockchain και τον δαίμονα αποθήκευσης αποκεντρωμένων δεδομένων Swarm.

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

Στο πέμπτο μάθημα Θα εξοικειωθείτε με τα έξυπνα συμβόλαια στο δίκτυο Ethereum και θα μάθετε για την εκτέλεσή τους από την εικονική μηχανή Ethereum.

Θα δημιουργήσετε και θα δημοσιεύσετε το πρώτο σας έξυπνο συμβόλαιο στο ιδιωτικό δίκτυο Ethereum και θα μάθετε πώς να καλείτε τις λειτουργίες του. Για να το κάνετε αυτό, θα χρησιμοποιήσετε το Remix Solidity IDE. Θα μάθετε επίσης πώς να εγκαταστήσετε και να χρησιμοποιήσετε τον μεταγλωττιστή δέσμης solc.
Θα μιλήσουμε επίσης για το λεγόμενο Application Binary Interface (ABI) και θα σας μάθουμε πώς να το χρησιμοποιείτε.

Έκτο μάθημα είναι αφιερωμένη στη δημιουργία σεναρίων JavaScript που εκτελούν το Node.js και στην εκτέλεση λειτουργιών με έξυπνα συμβόλαια Solidity.

Θα εγκαταστήσετε το Node.js σε Ubuntu, Debian και Rasberian OS, θα γράψετε σενάρια για να δημοσιεύσετε ένα έξυπνο συμβόλαιο στο τοπικό δίκτυο Ethereum και θα καλέσετε τις λειτουργίες του.

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

Στο έβδομο μάθημα Θα μάθετε πώς να εγκαθιστάτε και να χρησιμοποιείτε το πλαίσιο Truffle, δημοφιλές μεταξύ των προγραμματιστών έξυπνων συμβολαίων Solidity. Θα μάθετε πώς να δημιουργείτε σενάρια JavaScript που καλούν συναρτήσεις συμβάσεων χρησιμοποιώντας την ενότητα truffle-contract και να δοκιμάζετε το έξυπνο συμβόλαιό σας χρησιμοποιώντας το Truffle.

Όγδοο μάθημα αφιερωμένο στους τύπους δεδομένων Solidity. Θα γράψετε έξυπνα συμβόλαια που λειτουργούν με τύπους δεδομένων, όπως υπογεγραμμένους και ανυπόγραφους ακέραιους αριθμούς, υπογεγραμμένους αριθμούς, συμβολοσειρές, διευθύνσεις, μιγαδικές μεταβλητές, πίνακες, απαριθμήσεις, δομές και λεξικά.

Στο ένατο μάθημα Θα είστε ένα βήμα πιο κοντά στη δημιουργία έξυπνων συμβολαίων για το κεντρικό δίκτυο Ethereum. Θα μάθετε πώς να δημοσιεύετε συμβόλαια χρησιμοποιώντας το Truffle στο ιδιωτικό δίκτυο Geth, καθώς και στο δοκιμαστικό δίκτυο Rinkeby. Ο εντοπισμός σφαλμάτων ενός έξυπνου συμβολαίου στο δίκτυο Rinkeby είναι πολύ χρήσιμος πριν το δημοσιεύσετε στο κύριο δίκτυο - σχεδόν τα πάντα είναι πραγματικά εκεί, αλλά δωρεάν.

Ως μέρος του μαθήματος, θα δημιουργήσετε έναν κόμβο δικτύου δοκιμής Rinkeby, θα τον χρηματοδοτήσετε με κεφάλαια και θα δημοσιεύσετε ένα έξυπνο συμβόλαιο.

μάθημα 10 αφιερωμένο στην κατανεμημένη αποθήκευση δεδομένων Ethereum Swarm. Χρησιμοποιώντας κατανεμημένη αποθήκευση, εξοικονομείτε από την αποθήκευση μεγάλων ποσοτήτων δεδομένων στο blockchain Ethereum.

Σε αυτό το σεμινάριο, θα δημιουργήσετε έναν τοπικό χώρο αποθήκευσης Swarm, θα γράψετε και θα διαβάσετε λειτουργίες σε αρχεία και καταλόγους αρχείων. Στη συνέχεια, θα μάθετε πώς να εργάζεστε με τη δημόσια πύλη Swarm, να γράφετε σενάρια για πρόσβαση στο Swarm από το Node.js, καθώς και να χρησιμοποιείτε τη λειτουργική μονάδα Perl Net::Ethereum::Swarm.

Στόχος μαθήματος 11 — εξοικειωθείτε με τα έξυπνα συμβόλαια Solidity χρησιμοποιώντας τη δημοφιλή γλώσσα προγραμματισμού Python και το πλαίσιο Web3.py. Θα εγκαταστήσετε το πλαίσιο, θα γράψετε σενάρια για τη μεταγλώττιση και τη δημοσίευση του έξυπνου συμβολαίου και θα καλέσετε τις λειτουργίες του. Σε αυτήν την περίπτωση, το Web3.py θα χρησιμοποιηθεί τόσο από μόνο του όσο και σε συνδυασμό με το ενσωματωμένο περιβάλλον ανάπτυξης Truffle.

Στο μάθημα 12 θα μάθετε να μεταφέρετε δεδομένα μεταξύ έξυπνων συμβολαίων και του πραγματικού κόσμου χρησιμοποιώντας χρησμούς. Αυτό θα σας είναι χρήσιμο για να λαμβάνετε δεδομένα από τοποθεσίες Web, συσκευές IoT, διάφορες συσκευές και αισθητήρες και να στέλνετε δεδομένα από έξυπνες συμβάσεις σε αυτές τις συσκευές. Στο πρακτικό μέρος του μαθήματος, θα δημιουργήσετε έναν χρησμό και ένα έξυπνο συμβόλαιο που λαμβάνει την τρέχουσα ισοτιμία μεταξύ USD και ρούβλια από τον ιστότοπο της Κεντρικής Τράπεζας της Ρωσικής Ομοσπονδίας.

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

Δεν υπάρχει σχεδόν κανένας προγραμματιστής λογισμικού σήμερα που να μην έχει ακούσει τίποτα για την τεχνολογία blockchain (Blockchain), τα κρυπτονομίσματα (Cryptocurrency ή Crypto Currency), το Bitcoin (Bitcoin), την αρχική προσφορά νομισμάτων (ICO, Initial coin offering), τα έξυπνα συμβόλαια (Smart Contract), καθώς και άλλες έννοιες και όρους που σχετίζονται με το blockchain.

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

Πρέπει να πούμε ότι υπάρχουν πολλές εικασίες γύρω από τα κρυπτονομίσματα και τα blockchain. Θα αφήσουμε κατά μέρος τις συζητήσεις σχετικά με τις αλλαγές στις τιμές των κρυπτονομισμάτων, τη δημιουργία πυραμίδων, τις περιπλοκές της νομοθεσίας για τα κρυπτονομίσματα κ.λπ. Στο εκπαιδευτικό μας μάθημα θα επικεντρωθούμε κυρίως στις τεχνικές πτυχές της εφαρμογής έξυπνων συμβολαίων του blockchain Ethereum (Ethereum, Ether) και στην ανάπτυξη των λεγόμενων αποκεντρωμένων εφαρμογών (Distributed Application, DApp).

Τι είναι το blockchain

Το Blockchain (Block Chain) είναι μια αλυσίδα μπλοκ δεδομένων που συνδέονται μεταξύ τους με συγκεκριμένο τρόπο. Στην αρχή της αλυσίδας υπάρχει το πρώτο μπλοκ, το οποίο ονομάζεται πρωτεύον μπλοκ (μπλοκ γένεσης) ή μπλοκ γένεσης. Ακολουθεί το δεύτερο, μετά το τρίτο και ούτω καθεξής.

Όλα αυτά τα μπλοκ δεδομένων αντιγράφονται αυτόματα σε πολλούς κόμβους του δικτύου blockchain. Αυτό εξασφαλίζει αποκεντρωμένη αποθήκευση δεδομένων blockchain.
Μπορείτε να σκεφτείτε ένα σύστημα blockchain ως έναν μεγάλο αριθμό κόμβων (φυσικών ή εικονικών διακομιστών) που συνδέονται σε ένα δίκτυο και αναπαράγουν όλες τις αλλαγές στην αλυσίδα των μπλοκ δεδομένων. Αυτό είναι σαν ένας γιγαντιαίος υπολογιστής πολλαπλών διακομιστών και οι κόμβοι ενός τέτοιου υπολογιστή (διακομιστές) μπορούν να διασκορπιστούν σε όλο τον κόσμο. Και μπορείτε επίσης να προσθέσετε τον υπολογιστή σας στο δίκτυο blockchain.

Κατανεμημένη βάση δεδομένων

Ένα blockchain μπορεί να θεωρηθεί ως μια κατανεμημένη βάση δεδομένων που αναπαράγεται σε όλους τους κόμβους του δικτύου blockchain. Θεωρητικά, το blockchain θα είναι λειτουργικό όσο τουλάχιστον ένας κόμβος λειτουργεί, αποθηκεύοντας όλα τα μπλοκ του blockchain.

Μητρώο Κατανεμημένων Δεδομένων

Το Blockchain μπορεί να θεωρηθεί ως ένα κατανεμημένο βιβλίο δεδομένων και λειτουργιών (συναλλαγών). Ένα άλλο όνομα για ένα τέτοιο μητρώο είναι ένα καθολικό.

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

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

Συναλλαγές

Το Blockchain αποθηκεύει πληροφορίες σχετικά με λειτουργίες (συναλλαγές) σε μπλοκ. Ταυτόχρονα, οι παλιές, ήδη ολοκληρωμένες συναλλαγές δεν μπορούν να επαναφερθούν ή να αλλάξουν. Οι νέες συναλλαγές αποθηκεύονται σε νέα, προστιθέμενα μπλοκ.

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

Το blockchain Ethereum περιέχει τις λεγόμενες καταστάσεις συστήματος. Καθώς εκτελούνται οι συναλλαγές, η κατάσταση αλλάζει από την αρχική κατάσταση στην τρέχουσα κατάσταση. Οι συναλλαγές καταγράφονται σε μπλοκ.

Δημόσια και ιδιωτικά blockchains

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

Πρακτικές εφαρμογές blockchain

Σε τι μπορεί να είναι χρήσιμο το blockchain;

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

Φυσικά, γνωρίζετε ότι τα συστήματα κρυπτονομισμάτων δημιουργούνται με βάση blockchains, σχεδιασμένα να αντικαθιστούν το συνηθισμένο χαρτονόμισμα. Το χαρτονόμισμα λέγεται και fiat (από το Fiat Money).
Το Blockchain διασφαλίζει την αποθήκευση και την αμετάβλητη των συναλλαγών που καταγράφονται σε μπλοκ, γι' αυτό μπορεί να χρησιμοποιηθεί για τη δημιουργία συστημάτων κρυπτονομισμάτων. Περιέχει ολόκληρο το ιστορικό της μεταφοράς κεφαλαίων κρυπτογράφησης μεταξύ διαφορετικών χρηστών (λογαριασμών) και μπορεί να παρακολουθηθεί οποιαδήποτε λειτουργία.

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

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

Τα έξυπνα συμβόλαια blockchain Ethereum και Ethereum γραμμένα στη γλώσσα προγραμματισμού Solidity μπορούν να χρησιμοποιηθούν, για παράδειγμα, στους ακόλουθους τομείς:

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

Προβλήματα με το blockchain

Αλλά, φυσικά, δεν είναι όλα τόσο απλά όσο φαίνονται!

Υπάρχουν προβλήματα με την επαλήθευση δεδομένων πριν την προσθήκη τους στο blockchain (για παράδειγμα, είναι ψεύτικα;), προβλήματα με την ασφάλεια του λογισμικού συστήματος και εφαρμογών που χρησιμοποιούνται για την εργασία με το blockchain, προβλήματα με τη δυνατότητα χρήσης μεθόδων κοινωνικής μηχανικής για κλοπή πρόσβασης σε πορτοφόλια κρυπτονομισμάτων κλπ. .Π.

Και πάλι, εάν δεν μιλάμε για ένα δημόσιο blockchain, οι κόμβοι του οποίου είναι διάσπαρτοι σε όλο τον κόσμο, αλλά για ένα ιδιωτικό blockchain που ανήκει σε ένα άτομο ή οργανισμό, τότε το επίπεδο εμπιστοσύνης εδώ δεν θα είναι υψηλότερο από το επίπεδο εμπιστοσύνης σε αυτό το άτομο ή σε αυτόν τον οργανισμό.

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

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

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

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

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

Πώς σχηματίζεται μια αλυσίδα blockchain

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

Στο Σχ. 1.1 δείξαμε την απλούστερη έκδοση μιας ακολουθίας μπλοκ, όπου το πρώτο μπλοκ αναφέρεται στο επόμενο.

Το βιβλίο «Creating Solidity smart contracts for the Ethereum blockchain. Πρακτικός οδηγός"
Ρύζι. 1.1. Απλή ακολουθία μπλοκ

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

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

Το βιβλίο «Creating Solidity smart contracts for the Ethereum blockchain. Πρακτικός οδηγός"
Ρύζι. 1.2. Προσθήκη προστασίας για αυτά τα μπλοκ με άθροισμα ελέγχου

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

Για να υπολογίσετε το άθροισμα ελέγχου, μπορείτε να χρησιμοποιήσετε μία από τις συναρτήσεις κατακερματισμού όπως MD-5, SHA-1, SHA-256 κ.λπ. Οι συναρτήσεις κατακερματισμού υπολογίζουν μια τιμή (για παράδειγμα, μια συμβολοσειρά κειμένου σταθερού μήκους) εκτελώντας μη αναστρέψιμες λειτουργίες σε ένα μπλοκ δεδομένων. Οι λειτουργίες εξαρτώνται από τον τύπο της συνάρτησης κατακερματισμού.

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

Θα είναι επαρκής αυτή η προστασία; Δυστυχώς όχι.

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

Για να προστατεύσετε ολόκληρη την αλυσίδα ως σύνολο, μπορείτε επίσης να αποθηκεύσετε σε κάθε μπλοκ, μαζί με τα δεδομένα, έναν κατακερματισμό των δεδομένων από το προηγούμενο μπλοκ (Εικ. 1.3).

Το βιβλίο «Creating Solidity smart contracts for the Ethereum blockchain. Πρακτικός οδηγός"
Ρύζι. 1.3. Προσθέστε τον κατακερματισμό του προηγούμενου μπλοκ στο μπλοκ δεδομένων

Σε αυτό το σχήμα, για να αλλάξετε ένα μπλοκ, πρέπει να υπολογίσετε ξανά τις συναρτήσεις κατακερματισμού όλων των επόμενων μπλοκ. Φαίνεται, ποιο είναι το πρόβλημα;

Στις πραγματικές αλυσίδες μπλοκ, δημιουργούνται επιπλέον τεχνητές δυσκολίες για την προσθήκη νέων μπλοκ - χρησιμοποιούνται αλγόριθμοι που απαιτούν πολλούς υπολογιστικούς πόρους. Λαμβάνοντας υπόψη ότι για να κάνετε αλλαγές σε ένα μπλοκ, πρέπει να υπολογίσετε εκ νέου όχι μόνο αυτό το ένα μπλοκ, αλλά όλα τα επόμενα, αυτό θα είναι εξαιρετικά δύσκολο να γίνει.

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

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

Blockchain Ethereum

Το blockchain Ethereum είναι μια πλατφόρμα στην οποία μπορούν να δημιουργηθούν κατανεμημένα DApps. Σε αντίθεση με άλλες πλατφόρμες, το Ethereum επιτρέπει τη χρήση των λεγόμενων έξυπνων συμβολαίων (smart contracts), γραμμένων στη γλώσσα προγραμματισμού Solidity.

Αυτή η πλατφόρμα δημιουργήθηκε το 2013 από τον Vitalik Buterin, ιδρυτή του περιοδικού Bitcoin, και ξεκίνησε το 2015. Όλα όσα θα μελετήσουμε ή θα κάνουμε στο εκπαιδευτικό μας μάθημα σχετίζονται συγκεκριμένα με τα έξυπνα συμβόλαια blockchain Ethereum και Solidity.

Εξόρυξη ή πώς δημιουργούνται τα μπλοκ

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

Τα άτομα και οι οργανισμοί που εμπλέκονται στην προσθήκη μπλοκ ονομάζονται miners.
Το λογισμικό που εκτελείται στους κόμβους εξόρυξης προσπαθεί να βρει μια παράμετρο κατακερματισμού που ονομάζεται Nonce για το τελευταίο μπλοκ για να πάρει μια συγκεκριμένη τιμή κατακερματισμού που καθορίζεται από το δίκτυο. Ο αλγόριθμος κατακερματισμού Ethash που χρησιμοποιείται στο Ethereum σάς επιτρέπει να λαμβάνετε την τιμή Nonce μόνο μέσω διαδοχικής αναζήτησης.

Εάν ο κόμβος miner βρει τη σωστή τιμή Nonce, τότε αυτή είναι η λεγόμενη απόδειξη εργασίας (PoW, Proof-of-work). Σε αυτήν την περίπτωση, εάν προστεθεί ένα μπλοκ στο δίκτυο Ethereum, ο εξορύκτης λαμβάνει μια ορισμένη ανταμοιβή στο νόμισμα δικτύου - Ether. Τη στιγμή της γραφής, η ανταμοιβή είναι 5 Αιθέρες, αλλά αυτό θα μειωθεί με την πάροδο του χρόνου.

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

Περίληψη μαθήματος

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

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

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

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

Μάθημα 2. Προετοιμασία περιβάλλοντος εργασίας σε Ubuntu και Debian OSΕπιλογή λειτουργικού συστήματος
Εγκατάσταση των απαραίτητων βοηθητικών προγραμμάτων
Εγκατάσταση του Geth and Swarm στο Ubuntu
Εγκατάσταση του Geth and Swarm στο Debian
Προκαταρκτική προετοιμασία
Λήψη της διανομής Go
Ρύθμιση μεταβλητών περιβάλλοντος
Έλεγχος της έκδοσης Go
Εγκατάσταση Geth and Swarm
Δημιουργία ιδιωτικού blockchain
Προετοιμασία του αρχείου genesis.json
Δημιουργήστε έναν κατάλογο για την εργασία
Δημιουργία λογαριασμού
Έναρξη της προετοιμασίας κόμβου
Επιλογές εκκίνησης κόμβου
Συνδεθείτε στον κόμβο μας
Διαχείριση εξόρυξης και έλεγχος ισορροπίας
Τερματισμός της κονσόλας Geth
Περίληψη μαθήματος

Μάθημα 3. Προετοιμασία του περιβάλλοντος εργασίας στο Raspberry Pi 3Προετοιμασία του Raspberry Pi 3 για εργασία
Εγκατάσταση Rasberian
Εγκατάσταση ενημερώσεων
Ενεργοποίηση πρόσβασης SSH
Ρύθμιση στατικής διεύθυνσης IP
Εγκατάσταση των απαραίτητων βοηθητικών προγραμμάτων
Εγκατάσταση του Go
Λήψη της διανομής Go
Ρύθμιση μεταβλητών περιβάλλοντος
Έλεγχος της έκδοσης Go
Εγκατάσταση Geth and Swarm
Δημιουργία ιδιωτικού blockchain
Έλεγχος του λογαριασμού και του υπολοίπου σας
Περίληψη μαθήματος

Μάθημα 4. Λογαριασμοί και μεταφορά κεφαλαίων μεταξύ λογαριασμώνΠροβολή και προσθήκη λογαριασμών
Προβολή λίστας λογαριασμών
Προσθήκη λογαριασμού
επιλογές εντολών λογαριασμού geth
Κωδικοί πρόσβασης λογαριασμού
Κρυπτονόμισμα στο Ethereum
Νομισματικές μονάδες Ethereum
Καθορίζουμε το τρέχον υπόλοιπο των λογαριασμών μας
Μεταφορά χρημάτων από έναν λογαριασμό σε άλλο
eth.send Μέθοδος συναλλαγής
Προβολή κατάστασης συναλλαγής
Απόδειξη συναλλαγής
Περίληψη μαθήματος

Μάθημα 5. Δημοσίευση του πρώτου σας συμβολαίουΈξυπνα συμβόλαια στο Ethereum
Έξυπνη εκτέλεση συμβολαίου
Εικονική μηχανή Ethereum
Ενσωματωμένο περιβάλλον ανάπτυξης Remix Solidity IDE
Εκτελούμενη συλλογή
Κλήση Λειτουργιών Συμβάσεων
Δημοσίευση σύμβασης σε ιδιωτικό δίκτυο
Λήψη του ορισμού ABI και του δυαδικού κωδικού της σύμβασης
Δημοσίευση της σύμβασης
Έλεγχος της κατάστασης συναλλαγής δημοσίευσης της σύμβασης
Κλήση Λειτουργιών Συμβάσεων
Batch compiler solc
Εγκατάσταση solc στο Ubuntu
Εγκατάσταση solc στο Debian
Σύνταξη του συμβολαίου HelloSol
Δημοσίευση της σύμβασης
Εγκατάσταση solc στο Rasberian
Περίληψη μαθήματος

Μάθημα 6. Έξυπνα συμβόλαια και Node.jsΕγκατάσταση του Node.js
Εγκατάσταση στο Ubuntu
Εγκατάσταση στο Debian
Εγκατάσταση και εκτέλεση του Ganache-cli
Εγκατάσταση Web3
Εγκατάσταση solc
Εγκατάσταση του Node.js στο Rasberian
Σενάριο για να λάβετε μια λίστα λογαριασμών στην κονσόλα
Σενάριο για τη δημοσίευση ενός έξυπνου συμβολαίου
Εκκίνηση και λήψη παραμέτρων
Λήψη επιλογών εκκίνησης
Σύνταξη Συμβολαίου
Ξεμπλοκάρισμα του λογαριασμού σας
Φόρτωση δυαδικού κώδικα ABI και σύμβασης
Εκτίμηση της απαιτούμενης ποσότητας αερίου
Δημιουργήστε ένα αντικείμενο και ξεκινήστε τη δημοσίευση ενός συμβολαίου
Εκτέλεση του σεναρίου έκδοσης συμβολαίου
Κλήση λειτουργιών έξυπνων συμβολαίων
Είναι δυνατή η ενημέρωση ενός δημοσιευμένου έξυπνου συμβολαίου;
Εργασία με την έκδοση Web3 1.0.x
Λήψη λίστας λογαριασμών
Δημοσίευση της σύμβασης
Κλήση Λειτουργιών Συμβάσεων
Μεταφορά χρημάτων από έναν λογαριασμό σε άλλο
Μεταφορά χρημάτων σε λογαριασμό συμβολαίου
Ενημέρωση του έξυπνου συμβολαίου HelloSol
Δημιουργήστε ένα σενάριο για να δείτε το υπόλοιπο του λογαριασμού σας
Προσθέστε μια κλήση στη συνάρτηση getBalance στο σενάριο call_contract_get_promise.js
Γεμίζουμε τον λογαριασμό έξυπνου συμβολαίου
Περίληψη μαθήματος

Μάθημα 7. Εισαγωγή στην ΤρούφαΕγκατάσταση τρούφας
Δημιουργήστε ένα έργο HelloSol
Δημιουργία καταλόγου και αρχείων έργου
Κατάλογος συμβάσεων
Μεταναστεύσεις καταλόγου
Δοκιμή καταλόγου
αρχείο truffle-config.js
Σύνταξη του συμβολαίου HelloSol
Ξεκινήστε να δημοσιεύετε μια σύμβαση
Κλήση λειτουργιών συμβολαίου HelloSol σε μια προτροπή τρούφας
Κλήση συναρτήσεων συμβολαίου HelloSol από ένα σενάριο JavaScript που εκτελεί το Node.js
Εγκατάσταση της μονάδας σύμβασης τρούφας
Κλήση των συναρτήσεων συμβολαίου getValue και getString
Κλήση συναρτήσεων συμβολαίου setValue και setString
Τροποποίηση και αναδημοσίευση της σύμβασης
Εργασία με την έκδοση Web3 1.0.x
Πραγματοποίηση αλλαγών στο έξυπνο συμβόλαιο HelloSol
Σενάρια για την κλήση μεθόδων συμβολαίου
Δοκιμή σε τρούφα
Δοκιμή στερεότητας
Δοκιμή JavaScript
Περίληψη μαθήματος

Μάθημα 8. Τύποι δεδομένων στερεότηταςΣυμβόλαιο εκμάθησης τύπων δεδομένων
Τύποι δεδομένων Boolean
Ανυπόγραφοι ακέραιοι αριθμοί και προσημειωμένοι ακέραιοι αριθμοί
Σταθεροί αριθμοί σημείων
διεύθυνση
Μεταβλητές μιγαδικών τύπων
Πίνακες σταθερού μεγέθους
Δυναμικοί πίνακες
ΜΕΤΑΦΟΡΑ
δομές
Χαρτογράφηση λεξικών
Περίληψη μαθήματος

Μάθημα 9. Μετάβαση των συμβολαίων στο ιδιωτικό δίκτυο και στο δίκτυο RinkebyΔημοσίευση συμβολαίου από την Truffle στο ιδιωτικό δίκτυο Geth
Προετοιμασία ενός ιδιωτικού κόμβου δικτύου
Προετοιμασία σύμβασης εργασίας
Σύνταξη και μετεγκατάσταση συμβολαίου στο δίκτυο Truffle
Έναρξη μετεγκατάστασης τοπικού δικτύου
Λήψη αντικειμένων τρούφας
Δημοσίευση συμβολαίου από την Truffle στο δίκτυο δοκιμής Rinkeby
Προετοιμασία ενός κόμβου Geth για εργασία με τον Rinkeby
Συγχρονισμός κόμβων
Προσθήκη λογαριασμών
Συμπλήρωση του λογαριασμού σας Rinkeby με Ether
Έναρξη μετεγκατάστασης συμβολαίων στο δίκτυο Rinkeby
Προβολή πληροφοριών συμβολαίου στο δίκτυο Rinkeby
Truffle Console για Rinkeby Network
Ευκολότερος τρόπος κλήσης συναρτήσεων συμβολαίου
Κλήση μεθόδων συμβολαίου χρησιμοποιώντας το Node.js
Μεταφέρετε χρήματα μεταξύ λογαριασμών στην κονσόλα Truffle για το Rinkby
Περίληψη μαθήματος

Μάθημα 10. Αποκεντρωμένη αποθήκευση δεδομένων Ethereum SwarmΠώς λειτουργεί το Ethereum Swarm;
Εγκατάσταση και εκκίνηση του Swarm
Λειτουργίες με αρχεία και καταλόγους
Μεταφόρτωση αρχείου στο Ethereum Swarm
Διαβάζοντας ένα αρχείο από το Ethereum Swarm
Προβολή του μανιφέστου ενός μεταφορτωμένου αρχείου
Φόρτωση καταλόγων με υποκαταλόγους
Ανάγνωση αρχείου από ληφθέν κατάλογο
Χρήση δημόσιας πύλης Swarm
Πρόσβαση στο Swarm από σενάρια Node.js
Μονάδα Perl Net::Ethereum::Swarm
Εγκατάσταση της μονάδας Net::Ethereum::Swarm
Γράψιμο και ανάγνωση δεδομένων
Περίληψη μαθήματος

Μάθημα 11. Web3.py πλαίσιο για εργασία με Ethereum στην PythonΕγκατάσταση του Web3.py
Ενημέρωση και εγκατάσταση των απαραίτητων πακέτων
Εγκατάσταση της μονάδας easysolc
Δημοσίευση σύμβασης χρησιμοποιώντας το Web3.py
Σύνταξη Συμβολαίου
Σύνδεση σε πάροχο
Εκτέλεση δημοσίευσης της σύμβασης
Αποθήκευση της διεύθυνσης της σύμβασης και του abi σε ένα αρχείο
Εκτέλεση του σεναρίου έκδοσης συμβολαίου
Μέθοδοι σύμβασης κλήσης
Ανάγνωση της διεύθυνσης και του abi μιας σύμβασης από ένα αρχείο JSON
Σύνδεση σε πάροχο
Δημιουργία αντικειμένου σύμβασης
Μέθοδοι σύμβασης κλήσης
Τρούφα και Web3.py
Περίληψη μαθήματος

Μάθημα 12. ΜαντείαΜπορεί ένα έξυπνο συμβόλαιο να εμπιστευτεί δεδομένα από τον έξω κόσμο;
Oracles ως μεσάζοντες πληροφοριών blockchain
Πηγή δεδομένων
Κώδικας για την αναπαράσταση δεδομένων από την πηγή
Oracle για την καταγραφή της συναλλαγματικής ισοτιμίας στο blockchain
Σύμβαση USDRateOracle
Ενημέρωση της συναλλαγματικής ισοτιμίας σε ένα έξυπνο συμβόλαιο
Χρήση πάροχου υποδοχών Ιστού
Αναμονή για το συμβάν RateUpdate
Χειρισμός του συμβάντος RateUpdate
Έναρξη ενημέρωσης δεδομένων σε ένα έξυπνο συμβόλαιο
Περίληψη μαθήματος

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο