ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ, ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื•ื•ืึทื•ื•ืขืก RIDE dApp

ื”ืขืœื! ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืื™ืš ื•ื•ืขื˜ ื•ื•ื™ื™ึทื–ืŸ ืื™ืจ ื•ื•ื™ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืื•ืŸ ืœื•ื™ืคืŸ ืึท ืจืขื’ื•ืœืขืจ ื“ืึทืคึผืคึผ ืื•ื™ืฃ ืึท ื•ื•ืึทื•ื•ืขืก ื ืึธื“ืข. ื–ืืœ ืก ืงื•ืง ืื™ืŸ ื“ื™ ื ื™ื™ื˜ื™ืง ืžื›ืฉื™ืจื™ื, ืžืขื˜ื”ืึธื“ืก ืื•ืŸ ืึท ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’.

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ, ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื•ื•ืึทื•ื•ืขืก RIDE dApp

ื“ื™ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืกื›ืขืžืข ืคึฟืึทืจ ื“ืึทืคึผืคึผืก ืื•ืŸ ืจืขื’ื•ืœืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื™ื– ื›ึผืžืขื˜ ื“ื™ ื–ืขืœื‘ืข:

  • ืฉืจื™ื™ื‘ืŸ ืงืึธื“
  • ืฉืจื™ื™ื‘ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ื˜ืขืกื˜ื™ื ื’
  • ืœืึธื ื˜ืฉื™ื ื’ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ
  • ื˜ืขืกื˜ื™ื ื’

ืžื›ืฉื™ืจื™ื

1. docker ืฆื• ืœื•ื™ืคืŸ ื“ื™ ื ืึธื“ืข ืื•ืŸ ื•ื•ืึทื•ื•ืขืก Explorer

ืื•ื™ื‘ ืื™ืจ ื˜ืึธืŸ ื ื™ืฉื˜ ื•ื•ืขืœืŸ ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ืึท ื ืึธื“ืข, ืื™ืจ ืงืขื ืขืŸ ื”ืึธืคึผืงืขืŸ ื“ืขื ืฉืจื™ื˜. ื ืึธืš ืึทืœืข, ืขืก ืื™ื– ืึท ืคึผืจืึธื‘ืข ืื•ืŸ ื™ืงืกืคึผืขืจืžืขื ืึทืœ ื ืขืฅ. ืึธื‘ืขืจ ืึธืŸ ื“ื™ืคึผืœื•ื™ื™ื ื’ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข ื ืึธื“ืข, ื“ื™ ื˜ืขืกื˜ื™ื ื’ ืคึผืจืึธืฆืขืก ืงืขืŸ ืฉืœืขืคึผืŸ ืื•ื™ืฃ.

  • ืื™ืจ ื•ื•ืขื˜ ืงืขืกื™ื™ื“ืขืจ ื“ืึทืจืคึฟืŸ ื ื™ื™ึท ืึทืงืึทื•ื ืฅ ืžื™ื˜ ืคึผืจื•ื‘ื™ืจืŸ ื˜ืึธืงืขื ืก. ื“ื™ ืคึผืจื•ื‘ื™ืจืŸ ื ืขืฅ ืงืจืึทืŸ ื˜ืจืึทื ืกืคืขืจืก 10 ื•ื•ืึทื•ื•ืขืก ื™ืขื“ืขืจ 10 ืžื™ื ื•ื˜.
  • ื“ื™ ื“ื•ืจื›ืฉื ื™ื˜ืœืขืš ื‘ืœืึธืง ืฆื™ื™ื˜ ืื™ืŸ ื“ื™ ืคึผืจื•ื‘ื™ืจืŸ ื ืขืฅ ืื™ื– 1 ืžื™ื ื•ื˜, ืื™ืŸ ื“ื™ ื ืึธื“ืข - 15 ืกืขืงื•ื ื“ืขืก. ื“ืึธืก ืื™ื– ืกืคึผืขืฆื™ืขืœ ื‘ืืžืขืจืงื˜ ื•ื•ืขืŸ ืึท ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืจื™ืงื•ื•ื™ื™ืขืจื– ืงื™ื™ืคืœ ืงืึทื ืคืขืจืžื™ื™ืฉืึทื ื–.
  • ืึทื’ืจืขืกื™ื•ื• ืงืึทื˜ืฉื™ื ื’ ืื™ื– ืžืขื’ืœืขืš ืื•ื™ืฃ ืฆื™ื‘ื•ืจ ืคึผืจื•ื‘ื™ืจืŸ ื ืึธื•ื“ื–.
  • ื–ื™ื™ ืงืขืŸ ืื•ื™ืš ื–ื™ื™ืŸ ื˜ืขืžืคึผืขืจืขืจืึทืœื™ ืึทื ืึทื•ื•ื™ื™ืœืึทื‘ืึทืœ ืจืขื›ื˜ ืฆื• ื•ื™ืฉืึทืœื˜.

ืคื•ืŸ ืื™ืฆื˜ ืื•ื™ืฃ ืื™ืš ื•ื•ืขืœ ื™ื‘ืขืจื ืขืžืขืŸ ืึทื– ืื™ืจ ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ื™ื™ืŸ ืื™ื™ื’ืŸ ื ืึธื“ืข.

2. ืกืขืจืคื‘ืึธืจื“ ืงืึทืžืึทื ื“ ืฉื•ืจื” ื˜ื•ืœ

  • ืืจืืคืงืืคื™ืข ืื•ืŸ ื™ื ืกื˜ืึทืœื™ืจืŸ Node.js ื ื™ืฆืŸ ppa, homebrew ืึธื“ืขืจ exe ื“ืึธ: https://nodejs.org/en/download/.
  • ื™ื ืกื˜ืึทืœื™ืจืŸ Surfboard, ืึท ื’ืขืฆื™ื™ึทื’ ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืœื•ื™ืคืŸ ื˜ืขืกืฅ ืื•ื™ืฃ ืึท ื™ื’ื–ื™ืกื˜ื™ื ื’ ื ืึธื“ืข.

npm install -g @waves/surfboard

3. ื•ื•ื™ืกื•ืึทืœ ืกื˜ื•ื“ื™ืึธ ืงืึธื•ื“ ืคึผืœื•ื’ื™ืŸ

ื“ืขืจ ืฉืจื™ื˜ ืื™ื– ืึทืคึผืฉืึทื ืึทืœ ืื•ื™ื‘ ืื™ืจ ื–ืขื ื˜ ื ื™ืฉื˜ ืึท ืคืึธื›ืขืจ ืคื•ืŸ IDEs ืื•ืŸ ื‘ืขืกืขืจ ื˜ืขืงืกื˜ ืจืขื“ืืงืฆื™ืข. ืึทืœืข ื“ื™ ื ื™ื™ื˜ื™ืง ืžื›ืฉื™ืจื™ื ื–ืขื ืขืŸ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื” ื™ื•ื˜ื™ืœืึทื˜ื™ื–. ืื•ื™ื‘ ืื™ืจ ื ื•ืฆืŸ vim, ื‘ืึทืฆืึธืœืŸ ื•ืคืžืขืจืงื–ืึทืžืงื™ื™ึทื˜ ืฆื• ื“ื™ ืคึผืœื•ื’ื™ืŸ ื•ื•ื™ื-ืคืึธืจ.

ืืจืืคืงืืคื™ืข ืื•ืŸ ื™ื ืกื˜ืึทืœื™ืจืŸ ื•ื•ื™ืกื•ืึทืœ ืกื˜ื•ื“ื™ืึธ ืงืึธื“: https://code.visualstudio.com/

ืขืคึฟืŸ VS ืงืึธื“ ืื•ืŸ ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ื›ื•ื•ืืœื™ืขืก-ืคืึธืจ ืคึผืœื•ื’ื™ืŸ:

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ, ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื•ื•ืึทื•ื•ืขืก RIDE dApp

Waves Keeper ื‘ืœืขื˜ืขืจืขืจ ื’ืขืฉืคึผืจื™ื™ื˜: https://wavesplatform.com/products-keeper

ื’ืขื˜ืืŸ!

ืงืึทื˜ืขืจ ื“ื™ ื ืึธื“ืข ืื•ืŸ ื•ื•ืึทื•ื•ืขืก Explorer

1. ืึธื ื”ื™ื™ื‘ ื“ืขื ื ืึธื“ืข:

docker run -d -p 6869:6869 wavesplatform/waves-private-node

ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ื“ื™ ื ืึธื“ืข ืื™ื– ืœืึธื ื˜ืฉื˜ ื“ื•ืจืš ื“ื™ REST API ืื™ืŸ http://localhost:6869:

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ, ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื•ื•ืึทื•ื•ืขืก 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. ืื™ืจ ื•ื•ืขื˜ ื–ืขืŸ ื•ื•ื™ ื’ืขืฉื•ื•ื™ื ื“ ืึท ืœื™ื™ื“ื™ืง ื”ื™ื’ืข ื ืึธื“ืข ืงืจื™ื™ึทื– ืื™ื– ื’ืขื‘ื•ื™ื˜.

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ, ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื•ื•ืึทื•ื•ืขืก RIDE dApp
Waves Explorer ื“ื™ืกืคึผืœื™ื™ื– ืึท ื”ื™ื’ืข ื ืึธื“ืข ื‘ื™ื™ึทืฉืคึผื™ืœ

ืคืึธืจ ืกื˜ืจื•ืงื˜ื•ืจ ืื•ืŸ ืกืขืจืคื‘ืึธืจื“ ื’ืขืฆื™ื™ึทื’

ืฉืึทืคึฟืŸ ืึท ืœื™ื™ื“ื™ืง ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืื•ืŸ ืœื•ื™ืคืŸ ื“ื™ ื‘ืึทืคึฟืขืœ ืื™ืŸ ืขืก

surfboard init

ื“ืขืจ ื‘ืึทืคึฟืขืœ ื™ื ื™ื˜ื™ืึทืœื™ื™ื–ื™ื– ืึท ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืžื™ื˜ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืกื˜ืจื•ืงื˜ื•ืจ, "ื”ืขืœื ื•ื•ืขืœื˜" ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื•ืŸ ื˜ืขืกืฅ. ืื•ื™ื‘ ืื™ืจ ืขืคึฟืขื ืขืŸ ื“ืขื ื˜ืขืงืข ืžื™ื˜ VS ืงืึธื“, ืื™ืจ ื•ื•ืขื˜ ื–ืขืŸ:

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ, ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื•ื•ืึทื•ื•ืขืก RIDE dApp
Surfboard.config.json

  • ืื•ื ื˜ืขืจ ื“ื™ ./ride/ ื˜ืขืงืข ืื™ืจ ื•ื•ืขื˜ ื’ืขืคึฟื™ื ืขืŸ ืึท ืื™ื™ืŸ ื˜ืขืงืข wallet.ride - ื“ืขืจ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ื•ื•ื• ื“ื™ ื“ืึทืคึผืคึผ ืงืึธื“ ืื™ื– ืœื™ื’ืŸ. ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืขืงื™ืฆืขืจ ืึทื ืึทืœื™ื™ื– dApps ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ื‘ืœืึธืง.
  • ืื•ื ื˜ืขืจ ื“ื™ ./test/ ื˜ืขืงืข ืื™ืจ ื•ื•ืขื˜ ื’ืขืคึฟื™ื ืขืŸ ืึท *.js ื˜ืขืงืข. ื˜ืขืกืฅ ื–ืขื ืขืŸ ืกื˜ืึธืจื“ ื“ืึธ.
  • ./surfboard.config.json - ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข ืคึฟืึทืจ ืคืœื™ืกื ื“ื™ืง ื˜ืขืกืฅ.

Envs ืื™ื– ืึท ื•ื•ื™ื›ื˜ื™ืง ืึธืคึผื˜ื™ื™ืœื•ื ื’. ื™ืขื“ืขืจ ืกื•ื•ื™ื•ื•ืข ืื™ื– ืงืึทื ืคื™ื’ื™ืขืจื“ ื•ื•ื™ ื“ืึธืก:

  • REST API ืขื ื“ืคึผื•ื™ื ื˜ ืคื•ืŸ ื“ื™ ื ืึธื“ืข ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื ื•ืฆื˜ ืฆื• ืงืึทื˜ืขืจ ื“ื™ ื“ืึทืคึผืคึผ ืื•ืŸ CHAIN_ID ืคื•ืŸ ื“ื™ ื ืขืฅ.
  • ื ืกื•ื“ ืคึฟืจืึทื–ืข ืคึฟืึทืจ ืึท ื—ืฉื‘ื•ืŸ ืžื™ื˜ ื˜ืึธืงืขื ืก ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื™ ืงื•ื•ืืœืŸ ืคื•ืŸ ื“ื™ื™ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื˜ืึธืงืขื ืก.

ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ, surfboard.config.json ืฉื˜ื™ืฆื˜ ืงื™ื™ืคืœ ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜. ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืื™ื– ื“ื™ ื”ื™ื’ืข ืกื•ื•ื™ื•ื•ืข (ื“ื™ defaultEnv ืฉืœื™ืกืœ ืื™ื– ืึท ื˜ืฉื™ื™ื ื“ื–ืฉืึทื‘ืึทืœ ืคึผืึทืจืึทืžืขื˜ืขืจ).

ื‘ื™ื™ึทื˜ืœ-ื“ืขืžืึธ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ

ื“ืขืจ ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืื™ื– ื ื™ืฉื˜ ืึท ืจืขืคึฟืขืจืขื ืฅ ืฆื• ื“ื™ RIDE ืฉืคึผืจืึทืš. ืืœื, ืึท ืงื•ืง ืื™ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืึทื– ืžื™ืจ ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ื‘ืขืกืขืจ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ืึธืก ืื™ื– ื’ืขืฉืขืขื ื™ืฉ ืื™ืŸ ื“ื™ ื‘ืœืึธืงื˜ืฉื™ื™ืŸ.

ื–ืืœ ืก ืงื•ืง ืื™ืŸ ืึท ืคึผืฉื•ื˜ ื•ื•ืึทืœืœืขื˜-ื“ืขืžืึธ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ. ื•ื•ืขืจ ืขืก ื™ื– ืงืขื ืขืŸ ืฉื™ืงืŸ ื˜ืึธืงืขื ืก ืฆื• ืึท ื“ืึทืคึผ ืึทื“ืจืขืก. ืื™ืจ ืงืขื ื˜ ื‘ืœื•ื™ื– ืฆื•ืจื™ืงืฆื™ืขืŸ ื“ื™ื™ืŸ ื›ื•ื•ืืœื™ืขืก. ืฆื•ื•ื™ื™ @Callable ืคืึทื ื’ืงืฉืึทื ื– ื–ืขื ืขืŸ ื‘ืืจืขื›ื˜ื™ื’ื˜ ื“ื•ืจืš InvokeScriptTransaction:

  • deposit()ื•ื•ืึธืก ืจื™ืงื•ื•ื™ื™ืขืจื– ืึท ืึทื˜ืึทื˜ืฉื˜ ืฆืึธืœื•ื ื’ ืื™ืŸ WAVES
  • withdraw(amount: Int)ื•ื•ืึธืก ืงืขืจื˜ ื˜ืึธืงืขื ืก

ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ (ืึทื“ืจืขืก โ†’ ืกื•ืžืข) ื•ื•ืขื˜ ื–ื™ื™ืŸ ืžื™ื™ื ื˜ื™ื™ื ื“ ืื™ื‘ืขืจ ื“ื™ dApp ืœื™ื™ืคืกื™ื™ืง:

ืงืึทืžืฃ
ืจื™ื–ืึทืœื˜ื™ื ื’ ืฉื˜ืึทื˜

ืขืจืฉื˜
ืœื™ื™ื“ื™ืง

ืึทืœื™ืก ื“ื™ืคึผืึทื–ืึทืฅ 5 ื›ื•ื•ืืœื™ืขืก
ืึทืœื™ืก-ืึทื“ืจืขืก โ†’ 500000000

ื‘ืึธื‘ ื“ื™ืคึผืึทื–ืึทืฅ 2 ื›ื•ื•ืืœื™ืขืก

ืึทืœื™ืก-ืึทื“ืจืขืก โ†’ 500000000
ื‘ืึธื‘ ืึทื“ืจืขืก โ†’ 200000000

ื‘ืึธื‘ ืฆื•ืจื™ืงืฆื™ืขืŸ 7 ื›ื•ื•ืืœื™ืขืก
ื“ื™ื ื™ื™ื“!

ืึทืœื™ืก ืฆื•ืจื™ืงืฆื™ืขืŸ 4 ื›ื•ื•ืืœื™ืขืก
ืึทืœื™ืก-ืึทื“ืจืขืก โ†’ 100000000
ื‘ืึธื‘ ืึทื“ืจืขืก โ†’ 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 ืคึผืœื•ื’ื™ืŸ ืฉื˜ื™ืฆื˜ ืงืขืกื™ื™ื“ืขืจื“ื™ืง ื–ืึทืžืœื•ื ื’ ื‘ืฉืขืช ืขื“ื™ื˜ื™ื ื’ ืึท ื˜ืขืงืข. ื“ืขืจื™ื‘ืขืจ, ืื™ืจ ืงืขื ืขืŸ ืฉื˜ืขื ื“ื™ืง ืžืึธื ื™ื˜ืึธืจ ืขืจืจืึธืจืก ืื™ืŸ ื“ื™ PROBLEMS ืงื•ื•ื™ื˜ืœ.

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ, ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื•ื•ืึทื•ื•ืขืก RIDE dApp
ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื ื•ืฆืŸ ืึท ืึทื ื“ืขืจืฉ ื˜ืขืงืกื˜ ืจืขื“ืึทืงื˜ืึธืจ ื•ื•ืขืŸ ืงืึทืžืคึผื™ื™ืœื™ื ื’ ื“ื™ ื˜ืขืงืข, ื ื•ืฆืŸ

surfboard compile ride/wallet.ride

ื“ืึธืก ื•ื•ืขื˜ ืึทืจื•ื™ืกืคื™ืจืŸ ืึท ืกืขืจื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹Base64 ืงืึทืžืคึผื™ื™ืœื“ RIDE ืงืึธื“.

ื˜ืขืกื˜ ืฉืจื™ืคื˜ ืคึฟืึทืจ 'wallet.ride'

ื–ืืœ ืก ืงื•ืง ื‘ื™ื™ึท ืคึผืจื•ื‘ื™ืจืŸ ื˜ืขืงืข. ืคึผืึทื•ืขืจื“ ื“ื•ืจืš ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜ ืก ืžืึธื˜ืฉืึท ืคืจื™ื™ืžื•ื•ืขืจืง. ืขืก ืื™ื– ืึท "ืื™ื™ื“ืขืจ" ืคึฟื•ื ืงืฆื™ืข ืื•ืŸ ื“ืจื™ื™ ื˜ืขืกืฅ:

  • "ืื™ื™ื“ืขืจ" ื’ืขืœื˜ ืงื™ื™ืคืœ ืึทืงืึทื•ื ืฅ ื“ื•ืจืš MassTransferTransaction, ืงืึทืžืคึผื™ื™ืœื– ื“ื™ ืฉืจื™ืคื˜ ืื•ืŸ ื“ื™ืคึผืœื•ื™ื“ื– ืขืก ืฆื• ื“ื™ ื‘ืœืึทืงื›ื™ื™ื•ื•ืึทืŸ.
  • "ืงืขื ืขืŸ ืึทื•ื•ืขืงืœื™ื™ื’ืŸ" ืกืขื ื“ื– ืึทืŸ InvokeScriptTransaction ืฆื• ื“ื™ ื ืขืฅ, ืึทืงื˜ืึทื•ื•ื™ื™ื˜ื™ื ื’ ื“ื™ ืึทื•ื•ืขืงืœื™ื™ื’ืŸ () ืคื•ื ืงืฆื™ืข ืคึฟืึทืจ ื™ืขื“ืขืจ ืคื•ืŸ ื“ื™ ืฆื•ื•ื™ื™ ืึทืงืึทื•ื ืฅ.
  • "ืงืขืŸ ื ื™ืฉื˜ ืฆื•ืจื™ืงืฆื™ืขืŸ ืžืขืจ ื•ื•ื™ ื“ื™ืคึผืึทื–ืึทื˜ืึทื“" ื˜ืขืกืฅ ืึทื– ืงื™ื™ืŸ ืื™ื™ื ืขืจ ืงืขื ืขืŸ ื’ืึทื ื•ื•ืขื ืขืŸ ืื ื“ืขืจืข ืžืขื ื˜ืฉืŸ ืก ื˜ืึธืงืขื ืก.
  • "ืงืขื ืขืŸ ืึทื•ื•ืขืงืœื™ื™ื’ืŸ" ื˜ืฉืขืงืก ืึทื– ื•ื•ื™ื“ื“ืจืึธืึทืœื– ื–ืขื ืขืŸ ืคึผืจืึทืกืขืกื˜ ืจื™ื›ื˜ื™ืง.

ืœื•ื™ืคืŸ ื˜ืขืกืฅ ืคึฟื•ืŸ ืกื•ืจืคื‘ืึธืจื“ ืื•ืŸ ืคื•ื ืึทื ื“ืขืจืงืœื™ื™ึทื‘ืŸ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืื™ืŸ ื•ื•ืึทื•ื•ืขืก Explorer

ืฆื• ืœื•ื™ืคืŸ ื“ื™ ืคึผืจืึธื‘ืข, ืœื•ื™ืคืŸ

surfboard test

ืื•ื™ื‘ ืื™ืจ ื”ืึธื‘ืŸ ืงื™ื™ืคืœ ืกืงืจื™ืคึผืก (ืœืžืฉืœ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืฉืจื™ืคื˜), ืื™ืจ ืงืขื ืขืŸ ืœื•ื™ืคืŸ

surfboard test my-scenario.js

ืกืขืจืคื‘ืึธืจื“ ื•ื•ืขื˜ ืงืœื™ื™ึทื‘ืŸ ื“ื™ ืคึผืจืึธื‘ืข ื˜ืขืงืขืก ืื™ืŸ ื“ื™ ./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)

ื”ืืจื™ื™! ื˜ืขืกืฅ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ. ืื™ืฆื˜ ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ืงื•ืง ืื™ืŸ ื•ื•ืึธืก ื›ืึทืคึผืึทื ื– ื•ื•ืขืŸ ื ื™ืฆืŸ ื•ื•ืึทื•ื•ืขืก Explorer: ืงื•ืง ืื™ืŸ ื“ื™ ื‘ืœืึทืงืก ืึธื“ืขืจ ืคึผืึทืคึผ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืึทื“ืจืขืกืขืก ืื•ื™ื‘ืŸ ืื™ืŸ ื“ืขืจ ื–ื•ื›ืŸ (ืœืžืฉืœ, ื“ื™ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ wallet#. ืขืก ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ื’ืขืฉื™ื›ื˜ืข, ื“ืึทืคึผืคึผ ืกื˜ืึทื˜ื•ืก, ื“ืขืงืึธืžืคึผื™ื™ืœื“ ื‘ื™ื™ื ืขืจื™ ื˜ืขืงืข.

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ, ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื•ื•ืึทื•ื•ืขืก RIDE dApp
ื•ื•ืึทื•ื•ืขืก Explorer. ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื•ื•ืึธืก ืื™ื– ืคึผื•ื ืงื˜ ื“ื™ืคึผืœื•ื™ื“.

ืขื˜ืœืขื›ืข ืกืขืจืคื‘ืึธืจื“ ืขืฆื•ืช:

1. ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืื™ืŸ ื“ื™ ื˜ืขืกื˜ื ืขื˜ ืกื•ื•ื™ื•ื•ืข, ื ื•ืฆืŸ:

surfboard test --env=testnet

ื‘ืึทืงื•ืžืขืŸ ื˜ืขืกื˜ ื˜ืึธืงืขื ืก

2. ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื–ืขืŸ ื“ื™ JSON ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื˜ืจืึทื ื–ืึทืงืฉืึทื ื– ืื•ืŸ ื•ื•ื™ ื–ื™ื™ ื–ืขื ืขืŸ ืคึผืจืึทืกืขืกื˜ ื“ื•ืจืš ื“ื™ ื ืึธื“ืข, ืœื•ื™ืคืŸ ื“ื™ ืคึผืจืึธื‘ืข ืžื™ื˜ -v (ืžื™ื˜ืœ 'ื•ื•ืขืจื‘ืึธื•ืก'):

surfboard test -v

ื ื™ืฆืŸ ืึทืคึผืคึผืก ืžื™ื˜ Waves Keeper

1. ืฉื˜ืขืœืŸ Waves Keeper ืฆื• ืึทืจื‘ืขื˜ืŸ: http://localhost:6869

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ, ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื•ื•ืึทื•ื•ืขืก RIDE dApp
ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ Waves Keeper ืฆื• ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ืึท ื”ื™ื’ืข ื ืึธื“ืข

2. ืึทืจื™ื™ึทื ืคื™ืจ ืกื•ื“ ืคืจืึทื–ืข ืžื™ื˜ ื˜ืึธืงืขื ืก ืคึฟืึทืจ ื“ื™ ื ืขืฅ? ืคึฟืึทืจ ืคึผืึทืฉื˜ืขืก, ื ื•ืฆืŸ ื“ื™ ืขืจืฉื˜ ื–ื•ื™ืžืขืŸ ืคื•ืŸ ื“ื™ื™ืŸ ื ืึธื“ืข: waves private node seed with waves tokens. ืึทื“ืจืขืก: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. ืื™ืจ ืงืขื ืขืŸ ืœื•ื™ืคืŸ ืึท ืกืขืจื•ื•ืขืจืœืขืกืก ืื™ื™ืŸ ื‘ืœืึทื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื–ื™ืš ื ื™ืฆืŸ ื ืคึผื. ืึธื“ืขืจ ื’ื™ื™ืŸ ืฆื• ื“ื™ ื™ื’ื–ื™ืกื˜ื™ื ื’ ืื™ื™ื ืขืจ: chrome-ext.wvservices.com/dapp-wallet.html

4. ืึทืจื™ื™ึทืŸ ื“ื™ ื‘ื™ื™ึทื˜ืœ ืึทื“ืจืขืก ืคื•ืŸ ื“ื™ ืคึผืจื•ื‘ื™ืจืŸ ืœื•ื™ืคืŸ (ืึทื ื“ืขืจืœื™ื™ื ื“ ืื•ื™ื‘ืŸ) ืื™ืŸ ื“ื™ ื“ืึทืคึผืคึผ ืึทื“ืจืขืก ื˜ืขืงืกื˜ ืงืขืกื˜ืœ

5. ืึทืจื™ื™ึทืŸ ืึท ืงืœื™ื™ืŸ ืกื•ืžืข ืื™ืŸ ื“ื™ "ืึทื•ื•ืขืงืœื™ื™ื’ืŸ" ืคืขืœื“ ืื•ืŸ ื’ื™ื˜ ื“ื™ ืงื ืขืคึผืœ:

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ, ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื•ื•ืึทื•ื•ืขืก RIDE dApp
Waves Keeper ืจื™ืงื•ื•ืขืก ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืฆื• ืฆื™ื™ื›ืŸ ืึทืŸ InvokeScriptTransaction ืžื™ื˜ ืฆืึธืœื•ื ื’ ืคื•ืŸ 10 WAVES.

6. ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ื™ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ:

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ, ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื•ื•ืึทื•ื•ืขืก RIDE dApp
ื“ื™ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืื™ื– ื‘ืืฉืืคืŸ ืื•ืŸ ื‘ืจืึธื“ืงืึทืกื˜ ืฆื• ื“ื™ ื ืขืฅ. ืื™ืฆื˜ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืื™ืจ ืฉื™ื™ึทืŸ

7. ืžืึธื ื™ื˜ืึธืจ ื“ื™ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ื ื™ืฆืŸ ื•ื•ืึทื•ื•ืขืก Explorer. ืึทืจื™ื™ึทืŸ ID ืื™ืŸ ื“ื™ ื–ื•ื›ืŸ ืคืขืœื“

ื•ื•ื™ ืฆื• ื‘ื•ื™ืขืŸ, ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื•ื•ืึทื•ื•ืขืก RIDE dApp

ืงืึทื ืงืœื•ื–ืฉืึทื ื– ืื•ืŸ ื ืึธืš ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข

ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขืงื•ืงื˜ ืื•ื™ืฃ ื“ื™ ืžื›ืฉื™ืจื™ื ืคึฟืึทืจ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’, ื˜ืขืกื˜ื™ื ื’, ื“ื™ืคึผืœื•ื™ื™ื ื’ ืื•ืŸ ื ื™ืฆืŸ ืคึผืฉื•ื˜ ื“ืึทืคึผืคึผืก ืื•ื™ืฃ ื“ื™ ื•ื•ืึทื•ื•ืขืก ืคึผืœืึทื˜ืคืึธืจื:

  • RIDE ืฉืคึผืจืึทืš
  • VS ืงืึธื“ ืขื“ื™ื˜ืึธืจ
  • ื•ื•ืึทื•ื•ืขืก Explorer
  • ืกืขืจืคื‘ืึธืจื“
  • Waves Keeper

ืœื™ื ืงืก ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ื•ื•ื™ืœืŸ ืฆื• ืคืึธืจื–ืขืฆืŸ ืœืขืจื ืขืŸ RIDE:

ืžืขืจ ื‘ื™ื™ืฉืคื™ืœืŸ
ืึธื ืœื™ื™ืŸ IDE ืžื™ื˜ ื‘ื™ื™ืฉืคื™ืœืŸ
ื•ื•ืึทื•ื•ืขืก ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ
ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืฉืžื•ืขืกืŸ ืื™ืŸ ื˜ืขืœืขื’ืจืึทื
ื›ื•ื•ืืœื™ืขืก ืื•ืŸ ืคืึธืจ ืื•ื™ืฃ ืกื˜ืึทืงืึธื•ื•ืขืจืคืœืึธื•ื•
ื ื™ื™ึท! ืึธื ืœื™ื™ืŸ ืงืึธืจืกืึทื– ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ ื“ืึทืคึผืคึผืก ืื•ื™ืฃ ื“ื™ ื•ื•ืึทื•ื•ืขืก ืคึผืœืึทื˜ืคืึธืจื

ืคืึธืจื–ืขืฆืŸ ื“ื™ื™ื•ื•ื™ื ื’ ืื™ืŸ ื“ื™ RIDE ื˜ืขืžืข ืื•ืŸ ืฉืึทืคึฟืŸ ื“ื™ื™ืŸ ืขืจืฉื˜ืขืจ ื“ืึทืคึผืคึผ!

ื˜ืœ; ื“ืจ: bit.ly/2YCFnwY

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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’