рд╡реЗрд╡реНрд╕ RIDE dApp рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ

рдирдорд╕реНрддреЗ! рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╡реЗрд╡реНрд╕ рдиреЛрдб рдкрд░ рдирд┐рдпрдорд┐рдд рдбреАрдПрдкреА рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВред рдЖрдЗрдП рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдгреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВред

рд╡реЗрд╡реНрд╕ RIDE dApp рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ

рдбреАрдПрдкреА рдФрд░ рдирд┐рдпрдорд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдпреЛрдЬрдирд╛ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИ:

  • рд╣рдо рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ
  • рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛
  • рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдирд╛
  • рдкрд░рд┐рдХреНрд╖рдг

рдЙрдкрдХрд░рдг

1. docker рдиреЛрдб рдФрд░ рд╡реЗрд╡реНрд╕ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП

рдпрджрд┐ рдЖрдк рдХреЛрдИ рдиреЛрдб рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдЪрд░рдг рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЦрд╝рд┐рд░рдХрд╛рд░, рдПрдХ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдиреЛрдб рддреИрдирд╛рдд рдХрд┐рдП рдмрд┐рдирд╛, рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджреЗрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред

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

рдЕрдм рд╕реЗ рдореИрдВ рдорд╛рди рд▓реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдиреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

  • Ppa, Homebrew рдпрд╛ exe рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Node.js рдХреЛ рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ: https://nodejs.org/en/download/.
  • рд╕рд░реНрдлрд╝рдмреЛрд░реНрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдПрдХ рдЙрдкрдХрд░рдг рдЬреЛ рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ рдиреЛрдб рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

npm install -g @waves/surfboard

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

рдпрджрд┐ рдЖрдк рдЖрдИрдбреАрдИ рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рд╕рдВрдкрд╛рджрдХ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЪрд░рдг рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдг рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдПрдБ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╡рд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд▓рдЧрдЗрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рд╡рд┐рдо-рд╕рд╡рд╛рд░реА.

рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ: 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 рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ
рдиреЛрдб рдХреЗ рд▓рд┐рдП рд╕реНрд╡реИрдЧрд░ рд░реЗрд╕реНрдЯ рдПрдкреАрдЖрдИ

2. рд╡реЗрд╡реНрд╕ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ:

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 рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ
рд╡реЗрд╡реНрд╕ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдиреЛрдб рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ

рд╕рд╡рд╛рд░реА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╕рд░реНрдлрд╝рдмреЛрд░реНрдб рдЙрдкрдХрд░рдг

рдПрдХ рдЦрд╛рд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ

surfboard init

рдХрдорд╛рдВрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛, "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╡реАрдПрд╕ рдХреЛрдб рд╡рд╛рд▓реЗ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЦреЛрд▓реЗрдВрдЧреЗ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ:

рд╡реЗрд╡реНрд╕ RIDE dApp рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ
Surfboard.config.json

  • ./ride/ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрдкрдХреЛ рдПрдХ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рд╡реЙрд▓реЗрдЯ.рд░рд╛рдЗрдб рдорд┐рд▓реЗрдЧреА - рд╡рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬрд╣рд╛рдВ dApp рдХреЛрдб рд╕реНрдерд┐рдд рд╣реИред рд╣рдо рдЕрдЧрд▓реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдбреАрдПрдкреА рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
  • ./test/ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрдкрдХреЛ рдПрдХ *.js рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓реЗрдЧреАред рдкрд░реАрдХреНрд╖рдг рдпрд╣рд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ.
  • ./surfboard.config.json тАУ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ред

Envs рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдиреБрднрд╛рдЧ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

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

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, Surfboard.config.json рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрдИ рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдерд╛рдиреАрдп рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯEnv рдХреБрдВрдЬреА рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ)ред

рд╡реЙрд▓реЗрдЯ-рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди

рдпрд╣ рдЕрдиреБрднрд╛рдЧ RIDE рднрд╛рд╖рд╛ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИред рдмрд▓реНрдХрд┐, рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдирд╛рдд рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред

рдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡реЙрд▓реЗрдЯ-рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЗрдЦреЗрдВред рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдбреАрдПрдкреА рдкрддреЗ рдкрд░ рдЯреЛрдХрди рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдХреЗрд╡рд▓ рдЕрдкрдиреА рддрд░рдВрдЧреЗрдВ рд╡рд╛рдкрд╕ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред InvokeScriptTransaction рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЛ @Callable рдлрд╝рдВрдХреНрд╢рди рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:

  • deposit()рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП WAVES рдореЗрдВ рд╕рдВрд▓рдЧреНрди рднреБрдЧрддрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
  • withdraw(amount: Int)рдЬреЛ рдЯреЛрдХрди рд▓реМрдЯрд╛рддрд╛ рд╣реИ

рдкреВрд░реЗ рдбреАрдПрдкреА рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЗ рджреМрд░рд╛рди, рд╕рдВрд░рдЪрдирд╛ (рдкрддрд╛ тЖТ рд░рд╛рд╢рд┐) рдмрдирд╛рдП рд░рдЦреА рдЬрд╛рдПрдЧреА:

рдХрд╛рд░реНрдп
рдкрд░рд┐рдгрд╛рдореА рдЕрд╡рд╕реНрдерд╛

рдкреНрд░рд╛рд░рдВрднрд┐рдХ
рдЦрд╛рд▓реА

рдРрд▓рд┐рд╕ 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 рдкреНрд▓рдЧрдЗрди рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдирд┐рд░рдВрддрд░ рд╕рдВрдХрд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк рд╣рдореЗрд╢рд╛ PROBLEMS рдЯреИрдм рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡реЗрд╡реНрд╕ RIDE dApp рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ
рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рднрд┐рдиреНрди рдЯреЗрдХреНрд╕реНрдЯ рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

surfboard compile ride/wallet.ride

рдпрд╣ рдмреЗрд╕64 рд╕рдВрдХрд▓рд┐рдд RIDE рдХреЛрдб рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛ред

'рд╡реЙрд▓реЗрдЯ.рд░рд╛рдЗрдб' рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓. рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдореЛрдЪрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рддред рдПрдХ "рдкрд╣рд▓реЗ" рдлрд╝рдВрдХреНрд╢рди рдФрд░ рддреАрди рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ:

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

рд╕рд░реНрдлрд╝рдмреЛрд░реНрдб рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдБ рдФрд░ рд╡реЗрд╡реНрд╕ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ

рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓рд╛рдПрдБ

surfboard test

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХрд╛рдзрд┐рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рддреЛ рдЖрдк рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ

surfboard test my-scenario.js

рд╕рд░реНрдлрд╝рдмреЛрд░реНрдб рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ ./test/ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХрддреНрд░ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рд░реНрдлрд╝рдмреЛрд░реНрдб.рдХреЙрдиреНрдлрд┐рдЧ.рдЬреЗрд╕рди рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдиреЛрдб рдкрд░ рдЪрд▓рд╛рдПрдЧрд╛ред рдХреБрдЫ рд╕реЗрдХрдВрдб рдмрд╛рдж рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

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#. рд╡рд╣рд╛рдВ рдЖрдк рд▓реЗрдирджреЗрди рдЗрддрд┐рд╣рд╛рд╕, рдбреАрдПрдкреА рд╕реНрдерд┐рддрд┐, рд╡рд┐рдШрдЯрд┐рдд рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╡реЗрд╡реНрд╕ RIDE dApp рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ
рддрд░рдВрдЧ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░. рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬрд┐рд╕реЗ рдЕрднреА-рдЕрднреА рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХреБрдЫ рд╕рд░реНрдлрд╝рдмреЛрд░реНрдб рдпреБрдХреНрддрд┐рдпрд╛рдБ:

1. рдЯреЗрд╕реНрдЯрдиреЗрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

surfboard test --env=testnet

рдкрд░реАрдХреНрд╖рдг рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

2. рдпрджрд┐ рдЖрдк рд▓реЗрдирджреЗрди рдХреЗ JSON рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдиреЛрдб рджреНрд╡рд╛рд░рд╛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ -v (рдорддрд▓рдм 'рд╡рд░реНрдмреЛрдЬрд╝') рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ:

surfboard test -v

рд╡реЗрд╡реНрд╕ рдХреАрдкрд░ рдХреЗ рд╕рд╛рде рдРрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

1. рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрд╡реНрд╕ рдХреАрдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ: http://localhost:6869

рд╡реЗрд╡реНрд╕ RIDE dApp рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ
рд╕реНрдерд╛рдиреАрдп рдиреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрд╡реНрд╕ рдХреАрдкрд░ рдХреА рд╕реНрдерд╛рдкрдирд╛

2. рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдЧреБрдкреНрдд рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдЖрдпрд╛рдд рдХрд░реЗрдВ? рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдиреЛрдб рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: waves private node seed with waves tokens. рдкрддрд╛: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. рдЖрдк npm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдпрдВ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд┐рдВрдЧрд▓ рдкреЗрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рдореМрдЬреВрджрд╛ рдкрд░ рдЬрд╛рдПрдБ: chrome-ext.wvservices.com/dapp-wallet.html

4. рдкрд░реАрдХреНрд╖рдг рд░рди (рдКрдкрд░ рд░реЗрдЦрд╛рдВрдХрд┐рдд) рд╕реЗ рд╡реЙрд▓реЗрдЯ рдкрддрд╛ рдбреАрдПрдкреА рдПрдбреНрд░реЗрд╕ рдЯреЗрдХреНрд╕реНрдЯ рдмреЙрдХреНрд╕ рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдВ

5. "рдЬрдорд╛" рдлрд╝реАрд▓реНрдб рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:

рд╡реЗрд╡реНрд╕ RIDE dApp рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ
рд╡реЗрд╡реНрд╕ рдХреАрдкрд░ 10 рд╡реЗрд╡реНрд╕ рдХреЗ рднреБрдЧрддрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ InvokeScriptTransaction рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред

6. рд▓реЗрдирджреЗрди рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ:

рд╡реЗрд╡реНрд╕ RIDE dApp рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ
рд▓реЗрди-рджреЗрди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рдЖрдк рдЙрд╕рдХреА рдЖрдИрдбреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ

7. рд╡реЗрд╡реНрд╕ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЗрдирджреЗрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВред рдЦреЛрдЬ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЖрдИрдбреА рджрд░реНрдЬ рдХрд░реЗрдВ

рд╡реЗрд╡реНрд╕ RIDE dApp рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ

рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА

рд╣рдордиреЗ рд╡реЗрд╡реНрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕рд░рд▓ рдбреАрдПрдкреА рдХреЗ рд╡рд┐рдХрд╛рд╕, рдкрд░реАрдХреНрд╖рдг, рддреИрдирд╛рддреА рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рджреЗрдЦрд╛:

  • рд╕рд╡рд╛рд░реА рднрд╛рд╖рд╛
  • рд╡реАрдПрд╕ рдХреЛрдб рд╕рдВрдкрд╛рджрдХ
  • рддрд░рдВрдЧ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░
  • рд╕рд░реНрдлрд╝рдмреЛрд░реНрдб
  • рд▓рд╣рд░реЛрдВ рдХрд╛ рд░рдХреНрд╖рдХ

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдЬреЛ RIDE рд╕реАрдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

рдФрд░ рдЬреНрдпрд╛рджрд╛ рдЙрджрд╛рд╣рд░рдг
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдСрдирд▓рд╛рдЗрди рдЖрдИрдбреАрдИ
рд▓рд╣рд░реЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг
рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рдбреЗрд╡рд▓рдкрд░ рдЪреИрдЯ
рд╕реНрдЯреИрдХрдУрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рд▓рд╣рд░реЗрдВ рдФрд░ рд╕рд╡рд╛рд░реА
рдирдпрд╛! рд╡реЗрд╡реНрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдбреАрдПрдкреА рдмрдирд╛рдиреЗ рдкрд░ рдСрдирд▓рд╛рдЗрди рдкрд╛рдареНрдпрдХреНрд░рдо

RIDE рд╡рд┐рд╖рдп рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ рдФрд░ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ dApp рдмрдирд╛рдПрдВ!

рдЯреАрдПрд▓, рдбреЙ: bit.ly/2YCFnwY

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ