แžšแŸ€แž“แžŸแžšแžŸแŸแžšแž€แžทแž…แŸ’แž…แžŸแž“แŸ’แž™แžถแž†แŸ’แž›แžถแžแžœแŸƒ Waves แž“แŸ…แž›แžพ RIDE แž“แžทแž„ RIDE4DAPPS แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 2 (DAO - แžขแž„แŸ’แž‚แž€แžถแžšแžŸแŸ’แžœแž™แŸแžแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš)

แžšแŸ€แž“แžŸแžšแžŸแŸแžšแž€แžทแž…แŸ’แž…แžŸแž“แŸ’แž™แžถแž†แŸ’แž›แžถแžแžœแŸƒ Waves แž“แŸ…แž›แžพ RIDE แž“แžทแž„ RIDE4DAPPS แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 2 (DAO - แžขแž„แŸ’แž‚แž€แžถแžšแžŸแŸ’แžœแž™แŸแžแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš)

แž‡แŸ†แžšแžถแž”แžŸแžฝแžšแž˜แž“แžปแžŸแŸ’แžŸแž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แž“แžถ!

ะ’ แžŠแŸ†แž”แžผแž„ แž•แŸ’แž“แŸ‚แž€แžŠแŸ‚แž›แž™แžพแž„แž–แžทแž“แžทแžแŸ’แž™แž˜แžพแž›แž›แž˜แŸ’แžขแžทแžแžขแŸ†แž–แžธแžšแž”แŸ€แž”แž”แž„แŸ’แž€แžพแž แž“แžทแž„แž’แŸ’แžœแžพแž€แžถแžšแž‡แžถแž˜แžฝแž™ dApp (แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš) แž“แŸ…แž€แŸ’แž“แžปแž„ แžšแž›แž€แž‡แžทแŸ‡ IDE.

แžแŸ„แŸ‡โ€‹แžŸแžถแž€โ€‹แž›แŸ’แž”แž„โ€‹แžงแž”แž€แžšแžŽแŸโ€‹แžŠแŸ‚แž›โ€‹แž”แŸ‚แž€โ€‹แž…แŸแž‰โ€‹แž”แž“แŸ’แžแžทแž…โ€‹แžฅแžกแžผแžœโ€‹แž“แŸแŸ‡แŸ” แžงแž‘แžถแž แžšแžŽแŸ.

แžŠแŸ†แžŽแžถแž€แŸ‹แž€แžถแž›แž‘แžธ 3. แžŸแžถแž€แž›แŸ’แž”แž„แž‚แžŽแž“แžธ dApp

แžšแŸ€แž“แžŸแžšแžŸแŸแžšแž€แžทแž…แŸ’แž…แžŸแž“แŸ’แž™แžถแž†แŸ’แž›แžถแžแžœแŸƒ Waves แž“แŸ…แž›แžพ RIDE แž“แžทแž„ RIDE4DAPPS แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 2 (DAO - แžขแž„แŸ’แž‚แž€แžถแžšแžŸแŸ’แžœแž™แŸแžแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš)

แžแžพแž˜แžถแž“แž”แž‰แŸ’แž แžถแžขแŸ’แžœแžธแž€แžพแžแžกแžพแž„แž—แŸ’แž›แžถแž˜แŸ—แž…แŸ†แž–แŸ„แŸ‡แžขแŸ’แž“แž€แž‡แžถแž˜แžฝแž™แžขแžถแž›แžธแžŸ? แž…แž˜แž“แŸแž  แž‚แžŽแž“แžธ?
แž‘แžธแž˜แžฝแž™:
Boob แž“แžทแž„ Cooper แžขแžถแž…แž•แŸ’แž‰แžพแž”แŸ’แžšแžถแž€แŸ‹แžŠแŸ„แž™แž…แŸƒแžŠแž“แŸ’แž™แž‘แŸ…แž€แžถแž“แŸ‹แžขแžถแžŸแž™แžŠแŸ’แž‹แžถแž“ dApp แžŠแŸ„แž™แž”แŸ’แžšแžพแž‘แŸ€แž„แž‘แžถแžแŸ‹ แž€แžถแžšแž•แŸ’แž‘แŸแžšแž”แŸ’แžšแžถแž€แŸ‹ แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžš แž แžพแž™แžŠแžผแž…แŸ’แž“แŸแŸ‡แž“แžนแž„แž˜แžทแž“แžขแžถแž…แž…แžผแž›แž”แŸ’แžšแžพแž–แžฝแž€แžœแžถแž˜แž€แžœแžทแž‰แž”แžถแž“แž‘แŸแŸ”

แž‘แžธแž–แžธแžš:
แž™แžพแž„แž˜แžทแž“แžŠแžถแž€แŸ‹แž€แž˜แŸ’แžšแžทแž Alice แž€แŸ’แž“แžปแž„แž˜แž’แŸ’แž™แŸ„แž”แžถแž™แžŽแžถแž˜แžฝแž™แž–แžธแž€แžถแžšแžŠแž€แž”แŸ’แžšแžถแž€แŸ‹แžŠแŸ„แž™แž‚แŸ’แž˜แžถแž“แž€แžถแžšแž™แž›แŸ‹แž–แŸ’แžšแž˜แž–แžธ Boob แž“แžทแž„/แžฌ Cooper แž‘แŸแŸ” แž…แžถแž”แŸ‹แžแžถแŸ†แž„แž–แžธ, แž™แž€แž…แžทแžแŸ’แžแž‘แžปแž€แžŠแžถแž€แŸ‹แžŠแžพแž˜แŸ’แž”แžธแž•แŸ’แž‘แŸ€แž„แž•แŸ’แž‘แžถแžแŸ‹, แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแž‘แžถแŸ†แž„แžขแžŸแŸ‹แž–แžธ Alice แž“แžนแž„แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแŸ”

แžแŸ„แŸ‡แž‡แžฝแžŸแž‡แžปแž›แž‘แžธ 2 แžŠแŸ„แž™แž แžถแž˜แžขแžถแž›แžธแžŸ แž€แžถแžšแž•แŸ’แž‘แŸแžšแž”แŸ’แžšแžถแž€แŸ‹ แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแŸ” แž…แžผแžšโ€‹แž”แŸ’แžšแžพโ€‹แžŸแŸ’แž‚แŸ’แžšแžธแž”โ€‹แžŠแŸ‚แž›โ€‹แž”แžถแž“โ€‹แž€แŸ‚โ€‹แžแž˜แŸ’แžšแžผแžœแŸ–
แžšแŸ€แž“แžŸแžšแžŸแŸแžšแž€แžทแž…แŸ’แž…แžŸแž“แŸ’แž™แžถแž†แŸ’แž›แžถแžแžœแŸƒ Waves แž“แŸ…แž›แžพ RIDE แž“แžทแž„ RIDE4DAPPS แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 2 (DAO - แžขแž„แŸ’แž‚แž€แžถแžšแžŸแŸ’แžœแž™แŸแžแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš)
๏ฟผ
แž™แžพแž„แž€แŸ†แž–แžปแž„แž–แŸ’แž™แžถแž™แžถแž˜แžŠแž€แž€แžถแž€แŸ‹แž–แžธ dApp Alice แž“แžทแž„แž แžแŸ’แžแž›แŸแžแžถแžšแž”แžŸแŸ‹แž“แžถแž„แŸ” แž™แžพแž„แž‘แž‘แžฝแž›แž”แžถแž“แž€แŸ†แž แžปแžŸแž˜แžฝแž™แŸ–
แžšแŸ€แž“แžŸแžšแžŸแŸแžšแž€แžทแž…แŸ’แž…แžŸแž“แŸ’แž™แžถแž†แŸ’แž›แžถแžแžœแŸƒ Waves แž“แŸ…แž›แžพ RIDE แž“แžทแž„ RIDE4DAPPS แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 2 (DAO - แžขแž„แŸ’แž‚แž€แžถแžšแžŸแŸ’แžœแž™แŸแžแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš)

แž…แžผแžšแž™แžพแž„แž–แŸ’แž™แžถแž™แžถแž˜แžŠแž€แžŠแŸ„แž™แž€แžถแžšแžŠแž€แž”แŸ’แžšแžถแž€แŸ‹แŸ–

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

แžŸแŸ’แž‚แŸ’แžšแžธแž”แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž แžพแž™แž™แžพแž„แžšแž€แžƒแžพแž‰แž…แŸ†แžŽแžปแž…แž‘แžธ 2!

แžŠแŸ†แžŽแžถแž€แŸ‹แž€แžถแž›แž‘แžธ 4. แž”แž„แŸ’แž€แžพแž DAO แž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแž”แŸ„แŸ‡แž†แŸ’แž“แŸ„แž

แž‡แžถแžขแž€แžปแžŸแž› แž—แžถแžŸแžถ RIDE แž˜แžทแž“แž‘แžถแž“แŸ‹แž•แŸ’แžแž›แŸ‹แž›แž‘แŸ’แž’แž—แžถแž–แž€แŸ’แž“แžปแž„แž€แžถแžšแž’แŸ’แžœแžพแž€แžถแžšแž‡แžถแž˜แžฝแž™แž”แžŽแŸ’แžแžปแŸ† (แžœแž…แž“แžถแž“แžปแž€แŸ’แžšแž˜ แžœแž…แž“แžถแž“แžปแž€แŸ’แžšแž˜ แžขแŸ’แž“แž€แžŸแžšแžŸแŸแžšแžกแžพแž„แžœแžทแž‰ แžขแŸ’แž“แž€แž€แžถแžแŸ‹แž”แž“แŸ’แžแž™แŸ”แž›แŸ”)แŸ” แž‘แŸ„แŸ‡แž™แŸ‰แžถแž„แžŽแžถแž€แŸแžŠแŸ„แž™แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแžŽแžถแž˜แžฝแž™แž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแž”แŸ’แžšแž˜แžผแž›แž•แŸ’แž‘แŸ‡แž›แŸ’แžœแŸ‚แž„ แžแž˜แŸ’แž›แŸƒแž‚แŸ’แžšแžถแž”แŸ‹แž…แžปแž… แž™แžพแž„โ€‹แžขแžถแž…โ€‹แžšแž…แž“แžถโ€‹แž”แŸ’แžšแž–แŸแž“แŸ’แž’โ€‹แž˜แžฝแž™โ€‹แžŸแž˜แŸ’แžšแžถแž”แŸ‹โ€‹แž’แŸ’แžœแžพโ€‹แž€แžถแžšโ€‹แž‡แžถแž˜แžฝแž™โ€‹แžแŸ’แžŸแŸ‚โ€‹แžŸแŸ’แžšแž”โ€‹แžแžถแž˜โ€‹แž‚แŸ’แžšแžถแž”แŸ‹โ€‹แž…แžปแž…โ€‹แž“แžทแž„โ€‹แž€แžถแžšโ€‹แžŒแžทแž‚แŸ’แžšแžธแž”โ€‹แžšแž”แžŸแŸ‹โ€‹แžœแžถโ€‹แŸ”

แžแŸ’แžŸแŸ‚แžขแž€แŸ’แžŸแžšแž˜แžถแž“แž—แžถแž–แž„แžถแž™แžŸแŸ’แžšแžฝแž›แž€แŸ’แž“แžปแž„แž€แžถแžšแž—แŸ’แž‡แžถแž”แŸ‹แžแŸ’แžŸแŸ‚แžขแž€แŸ’แžŸแžšแžขแžถแž…แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ†แž”แŸ‚แž€แžŠแŸ„แž™แžŸแž“แŸ’แž‘แžŸแŸ’แžŸแž“แŸแŸ”
แž…แžผแžšแž™แžพแž„แž”แŸ’แžšแž˜แžผแž› แž“แžทแž„แž‰แŸ‚แž€แžแŸ’แžŸแŸ‚แžขแž€แŸ’แžŸแžšแž‡แžถแžงแž‘แžถแž แžšแžŽแŸแžŸแžถแž€แž›แŸ’แž”แž„ แž แžพแž™แž–แžทแž“แžทแžแŸ’แž™แž˜แžพแž›แžแžถแžแžพแžœแžถแž”แŸ‰แŸ‡แž–แžถแž›แŸ‹แžŠแž›แŸ‹แž›แž‘แŸ’แž’แž•แž›แž“แŸƒแž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแž™แŸ‰แžถแž„แžŠแžผแž…แž˜แŸ’แžแŸแž…แŸ”
แž™แžพแž„แž”แžถแž“แžŠแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แž›แžพแž€แžถแžšแž–แžทแžแžŠแŸ‚แž›แžแžถ Alice แž˜แžทแž“แžขแžถแž…แž…แžปแŸ‡แž แžแŸ’แžแž›แŸแžแžถแž›แžพแž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแž•แŸ’แž‘แŸแžšแž”แŸ’แžšแžถแž€แŸ‹แž”แžถแž“แž‘แŸ แžŠแŸ„แž™แžŸแžถแžšแžŸแž˜แžแŸ’แžแž—แžถแž–แž“แŸแŸ‡แžแŸ’แžšแžผแžœแž”แžถแž“แžšแžถแžšแžถแŸ†แž„แž“แŸ…แž€แŸ’แž“แžปแž„ @verifier แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแž”แŸ’แžšแž—แŸแž‘แž“แŸแŸ‡แŸ”

แž…แžผแžšแž™แžพแž„แžขแž“แžปแžœแžแŸ’แžแž‡แžถแž˜แžฝแž™แžแŸ’แžŸแŸ‚แžขแž€แŸ’แžŸแžš แž แžพแž™แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€แžŠแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แžœแžถแŸ”

แžแŸ’แžŸแŸ‚แžขแž€แŸ’แžŸแžšแž‡แžทแŸ‡

แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแžขแžถแž…แž’แŸ’แžœแžพแž‘แŸ…แž”แžถแž“แž˜แŸ’แžแž„แž‘แŸ€แž แž™แžพแž„แžŠแžนแž„แž–แžธแžšแž”แŸ€แž”แž’แŸ’แžœแžพแž€แžถแžšแž‡แžถแž˜แžฝแž™แžแŸ’แžŸแŸ‚แžขแž€แŸ’แžŸแžšแŸ”
แžšแŸ€แž“แžŸแžšแžŸแŸแžšแž€แžทแž…แŸ’แž…แžŸแž“แŸ’แž™แžถแž†แŸ’แž›แžถแžแžœแŸƒ Waves แž“แŸ…แž›แžพ RIDE แž“แžทแž„ RIDE4DAPPS แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 2 (DAO - แžขแž„แŸ’แž‚แž€แžถแžšแžŸแŸ’แžœแž™แŸแžแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš)

๏ฟผ
แžŸแžšแžปแž”แž˜แž€ แž™แžพแž„แž˜แžถแž“แžขแŸ’แžœแžธแž‚แŸ’แžšแž”แŸ‹แž™แŸ‰แžถแž„แžŠแŸ‚แž›แž…แžถแŸ†แž”แžถแž…แŸ‹แžŠแžพแž˜แŸ’แž”แžธแžŸแžšแžŸแŸแžšแžแž€แŸ’แž€แžœแžทแž‡แŸ’แž‡แžถแžŸแŸ’แž˜แžปแž‚แžŸแŸ’แž˜แžถแž‰ DAO dApp.

แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแž‘แžทแž“แŸ’แž“แž“แŸแž™

แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแž‘แžทแž“แŸ’แž“แž“แŸแž™แŸ–
โ€œแž‘แŸ†แž แŸ†แžขแžแžทแž”แžšแž˜แžถแžŸแž˜แŸ’แžšแžถแž”แŸ‹แžŸแŸ„แž‚แžบ 100 แžแžฝแžขแž€แŸ’แžŸแžš แž แžพแž™แžŸแŸ„แž˜แžฝแž™แžขแžถแž…แž˜แžถแž“แž…แŸ†แžŽแžปแž…แž€แžผแžŠแž™แžผแž“แžธแž€แžผแžŠแžแžถแž˜แžขแŸ†แž–แžพแž…แžทแžแŸ’แž แžšแžฝแž˜แž‘แžถแŸ†แž„แžŠแž€แžƒแŸ’แž›แžถ แž“แžทแž„แž“แžทแž˜แžทแžแŸ’แžแžŸแž‰แŸ’แž‰แžถแžŠแŸ‚แž›แž˜แžทแž“แžขแžถแž…แž”แŸ„แŸ‡แž–แžปแž˜แŸ’แž–แž”แžถแž“แž•แŸ’แžŸแŸแž„แž‘แŸ€แžแŸ” แžแž˜แŸ’แž›แŸƒแžแŸ’แžŸแŸ‚แžขแž€แŸ’แžŸแžšแž˜แžถแž“แžŠแŸ‚แž“แž€แŸ†แžŽแžแŸ‹ 32,768 แž”แŸƒ แž แžพแž™แž…แŸ†แž“แžฝแž“แžขแžแžทแž”แžšแž˜แžถแž“แŸƒแž’แžถแžแžปแžŠแŸ‚แž›แžขแžถแž…แž’แŸ’แžœแžพแž”แžถแž“แž“แŸ…แž€แŸ’แž“แžปแž„แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแž‘แžทแž“แŸ’แž“แž“แŸแž™แž‚แžบ 100 แŸ” แžŸแžšแžปแž”แž˜แž€ แž‘แŸ†แž แŸ†แžขแžแžทแž”แžšแž˜แžถแž“แŸƒแž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแž‘แžทแž“แŸ’แž“แž“แŸแž™แž‚แžบแž”แŸ’แžšแž แŸ‚แž› 140kb โ€” แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‡แžถแžฏแž€แžŸแžถแžšแž™แŸ„แž„ แžŸแŸ’แž‘แžพแžšแžแŸ‚แž”แŸ’แžšแžœแŸ‚แž„แž“แŸƒแž€แžถแžšแž›แŸแž„แžšแž”แžŸแŸ‹ Shakespeare 'Romeo and Juliet 'แŸ”

แž™แžพแž„แž”แž„แŸ’แž€แžพแž DAO แžŠแŸ„แž™แž˜แžถแž“แž›แž€แŸ’แžแžแžŽแŸ’แžŒแžŠแžผแž…แžแžถแž„แž€แŸ’แžšแŸ„แž˜แŸˆ
แžŠแžพแž˜แŸ’แž”แžธแžฑแŸ’แž™แž€แžถแžšแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แžขแžถแž‡แžธแžœแž€แž˜แŸ’แž˜แž‘แž‘แžฝแž›แž”แžถแž“แž˜แžผแž›แž“แžทแž’แžทแžŠแŸ„แž™แž€แžถแžšแž แŸ…แž‘แžผแžšแžŸแŸแž–แŸ’แž‘ getFunds() แž€แžถแžšแž‚แžถแŸ†แž‘แŸ’แžšแž–แžธแžขแŸ’แž“แž€แž…แžผแž›แžšแžฝแž˜แž™แŸ‰แžถแž„แž แŸ„แž…แžŽแžถแžŸแŸ‹ 2 แž“แžถแž€แŸ‹ - แžขแŸ’แž“แž€แžœแžทแž“แžทแž™แŸ„แž‚ DAO - แžแŸ’แžšแžผแžœแž”แžถแž“แž‘แžถแž˜แž‘แžถแžšแŸ” แžŠแž€แž”แŸ’แžšแžถแž€แŸ‹ แžœแžถแž“แžนแž„แžขแžถแž…แž’แŸ’แžœแžพแž‘แŸ…แž”แžถแž“แž™แŸ‰แžถแž„แž–แžทแžแž”แŸ’แžšแžถแž€แžŠแžŠแžผแž…แž…แŸ†แž“แžฝแž“แžŸแžšแžปแž”แžŠแŸ‚แž›แž”แžถแž“แž”แž„แŸ’แž แžถแž‰แž“แŸ…แž›แžพ แž€แžถแžšแž”แŸ„แŸ‡แž†แŸ’แž“แŸ„แž แž˜แŸ’แž…แžถแžŸแŸ‹ DAO แŸ”

แžแŸ„แŸ‡แž”แž„แŸ’แž€แžพแžแž€แžผแž“แžŸแŸ„ 3 แž”แŸ’แžšแž—แŸแž‘ แž แžพแž™แž”แž“แŸ’แžแŸ‚แž˜แžแž€แŸ’แž€แžœแžทแž‡แŸ’แž‡แžถแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž’แŸ’แžœแžพแž€แžถแžšแž‡แžถแž˜แžฝแž™แžŸแž˜แžแžปแž›แŸ’แž™แž€แŸ’แž“แžปแž„แž˜แžปแžแž„แžถแžšแžแŸ’แž˜แžธแž…แŸ†แž“แžฝแž“ 2 vote แž“แžทแž„ getFundsแŸ–
xxโ€ฆxx_แžขแžถแž™ = แžœแžทแž“แžทแž™แŸ„แž‚แžทแž“ แžŸแž˜แžแžปแž›แŸ’แž™แžŠแŸ‚แž›แž˜แžถแž“ (แž”แŸ„แŸ‡แž†แŸ’แž“แŸ„แž แžŠแžถแž€แŸ‹แž”แŸ’แžšแžถแž€แŸ‹ แžŠแž€แž”แŸ’แžšแžถแž€แŸ‹)
xxโ€ฆxx_sv = แž€แžถแžšแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜, แž…แŸ†แž“แžฝแž“แž“แŸƒแž€แžถแžšแž”แŸ„แŸ‡แž†แŸ’แž“แŸ„แž (แž”แŸ„แŸ‡แž†แŸ’แž“แŸ„แž แž‘แž‘แžฝแž›แž”แžถแž“แž˜แžผแž›แž“แžทแž’แžท)
xxโ€ฆxx_sf = แž€แžถแžšแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜, แž…แŸ†แž“แžฝแž“แž“แŸƒแž€แžถแžšแž”แŸ„แŸ‡แž†แŸ’แž“แŸ„แž (แž”แŸ„แŸ‡แž†แŸ’แž“แŸ„แž แž‘แž‘แžฝแž›แž”แžถแž“แž˜แžผแž›แž“แžทแž’แžท)
xxโ€ฆxx = แžขแžถแžŸแž™แžŠแŸ’แž‹แžถแž“แžŸแžถแž’แžถแžšแžŽแŸˆ (แŸฃแŸฅ แžแžฝแžขแž€แŸ’แžŸแžš)

แžŸแžผแž˜แž…แŸ†แžŽแžถแŸ†แžแžถแž“แŸ…แž€แŸ’แž“แžปแž„ Vote แž™แžพแž„แžแŸ’แžšแžผแžœแž’แŸ’แžœแžพแž”แž…แŸ’แž…แžปแž”แŸ’แž”แž“แŸ’แž“แž—แžถแž–แžœแžถแž›แž‡แžถแž…แŸ’แžšแžพแž“แž€แŸ’แž“แžปแž„แž–แŸแž›แžแŸ‚แž˜แžฝแž™แŸ–

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

WriteSet แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™แž™แžพแž„แž”แž„แŸ’แž€แžพแžแž€แŸ†แžŽแžแŸ‹แžแŸ’แžšแžถแž‡แžถแž…แŸ’แžšแžพแž“แž€แŸ’แž“แžปแž„แž–แŸแž›แžแŸ‚แž˜แžฝแž™แž€แŸ’แž“แžปแž„แž˜แžฝแž™ invokeScript แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžถแžšแŸ”

แž“แŸแŸ‡โ€‹แž‡แžถโ€‹แžขแŸ’แžœแžธโ€‹แžŠแŸ‚แž›โ€‹แžœแžถโ€‹แž˜แžพแž›โ€‹แž‘แŸ…โ€‹แžŠแžผแž…โ€‹แž‡แžถโ€‹แž“แŸ…โ€‹แž€แŸ’แž“แžปแž„โ€‹แž€แžถแžšโ€‹แž•แŸ’แž‘แžปแž€โ€‹แžแž˜แŸ’แž›แŸƒโ€‹แž‚แž“แŸ’แž›แžนแŸ‡โ€‹แž“แŸƒ DAO dApp แž”แž“แŸ’แž‘แžถแž”แŸ‹โ€‹แž–แžธ Bob แž“แžทแž„ Cooper แž”แžถแž“โ€‹แž”แŸ†แž–แŸแž‰โ€‹แž”แž“แŸ’แžแŸ‚แž˜ ia-แž”แŸ’แžšแžถแž€แŸ‹แž”แž‰แŸ’แž‰แžพแŸ–
แžšแŸ€แž“แžŸแžšแžŸแŸแžšแž€แžทแž…แŸ’แž…แžŸแž“แŸ’แž™แžถแž†แŸ’แž›แžถแžแžœแŸƒ Waves แž“แŸ…แž›แžพ RIDE แž“แžทแž„ RIDE4DAPPS แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 2 (DAO - แžขแž„แŸ’แž‚แž€แžถแžšแžŸแŸ’แžœแž™แŸแžแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš)

แž˜แžปแžแž„แžถแžšแžŠแžถแž€แŸ‹แž”แŸ’แžšแžถแž€แŸ‹แžšแž”แžŸแŸ‹แž™แžพแž„แž”แžถแž“แž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแž”แž“แŸ’แžแžทแž…แž”แž“แŸ’แžแžฝแž…แŸ–
แžšแŸ€แž“แžŸแžšแžŸแŸแžšแž€แžทแž…แŸ’แž…แžŸแž“แŸ’แž™แžถแž†แŸ’แž›แžถแžแžœแŸƒ Waves แž“แŸ…แž›แžพ RIDE แž“แžทแž„ RIDE4DAPPS แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 2 (DAO - แžขแž„แŸ’แž‚แž€แžถแžšแžŸแŸ’แžœแž™แŸแžแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš)

แžฅแžกแžผแžœแž“แŸแŸ‡แž˜แž€แžŠแž›แŸ‹แž–แŸแž›แžŠแŸแžŸแŸ†แžแžถแž“แŸ‹แž”แŸ†แž•แžปแžแž“แŸ…แž€แŸ’แž“แžปแž„แžŸแž€แž˜แŸ’แž˜แž—แžถแž–แžšแž”แžŸแŸ‹ DAO - แž”แŸ„แŸ‡แž†แŸ’แž“แŸ„แž แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แž˜แŸ’แžšแŸ„แž„แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž•แŸ’แžแž›แŸ‹แž แžทแžšแž‰แŸ’แž‰แž”แŸ’แž”แž‘แžถแž“แŸ”

Bob แž”แŸ„แŸ‡แž†แŸ’แž“แŸ„แžแžฑแŸ’แž™แž‚แž˜แŸ’แžšแŸ„แž„แžšแž›แž€ 500000 แžšแž”แžŸแŸ‹ NeliแŸ–

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

แžšแŸ€แž“แžŸแžšแžŸแŸแžšแž€แžทแž…แŸ’แž…แžŸแž“แŸ’แž™แžถแž†แŸ’แž›แžถแžแžœแŸƒ Waves แž“แŸ…แž›แžพ RIDE แž“แžทแž„ RIDE4DAPPS แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 2 (DAO - แžขแž„แŸ’แž‚แž€แžถแžšแžŸแŸ’แžœแž™แŸแžแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš)

แž“แŸ…แž€แŸ’แž“แžปแž„แžƒแŸ’แž›แžถแŸ†แž„แž‘แžทแž“แŸ’แž“แž“แŸแž™ แž™แžพแž„แžƒแžพแž‰แž’แžถแžแžปแž…แžถแŸ†แž”แžถแž…แŸ‹แž‘แžถแŸ†แž„แžขแžŸแŸ‹แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžขแžถแžŸแž™แžŠแŸ’แž‹แžถแž“แžšแž”แžŸแŸ‹ NeliแŸ–
แžšแŸ€แž“แžŸแžšแžŸแŸแžšแž€แžทแž…แŸ’แž…แžŸแž“แŸ’แž™แžถแž†แŸ’แž›แžถแžแžœแŸƒ Waves แž“แŸ…แž›แžพ RIDE แž“แžทแž„ RIDE4DAPPS แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 2 (DAO - แžขแž„แŸ’แž‚แž€แžถแžšแžŸแŸ’แžœแž™แŸแžแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš)
Cooper แž€แŸแž”แžถแž“แž”แŸ„แŸ‡แž†แŸ’แž“แŸ„แžแžฑแŸ’แž™แž‚แž˜แŸ’แžšแŸ„แž„ Neli แž•แž„แžŠแŸ‚แžšแŸ”
แžšแŸ€แž“แžŸแžšแžŸแŸแžšแž€แžทแž…แŸ’แž…แžŸแž“แŸ’แž™แžถแž†แŸ’แž›แžถแžแžœแŸƒ Waves แž“แŸ…แž›แžพ RIDE แž“แžทแž„ RIDE4DAPPS แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 2 (DAO - แžขแž„แŸ’แž‚แž€แžถแžšแžŸแŸ’แžœแž™แŸแžแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš)

แžแŸ„แŸ‡แž˜แžพแž›แž€แžผแžŠแž˜แžปแžแž„แžถแžš แž‘แž‘แžฝแž›แž”แžถแž“แž˜แžผแž›แž“แžทแž’แžท. Neli แžแŸ’แžšแžผแžœแžแŸ‚แž”แŸ’แžšแž˜แžผแž›แžŸแŸ†แžกแŸแž„แž™แŸ‰แžถแž„แžแžทแž… 2 แžŠแžพแž˜แŸ’แž”แžธแžขแžถแž…แžŠแž€แž˜แžผแž›แž“แžทแž’แžทแž–แžธ DAO แŸ”
แžšแŸ€แž“แžŸแžšแžŸแŸแžšแž€แžทแž…แŸ’แž…แžŸแž“แŸ’แž™แžถแž†แŸ’แž›แžถแžแžœแŸƒ Waves แž“แŸ…แž›แžพ RIDE แž“แžทแž„ RIDE4DAPPS แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 2 (DAO - แžขแž„แŸ’แž‚แž€แžถแžšแžŸแŸ’แžœแž™แŸแžแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš)

Neli แž“แžนแž„แžŠแž€แž–แžถแž€แŸ‹แž€แžŽแŸ’แžแžถแž›แž“แŸƒแž…แŸ†แž“แžฝแž“แž‘แžนแž€แž”แŸ’แžšแžถแž€แŸ‹แžŠแŸ‚แž›แž”แŸ’แžšแž‚แž›แŸ‹แžฑแŸ’แž™แž“แžถแž„แŸ–

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

แžšแŸ€แž“แžŸแžšแžŸแŸแžšแž€แžทแž…แŸ’แž…แžŸแž“แŸ’แž™แžถแž†แŸ’แž›แžถแžแžœแŸƒ Waves แž“แŸ…แž›แžพ RIDE แž“แžทแž„ RIDE4DAPPS แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 2 (DAO - แžขแž„แŸ’แž‚แž€แžถแžšแžŸแŸ’แžœแž™แŸแžแžœแžทแž˜แž‡แŸ’แžˆแž€แžถแžš)

แž“แžถแž„แž‡แŸ„แž‚แž‡แŸแž™ แž“แŸ„แŸ‡แž‚แžบ DAO แž’แŸ’แžœแžพแž€แžถแžš!

แž™แžพแž„แž”แžถแž“แž–แžทแž“แžทแžแŸ’แž™แž˜แžพแž›แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž“แŸƒแž€แžถแžšแž”แž„แŸ’แž€แžพแž DAO แž‡แžถแž—แžถแžŸแžถ แž‡แžทแŸ‡ 4DAPPS.
แž“แŸ…แž€แŸ’แž“แžปแž„แž•แŸ’แž“แŸ‚แž€แžแžถแž„แž€แŸ’แžšแŸ„แž˜ แž™แžพแž„แž“แžนแž„แž–แžทแž“แžทแžแŸ’แž™แž˜แžพแž›แžฑแŸ’แž™แž€แžถแž“แŸ‹แžแŸ‚แžŠแžทแžแžŠแž›แŸ‹แž›แžพแž€แžถแžšแž€แŸ‚แž”แŸ’แžšแŸ‚แž€แžผแžŠ แž“แžทแž„แž€แžถแžšแž’แŸ’แžœแžพแžแŸแžŸแŸ’แžแž€แžšแžŽแžธแŸ”

แž€แŸ†แžŽแŸ‚แž–แŸแž‰แž›แŸแž‰แž“แŸƒแž€แžผแžŠแž“แŸ…แž€แŸ’แž“แžปแž„ แžšแž›แž€แž‡แžทแŸ‡ 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

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹