Чӣ тавр сохтани мавҷҳо RIDE dApp

Салом! Дар ин мақола ман ба шумо нишон медиҳам, ки чӣ гуна dApp-и муқаррариро дар гиреҳи Waves нависед ва идора кунед. Воситахои зарурй, усулхо ва мисоли тараккиётро дида мебароем.

Чӣ тавр сохтани мавҷҳо RIDE dApp

Нақшаи таҳияи dApps ва барномаҳои муқаррарӣ тақрибан якхела аст:

  • Мо кодро менависем
  • Навиштани санҷиши автоматӣ
  • Оғози барнома
  • Санҷиш

Tools

1. docker барои иҷро кардани гиреҳ ва Waves Explorer

Агар шумо нахоҳед, ки гиреҳро оғоз кунед, шумо метавонед ин қадамро гузаред. Охир, сети озмоишию тачрибавй вучуд дорад. Аммо бидуни ҷойгиркунии гиреҳи худ, раванди санҷиш метавонад кашол ёбад.

  • Шумо ҳамеша ба ҳисобҳои нав бо аломатҳои санҷиш ниёз доред. Крани шабакавии санҷишӣ дар ҳар 10 дақиқа 10 МАВҷро интиқол медиҳад.
  • Вақти миёнаи блок дар шабакаи санҷишӣ 1 дақиқа, дар гиреҳ 15 сония аст. Ин хусусан вақте намоён аст, ки транзаксия тасдиқҳои сершуморро талаб мекунад.
  • Дар гиреҳҳои санҷишии ҷамъиятӣ кэшкунии хашмгин имконпазир аст.
  • Онҳо инчунин метавонанд бо сабаби нигоҳдорӣ муваққатан дастнорас бошанд.

Минбаъд ман тахмин мекунам, ки шумо бо гиреҳи худ кор карда истодаед.

2. Асбоби сатри фармони Surfboard

  • Node.js -ро бо истифода аз ppa, homebrew ё exe дар ин ҷо зеркашӣ ва насб кунед: https://nodejs.org/en/download/.
  • Surfboard, асбобе насб кунед, ки ба шумо имкон медиҳад санҷишҳоро дар гиреҳи мавҷуда иҷро кунед.

npm install -g @waves/surfboard

3. Васлкунаки Visual Studio Code

Ин қадам ихтиёрист, агар шумо мухлиси IDE набошед ва муҳаррирони матниро афзалтар донед. Ҳама асбобҳои зарурӣ утилитаҳои сатри фармон мебошанд. Агар шумо vim -ро истифода баред, ба плагин диққат диҳед вим-савор.

Code Visual Studio зеркашӣ ва насб кунед: https://code.visualstudio.com/

Рамзи VS-ро кушоед ва плагини waves-ride -ро насб кунед:

Чӣ тавр сохтани мавҷҳо RIDE dApp

Васеъ кардани браузери Waves Keeper: https://wavesplatform.com/products-keeper

Муҳокима!

Гиреҳ ва Waves Explorer-ро оғоз кунед

1. Гиреҳро оғоз кунед:

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

Боварӣ ҳосил кунед, ки гиреҳ тавассути REST API дар http://localhost:6869:

Чӣ тавр сохтани мавҷҳо RIDE dApp
Swagger REST API барои гиреҳ

2. Як мисоли Waves Explorer-ро оғоз кунед:

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

Браузерро кушоед ва ба он равед http://localhost:3000. Шумо хоҳед дид, ки чӣ тавр як схемаи гиреҳи маҳаллӣ холӣ сохта мешавад.

Чӣ тавр сохтани мавҷҳо RIDE dApp
Waves Explorer як мисоли гиреҳи маҳаллиро нишон медиҳад

Сохтори RIDE ва абзори Surfboard

Феҳристи холӣ эҷод кунед ва фармонро дар он иҷро кунед

surfboard init

Фармон директорияро бо сохтори лоиҳа, замимаҳо ва санҷишҳои "салом ҷаҳон" оғоз мекунад. Агар шумо ин папкаро бо VS Code кушоед, шумо хоҳед дид:

Чӣ тавр сохтани мавҷҳо RIDE dApp
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-деморо бубинем. Ҳар кас метавонад токенҳоро ба суроғаи dApp фиристад. Шумо танҳо метавонед МАВҶҲОИ худро бозпас гиред. Ду функсияи @Callable тавассути InvokeScriptTransaction дастрасанд:

  • deposit()ки пардохти замима дар WAVES талаб мекунад
  • withdraw(amount: Int)ки токенҳоро бармегардонад

Дар тӯли давраи ҳаёти dApp, сохтор (суроға → маблағ) нигоҳ дошта мешавад:

Чорабиниҳои
Ҳолати натиҷа

аввал
холӣ

Алис 5 МАВҶҳоро амонат мегузорад
алис-адрес → 500000000

Боб амонатҳо 2 МАВҶ

алис-адрес → 500000000
суроғаи bob → 200000000

Боб 7 МАВҷро мегирад
ИНКОРИ!

Алиса 4 МАВҶРО бозпас мегирад
алис-адрес → 100000000
суроғаи bob → 200000000

Ин аст код барои пурра фаҳмидани вазъият:

# 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 ҳангоми таҳрири файл тартиб додани пайвастаро дастгирӣ мекунад. Аз ин рӯ, шумо ҳамеша метавонед хатогиҳоро дар ҷадвали ПРОБЛЕМАҲО назорат кунед.

Чӣ тавр сохтани мавҷҳо RIDE dApp
Агар шумо хоҳед, ки ҳангоми тартиб додани файл муҳаррири матнии дигарро истифода баред, истифода баред

surfboard compile ride/wallet.ride

Ин як қатор рамзи RIDE тартибдодашудаи base64 мебарорад.

Скрипти санҷишӣ барои 'wallet.ride'

Биёед бубинем файли санҷишӣ. Бо чаҳорчӯбаи Mocha JavaScript таҳия шудааст. Функсияи "Пеш" ва се санҷиш мавҷуд аст:

  • "Пеш аз" тавассути MassTransferTransaction ҳисобҳои сершуморро маблағгузорӣ мекунад, скриптро тартиб медиҳад ва онро дар blockchain ҷойгир мекунад.
  • "Метавонед пасандоз гузоред" ба шабака InvokeScriptTransaction мефиристад, ки функсияи depozit()-ро барои ҳар ду ҳисоб фаъол мекунад.
  • Санҷишҳои "бештар аз маблағи пасандоз гирифташударо бозпас гирифтан мумкин нест", ки ҳеҷ кас наметавонад токенҳои дигаронро дуздад.
  • "Метавонед пасандоз" чек мекунад, ки гирифтани маблағ дуруст коркард шудааст.

Санҷишҳоро аз 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, файли бинарии декомпиляцияшударо пайдо кунед.

Чӣ тавр сохтани мавҷҳо RIDE dApp
Explorer мавҷҳо. Замимае, ки нав ҷойгир карда шудааст.

Баъзе маслиҳатҳои Surfboard:

1. Барои санҷиш дар муҳити testnet, истифода баред:

surfboard test --env=testnet

Нишонаҳои санҷишӣ гиред

2. Агар шумо хоҳед бинед, ки версияҳои JSON транзаксияҳо ва тарзи коркарди онҳо аз ҷониби гиреҳ, санҷишро бо -v иҷро кунед (маънои “муфассал”):

surfboard test -v

Истифодаи барномаҳо бо Waves Keeper

1. Waves Keeper-ро барои кор насб кунед: http://localhost:6869

Чӣ тавр сохтани мавҷҳо RIDE dApp
Насб кардани Waves Keeper барои кор бо гиреҳи маҳаллӣ

2. Ибораи махфиро бо нишонаҳо барои шабака ворид кунед? Барои соддагӣ, тухмии ибтидоии гиреҳи худро истифода баред: waves private node seed with waves tokens. Суроға: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Шумо метавонед худатон бо истифода аз npm як барномаи бе сервери саҳифаро иҷро кунед. Ё ба яке аз мавҷуда равед: chrome-ext.wvservices.com/dapp-wallet.html

4. Суроғаи ҳамёнро аз санҷиши санҷиш (дар боло хатт карда шудааст) ба қуттии матнии суроғаи dApp ворид кунед

5. Дар майдони "Амонат" маблағи хурдро ворид кунед ва тугмаро пахш кунед:

Чӣ тавр сохтани мавҷҳо RIDE dApp
Waves Keeper барои имзои InvokeScriptTransaction бо пардохти 10 WAVES иҷозат талаб мекунад.

6. Амалиётро тасдиқ кунед:

Чӣ тавр сохтани мавҷҳо RIDE dApp
Муомилот сохта мешавад ва ба шабака пахш мешавад. Акнун шумо метавонед шахсияти ӯро бубинед

7. Муомилотро бо истифода аз Waves Explorer назорат кунед. Дар майдони ҷустуҷӯ ID-ро ворид кунед

Чӣ тавр сохтани мавҷҳо RIDE dApp

Хулоса ва маълумоти иловагӣ

Мо абзорҳоро барои таҳия, озмоиш, ҷобаҷогузорӣ ва истифодаи dApps оддӣ дар Платформаи Waves дида баромадем:

  • Забони RIDE
  • Муҳаррири рамзи VS
  • Explorer мавҷҳо
  • Сурхпуш
  • Нигоҳдори мавҷҳо

Истинодҳо барои онҳое, ки мехоҳанд омӯзиши RIDE-ро идома диҳанд:

Мисолҳои бештар
IDE онлайн бо мисолҳо
Ҳуҷҷати мавҷҳо
Сӯҳбати таҳиягар дар Telegram
Мавҷҳо ва RIDE дар stackoverflow
НАВ! Курсҳои онлайн оид ба эҷоди dApps дар платформаи Waves

Гузаришро ба мавзӯи RIDE идома диҳед ва аввалин dApp-и худро эҷод кунед!

ХИБ; DR: bit.ly/2YCFnwY

Манбаъ: will.com

Илова Эзоҳ