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

Contents

Στερεότητα – Εισαγωγή

Για όσους θέλουν να μάθουν πώς να κάνουν DAPPs (Αποκεντρωμένες Εφαρμογές) ή να μπει στο παιχνίδι ICO, η εκμάθηση της Σολεότητας είναι απόλυτη ανάγκη. Η Solidity αναπτύχθηκε από τους Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai και αρκετούς πρώην βασικούς συνεργάτες της Ethereum για να επιτρέψουν τη σύνταξη έξυπνων συμβάσεων σε πλατφόρμες blockchain όπως το Ethereum.

Το Solidity προορίζεται να είναι μια σκόπιμα αδύναμη, χαλαρά δακτυλογραφημένη γλώσσα με σύνταξη πολύ παρόμοια με τη JavaScript. Μπορείτε να δείτε τα Έγγραφα Στερεότητας ακριβώς εδώ.

Χρησιμοποιώντας το Solidity, θα κωδικοποιήσετε έξυπνα συμβόλαια που πρόκειται να εκτελεστούν στο Ethereum Virtual Machine aka EVM. Οι προγραμματιστές της Ethereum αναφέρουν μια καθορισμένη ποσότητα φυσικού αερίου που ανατίθεται στα συμβόλαιά τους. Κάθε γραμμή της σύμβασης απαιτεί κάποια ποσότητα αερίου για την εκτέλεση. Το όριο φυσικού αερίου θα πρέπει να είναι αρκετό για την πλήρη εκτέλεση της σύμβασης.

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

Remix – IDE

Θα εκτελέσουμε τους κωδικούς μας στο Remix. Κάντε κλικ ΕΔΩ για να μεταβείτε στον ιστότοπο Remix. Το Remix είναι ένα περιβάλλον στο πρόγραμμα περιήγησης όπου μπορείτε να εκτελέσετε τις έξυπνες συμβάσεις σας σε ένα blockchain δοκιμής. Αυτό δημιουργήθηκε από το ίδρυμα Ethereum έτσι ώστε να μπορείτε να αρχίσετε να αναπτύσσετε συμβόλαια, όπως και όταν θέλετε.

Έτσι, τη στιγμή που θα πάτε σε αυτόν τον ιστότοπο, θα δείτε αυτήν την οθόνη:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Τώρα, αυτό το περιβάλλον χρήστη μπορεί να είναι εξαιρετικά εκφοβιστικό όταν το κοιτάζετε για πρώτη φορά. Ωστόσο, ας το αναλύσουμε ανά ενότητα. Θα πάμε από τα αριστερά.

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Στην αριστερή πλευρά του προγράμματος περιήγησης υπάρχουν όλα τα συμβόλαια στα οποία εργάζεστε.

Στη συνέχεια έχετε αυτό:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Αυτός είναι ο συντάκτης όπου πρόκειται να κωδικοποιήσετε. Από προεπιλογή, το UI Remix έχει το έξυπνο συμβόλαιο ψηφοφορίας το οποίο μπορείτε να αγνοήσετε προς το παρόν. Δεν χρειάζεται να μπεις σε αυτό.

Μετά από αυτό έχετε:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Αυτό είναι το αρχείο καταγραφής προγραμμάτων.

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

Στη δεξιά πλευρά έχετε:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Στη δεξιά πλευρά, έχετε την ενότητα που θα κάνει το μεγαλύτερο μέρος της εργασίας. Από προεπιλογή, θα βρίσκεται στο “Compile Tab” αλλά είναι στο “Run Tab” όπου θα κάνετε το μεγαλύτερο μέρος της εργασίας.

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

περιβάλλον: Υπάρχουν τρία περιβάλλοντα όπου μπορείτε να εκτελέσετε τις έξυπνες συμβάσεις σας που είναι: JavaScript VM, Injected Web3 και Web3 Provider.

λογαριασμός: Υπάρχουν πέντε διευθύνσεις λογαριασμού που μπορείτε να χρησιμοποιήσετε ως κάτοχος αυτής της σύμβασης. Κάθε διεύθυνση έχει 100 μάρκες δοκιμαστικού αιθέρα.

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Όριο αερίου: Το συνολικό όριο φυσικού αερίου που έχει οριστεί για την εκτέλεση αυτής της έξυπνης σύμβασης.

αξία: Πόσα διακριτικά Ether θέλετε να παρέχετε για τις συναλλαγές σας.

Αυτό πρέπει να είναι αρκετό για τώρα. Ας ξεκινήσουμε με μερικά απλά, βασικά προγράμματα.

Τύποι δεδομένων στη Στερεότητα

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

Είναι τα δεδομένα ακέραιος ή συμβολοσειρά ή πίνακας?

Ο τρόπος με τον οποίο ο μεταγλωττιστής λαμβάνει αυτές τις αποφάσεις είναι κοιτάζοντας τον τύπο δεδομένων.

Λοιπόν, πρώτα, ας δούμε το ακέραιος αριθμός τύποι δεδομένων που θα έχετε στη σταθερότητα:

  • Κανονική ακέραια δήλωση που ονομάζεται “int” που κυμαίνεται από -128 έως 127
  • Μη υπογεγραμμένος ακέραιος “uint” που ξεκινά από 0-255 και δεν αποθηκεύει αρνητικές τιμές

Στη συνέχεια, έχουμε boolean τύποι δεδομένων που αποθηκεύουν μόνο “true” ή “false”. Για να δηλώσετε τιμές boolean το κάνετε αυτό: bool a;

Μετά από αυτό, έχετε Χορδές και Bytes.

Μπορείτε να χρησιμοποιήσετε συμβολοσειρά με σταθερότητα ως εξής: όνομα συμβολοσειράς. Οι συμβολοσειρές αποθηκεύονται ως μια σειρά τιμών σε σταθερότητα.

Το Bytes είναι ένας πίνακας bytes που ξεκινά από 1-32 χαρακτήρες. Λοιπόν, ποια είναι η διαφορά μεταξύ συμβολοσειρών και bytes?

Η τεκμηρίωση στερεότητας λέει:

«Κατά κανόνα, χρησιμοποιήστε byte για δεδομένα ακατέργαστου μήκους byte και συμβολοσειρά για δεδομένα συμβολοσειράς αυθαίρετου μήκους (UTF-8). Εάν μπορείτε να περιορίσετε το μήκος σε έναν ορισμένο αριθμό byte, χρησιμοποιήστε πάντα ένα από τα bytes1 έως bytes32 επειδή είναι πολύ φθηνότερα.

Στη συνέχεια, έχουμε κάτι δροσερό που ονομάζεται “απαρίθμηση“. Τα αθροίσματα είναι ένας τρόπος για να δημιουργήσετε έναν τύπο που καθορίζεται από το χρήστη στο Solidity. Έτσι τους δηλώνετε:

enum Ενέργεια {ΚΑΤΑΡΓΗΣΗ, ΕΝΗΜΕΡΩΣΗ}

 Λοιπόν, πώς τα χρησιμοποιείτε στο πρόγραμμα?

Ενέργεια myAction = Action.UPDATE;

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

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

Βασικά προγράμματα

# 1 Γεια σου Κόσμος

σταθερότητα πραγμάτων ^ 0,4,19;

//τμήμα 1

συμβόλαιο myfirstcontract {

χορδές δημόσιο χαιρετισμό?

διεύθυνση δημόσιου ιδιοκτήτη ·

εκδήλωση GreetingChanged (string oldGreeting, string newGreeting);

//τομέας 2

συνάρτηση myfirstcontract (string _greeting) {

χαιρετισμός = _ χαιρετισμός;

ιδιοκτήτης = msg.sender;

}

// ενότητα 3

λειτουργία setGreeting (string _greeting) {

απαιτείται (ιδιοκτήτης == msg.sender);

GreetingChanged (χαιρετισμός, _ χαιρετισμός);

χαιρετισμός = _ χαιρετισμός;

}

}

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

Τμήμα 1

// ενότητα 1β>

 

<σι>σταθερότητα πραγμάτων ^ 0,4,19 · β>

&nbsp;

<σι>σύμβαση myfirstcontract {β>

<σι>    σι>

<σι>    χορδές δημόσιος χαιρετισμός, β>

<σι>    διεύθυνση του δημόσιου ιδιοκτήτη, β>

<σι>    σι>

<σι>    εκδήλωση GreetingChanged (string oldGreeting, string newGreeting) · β>

Το “pragma solidity ^ 0.4.19” δείχνει ότι χρησιμοποιούμε την έκδοση 0.4.19 της σταθερότητας. Το “^” διασφαλίζει επίσης ότι το πρόγραμμά μας θα εκτελεστεί και σε υψηλότερες εκδόσεις.

Η «σύμβαση myfirstcontract» δηλώνει το συμβόλαιό μας που ονομάσαμε «myfirstcontract».

Μετά από αυτό δηλώνουμε μια συμβολοσειρά που ονομάζεται «χαιρετισμός» την οποία θα χρησιμοποιήσουμε για να αποθηκεύσουμε το μήνυμά μας. Αυτή η συμβολοσειρά είναι μια «δημόσια» συμβολοσειρά. Δηλώνουμε επίσης μια δημόσια μεταβλητή που ονομάζεται «κάτοχος» διεύθυνσης τύπου για να αποθηκεύσουμε τη διεύθυνση του κατόχου της σύμβασης.

Το πλεονέκτημα της χρήσης μιας “δημόσιας” μεταβλητής είναι ότι παίρνει αυτόματα μια λειτουργία “getter” που τους έχει ανατεθεί. Η συνάρτηση getter βοηθά στην πρόσβαση στην τιμή μιας μεταβλητής, ενώ η συνάρτηση “setter” σάς επιτρέπει να τροποποιήσετε την τιμή.

Μετά από αυτό έχουμε μια εκδήλωση που ονομάζεται “GreetingChanged”. Αυτό το συμβάν διασφαλίζει ότι κάθε φορά που υπάρχει οποιαδήποτε αλλαγή στον χαιρετισμό, η αλλαγή μεταδίδεται.

Τομέας 2

// ενότητα 1β>

&nbsp;

<σι>σταθερότητα πραγμάτων ^ 0,4,19 · β>

&nbsp;

<σι>σύμβαση myfirstcontract {β>

<σι>    σι>

<σι>    χορδές δημόσιος χαιρετισμός, β>

<σι>    διεύθυνση του δημόσιου ιδιοκτήτη, β>

<σι>    σι>

<σι>    εκδήλωση GreetingChanged (string oldGreeting, string newGreeting) · β>

Σε αυτήν την ενότητα πρόκειται να δηλώσουμε κατασκευαστή. Ο κατασκευαστής, όπως ίσως έχετε παρατηρήσει, μοιράζεται το ίδιο όνομα με το συμβόλαιο. Η δουλειά του κατασκευαστή είναι να προετοιμάσει τις μεταβλητές κατά τη διάρκεια του χρόνου εκτέλεσης. Ο κατασκευαστής παίρνει το “_greeting” ως παράμετρο και το χρησιμοποιεί για να προετοιμάσει το “χαιρετισμό”. Ταυτόχρονα, η διεύθυνση του ατόμου που στέλνει την παράμετρο αποθηκεύεται στον κάτοχο. Εφόσον ο κατασκευαστής εκτελεί μόνο στην αρχή του χρόνου εκτέλεσης, το άτομο του οποίου η διεύθυνση αποθηκεύεται είναι ο δημιουργός της σύμβασης.

Τμήμα 3

// ενότητα 3

λειτουργία setGreeting (string _greeting) {

απαιτείται (ιδιοκτήτης == msg.sender);

GreetingChanged (χαιρετισμός, _ χαιρετισμός);

χαιρετισμός = _ χαιρετισμός;

}

Στην τρίτη ενότητα έχουμε τη συνάρτηση setter, η οποία θα μας βοηθήσει να τροποποιήσουμε τις τιμές που διατηρούνται στις μεταβλητές. Ως παράμετρος, αυτή η συνάρτηση λαμβάνει τον νέο χαιρετισμό, σε περίπτωση που απαιτείται τροποποίηση.

Λοιπόν, τι συμβαίνει μέσα στη λειτουργία?

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

Έτσι, εάν πληρούται αυτή η προϋπόθεση, ενεργοποιείται το συμβάν GreetingChanged και η τιμή του “χαιρετισμού” ενημερώνεται με το “_greeting”.

Εντάξει, τώρα ας συντάξουμε το πρόγραμμα. Αποθηκεύστε το πρόγραμμά σας και επιλέξτε “myfirstcontract” εδώ:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Μετά από αυτό, κάντε κλικ στο “Ανάπτυξη” για να εκτελέσετε τη σύμβαση. Τη στιγμή που το κάνετε αυτό, παρατηρήστε τι συμβαίνει στο αρχείο καταγραφής.

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Βλέπετε αυτό το μήνυμα?

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

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Κατάσταση: Δείχνει ότι η συναλλαγή πέτυχε

Hash συναλλαγής: Το μοναδικό κατακερματισμό της συναλλαγής. Εμφανίζει το αναγνωριστικό συναλλαγής.

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

Από: Η διεύθυνση του κατόχου της σύμβασης που έχουμε επιλέξει

Προς την: Δείχνει ότι ο κατασκευαστής έχει δημιουργήσει τις μεταβλητές.

Αέριο: Το ανώτερο όριο του αερίου που έχουμε ορίσει εκ των προτέρων

Κόστος μεταφοράς: Πόσο αέριο κοστίζει για την αποστολή της σύμβασης στο blockchain.

Κόστος εκτέλεσης: Πόσο αέριο κοστίζει για την εκτέλεση της σύμβασης.

Χασίσι: Το κατακερματισμό της συναλλαγής .

Εισαγωγή: Αυτός είναι ο μεταγλωττισμένος κωδικός σταθερότητας που διαβάζεται στην πραγματικότητα από το Ethereum Virtual Machine.

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

Κούτσουρα: Εμφανίζει τυχόν συμβάντα που μπορεί να έχει δημιουργήσει η σύμβαση.

αξία: Δεδομένου ότι η σύμβαση δεν μας έδωσε μάρκες Ether, δείχνει 0 wei.

Εντάξει, τώρα θέλουμε να εστιάσετε στη δεξιά πλευρά της οθόνης σας. Το βλέπετε αυτό?

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Δίπλα στο πεδίο “Λογαριασμός” θα δείτε ότι η διεύθυνση έχει λιγότερα από 100 διακριτικά Ether. Αυτό δείχνει ότι χρησιμοποιήθηκε τόσο πολύ ο Ether για την ανάπτυξη του συμβολαίου.

Κάντε κλικ στην καρτέλα στην ενότητα Αναπτυγμένες συμβάσεις και θα αποκαλυφθεί αυτό:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Σε αυτό:

  • “Χαιρετισμός” και “κάτοχος” είναι συναρτήσεις λήψης που έχουν δημιουργηθεί από προεπιλογή λόγω των μεταβλητών που δηλώθηκαν ως “δημόσιες”.
  • Το “setGreeting” είναι μια λειτουργία ρύθμισης όπου μπορείτε να εισάγετε τα δεδομένα.

Επειδή το “setGreeting” παίρνει μια παράμετρο συμβολοσειράς, πρέπει να εισαγάγετε τα δεδομένα σε διπλά εισαγωγικά. Αρκετά έτσι:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Μόλις εισαγάγετε τα δεδομένα, πατήστε το κουμπί “setGreeting”:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Υπάρχουν δύο πεδία στα οποία θέλουμε να εστιάσετε:

Αποκωδικοποιημένη είσοδος: Δείχνει τη συμβολοσειρά εισόδου που έχουμε δώσει.

Κούτσουρα: Δημιουργεί ένα συμβάν που δείχνει ότι η τιμή του “χαιρετισμού” έχει αλλάξει.

Εντάξει, τώρα κάντε κλικ στο κουμπί “χαιρετισμός” στη λειτουργία λήψης:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Σας δίνει αμέσως την τιμή της μεταβλητής χαιρετισμού.

Όταν ελέγχετε τα αρχεία καταγραφής, θα δείτε τα εξής:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Δείτε το πεδίο “αποκωδικοποιημένη έξοδος” και θα δείτε το “Hello World” εκεί.

Ομοίως, απλώς κάντε κλικ στο κουμπί “ιδιοκτήτης”:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Δείχνει την αξία της διεύθυνσης του κατόχου. Τώρα όταν ελέγχετε τα αρχεία καταγραφής:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Η αποκωδικοποιημένη έξοδος δείχνει τη διεύθυνση του κατόχου της σύμβασης.

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

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

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

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

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

απαιτείται (ιδιοκτήτης == msg.sender);

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

# 2 Όνομα και ηλικία

//τμήμα 1

σταθερότητα πραγμάτων ^ 0,4,19;

σύμβαση mysecondcontract {

ιδιωτικό όνομα συμβολοσειράς;

uint ιδιωτική ηλικία?

//τομέας 2

function setname (string newName) {

name = newName;

}

Η συνάρτηση getName () επιστρέφει (συμβολοσειρά) {

όνομα επιστροφής;

}

// ενότητα 3

συνάρτηση setAge (uint newAge) {

ηλικία = newAge;

}

Η συνάρτηση getAge () επιστρέφει (uint) {

ηλικία επιστροφής

}

}

Τμήμα 1

σταθερότητα πραγμάτων ^ 0,4,19;

σύμβαση mysecondcontract {

ιδιωτικό όνομα συμβολοσειράς;

uint ιδιωτική ηλικία?

Έχουμε δηλώσει ένα έξυπνο συμβόλαιο με το όνομα “mysecondcontract”. Αυτό έχει δύο ιδιωτικές μεταβλητές. Μια συμβολοσειρά που ονομάζεται “όνομα” και ένας μη υπογεγραμμένος ακέραιος (ένας μη αρνητικός ακέραιος αριθμός) που ονομάζεται “ηλικία”.

Τομέας 2

function setname (string newName) {

name = newName;

}

Η συνάρτηση getName () επιστρέφει (συμβολοσειρά) {

όνομα επιστροφής;

}

Σε αυτήν την ενότητα, θα έχουμε τη συνάρτηση setter και getter για τη μεταβλητή ονόματος. Το πρώτο μέρος είναι μια κανονική συνάρτηση ρυθμιστή που παίρνει μια παράμετρο για να αρχικοποιήσει τη μεταβλητή ονόματος.

Το δεύτερο μέρος είναι μια λειτουργία λήψης που βοηθά τον ιδιοκτήτη να αποκτήσει πρόσβαση στη μεταβλητή «όνομα».

Τμήμα 3

συνάρτηση setAge (uint newAge) {

ηλικία = newAge;

}

Η συνάρτηση getAge () επιστρέφει (uint) {

ηλικία επιστροφής

}

Αυτό το μέρος ορίζει μια λειτουργία ρύθμισης και λήψης για την ηλικία.

Ας εκτελέσουμε τη σύμβαση και ορίστε την ηλικία ως “28”. Το αρχείο καταγραφής φαίνεται τώρα ως εξής:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Όπως μπορείτε να δείτε, η ηλικία αντικατοπτρίζεται στην «αποκωδικοποιημένη είσοδο».

Τώρα, ας ορίσουμε το όνομα ως “Max”.

Τώρα, το αποκωδικοποιημένο πεδίο εισαγωγής εμφανίζει το όνομα “Max”.

Τώρα μπορούμε να ελέγξουμε τη λειτουργία λήψης της εποχής για να δούμε την έξοδο:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Το πεδίο εξόδου δείχνει την ηλικία.

Τώρα, για τη συνάρτηση λήψης του ονόματος:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Τώρα δείχνει την αποκωδικοποιημένη έξοδο, δηλαδή το όνομα.

Κληρονομικότητα και Στερεότητα

Το κληρονομικό είναι ένα από τα πιο ισχυρά εργαλεία στον προγραμματισμό. Σε σταθερότητα, σας βοηθά να αντλήσετε ένα έξυπνο συμβόλαιο από ένα παλαιότερο έξυπνο συμβόλαιο. Η μορφή μοιάζει με αυτήν:

σύμβαση Α {

——-

}

η σύμβαση Β είναι Α {

——

}

Η λέξη-κλειδί «είναι» υποδηλώνει ότι η σύμβαση Β κληρονομεί την αξία από τη σύμβαση Α. Τώρα, η σύμβαση Α μπορεί να καθορίσει ποια από τα στοιχεία της θέλει να μοιραστεί με τη σύμβαση Β μέσω τροποποιητών πρόσβασης. Η σταθερότητα σας παρέχει τέσσερις τροποποιητές πρόσβασης:

  • Ιδιωτικός: Το στοιχείο δεν κληρονομείται και δεν μπορεί να προσεγγιστεί από εξωτερικά στοιχεία.
  • Δημόσιο: Το στοιχείο μπορεί να κληρονομηθεί και να έχει πρόσβαση σε εξωτερικά στοιχεία.
  • Εσωτερικός: Το στοιχείο μπορεί να κληρονομηθεί αλλά δεν είναι προσβάσιμο από εξωτερικά στοιχεία
  • Εξωτερικός: Το στοιχείο δεν μπορεί να κληρονομηθεί αλλά μπορεί να προσπελαστεί από εξωτερικά στοιχεία.

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

σταθερότητα πραγμάτων ^ 0,4,19;

//τμήμα 1

ρυθμιστής διεπαφής {

συνάρτηση checkValue (ποσό uint) επιστρέφει (bool);

Λειτουργικό δάνειο () επιστροφές (bool);

}

#τομέας 2

Η σύμβαση Bank είναι ρυθμιστής {

ιδιωτική αξία

Λειτουργία Τράπεζας (σε ελάχιστο ποσό) {

τιμή = ποσό;

}

κατάθεση λειτουργίας (ποσό)

τιμή + = ποσό;

}

απόσυρση λειτουργίας (ποσό uint) {

εάν (checkValue (ποσό)) {

τιμή – = ποσό;

}

}

υπόλοιπο συνάρτησης () επιστρέφει (uint) {

αξία επιστροφής;

}

συνάρτηση checkValue (ποσό uint) επιστρέφει (bool) {

αξία επιστροφής >= ποσό;

}

Λειτουργικό δάνειο () επιστροφές (bool) {

αξία επιστροφής > 0;

}

}

// ενότητα 3

η σύμβαση mysecondcontract είναι Bank {

ιδιωτικό όνομα συμβολοσειράς;

uint ιδιωτική ηλικία?

function setname (string newName) {

name = newName;

}

Η συνάρτηση getName () επιστρέφει (συμβολοσειρά) {

όνομα επιστροφής;

}

συνάρτηση setAge (uint newAge) {

ηλικία = newAge;

}

Η συνάρτηση getAge () επιστρέφει (uint) {

ηλικία επιστροφής

}

}

Τμήμα 1

Ας δούμε τον εν λόγω κώδικα:

ρυθμιστής διεπαφής {

συνάρτηση checkValue (ποσό uint) επιστρέφει (bool);

Λειτουργικό δάνειο () επιστροφές (bool);

}

Ας δούμε τον εν λόγω κώδικα:

ρυθμιστής διεπαφής {

συνάρτηση checkValue (ποσό uint) επιστρέφει (bool);

Λειτουργικό δάνειο () επιστροφές (bool);

}

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

Τομέας 2

Η σύμβαση Bank είναι ρυθμιστής {

ιδιωτική αξία

Λειτουργία Τράπεζας (σε ελάχιστο ποσό) {

τιμή = ποσό;

}

κατάθεση λειτουργίας (ποσό)

τιμή + = ποσό;

}

απόσυρση λειτουργίας (ποσό uint) {

εάν (checkValue (ποσό)) {

τιμή – = ποσό;

}

}

υπόλοιπο συνάρτησης () επιστρέφει (uint) {

αξία επιστροφής;

}

συνάρτηση checkValue (ποσό uint) επιστρέφει (bool) {

αξία επιστροφής >= ποσό;

}

Λειτουργικό δάνειο () επιστροφές (bool) {

αξία επιστροφής > 0;

}

}

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

Μετά από αυτό έχουμε μερικές λειτουργίες ρύθμισης που ονομάζονται «ανάληψη» και «κατάθεση» που βοηθούν την ανάληψη σύμβασης και την κατάθεση από τον λογαριασμό του χρήστη.

Κοιτάξτε συγκεκριμένα τη λειτουργία απόσυρσης.

απόσυρση λειτουργίας (ποσό uint) {

εάν (checkValue (ποσό)) {

τιμή – = ποσό;

}

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

Μετά τις λειτουργίες του ρυθμιστή, έχουμε τις λειτουργίες λήψης που επιστρέφουν, με τη σειρά:

  • Το υπόλοιπο στο λογαριασμό του χρήστη
  • Είτε ο χρήστης έχει αρκετά χρήματα για ανάληψη είτε όχι.
  • Εάν ο χρήστης είναι ανοιχτός για δάνειο ή όχι. Γι ‘αυτό ελέγχουμε μόνο εάν το υπόλοιπο του χρήστη είναι > 0 ή όχι.

Τμήμα 3

η σύμβαση mysecondcontract είναι Bank {

ιδιωτικό όνομα συμβολοσειράς;

uint ιδιωτική ηλικία?

function setname (string newName) {

name = newName;

}

Η συνάρτηση getName () επιστρέφει (συμβολοσειρά) {

όνομα επιστροφής;

}

συνάρτηση setAge (uint newAge) {

ηλικία = newAge;

}

Η συνάρτηση getAge () επιστρέφει (uint) {

ηλικία επιστροφής

}

}

Αυτή η ενότητα της σύμβασης είναι η ίδια όπως και πριν. Η μόνη διαφορά είναι ότι κληρονομεί ακίνητα από το συμβόλαιο της Τράπεζας.

Εισαγωγές και βιβλιοθήκες στερεότητας

Στη συνέχεια πρέπει να έχουμε σημαντικές λειτουργίες σταθερότητας με τις οποίες πρέπει να είστε άνετοι, εισαγωγές και βιβλιοθήκες. Για αυτό, πρόκειται να δημιουργήσουμε δύο ξεχωριστά αρχεία συμβολαίου τα οποία θα ονομάσουμε «library.sol» και «testLibrary.sol».

Το πρόγραμμα library.sol μοιάζει με αυτό:

σταθερότητα πραγμάτων ^ 0,4,19;

βιβλιοθήκες συμβάσεων {

δοκιμή λειτουργίας() {}

}

Και το testLibrary μοιάζει με αυτό:

σταθερότητα πραγμάτων ^ 0,4,19;

εισαγωγή "πρόγραμμα περιήγησης / library.sol";

test testLibrary είναι βιβλιοθήκες {

}

Το πρόγραμμα testLibrary εισάγει απλώς το αρχείο βιβλιοθηκών που είναι αποθηκευμένο στην τοποθεσία: browser / library.sol. Όλα τα προγράμματα σταθερότητας, από προεπιλογή, αποθηκεύονται στο φάκελο του προγράμματος περιήγησης.

Πρόσβαση στους τροποποιητές και τις εναλλακτικές λειτουργίες

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

σταθερότητα πραγμάτων ^ 0,4,19;

δοκιμή συμβολαίου Transaction {

εκδήλωση SenderLogger (διεύθυνση);

συμβάν ValueLogger (uint);

συνάρτηση () πληρωτέα {

SenderLogger (msg.sender);

ValueLogger (msg.value);

}

}

Πρόκειται για ένα απλό έξυπνο συμβόλαιο που σας επιτρέπει να εξαγάγετε τις λεπτομέρειες μιας συναλλαγής. Βασικά, εάν κάποιος στείλει τον Ether σε αυτό το συμβόλαιο, τότε αυτό το συμβόλαιο θα εξαγάγει:

  • Η διεύθυνση του αποστολέα
  • Το ποσό του Αιθέρα που στέλνουν.

Η εναλλακτική λειτουργία είναι εδώ:

 συνάρτηση () πληρωτέα {

SenderLogger (msg.sender);

ValueLogger (msg.value);

}

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

Ας εκτελέσουμε λοιπόν το πρόγραμμα και δείτε κάποια δεδομένα. Θα αναπτύξουμε τη σύμβαση. Βάλτε 1 Ether στο πεδίο “value” και πατήστε το κουμπί “fallback”.

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Ας δούμε λοιπόν τα αρχεία καταγραφής.

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Το τελευταίο πεδίο στον πίνακα στο πεδίο αξίας που δείχνει το ποσό του Ether in wei που έχει σταλεί στη σύμβαση.

Εντάξει, οπότε ας βάλουμε μερικούς τροποποιητές στο πρόγραμμα και να αλλάξουμε τα πράγματα.

σταθερότητα πραγμάτων ^ 0,4,19;

συναλλαγή συμβολαίου {

εκδήλωση SenderLogger (διεύθυνση);

συμβάν ValueLogger (uint);

διεύθυνση ιδιώτη ιδιοκτήτη ·

τροποποιητής isOwner {

απαιτείται (ιδιοκτήτης == msg.sender);

_;

}

τροποποιητής validValue {

assert (τιμή msg. >= 1 αιθέρας);

_;

}

Συναλλαγή συνάρτησης () {

ιδιοκτήτης = msg.sender;

}

συνάρτηση () πληρωτέο isOwner validValue {

SenderLogger (msg.sender);

ValueLogger (msg.value);

}

}

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

  • Μόνο ο κάτοχος της σύμβασης μπορεί να στείλει τη συναλλαγή
  • Η συναλλαγή πρέπει να είναι τουλάχιστον 1 Ether

Ας δούμε λοιπόν έναν τροποποιητή και να δούμε πώς το εκτελούμε:

τροποποιητής isOwner {

       απαιτείται (ιδιοκτήτης == msg.sender);

       _;

   }

Λοιπόν, τι ακριβώς κάνουμε εδώ?

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

Παρατηρείτε επίσης το “_;”?

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

Ας δούμε τον επόμενο τροποποιητή μας:

τροποποιητής validValue {

       assert (τιμή msg. >= 1 αιθέρας);

       _;

   }

Αυτός είναι και πάλι ένας απλός τροποποιητής που ελέγχει εάν η αξία που μεταβιβάστηκε στη σύμβαση είναι μεγαλύτερη από 1 αιθέρα ή όχι.

Εντάξει, τώρα που έχουμε ορίσει αυτούς τους τροποποιητές, πώς ακριβώς θα τους χρησιμοποιήσουμε στη συνάρτηση; Λοιπόν, ας το δούμε:

συνάρτηση () πληρωτέο isOwner validValue {

       SenderLogger (msg.sender);

       ValueLogger (msg.value);

   }

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

Ας προσθέσουμε έναν αιθέρα στο πεδίο τιμών και να δούμε τι παίρνουμε.

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Το αρχείο καταγραφής δείχνει:

  • Η διεύθυνση του αποστολέα
  • Η αξία της Ether έθεσε στο συμβόλαιο

Τώρα, τι θα συμβεί αν:

  • Στείλτε λιγότερο από 1 αιθέρα
  • Αποστολή αιθέρα από διαφορετική διεύθυνση

Λιγότερο από 1 αιθέρα

Στείλαμε 0,2 Ether στο πεδίο τιμών και το πρόγραμμα έδωσε αμέσως ένα σφάλμα:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Από διαφορετική διεύθυνση

Στείλαμε 1 Ether από διαφορετική διεύθυνση. Για άλλη μια φορά έχουμε ένα σφάλμα:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Δομές και χαρτογράφηση στη σταθερότητα

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

  • Δομές
  • Χαρτογράφηση

Οι δομές είναι αντικείμενα που δεν διαθέτουν μεθόδους. Ορίζουν μόνο τις μεταβλητές.

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

χαρτογράφηση (A => ΣΙ).

A = Μπορεί να είναι οποιουδήποτε τύπου εκτός από χαρτογράφηση, πίνακας, enum, συμβόλαιο και δομή.

B = Μπορεί να είναι οποιουδήποτε τύπου (συμπεριλαμβανομένης της χαρτογράφησης).

Ας εκτελέσουμε ένα πρόγραμμα που περιλαμβάνει και τις δύο αυτές δυνατότητες:

σταθερότητα πραγμάτων ^ 0,4,19;

showmap συμβολαίου {

//Τμήμα 1

δομικός λογαριασμός {

ισορροπία

}

Λογαριασμός myAccount;

function structFunc () {

myAccount.balance = 100;

}

//τομέας 2

χαρτογράφηση (διεύθυνση => Λογαριασμός) _accounts;

συνάρτηση () πληρωτέα {

_accounts [msg.sender] .balance + = msg.value;

}

η συνάρτηση getBalance () επιστρέφει (uint) {

επιστροφή _accounts [msg.sender] .balance;

}

}

Τμήμα 1

Έτσι, έχουμε δηλώσει μια δομή με το όνομα Λογαριασμός που έχει τύπο δεδομένων uint με το όνομα «υπόλοιπο». Στη συνέχεια ξεκινήσαμε μια μεταβλητή που ονομάζεται myAccount of type Account και στη συνέχεια χρησιμοποιήσαμε τη συνάρτηση structFunc () για να αντιστοιχίσουμε μια τιμή 100 στο myAccount.balance.

Τομέας 2

Χρησιμοποιώντας τη λέξη-κλειδί αντιστοίχισης, αντιστοιχίζουμε διευθύνσεις στη δομή του λογαριασμού μας και την αποκαλούμε «_accounts».

Έχουμε, στη συνέχεια, μια εναλλακτική λειτουργία για να προσθέσουμε τον αιθέρα που του δίνεται από τον χρήστη στο υπόλοιπό του. Η συνάρτηση getBalance () επιστρέφει στη συνέχεια την τιμή του ενημερωμένου υπολοίπου στον χρήστη.

Ας το δούμε σε δράση.

Θα στείλουμε 10 Ether στο έξυπνο συμβόλαιο.

Έτσι, χρησιμοποιώντας τη λειτουργία εναλλαγής, στείλαμε 10 Ether στον λογαριασμό που μπορείτε να δείτε στο αρχείο καταγραφής εδώ:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Έτσι, αν λάβουμε το Balance τώρα, αυτό θα πάρουμε:

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Σημειώστε το πεδίο «αποκωδικοποιημένη έξοδος» και παρατηρήστε πώς η ισορροπία αντανακλάται ως 10 Ether.

Εισαγωγή στο Javascript και το Solidity-Μέρος 2: Στερεότητα

Τώρα, ας στείλουμε 10 ακόμη Ether στη σύμβαση μέσω της εναλλακτικής λειτουργίας και ας ελέγξουμε ξανά το υπόλοιπο μέσω getBalance ().

Εάν δείτε το πεδίο getBalance (), τότε θα παρατηρήσετε ότι το υπόλοιπο αντικατοπτρίζει 20 Ether.

συμπέρασμα

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

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

Μπορείτε επίσης να κάνετε check out αυτές οι σειρές βίντεο από “Τι είναι η Στερεότητα”. Έχουν υπέροχα βίντεο και η πλειοψηφία του κώδικα που χρησιμοποιήθηκε εδώ έχει ληφθεί από τη σελίδα του gitHub.

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

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me