Sut i adeiladu, defnyddio a phrofi'r Waves RIDE dApp
Helo! Yn yr erthygl hon byddaf yn dangos i chi sut i ysgrifennu a rhedeg dApp rheolaidd ar nod Waves. Gadewch i ni edrych ar yr offer angenrheidiol, dulliau ac enghraifft o ddatblygiad.
Mae’r cynllun datblygu ar gyfer dApps a chymwysiadau rheolaidd bron yr un fath:
Ysgrifennu cod
Ysgrifennu profion awtomataidd
Lansio'r cais
Profi
Offer
1. docker i redeg y nod a Waves Explorer
Os nad ydych am ddechrau nod, gallwch hepgor y cam hwn. Wedi'r cyfan, mae rhwydwaith prawf ac arbrofol. Ond heb ddefnyddio'ch nod eich hun, efallai y bydd y broses brofi yn llusgo ymlaen.
Bydd angen cyfrifon newydd arnoch gyda thocynnau prawf yn gyson. Mae'r faucet rhwydwaith prawf yn trosglwyddo 10 TON bob 10 munud.
Yr amser bloc ar gyfartaledd yn y rhwydwaith prawf yw 1 munud, yn y nod - 15 eiliad. Mae hyn yn arbennig o amlwg pan fydd angen cadarnhad lluosog ar drafodiad.
Mae caching ymosodol yn bosibl ar nodau prawf cyhoeddus.
Efallai hefyd na fyddant ar gael dros dro oherwydd gwaith cynnal a chadw.
O hyn ymlaen byddaf yn cymryd yn ganiataol eich bod yn gweithio gyda'ch nod eich hun.
Gosodwch Surfboard, teclyn sy'n eich galluogi i redeg profion ar nod sy'n bodoli eisoes.
npm install -g @waves/surfboard
3. Visual Studio Cod ategyn
Mae'r cam hwn yn ddewisol os nad ydych chi'n gefnogwr o IDEs ac mae'n well gennych olygyddion testun. Mae'r holl offer angenrheidiol yn gyfleustodau llinell orchymyn. Os ydych chi'n defnyddio vim, rhowch sylw i'r ategyn vim-ride.
Lawrlwythwch a gosodwch Visual Studio Code: https://code.visualstudio.com/
Agorwch VS Code a gosodwch yr ategyn tonnau-reidio:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Gwnewch yn siŵr bod y nod yn cael ei lansio trwy'r API REST yn http://localhost:6869:
Swagger REST API ar gyfer nod
2. Dechreuwch enghraifft o Waves Explorer:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Agorwch borwr ac ewch i http://localhost:3000. Fe welwch pa mor gyflym y caiff cylched nodau lleol gwag ei hadeiladu.
Mae Waves Explorer yn dangos enghraifft nod lleol
Strwythur RIDE ac offeryn Bwrdd Syrffio
Creu cyfeiriadur gwag a rhedeg y gorchymyn ynddo
surfboard init
Mae'r gorchymyn yn cychwyn cyfeiriadur gyda strwythur y prosiect, cymwysiadau a phrofion “helo world”. Os byddwch chi'n agor y ffolder hon gyda Chod VS, fe welwch:
Bwrdd syrffio.config.json
O dan y ffolder ./ride/ fe welwch wallet.ride ffeil sengl - y cyfeiriadur lle mae'r cod dApp wedi'i leoli. Byddwn yn dadansoddi dApps yn fyr yn y bloc nesaf.
O dan y ffolder ./test/ fe welwch ffeil *.js. Mae profion yn cael eu storio yma.
./surfboard.config.json – ffeil ffurfweddu ar gyfer rhedeg profion.
Mae Envs yn adran bwysig. Mae pob amgylchedd wedi'i ffurfweddu fel hyn:
Terfynbwynt REST API y nod a ddefnyddir i lansio dApp a CHAIN_ID y rhwydwaith.
Ymadrodd cyfrinachol ar gyfer cyfrif gyda thocynnau a fydd yn ffynonellau eich tocynnau prawf.
Fel y gallwch weld, mae surfboard.config.json yn cefnogi amgylcheddau lluosog yn ddiofyn. Y rhagosodiad yw'r amgylchedd lleol (mae'r allwedd defaultEnv yn baramedr cyfnewidiol).
Cais waled-demo
Nid yw'r adran hon yn gyfeiriad at yr iaith RIDE. Yn hytrach, edrychwch ar y cymhwysiad rydyn ni'n ei ddefnyddio a'i brofi i ddeall yn well beth sy'n digwydd yn y blockchain.
Gadewch i ni edrych ar gymhwysiad demo Wallet syml. Gall unrhyw un anfon tocynnau i gyfeiriad dApp. Dim ond eich WAVES y gallwch chi ei dynnu'n ôl. Mae dwy swyddogaeth @Callable ar gael trwy InvokeScriptTransaction:
deposit()sy'n gofyn am daliad atodedig mewn TONNAU
withdraw(amount: Int)sy'n dychwelyd tocynnau
Trwy gydol cylch bywyd dApp, bydd y strwythur (cyfeiriad → swm) yn cael ei gynnal:
Gweithred
Cyflwr canlyniadol
cychwynnol
gwag
Alice yn dyddodi 5 TON
alice-cyfeiriad → 500000000
Alice yn tynnu 4 TON yn ôl
alice-cyfeiriad → 100000000
bob-cyfeiriad → 200000000
Dyma'r cod i ddeall y sefyllfa yn llawn:
# 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
Gellir dod o hyd i god enghreifftiol hefyd yn GitHub.
Mae'r ategyn VSCode yn cefnogi crynhoad parhaus wrth olygu ffeil. Felly, gallwch chi bob amser fonitro gwallau yn y tab PROBLEMS.
Os ydych chi am ddefnyddio golygydd testun gwahanol wrth lunio'r ffeil, defnyddiwch
surfboard compile ride/wallet.ride
Bydd hyn yn allbwn cyfres o god RIDE a luniwyd gan base64.
Sgript brawf ar gyfer 'wallet.ride'
Gadewch i ni edrych ar ffeil prawf. Wedi'i bweru gan fframwaith Mocha JavaScript. Mae yna swyddogaeth “Cyn” a thri phrawf:
Mae “Cyn” yn ariannu cyfrifon lluosog trwy MassTransferTransaction, yn llunio'r sgript a'i ddefnyddio i'r blockchain.
Mae “Can deposit” yn anfonTransaction InvokeScript i'r rhwydwaith, gan actifadu'r swyddogaeth blaendal() ar gyfer pob un o'r ddau gyfrif.
“Methu tynnu mwy nag a adneuwyd” profion na all neb ddwyn tocynnau pobl eraill.
Mae “Gallu adneuo” yn gwirio bod codi arian yn cael ei brosesu'n gywir.
Rhedeg profion o Surfboard a dadansoddi canlyniadau yn Waves Explorer
I redeg y prawf, rhedeg
surfboard test
Os oes gennych chi sgriptiau lluosog (er enghraifft, mae angen sgript defnyddio ar wahân arnoch chi), gallwch chi redeg
surfboard test my-scenario.js
Bydd Surfboard yn casglu'r ffeiliau prawf yn y ffolder ./test/ ac yn rhedeg y sgript ar y nod sydd wedi'i ffurfweddu yn surfboard.config.json. Ar ôl ychydig eiliadau fe welwch rywbeth fel hyn:
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)
Hwre! Profion wedi eu pasio. Nawr gadewch i ni edrych ar yr hyn sy'n digwydd wrth ddefnyddio Waves Explorer: edrychwch ar y blociau neu gludwch un o'r cyfeiriadau uchod i'r chwiliad (er enghraifft, y cyfatebol wallet#. Yno gallwch ddod o hyd i'r hanes trafodion, statws dApp, ffeil ddeuaidd wedi'i dadgrynhoi.
Archwiliwr Tonnau. Cais sydd newydd gael ei ddefnyddio.
2. Mewnforio ymadrodd cyfrinachol gyda thocynnau ar gyfer y rhwydwaith? Er mwyn symlrwydd, defnyddiwch hedyn cychwynnol eich nod: waves private node seed with waves tokens. Cyfeiriad: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.