рдирдорд╕реНрддреЗ! рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╡реЗрд╡реНрд╕ рдиреЛрдб рдкрд░ рдирд┐рдпрдорд┐рдд рдбреАрдПрдкреА рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВред рдЖрдЗрдП рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдгреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВред
рдбреАрдПрдкреА рдФрд░ рдирд┐рдпрдорд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдпреЛрдЬрдирд╛ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИ:
- рд╣рдо рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ
- рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдирд╛
- рдкрд░рд┐рдХреНрд╖рдг
рдЙрдкрдХрд░рдг
1. docker
рдиреЛрдб рдФрд░ рд╡реЗрд╡реНрд╕ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рдпрджрд┐ рдЖрдк рдХреЛрдИ рдиреЛрдб рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдЪрд░рдг рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЦрд╝рд┐рд░рдХрд╛рд░, рдПрдХ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдиреЛрдб рддреИрдирд╛рдд рдХрд┐рдП рдмрд┐рдирд╛, рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджреЗрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред
- рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдг рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рд▓рдЧрд╛рддрд╛рд░ рдирдП рдЦрд╛рддреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдкрд░реАрдХреНрд╖рдг рдиреЗрдЯрд╡рд░реНрдХ рдирд▓ рд╣рд░ 10 рдорд┐рдирдЯ рдореЗрдВ 10 рддрд░рдВрдЧреЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
- рдкрд░реАрдХреНрд╖рдг рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдФрд╕рдд рдмреНрд▓реЙрдХ рд╕рдордп 1 рдорд┐рдирдЯ рд╣реИ, рдиреЛрдб рдореЗрдВ - 15 рд╕реЗрдХрдВрдбред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддрдм рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рд▓реЗрди-рджреЗрди рдХреЗ рд▓рд┐рдП рдПрдХрд╛рдзрд┐рдХ рдкреБрд╖реНрдЯрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкрд░реАрдХреНрд╖рдг рдиреЛрдбреНрд╕ рдкрд░ рдЖрдХреНрд░рд╛рдордХ рдХреИрд╢рд┐рдВрдЧ рд╕рдВрднрд╡ рд╣реИред
- рд╡реЗ рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рдХрд╛рд░рдг рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЕрдиреБрдкрд▓рдмреНрдз рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рд╕реЗ рдореИрдВ рдорд╛рди рд▓реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдиреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред
2. рд╕рд░реНрдлрд╝рдмреЛрд░реНрдб рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓
- Ppa, Homebrew рдпрд╛ exe рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Node.js рдХреЛ рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:
https://nodejs.org/en/download/ . - рд╕рд░реНрдлрд╝рдмреЛрд░реНрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдПрдХ рдЙрдкрдХрд░рдг рдЬреЛ рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ рдиреЛрдб рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
npm install -g @waves/surfboard
3. рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдкреНрд▓рдЧрдЗрди
рдпрджрд┐ рдЖрдк рдЖрдИрдбреАрдИ рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рд╕рдВрдкрд╛рджрдХ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЪрд░рдг рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдг рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдПрдБ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╡рд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд▓рдЧрдЗрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ
рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:
рд╡реАрдПрд╕ рдХреЛрдб рдЦреЛрд▓реЗрдВ рдФрд░ рд╡реЗрд╡реНрд╕-рд░рд╛рдЗрдб рдкреНрд▓рдЧрдЗрди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:
рд╡реЗрд╡реНрд╕ рдХреАрдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди:
рд╣реЛ рдЧрдпрд╛!
рдиреЛрдб рдФрд░ рд╡реЗрд╡реНрд╕ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ
1. рдиреЛрдб рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдиреЛрдб рдХреЛ REST API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдиреЛрдб рдХреЗ рд▓рд┐рдП рд╕реНрд╡реИрдЧрд░ рд░реЗрд╕реНрдЯ рдПрдкреАрдЖрдИ
2. рд╡реЗрд╡реНрд╕ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓реЗрдВ рдФрд░ рдпрд╣рд╛рдВ рдЬрд╛рдПрдВ
рд╡реЗрд╡реНрд╕ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдиреЛрдб рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ
рд╕рд╡рд╛рд░реА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╕рд░реНрдлрд╝рдмреЛрд░реНрдб рдЙрдкрдХрд░рдг
рдПрдХ рдЦрд╛рд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ
surfboard init
рдХрдорд╛рдВрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛, "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╡реАрдПрд╕ рдХреЛрдб рд╡рд╛рд▓реЗ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЦреЛрд▓реЗрдВрдЧреЗ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ:
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
рдирдореВрдирд╛ рдХреЛрдб рдпрд╣рд╛рдВ рднреА рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
VSCode рдкреНрд▓рдЧрдЗрди рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдирд┐рд░рдВрддрд░ рд╕рдВрдХрд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк рд╣рдореЗрд╢рд╛ PROBLEMS рдЯреИрдм рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рднрд┐рдиреНрди рдЯреЗрдХреНрд╕реНрдЯ рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
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#
. рд╡рд╣рд╛рдВ рдЖрдк рд▓реЗрдирджреЗрди рдЗрддрд┐рд╣рд╛рд╕, рдбреАрдПрдкреА рд╕реНрдерд┐рддрд┐, рд╡рд┐рдШрдЯрд┐рдд рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рддрд░рдВрдЧ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░. рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬрд┐рд╕реЗ рдЕрднреА-рдЕрднреА рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХреБрдЫ рд╕рд░реНрдлрд╝рдмреЛрд░реНрдб рдпреБрдХреНрддрд┐рдпрд╛рдБ:
1. рдЯреЗрд╕реНрдЯрдиреЗрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
surfboard test --env=testnet
2. рдпрджрд┐ рдЖрдк рд▓реЗрдирджреЗрди рдХреЗ JSON рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдиреЛрдб рджреНрд╡рд╛рд░рд╛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ -v (рдорддрд▓рдм 'рд╡рд░реНрдмреЛрдЬрд╝') рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ:
surfboard test -v
рд╡реЗрд╡реНрд╕ рдХреАрдкрд░ рдХреЗ рд╕рд╛рде рдРрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
1. рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрд╡реНрд╕ рдХреАрдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ:
рд╕реНрдерд╛рдиреАрдп рдиреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрд╡реНрд╕ рдХреАрдкрд░ рдХреА рд╕реНрдерд╛рдкрдирд╛
2. рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдЧреБрдкреНрдд рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдЖрдпрд╛рдд рдХрд░реЗрдВ? рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдиреЛрдб рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: waves private node seed with waves tokens
. рдкрддрд╛: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF
.
3. рдЖрдк npm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдпрдВ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╕рд┐рдВрдЧрд▓ рдкреЗрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рдореМрдЬреВрджрд╛ рдкрд░ рдЬрд╛рдПрдБ:
4. рдкрд░реАрдХреНрд╖рдг рд░рди (рдКрдкрд░ рд░реЗрдЦрд╛рдВрдХрд┐рдд) рд╕реЗ рд╡реЙрд▓реЗрдЯ рдкрддрд╛ рдбреАрдПрдкреА рдПрдбреНрд░реЗрд╕ рдЯреЗрдХреНрд╕реНрдЯ рдмреЙрдХреНрд╕ рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдВ
5. "рдЬрдорд╛" рдлрд╝реАрд▓реНрдб рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
рд╡реЗрд╡реНрд╕ рдХреАрдкрд░ 10 рд╡реЗрд╡реНрд╕ рдХреЗ рднреБрдЧрддрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ InvokeScriptTransaction рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред
6. рд▓реЗрдирджреЗрди рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ:
рд▓реЗрди-рджреЗрди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рдЖрдк рдЙрд╕рдХреА рдЖрдИрдбреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
7. рд╡реЗрд╡реНрд╕ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЗрдирджреЗрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВред рдЦреЛрдЬ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЖрдИрдбреА рджрд░реНрдЬ рдХрд░реЗрдВ
рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА
рд╣рдордиреЗ рд╡реЗрд╡реНрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕рд░рд▓ рдбреАрдПрдкреА рдХреЗ рд╡рд┐рдХрд╛рд╕, рдкрд░реАрдХреНрд╖рдг, рддреИрдирд╛рддреА рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рджреЗрдЦрд╛:
- рд╕рд╡рд╛рд░реА рднрд╛рд╖рд╛
- рд╡реАрдПрд╕ рдХреЛрдб рд╕рдВрдкрд╛рджрдХ
- рддрд░рдВрдЧ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░
- рд╕рд░реНрдлрд╝рдмреЛрд░реНрдб
- рд▓рд╣рд░реЛрдВ рдХрд╛ рд░рдХреНрд╖рдХ
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдЬреЛ RIDE рд╕реАрдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
RIDE рд╡рд┐рд╖рдп рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ рдФрд░ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ dApp рдмрдирд╛рдПрдВ!
рдЯреАрдПрд▓, рдбреЙ:
рд╕реНрд░реЛрдд: www.habr.com