RIDE dApp рд▓рд╛рдЯрд╛ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ, рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рд╡реЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдХрд╢реА рдХрд░рд╛рд╡реА

рдирдорд╕реНрдХрд╛рд░! рдпрд╛ рд▓реЗрдЦрд╛рдд рдореА рддреБрдореНрд╣рд╛рд▓рд╛ Waves рдиреЛрдбрд╡рд░ рдирд┐рдпрдорд┐рдд dApp рдХрд╕реЗ рд▓рд┐рд╣рд╛рдпрдЪреЗ рдЖрдгрд┐ рдЪрд╛рд▓рд╡рд╛рдпрдЪреЗ рддреЗ рджрд╛рдЦрд╡рдгрд╛рд░ рдЖрд╣реЗ. рдЪрд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдзрдиреЗ, рдкрджреНрдзрддреА рдЖрдгрд┐ рд╡рд┐рдХрд╛рд╕рд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ.

RIDE dApp рд▓рд╛рдЯрд╛ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ, рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рд╡реЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдХрд╢реА рдХрд░рд╛рд╡реА

dApps рдЖрдгрд┐ рдирд┐рдпрдорд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрд╕рд╛рдареА рд╡рд┐рдХрд╛рд╕ рдпреЛрдЬрдирд╛ рдЬрд╡рд│рдЬрд╡рд│ рд╕рд╛рд░рдЦреАрдЪ рдЖрд╣реЗ:

  • рд▓реЗрдЦрди рдХреЛрдб
  • рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдЪрд╛рдЪрдгреА рд▓реЗрдЦрди
  • рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд╛рдБрдЪ рдХрд░рдд рдЖрд╣реЗ
  • рдЪрд╛рдЪрдгреА

рд╕рд╛рдзрдиреЗ

1. docker рдиреЛрдб рдЖрдгрд┐ рд╡реЗрд╡реНрд╣реНрдЬ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА

рддреБрдореНрд╣реА рдиреЛрдб рд╕реБрд░реВ рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдирд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рд╣реА рдкрд╛рдпрд░реА рд╡рдЧрд│реВ рд╢рдХрддрд╛. рд╢реЗрд╡рдЯреА, рдПрдХ рдЪрд╛рдЪрдгреА рдЖрдгрд┐ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдЖрд╣реЗ. рдкрд░рдВрддреБ рддреБрдордЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдиреЛрдб рдЙрдкрдпреЛрдЬрд┐рдд рди рдХрд░рддрд╛, рдЪрд╛рдЪрдгреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреБрдвреЗ рдЬрд╛рдК рд╢рдХрддреЗ.

  • рддреБрдореНрд╣рд╛рд▓рд╛ рдЪрд╛рдЪрдгреА рдЯреЛрдХрдиреНрд╕рд╕рд╣ рд╕рддрдд рдирд╡реАрди рдЦрд╛рддреНрдпрд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓. рдЪрд╛рдЪрдгреА рдиреЗрдЯрд╡рд░реНрдХ рдирд▓ рджрд░ 10 рдорд┐рдирд┐рдЯрд╛рдВрдиреА 10 рд▓рд╛рдЯрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ.
  • рдЪрд╛рдЪрдгреА рдиреЗрдЯрд╡рд░реНрдХрдордзреНрдпреЗ рд╕рд░рд╛рд╕рд░реА рдмреНрд▓реЙрдХ рд╡реЗрд│ 1 рдорд┐рдирд┐рдЯ рдЖрд╣реЗ, рдиреЛрдбрдордзреНрдпреЗ - 15 рд╕реЗрдХрдВрдж. рдЬреЗрд╡реНрд╣рд╛ рдПрдЦрд╛рджреНрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рд╕рд╛рдареА рдПрдХрд╛рдзрд┐рдХ рдкреБрд╖реНрдЯреАрдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддрд╛рдд рддреЗрд╡реНрд╣рд╛ рд╣реЗ рд╡рд┐рд╢реЗрд╖рддрдГ рд▓рдХреНрд╖рд╛рдд рдпреЗрддреЗ.
  • рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЪрд╛рдЪрдгреА рдиреЛрдбреНрд╕рд╡рд░ рдЖрдХреНрд░рдордХ рдХреЕрд╢рд┐рдВрдЧ рд╢рдХреНрдп рдЖрд╣реЗ.
  • рджреЗрдЦрднрд╛рд▓реАрдореБрд│реЗ рддреЗ рддрд╛рддреНрдкреБрд░рддреЗ рдЕрдиреБрдкрд▓рдмреНрдз рджреЗрдЦреАрд▓ рдЕрд╕реВ рд╢рдХрддрд╛рдд.

рдЖрддрд╛рдкрд╛рд╕реВрди рдореА рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реЗрди рдХреА рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдиреЛрдбрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдд рдЖрд╣рд╛рдд.

2. рд╕рд░реНрдлрдмреЛрд░реНрдб рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓

  • рдпреЗрдереЗ ppa, homebrew рдХрд┐рдВрд╡рд╛ exe рд╡рд╛рдкрд░реВрди Node.js рдбрд╛рдЙрдирд▓реЛрдб рдЖрдгрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛: https://nodejs.org/en/download/.
  • рд╕рд░реНрдлрдмреЛрд░реНрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛, рдПрдХ рд╕рд╛рдзрди рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд┐рджреНрдпрдорд╛рди рдиреЛрдбрд╡рд░ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ.

npm install -g @waves/surfboard

3. рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓ рд╕реНрдЯреБрдбрд┐рдУ рдХреЛрдб рдкреНрд▓рдЧрдЗрди

рддреБрдореНрд╣реА IDE рдЪреЗ рдЪрд╛рд╣рддреЗ рдирд╕рд▓реНрдпрд╛рд╕ рдЖрдгрд┐ рдордЬрдХреВрд░ рд╕рдВрдкрд╛рджрдХрд╛рдВрдирд╛ рдкреНрд░рд╛рдзрд╛рдиреНрдп рджрд┐рд▓реНрдпрд╛рд╕ рд╣реА рдкрд╛рдпрд░реА рдРрдЪреНрдЫрд┐рдХ рдЖрд╣реЗ. рд╕рд░реНрд╡ рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдзрдиреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдпреБрдЯрд┐рд▓рд┐рдЯреАрдЬ рдЖрд╣реЗрдд. рдЖрдкрдг vim рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рдкреНрд▓рдЧрдЗрдирдХрдбреЗ рд▓рдХреНрд╖ рджреНрдпрд╛ vim-рд░рд╛рдИрдб.

рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓ рд╕реНрдЯреБрдбрд┐рдУ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдЖрдгрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛: https://code.visualstudio.com/

рд╡реНрд╣реАрдПрд╕ рдХреЛрдб рдЙрдШрдбрд╛ рдЖрдгрд┐ рд▓рд╛рдЯрд╛-рд░рд╛рдЗрдб рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛:

RIDE dApp рд▓рд╛рдЯрд╛ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ, рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рд╡реЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдХрд╢реА рдХрд░рд╛рд╡реА

рд╡реЗрд╡реНрд╣рдЬ рдХреАрдкрд░ рдмреНрд░рд╛рдЙрдЭрд░ рд╡рд┐рд╕реНрддрд╛рд░: https://wavesplatform.com/products-keeper

рдЭрд╛рд▓реЗ!

рдиреЛрдб рдЖрдгрд┐ рд╡реЗрд╡реНрд╣реНрдЬ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рд╕реБрд░реВ рдХрд░рд╛

1. рдиреЛрдб рд╕реБрд░реВ рдХрд░рд╛:

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

рдордзреНрдпреЗ REST API рджреНрд╡рд╛рд░реЗ рдиреЛрдб рд▓рд╛рдБрдЪ рдХреЗрд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рд╛ http://localhost:6869:

RIDE dApp рд▓рд╛рдЯрд╛ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ, рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рд╡реЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдХрд╢реА рдХрд░рд╛рд╡реА
рдиреЛрдбрд╕рд╛рдареА рд╕реНрд╡реИрдЧрд░ 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 рд╕рд╛рдкрдбреЗрд▓ - рдЬрд┐рдереЗ dApp рдХреЛрдб рд╕реНрдерд┐рдд рдЖрд╣реЗ. рдЖрдореНрд╣реА рдкреБрдвреАрд▓ рдмреНрд▓реЙрдХрдордзреНрдпреЗ dApps рдЪреЗ рдереЛрдбрдХреНрдпрд╛рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВ.
  • ./test/ рдлреЛрд▓реНрдбрд░ рдЕрдВрддрд░реНрдЧрдд рддреБрдореНрд╣рд╛рд▓рд╛ *.js рдлрд╛рдЗрд▓ рдорд┐рд│реЗрд▓. рдЪрд╛рдЪрдгреНрдпрд╛ рдпреЗрдереЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдЖрд╣реЗрдд.
  • ./surfboard.config.json тАУ рдЪрд╛рд▓реВ рдЪрд╛рдЪрдгреНрдпрд╛рдВрд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓.

Envs рд╣рд╛ рдПрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рд╡рд┐рднрд╛рдЧ рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдпрд╛рдкреНрд░рдорд╛рдгреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЖрд╣реЗ:

  • рдиреЛрдбрдЪрд╛ REST API рдПрдВрдбрдкреЙрдЗрдВрдЯ рдЬреЛ рдиреЗрдЯрд╡рд░реНрдХрдЪрд╛ dApp рдЖрдгрд┐ CHAIN_ID рд▓рд╛рдБрдЪ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдИрд▓.
  • рдЯреЛрдХрди рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЦрд╛рддреНрдпрд╛рд╕рд╛рдареА рдЧреБрдкреНрдд рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдЬреЗ рддреБрдордЪреНрдпрд╛ рдЪрд╛рдЪрдгреА рдЯреЛрдХрдирдЪреЗ рд╕реНрд░реЛрдд рдЕрд╕рддреАрд▓.

рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, surfboard.config.json рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рдПрдХрд╛рдзрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рд╕ рд╕рдорд░реНрдерди рджреЗрддреЗ. рдбреАрдлреЙрд▓реНрдЯ рд╕реНрдерд╛рдирд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдЖрд╣реЗ (рдбреАрдлреЙрд▓реНрдЯ рдПрдирд╡реНрд╣реА рдХреА рдмрджрд▓рдгреНрдпрд╛рдпреЛрдЧреНрдп рдкреЕрд░рд╛рдореАрдЯрд░ рдЖрд╣реЗ).

рд╡реЙрд▓реЗрдЯ-рдбреЗрдореЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ

рд╣рд╛ рд╡рд┐рднрд╛рдЧ RIDE рднрд╛рд╖реЗрдЪрд╛ рд╕рдВрджрд░реНрдн рдирд╛рд╣реА. рддреНрдпрд╛рдРрд╡рдЬреА, рдмреНрд▓реЙрдХрдЪреЗрдирдордзреНрдпреЗ рдХрд╛рдп рдЪрд╛рд▓рд▓реЗ рдЖрд╣реЗ рд╣реЗ рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЙрдкрдпреЛрдЬрд┐рдд рдХреЗрд▓реЗрд▓рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдХрд░рддреЛ.

рдЪрд▓рд╛ рдПрдХ рд╕рд╛рдзрд╛ рд╡реЙрд▓реЗрдЯ-рдбреЗрдореЛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╛рд╣реВ. dApp рдкрддреНрддреНрдпрд╛рд╡рд░ рдХреЛрдгреАрд╣реА рдЯреЛрдХрди рдкрд╛рдард╡реВ рд╢рдХрддреЛ. рддреБрдореНрд╣реА рдлрдХреНрдд рддреБрдордЪреНрдпрд╛ WAVES рдорд╛рдЧреЗ рдШреЗрдК рд╢рдХрддрд╛. рджреЛрди @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

рдирдореБрдирд╛ рдХреЛрдб рдпреЗрдереЗ рджреЗрдЦреАрд▓ рдЖрдврд│реВ рд╢рдХрддреЛ GitHub.

VSCode рдкреНрд▓рдЧрдЗрди рдлрд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛рдирд╛ рд╕рддрдд рд╕рдВрдХрд▓рдирд╛рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ. рдореНрд╣рдгреВрди, рдЖрдкрдг рдиреЗрд╣рдореА рд╕рдорд╕реНрдпрд╛ рдЯреЕрдмрдордзреАрд▓ рддреНрд░реБрдЯреАрдВрдЪреЗ рдкрд░реАрдХреНрд╖рдг рдХрд░реВ рд╢рдХрддрд╛.

RIDE dApp рд▓рд╛рдЯрд╛ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ, рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рд╡реЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдХрд╢реА рдХрд░рд╛рд╡реА
рдлрд╛рдЗрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛рдирд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реЗрдЧрд│рд╛ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рд╡рд╛рдкрд░рд╛рдпрдЪрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рд╡рд╛рдкрд░рд╛

surfboard compile ride/wallet.ride

рд╣реЗ рдмреЗрд╕64 рд╕рдВрдХрд▓рд┐рдд рд░рд╛рдЗрдб рдХреЛрдбрдЪреА рдорд╛рд▓рд┐рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрд▓.

'wallet.ride' рд╕рд╛рдареА рдЪрд╛рдЪрдгреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ

рдмрдШреВрдпрд╛ рдЪрд╛рдЪрдгреА рдлрд╛рдЗрд▓. JavaScript рдЪреНрдпрд╛ рдореЛрдЪрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХрджреНрд╡рд╛рд░реЗ рд╕рдорд░реНрдерд┐рдд. "рдкреВрд░реНрд╡реА" рдлрдВрдХреНрд╢рди рдЖрдгрд┐ рддреАрди рдЪрд╛рдЪрдгреНрдпрд╛ рдЖрд╣реЗрдд:

  • "рдкреВрд░реНрд╡реА" MassTransferTransaction рджреНрд╡рд╛рд░реЗ рдПрдХрд╛рдзрд┐рдХ рдЦрд╛рддреНрдпрд╛рдВрдирд╛ рдирд┐рдзреА рджреЗрддреЗ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рдЖрдгрд┐ рдмреНрд▓реЙрдХрдЪреЗрдирд╡рд░ рддреИрдирд╛рдд рдХрд░рддреЗ.
  • "рдХреЕрди рдбрд┐рдкреЙрдЭрд┐рдЯ" рдиреЗрдЯрд╡рд░реНрдХрд╡рд░ InvokeScriptTransaction рдкрд╛рдард╡рддреЗ, рджреЛрди рдЦрд╛рддреНрдпрд╛рдВрдкреИрдХреА рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА deposit() рдлрдВрдХреНрд╢рди рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ.
  • рдХреЛрдгреАрд╣реА рдЗрддрд░ рд▓реЛрдХрд╛рдВрдЪреЗ рдЯреЛрдХрди рдЪреЛрд░реВ рд╢рдХрдд рдирд╛рд╣реА рдЕрд╢рд╛ рдЪрд╛рдЪрдгреНрдпрд╛ тАЬрдЬрдорд╛ рдХреЗрд▓реНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдкреИрд╕реЗ рдХрд╛рдвреВ рд╢рдХрдд рдирд╛рд╣реАтАЭ.
  • рдкреИрд╕реЗ рдХрд╛рдврдгреНрдпрд╛рдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпреЛрдЧреНрдп рдкреНрд░рдХрд╛рд░реЗ рдХреЗрд▓реА рдЬрд╛рдд рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рдзрдирд╛рджреЗрд╢ тАЬрдЬрдорд╛ рдХрд░реВ рд╢рдХрддрд╛рддтАЭ.

рд╕рд░реНрдлрдмреЛрд░реНрдбрд╡рд░реВрди рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рд╛ рдЖрдгрд┐ 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)

рд╣реБрд░реНрд░реЗ! рдЪрд╛рдЪрдгреНрдпрд╛ рдкрд╛рд╕ рдЭрд╛рд▓реНрдпрд╛. рдЖрддрд╛ рд╡реЗрд╡реНрд╣реНрд╕ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рд╡рд╛рдкрд░рддрд╛рдирд╛ рдХрд╛рдп рд╣реЛрддреЗ рддреЗ рдкрд╛рд╣реВ: рдмреНрд▓реЙрдХреНрд╕ рдкрд╣рд╛ рдХрд┐рдВрд╡рд╛ рд╡рд░реАрд▓ рдкрддреНрддреНрдпрд╛рдВрдкреИрдХреА рдПрдХ рд╢реЛрдз рдордзреНрдпреЗ рдкреЗрд╕реНрдЯ рдХрд░рд╛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕рдВрдмрдВрдзрд┐рдд wallet#. рддреЗрдереЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЗрддрд┐рд╣рд╛рд╕, dApp рд╕реНрдерд┐рддреА, рдбреАрдХрдВрдкрд╛рдЗрд▓ рдмрд╛рдпрдирд░реА рдлрд╛рдЗрд▓ рдорд┐рд│реВ рд╢рдХрддреЗ.

RIDE dApp рд▓рд╛рдЯрд╛ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ, рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рд╡реЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдХрд╢реА рдХрд░рд╛рд╡реА
рд▓рд╛рдЯрд╛ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░. рдиреБрдХрддрд╛рдЪ рдЙрдкрдпреЛрдЬрд┐рдд рдХреЗрд▓реЗрд▓рд╛ рдЕрд░реНрдЬ.

рдХрд╛рд╣реА рд╕рд░реНрдлрдмреЛрд░реНрдб рдЯрд┐рдкрд╛:

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. рддреБрдореНрд╣реА npm рд╡рд╛рдкрд░реВрди рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд┐рдВрдЧрд▓ рдкреЗрдЬ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд╡рддрдГ рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛. рдХрд┐рдВрд╡рд╛ рд╡рд┐рджреНрдпрдорд╛рди рд╡рд░ рдЬрд╛: chrome-ext.wvservices.com/dapp-wallet.html

4. dApp рдкрддреНрддрд╛ рдордЬрдХреВрд░ рдмреЙрдХреНрд╕рдордзреНрдпреЗ рдЪрд╛рдЪрдгреА рд░рди (рд╡рд░ рдЕрдзреЛрд░реЗрдЦрд┐рдд) рдордзреВрди рд╡реЙрд▓реЗрдЯ рдкрддреНрддрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛

5. "рдареЗрд╡" рдлреАрд▓реНрдбрдордзреНрдпреЗ рдПрдХ рд▓рд╣рд╛рди рд░рдХреНрдХрдо рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛ рдЖрдгрд┐ рдмрдЯрдгрд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛:

RIDE dApp рд▓рд╛рдЯрд╛ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ, рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рд╡реЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдХрд╢реА рдХрд░рд╛рд╡реА
Waves Keeper 10 WAVES рдЪреНрдпрд╛ рдкреЗрдореЗрдВрдЯрд╕рд╣ InvokeScriptTransaction рд╡рд░ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрд░рд╡рд╛рдирдЧреАрдЪреА рд╡рд┐рдирдВрддреА рдХрд░рддреЛ.

6. рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдЪреА рдкреБрд╖реНрдЯреА рдХрд░рд╛:

RIDE dApp рд▓рд╛рдЯрд╛ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ, рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рд╡реЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдХрд╢реА рдХрд░рд╛рд╡реА
рд╡реНрдпрд╡рд╣рд╛рд░ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХрд╡рд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдЖрддрд╛ рддреБрдореНрд╣реА рддрд┐рдЪрд╛ рдЖрдпрдбреА рдкрд╛рд╣реВ рд╢рдХрддрд╛

7. Waves Explorer рд╡рд╛рдкрд░реВрди рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рд╛. рд╢реЛрдз рдХреНрд╖реЗрддреНрд░рд╛рдд ID рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛

RIDE dApp рд▓рд╛рдЯрд╛ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ, рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рд╡реЗ рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдХрд╢реА рдХрд░рд╛рд╡реА

рдирд┐рд╖реНрдХрд░реНрд╖ рдЖрдгрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рд╣рд┐рддреА

рдЖрдореНрд╣реА Waves Platform рд╡рд░ рд╕рд╛рдзреЗ dApps рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреЗ, рдЪрд╛рдЪрдгреА рдХрд░рдгреЗ, рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рд╡рд╛рдкрд░рдгреЗ рдпрд╛рд╕рд╛рдареА рд╕рд╛рдзрдиреЗ рдкрд╛рд╣рд┐рд▓реА:

  • рд░рд╛рдЗрдб рднрд╛рд╖рд╛
  • рд╡реНрд╣реАрдПрд╕ рдХреЛрдб рдПрдбрд┐рдЯрд░
  • рд╡реЗрд╡реНрд╣ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░
  • рд╕рд░реНрдлрдмреЛрд░реНрдб
  • рд▓рд╛рдЯрд╛ рдХреАрдкрд░

рдЬреНрдпрд╛рдВрдирд╛ RIDE рд╢рд┐рдХрдгреЗ рд╕реБрд░реВ рдареЗрд╡рд╛рдпрдЪреЗ рдЖрд╣реЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рд▓рд┐рдВрдХреНрд╕:

рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдгреЗ
рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╕рд╣ рдСрдирд▓рд╛рдЗрди IDE
рд▓рд╛рдЯрд╛ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг
рдЯреЗрд▓реАрдЧреНрд░рд╛рдордордзреНрдпреЗ рд╡рд┐рдХрд╕рдХ рдЪреЕрдЯ
рд╕реНрдЯреЕрдХрдУрд╡реНрд╣рд░рдлреНрд▓реЛрд╡рд░ рд▓рд╛рдЯрд╛ рдЖрдгрд┐ рд░рд╛рдЗрдб
рдирд╡реАрди! рд╡реЗрд╡реНрд╣рдЬ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ dApps рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдСрдирд▓рд╛рдЗрди рдЕрднреНрдпрд╛рд╕рдХреНрд░рдо

RIDE рд╡рд┐рд╖рдпрд╛рдд рдЬрд╛рдгреЗ рд╕реБрд░реВ рдареЗрд╡рд╛ рдЖрдгрд┐ рддреБрдордЪреЗ рдкрд╣рд┐рд▓реЗ dApp рддрдпрд╛рд░ рдХрд░рд╛!

TL; рдбреЙ: bit.ly/2YCFnwY

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛