Paano Bumuo, Mag-deploy at Subukan ang mga Waves RIDE dApp
Kamusta! Sa artikulong ito ipapakita ko sa iyo kung paano magsulat at magpatakbo ng isang regular na dApp sa isang Waves node. Tingnan natin ang mga kinakailangang kasangkapan, pamamaraan at isang halimbawa ng pag-unlad.
Ang scheme ng pag-develop para sa dApps at mga regular na application ay halos pareho:
Sinusulat namin ang code
Pagsusulat ng awtomatikong pagsubok
Ilunsad ang application
Pagsubok
Tools
1. docker upang patakbuhin ang node at Waves Explorer
Kung ayaw mong magsimula ng node, maaari mong laktawan ang hakbang na ito. Pagkatapos ng lahat, mayroong isang pagsubok at pang-eksperimentong network. Ngunit nang hindi nagde-deploy ng sarili mong node, maaaring tumagal ang proseso ng pagsubok.
Patuloy kang mangangailangan ng mga bagong account na may mga test token. Ang faucet ng network ng pagsubok ay naglilipat ng 10 WAVES bawat 10 minuto.
Ang average na oras ng block sa network ng pagsubok ay 1 minuto, sa node - 15 segundo. Ito ay lalong kapansin-pansin kapag ang isang transaksyon ay nangangailangan ng maraming kumpirmasyon.
Posible ang agresibong pag-cache sa mga pampublikong test node.
Maaari ding pansamantalang hindi available ang mga ito dahil sa maintenance.
Mula ngayon ay ipagpalagay ko na ikaw ay nagtatrabaho sa iyong sariling node.
I-install ang Surfboard, isang tool na nagbibigay-daan sa iyong magpatakbo ng mga pagsubok sa isang umiiral nang node.
npm install -g @waves/surfboard
3. Visual Studio Code plugin
Opsyonal ang hakbang na ito kung hindi ka fan ng mga IDE at mas gusto ang mga text editor. Ang lahat ng kinakailangang tool ay mga command line utility. Kung gumagamit ka ng vim, bigyang pansin ang plugin vim-ride.
I-download at i-install ang Visual Studio Code: https://code.visualstudio.com/
Buksan ang VS Code at i-install ang waves-ride plugin:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Magbukas ng browser at pumunta sa http://localhost:3000. Makikita mo kung gaano kabilis nabuo ang isang walang laman na lokal na node circuit.
Ang Waves Explorer ay nagpapakita ng isang lokal na halimbawa ng node
Istraktura ng RIDE at tool sa Surfboard
Lumikha ng isang walang laman na direktoryo at patakbuhin ang utos dito
surfboard init
Nagsisimula ang command ng isang direktoryo na may istraktura ng proyekto, mga aplikasyon at pagsubok na "hello world". Kung bubuksan mo ang folder na ito gamit ang VS Code, makikita mo ang:
Surfboard.config.json
Sa ilalim ng ./ride/ folder ay makikita mo ang isang file na wallet.ride - ang direktoryo kung saan matatagpuan ang dApp code. Dagli naming susuriin ang mga dApps sa susunod na block.
Sa ilalim ng ./test/ folder ay makikita mo ang isang *.js file. Ang mga pagsubok ay naka-imbak dito.
./surfboard.config.json – configuration file para sa pagpapatakbo ng mga pagsubok.
Ang Envs ay isang mahalagang seksyon. Ang bawat kapaligiran ay naka-configure tulad nito:
REST API endpoint ng node na gagamitin para ilunsad ang dApp at CHAIN_ID ng network.
Isang lihim na parirala para sa isang account na may mga token na magiging mapagkukunan ng iyong mga token sa pagsubok.
Gaya ng nakikita mo, sinusuportahan ng surfboard.config.json ang maraming kapaligiran bilang default. Ang default ay ang lokal na kapaligiran (ang defaultEnv key ay isang nababagong parameter).
Wallet-demo application
Ang seksyong ito ay hindi isang sanggunian sa wikang RIDE. Sa halip, tingnan ang application na idini-deploy namin at sinubukan upang mas maunawaan kung ano ang nangyayari sa blockchain.
Tingnan natin ang isang simpleng Wallet-demo application. Kahit sino ay maaaring magpadala ng mga token sa isang dApp address. Maaari mo lamang bawiin ang iyong WAVES. Dalawang @Callable function ang available sa pamamagitan ng InvokeScriptTransaction:
deposit()na nangangailangan ng kalakip na pagbabayad sa WAVES
withdraw(amount: Int)na nagbabalik ng mga token
Sa buong dApp lifecycle, ang istraktura (address → amount) ay pananatilihin:
aksyon
Nagreresultang estado
pauna
walang laman
Nagdeposito si Alice ng 5 WAVES
alice-address → 500000000
Nagdeposito si Bob ng 2 WAVES
alice-address → 500000000
bob-address → 200000000
Nag-withdraw si Bob ng 7 WAVES
ITINANGGI!
Nag-withdraw si Alice ng 4 WAVES
alice-address → 100000000
bob-address → 200000000
Narito ang code upang lubos na maunawaan ang sitwasyon:
# 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
Sinusuportahan ng VSCode plugin ang tuluy-tuloy na pagsasama-sama habang nag-e-edit ng file. Samakatuwid, maaari mong palaging subaybayan ang mga error sa tab na PROBLEMA.
Kung gusto mong gumamit ng ibang text editor kapag kino-compile ang file, gamitin
surfboard compile ride/wallet.ride
Maglalabas ito ng isang serye ng base64 compiled RIDE code.
Pansubok na script para sa 'wallet.ride'
Tignan natin test file. Pinapatakbo ng Mocha framework ng JavaScript. Mayroong function na "Bago" at tatlong pagsubok:
Pinopondohan ng “Before” ang maraming account sa pamamagitan ng MassTransferTransaction, kino-compile ang script at i-deploy ito sa blockchain.
Ang “Maaaring magdeposito” ay nagpapadala ng InvokeScriptTransaction sa network, na nag-a-activate ng deposit() function para sa bawat isa sa dalawang account.
"Hindi maaaring mag-withdraw ng higit sa na-deposito" na mga pagsubok na walang sinuman ang maaaring magnakaw ng mga token ng ibang tao.
Ang "Maaaring magdeposito" ay tumitingin na ang mga withdrawal ay naproseso nang tama.
Magpatakbo ng mga pagsubok mula sa Surfboard at suriin ang mga resulta sa Waves Explorer
Upang patakbuhin ang pagsubok, tumakbo
surfboard test
Kung marami kang script (halimbawa, kailangan mo ng hiwalay na deployment script), maaari kang tumakbo
surfboard test my-scenario.js
Kokolektahin ng Surfboard ang mga test file sa ./test/ folder at patakbuhin ang script sa node na naka-configure sa surfboard.config.json. Pagkatapos ng ilang segundo, makakakita ka ng ganito:
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)
Hooray! Lumipas ang mga pagsubok. Ngayon tingnan natin kung ano ang mangyayari kapag gumagamit ng Waves Explorer: tingnan ang mga bloke o i-paste ang isa sa mga address sa itaas sa paghahanap (halimbawa, ang kaukulang wallet#. Doon mo mahahanap ang kasaysayan ng transaksyon, katayuan ng dApp, decompiled binary file.
Waves Explorer. Isang application na kaka-deploy pa lang.
Ilang Tip sa Surfboard:
1. Upang subukan sa kapaligiran ng testnet, gamitin ang:
2. Kung gusto mong makita ang mga bersyon ng JSON ng mga transaksyon at kung paano sila pinoproseso ng node, patakbuhin ang pagsubok gamit ang -v (nangangahulugang 'verbose'):
Pagse-set up ng Waves Keeper upang gumana sa isang lokal na node
2. Mag-import ng lihim na parirala na may mga token para sa network? Para sa pagiging simple, gamitin ang paunang binhi ng iyong node: waves private node seed with waves tokens. Address: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.