RIDE dApp толқындарын қалай құруға, орналастыруға және сынауға болады

Сәлеметсіз бе! Бұл мақалада мен сізге Waves түйінінде кәдімгі dApp қалай жазу және іске қосу керектігін көрсетемін. Қажетті құралдарды, әдістерді және дамудың мысалын қарастырайық.

RIDE dApp толқындарын қалай құруға, орналастыруға және сынауға болады

dApps және кәдімгі қолданбаларды әзірлеу схемасы дерлік бірдей:

  • Біз кодты жазамыз
  • Жазу автоматтандырылған тестілеу
  • Қолданбаны іске қосыңыз
  • Тестілеу

Құралдар

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 қолдансаңыз, плагинге назар аударыңыз вим-рейд.

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 коды арқылы ашсаңыз, мынаны көресіз:

RIDE dApp толқындарын қалай құруға, орналастыруға және сынауға болады
Surfboard.config.json

  • ./ride/ қалтасының астында сіз wallet.ride жалғыз файлын таба аласыз - dApp коды орналасқан каталог. Келесі блокта dApp қолданбаларын қысқаша талдаймыз.
  • ./test/ қалтасының астында *.js файлын табасыз. Тесттер осында сақталады.
  • ./surfboard.config.json – сынақтарды орындауға арналған конфигурация файлы.

Envs - маңызды бөлім. Әрбір орта келесідей конфигурацияланады:

  • Желінің dApp және CHAIN_ID іске қосу үшін пайдаланылатын түйіннің REST API соңғы нүктесі.
  • Сынақ таңбалауыштарының көзі болатын токендері бар тіркелгіге арналған құпия сөз тіркесі.

Көріп отырғаныңыздай, surfboard.config.json әдепкі бойынша бірнеше ортаны қолдайды. Әдепкі жергілікті орта болып табылады (defaultEnv пернесі өзгеретін параметр болып табылады).

Әмиян-демо қолданбасы

Бұл бөлім RIDE тіліне сілтеме емес. Керісінше, блокчейнде не болып жатқанын жақсы түсіну үшін біз қолданатын және сынайтын қолданбаны қараңыз.

Қарапайым Wallet-демо қосымшасын қарастырайық. Кез келген адам таңбалауыштарды dApp мекенжайына жібере алады. Сіз тек WAVES-ті алып тастай аласыз. Екі @Callable функциясы InvokeScriptTransaction арқылы қол жетімді:

  • deposit()ол WAVES жүйесінде қосымша төлемді талап етеді
  • withdraw(amount: Int)ол белгілерді қайтарады

dApp өмірлік циклі бойы құрылым (мекен-жай → сома) сақталады:

Action
Нәтижедегі күй

бастапқы
бос

Алиса 5 ТОЛҚЫНДЫ салады
alice-мекен-жайы → 500000000

Боб 2 ТОЛҚЫНДЫ салады

alice-мекен-жайы → 500000000
bob-мекен-жайы → 200000000

Боб 7 ТОЛҚЫНДЫ алып тастайды
ЖАРЫҚ АЛДЫ!

Алиса 4 ТОЛҚЫНДЫ алып тастайды
alice-мекен-жайы → 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 арқылы бірнеше есептік жазбаны қаржыландырады, сценарийді құрастырады және оны блокчейнге орналастырады.
  • «Депозитке салуға болады» желіге 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. Жаңа ғана қолданылған қолданба.

Кейбір серфингтік кеңестер:

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 10 WAVES төлемімен InvokeScriptTransaction қол қоюға рұқсат сұрайды.

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

RIDE dApp толқындарын қалай құруға, орналастыруға және сынауға болады
Транзакция жасалады және желіге таратылады. Енді сіз оның жеке куәлігін көре аласыз

7. Waves Explorer көмегімен транзакцияны бақылаңыз. Іздеу өрісіне идентификаторды енгізіңіз

RIDE dApp толқындарын қалай құруға, орналастыруға және сынауға болады

Қорытынды және қосымша ақпарат

Біз Waves платформасында қарапайым dApp қолданбаларын әзірлеу, тестілеу, орналастыру және пайдалану құралдарын қарастырдық:

  • RIDE тілі
  • VS код редакторы
  • Waves Explorer
  • Сурфборд
  • Толқындарды сақтаушы

RIDE оқуын жалғастырғысы келетіндерге арналған сілтемелер:

Басқа мысалдар
Мысалдармен онлайн IDE
Толқындардың құжаттамасы
Telegram-дағы әзірлеуші ​​чаты
Толқындар және stackoverflow бойынша RIDE
ЖАҢА! Waves платформасында dApps жасау бойынша онлайн курстар

RIDE тақырыбына енуді жалғастырыңыз және бірінші dApp жасаңыз!

TL; DR: bit.ly/2YCFnwY

Ақпарат көзі: www.habr.com

пікір қалдыру