Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp

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

Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp

Το σχήμα ανάπτυξης για dApps και κανονικές εφαρμογές είναι σχεδόν το ίδιο:

  • Γράφουμε τον κώδικα
  • Σύνταξη αυτοματοποιημένης δοκιμής
  • Εκκινήστε την εφαρμογή
  • Δοκιμές

Εργαλεία

1. docker για να εκτελέσετε τον κόμβο και το Waves Explorer

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

  • Θα χρειάζεστε συνεχώς νέους λογαριασμούς με δοκιμαστικές μάρκες. Η δοκιμαστική βρύση δικτύου μεταφέρει 10 ΚΥΜΑΤΑ κάθε 10 λεπτά.
  • Ο μέσος χρόνος αποκλεισμού στο δίκτυο δοκιμής είναι 1 λεπτό, στον κόμβο - 15 δευτερόλεπτα. Αυτό είναι ιδιαίτερα αισθητό όταν μια συναλλαγή απαιτεί πολλαπλές επιβεβαιώσεις.
  • Η επιθετική προσωρινή αποθήκευση είναι δυνατή σε δημόσιους κόμβους δοκιμής.
  • Μπορεί επίσης να μην είναι διαθέσιμα προσωρινά λόγω συντήρησης.

Από εδώ και πέρα ​​θα υποθέσω ότι εργάζεστε με τον δικό σας κόμβο.

2. Εργαλείο γραμμής εντολών σανίδα του σερφ

  • Κατεβάστε και εγκαταστήστε το Node.js χρησιμοποιώντας ppa, homebrew ή exe εδώ: https://nodejs.org/en/download/.
  • Εγκαταστήστε το Surfboard, ένα εργαλείο που σας επιτρέπει να εκτελείτε δοκιμές σε έναν υπάρχοντα κόμβο.

npm install -g @waves/surfboard

3. Πρόσθετο Visual Studio Code

Αυτό το βήμα είναι προαιρετικό εάν δεν είστε λάτρης των IDE και προτιμάτε τους επεξεργαστές κειμένου. Όλα τα απαραίτητα εργαλεία είναι βοηθητικά προγράμματα γραμμής εντολών. Εάν χρησιμοποιείτε vim, δώστε προσοχή στο πρόσθετο vim-ride.

Λήψη και εγκατάσταση του Visual Studio Code: https://code.visualstudio.com/

Ανοίξτε το VS Code και εγκαταστήστε το πρόσθετο waves-ride:

Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp

Επέκταση προγράμματος περιήγησης Waves Keeper: https://wavesplatform.com/products-keeper

Έγινε!

Ξεκινήστε τον κόμβο και το Waves Explorer

1. Ξεκινήστε τον κόμβο:

docker run -d -p 6869:6869 wavesplatform/waves-private-node

Βεβαιωθείτε ότι ο κόμβος εκκινείται μέσω του REST API http://localhost:6869:

Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp
Swagger REST API για τον κόμβο

2. Ξεκινήστε μια παρουσία του Waves Explorer:

docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer

Ανοίξτε ένα πρόγραμμα περιήγησης και μεταβείτε στο http://localhost:3000. Θα δείτε πόσο γρήγορα δημιουργείται ένα κενό κύκλωμα τοπικού κόμβου.

Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp
Το Waves Explorer εμφανίζει μια παρουσία τοπικού κόμβου

Δομή RIDE και εργαλείο Surfboard

Δημιουργήστε έναν κενό κατάλογο και εκτελέστε την εντολή σε αυτόν

surfboard init

Η εντολή προετοιμάζει έναν κατάλογο με τη δομή του έργου, τις εφαρμογές και τις δοκιμές "hello world". Αν ανοίξετε αυτόν τον φάκελο με VS Code, θα δείτε:

Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp
Surfboard.config.json

  • Κάτω από το φάκελο ./ride/ θα βρείτε ένα μεμονωμένο αρχείο wallet.ride - τον κατάλογο όπου βρίσκεται ο κώδικας dApp. Θα αναλύσουμε εν συντομία τα dApps στο επόμενο μπλοκ.
  • Κάτω από το φάκελο ./test/ θα βρείτε ένα αρχείο *.js. Οι δοκιμές αποθηκεύονται εδώ.
  • ./surfboard.config.json – αρχείο διαμόρφωσης για την εκτέλεση δοκιμών.

Το Envs είναι ένα σημαντικό τμήμα. Κάθε περιβάλλον έχει διαμορφωθεί ως εξής:

  • Τελικό σημείο REST API του κόμβου που θα χρησιμοποιηθεί για την εκκίνηση του dApp και του CHAIN_ID του δικτύου.
  • Μια μυστική φράση για έναν λογαριασμό με μάρκες που θα είναι οι πηγές των δοκιμαστικών κουπονιών σας.

Όπως μπορείτε να δείτε, το surfboard.config.json υποστηρίζει πολλά περιβάλλοντα από προεπιλογή. Η προεπιλογή είναι το τοπικό περιβάλλον (το κλειδί defaultEnv είναι μια μεταβλητή παράμετρος).

Εφαρμογή επίδειξης πορτοφολιού

Αυτή η ενότητα δεν είναι αναφορά στη γλώσσα RIDE. Μάλλον, μια ματιά στην εφαρμογή που αναπτύσσουμε και δοκιμάζουμε για να κατανοήσουμε καλύτερα τι συμβαίνει στο blockchain.

Ας δούμε μια απλή εφαρμογή Wallet-demo. Οποιοσδήποτε μπορεί να στείλει διακριτικά σε μια διεύθυνση dApp. Μπορείτε να αποσύρετε μόνο τα WAVES σας. Δύο λειτουργίες @Callable είναι διαθέσιμες μέσω του InvokeScriptTransaction:

  • deposit()η οποία απαιτεί συνημμένη πληρωμή σε WAVES
  • withdraw(amount: Int)που επιστρέφει μάρκες

Καθ' όλη τη διάρκεια του κύκλου ζωής του dApp, η δομή (διεύθυνση → ποσό) θα διατηρείται:

Ενέργειες
Προκύπτουσα κατάσταση

αρχικός
άδειο

Η Αλίκη καταθέτει 5 ΚΥΜΑΤΑ
alice-διεύθυνση → 500000000

Ο Μπομπ καταθέτει 2 ΚΥΜΑΤΑ

alice-διεύθυνση → 500000000
bob-διεύθυνση → 200000000

Ο Μπομπ αποσύρει 7 ΚΥΜΑΤΑ
ΑΡΝΗΘΗΚΕ!

Η Αλίκη αποσύρει 4 ΚΥΜΑΤΑ
alice-διεύθυνση → 100000000
bob-διεύθυνση → 200000000

Εδώ είναι ο κώδικας για να κατανοήσετε πλήρως την κατάσταση:

# In this example multiple accounts can deposit their funds and safely take them back. No one can interfere with this.
# An inner state is maintained as mapping `address=>waves`.
{-# STDLIB_VERSION 3 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}
@Callable(i)
func deposit() = {
 let pmt = extract(i.payment)
 if (isDefined(pmt.assetId))
    then throw("works with waves only")
    else {
     let currentKey = toBase58String(i.caller.bytes)
     let currentAmount = match getInteger(this, currentKey) {
       case a:Int => a
       case _ => 0
     }
     let newAmount = currentAmount + pmt.amount
     WriteSet([DataEntry(currentKey, newAmount)]) 
   }
 }
@Callable(i)
func withdraw(amount: Int) = {
 let currentKey = toBase58String(i.caller.bytes)
 let currentAmount = match getInteger(this, currentKey) {
   case a:Int => a
   case _ => 0
 }
 let newAmount = currentAmount - amount
 if (amount < 0)
   then throw("Can't withdraw negative amount")
   else if (newAmount < 0)
     then throw("Not enough balance")
     else ScriptResult(
       WriteSet([DataEntry(currentKey, newAmount)]),
       TransferSet([ScriptTransfer(i.caller, amount, unit)])
      )
 }
@Verifier(tx)
func verify() = false

Δείγμα κώδικα μπορείτε επίσης να βρείτε στη διεύθυνση GitHub.

Το πρόσθετο VSCode υποστηρίζει τη συνεχή μεταγλώττιση κατά την επεξεργασία ενός αρχείου. Επομένως, μπορείτε πάντα να παρακολουθείτε σφάλματα στην καρτέλα ΠΡΟΒΛΗΜΑΤΑ.

Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp
Εάν θέλετε να χρησιμοποιήσετε διαφορετικό πρόγραμμα επεξεργασίας κειμένου κατά τη μεταγλώττιση του αρχείου, χρησιμοποιήστε το

surfboard compile ride/wallet.ride

Αυτό θα παράγει μια σειρά από μεταγλωττισμένους κωδικούς RIDE από το base64.

Δοκιμαστικό σενάριο για "wallet.ride"

Ας δούμε αρχείο δοκιμής. Υποστηρίζεται από το πλαίσιο Mocha της JavaScript. Υπάρχει μια λειτουργία "Πριν" και τρεις δοκιμές:

  • Το "Before" χρηματοδοτεί πολλούς λογαριασμούς μέσω MassTransferTransaction, μεταγλωττίζει το σενάριο και το αναπτύσσει στο blockchain.
  • Το "Can deposit" στέλνει ένα InvokeScriptTransaction στο δίκτυο, ενεργοποιώντας τη συνάρτηση κατάθεσης() για καθέναν από τους δύο λογαριασμούς.
  • Δοκιμές «Δεν είναι δυνατή η ανάληψη περισσότερων από όσες κατατέθηκαν» ότι κανείς δεν μπορεί να κλέψει τα μάρκες άλλων ανθρώπων.
  • Επιταγές «Μπορεί να καταθέσει» ότι οι αναλήψεις διεκπεραιώνονται σωστά.

Εκτελέστε δοκιμές από το Surfboard και αναλύστε τα αποτελέσματα στο Waves Explorer

Για να εκτελέσετε τη δοκιμή, τρέξτε

surfboard test

Εάν έχετε πολλά σενάρια (για παράδειγμα, χρειάζεστε ένα ξεχωριστό σενάριο ανάπτυξης), μπορείτε να εκτελέσετε

surfboard test my-scenario.js

Το Surfboard θα συλλέξει τα αρχεία δοκιμής στο φάκελο ./test/ και θα εκτελέσει το σενάριο στον κόμβο που έχει ρυθμιστεί στο surfboard.config.json. Μετά από λίγα δευτερόλεπτα θα δείτε κάτι σαν αυτό:

wallet test suite
Generating accounts with nonce: ce8d86ee
Account generated: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Account generated: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Account generated: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Accounts successfully funded
Script has been set
   √ Can deposit (4385ms)
   √ Cannot withdraw more than was deposited
   √ Can withdraw (108ms)
3 passing (15s)

Ζήτω! Δοκιμές πέρασαν. Τώρα ας ρίξουμε μια ματιά στο τι συμβαίνει όταν χρησιμοποιείτε το Waves Explorer: κοιτάξτε τα μπλοκ ή επικολλήστε μία από τις παραπάνω διευθύνσεις στην αναζήτηση (για παράδειγμα, την αντίστοιχη wallet#. Εκεί μπορείτε να βρείτε το ιστορικό συναλλαγών, την κατάσταση dApp, το απομεταγλωττισμένο δυαδικό αρχείο.

Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp
Waves Explorer. Μια εφαρμογή που μόλις αναπτύχθηκε.

Μερικές συμβουλές για σανίδα του σερφ:

1. Για δοκιμή στο περιβάλλον testnet, χρησιμοποιήστε:

surfboard test --env=testnet

Λάβετε μάρκες δοκιμής

2. Εάν θέλετε να δείτε τις εκδόσεις JSON των συναλλαγών και τον τρόπο επεξεργασίας τους από τον κόμβο, εκτελέστε τη δοκιμή με -v (σημαίνει "περιεκτικός"):

surfboard test -v

Χρήση εφαρμογών με το Waves Keeper

1. Ρυθμίστε το Waves Keeper να λειτουργεί: http://localhost:6869

Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp
Ρύθμιση του Waves Keeper για εργασία με έναν τοπικό κόμβο

2. Εισαγωγή μυστικής φράσης με διακριτικά για το δίκτυο; Για απλότητα, χρησιμοποιήστε τον αρχικό σπόρο του κόμβου σας: waves private node seed with waves tokens. Διεύθυνση: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Μπορείτε να εκτελέσετε μόνοι σας μια εφαρμογή μιας σελίδας χωρίς διακομιστή χρησιμοποιώντας npm. Ή μεταβείτε στην υπάρχουσα: chrome-ext.wvservices.com/dapp-wallet.html

4. Εισαγάγετε τη διεύθυνση πορτοφολιού από τη δοκιμαστική εκτέλεση (υπογραμμισμένη παραπάνω) στο πλαίσιο κειμένου διεύθυνσης dApp

5. Εισαγάγετε ένα μικρό ποσό στο πεδίο «Κατάθεση» και κάντε κλικ στο κουμπί:

Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp
Το Waves Keeper ζητά άδεια να υπογράψει μια InvokeScriptTransaction με πληρωμή 10 WAVES.

6. Επιβεβαιώστε τη συναλλαγή:

Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp
Η συναλλαγή δημιουργείται και μεταδίδεται στο δίκτυο. Τώρα μπορείτε να δείτε την ταυτότητά της

7. Παρακολουθήστε τη συναλλαγή χρησιμοποιώντας το Waves Explorer. Εισαγάγετε το αναγνωριστικό στο πεδίο αναζήτησης

Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp

Συμπεράσματα και πρόσθετες πληροφορίες

Εξετάσαμε τα εργαλεία για την ανάπτυξη, τη δοκιμή, την ανάπτυξη και τη χρήση απλών dApps στην πλατφόρμα Waves:

  • Γλώσσα RIDE
  • VS Code Editor
  • Waves Explorer
  • Σανίδα του σέρφιν
  • Waves Keeper

Σύνδεσμοι για όσους θέλουν να συνεχίσουν να μαθαίνουν RIDE:

Περισσότερα παραδείγματα
Διαδικτυακό IDE με παραδείγματα
Τεκμηρίωση Waves
Συνομιλία προγραμματιστή στο Telegram
Waves και RIDE στο stackoverflow
ΝΕΟΣ! Διαδικτυακά μαθήματα για τη δημιουργία dApps στην πλατφόρμα Waves

Συνεχίστε την κατάδυση στο θέμα RIDE και δημιουργήστε την πρώτη σας εφαρμογή dApp!

TL? DR: bit.ly/2YCFnwY

Πηγή: www.habr.com

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