RIDE āĻāĻŦāĻ‚ RIDE4DAPPS-āĻ āĻ“āĻ¯āĻŧā§‡āĻ­āĻ¸ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 2 (DAO - āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŦāĻžāĻ¯āĻŧāĻ¤ā§āĻ¤āĻļāĻžāĻ¸āĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻž)

RIDE āĻāĻŦāĻ‚ RIDE4DAPPS-āĻ āĻ“āĻ¯āĻŧā§‡āĻ­āĻ¸ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 2 (DAO - āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŦāĻžāĻ¯āĻŧāĻ¤ā§āĻ¤āĻļāĻžāĻ¸āĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻž)

āĻšā§āĻ¯āĻžāĻ˛ā§‹ āĻ¸āĻŦāĻžāĻ‡!

В āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ‚āĻļā§‡, āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻ­āĻžāĻŦā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¯ā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ dApp (āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ•ā§ƒāĻ¤ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨) āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¤āĻ°āĻ™ā§āĻ— āĻ°āĻžāĻ‡āĻĄ IDE.

āĻāĻ° āĻāĻ–āĻ¨ āĻāĻ•āĻŸā§ disassembled āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻ¯āĻžāĻ• āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ.

āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧ 3. dApp āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž

RIDE āĻāĻŦāĻ‚ RIDE4DAPPS-āĻ āĻ“āĻ¯āĻŧā§‡āĻ­āĻ¸ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 2 (DAO - āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŦāĻžāĻ¯āĻŧāĻ¤ā§āĻ¤āĻļāĻžāĻ¸āĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻž)

āĻ•ā§€ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻ…ā§āĻ¯āĻžāĻ˛āĻŋāĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻŖā§āĻ ā§‡ āĻ›ā§āĻŸā§‡ āĻ†āĻ¸ā§‡ āĻĄāĻŋāĻāĻĒāĻŋ āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻ¨ā§‡āĻ‡?
āĻĒā§āĻ°āĻĨāĻŽā§‡:
Boob āĻāĻŦāĻ‚ Cooper āĻ˜āĻŸāĻ¨āĻžāĻ•ā§āĻ°āĻŽā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ dApp āĻ āĻŋāĻ•āĻžāĻ¨āĻžāĻ¯āĻŧ āĻ¤āĻšāĻŦāĻŋāĻ˛ āĻĒāĻžāĻ āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻšāĻ¸ā§āĻ¤āĻžāĻ¨ā§āĻ¤āĻ° āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻāĻŦāĻ‚ āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻĢāĻŋāĻ°ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻŦā§‡ āĻ¨āĻž.

āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻ¤:
āĻŦā§āĻŦ āĻāĻŦāĻ‚/āĻ…āĻĨāĻŦāĻž āĻ•ā§āĻĒāĻžāĻ°ā§‡āĻ° āĻ¸āĻŽā§āĻŽāĻ¤āĻŋ āĻŦā§āĻ¯āĻ¤ā§€āĻ¤ āĻ†āĻŽāĻ°āĻž āĻ…ā§āĻ¯āĻžāĻ˛āĻŋāĻ¸āĻ•ā§‡ āĻ¤āĻšāĻŦāĻŋāĻ˛ āĻ‰āĻ¤ā§āĻ¤ā§‹āĻ˛āĻ¨ āĻĨā§‡āĻ•ā§‡ āĻ•ā§‹āĻ¨ā§‹āĻ­āĻžāĻŦā§‡āĻ‡ āĻ¸ā§€āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻ•āĻ°āĻŋ āĻ¨āĻžāĨ¤ āĻ¯ā§‡āĻšā§‡āĻ¤ā§, āĻ¯āĻžāĻšāĻžāĻ‡ āĻ•āĻ°āĻžāĻ° āĻĻāĻŋāĻ•ā§‡ āĻŽāĻ¨ā§‹āĻ¯ā§‹āĻ— āĻĻāĻŋāĻ¨, āĻāĻ˛āĻŋāĻ¸ āĻĨā§‡āĻ•ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤

āĻāĻ˛āĻŋāĻ¸ āĻ¨āĻŋāĻˇāĻŋāĻĻā§āĻ§ āĻ•āĻ°ā§‡ 2 āĻ āĻŋāĻ• āĻ•āĻ°āĻž āĻ¯āĻžāĻ• āĻšāĻ¸ā§āĻ¤āĻžāĻ¨ā§āĻ¤āĻ° āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ¸āĻ‚āĻļā§‹āĻ§āĻ¨ āĻ•āĻ°āĻž āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§āĻ¨:
RIDE āĻāĻŦāĻ‚ RIDE4DAPPS-āĻ āĻ“āĻ¯āĻŧā§‡āĻ­āĻ¸ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 2 (DAO - āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŦāĻžāĻ¯āĻŧāĻ¤ā§āĻ¤āĻļāĻžāĻ¸āĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻž)
īŋŧ
āĻ†āĻŽāĻ°āĻž dApp āĻ…ā§āĻ¯āĻžāĻ˛āĻŋāĻ¸ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ° āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ° āĻ¸āĻš āĻ•āĻ¯āĻŧā§‡āĻ¨ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻ›āĻŋāĨ¤ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻĒā§‡āĻ¯āĻŧā§‡āĻ›āĻŋ:
RIDE āĻāĻŦāĻ‚ RIDE4DAPPS-āĻ āĻ“āĻ¯āĻŧā§‡āĻ­āĻ¸ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 2 (DAO - āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŦāĻžāĻ¯āĻŧāĻ¤ā§āĻ¤āĻļāĻžāĻ¸āĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻž)

āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻšāĻžāĻ°ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻž:

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"withdraw",args:[{type:"integer", value: 1000000}]}, payment: []}))

āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž ā§¨āĻ¯āĻŧ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻŦā§‡āĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ!

āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧ 4. āĻ­ā§‹āĻŸ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻāĻ•āĻŸāĻŋ DAO āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨

āĻĻā§āĻ°ā§āĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻļāĻ¤, RIDE āĻ­āĻžāĻˇāĻž āĻāĻ–āĻ¨āĻ“ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻ¨āĻž (āĻ…āĻ­āĻŋāĻ§āĻžāĻ¨, āĻ…āĻ­āĻŋāĻ§āĻžāĻ¨, āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋāĻ•āĻžāĻ°ā§€, āĻšā§āĻ°āĻžāĻ¸āĻ•āĻžāĻ°ā§€, āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ)āĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻĢā§āĻ˛ā§āĻ¯āĻžāĻŸ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšā§‡āĻ° āĻ‰āĻĒāĻ° āĻ•ā§‹āĻ¨ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ•ā§ƒāĻ¤ āĻŽā§‚āĻ˛ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻ¯āĻĨāĻžāĻ•ā§āĻ°āĻŽā§‡ āĻ•ā§€ āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻĄāĻŋāĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻ¸āĻš āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĄāĻŋāĻœāĻžāĻ‡āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĨ¤

āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚āĻ—ā§āĻ˛āĻŋ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻ–ā§āĻŦ āĻ¸āĻšāĻœ, āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸ā§‚āĻšā§€ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§ƒāĻĨāĻ• āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤
āĻ†āĻ¸ā§āĻ¨ āĻŸā§‡āĻ¸ā§āĻŸ āĻ•ā§‡āĻ¸ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚āĻŸāĻŋāĻ•ā§‡ āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻāĻŦāĻ‚ āĻĒāĻžāĻ°ā§āĻ¸ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛āĻ•ā§‡ āĻĒā§āĻ°āĻ­āĻžāĻŦāĻŋāĻ¤ āĻ•āĻ°āĻŦā§‡ āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡ āĻĻā§‡āĻ–āĻŋāĨ¤
āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŸāĻŋāĻ¤ā§‡ āĻŽā§€āĻŽāĻžāĻ‚āĻ¸āĻž āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¯ā§‡ āĻ…ā§āĻ¯āĻžāĻ˛āĻŋāĻ¸ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻĢāĻžāĻ° āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡ āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĻŋ, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ @verifier-āĻ āĻāĻ‡ āĻ¸āĻŽā§āĻ­āĻžāĻŦāĻ¨āĻžāĻŸāĻŋ āĻŦā§āĻ˛āĻ• āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ā§ˇ

āĻāĻ° āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻ¸āĻ™ā§āĻ—ā§‡ āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨ āĻ•āĻ°āĻž āĻ¯āĻžāĻ• āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨.

āĻ°āĻžāĻ‡āĻĄ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚āĻ¸

āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ†āĻŦāĻžāĻ° āĻ¸āĻŽā§āĻ­āĻŦ, āĻ†āĻŽāĻ°āĻž āĻœāĻžāĻ¨āĻŋ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧāĨ¤
RIDE āĻāĻŦāĻ‚ RIDE4DAPPS-āĻ āĻ“āĻ¯āĻŧā§‡āĻ­āĻ¸ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 2 (DAO - āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŦāĻžāĻ¯āĻŧāĻ¤ā§āĻ¤āĻļāĻžāĻ¸āĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻž)

īŋŧ
āĻŽā§‹āĻŸ, āĻœāĻŸāĻŋāĻ˛ āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¯āĻž āĻĻāĻ°āĻ•āĻžāĻ° āĻ¤āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ DAO dApp.

āĻĄā§‡āĻŸāĻž āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨

āĻĄā§‡āĻŸāĻž āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨:
“āĻāĻ•āĻŸāĻŋ āĻ•ā§€āĻ° āĻ¸āĻ°ā§āĻŦā§‹āĻšā§āĻš āĻ†āĻ•āĻžāĻ° āĻšāĻ˛ 100āĻŸāĻŋ āĻ…āĻ•ā§āĻˇāĻ°, āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ•ā§€ āĻ¸ā§āĻĒā§‡āĻ¸ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ…-āĻŽā§āĻĻā§āĻ°āĻŖāĻ¯ā§‹āĻ—ā§āĻ¯ āĻšāĻŋāĻšā§āĻ¨ āĻ¸āĻš āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻšāĻžāĻ°ā§‡ āĻ‡āĻ‰āĻ¨āĻŋāĻ•ā§‹āĻĄ āĻ•ā§‹āĻĄ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻŽāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸ā§€āĻŽāĻž 32,768 āĻŦāĻžāĻ‡āĻŸ āĻāĻŦāĻ‚ āĻĄā§‡āĻŸāĻž āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡ āĻ¸āĻŽā§āĻ­āĻžāĻŦā§āĻ¯ āĻāĻ¨ā§āĻŸā§āĻ°āĻŋāĻ° āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ• āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž 100ā§ˇ āĻ¸āĻžāĻŽāĻ—ā§āĻ°āĻŋāĻ•āĻ­āĻžāĻŦā§‡, āĻāĻ•āĻŸāĻŋ āĻĄā§‡āĻŸāĻž āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ• āĻ†āĻ•āĻžāĻ° āĻĒā§āĻ°āĻžāĻ¯āĻŧ 140kb - āĻ°ā§‡āĻĢāĻžāĻ°ā§‡āĻ¨ā§āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ āĻŋāĻ• āĻļā§‡āĻ•ā§āĻ¸āĻĒāĻŋāĻ¯āĻŧāĻ°ā§‡āĻ° āĻ¨āĻžāĻŸāĻ• 'āĻ°ā§‹āĻŽāĻŋāĻ“ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄ āĻœā§āĻ˛āĻŋāĻ¯āĻŧā§‡āĻŸ'-āĻāĻ° āĻĻā§ˆāĻ°ā§āĻ˜ā§āĻ¯āĨ¤ 'āĨ¤

āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻļāĻ°ā§āĻ¤āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ DAO āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ:
āĻ¯āĻžāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸāĻžāĻ°ā§āĻŸāĻ†āĻĒ āĻ•āĻ˛ āĻ•āĻ°ā§‡ āĻ¤āĻšāĻŦāĻŋāĻ˛ āĻĒā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¤āĻšāĻŦāĻŋāĻ˛ āĻĒāĻžāĻ¨() āĻ•āĻŽāĻĒāĻ•ā§āĻˇā§‡ 2 āĻœāĻ¨ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€āĻ° āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ - DAO āĻŦāĻŋāĻ¨āĻŋāĻ¯āĻŧā§‹āĻ—āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ°āĨ¤ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻšāĻžāĻ° āĻāĻŸāĻž āĻ āĻŋāĻ• āĻ¤āĻ¤āĻŸāĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻšāĻŦā§‡ āĻ¯āĻ¤āĻŸāĻž āĻ¯ā§‹āĻ—āĻĢāĻ˛ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ­ā§‹āĻŸ āĻĄāĻŋāĻāĻ“ āĻŽāĻžāĻ˛āĻŋāĻ•āĻ°āĻžāĨ¤

āĻ†āĻ¸ā§āĻ¨ 3 āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ•ā§€ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ 2āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ­ā§‹āĻŸā§‡ āĻŦā§āĻ¯āĻžāĻ˛ā§‡āĻ¨ā§āĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻĢāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻ­ āĻ•āĻ°āĻŋ:
xxâ€Ļxx_āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ = āĻŦāĻŋāĻ¨āĻŋāĻ¯āĻŧā§‹āĻ—āĻ•āĻžāĻ°ā§€, āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻŦā§āĻ¯āĻžāĻ˛ā§‡āĻ¨ā§āĻ¸ (āĻ­ā§‹āĻŸ, āĻœāĻŽāĻž, āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻšāĻžāĻ°)
xxâ€Ļxx_sv = āĻ¸ā§āĻŸāĻžāĻ°ā§āĻŸāĻ†āĻĒ, āĻ­ā§‹āĻŸā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž (āĻ­ā§‹āĻŸ, āĻĢāĻžāĻ¨ā§āĻĄ āĻĒāĻžāĻ¨)
xxâ€Ļxx_sf = āĻ¸ā§āĻŸāĻžāĻ°ā§āĻŸāĻ†āĻĒ, āĻ­ā§‹āĻŸā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž (āĻ­ā§‹āĻŸ, āĻĢāĻžāĻ¨ā§āĻĄ āĻĒāĻžāĻ¨)
xxâ€Ļxx = āĻ¸āĻ°ā§āĻŦāĻœāĻ¨ā§€āĻ¨ āĻ āĻŋāĻ•āĻžāĻ¨āĻž (ā§Šā§Ģ āĻ…āĻ•ā§āĻˇāĻ°)

āĻ­ā§‹āĻŸā§‡ āĻ¨ā§‹āĻŸāĻŋāĻļ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ•āĻ¸āĻžāĻĨā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ° āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡:

WriteSet([DataEntry(key1, value1), DataEntry(key2, value2)]),

WriteSet āĻ†āĻŽāĻžāĻĻā§‡āĻ°āĻ•ā§‡ āĻāĻ• āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ°ā§‡āĻ•āĻ°ā§āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧ āĻ‡āĻ¨āĻ­ā§‹āĻ•āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨

āĻŦāĻŦ āĻāĻŦāĻ‚ āĻ•ā§āĻĒāĻžāĻ° āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻĒā§‚āĻ°āĻŖ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡ DAO dApp-āĻāĻ° āĻŽā§‚āĻ˛-āĻŽā§‚āĻ˛ā§āĻ¯ā§‡āĻ° āĻĻā§‹āĻ•āĻžāĻ¨ā§‡ āĻāĻŸāĻŋ āĻāĻ‡āĻ°āĻ•āĻŽ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ ia- āĻ†āĻŽāĻžāĻ¨āĻ¤:
RIDE āĻāĻŦāĻ‚ RIDE4DAPPS-āĻ āĻ“āĻ¯āĻŧā§‡āĻ­āĻ¸ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 2 (DAO - āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŦāĻžāĻ¯āĻŧāĻ¤ā§āĻ¤āĻļāĻžāĻ¸āĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻž)

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻœāĻŽāĻž āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¸āĻžāĻŽāĻžāĻ¨ā§āĻ¯ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡:
RIDE āĻāĻŦāĻ‚ RIDE4DAPPS-āĻ āĻ“āĻ¯āĻŧā§‡āĻ­āĻ¸ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 2 (DAO - āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŦāĻžāĻ¯āĻŧāĻ¤ā§āĻ¤āĻļāĻžāĻ¸āĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻž)

āĻāĻ–āĻ¨ DAO āĻāĻ° āĻ•āĻžāĻ°ā§āĻ¯āĻ•ā§āĻ°āĻŽā§‡āĻ° āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻŽā§āĻšā§‚āĻ°ā§āĻ¤āĻŸāĻŋ āĻ†āĻ¸ā§‡ - āĻ­ā§‹āĻŸ āĻ¤āĻšāĻŦāĻŋāĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĨ¤

āĻŦāĻŦ āĻ¨ā§‡āĻ˛āĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯ 500000 āĻ¤āĻ°āĻ™ā§āĻ—ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­ā§‹āĻŸ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨:

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"vote",args:[{type:"integer", value: 500000}, {type:"string", value: "3MrXEKJr9nDLNyVZ1d12Mq4jjeUYwxNjMsH"}]}, payment: []}))

RIDE āĻāĻŦāĻ‚ RIDE4DAPPS-āĻ āĻ“āĻ¯āĻŧā§‡āĻ­āĻ¸ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 2 (DAO - āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŦāĻžāĻ¯āĻŧāĻ¤ā§āĻ¤āĻļāĻžāĻ¸āĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻž)

āĻĄā§‡āĻŸāĻž āĻ¸ā§āĻŸā§‹āĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻ¨ā§‡āĻ˛āĻŋ āĻ āĻŋāĻ•āĻžāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻ¨ā§āĻŸā§āĻ°āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ‡:
RIDE āĻāĻŦāĻ‚ RIDE4DAPPS-āĻ āĻ“āĻ¯āĻŧā§‡āĻ­āĻ¸ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 2 (DAO - āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŦāĻžāĻ¯āĻŧāĻ¤ā§āĻ¤āĻļāĻžāĻ¸āĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻž)
āĻ•ā§āĻĒāĻžāĻ°āĻ“ āĻ¨ā§‡āĻ˛āĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻĒāĻ•ā§āĻˇā§‡ āĻ­ā§‹āĻŸ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨āĨ¤
RIDE āĻāĻŦāĻ‚ RIDE4DAPPS-āĻ āĻ“āĻ¯āĻŧā§‡āĻ­āĻ¸ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 2 (DAO - āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŦāĻžāĻ¯āĻŧāĻ¤ā§āĻ¤āĻļāĻžāĻ¸āĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻž)

āĻšāĻ˛ā§āĻ¨ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ•ā§‹āĻĄ āĻ•āĻŸāĻžāĻ•ā§āĻˇāĻĒāĻžāĻ¤ āĻ•āĻ°āĻž āĻ¯āĻžāĻ• āĻ¤āĻšāĻŦāĻŋāĻ˛ āĻĒāĻžāĻ¨. DAO āĻĨā§‡āĻ•ā§‡ āĻ¤āĻšāĻŦāĻŋāĻ˛ āĻ‰āĻ¤ā§āĻ¤ā§‹āĻ˛āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ¤ā§‡ āĻ¨ā§‡āĻ˛āĻŋāĻ•ā§‡ āĻ•āĻŽāĻĒāĻ•ā§āĻˇā§‡ 2āĻŸāĻŋ āĻ­ā§‹āĻŸ āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤
RIDE āĻāĻŦāĻ‚ RIDE4DAPPS-āĻ āĻ“āĻ¯āĻŧā§‡āĻ­āĻ¸ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 2 (DAO - āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŦāĻžāĻ¯āĻŧāĻ¤ā§āĻ¤āĻļāĻžāĻ¸āĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻž)

āĻ¨ā§‡āĻ˛āĻŋ āĻ¤āĻžāĻ° āĻ‰āĻĒāĻ° āĻ…āĻ°ā§āĻĒāĻŋāĻ¤ āĻ…āĻ°ā§āĻĨā§‡āĻ° āĻ…āĻ°ā§āĻ§ā§‡āĻ• āĻ¤ā§āĻ˛ā§‡ āĻ¨āĻŋāĻ¤ā§‡ āĻšāĻ˛ā§‡āĻ›ā§‡:

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"getFunds",args:[{type:"integer", value: 500000}]}, payment: []}))

RIDE āĻāĻŦāĻ‚ RIDE4DAPPS-āĻ āĻ“āĻ¯āĻŧā§‡āĻ­āĻ¸ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 2 (DAO - āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŦāĻžāĻ¯āĻŧāĻ¤ā§āĻ¤āĻļāĻžāĻ¸āĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻž)

āĻ¸ā§‡ āĻ¸āĻĢāĻ˛ āĻšāĻ¯āĻŧ, āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻĄāĻŋāĻāĻ“ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡!

āĻ†āĻŽāĻ°āĻž āĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻāĻ•āĻŸāĻŋ DAO āĻ¤ā§ˆāĻ°āĻŋāĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§‹āĻšāĻ¨āĻž āĻ•āĻ°ā§‡āĻ›āĻŋ RIDE4DAPPS.
āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ…āĻ‚āĻļāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡, āĻ†āĻŽāĻ°āĻž āĻ•ā§‹āĻĄ āĻ°āĻŋāĻĢā§āĻ¯āĻžāĻ•ā§āĻŸāĻ°āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻ•ā§‡āĻ¸ āĻŸā§‡āĻ¸ā§āĻŸāĻŋāĻ‚ āĻāĻ° āĻ‰āĻĒāĻ° āĻ˜āĻ¨āĻŋāĻˇā§āĻ āĻ­āĻžāĻŦā§‡ āĻ¨āĻœāĻ° āĻĻā§‡āĻŦāĨ¤

āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•ā§‹āĻĄ āĻ‡āĻ¨ āĻ¤āĻ°āĻ™ā§āĻ— āĻ°āĻžāĻ‡āĻĄ āĻ†āĻ‡āĻĄāĻŋāĻ‡:

# In this example multiple accounts can deposit their funds to DAO and safely take them back, no one can interfere with this.
# DAO participants can also vote for particular addresses and let them withdraw invested funds then quorum has reached.
# An inner state is maintained as mapping `address=>waves`.
# https://medium.com/waves-lab/waves-announces-funding-for-ride-for-dapps-developers-f724095fdbe1

# You can try this contract by following commands in the IDE (ide.wavesplatform.com)
# Run commands as listed below
# From account #0:
#      deploy()
# From account #1: deposit funds
#      broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
# From account #2: deposit funds
#      broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
# From account #1: vote for startup
#      broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"vote",args:[{type:"integer", value: 500000}, {type:"string", value: "3MrXEKJr9nDLNyVZ1d12Mq4jjeUYwxNjMsH"}]}, payment: []}))
# From account #2: vote for startup
#      broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"vote",args:[{type:"integer", value: 500000}, {type:"string", value: "3MrXEKJr9nDLNyVZ1d12Mq4jjeUYwxNjMsH"}]}, payment: []}))
# From account #3: get invested funds
#      broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"getFunds",args:[{type:"integer", value: 500000}]}, payment: []}))

{-# STDLIB_VERSION 3 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}

@Callable(i)
func deposit() = {
   let pmt = extract(i.payment)
   if (isDefined(pmt.assetId)) then throw("can hodl waves only at the moment")
   else {
        let currentKey = toBase58String(i.caller.bytes)
        let xxxInvestorBalance = currentKey + "_" + "ib"
        let currentAmount = match getInteger(this, xxxInvestorBalance) {
            case a:Int => a
            case _ => 0
        }
        let newAmount = currentAmount + pmt.amount
        WriteSet([DataEntry(xxxInvestorBalance, newAmount)])
   }
}
@Callable(i)
func withdraw(amount: Int) = {
        let currentKey = toBase58String(i.caller.bytes)
        let xxxInvestorBalance = currentKey + "_" + "ib"
        let currentAmount = match getInteger(this, xxxInvestorBalance) {
            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(xxxInvestorBalance, newAmount)]),
                    TransferSet([ScriptTransfer(i.caller, amount, unit)])
                )
    }
@Callable(i)
func getFunds(amount: Int) = {
        let quorum = 2
        let currentKey = toBase58String(i.caller.bytes)
        let xxxStartupFund = currentKey + "_" + "sf"
        let xxxStartupVotes = currentKey + "_" + "sv"
        let currentAmount = match getInteger(this, xxxStartupFund) {
            case a:Int => a
            case _ => 0
        }
        let totalVotes = match getInteger(this, xxxStartupVotes) {
            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 if (totalVotes < quorum)
            then throw("Not enough votes. At least 2 votes required!")
    else ScriptResult(
                    WriteSet([
                        DataEntry(xxxStartupFund, newAmount)
                        ]),
                    TransferSet([ScriptTransfer(i.caller, amount, unit)])
                )
    }
@Callable(i)
func vote(amount: Int, address: String) = {
        let currentKey = toBase58String(i.caller.bytes)
        let xxxInvestorBalance = currentKey + "_" + "ib"
        let xxxStartupFund = address + "_" + "sf"
        let xxxStartupVotes = address + "_" + "sv"
        let currentAmount = match getInteger(this, xxxInvestorBalance) {
            case a:Int => a
            case _ => 0
        }
        let currentVotes = match getInteger(this, xxxStartupVotes) {
            case a:Int => a
            case _ => 0
        }
        let currentFund = match getInteger(this, xxxStartupFund) {
            case a:Int => a
            case _ => 0
        }
    if (amount <= 0)
            then throw("Can't withdraw negative amount")
    else if (amount > currentAmount)
            then throw("Not enough balance")
    else ScriptResult(
                    WriteSet([
                        DataEntry(xxxInvestorBalance, currentAmount - amount),
                        DataEntry(xxxStartupVotes, currentVotes + 1),
                        DataEntry(xxxStartupFund, currentFund + amount)
                        ]),
                    TransferSet([ScriptTransfer(i.caller, amount, unit)])
            )
    }
@Verifier(tx)
func verify() = {
    match tx {
        case t: TransferTransaction =>false
        case _ => true
    }
}

āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ‚āĻļ
āĻ—āĻŋāĻĨā§āĻŦā§‡ āĻ•ā§‹āĻĄ
āĻ¤āĻ°āĻ™ā§āĻ— āĻ°āĻžāĻ‡āĻĄ IDE
āĻ…āĻ¨ā§āĻĻāĻžāĻ¨ āĻ•āĻ°ā§āĻŽāĻ¸ā§‚āĻšāĻŋāĻ° āĻ˜ā§‹āĻˇāĻŖāĻž

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨