ProHoster > Blog > διαχείριση > Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp
Πώς να δημιουργήσετε, να αναπτύξετε και να δοκιμάσετε το Waves RIDE dApp
Γειά σου! Σε αυτό το άρθρο θα σας δείξω πώς να γράφετε και να τρέχετε μια κανονική εφαρμογή dApp σε έναν κόμβο Waves. Ας δούμε τα απαραίτητα εργαλεία, μεθόδους και ένα παράδειγμα ανάπτυξης.
Το σχήμα ανάπτυξης για dApps και κανονικές εφαρμογές είναι σχεδόν το ίδιο:
Γράφουμε τον κώδικα
Σύνταξη αυτοματοποιημένης δοκιμής
Εκκινήστε την εφαρμογή
Δοκιμές
Εργαλεία
1. docker για να εκτελέσετε τον κόμβο και το Waves Explorer
Εάν δεν θέλετε να ξεκινήσετε έναν κόμβο, μπορείτε να παραλείψετε αυτό το βήμα. Άλλωστε, υπάρχει ένα δοκιμαστικό και πειραματικό δίκτυο. Αλλά χωρίς να αναπτύξετε τον δικό σας κόμβο, η διαδικασία δοκιμής μπορεί να καθυστερήσει.
Θα χρειάζεστε συνεχώς νέους λογαριασμούς με δοκιμαστικές μάρκες. Η δοκιμαστική βρύση δικτύου μεταφέρει 10 ΚΥΜΑΤΑ κάθε 10 λεπτά.
Ο μέσος χρόνος αποκλεισμού στο δίκτυο δοκιμής είναι 1 λεπτό, στον κόμβο - 15 δευτερόλεπτα. Αυτό είναι ιδιαίτερα αισθητό όταν μια συναλλαγή απαιτεί πολλαπλές επιβεβαιώσεις.
Η επιθετική προσωρινή αποθήκευση είναι δυνατή σε δημόσιους κόμβους δοκιμής.
Μπορεί επίσης να μην είναι διαθέσιμα προσωρινά λόγω συντήρησης.
Από εδώ και πέρα θα υποθέσω ότι εργάζεστε με τον δικό σας κόμβο.
Εγκαταστήστε το 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:
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 Explorer εμφανίζει μια παρουσία τοπικού κόμβου
Δομή RIDE και εργαλείο Surfboard
Δημιουργήστε έναν κενό κατάλογο και εκτελέστε την εντολή σε αυτόν
surfboard init
Η εντολή προετοιμάζει έναν κατάλογο με τη δομή του έργου, τις εφαρμογές και τις δοκιμές "hello world". Αν ανοίξετε αυτόν τον φάκελο με VS Code, θα δείτε:
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
Εδώ είναι ο κώδικας για να κατανοήσετε πλήρως την κατάσταση:
# 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 υποστηρίζει τη συνεχή μεταγλώττιση κατά την επεξεργασία ενός αρχείου. Επομένως, μπορείτε πάντα να παρακολουθείτε σφάλματα στην καρτέλα ΠΡΟΒΛΗΜΑΤΑ.
Εάν θέλετε να χρησιμοποιήσετε διαφορετικό πρόγραμμα επεξεργασίας κειμένου κατά τη μεταγλώττιση του αρχείου, χρησιμοποιήστε το
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 Explorer. Μια εφαρμογή που μόλις αναπτύχθηκε.
Μερικές συμβουλές για σανίδα του σερφ:
1. Για δοκιμή στο περιβάλλον testnet, χρησιμοποιήστε:
2. Εάν θέλετε να δείτε τις εκδόσεις JSON των συναλλαγών και τον τρόπο επεξεργασίας τους από τον κόμβο, εκτελέστε τη δοκιμή με -v (σημαίνει "περιεκτικός"):
Ρύθμιση του Waves Keeper για εργασία με έναν τοπικό κόμβο
2. Εισαγωγή μυστικής φράσης με διακριτικά για το δίκτυο; Για απλότητα, χρησιμοποιήστε τον αρχικό σπόρο του κόμβου σας: waves private node seed with waves tokens. Διεύθυνση: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.
3. Μπορείτε να εκτελέσετε μόνοι σας μια εφαρμογή μιας σελίδας χωρίς διακομιστή χρησιμοποιώντας npm. Ή μεταβείτε στην υπάρχουσα: chrome-ext.wvservices.com/dapp-wallet.html
4. Εισαγάγετε τη διεύθυνση πορτοφολιού από τη δοκιμαστική εκτέλεση (υπογραμμισμένη παραπάνω) στο πλαίσιο κειμένου διεύθυνσης dApp
5. Εισαγάγετε ένα μικρό ποσό στο πεδίο «Κατάθεση» και κάντε κλικ στο κουμπί:
Το Waves Keeper ζητά άδεια να υπογράψει μια InvokeScriptTransaction με πληρωμή 10 WAVES.
6. Επιβεβαιώστε τη συναλλαγή:
Η συναλλαγή δημιουργείται και μεταδίδεται στο δίκτυο. Τώρα μπορείτε να δείτε την ταυτότητά της
7. Παρακολουθήστε τη συναλλαγή χρησιμοποιώντας το Waves Explorer. Εισαγάγετε το αναγνωριστικό στο πεδίο αναζήτησης
Συμπεράσματα και πρόσθετες πληροφορίες
Εξετάσαμε τα εργαλεία για την ανάπτυξη, τη δοκιμή, την ανάπτυξη και τη χρήση απλών dApps στην πλατφόρμα Waves:
Γλώσσα RIDE
VS Code Editor
Waves Explorer
Σανίδα του σέρφιν
Waves Keeper
Σύνδεσμοι για όσους θέλουν να συνεχίσουν να μαθαίνουν RIDE: