RIDE เช…เชจเซ‡ RIDE4DAPPS เชชเชฐ เชตเซ‡เชตเซเช เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชฒเช–เชตเชพเชจเซเช‚ เชถเซ€เช–เชตเซเช‚. เชญเชพเช— 2 (DAO - เชตเชฟเช•เซ‡เชจเซเชฆเซเชฐเชฟเชค เชธเซเชตเชพเชฏเชคเซเชค เชธเช‚เชธเซเชฅเชพ)

RIDE เช…เชจเซ‡ RIDE4DAPPS เชชเชฐ เชตเซ‡เชตเซเช เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชฒเช–เชตเชพเชจเซเช‚ เชถเซ€เช–เชตเซเช‚. เชญเชพเช— 2 (DAO - เชตเชฟเช•เซ‡เชจเซเชฆเซเชฐเชฟเชค เชธเซเชตเชพเชฏเชคเซเชค เชธเช‚เชธเซเชฅเชพ)

เชนเซ‡เชฒเซ‹ เชฆเชฐเซ‡เช•!

ะ’ เชชเซเชฐเชฅเชฎ เชญเชพเช— เช…เชฎเซ‡ dApp (เชตเชฟเช•เซ‡เชจเซเชฆเซเชฐเชฟเชค เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ) เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเชตเซเช‚ เช…เชจเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเชตเซเช‚ เชคเซ‡ เชตเชฟเช—เชคเชตเชพเชฐ เชœเซ‹เชฏเซเช‚ เชฎเซ‹เชœเชพ เชฐเชพเช‡เชก IDE.

เชšเชพเชฒเซ‹ เชนเชตเซ‡ เชกเชฟเชธเชเชธเซ‡เชฎเซเชฌเชฒเชจเซเช‚ เชฅเซ‹เชกเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซ€เช เช‰เชฆเชพเชนเชฐเชฃ.

เชธเซเชŸเซ‡เชœ 3. dApp เชเช•เชพเช‰เชจเซเชŸเชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ

RIDE เช…เชจเซ‡ RIDE4DAPPS เชชเชฐ เชตเซ‡เชตเซเช เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชฒเช–เชตเชพเชจเซเช‚ เชถเซ€เช–เชตเซเช‚. เชญเชพเช— 2 (DAO - เชตเชฟเช•เซ‡เชจเซเชฆเซเชฐเชฟเชค เชธเซเชตเชพเชฏเชคเซเชค เชธเช‚เชธเซเชฅเชพ)

เชเชฒเชฟเชธ เชธเชพเชฅเซ‡ เชคเชฎเชจเซ‡ เช•เชˆ เชธเชฎเชธเซเชฏเชพเช“ เชคเชฐเชค เชœ เชฌเชนเชพเชฐ เช†เชตเซ‡ เช›เซ‡? dApp เช–เชพเชคเซเช‚?
เชชเซเชฐเชฅเชฎ:
เชฌเซ‚เชฌ เช…เชจเซ‡ เช•เซ‚เชชเชฐ เช†เช•เชธเซเชฎเชฟเช• เชฐเซ€เชคเซ‡ เชจเชฟเชฏเชฎเชฟเชค เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ 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: []}))

เชธเซเช•เซเชฐเชฟเชชเซเชŸ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เช…เชฎเซ‡ 2 เชœเซ€ เชฎเซเชฆเซเชฆเซ‹ เชถเซ‹เชงเซ€ เช•เชพเชขเซเชฏเซ‹!

เชธเซเชŸเซ‡เชœ 4. เชฎเชคเชฆเชพเชจ เชธเชพเชฅเซ‡ DAO เชฌเชจเชพเชตเซ‹

เช•เชฎเชจเชธเซ€เชฌเซ‡, RIDE เชญเชพเชทเชพ เชนเชœเซ เชธเซเชงเซ€ เชธเช‚เช—เซเชฐเชนเซ‹ (เชถเชฌเซเชฆเช•เซ‹เชทเซ‹, เชชเซเชจเชฐเชพเชตเชฐเซเชคเช•เซ‹, เชฐเซ€เชกเซเชฏเซเชธเชฐ, เชตเช—เซ‡เชฐเซ‡) เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชคเซ€ เชจเชฅเซ€. เชœเซ‹ เช•เซ‡, เชซเซเชฒเซ‡เชŸ เช•เชฒเซ‡เช•เซเชถเชจ เชธเชพเชฅเซ‡เชจเซ€ เช•เซ‹เชˆเชชเชฃ เช•เชพเชฎเช—เซ€เชฐเซ€ เชฎเชพเชŸเซ‡ เช•เซ€-เชฎเซ‚เชฒเซเชฏ เช…เชฎเซ‡ เชธเซเชŸเซเชฐเซ€เช‚เช—เซเชธ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเชฟเชธเซเชŸเชฎ เชกเชฟเชเชพเช‡เชจ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เชคเซ‡ เชฎเซเชœเชฌ เช•เซ€ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชกเชฟเช•เซเชฐเชฟเชชเซเชถเชจ เชธเชพเชฅเซ‡.

เชถเชฌเซเชฆเชฎเชพเชณเชพเช“ เชœเซ‹เชกเชตเชพ เชฎเชพเชŸเซ‡ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช›เซ‡; เชธเซเชŸเซเชฐเชฟเช‚เช—เซเชธเชจเซ‡ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เชฆเซเชตเชพเชฐเชพ เช…เชฒเช— เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.
เชšเชพเชฒเซ‹ เชเช• เชชเชฐเซ€เช•เซเชทเชฃ เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เชธเซเชŸเซเชฐเชฟเช‚เช—เชจเซ‡ เชเช•เชคเซเชฐเชฟเชค เช…เชจเซ‡ เชชเชพเชฐเซเชธ เช•เชฐเซ€เช เช…เชจเซ‡ เชคเชชเชพเชธ เช•เชฐเซ€เช เช•เซ‡ เช† เชตเซเชฏเชตเชนเชพเชฐเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช…เชธเชฐ เช•เชฐเซ‡ เช›เซ‡.
เช…เชฎเซ‡ เช เชนเช•เซ€เช•เชค เชชเชฐ เชธเชฎเชพเชงเชพเชจ เช•เชฐเซเชฏเซเช‚ เช•เซ‡ เชเชฒเชฟเชธ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจ เชชเชฐ เชนเชธเซเชคเชพเช•เซเชทเชฐ เช•เชฐเซ€ เชถเช•เชคเซ€ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เช† เชชเซเชฐเช•เชพเชฐเชจเซ€ เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจ เชฎเชพเชŸเซ‡ @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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹