ProHoster > Блог > Isakoso > Bii o ṣe le Kọ, Ranṣiṣẹ ati Idanwo Awọn igbi RIDE dApp
Bii o ṣe le Kọ, Ranṣiṣẹ ati Idanwo Awọn igbi RIDE dApp
Pẹlẹ o! Ninu nkan yii Emi yoo fihan ọ bi o ṣe le kọ ati ṣiṣe dApp deede kan lori ipade Waves kan. Jẹ ki a wo awọn irinṣẹ pataki, awọn ọna ati apẹẹrẹ ti idagbasoke.
Eto idagbasoke fun dApps ati awọn ohun elo deede jẹ fere kanna:
Koodu kikọ
Kikọ adaṣe adaṣe
Ifilọlẹ ohun elo
Idanwo
Awọn irin-iṣẹ
1. docker lati ṣiṣẹ ipade ati Waves Explorer
Ti o ko ba fẹ bẹrẹ ipade kan, o le foju igbesẹ yii. Lẹhinna, idanwo ati nẹtiwọọki esiperimenta wa. Ṣugbọn laisi gbigbe oju ipade tirẹ, ilana idanwo le fa siwaju.
Iwọ yoo nilo awọn akọọlẹ tuntun nigbagbogbo pẹlu awọn ami idanwo. Faucet nẹtiwọki idanwo n gbe 10 WAVES ni gbogbo iṣẹju mẹwa 10.
Apapọ akoko Àkọsílẹ ni nẹtiwọki idanwo jẹ iṣẹju 1, ni ipade - 15 awọn aaya. Eyi jẹ akiyesi paapaa nigbati idunadura kan nilo awọn ijẹrisi lọpọlọpọ.
Ibinu caching jẹ ṣee ṣe lori gbangba igbeyewo apa.
Wọn tun le ma wa fun igba diẹ nitori itọju.
Lati isisiyi lọ Emi yoo ro pe o n ṣiṣẹ pẹlu ipade tirẹ.
Fi Surfboard sori ẹrọ, ohun elo ti o fun ọ laaye lati ṣiṣe awọn idanwo lori ipade ti o wa tẹlẹ.
npm install -g @waves/surfboard
3. Visual Studio Code itanna
Igbesẹ yii jẹ iyan ti o ko ba jẹ olufẹ ti IDE ati fẹ awọn olootu ọrọ. Gbogbo awọn irinṣẹ pataki jẹ awọn ohun elo laini aṣẹ. Ti o ba lo vim, san ifojusi si ohun itanna naa vim-gigun.
Ṣe igbasilẹ ati fi koodu Situdio wiwo sori ẹrọ: https://code.visualstudio.com/
Ṣii koodu VS ki o fi ohun itanna igbi-gigun sori ẹrọ:
REST API aaye ipari ti ipade ti yoo ṣee lo lati ṣe ifilọlẹ dApp ati CHAIN_ID ti netiwọki naa.
Gbolohun aṣiri fun akọọlẹ kan pẹlu awọn ami ti yoo jẹ awọn orisun ti awọn ami idanwo rẹ.
Bi o ti le rii, surfboard.config.json ṣe atilẹyin awọn agbegbe pupọ nipasẹ aiyipada. Aiyipada jẹ agbegbe agbegbe (bọtini aiyipadaEnv jẹ paramita iyipada).
Apamọwọ-demo elo
Abala yii kii ṣe itọkasi ede RIDE. Dipo, wo ohun elo ti a gbe lọ ati idanwo lati ni oye daradara ohun ti n ṣẹlẹ ninu blockchain.
Jẹ ki a wo ohun elo Wallet-demo ti o rọrun. Ẹnikẹni le fi awọn ami ranṣẹ si adirẹsi dApp kan. O le yọ awọn igbi rẹ kuro. Awọn iṣẹ @Callable meji wa nipasẹ InvokeScriptTransaction:
deposit()eyiti o nilo isanwo ti a so ni WAVES
withdraw(amount: Int)eyi ti o pada àmi
Ni gbogbo igbesi aye dApp, eto naa (adirẹsi → iye) yoo wa ni itọju:
Action
Abajade ipinle
ni ibẹrẹ
sofo
Alice idogo 5 igbi
alice-adirẹsi → 500000000
Bob idogo 2 igbi
alice-adirẹsi → 500000000
bob-adirẹsi → 200000000
Bob yọ 7 igbi
TI SỌ!
Alice yọ 4 igbi
alice-adirẹsi → 100000000
bob-adirẹsi → 200000000
Eyi ni koodu lati loye ipo naa ni kikun:
# 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
Ohun itanna VSCode ṣe atilẹyin akojọpọ lemọlemọfún lakoko ṣiṣatunṣe faili kan. Nitorina, o le nigbagbogbo bojuto awọn aṣiṣe ninu awọn ISORO taabu.
Ti o ba fẹ lo olootu ọrọ ti o yatọ nigbati o ba n ṣajọ faili, lo
surfboard compile ride/wallet.ride
Eyi yoo ṣe agbejade lẹsẹsẹ base64 ti o ṣajọ koodu RIDE.
Idanwo iwe afọwọkọ fun 'wallet.ride'
Jẹ ki a wo igbeyewo faili. Agbara nipasẹ JavaScript's Mocha ilana. Iṣẹ “Ṣaaju” wa ati awọn idanwo mẹta:
“Ṣaaju ki o to” ṣe inawo awọn akọọlẹ pupọ nipasẹ MassTransferTransaction, ṣajọ iwe afọwọkọ ati gbe lọ si blockchain.
"Le ṣe idogo" firanṣẹ InvokeScriptTransaction si nẹtiwọọki, mu iṣẹ idogo () ṣiṣẹ fun ọkọọkan awọn akọọlẹ meji naa.
"Ko le yọkuro diẹ ẹ sii ju ti a ti fi silẹ" awọn idanwo ti ko si ẹnikan ti o le ji awọn ami eniyan miiran.
"Le beebe" sọwedowo ti withdrawals ti wa ni ilọsiwaju ti tọ.
Ṣiṣe awọn idanwo lati Surfboard ki o ṣe itupalẹ awọn abajade ni Waves Explorer
Lati ṣiṣe idanwo naa, ṣiṣe
surfboard test
Ti o ba ni awọn iwe afọwọkọ pupọ (fun apẹẹrẹ, o nilo iwe afọwọkọ imuṣiṣẹ lọtọ), o le ṣiṣe
surfboard test my-scenario.js
Surfboard yoo gba awọn faili idanwo ni ./test/ folda ati ṣiṣe iwe afọwọkọ lori ipade ti o tunto ni surfboard.config.json. Lẹhin iṣẹju diẹ iwọ yoo rii nkan bii eyi:
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! Awọn idanwo ti kọja. Bayi jẹ ki a wo ohun ti o ṣẹlẹ nigba lilo Waves Explorer: wo awọn bulọọki tabi lẹẹmọ ọkan ninu awọn adirẹsi loke sinu wiwa (fun apẹẹrẹ, ibaramu. wallet#. Nibẹ ni o le wa itan idunadura, ipo dApp, faili alakomeji ti a kojọpọ.
Ṣiṣeto Olutọju Waves lati ṣiṣẹ pẹlu ipade agbegbe kan
2. Ṣe agbewọle gbolohun aṣiri pẹlu awọn ami fun nẹtiwọọki? Fun ayedero, lo irugbin ibẹrẹ ti oju ipade rẹ: waves private node seed with waves tokens. Adirẹsi: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.