Как ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Waves RIDE dApp

ЗдравствуйтС! Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΏΠΎΠΊΠ°ΠΆΡƒ, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° Π½ΠΎΠ΄Π΅ Waves ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ dApp. Рассмотрим Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ инструмСнты, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Как ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Waves RIDE dApp

Π‘Ρ…Π΅ΠΌΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ dApps ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ отличаСтся:

  • ПишСм ΠΊΠΎΠ΄
  • ПишСм Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ тСстированиС
  • ЗапускаСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
  • ВСстируСм

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹

1. docker для запуска Π½ΠΎΠ΄Ρ‹ ΠΈ Waves Explorer

Если Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½ΠΎΠ΄Ρƒ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот шаг. Π’Π΅Π΄ΡŒ Π΅ΡΡ‚ΡŒ тСстовая ΠΈ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΡΠ΅Ρ‚ΡŒ. Но Π±Π΅Π· развСртывания своСй Π½ΠΎΠ΄Ρ‹ процСсс тСстирования ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‚ΡΠ½ΡƒΡ‚ΡŒΡΡ.

  • Π’Π°ΠΌ постоянно Π±ΡƒΠ΄ΡƒΡ‚ Π½ΡƒΠΆΠ½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρ‹ с тСстовыми Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ. ΠšΡ€Π°Π½ тСстовой сСти ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ 10 WAVES ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 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, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ»Π°Π³ΠΈΠ½ vim-ride.

Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ ΠΈ установитС Visual Studio Code: https://code.visualstudio.com/

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ VS Code ΠΈ установитС ΠΏΠ»Π°Π³ΠΈΠ½ waves-ride:

Как ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Waves 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:

Как ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Waves 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. Π£Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ быстро строится пустая Ρ†Π΅ΠΏΡŒ локальной Π½ΠΎΠ΄Ρ‹.

Как ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Waves RIDE dApp
Waves Explorer ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ экзСмпляр локальной Π½ΠΎΠ΄Ρ‹

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° RIDE ΠΈ инструмСнт Surfboard

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡƒΡΡ‚ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π² Π½Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

surfboard init

Команда ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ со структурой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, прилоТСния Ρ‚ΠΈΠΏΠ° Β«hello worldΒ» ΠΈ тСсты. Если ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚Π΅ эту ΠΏΠ°ΠΏΠΊΡƒ с VS Code, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅:

Как ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Waves RIDE dApp
Surfboard.config.json

  • Под ΠΏΠ°ΠΏΠΊΠΎΠΉ ./ride/ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» wallet.ride – Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ, Π³Π΄Π΅ располоТСн ΠΊΠΎΠ΄ dApp. ΠœΡ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ dApp Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅.
  • Под ΠΏΠ°ΠΏΠΊΠΎΠΉ ./test/ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Ρ„Π°ΠΉΠ» *.js. Π—Π΄Π΅ΡΡŒ хранятся тСсты.
  • ./surfboard.config.json – ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для запуска тСстов.

Envs – ваТная сСкция. КаТдая срСда настраиваСтся Ρ‚Π°ΠΊ:

  • ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ° REST API Π½ΠΎΠ΄Ρ‹, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для запуска dApp ΠΈ CHAIN_ID сСти.
  • БСкрСтная Ρ„Ρ€Π°Π·Π° для Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° с Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ источниками Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² вашСго тСста.

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, surfboard.config.json ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько срСд. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ выставлСна локальная срСда (ΠΊΠ»ΡŽΡ‡ defaultEnv – измСняСмый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€).

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Wallet-demo

Π­Ρ‚Π° сСкция – Π½Π΅ справочник ΠΏΠΎ языку RIDE. Π‘ΠΊΠΎΡ€Π΅Π΅, взгляд Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΈ тСстируСм, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅.

Рассмотрим простоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Wallet-demo. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π° адрСс dApp Ρ‚ΠΎΠΊΠ΅Π½Ρ‹. ВывСсти ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свои WAVES. Π”Π²Π΅ @Callable Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступны Ρ‡Π΅Ρ€Π΅Π· InvokeScriptTransaction:

  • deposit(), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ° Π² WAVES
  • withdraw(amount: Int), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹

На протяТСнии всСго ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° dApp, структура (address β†’ amount) Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ:

Action
Resulting state

initial
empty

Alice deposits 5 WAVES
alice-address β†’ 500000000

Bob deposits 2 WAVES

alice-address β†’ 500000000
bob-address β†’ 200000000

Bob withdraws 7 WAVES
DENIED!

Alice withdraws 4 WAVES
alice-address β†’ 100000000
bob-address β†’ 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 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΏΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° ошибками Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ PROBLEMS.

Как ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Waves RIDE dApp
Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΈ компиляции Ρ„Π°ΠΉΠ»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅

surfboard compile ride/wallet.ride

Π­Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ряд base64 скомпилированного ΠΊΠΎΠ΄Π° RIDE.

ВСстовый сцСнарий для β€˜wallet.ride’

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° тСстовый Ρ„Π°ΠΉΠ». Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ JavaScript’s Mocha. Π•ΡΡ‚ΡŒ функция Β«BeforeΒ» ΠΈ Ρ‚Ρ€ΠΈ тСста:

  • Β«BeforeΒ» финансируСт нСсколько Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· MassTransferTransaction, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ скрипт ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅.
  • Β«Can depositΒ» отправляСт Π² ΡΠ΅Ρ‚ΡŒ InvokeScriptTransaction, активируя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ deposit() для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ².
  • Β«Can’t withdraw more than was depositedΒ» тСстируСт, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ смоТСт ΡƒΠΊΡ€Π°ΡΡ‚ΡŒ Ρ‡ΡƒΠΆΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹.
  • Β«Can depositΒ» провСряСт, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

Запуск тСстов с 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 RIDE dApp
Waves Explorer. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ.

НСсколько совСтов ΠΏΠΎ Surfboard:

1. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² срСдС testnet, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

surfboard test --env=testnet

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ тСстовыС Ρ‚ΠΎΠΊΠ΅Π½Ρ‹

2. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ JSON-вСрсии Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ΄ΠΎΠΉ, запуститС тСст с -v (ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ β€˜verbose’):

surfboard test -v

ИспользованиС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с Waves Keeper

1. НастройтС Waves Keeper для Ρ€Π°Π±ΠΎΡ‚Ρ‹: http://localhost:6869

Как ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Waves RIDE dApp
Настройка Waves Keeper для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с локальной Π½ΠΎΠ΄ΠΎΠΉ

2. Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΡΠ΅ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ„Ρ€Π°Π·Ρƒ с Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ для сСти? Для простоты ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ seed вашСй Π½ΠΎΠ΄Ρ‹: waves private node seed with waves tokens. АдрСс: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ одностраничноС бСзсСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ npm. Или ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ: chrome-ext.wvservices.com/dapp-wallet.html

4. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ адрСс кошСлька ΠΈΠ· тСстового запуска (ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ Π²Ρ‹ΡˆΠ΅) Π² тСкстовоС ΠΏΠΎΠ»Π΅ адрСса dApp

5. Π’ΠΏΠΈΡˆΠΈΡ‚Π΅ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ сумму Π² ΠΏΠΎΠ»Π΅ Β«DepositΒ» ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ:

Как ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Waves RIDE dApp
Waves Keeper Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒ InvokeScriptTransaction с ΠΏΠ»Π°Ρ‚Π΅ΠΆΠΎΠΌ 10 WAVES.

6. ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ:

Как ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Waves RIDE dApp
Вранзакция создана ΠΈ транслируСтся Π² ΡΠ΅Ρ‚ΡŒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΈΠ΄Π½ΠΎ Π΅Π΅ ID

7. ΠΠ°Π±Π»ΡŽΠ΄Π°ΠΉΡ‚Π΅ Π·Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Waves Explorer. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ID Π² поисковоС ΠΏΠΎΠ»Π΅

Как ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Waves RIDE dApp

Π’Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация

ΠœΡ‹ рассмотрСли инструмСнты Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, тСстирования, развСртывания ΠΈ использования простых dApps Π½Π° Waves Platform:

  • Π―Π·Ρ‹ΠΊ RIDE
  • Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ VS Code
  • Waves Explorer
  • Surfboard
  • Waves Keeper

Бсылки для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ RIDE:

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²
Онлайн IDE с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ
ДокумСнтация Waves
Π§Π°Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π² Π’Π΅Π»Π΅Π³Ρ€Π°ΠΌΠ΅
Waves ΠΈ RIDE Π½Π° stackoverflow
NEW! Онлайн-курсы ΠΏΠΎ созданию dApps Π½Π° Waves Platform

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² Ρ‚Π΅ΠΌΡƒ RIDE ΠΈ создайтС свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ dApp!

TL;DR: bit.ly/2YCFnwY

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com