ProHoster > Блог > басқарма > 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 кодын жүктеп алыңыз және орнатыңыз: 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 коды арқылы ашсаңыз, мынаны көресіз:
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 өмірлік циклі бойы құрылым (мекен-жай → сома) сақталады:
# 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 арқылы бірнеше есептік жазбаны қаржыландырады, сценарийді құрастырады және оны блокчейнге орналастырады.
«Депозитке салуға болады» желіге 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 күйін, декомпиляцияланған екілік файлды таба аласыз.
Waves Explorer. Жаңа ғана қолданылған қолданба.
Кейбір серфингтік кеңестер:
1. Testnet ортасында тексеру үшін мынаны пайдаланыңыз:
2. Егер транзакциялардың JSON нұсқаларын және олардың түйін арқылы өңделетінін көргіңіз келсе, сынақты -v арқылы орындаңыз («толық» дегенді білдіреді):
Жергілікті түйінмен жұмыс істеу үшін Waves Keeper орнату
2. Желіге арналған таңбалауыштары бар құпия фразаны импорттау? Қарапайымдылық үшін түйіннің бастапқы тұқымын пайдаланыңыз: waves private node seed with waves tokens. Мекен жайы: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.