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

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

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

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

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

เชชเช—เชฒเซเช‚ 3: dApp เชเช•เชพเช‰เชจเซเชŸเชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเซเช‚

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

เชเชฒเชฟเชธ เชธเชพเชฅเซ‡ เชคเชฎเชจเซ‡ เช•เชˆ เชธเชฎเชธเซเชฏเชพเช“ เชคเชฐเชค เชœ เชฆเซ‡เช–เชพเชฏ เช›เซ‡? dApp เช–เชพเชคเซเช‚?
เชชเซเชฐเชฅเชฎ:
เชฌเซ‚เชฌ เช…เชจเซ‡ เช•เซ‚เชชเชฐ เชจเชฟเชฏเชฎเชฟเชค เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ dApp เชธเชฐเชจเชพเชฎเชพเช‚ เชชเชฐ เช†เช•เชธเซเชฎเชฟเช• เชฐเซ€เชคเซ‡ เชญเช‚เชกเซ‹เชณ เชฎเซ‹เช•เชฒเซ€ เชถเช•เซ‡ เช›เซ‡ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เช…เชจเซ‡ เชคเซ‡เชฅเซ€ เชคเซ‡เชฎเชจเซ‡ เชชเชพเช›เชพ เชเช•เซเชธเซ‡เชธ เช•เชฐเซ€ เชถเช•เชถเซ‡ เชจเชนเซ€เช‚.

เชฌเซ€เชœเซเช‚:
เช…เชฎเซ‡ เชเชฒเชฟเชธเชจเซ‡ เชฌเซ‚เชฌ เช…เชจเซ‡/เช…เชฅเชตเชพ เช•เซ‚เชชเชฐเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เชตเชฟเชจเชพ เชญเช‚เชกเซ‹เชณ เช‰เชชเชพเชกเชตเชพ เชชเชฐ เชชเซเชฐเชคเชฟเชฌเช‚เชง เชฎเซ‚เช•เชคเชพ เชจเชฅเซ€. เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชเชฒเชฟเชธเชจเชพ เชฌเชงเชพ เชตเซเชฏเชตเชนเชพเชฐเซ‹ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เชœเซ‡เชฎ เช•เซ‡ เชตเซ‡เชฐเชฟเชซเชฟเช•เซ‡เชถเชจ เชฌเชŸเชจ เชฆเซเชตเชพเชฐเชพ เชธเซ‚เชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡.

เชšเชพเชฒเซ‹ เชเชฒเชฟเชธ เชชเชฐ เชชเซเชฐเชคเชฟเชฌเช‚เชง เชฎเซ‚เช•เซ€เชจเซ‡ เชฌเซ€เชœเชพเชจเซ‡ เช เซ€เช• เช•เชฐเซ€เช เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เชตเซเชฏเชตเชนเชพเชฐเซ‹. เชธเซเชงเชพเชฐเซ‡เชฒเซ€ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชœเชฎเชพเชตเชตเซ€:
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 เชฐเซ‹เช•เชพเชฃเช•เชพเชฐเซ‹ - เชจเซ‹ เชŸเซ‡เช•เซ‹ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เชชเชพเช›เซ€ เช–เซ‡เช‚เชšเซ€ เชชเชฐ เชฆเชฐเซเชถเชพเชตเซ‡เชฒ เช•เซเชฒ เชฐเช•เชฎ เชœเซ‡เชŸเชฒเซ€ เชœ เชฐเช•เชฎ เชฎเชณเซ€ เชถเช•เชถเซ‡ เชฎเชคเชฆเชพเชจ DAO เชฎเชพเชฒเชฟเช•เซ‹.

เชšเชพเชฒเซ‹ 3 เชชเซเชฐเช•เชพเชฐเชจเซ€ เช•เซ€ เชฌเชจเชพเชตเซ€เช เช…เชจเซ‡ 2 เชจเชตเชพ เชซเช‚เช•เซเชถเชจ, เชตเซ‹เชŸ เช…เชจเซ‡ เช—เซ‡เชŸเชซเช‚เชกเซเชธเชฎเชพเช‚ เชฌเซ‡เชฒเซ‡เชจเซเชธ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฒเซ‹เชœเชฟเช• เช‰เชฎเซ‡เชฐเซ€เช:
xxโ€ฆxx_เช†เชˆเช = เชฐเซ‹เช•เชพเชฃเช•เชพเชฐเซ‹, เช‰เชชเชฒเชฌเซเชง เชฌเซ‡เชฒเซ‡เชจเซเชธ (เชฎเชค, เชœเชฎเชพ, เช‰เชชเชพเชก)
xxโ€ฆxx_เชธเชฐเซเชต = เชธเซเชŸเชพเชฐเซเชŸเช…เชชเซเชธ, เชฎเชคเซ‹เชจเซ€ เชธเช‚เช–เซเชฏเชพ (เชฎเชค เช†เชชเซ‹, เชญเช‚เชกเซ‹เชณ เชฎเซ‡เชณเชตเซ‹)
xxโ€ฆxx_เชเชธเชเชซ = เชธเซเชŸเชพเชฐเซเชŸเช…เชชเซเชธ, เชฎเชคเซ‹เชจเซ€ เชธเช‚เช–เซเชฏเชพ (เชฎเชค เช†เชชเซ‹, เชญเช‚เชกเซ‹เชณ เชฎเซ‡เชณเชตเซ‹)
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 เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡!

เช…เชฎเซ‡ เชญเชพเชทเชพเชฎเชพเช‚ DAO เชฌเชจเชพเชตเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เช†เชตเชฐเซ€ เชฒเซ€เชงเซ€ เช›เซ‡ เชฐเชพเช‡เชก4เชกเซ€เชเชชเซ€เชเชธ.
เชจเซ€เชšเซ‡เชจเชพ เชญเชพเช—เซ‹เชฎเชพเช‚, เช†เชชเชฃเซ‡ เช•เซ‹เชก เชฐเชฟเชซเซ‡เช•เซเชŸเชฐเชฟเช‚เช— เช…เชจเซ‡ เช•เซ‡เชธ เชŸเซ‡เชธเซเชŸเชฟเช‚เช— เชชเชฐ เชจเชœเซ€เช•เชฅเซ€ เชจเชœเชฐ เชจเชพเช–เซ€เชถเซเช‚.

เช•เซ‹เชกเชจเซเช‚ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเช‚เชธเซเช•เชฐเชฃ เชตเซ‡เชตเซเช เชฐเชพเช‡เชก 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

DDoS เชธเซเชฐเช•เซเชทเชพ, VPS VDS เชธเชฐเซเชตเชฐ เชงเชฐเชพเชตเชคเซ€ เชธเชพเช‡เชŸเซเชธ เชฎเชพเชŸเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เชนเซ‹เชธเซเชŸเชฟเช‚เช— เช–เชฐเซ€เชฆเซ‹ ๐Ÿ”ฅ DDoS เชธเซเชฐเช•เซเชทเชพ, VPS VDS เชธเชฐเซเชตเชฐเซเชธ เชธเชพเชฅเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เชตเซ‡เชฌเชธเชพเช‡เชŸ เชนเซ‹เชธเซเชŸเชฟเช‚เช— เช–เชฐเซ€เชฆเซ‹ | ProHoster