ื›ื™ืฆื“ ืœื‘ื ื•ืช, ืœืคืจื•ืก ื•ืœื‘ื“ื•ืง Waves RIDE dApp

ืฉืœื•ื! ื‘ืžืืžืจ ื–ื” ืืจืื” ืœื›ื ื›ื™ืฆื“ ืœื›ืชื•ื‘ ื•ืœื”ืคืขื™ืœ dApp ืจื’ื™ืœ ืขืœ ืฆื•ืžืช Waves. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ื›ืœื™ื, ื”ืฉื™ื˜ื•ืช ื”ื“ืจื•ืฉื™ื ื•ื“ื•ื’ืžื” ืœืคื™ืชื•ื—.

ื›ื™ืฆื“ ืœื‘ื ื•ืช, ืœืคืจื•ืก ื•ืœื‘ื“ื•ืง Waves RIDE dApp

ืขืจื›ืช ื”ืคื™ืชื•ื— ืขื‘ื•ืจ dApps ื•ื™ื™ืฉื•ืžื™ื ืจื’ื™ืœื™ื ื›ืžืขื˜ ื–ื”ื”:

  • ื›ืชื™ื‘ืช ืงื•ื“
  • ื›ืชื™ื‘ืช ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช
  • ื”ืคืขืœืช ื”ืืคืœื™ืงืฆื™ื”
  • ื‘ื“ื™ืงื”

ื›ืœื™ ืขื‘ื•ื“ื”

1. docker ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ืฆื•ืžืช ื•ืืช Waves Explorer

ืื ืื™ื ืš ืจื•ืฆื” ืœื”ืชื—ื™ืœ ืฆื•ืžืช, ืชื•ื›ืœ ืœื“ืœื’ ืขืœ ืฉืœื‘ ื–ื”. ื”ืจื™ ื™ืฉ ืจืฉืช ื‘ื“ื™ืงื” ื•ื ื™ืกื•ื™. ืื‘ืœ ืžื‘ืœื™ ืœืคืจื•ืก ืืช ื”ืฆื•ืžืช ืฉืœืš, ืชื”ืœื™ืš ื”ื‘ื“ื™ืงื” ืขืฉื•ื™ ืœื”ื™ืžืฉืš.

  • ืชืฆื˜ืจืš ื›ืœ ื”ื–ืžืŸ ื—ืฉื‘ื•ื ื•ืช ื—ื“ืฉื™ื ืขื ืืกื™ืžื•ื ื™ ื‘ื“ื™ืงื”. ื‘ืจื– ืจืฉืช ื”ื‘ื“ื™ืงื” ืžืขื‘ื™ืจ 10 WAVES ื›ืœ 10 ื“ืงื•ืช.
  • ื–ืžืŸ ื”ื—ืกื™ืžื” ื”ืžืžื•ืฆืข ื‘ืจืฉืช ื”ื‘ื“ื™ืงื” ื”ื•ื ื“ืงื” ืื—ืช, ื‘ืฆื•ืžืช - 1 ืฉื ื™ื•ืช. ื”ื“ื‘ืจ ื‘ื•ืœื˜ ื‘ืžื™ื•ื—ื“ ื›ืืฉืจ ืขืกืงื” ื“ื•ืจืฉืช ืื™ืฉื•ืจื™ื ืžืจื•ื‘ื™ื.
  • ืžื˜ืžื•ืŸ ืื’ืจืกื™ื‘ื™ ืืคืฉืจื™ ื‘ืฆืžืชื™ ื‘ื“ื™ืงื” ืฆื™ื‘ื•ืจื™ื™ื.
  • ื™ื™ืชื›ืŸ ืฉื”ื ื’ื ืœื ื™ื”ื™ื• ื–ืžื™ื ื™ื ื–ืžื ื™ืช ืขืงื‘ ืชื—ื–ื•ืงื”.

ืžืขืชื” ื•ืื™ืœืš ืื ื™ื— ืฉืืชื” ืขื•ื‘ื“ ืขื ื”ืฆื•ืžืช ืฉืœืš.

2. ื›ืœื™ ืฉื•ืจืช ื”ืคืงื•ื“ื” ืฉืœ ื’ืœืฉืŸ

  • ื”ื•ืจื“ ื•ื”ืชืงืŸ ืืช Node.js ื‘ืืžืฆืขื•ืช ppa, homebrew ืื• exe ื›ืืŸ: https://nodejs.org/en/download/.
  • ื”ืชืงืŸ ืืช Surfboard, ื›ืœื™ ื”ืžืืคืฉืจ ืœืš ืœื”ืจื™ืฅ ื‘ื“ื™ืงื•ืช ืขืœ ืฆื•ืžืช ืงื™ื™ื.

npm install -g @waves/surfboard

3. ืชื•ืกืฃ Visual Studio Code

ืฉืœื‘ ื–ื” ื”ื•ื ืื•ืคืฆื™ื•ื ืœื™ ืื ืื™ื ืš ื—ื•ื‘ื‘ IDEs ื•ืžืขื“ื™ืฃ ืขื•ืจื›ื™ ื˜ืงืกื˜. ื›ืœ ื”ื›ืœื™ื ื”ื“ืจื•ืฉื™ื ื”ื ื›ืœื™ ืขื–ืจ ืฉืœ ืฉื•ืจืช ื”ืคืงื•ื“ื”. ืื ืืชื” ืžืฉืชืžืฉ ื‘-vim, ืฉื™ืžื• ืœื‘ ืœืคืœืื’ื™ืŸ vim-ride.

ื”ื•ืจื“ ื•ื”ืชืงืŸ Visual Studio Code: https://code.visualstudio.com/

ืคืชื— ืืช ืงื•ื“ VS ื•ื”ืชืงืŸ ืืช ื”ืคืœืื’ื™ืŸ 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 init

ื”ืคืงื•ื“ื” ืžืืชื—ืœืช ืกืคืจื™ื™ื” ืขื ืžื‘ื ื” ื”ืคืจื•ื™ืงื˜, ื™ื™ืฉื•ืžื™ "ืฉืœื•ื ืขื•ืœื" ื•ื‘ื“ื™ืงื•ืช. ืื ืชืคืชื— ืชื™ืงื™ื” ื–ื• ืขื ืงื•ื“ VS, ืชืจืื”:

ื›ื™ืฆื“ ืœื‘ื ื•ืช, ืœืคืจื•ืก ื•ืœื‘ื“ื•ืง Waves RIDE dApp
Surfboard.config.json

  • ืžืชื—ืช ืœืชื™ืงื™ื” ./ride/ ืชืžืฆื ืงื•ื‘ืฅ ื‘ื•ื“ื“ wallet.ride - ื”ืกืคืจื™ื™ื” ืฉื‘ื” ื ืžืฆื ืงื•ื“ dApp. ื ื ืชื— ื‘ืงืฆืจื” dApps ื‘ื‘ืœื•ืง ื”ื‘ื.
  • ืชื—ืช ื”ืชื™ืงื™ื” ./test/ ืชืžืฆื ืงื•ื‘ืฅ *.js. ื‘ื“ื™ืงื•ืช ืžืื•ื—ืกื ื•ืช ื›ืืŸ.
  • ./surfboard.config.json โ€“ ืงื•ื‘ืฅ ืชืฆื•ืจื” ืœื”ืคืขืœืช ื‘ื“ื™ืงื•ืช.

Envs ื”ื•ื ืงื˜ืข ื—ืฉื•ื‘. ื›ืœ ืกื‘ื™ื‘ื” ืžื•ื’ื“ืจืช ื›ืš:

  • ื ืงื•ื“ืช ืงืฆื” REST API ืฉืœ ื”ืฆื•ืžืช ืฉืชืฉืžืฉ ืœื”ืคืขืœืช ื”-dApp ื•-CHAIN_ID ืฉืœ ื”ืจืฉืช.
  • ื‘ื™ื˜ื•ื™ ืกื•ื“ื™ ืœื—ืฉื‘ื•ืŸ ืขื ืืกื™ืžื•ื ื™ื ืฉื™ื”ื™ื• ื”ืžืงื•ืจื•ืช ืœืืกื™ืžื•ื ื™ ื”ื‘ื“ื™ืงื” ืฉืœืš.

ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœืจืื•ืช, surfboard.config.json ืชื•ืžืš ื‘ืžืกืคืจ ืกื‘ื™ื‘ื•ืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ื”ืกื‘ื™ื‘ื” ื”ืžืงื•ืžื™ืช (ืžืงืฉ defaultEnv ื”ื•ื ืคืจืžื˜ืจ ืฉื ื™ืชืŸ ืœืฉื™ื ื•ื™).

ืืคืœื™ืงืฆื™ื™ืช ืืจื ืง ื”ื“ื’ืžื”

ืกืขื™ืฃ ื–ื” ืื™ื ื• ื”ืชื™ื™ื—ืกื•ืช ืœืฉืคืช RIDE. ื‘ืžืงื•ื ื–ืืช, ื”ืกืชื›ืœ ืขืœ ื”ืืคืœื™ืงืฆื™ื” ืฉืื ื• ืคื•ืจืกื™ื ื•ื‘ื•ื“ืงื™ื ื›ื“ื™ ืœื”ื‘ื™ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืžื” ืงื•ืจื” ื‘ื‘ืœื•ืงืฆ'ื™ื™ืŸ.

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื™ื™ืฉื•ื ืคืฉื•ื˜ ืœื”ื“ื’ืžื” ืฉืœ ืืจื ืง. ื›ืœ ืื—ื“ ื™ื›ื•ืœ ืœืฉืœื•ื— ืืกื™ืžื•ื ื™ื ืœื›ืชื•ื‘ืช dApp. ืืชื” ื™ื›ื•ืœ ืจืง ืœืžืฉื•ืš ืืช ื”-WAVES ืฉืœืš. ืฉืชื™ ืคื•ื ืงืฆื™ื•ืช @Callable ื–ืžื™ื ื•ืช ื‘ืืžืฆืขื•ืช InvokeScriptTransaction:

  • deposit()ืžื” ืฉืžืฆืจื™ืš ืชืฉืœื•ื ืžืฆื•ืจืฃ ื‘-WAVES
  • withdraw(amount: Int)ืžื” ืฉืžื—ื–ื™ืจ ืืกื™ืžื•ื ื™ื

ืœืื•ืจืš ืžื—ื–ื•ืจ ื”ื—ื™ื™ื ืฉืœ dApp, ื”ืžื‘ื ื” (ื›ืชื•ื‘ืช โ† ื›ืžื•ืช) ื™ื™ืฉืžืจ:

ืคืขื•ืœื”
ื”ืžืฆื‘ ื”ืžืชืงื‘ืœ

ื‘ืชื—ื™ืœื”
ืจื™ืง

ืืœื™ืก ืžืคืงื™ื“ื” 5 ื’ืœื™ื
alice-address โ†’ 500000000

ื‘ื•ื‘ ืžืคืงื™ื“ 2 ื’ืœื™ื

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

ื‘ื•ื‘ ืžื•ืฉืš 7 ื’ืœื™ื
ื ื“ื—ื”!

ืืœื™ืก ืžื•ืฉื›ืช 4 ื’ืœื™ื
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 ืชื•ืžืš ื‘ื”ื™ื“ื•ืจ ืจืฆื™ืฃ ื‘ื–ืžืŸ ืขืจื™ื›ืช ืงื•ื‘ืฅ. ืœื›ืŸ, ืืชื” ืชืžื™ื“ ื™ื›ื•ืœ ืœืขืงื•ื‘ ืื—ืจ ืฉื’ื™ืื•ืช ื‘ืœืฉื•ื ื™ืช ื‘ืขื™ื•ืช.

ื›ื™ืฆื“ ืœื‘ื ื•ืช, ืœืคืจื•ืก ื•ืœื‘ื“ื•ืง Waves RIDE dApp
ืื ื‘ืจืฆื•ื ืš ืœื”ืฉืชืžืฉ ื‘ืขื•ืจืš ื˜ืงืกื˜ ืื—ืจ ื‘ืขืช ื”ื™ื“ื•ืจ ื”ืงื•ื‘ืฅ, ื”ืฉืชืžืฉ

surfboard compile ride/wallet.ride

ื–ื” ื™ื•ืฆื™ื ืกื“ืจื” ืฉืœ ืงื•ื“ RIDE ืžื”ื™ื“ื•ืจ base64.

ืกืงืจื™ืคื˜ ื‘ื“ื™ืงื” ืขื‘ื•ืจ 'wallet.ride'

ื‘ื•ื ื ืกืชื›ืœ ืขืœ ืงื•ื‘ืฅ ื‘ื“ื™ืงื”. ืžื•ืคืขืœ ืขืœ ื™ื“ื™ ืžืกื’ืจืช Mocha ืฉืœ JavaScript. ื™ืฉ ืคื•ื ืงืฆื™ื” "ืœืคื ื™" ื•ืฉืœื•ืฉ ื‘ื“ื™ืงื•ืช:

  • "ืœืคื ื™" ืžืžืžืŸ ืžืกืคืจ ื—ืฉื‘ื•ื ื•ืช ื‘ืืžืฆืขื•ืช MassTransferTransaction, ืžืจื›ื™ื‘ ืืช ื”ืกืงืจื™ืคื˜ ื•ืคื•ืจืก ืื•ืชื• ืœื‘ืœื•ืงืฆ'ื™ื™ืŸ.
  • "ื™ื›ื•ืœ ืœื”ืคืงื™ื“" ืฉื•ืœื— InvokeScriptTransaction ืœืจืฉืช, ืžืคืขื™ืœ ืืช ื”ืคื•ื ืงืฆื™ื” 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
ื’ืœื™ื ืกื™ื™ืจ. ืืคืœื™ืงืฆื™ื” ืฉื–ื” ืขืชื” ื ืคืจืกื”.

ื›ืžื” ื˜ื™ืคื™ื ืœื’ืœืฉืŸ:

1. ื›ื“ื™ ืœื‘ื“ื•ืง ื‘ืกื‘ื™ื‘ืช testnet, ื”ืฉืชืžืฉ ื‘:

surfboard test --env=testnet

ืงื‘ืœ ืืกื™ืžื•ื ื™ ื‘ื“ื™ืงื”

2. ืื ื‘ืจืฆื•ื ืš ืœืจืื•ืช ืืช ื’ืจืกืื•ืช ื”-JSON ืฉืœ ื˜ืจื ื–ืงืฆื™ื•ืช ื•ื›ื™ืฆื“ ื”ืŸ ืžืขื•ื‘ื“ื•ืช ืขืœ ื™ื“ื™ ื”ืฆื•ืžืช, ื”ืจืฅ ืืช ื”ื‘ื“ื™ืงื” ืขื -v (ืคื™ืจื•ืฉื• 'ืจื‘ื•ืช'):

surfboard test -v

ืฉื™ืžื•ืฉ ื‘ืืคืœื™ืงืฆื™ื•ืช ืขื Waves Keeper

1. ื”ื’ื“ืจ ืืช Waves Keeper ืœืขื‘ื•ื“ื”: http://localhost:6869

ื›ื™ืฆื“ ืœื‘ื ื•ืช, ืœืคืจื•ืก ื•ืœื‘ื“ื•ืง Waves RIDE dApp
ื”ื’ื“ืจืช Waves Keeper ืœืขื‘ื•ื“ื” ืขื ืฆื•ืžืช ืžืงื•ืžื™

2. ืœื™ื™ื‘ื ื‘ื™ื˜ื•ื™ ืกื•ื“ื™ ืขื ืืกื™ืžื•ื ื™ื ืœืจืฉืช? ืœืžืขืŸ ื”ืคืฉื˜ื•ืช, ื”ืฉืชืžืฉ ื‘ื–ืจืข ื”ืจืืฉื•ื ื™ ืฉืœ ื”ืฆื•ืžืช ืฉืœืš: waves private node seed with waves tokens. ื›ืชื•ื‘ืช: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. ืืชื” ื™ื›ื•ืœ ืœื”ืจื™ืฅ ื‘ืขืฆืžืš ืืคืœื™ืงืฆื™ื™ืช ืขืžื•ื“ ื‘ื•ื“ื“ ืœืœื ืฉืจืช ื‘ืืžืฆืขื•ืช npm. ืื• ืขื‘ื•ืจ ืืœ ื”ืงื™ื™ื: chrome-ext.wvservices.com/dapp-wallet.html

4. ื”ื–ืŸ ืืช ื›ืชื•ื‘ืช ื”ืืจื ืง ืžื”ืคืขืœืช ื”ื‘ื“ื™ืงื” (ืžืกื•ืžื ืช ืœืžืขืœื”) ื‘ืชื™ื‘ืช ื”ื˜ืงืกื˜ ืฉืœ ื›ืชื•ื‘ืช dApp

5. ื”ื–ืŸ ืกื›ื•ื ืงื˜ืŸ ื‘ืฉื“ื” "ื”ืคืงื“ื”" ื•ืœื—ืฅ ืขืœ ื”ื›ืคืชื•ืจ:

ื›ื™ืฆื“ ืœื‘ื ื•ืช, ืœืคืจื•ืก ื•ืœื‘ื“ื•ืง Waves RIDE dApp
Waves Keeper ืžื‘ืงืฉ ื”ืจืฉืื” ืœื—ืชื•ื ืขืœ InvokeScriptTransaction ืขื ืชืฉืœื•ื ืฉืœ 10 WAVES.

6. ืืฉืจ ืืช ื”ืขืกืงื”:

ื›ื™ืฆื“ ืœื‘ื ื•ืช, ืœืคืจื•ืก ื•ืœื‘ื“ื•ืง Waves RIDE dApp
ื”ืขืกืงื” ื ื•ืฆืจืช ื•ืžืฉื•ื“ืจืช ืœืจืฉืช. ืขื›ืฉื™ื• ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืช ืชืขื•ื“ืช ื”ื–ื”ื•ืช ืฉืœื”

7. ืžืขืงื‘ ืื—ืจ ื”ืขืกืงื” ื‘ืืžืฆืขื•ืช Waves Explorer. ื”ื–ืŸ ืžื–ื”ื” ื‘ืฉื“ื” ื”ื—ื™ืคื•ืฉ

ื›ื™ืฆื“ ืœื‘ื ื•ืช, ืœืคืจื•ืก ื•ืœื‘ื“ื•ืง Waves RIDE dApp

ืžืกืงื ื•ืช ื•ืžื™ื“ืข ื ื•ืกืฃ

ื‘ื“ืงื ื• ืืช ื”ื›ืœื™ื ืœืคื™ืชื•ื—, ื‘ื“ื™ืงื”, ืคืจื™ืกื” ื•ืฉื™ืžื•ืฉ ื‘-dApps ืคืฉื•ื˜ื™ื ื‘ืคืœื˜ืคื•ืจืžืช Waves:

  • ืฉืคืช RIDE
  • ืขื•ืจืš ืงื•ื“ VS
  • ื’ืœื™ื ืกื™ื™ืจ
  • ื’ืœืฉืŸ
  • ืฉื•ืžืจ ื’ืœื™ื

ืงื™ืฉื•ืจื™ื ืœืžื™ ืฉืจื•ืฆื” ืœื”ืžืฉื™ืš ืœืœืžื•ื“ RIDE:

ื“ื•ื’ืžืื•ืช ื ื•ืกืคื•ืช
IDE ืžืงื•ื•ืŸ ืขื ื“ื•ื’ืžืื•ืช
ืชื™ืขื•ื“ ื’ืœื™ื
ืฆ'ืื˜ ืœืžืคืชื—ื™ื ื‘ื˜ืœื’ืจื
ื’ืœื™ื ื•ืจื›ื™ื‘ื” ืขืœ ืกื˜ืืง-overflow
ื—ึธื“ึธืฉื! ืงื•ืจืกื™ื ืžืงื•ื•ื ื™ื ืœื™ืฆื™ืจืช dApps ื‘ืคืœื˜ืคื•ืจืžืช Waves

ื”ืžืฉืš ืœืฆืœื•ืœ ืœื ื•ืฉื RIDE ื•ืฆื•ืจ ืืช ื”-dApp ื”ืจืืฉื•ืŸ ืฉืœืš!

TL; DR: bit.ly/2YCFnwY

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”