Салом! Дар ин мақола ман ба шумо нишон медиҳам, ки чӣ гуна dApp-и муқаррариро дар гиреҳи Waves нависед ва идора кунед. Воситахои зарурй, усулхо ва мисоли тараккиётро дида мебароем.
Нақшаи таҳияи 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 зеркашӣ ва насб кунед:
Рамзи VS-ро кушоед ва плагини waves-ride -ро насб кунед:
Васеъ кардани браузери Waves Keeper:
Муҳокима!
Гиреҳ ва Waves Explorer-ро оғоз кунед
1. Гиреҳро оғоз кунед:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Боварӣ ҳосил кунед, ки гиреҳ тавассути REST API дар
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
Браузерро кушоед ва ба он равед
Waves Explorer як мисоли гиреҳи маҳаллиро нишон медиҳад
Сохтори RIDE ва абзори Surfboard
Феҳристи холӣ эҷод кунед ва фармонро дар он иҷро кунед
surfboard init
Фармон директорияро бо сохтори лоиҳа, замимаҳо ва санҷишҳои "салом ҷаҳон" оғоз мекунад. Агар шумо ин папкаро бо VS Code кушоед, шумо хоҳед дид:
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
Рамзи намунавӣ инчунин метавонад дар
Васлкунаки VSCode ҳангоми таҳрири файл тартиб додани пайвастаро дастгирӣ мекунад. Аз ин рӯ, шумо ҳамеша метавонед хатогиҳоро дар ҷадвали ПРОБЛЕМАҲО назорат кунед.
Агар шумо хоҳед, ки ҳангоми тартиб додани файл муҳаррири матнии дигарро истифода баред, истифода баред
surfboard compile ride/wallet.ride
Ин як қатор рамзи RIDE тартибдодашудаи base64 мебарорад.
Скрипти санҷишӣ барои 'wallet.ride'
Биёед бубинем
- "Пеш аз" тавассути 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, файли бинарии декомпиляцияшударо пайдо кунед.
Explorer мавҷҳо. Замимае, ки нав ҷойгир карда шудааст.
Баъзе маслиҳатҳои Surfboard:
1. Барои санҷиш дар муҳити testnet, истифода баред:
surfboard test --env=testnet
2. Агар шумо хоҳед бинед, ки версияҳои JSON транзаксияҳо ва тарзи коркарди онҳо аз ҷониби гиреҳ, санҷишро бо -v иҷро кунед (маънои “муфассал”):
surfboard test -v
Истифодаи барномаҳо бо Waves Keeper
1. Waves Keeper-ро барои кор насб кунед:
Насб кардани Waves Keeper барои кор бо гиреҳи маҳаллӣ
2. Ибораи махфиро бо нишонаҳо барои шабака ворид кунед? Барои соддагӣ, тухмии ибтидоии гиреҳи худро истифода баред: waves private node seed with waves tokens
. Суроға: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF
.
3. Шумо метавонед худатон бо истифода аз npm як барномаи бе сервери саҳифаро иҷро кунед. Ё ба яке аз мавҷуда равед:
4. Суроғаи ҳамёнро аз санҷиши санҷиш (дар боло хатт карда шудааст) ба қуттии матнии суроғаи dApp ворид кунед
5. Дар майдони "Амонат" маблағи хурдро ворид кунед ва тугмаро пахш кунед:
Waves Keeper барои имзои InvokeScriptTransaction бо пардохти 10 WAVES иҷозат талаб мекунад.
6. Амалиётро тасдиқ кунед:
Муомилот сохта мешавад ва ба шабака пахш мешавад. Акнун шумо метавонед шахсияти ӯро бубинед
7. Муомилотро бо истифода аз Waves Explorer назорат кунед. Дар майдони ҷустуҷӯ ID-ро ворид кунед
Хулоса ва маълумоти иловагӣ
Мо абзорҳоро барои таҳия, озмоиш, ҷобаҷогузорӣ ва истифодаи dApps оддӣ дар Платформаи Waves дида баромадем:
- Забони RIDE
- Муҳаррири рамзи VS
- Explorer мавҷҳо
- Сурхпуш
- Нигоҳдори мавҷҳо
Истинодҳо барои онҳое, ки мехоҳанд омӯзиши RIDE-ро идома диҳанд:
Гузаришро ба мавзӯи RIDE идома диҳед ва аввалин dApp-и худро эҷод кунед!
ХИБ; DR:
Манбаъ: will.com