Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Γεια σε όλους!

Πιο πρόσφατα, Waves Labs ανακοινώθηκε διαγωνισμός για προγραμματιστές αφιερωμένος στην κυκλοφορία της επέκτασης γλώσσας έξυπνου συμβολαίου RIDE για αποκεντρωμένες εφαρμογές Ride4Dapps στο δοκιμαστικό δίκτυο!

Επιλέξαμε την υπόθεση DAO γιατί Ventuary σχεδιάζει να αναπτύξει dApps με κοινωνικές λειτουργίες: ψηφοφορία, συγκέντρωση κεφαλαίων, διαχείριση εμπιστοσύνης κ.λπ.
Ξεκινήσαμε με ένα απλό παράδειγμα στο Συνεδρίες Q&A και RIDE IDE - παράδειγμα με κοινόχρηστο πορτοφόλι.

Ας δούμε αυτό το παράδειγμα, ας δοκιμάσουμε υποθέσεις και ας δούμε μερικές παραξενιές:

Ας έχουμε την Alice - Κάτοχος dApp
Ο Boob και ο Cooper είναι συνεργάτες της Alice, συνιδρυτές του Alice-BC DAO
Η Νέλη είναι ιδιοκτήτρια επιχείρησης που χρειάζεται χρηματοδότηση
Τράπεζα - μια τράπεζα που διανέμει μάρκες

Στάδιο 1. Αρχικοποίηση υπολοίπων

Για να λάβετε διακριτικά στο δίκτυο δοκιμών κυμάτων, πρέπει να επικοινωνήσετε βρύση και υποδείξτε τη διεύθυνση στην οποία θα σταλούν τα κουπόνια.
Μπορείτε να βρείτε τη διεύθυνση στο IDE ανοίγοντας τα στοιχεία του λογαριασμού σας.
Τονίζουμε την Τράπεζα 10 ΚΥΜΑΤΑ. Στη συνέχεια ελέγχουμε ότι έφτασαν μέσω του προγράμματος περιήγησης αποκλεισμού και συναλλαγών: κριτικός

Τώρα ας μοιράσουμε μάρκες από την τράπεζα στους υπόλοιπους συμμετέχοντες. (Σημειώσεις: Όλες οι συναλλαγές στο δίκτυο waves δεν είναι δωρεάν, επομένως απαιτείται ένα ελάχιστο θετικό υπόλοιπο για όλους τους συμμετέχοντες για την πραγματοποίηση συναλλαγών).

1 WAVES = 100000000 μονάδες (wavelets), αφού τα ποσά μπορούν να είναι μόνο ακέραιοι
0.01 WAVES (Τέλος συναλλαγής) = 1000000

Τράπεζα -> [3 ΚΥΜΑΤΑ] -> Αλίκη, μέσω TransferTransaction (Τύπος: 4).

Ελέγχουμε ότι το env.SEED από το οποίο υπογράφονται οι συναλλαγές ταιριάζει με την τράπεζά μας:
Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Εάν δεν έχετε αντίστοιχη αρχική φράση, απλώς μεταβείτε σε αυτήν στην καρτέλα Λογαριασμοί και ελέγξτε ξανά.
Μετά από αυτό, δημιουργούμε, ανακοινώνουμε και υπογράφουμε μια συναλλαγή για τη μεταφορά 3 ΚΥΜΑΤΩΝ Alice.
Μπορείτε επίσης να μάθετε τα δεδομένα της Alice μέσω της μεταβλητής env.accounts. Η αρίθμηση ξεκινά από το 0, οπότε η Alice είναι env.accounts[1].
Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))

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

Βεβαιωνόμαστε ότι το υπόλοιπο της Αλίκης αναπληρώνεται με 3 ΚΥΜΑΤΑ και το τραπεζικό υπόλοιπο παραμένει στο 10 - 3 - 0.01 = 0.699.
Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Στέλνουμε τον Boob και τον Cooper 3 WAVES ο καθένας και τη Neli, την Xena και τον Mark 0.2 WAVES ο καθένας με τον ίδιο τρόπο.
(Σημειώσεις: Κάναμε ένα σφάλμα ενός χαρακτήρα και στείλαμε τη Neli 0.02 WAVES. Να είστε προσεκτικοί!)

broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))

Μετά την αναπλήρωση των υπολοίπων όλων των συμμετεχόντων, βλέπουμε:
Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Στάδιο 2. Δημιουργήστε έναν λογαριασμό dApp

Συμφωνήσαμε ότι η Alice θα ήταν ο δημιουργός και ο ιδιοκτήτης της αποκεντρωμένης εφαρμογής.
Μεταβείτε στους Λογαριασμούς, ορίστε το ως SEED και ελέγξτε το env.SEED ταιριάζει με την Αλίκη.

Ας προσπαθήσουμε να εγκαταστήσουμε το απλούστερο δυνατό σενάριο (συμβόλαιο) στον λογαριασμό της Alice.
Οι έξυπνες επαφές στο Waves είναι κατηγορήματα που απαγορεύουν ή επιτρέπουν την πραγματοποίηση οποιουδήποτε τύπου εξερχόμενης συναλλαγής υπό ορισμένες προϋποθέσεις. Σε αυτή την περίπτωση, αυτή η προϋπόθεση είναι ΠΑΝΤΑ. Ο κωδικός της σύμβασης είναι αληθής. Κλήση ανάπτυξης().

Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Προμήθεια ανά συναλλαγή setScript 1400000/100000000 = 0.014 WAVES. Η Αλίκη έχει 2.986 ΚΥΜΑΤΑ στο υπόλοιπο της.

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

Ride4Dapps τώρα περιλαμβάνει 2 νέους τύπους σχολιασμού:

  1. @Callable(i) — λαμβάνει ως παράμετρο i, δεδομένα σχετικά με το ποιος λογαριασμός κάλεσε/υπέγραψε τη συναλλαγή. Είναι το αποτέλεσμα αυτής της συνάρτησης που καθορίζει την αλλαγή στην κατάσταση του λογαριασμού dApp. Άλλοι λογαριασμοί μπορούν να δημιουργούν συναλλαγές και να εκτελούν λειτουργίες με αυτόν τον σχολιασμό και να αλλάζουν την κατάσταση του λογαριασμού dApp.
  2. @Verifier(tx) — Επαληθευτής συναλλαγής με την παράμετρο συναλλαγής tx. Αντιστοιχεί στη λογική κατηγορήματος από το RIDE. Σε αυτήν την έκφραση μπορείτε να επιτρέψετε ή να απαγορεύσετε περαιτέρω αλλαγές στη λογική των έξυπνων συμβολαίων στον λογαριασμό dApp.

Ας το κάνουμε dApp λογαριασμό ως κοινό πορτοφόλι για όλους τους συμμετέχοντες.
Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Για να ελέγξετε ποιο συμβόλαιο είναι ενεργό αυτήν τη στιγμή στον λογαριασμό σας, μπορείτε να αντιγράψετε τον κώδικα base64 του έξυπνου συμβολαίου στην εξερεύνηση μπλοκ και να τον αναγνωρίσετε χρησιμοποιώντας έναν απομεταγλωττιστή (για παράδειγμα)
Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)
Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)
Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Φροντίζουμε η λογική του έξυπνου συμβολαίου να ταιριάζει με αυτό που περιμένουμε.
Η Αλίκη έχει 2.972 ΚΥΜΑΤΑ στο υπόλοιπο της.

Αυτή η εφαρμογή dApp παρακολουθεί πόσο συνεισφέρει κάθε συμμετέχων στο κοινό ταμείο μέσω ενός μηχανισμού συναλλαγή δεδομένων — Data Entry (currentKey, newAmount), όπου currentKey είναι ο λογαριασμός που καλεί τη συνάρτηση κατάθεσης και newAmount είναι η αξία του αναπληρωμένου υπολοίπου.

Ο Boob και ο Cooper κάνουν τις καταθέσεις τους στον λογαριασμό dApp με 1 WAVES.
Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Κάνουμε λάθος και η συναλλαγή δεν ολοκληρώνεται. Επειδή, παρά το γεγονός ότι ήμασταν πεπεισμένοι ότι κάναμε μια συναλλαγή για λογαριασμό του Bob, κάναμε λάθος στο ευρετήριο και υποδείξαμε έναν τραπεζικό λογαριασμό που δεν έχει έξυπνο συμβόλαιο. Αξίζει να σημειωθεί ένα σημαντικό σημείο εδώ - υπάρχει χρέωση για ανεπιτυχείς προσπάθειες έναρξης συναλλαγών δεν μπορεί να αφαιρεθεί! Η Αλίκη έχει 2.972 ΚΥΜΑΤΑ στο υπόλοιπο της. Ο Μπομπ έχει 3 ΚΥΜΑΤΑ.

Ο Bob έστειλε 1 WAVES στον λογαριασμό dApp.

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))

Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Ο Μπομπ έχει απομείνει 1.99 ΚΥΜΑΤΑ. Δηλαδή, ο Μπομπ πλήρωσε προμήθεια 0.01 WAVES

Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Η Αλίκη είχε 2.972 ΚΥΜΑΤΑ στο υπόλοιπό της, τώρα είναι 3.972. Καταγράφηκε επίσης συναλλαγή στον λογαριασμό Alice, αλλά δεν χρεώθηκε προμήθεια από τον λογαριασμό dApp (Alice).
Αφού ο Cooper συμπλήρωσε επίσης τον λογαριασμό, το υπόλοιπο της Alice έγινε 4.972 WAVES.

Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Μπορείτε να μάθετε σε ποιον ανήκει πόσα WAVES στο κοινό πορτοφόλι στην εξερεύνηση μπλοκ στην καρτέλα Δεδομένα.

Ο Cooper άλλαξε γνώμη σχετικά με το να αφήσει το ποσό του 1 WAVES στο γενικό πορτοφόλι και αποφάσισε να αποσύρει το ήμισυ της συγγένειας. Για να γίνει αυτό, πρέπει να καλέσει τη συνάρτηση απόσυρσης.

Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

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

Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Η Cooper έχει πλέον 2.48 ΚΥΜΑΤΑ στον ισολογισμό της. Αντίστοιχα, 3 ΚΥΜΑΤΑ - 1 - 0.01, και στη συνέχεια + 0.5 - 0.01. Αντίστοιχα, κάθε κλήση για κατάθεση και ανάληψη κοστίζει 0.01 WAVES. Ως αποτέλεσμα, οι εγγραφές στον πίνακα κατόχων dApps άλλαξαν ως εξής.

Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Ο Bob αποφάσισε επίσης να αποσύρει κάποια χρήματα από το κοινό πορτοφόλι, αλλά έκανε ένα λάθος και προσπάθησε να αποσύρει 1.5 WAVES.

Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Ωστόσο, το έξυπνο συμβόλαιο είχε έναν έλεγχο για αυτήν την κατάσταση.

Η Xena είναι απατεώνας, προσπάθησε να αποσύρει 1 WAVES από τον συνολικό λογαριασμό.

Μαθαίνοντας να γράφετε έξυπνα συμβόλαια Waves σε RIDE και RIDE4DAPPS. Μέρος 1 (Πορτοφόλι πολλών χρηστών)

Ούτε της βγήκε.

Στο επόμενο μέρος, θα εξετάσουμε πιο περίπλοκα ζητήματα που σχετίζονται με την ατέλεια του λογαριασμού Alice dApp.

Πηγή: www.habr.com

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