рдирдорд╕реНрдХрд╛рд░! рдпрд╛ рд▓реЗрдЦрд╛рдд рдореА рддреБрдореНрд╣рд╛рд▓рд╛ Waves рдиреЛрдбрд╡рд░ рдирд┐рдпрдорд┐рдд 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 рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рдкреНрд▓рдЧрдЗрдирдХрдбреЗ рд▓рдХреНрд╖ рджреНрдпрд╛
рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓ рд╕реНрдЯреБрдбрд┐рдУ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдЖрдгрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛:
рд╡реНрд╣реАрдПрд╕ рдХреЛрдб рдЙрдШрдбрд╛ рдЖрдгрд┐ рд▓рд╛рдЯрд╛-рд░рд╛рдЗрдб рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛:
рд╡реЗрд╡реНрд╣рдЬ рдХреАрдкрд░ рдмреНрд░рд╛рдЙрдЭрд░ рд╡рд┐рд╕реНрддрд╛рд░:
рдЭрд╛рд▓реЗ!
рдиреЛрдб рдЖрдгрд┐ рд╡реЗрд╡реНрд╣реНрдЬ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рд╕реБрд░реВ рдХрд░рд╛
1. рдиреЛрдб рд╕реБрд░реВ рдХрд░рд╛:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
рдордзреНрдпреЗ REST API рджреНрд╡рд╛рд░реЗ рдиреЛрдб рд▓рд╛рдБрдЪ рдХреЗрд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рд╛
рдиреЛрдбрд╕рд╛рдареА рд╕реНрд╡реИрдЧрд░ 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
рдмреНрд░рд╛рдЙрдЭрд░ рдЙрдШрдбрд╛ рдЖрдгрд┐ рд╡рд░ рдЬрд╛
Waves Explorer рд╕реНрдерд╛рдирд┐рдХ рдиреЛрдб рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЛ
рд░рд╛рдЗрдб рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЖрдгрд┐ рд╕рд░реНрдлрдмреЛрд░реНрдб рдЯреВрд▓
рд░рд┐рдХреНрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░рд╛ рдЖрдгрд┐ рддреНрдпрд╛рдд рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛
surfboard init
рдХрдорд╛рдВрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░, "рд╣реЕрд▓реЛ рд╡рд░реНрд▓реНрдб" рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рдЖрдгрд┐ рдЪрд╛рдЪрдгреНрдпрд╛рдВрд╕рд╣ рдбрд┐рд░реЗрдХреНрдЯрд░реА рд╕реБрд░реВ рдХрд░рддреЗ. рддреБрдореНрд╣реА рд╣реЗ рдлреЛрд▓реНрдбрд░ VS рдХреЛрдбрд╕рд╣ рдЙрдШрдбрд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рджрд┐рд╕реЗрд▓:
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
рдирдореБрдирд╛ рдХреЛрдб рдпреЗрдереЗ рджреЗрдЦреАрд▓ рдЖрдврд│реВ рд╢рдХрддреЛ
VSCode рдкреНрд▓рдЧрдЗрди рдлрд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛рдирд╛ рд╕рддрдд рд╕рдВрдХрд▓рдирд╛рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ. рдореНрд╣рдгреВрди, рдЖрдкрдг рдиреЗрд╣рдореА рд╕рдорд╕реНрдпрд╛ рдЯреЕрдмрдордзреАрд▓ рддреНрд░реБрдЯреАрдВрдЪреЗ рдкрд░реАрдХреНрд╖рдг рдХрд░реВ рд╢рдХрддрд╛.
рдлрд╛рдЗрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛рдирд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реЗрдЧрд│рд╛ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рд╡рд╛рдкрд░рд╛рдпрдЪрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рд╡рд╛рдкрд░рд╛
surfboard compile ride/wallet.ride
рд╣реЗ рдмреЗрд╕64 рд╕рдВрдХрд▓рд┐рдд рд░рд╛рдЗрдб рдХреЛрдбрдЪреА рдорд╛рд▓рд┐рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрд▓.
'wallet.ride' рд╕рд╛рдареА рдЪрд╛рдЪрдгреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдмрдШреВрдпрд╛
- "рдкреВрд░реНрд╡реА" 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 рд╕реНрдерд┐рддреА, рдбреАрдХрдВрдкрд╛рдЗрд▓ рдмрд╛рдпрдирд░реА рдлрд╛рдЗрд▓ рдорд┐рд│реВ рд╢рдХрддреЗ.
рд▓рд╛рдЯрд╛ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░. рдиреБрдХрддрд╛рдЪ рдЙрдкрдпреЛрдЬрд┐рдд рдХреЗрд▓реЗрд▓рд╛ рдЕрд░реНрдЬ.
рдХрд╛рд╣реА рд╕рд░реНрдлрдмреЛрд░реНрдб рдЯрд┐рдкрд╛:
1. рдЯреЗрд╕реНрдЯрдиреЗрдЯ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдЪрд╛рдЪрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд╛рдкрд░рд╛:
surfboard test --env=testnet
2. рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрдЪреНрдпрд╛ JSON рдЖрд╡реГрддреНрддреНрдпрд╛ рдЖрдгрд┐ рдиреЛрдбрджреНрд╡рд╛рд░реЗ рддреНрдпрд╛рдВрдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╢реА рдХреЗрд▓реА рдЬрд╛рддреЗ рд╣реЗ рдкрд╣рд╛рдпрдЪреЗ рдЕрд╕рд▓реНрдпрд╛рд╕ -v (рдореНрд╣рдгрдЬреЗ 'рд╡реНрд╣рд░реНрдмреЛрдЬ') рд╕рд╣ рдЪрд╛рдЪрдгреА рдЪрд╛рд▓рд╡рд╛:
surfboard test -v
Waves Keeper рд╕рд╣ рдЕреЕрдкреНрд╕ рд╡рд╛рдкрд░рдгреЗ
1. рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Waves Keeper рд╕реЗрдЯ рдХрд░рд╛:
рд╕реНрдерд╛рдирд┐рдХ рдиреЛрдбрд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Waves Keeper рд╕реЗрдЯ рдХрд░рдгреЗ
2. рдиреЗрдЯрд╡рд░реНрдХрд╕рд╛рдареА рдЯреЛрдХрдирд╕рд╣ рдЧреБрдкреНрдд рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдЖрдпрд╛рдд рдХрд░рд╛рдпрдЪреЗ? рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рддреБрдордЪреНрдпрд╛ рдиреЛрдбрдЪреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдпрд╛рдгреЗ рд╡рд╛рдкрд░рд╛: waves private node seed with waves tokens
. рдкрддреНрддрд╛: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF
.
3. рддреБрдореНрд╣реА npm рд╡рд╛рдкрд░реВрди рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рд╕рд┐рдВрдЧрд▓ рдкреЗрдЬ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд╡рддрдГ рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛. рдХрд┐рдВрд╡рд╛ рд╡рд┐рджреНрдпрдорд╛рди рд╡рд░ рдЬрд╛:
4. dApp рдкрддреНрддрд╛ рдордЬрдХреВрд░ рдмреЙрдХреНрд╕рдордзреНрдпреЗ рдЪрд╛рдЪрдгреА рд░рди (рд╡рд░ рдЕрдзреЛрд░реЗрдЦрд┐рдд) рдордзреВрди рд╡реЙрд▓реЗрдЯ рдкрддреНрддрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛
5. "рдареЗрд╡" рдлреАрд▓реНрдбрдордзреНрдпреЗ рдПрдХ рд▓рд╣рд╛рди рд░рдХреНрдХрдо рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛ рдЖрдгрд┐ рдмрдЯрдгрд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛:
Waves Keeper 10 WAVES рдЪреНрдпрд╛ рдкреЗрдореЗрдВрдЯрд╕рд╣ InvokeScriptTransaction рд╡рд░ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрд░рд╡рд╛рдирдЧреАрдЪреА рд╡рд┐рдирдВрддреА рдХрд░рддреЛ.
6. рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдЪреА рдкреБрд╖реНрдЯреА рдХрд░рд╛:
рд╡реНрдпрд╡рд╣рд╛рд░ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХрд╡рд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдЖрддрд╛ рддреБрдореНрд╣реА рддрд┐рдЪрд╛ рдЖрдпрдбреА рдкрд╛рд╣реВ рд╢рдХрддрд╛
7. Waves Explorer рд╡рд╛рдкрд░реВрди рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рд╛. рд╢реЛрдз рдХреНрд╖реЗрддреНрд░рд╛рдд ID рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛
рдирд┐рд╖реНрдХрд░реНрд╖ рдЖрдгрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рд╣рд┐рддреА
рдЖрдореНрд╣реА Waves Platform рд╡рд░ рд╕рд╛рдзреЗ dApps рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреЗ, рдЪрд╛рдЪрдгреА рдХрд░рдгреЗ, рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рд╡рд╛рдкрд░рдгреЗ рдпрд╛рд╕рд╛рдареА рд╕рд╛рдзрдиреЗ рдкрд╛рд╣рд┐рд▓реА:
- рд░рд╛рдЗрдб рднрд╛рд╖рд╛
- рд╡реНрд╣реАрдПрд╕ рдХреЛрдб рдПрдбрд┐рдЯрд░
- рд╡реЗрд╡реНрд╣ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░
- рд╕рд░реНрдлрдмреЛрд░реНрдб
- рд▓рд╛рдЯрд╛ рдХреАрдкрд░
рдЬреНрдпрд╛рдВрдирд╛ RIDE рд╢рд┐рдХрдгреЗ рд╕реБрд░реВ рдареЗрд╡рд╛рдпрдЪреЗ рдЖрд╣реЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рд▓рд┐рдВрдХреНрд╕:
RIDE рд╡рд┐рд╖рдпрд╛рдд рдЬрд╛рдгреЗ рд╕реБрд░реВ рдареЗрд╡рд╛ рдЖрдгрд┐ рддреБрдордЪреЗ рдкрд╣рд┐рд▓реЗ dApp рддрдпрд╛рд░ рдХрд░рд╛!
TL; рдбреЙ:
рд╕реНрддреНрд░реЛрдд: www.habr.com