ProHoster > Blog > башкаруу > RIDE dApp толкундарын кантип куруу, жайылтуу жана сыноо керек
RIDE dApp толкундарын кантип куруу, жайылтуу жана сыноо керек
Салам! Бул макалада мен сизге Waves түйүнүндө кадимки dApp кантип жазууну жана иштетүүнү көрсөтөм. Келгиле, керектүү куралдарды, ыкмаларды жана өнүктүрүүнүн мисалын карап көрөлү.
dApps жана кадимки тиркемелерди иштеп чыгуу схемасы дээрлик бирдей:
Код жазуу
Жазуу автоматташтырылган тестирлөө
Колдонмону ишке киргизүү
Сыноо
аспаптар
1. docker түйүн жана Waves Explorer иштетүү үчүн
Түйүндү баштоону каалабасаңыз, бул кадамды өткөрүп жиберсеңиз болот. Анткени, сыноо жана эксперименталдык тармак бар. Бирок өз түйүнүңүздү жайгаштырбай туруп, тестирлөө процесси созулуп кетиши мүмкүн.
Сизге ар дайым сыноо белгилери менен жаңы аккаунттар керек болот. Сыноочу тармактык кран ар бир 10 мүнөт сайын 10 ТОЛКУНду өткөрүп берет.
Сыноо тармагында орточо блоктоо убактысы 1 мүнөт, түйүндө – 15 секунд. Бул транзакция бир нече ырастоону талап кылганда өзгөчө байкалат.
Коомдук сыноо түйүндөрүндө агрессивдүү кэштөө мүмкүн.
Алар ошондой эле тейлөөгө байланыштуу убактылуу иштебей калышы мүмкүн.
Мындан ары мен сиз өз түйүнүңүз менен иштеп жатасыз деп ойлойм.
Surfboard орнотуңуз, ал сизге учурдагы түйүндө сыноолорду жүргүзүүгө мүмкүндүк берет.
npm install -g @waves/surfboard
3. Visual Studio Code плагини
Эгер сиз IDE күйөрмандары болбосоңуз жана текст редакторлорун жактырсаңыз, бул кадам милдеттүү эмес. Бардык керектүү шаймандар буйрук сабынын утилиталары болуп саналат. Эгерде сиз vim колдонсоңуз, плагинге көңүл буруңуз вим-рейд.
Visual Studio Code жүктөп алып, орнотуңуз: https://code.visualstudio.com/
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Браузерди ачып, өтүңүз http://localhost:3000. Сиз бош локалдык түйүн схемасы канчалык тез курулганын көрөсүз.
Waves Explorer жергиликтүү түйүн инстанциясын көрсөтөт
RIDE түзүмү жана Surfboard куралы
Бош каталогду түзүп, андагы буйрукту иштетиңиз
surfboard init
Буйрук долбоордун түзүмү, "салам дүйнө" тиркемелери жана тесттери менен каталогду инициализациялайт. Эгерде сиз бул папканы VS Code менен ачсаңыз, анда төмөнкүлөрдү көрөсүз:
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 өмүр циклинин бүтүндөй структурасы (дареги → сумма) сакталат:
Алиса 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
VSCode плагини файлды түзөтүүдө үзгүлтүксүз компиляцияны колдойт. Ошондуктан, сиз ар дайым КӨЙГӨЙЛӨР кошумча барагында каталарды көзөмөлдөй аласыз.
Файлды компиляциялоодо башка текст редакторун колдонгуңуз келсе, колдонуңуз
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 статусун, декомпиляцияланган бинардык файлды таба аласыз.
2. Эгерде сиз транзакциялардын JSON версияларын жана алар түйүн тарабынан кандайча иштетилип жатканын көргүңүз келсе, тестти -v ("кеңири" дегенди билдирет) менен аткарыңыз:
Жергиликтүү түйүн менен иштөө үчүн Waves Keeper орнотуу
2. Тармак үчүн токендер менен жашыруун фразаны импорттоо? Жөнөкөйлүк үчүн түйүнүңүздүн баштапкы уругун колдонуңуз: waves private node seed with waves tokens. дареги: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.