RIDE เจ…เจคเฉ‡ RIDE4DAPPS 'เจคเฉ‡ เจตเฉ‡เจตเจœเจผ เจธเจฎเจพเจฐเจŸ เจ•เฉฐเจŸเจฐเฉˆเจ•เจŸ เจฒเจฟเจ–เจฃเจพ เจธเจฟเฉฑเจ–เจฃเจพเฅค เจญเจพเจ— 2 (DAO - เจตเจฟเจ•เฉ‡เจ‚เจฆเจฐเฉ€เจ•เฉเจฐเจฟเจค เจ–เฉเจฆเจฎเฉเจ–เจคเจฟเจ†เจฐ เจธเฉฐเจ—เจ เจจ)

RIDE เจ…เจคเฉ‡ RIDE4DAPPS 'เจคเฉ‡ เจตเฉ‡เจตเจœเจผ เจธเจฎเจพเจฐเจŸ เจ•เฉฐเจŸเจฐเฉˆเจ•เจŸ เจฒเจฟเจ–เจฃเจพ เจธเจฟเฉฑเจ–เจฃเจพเฅค เจญเจพเจ— 2 (DAO - เจตเจฟเจ•เฉ‡เจ‚เจฆเจฐเฉ€เจ•เฉเจฐเจฟเจค เจ–เฉเจฆเจฎเฉเจ–เจคเจฟเจ†เจฐ เจธเฉฐเจ—เจ เจจ)

เจนเฉˆเจฒเฉ‹ เจนเจฐ เจ•เฉ‹เจˆ!

ะ’ เจชเจนเจฟเจฒเจพ เจญเจพเจ—, เจ…เจธเฉ€เจ‚ เจตเจฟเจธเจคเจพเจฐ เจตเจฟเฉฑเจš เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจนเฉˆ เจ•เจฟ เจ•เจฟเจตเฉ‡เจ‚ เจ‡เฉฑเจ• dApp (เจตเจฟเจ•เฉ‡เจ‚เจฆเจฐเฉ€เจ•เฉเจฐเจฟเจค เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ) เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃเจพ เจ…เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจนเฉˆ เจตเฉ‡เจต เจฐเจพเจˆเจก IDE.

เจšเจฒเฉ‹ เจนเฉเจฃ เจฅเฉ‹เฉœเจพ เจœเจฟเจนเจพ เจกเจฟเจธเจธเฉˆเจ‚เจฌเจฒ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเฉ€เจ เจ‰เจฆเจพเจนเจฐเจจ.

เจชเฉœเจพเจ… 3. dApp เจ–เจพเจคเฉ‡ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจเจพ

RIDE เจ…เจคเฉ‡ RIDE4DAPPS 'เจคเฉ‡ เจตเฉ‡เจตเจœเจผ เจธเจฎเจพเจฐเจŸ เจ•เฉฐเจŸเจฐเฉˆเจ•เจŸ เจฒเจฟเจ–เจฃเจพ เจธเจฟเฉฑเจ–เจฃเจพเฅค เจญเจพเจ— 2 (DAO - เจตเจฟเจ•เฉ‡เจ‚เจฆเจฐเฉ€เจ•เฉเจฐเจฟเจค เจ–เฉเจฆเจฎเฉเจ–เจคเจฟเจ†เจฐ เจธเฉฐเจ—เจ เจจ)

เจ•เจฟเจนเฉœเฉ€เจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจคเฉเจฐเฉฐเจค เจเจฒเจฟเจธ เจฆเฉ‡ เจจเจพเจฒ เจ†เจตเจพเจœเจผเจพเจ‚ เจตเฉฑเจฒ เจญเฉฑเจœเจฆเฉ€เจ†เจ‚ เจนเจจ dApp เจ–เจพเจคเจพ?
เจชเจนเจฟเจฒเจพ:
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 เจฌเจฃเจพเจ“

เจฌเจฆเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, เจฐเจพเจˆเจก เจญเจพเจธเจผเจพ เจ…เจœเฉ‡ เจตเฉ€ เจธเฉฐเจ—เฉเจฐเจนเจฟ (เจ•เฉ‹เจธเจผเจพเจ‚, เจธเจผเจฌเจฆเจ•เฉ‹เจธเจผ, เจฆเฉเจนเจฐเจพเจ“, เจฐเฉ€เจกเจฟเจŠเจธเจฐ, เจ†เจฆเจฟ) เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจชเฉเจฐเจฆเจพเจจ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจซเจฒเฉˆเจŸ เจ•เจฒเฉˆเจ•เจธเจผเจจ 'เจคเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจ•เจพเจฐเจตเจพเจˆ เจฒเจˆ เจ•เฉเฉฐเจœเฉ€-เจฎเฉเฉฑเจฒ เจ…เจธเฉ€เจ‚ เจ•เฉเจฐเจฎเจตเจพเจฐ เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจกเฉ€เจ•เฉเจฐเจฟเจชเจธเจผเจจ เจฆเฉ‡ เจจเจพเจฒ, เจธเจŸเจฐเจฟเฉฐเจ—เจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจธเจฟเจธเจŸเจฎ เจคเจฟเจ†เจฐ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚เฅค

เจธเจŸเฉเจฐเจฟเฉฐเจ—เจธ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ เจฌเจนเฉเจค เจ†เจธเจพเจจ เจนเฉˆ, เจธเจคเจฐ เจจเฉ‚เฉฐ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉเจ†เจฐเจพ เจตเฉฑเจ– เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค
เจ†เจ‰ เจ‡เฉฑเจ• เจŸเฉˆเจธเจŸ เจ•เฉ‡เจธ เจตเจœเฉ‹เจ‚ เจธเจคเจฐ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ…เจคเฉ‡ เจชเจพเจฐเจธ เจ•เจฐเฉ€เจ เจ…เจคเฉ‡ เจœเจพเจ‚เจš เจ•เจฐเฉ€เจ เจ•เจฟ เจ‡เจน เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจชเฉเจฐเจญเจพเจตเจค เจ•เจฐเฉ‡เจ—เจพเฅค
เจ…เจธเฉ€เจ‚ เจ‡เจธ เจคเฉฑเจฅ 'เจคเฉ‡ เจธเฉˆเจŸเจฒ เจนเฉ‹ เจ—เจ เจ•เจฟ เจเจฒเจฟเจธ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ 'เจคเฉ‡ เจฆเจธเจคเจ–เจค เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ€ เจธเฉ€, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจธ เจ•เจฟเจธเจฎ เจฆเฉ‡ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจฒเจˆ @verifier เจตเจฟเฉฑเจš เจ‡เจธ เจธเฉฐเจญเจพเจตเจจเจพ เจจเฉ‚เฉฐ เจฌเจฒเฉŒเจ• เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค

เจ†เจ‰ เจธเจคเจฐ เจจเจพเจฒ เจ…เจญเจฟเจ†เจธ เจ•เจฐเฉ€เจ เจ…เจคเฉ‡ เจซเจฟเจฐ เจ‡เจธเจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเฉ€เจเฅค

เจฐเจพเจˆเจก เจธเจคเจฐ

เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ เจฆเฉเจฌเจพเจฐเจพ เจธเฉฐเจญเจต เจนเฉˆ, เจ…เจธเฉ€เจ‚ เจœเจพเจฃเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจธเจคเจฐ เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจนเฉˆ.
RIDE เจ…เจคเฉ‡ RIDE4DAPPS 'เจคเฉ‡ เจตเฉ‡เจตเจœเจผ เจธเจฎเจพเจฐเจŸ เจ•เฉฐเจŸเจฐเฉˆเจ•เจŸ เจฒเจฟเจ–เจฃเจพ เจธเจฟเฉฑเจ–เจฃเจพเฅค เจญเจพเจ— 2 (DAO - เจตเจฟเจ•เฉ‡เจ‚เจฆเจฐเฉ€เจ•เฉเจฐเจฟเจค เจ–เฉเจฆเจฎเฉเจ–เจคเจฟเจ†เจฐ เจธเฉฐเจ—เจ เจจ)

๏ฟผ
เจ•เฉเฉฑเจฒ เจฎเจฟเจฒเจพ เจ•เฉ‡, เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‰เจน เจธเจญ เจ•เฉเจ เจนเฉˆ เจœเจฟเจธเจฆเฉ€ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจคเจฐเจ• เจฒเจฟเจ–เจฃ เจฒเจˆ เจฒเฉ‹เฉœ เจนเฉˆ DAO dApp.

เจกเจพเจŸเจพ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ

เจกเจพเจŸเจพ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ:
โ€œเจ‡เฉฑเจ• เจ•เฉเฉฐเจœเฉ€ เจฆเจพ เจ…เจงเจฟเจ•เจคเจฎ เจ†เจ•เจพเจฐ 100 เจ…เฉฑเจ–เจฐ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจ•เฉเฉฐเจœเฉ€ เจตเจฟเฉฑเจš เจ†เจฐเจฌเจฟเจŸเจฐเฉ‡เจฐเฉ€ เจฏเฉ‚เจจเฉ€เจ•เฉ‹เจก เจ•เฉ‹เจก เจชเฉเจ†เจ‡เฉฐเจŸ เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเจจ เจœเจฟเจธ เจตเจฟเฉฑเจš เจธเจชเฉ‡เจธ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจ—เฉˆเจฐ-เจชเฉเจฐเจฟเฉฐเจŸเจฏเฉ‹เจ— เจšเจฟเฉฐเจจเฉเจน เจธเจผเจพเจฎเจฒ เจนเจจเฅค เจธเจŸเฉเจฐเจฟเฉฐเจ— เจฎเฉเฉฑเจฒเจพเจ‚ เจฆเฉ€ เจธเฉ€เจฎเจพ 32,768 เจฌเจพเจˆเจŸ เจนเฉˆ เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพ เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ เจตเจฟเฉฑเจš เจธเฉฐเจญเจพเจตเจฟเจค เจเจ‚เจŸเจฐเฉ€เจ†เจ‚ เจฆเฉ€ เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจธเฉฐเจ–เจฟเจ† 100 เจนเฉˆเฅค เจ•เฉเฉฑเจฒ เจฎเจฟเจฒเจพ เจ•เฉ‡, เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพ เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ เจฆเจพ เจ…เจงเจฟเจ•เจคเจฎ เจ†เจ•เจพเจฐ เจฒเจ—เจญเจ— 140kb เจนเฉˆ โ€” เจธเฉฐเจฆเจฐเจญ เจฒเจˆ, เจฒเจ—เจญเจ— เจธเจผเฉ‡เจ•เจธเจชเฉ€เจ…เจฐ เจฆเฉ‡ เจจเจพเจŸเจ• 'เจฐเฉ‹เจฎเฉ€เจ“ เจ…เจคเฉ‡ เจœเฉ‚เจฒเฉ€เจ…เจŸ' เจฆเฉ€ เจฒเฉฐเจฌเจพเจˆ เจฆเฉ‡ เจฌเจฐเจพเจฌเจฐ เจนเฉˆเฅค 'เฅค

เจ…เจธเฉ€เจ‚ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ€เจ†เจ‚ เจธเจผเจฐเจคเจพเจ‚ เจจเจพเจฒ เจ‡เฉฑเจ• DAO เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚:
เจ‡เฉฑเจ• เจธเจŸเจพเจฐเจŸเจ…เฉฑเจช เจฒเจˆ เจ•เจพเจฒ เจ•เจฐเจ•เฉ‡ เจซเฉฐเจก เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจซเฉฐเจก เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‹() เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ 2 เจญเจพเจ—เฉ€เจฆเจพเจฐเจพเจ‚ - DAO เจจเจฟเจตเฉ‡เจธเจผเจ•เจพเจ‚ เจฆเฉ‡ เจธเจฎเจฐเจฅเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจ‡เจน เจ‰เจจเจพ เจนเฉ€ เจธเฉฐเจญเจต เจนเฉ‹เจตเฉ‡เจ—เจพ เจœเจฟเฉฐเจจเจพ เจฐเจ•เจฎ 'เจคเฉ‡ เจฆเจฐเจธเจพเจˆ เจ—เจˆ เจนเฉˆ เจตเฉ‹เจŸเจฟเฉฐเจ— เจกเฉ€เจเจ“ เจฎเจพเจฒเจ•เฅค

เจ†เจ“ 3 เจ•เจฟเจธเจฎเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจฌเจฃเจพเจˆเจ เจ…เจคเฉ‡ 2 เจจเจตเฉ‡เจ‚ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจตเฉ‹เจŸ เจ…เจคเฉ‡ เจซเฉฐเจก เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจตเจฟเฉฑเจš เจฌเฉˆเจฒเฉ‡เจ‚เจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจคเจฐเจ• เจœเฉ‹เฉœเฉ€เจ:
xxโ€ฆxx_ia = เจจเจฟเจตเฉ‡เจธเจผเจ•, เจ‰เจชเจฒเจฌเจง เจฌเจ•เจพเจ‡เจ† (เจตเฉ‹เจŸ, เจœเจฎเฉเจนเจพ, เจ•เจขเจตเจพเจ‰เจฃเจพ)
xxโ€ฆxx_sv = เจธเจผเฉเจฐเฉ‚เจ†เจค, เจตเฉ‹เจŸเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ (เจตเฉ‹เจŸ, เจซเฉฐเจก เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‹)
xxโ€ฆxx_sf = เจธเจผเฉเจฐเฉ‚เจ†เจค, เจตเฉ‹เจŸเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ (เจตเฉ‹เจŸ, เจซเฉฐเจก เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‹)
xxโ€ฆxx = เจœเจจเจคเจ• เจชเจคเจพ (35 เจ…เฉฑเจ–เจฐ)

เจตเฉ‹เจŸ เจตเจฟเฉฑเจš เจจเฉ‹เจŸเจฟเจธ เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเจพเจฐ เจตเจฟเฉฑเจš เจ•เจˆ เจ–เฉ‡เจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ…เจชเจกเฉ‡เจŸ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ:

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

WriteSet เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ‡เฉฑเจ• เจตเจพเจฐ เจตเจฟเฉฑเจš เจ•เจˆ เจฐเจฟเจ•เจพเจฐเจก เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ invokeScript เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ

เจฌเฉŒเจฌ เจ…เจคเฉ‡ เจ•เฉ‚เจชเจฐ เจฆเฉ‡ เจฆเฉเจฌเจพเจฐเจพ เจญเจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ 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.
เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจญเจพเจ—เจพเจ‚ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ•เฉ‹เจก เจฐเฉ€เจซเฉˆเจ•เจŸเจฐเจฟเฉฐเจ— เจ…เจคเฉ‡ เจ•เฉ‡เจธ เจŸเฉˆเจธเจŸเจฟเฉฐเจ— 'เจคเฉ‡ เจกเฉ‚เฉฐเจ˜เจพเจˆ เจจเจพเจฒ เจตเจฟเจšเจพเจฐ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจตเจฟเฉฑเจš เจชเฉ‚เจฐเจพ เจ•เฉ‹เจก เจตเฉ‡เจต เจฐเจพเจˆเจก IDE:

# 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
    }
}

เจชเจนเจฟเจฒเจพ เจนเจฟเฉฑเจธเจพ
github 'เจคเฉ‡ เจ•เฉ‹เจก
เจตเฉ‡เจต เจฐเจพเจˆเจก IDE
เจ—เฉเจฐเจพเจ‚เจŸ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจฆเฉ€ เจ˜เฉ‹เจธเจผเจฃเจพ

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹