RIDE dApp толкундарын кантип куруу, жайылтуу жана сыноо керек

Салам! Бул макалада мен сизге Waves түйүнүндө кадимки dApp кантип жазууну жана иштетүүнү көрсөтөм. Келгиле, керектүү куралдарды, ыкмаларды жана өнүктүрүүнүн мисалын карап көрөлү.

RIDE dApp толкундарын кантип куруу, жайылтуу жана сыноо керек

dApps жана кадимки тиркемелерди иштеп чыгуу схемасы дээрлик бирдей:

  • Код жазуу
  • Жазуу автоматташтырылган тестирлөө
  • Колдонмону ишке киргизүү
  • Сыноо

аспаптар

1. docker түйүн жана Waves Explorer иштетүү үчүн

Түйүндү баштоону каалабасаңыз, бул кадамды өткөрүп жиберсеңиз болот. Анткени, сыноо жана эксперименталдык тармак бар. Бирок өз түйүнүңүздү жайгаштырбай туруп, тестирлөө процесси созулуп кетиши мүмкүн.

  • Сизге ар дайым сыноо белгилери менен жаңы аккаунттар керек болот. Сыноочу тармактык кран ар бир 10 мүнөт сайын 10 ТОЛКУНду өткөрүп берет.
  • Сыноо тармагында орточо блоктоо убактысы 1 мүнөт, түйүндө – 15 секунд. Бул транзакция бир нече ырастоону талап кылганда өзгөчө байкалат.
  • Коомдук сыноо түйүндөрүндө агрессивдүү кэштөө мүмкүн.
  • Алар ошондой эле тейлөөгө байланыштуу убактылуу иштебей калышы мүмкүн.

Мындан ары мен сиз өз түйүнүңүз менен иштеп жатасыз деп ойлойм.

2. Surfboard Command Line Tool

  • Node.js файлын ppa, homebrew же exe аркылуу бул жерден жүктөп алыңыз жана орнотуңуз: https://nodejs.org/en/download/.
  • Surfboard орнотуңуз, ал сизге учурдагы түйүндө сыноолорду жүргүзүүгө мүмкүндүк берет.

npm install -g @waves/surfboard

3. Visual Studio Code плагини

Эгер сиз IDE күйөрмандары болбосоңуз жана текст редакторлорун жактырсаңыз, бул кадам милдеттүү эмес. Бардык керектүү шаймандар буйрук сабынын утилиталары болуп саналат. Эгерде сиз vim колдонсоңуз, плагинге көңүл буруңуз вим-рейд.

Visual Studio Code жүктөп алып, орнотуңуз: 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 маанилүү бөлүм болуп саналат. Ар бир чөйрө төмөнкүдөй конфигурацияланган:

  • Тармактын dApp жана CHAIN_IDди ишке киргизүү үчүн колдонула турган түйүндүн REST API акыркы чекити.
  • Сыноо белгилериңиздин булагы боло турган токендер менен эсепке алуу үчүн жашыруун сөз айкашы.

Көрүнүп тургандай, surfboard.config.json демейки боюнча бир нече чөйрөнү колдойт. Демейки локалдык чөйрө (defaultEnv ачкычы өзгөрүлүүчү параметр).

Wallet-демо колдонмо

Бул бөлүм RIDE тилине шилтеме эмес. Тескерисинче, блокчейнде эмне болуп жатканын жакшыраак түшүнүү үчүн биз орнотуп, сынап жаткан тиркемени карап көрүңүз.

Келгиле, жөнөкөй Wallet-демо тиркемесин карап көрөлү. Ар бир адам dApp дарегине токендерди жөнөтө алат. Сиз өзүңүздүн WAVESиңизди гана ала аласыз. Эки @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

Бул base64 компиляцияланган RIDE кодунун сериясын чыгарат.

"wallet.ride" үчүн сыноо скрипти

карап көрөлү сыноо файлы. JavaScript'тин Mocha алкагында иштейт. "Алдын ала" функциясы жана үч сыноо бар:

  • "Алгач" MassTransferTransaction аркылуу бир нече эсептерди каржылап, сценарийди түзүп, аны блокчейнге жайылтат.
  • "Can depozit" тармакка InvokeScriptTransaction жөнөтөт, эки эсептин ар бири үчүн депозит() функциясын иштетет.
  • Башка адамдардын энбелгилерин эч ким уурдай албаган "Депозиттен ашык акчаны алуу мүмкүн эмес" сыноолору.
  • "Депозитке салууга болот" алуулар туура иштетилгенин текшерет.

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 толкундарын кантип куруу, жайылтуу жана сыноо керек
Waves Explorer. Жаңы эле орнотулган колдонмо.

Кээ бир Surfboard кеңештери:

1. Testnet чөйрөсүндө сыноо үчүн, колдонуңуз:

surfboard test --env=testnet

Сыноо белгилерин алыңыз

2. Эгерде сиз транзакциялардын JSON версияларын жана алар түйүн тарабынан кандайча иштетилип жатканын көргүңүз келсе, тестти -v ("кеңири" дегенди билдирет) менен аткарыңыз:

surfboard test -v

Waves Keeper менен колдонмолорду колдонуу

1. Толкундарды сактагычты иштетүү үчүн орнотуңуз: 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 10 WAVES төлөмү менен InvokeScriptTransaction кол коюуга уруксат сурайт.

6. Транзакцияны ырастаңыз:

RIDE dApp толкундарын кантип куруу, жайылтуу жана сыноо керек
транзакция түзүлөт жана тармакка таратылат. Эми сиз анын ID көрө аласыз

7. Waves Explorer аркылуу транзакцияга мониторинг жүргүзүү. Издөө талаасына ID киргизиңиз

RIDE dApp толкундарын кантип куруу, жайылтуу жана сыноо керек

Корутунду жана кошумча маалымат

Биз Waves платформасында жөнөкөй dApps иштеп чыгуу, сыноо, жайылтуу жана колдонуу куралдарын карап чыктык:

  • RIDE тили
  • VS Code редактору
  • Waves Explorer
  • Серфинг үчүн такта
  • Waves Keeper

RIDE үйрөнүүнү улантууну каалагандар үчүн шилтемелер:

Дагы мисалдар
Мисалдар менен онлайн IDE
Waves Documentation
Telegramдагы иштеп чыгуучунун чаты
Толкундар жана stackoverflow боюнча RIDE
ЖАНЫ! Waves платформасында dApps түзүү боюнча онлайн курстар

RIDE темасына киришүүнү улантыңыз жана биринчи dApp түзүңүз!

TL; DR: bit.ly/2YCFnwY

Source: www.habr.com

Комментарий кошуу