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.

Bii o ṣe le Kọ, Ranṣiṣẹ ati Idanwo Awọn igbi RIDE dApp

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ẹ.

2. Surfboard Òfin Line Ọpa

  • Ṣe igbasilẹ ati fi Node.js sori ẹrọ ni lilo ppa, homebrew tabi exe nibi: https://nodejs.org/en/download/.
  • 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ọ:

Bii o ṣe le Kọ, Ranṣiṣẹ ati Idanwo Awọn igbi RIDE dApp

Itẹsiwaju aṣawakiri Waves Keeper: https://wavesplatform.com/products-keeper

Ṣe!

Bẹrẹ ipade ati Waves Explorer

1. Bẹrẹ ipade:

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

Rii daju pe ipade naa ti ṣe ifilọlẹ nipasẹ REST API in http://localhost:6869:

Bii o ṣe le Kọ, Ranṣiṣẹ ati Idanwo Awọn igbi RIDE dApp
Swagger REST API fun ipade

2. Bẹrẹ apẹẹrẹ ti Waves Explorer:

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

Ṣii ẹrọ aṣawakiri kan ki o lọ si http://localhost:3000. Iwọ yoo rii bi o ṣe yarayara Circuit ipade agbegbe ti o ṣofo ti kọ.

Bii o ṣe le Kọ, Ranṣiṣẹ ati Idanwo Awọn igbi RIDE dApp
Waves Explorer ṣe afihan apẹẹrẹ ipade agbegbe kan

RIDE be ati Surfboard ọpa

Ṣẹda itọsọna ofo ati ṣiṣe aṣẹ ninu rẹ

surfboard init

Awọn pipaṣẹ initializes a liana pẹlu ise agbese be, "hello aye" ohun elo ati igbeyewo. Ti o ba ṣii folda yii pẹlu koodu VS, iwọ yoo rii:

Bii o ṣe le Kọ, Ranṣiṣẹ ati Idanwo Awọn igbi RIDE dApp
Surfboard.config.json

  • Labẹ ./ride/ folda iwọ yoo wa faili kan wallet.ride - itọsọna nibiti koodu dApp wa. A yoo ṣe itupalẹ awọn dApps ni ṣoki ni bulọọki atẹle.
  • Labẹ ./test/ folda iwọ yoo wa faili * .js kan. Awọn idanwo ti wa ni ipamọ nibi.
  • ./surfboard.config.json – faili iṣeto ni fun ṣiṣe awọn igbeyewo.

Envs jẹ apakan pataki. Ayika kọọkan jẹ atunto bii eyi:

  • 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

Ayẹwo koodu tun le ri ni GitHub.

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.

Bii o ṣe le Kọ, Ranṣiṣẹ ati Idanwo Awọn igbi RIDE dApp
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ọ.

Bii o ṣe le Kọ, Ranṣiṣẹ ati Idanwo Awọn igbi RIDE dApp
Waves Explorer. Ohun elo ti o ṣẹṣẹ ti ran lọ.

Diẹ ninu Awọn imọran Surfboard:

1. Lati ṣe idanwo ni agbegbe testnet, lo:

surfboard test --env=testnet

Gba awọn ami idanwo

2. Ti o ba fẹ lati wo awọn ẹya JSON ti awọn iṣowo ati bi wọn ṣe ṣe ilana nipasẹ ipade, ṣiṣe idanwo naa pẹlu -v (tumọ si 'verbose'):

surfboard test -v

Lilo awọn ohun elo pẹlu Olutọju igbi

1. Ṣeto Olutọju Waves lati ṣiṣẹ: http://localhost:6869

Bii o ṣe le Kọ, Ranṣiṣẹ ati Idanwo Awọn igbi RIDE dApp
Ṣ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.

3. O le ṣiṣe ohun elo oju-iwe kan laisi olupin funrararẹ ni lilo npm. Tabi lọ si eyi ti o wa tẹlẹ: chrome-ext.wvservices.com/dapp-wallet.html

4. Tẹ adirẹsi apamọwọ sii lati ṣiṣe idanwo naa (ti o wa loke) sinu apoti ọrọ adirẹsi dApp

5. Tẹ iye diẹ sii ninu aaye “Idogo” ki o tẹ bọtini naa:

Bii o ṣe le Kọ, Ranṣiṣẹ ati Idanwo Awọn igbi RIDE dApp
Waves Keeper beere igbanilaaye lati fowo si InvokeScriptTransaction pẹlu sisanwo ti 10 WAVES.

6. Jẹrisi idunadura naa:

Bii o ṣe le Kọ, Ranṣiṣẹ ati Idanwo Awọn igbi RIDE dApp
Iṣowo naa ti ṣẹda ati igbohunsafefe si nẹtiwọọki naa. Bayi o le rii ID rẹ

7. Bojuto idunadura nipa lilo Waves Explorer. Tẹ ID sii ni aaye wiwa

Bii o ṣe le Kọ, Ranṣiṣẹ ati Idanwo Awọn igbi RIDE dApp

Awọn ipari ati alaye afikun

A wo awọn irinṣẹ fun idagbasoke, idanwo, imuṣiṣẹ ati lilo dApps ti o rọrun lori Platform Waves:

  • Ede gùn
  • VS Code Olootu
  • Waves Explorer
  • Surfboard
  • Waves Olutọju

Awọn ọna asopọ fun awọn ti o fẹ tẹsiwaju kikọ RIDE:

Awọn apẹẹrẹ diẹ sii
Online IDE pẹlu apẹẹrẹ
Iwe Iwe igbi
Iwiregbe Olùgbéejáde ni Telegram
Igbi ati RIDE on stackoverflow
TITUN! Awọn iṣẹ ori ayelujara lori ṣiṣẹda dApps lori Platform Waves

Tẹsiwaju lilu sinu koko RIDE ki o ṣẹda dApp akọkọ rẹ!

TL; DR: bit.ly/2YCFnwY

orisun: www.habr.com

Fi ọrọìwòye kun