Ինչպես կառուցել, տեղակայել և փորձարկել ալիքները RIDE dApp
Բարեւ Ձեզ! Այս հոդվածում ես ձեզ ցույց կտամ, թե ինչպես գրել և գործարկել սովորական dApp Waves հանգույցի վրա: Եկեք նայենք անհրաժեշտ գործիքներին, մեթոդներին և զարգացման օրինակին:
dApps-ի և սովորական հավելվածների զարգացման սխեման գրեթե նույնն է.
Կոդ գրելը
Ավտոմատացված թեստավորում գրելը
Գործարկեք հավելվածը
Փորձարկում
Գործիքներ
1. docker հանգույցը և Waves Explorer-ը գործարկելու համար
Եթե դուք չեք ցանկանում սկսել հանգույց, կարող եք բաց թողնել այս քայլը: Ի վերջո, կա փորձնական և փորձնական ցանց: Բայց առանց ձեր սեփական հանգույցի տեղակայման, փորձարկման գործընթացը կարող է ձգձգվել:
Ձեզ անընդհատ անհրաժեշտ կլինեն նոր հաշիվներ՝ թեստային նշաններով: Փորձնական ցանցի ծորակը յուրաքանչյուր 10 րոպեն մեկ փոխանցում է 10 ԱԼԻՔ:
Թեստային ցանցում արգելափակման միջին ժամանակը 1 րոպե է, հանգույցում՝ 15 վայրկյան: Սա հատկապես նկատելի է, երբ գործարքը պահանջում է բազմաթիվ հաստատումներ:
Հանրային փորձարկման հանգույցներում հնարավոր է ագրեսիվ քեշավորում:
Դրանք կարող են նաև ժամանակավորապես անհասանելի լինել սպասարկման պատճառով:
Այսուհետ ես կենթադրեմ, որ դուք աշխատում եք ձեր սեփական հանգույցով։
Տեղադրեք Surfboard-ը՝ գործիք, որը թույլ է տալիս թեստեր կատարել գոյություն ունեցող հանգույցի վրա:
npm install -g @waves/surfboard
3. Visual Studio Code հավելված
Այս քայլը պարտադիր չէ, եթե դուք IDE-ների երկրպագու չեք և նախընտրում եք տեքստային խմբագրիչներ: Բոլոր անհրաժեշտ գործիքները հրամանի տող կոմունալ ծառայություններ են: Եթե դուք օգտագործում եք vim, ուշադրություն դարձրեք plugin-ին vim-ride.
Ներբեռնեք և տեղադրեք 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 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 լեզվին: Ավելի շուտ, նայեք հավելվածին, որը մենք տեղադրում և փորձարկում ենք՝ ավելի լավ հասկանալու համար, թե ինչ է կատարվում բլոկչեյնում:
Եկեք նայենք մի պարզ Wallet-դեմո հավելվածին: Յուրաքանչյուր ոք կարող է նշաններ ուղարկել dApp հասցեով: Դուք կարող եք միայն հանել ձեր ալիքները: InvokeScriptTransaction-ի միջոցով հասանելի են երկու @Callable ֆունկցիաներ.
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 շրջանակով: Կա «Նախքան» գործառույթը և երեք թեստ.
«Before»-ն ֆինանսավորում է բազմաթիվ հաշիվներ 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. Հավելված, որը նոր է գործարկվել:
Surfboard-ի որոշ խորհուրդներ.
1. Testnet միջավայրում փորձարկելու համար օգտագործեք.
Waves Keeper-ի կարգավորում տեղական հանգույցի հետ աշխատելու համար
2. Ներմուծե՞լ գաղտնի արտահայտություն ցանցի համար նշաններով: Պարզության համար օգտագործեք ձեր հանգույցի սկզբնական սերմը. waves private node seed with waves tokens. Հասցե ` 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.