ืœืขืจื ืขืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื•ื•ืึทื•ื•ืขืก ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืื•ื™ืฃ RIDE ืื•ืŸ RIDE4DAPPS. ื˜ื™ื™ืœ 2 (DAO - ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืึทื•ื˜ืึธื ืึธืžืึธื•ืก ืึธืจื’ืึทื ื™ื–ืึทืฆื™ืข)

ืœืขืจื ืขืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื•ื•ืึทื•ื•ืขืก ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืื•ื™ืฃ RIDE ืื•ืŸ RIDE4DAPPS. ื˜ื™ื™ืœ 2 (DAO - ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืึทื•ื˜ืึธื ืึธืžืึธื•ืก ืึธืจื’ืึทื ื™ื–ืึทืฆื™ืข)

ื”ืขืœื ืึทืœืขืžืขืŸ!

ะ’ ืขืจืฉื˜ืขืจ ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขืงื•ืงื˜ ืื™ืŸ ื“ืขื˜ืึทืœ ื•ื•ื™ ืฆื• ืฉืึทืคึฟืŸ ืื•ืŸ ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ dApp (ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ) ืื™ืŸ Waves RIDE IDE.

ื–ืืœ ืก ืคึผืจื•ื‘ื™ืจืŸ ื“ื™ ื“ื™ืกืึทืกืขืžื‘ืึทืœื“ ืื™ื™ื ืขืจ ืึท ื‘ื™ืกืœ ืื™ืฆื˜ ื‘ื™ื™ึทืฉืคึผื™ืœ.

ื‘ื™ื ืข 3. ื˜ืขืกื˜ื™ื ื’ ื“ื™ ื“ืึทืคึผืคึผ ื—ืฉื‘ื•ืŸ

ืœืขืจื ืขืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื•ื•ืึทื•ื•ืขืก ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืื•ื™ืฃ RIDE ืื•ืŸ RIDE4DAPPS. ื˜ื™ื™ืœ 2 (DAO - ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืึทื•ื˜ืึธื ืึธืžืึธื•ืก ืึธืจื’ืึทื ื™ื–ืึทืฆื™ืข)

ื•ื•ืึธืก ืคึผืจืึธื‘ืœืขืžืก ืžื™ื“ ืฉืคึผืจื™ื ื’ืขืŸ ืื•ื™ืก ื‘ื™ื™ึท ืื™ืจ ืžื™ื˜ ืึทืœื™ืก? ื“ืึทืคึผ ืืงืื•ื ื˜?
ืขืจืฉื˜ืขืจ:
Boob ืื•ืŸ Cooper ืงืขืŸ ืึทืงืกืึทื“ืขื ืึทืœื™ ืฉื™ืงืŸ ื’ืขืœื˜ ืฆื• ื“ื™ dApp ืึทื“ืจืขืก ืžื™ื˜ ืจืขื’ื•ืœืขืจ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื˜ืจืึทื ื–ืึทืงืฉืึทื ื– ืื•ืŸ ืึทื–ื•ื™ ื•ื•ืขื˜ ื ื™ืฉื˜ ืงืขื ืขืŸ ืฆื• ืึทืงืกืขืก ื–ื™ื™ ืฆื•ืจื™ืง.

ืฆื•ื•ื™ื™ื˜ื ืก:
ืžื™ืจ ื‘ืึทื’ืจืขื ืขืฆืŸ ื ื™ืฉื˜ ืึทืœื™ืก ืื™ืŸ ืงื™ื™ืŸ ื•ื•ืขื’ ืคื•ืŸ ืฆื•ืจื™ืงืฆื™ืขืŸ ื’ืขืœื˜ ืึธืŸ ื“ื™ ื”ืึทืกืงืึธืžืข ืคื•ืŸ โ€‹โ€‹ื‘ืึธื‘ ืื•ืŸ / ืึธื“ืขืจ ืงื•ืคึผืขืจ. ื–ื™ื ื˜, ื‘ืึทืฆืึธืœืŸ ื•ืคืžืขืจืงื–ืึทืžืงื™ื™ึทื˜ ืฆื• ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ, ืึทืœืข ื˜ืจืึทื ื–ืึทืงืฉืึทื ื– ืคื•ืŸ ืึทืœื™ืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืขืงืกืึทืงื™ื•ื˜ืึทื“.

ื–ืืœ ืก ืคืึทืจืจื™ื›ื˜ืŸ 2 ื“ื•ืจืš ืคืึทืจื‘ืึธื˜ ืึทืœื™ืก ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื˜ืจืึทื ื–ืึทืงืฉืึทื ื–. ื–ืืœ ืก ืฆืขื•ื•ื™ืงืœืขืŸ ื“ื™ ืงืขืจืขืงื˜ืึทื“ ืฉืจื™ืคื˜:
ืœืขืจื ืขืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื•ื•ืึทื•ื•ืขืก ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืื•ื™ืฃ RIDE ืื•ืŸ RIDE4DAPPS. ื˜ื™ื™ืœ 2 (DAO - ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืึทื•ื˜ืึธื ืึธืžืึธื•ืก ืึธืจื’ืึทื ื™ื–ืึทืฆื™ืข)
๏ฟผ
ืžื™ืจ ื–ืขื ืขืŸ ื˜ืจื™ื™ื ื’ ืฆื• ืฆื•ืจื™ืงืฆื™ืขืŸ ืงืึธื™ื ืก ืคื•ืŸ ื“ืึทืคึผ ืึทืœื™ืก ืื•ืŸ ืื™ืจ ื›ืกื™ืžืข. ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ืึท ื˜ืขื•ืช:
ืœืขืจื ืขืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื•ื•ืึทื•ื•ืขืก ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืื•ื™ืฃ RIDE ืื•ืŸ RIDE4DAPPS. ื˜ื™ื™ืœ 2 (DAO - ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืึทื•ื˜ืึธื ืึธืžืึธื•ืก ืึธืจื’ืึทื ื™ื–ืึทืฆื™ืข)

ืœืึธืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืฆื•ืจื™ืงืฆื™ืขืŸ ื“ื•ืจืš ืฆื•ืจื™ืงืฆื™ืขืŸ:

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

ื“ืขืจ ืฉืจื™ืคื˜ ืึทืจื‘ืขื˜ ืื•ืŸ ืžื™ืจ ืคื™ื’ื™ืขืจื“ ื“ื™ 2 ืคื•ื ื˜!

ื‘ื™ื ืข 4. ืฉืึทืคึฟืŸ ืึท ื“ืึทืึธ ืžื™ื˜ ืึธืคึผืฉื˜ื™ืžื•ื ื’

ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, ื“ื™ RIDE ืฉืคึผืจืึทืš ื’ื™ื˜ ื ืึธืš ื ื™ืฉื˜ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ื–ืึทืžืœื•ื ื’ืขืŸ (ื•ื•ืขืจื˜ืขืจื‘ื•ืš ื“ื™ืงืฉืึทื ืขืจื™ื–, ื™ื˜ืขืจื™ื™ื˜ืขืจื–, ืจืขื“ื•ืกืขืจ, ืืื–"ื• ื•). ืึธื‘ืขืจ, ืคึฟืึทืจ ืงื™ื™ืŸ ืึทืคึผืขืจื™ื™ืฉืึทื ื– ืžื™ื˜ ืคืœืึทืš ื–ืึทืžืœื•ื ื’ืขืŸ ืฉืœื™ืกืœ-ื•ื•ืขืจื˜ ืžื™ืจ ืงืขื ืขืŸ ืคึผืœืึทืŸ ืึท ืกื™ืกื˜ืขื ืคึฟืึทืจ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืกื˜ืจื™ื ื’ืก, ืึทืงืึธืจื“ื™ื ื’ืœื™ ืžื™ื˜ ืฉืœื™ืกืœืขืŸ ืื•ืŸ ื–ื™ื™ืขืจ ื“ืขืงืจื™ืคึผื˜ื™ืึธืŸ.

ืกื˜ืจื™ื ื’ืก ื–ืขื ืขืŸ ื–ื™ื™ืขืจ ื’ืจื™ื ื’ ืฆื• ืงืึทื ืงืึทื˜ืึทื ื™ื™ื˜ ืกื˜ืจื™ื ื’ืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืืคื’ืขืฉื™ื™ื“ื˜ ื“ื•ืจืš ื™ื ื“ืขืงืกื™ื–.
ื–ืืœ ืก ืงืœื™ื™ึทื‘ืŸ ืื•ืŸ ืคึผืึทืจืก ืึท ืฉื˜ืจื™ืงืœ ื•ื•ื™ ืึท ืคึผืจืึธื‘ืข ื‘ื™ื™ืฉืคึผื™ืœ ืื•ืŸ ื˜ืฉืขืง ื•ื•ื™ ื“ืึธืก ืึทืคืขืงืฅ ื“ื™ ืึทื•ื˜ืงืึทื ืคื•ืŸ ื“ื™ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ.
ืžื™ืจ ื’ืขื–ืขืฆื˜ ืื•ื™ืฃ ื“ื™ ืคืึทืงื˜ ืึทื– ืึทืœื™ืก ืงืขืŸ ื ื™ืฉื˜ ืฆื™ื™ื›ืŸ ื“ื™ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ, ื•ื•ื™ื™ึทืœ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืื™ื– ืืคื’ืขืฉื˜ืขืœื˜ ืื™ืŸ @verifier ืคึฟืึทืจ ื“ืขื ื˜ื™ืคึผ ืคื•ืŸ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ.

ื–ืืœ ืก ืคื™ืจ ืžื™ื˜ ืกื˜ืจื™ื ื’ืก ืื•ืŸ ื“ืขืžืึธืœื˜ ื‘ืึทืฉืœื™ืกืŸ ื“ืขื.

ืคืึธืจ ืกื˜ืจื™ื ื’ืก

ื“ื™ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืื™ื– ืžืขื’ืœืขืš ื•ื•ื™ื“ืขืจ, ืžื™ืจ ื•ื•ื™ืกืŸ ื•ื•ื™ ืฆื• ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ืกื˜ืจื™ื ื’ืก.
ืœืขืจื ืขืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื•ื•ืึทื•ื•ืขืก ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืื•ื™ืฃ RIDE ืื•ืŸ RIDE4DAPPS. ื˜ื™ื™ืœ 2 (DAO - ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืึทื•ื˜ืึธื ืึธืžืึธื•ืก ืึธืจื’ืึทื ื™ื–ืึทืฆื™ืข)

๏ฟผ
ืื™ืŸ ื’ืึทื ืฅ, ืžื™ืจ ื”ืึธื‘ืŸ ืึทืœืฅ ื ื™ื™ื˜ื™ืง ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืงืึธืžืคึผืœืขืงืก ืœืึธื’ื™ืง DAO dApp.

ื“ืึทื˜ืึท ื˜ืจืึทื ื–ืึทืงืฉืึทื ื–

ื“ืึทื˜ืึท ื˜ืจืึทื ื–ืึทืงืฉืึทื ื–:
"ื“ื™ ืžืึทืงืกื™ืžื•ื ื’ืจื™ื™ืก ืคึฟืึทืจ ืึท ืฉืœื™ืกืœ ืื™ื– 100 ืื•ืชื™ื•ืช, ืื•ืŸ ืึท ืฉืœื™ืกืœ ืงืขื ืขืŸ ืึทื ื˜ื”ืึทืœื˜ืŸ ืึทืจื‘ื™ื˜ืจืึทืจื™ืฉ ืื•ื ื™ืงืึธื“ ืงืึธื“, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืกืคึผื™ื™ืกืึทื– ืื•ืŸ ืื ื“ืขืจืข ื ื™ื˜-ืคึผืจื™ื ื˜ืึทื‘ืึทืœ ืกื™ืžื‘ืึธืœืก. ืฉื˜ืจื™ืงืœ ื•ื•ืึทืœื•ืขืก ื”ืึธื‘ืŸ ืึท ืฉื™ืขื•ืจ ืคื•ืŸ 32,768 ื‘ื™ื˜ืขืก ืื•ืŸ ื“ื™ ืžืึทืงืกื™ืžื•ื ื ื•ืžืขืจ ืคื•ืŸ ืžืขื’ืœืขืš ืื™ื™ื ืกืŸ ืื™ืŸ ื“ืึทื˜ืŸ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืื™ื– 100. ืงื•ื™ืœืขืœื“ื™ืง, ื“ื™ ืžืึทืงืกื™ืžื•ื ื’ืจื™ื™ืก ืคื•ืŸ ืึท ื“ืึทื˜ืŸ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืื™ื– ืึทืจื•ื 140 ืงื‘ - ืคึฟืึทืจ ื“ืขืจืžืึธื ืขืŸ, ื›ึผืžืขื˜ ืคึผื•ื ืงื˜ ื“ื™ ืœืขื ื’ ืคื•ืŸ ืฉื™ื™ืงืกืคึผื™ืจ ืก ืฉืคึผื™ืœ 'ืจืึธืžืขืึธ ืื•ืŸ ื“ื–ืฉื•ืœื™ืขื˜. '.

ืžื™ืจ ืžืึทื›ืŸ ืึท DAO ืžื™ื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ื˜ื ืึธื™ื:
ืื™ืŸ ืกื“ืจ ืคึฟืึทืจ ืึท ืกื˜ืึทืจื˜ืึทืคึผ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืคืึทื ื“ื™ื ื’ ื“ื•ืจืš ืจื•ืคืŸ getFunds() ื“ื™ ืฉื˜ื™ืฆืŸ ืคื•ืŸ ื‘ื™ื™ึท ืžื™ื ื“ืกื˜ืขืจ 2 ืคึผืึทืจื˜ื™ืกืึทืคึผืึทื ืฅ - ื“ืึทืึธ ื™ื ื•ื•ืขืกื˜ืขืจื– - ืื™ื– ืคืืจืœืื ื’ื˜. ืฆื•ืจื™ืงืฆื™ืขืŸ ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืžืขื’ืœืขืš ืคึผื•ื ืงื˜ ื•ื•ื™ ืคื™ืœ ื•ื•ื™ ื“ื™ ื’ืึทื ืฅ ืื ื’ืขื•ื•ื™ื–ืŸ ืื•ื™ืฃ ืึธืคึผืฉื˜ื™ืžื•ื ื’ ื“ืึทืึธ ืึธื•ื ืขืจื–.

ืœืึธืžื™ืจ ืžืึทื›ืŸ 3 ื˜ื™ื™ืคึผืก ืคื•ืŸ ืฉืœื™ืกืœืขืŸ ืื•ืŸ ืœื™ื™ื’ืŸ ืœืึธื’ื™ืง ืคึฟืึทืจ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื‘ืึทืœืึทื ืกืขืก ืื™ืŸ 2 ื ื™ื™ึท ืคืึทื ื’ืงืฉืึทื ื– ืฉื˜ื™ืžืขืŸ ืื•ืŸ ื’ืขืคืึทื ื“ื–:
ืงืงืกื ื•ืžืงืกโ€ฆืงืกื ื•ืžืงืก_ืื™ืš ื = ื™ื ื•ื•ืขืกื˜ืขืจื–, ื‘ื ื™ืžืฆื ื•ื•ืึธื’ (ืฉื˜ื™ืžืขืŸ, ืึทื•ื•ืขืงืœื™ื™ื’ืŸ, ื•ื•ื™ื“ื“ืจืึธืึทืœ)
ืงืงืกื ื•ืžืงืกโ€ฆืงืกื ื•ืžืงืก_sv = ืกื˜ืึทืจื˜ืึทืคึผืก, ื ื•ืžืขืจ ืคื•ืŸ ื•ื•ืึธื•ืฅ (ืฉื˜ื™ืžืขืŸ, getFunds)
ืงืงืกื ื•ืžืงืกโ€ฆืงืกื ื•ืžืงืก_sf = ืกื˜ืึทืจื˜ืึทืคึผืก, ื ื•ืžืขืจ ืคื•ืŸ ื•ื•ืึธื•ืฅ (ืฉื˜ื™ืžืขืŸ, getFunds)
xxโ€ฆxx = ืขืคื ื˜ืœืขืš ืึทื“ืจืขืก (35 ืื•ืชื™ื•ืช)

ื‘ื™ื˜ืข ื˜ืึธืŸ ืึทื– ืื™ืŸ ืฉื˜ื™ืžืขืŸ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืขื˜ืœืขื›ืข ืคืขืœื“ืขืจ ืื™ืŸ ืึทืžืึธืœ:

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

WriteSet ืึทืœืึทื•ื– ืื•ื ื“ื– ืฆื• ืžืึทื›ืŸ ืขื˜ืœืขื›ืข ืจืขืงืึธืจื“ืก ืื™ืŸ ืื™ื™ืŸ ื™ื ื•ื•ืึธื•ืงืขืกืงืจื™ืคึผื˜ ื˜ืจืึทื ื–ืึทืงืฉืึทื ื–.

ื“ืึธืก ืื™ื– ื•ื•ื™ ืขืก ืงื•ืงื˜ ื•ื•ื™ ืื™ืŸ ื“ื™ ืฉืœื™ืกืœ-ื•ื•ืขืจื˜ ืกื˜ืึธืจื™ื“ื–ืฉ ืคื•ืŸ ื“ื™ DAO dApp, ื ืึธืš ื‘ืึธื‘ ืื•ืŸ ืงื•ืคึผืขืจ ืจื™ืคึผืœืขื ื™ืฉื˜ ia- ืึทื•ื•ืขืงืœื™ื™ื’ืŸ:
ืœืขืจื ืขืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื•ื•ืึทื•ื•ืขืก ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืื•ื™ืฃ RIDE ืื•ืŸ RIDE4DAPPS. ื˜ื™ื™ืœ 2 (DAO - ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืึทื•ื˜ืึธื ืึธืžืึธื•ืก ืึธืจื’ืึทื ื™ื–ืึทืฆื™ืข)

ืื•ื ื“ื–ืขืจ ืึทื•ื•ืขืงืœื™ื™ื’ืŸ ืคื•ื ืงืฆื™ืข ื”ืื˜ ื’ืขื‘ื™ื˜ืŸ ืึท ื‘ื™ืกืœ:
ืœืขืจื ืขืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื•ื•ืึทื•ื•ืขืก ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืื•ื™ืฃ RIDE ืื•ืŸ RIDE4DAPPS. ื˜ื™ื™ืœ 2 (DAO - ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืึทื•ื˜ืึธื ืึธืžืึธื•ืก ืึธืจื’ืึทื ื™ื–ืึทืฆื™ืข)

ืื™ืฆื˜ ืงื•ืžื˜ ื“ื™ ืžืขืจืกื˜ ื•ื•ื™ื›ื˜ื™ืง ืžืึธืžืขื ื˜ ืื™ืŸ ื“ื™ ืึทืงื˜ื™ื•ื•ื™ื˜ืขื˜ืŸ ืคื•ืŸ ื“ื™ DAO - ืฉื˜ื™ืžืขืŸ ืคึฟืึทืจ ืคึผืจืึทื“ื–ืฉืขืงืก ืฆื• ื–ื™ื™ืŸ ืคื™ื ืึทื ืกื˜.

ื‘ืึธื‘ ืฉื˜ื™ืžืขืŸ ืคึฟืึทืจ Neli ืก 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 - ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืึทื•ื˜ืึธื ืึธืžืึธื•ืก ืึธืจื’ืึทื ื™ื–ืึทืฆื™ืข)

ืื™ืŸ ื“ื™ ื“ืึทื˜ืŸ ืงืจืึธื ืžื™ืจ ื–ืขืŸ ืึทืœืข ื“ื™ ื ื™ื™ื˜ื™ืง ืื™ื™ื ืกืŸ ืคึฟืึทืจ Neli ืก ืึทื“ืจืขืก:
ืœืขืจื ืขืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื•ื•ืึทื•ื•ืขืก ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืื•ื™ืฃ RIDE ืื•ืŸ RIDE4DAPPS. ื˜ื™ื™ืœ 2 (DAO - ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืึทื•ื˜ืึธื ืึธืžืึธื•ืก ืึธืจื’ืึทื ื™ื–ืึทืฆื™ืข)
ืงื•ืคืขืจ ื”ืื˜ ืื•ื™ืš ื’ืขืฉื˜ื™ืžื˜ ืคืืจ ื“ืขื ื ืขืœื™ ืคืจืื™ืขืงื˜.
ืœืขืจื ืขืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื•ื•ืึทื•ื•ืขืก ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืื•ื™ืฃ RIDE ืื•ืŸ RIDE4DAPPS. ื˜ื™ื™ืœ 2 (DAO - ื“ื™ืกืขื ื˜ืจืึทืœื™ื™ื–ื“ ืึทื•ื˜ืึธื ืึธืžืึธื•ืก ืึธืจื’ืึทื ื™ื–ืึทืฆื™ืข)

ื–ืืœ ืก ื ืขืžืขืŸ ืึท ืงื•ืง ืื™ืŸ ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืงืึธื“ getFunds. ื ืขืœื™ ืžื•ื–ืŸ ืงืœื™ื™ึทื‘ืŸ ืึท ืžื™ื ื™ืžื•ื ืคื•ืŸ 2 ื•ื•ืึธื•ืฅ ืฆื• ืงืขื ืขืŸ ืฆื• ืฆื•ืจื™ืงืฆื™ืขืŸ ื’ืขืœื˜ ืคื•ืŸ ื“ื™ DAO.
ืœืขืจื ืขืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื•ื•ืึทื•ื•ืขืก ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืื•ื™ืฃ 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.
ืื™ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืคึผืึทืจืฅ ืžื™ืจ ื•ื•ืขืœืŸ ื ืขืžืขืŸ ืึท ื ืขืขื ื˜ืขืจ ืงื•ืง ืื™ืŸ ืงืึธื“ ืจืขืคืึทืงื˜ืึธืจื™ื ื’ ืื•ืŸ ืคืึทืœ ื˜ืขืกื˜ื™ื ื’.

ื’ืึทื ืฅ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืงืึธื“ ืื™ืŸ Waves RIDE 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
Waves RIDE IDE
ืžืขืœื“ืŸ ืคื•ืŸ ื“ื™ ืฉืขื ืงืขืŸ ืคึผืจืึธื’ืจืึทื

ืžืงื•ืจ: www.habr.com

ืงื•ื™ืคืŸ ืคืึทืจืœืึธื–ืœืขืš ื”ืึธืกื˜ื™ื ื’ ืคึฟืึทืจ ื–ื™ื™ื˜ืœืขืš ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก ๐Ÿ”ฅ ืงื•ื™ืคื˜ ืคืึทืจืœืขืกืœืขื›ืข ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ื”ืึธืกื˜ื™ื ื’ ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก | ProHoster