НаучаванС ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Waves Π½Π° RIDE ΠΈ RIDE4DAPPS. Част 2 (DAO - Π”Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Π° организация)

НаучаванС ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Waves Π½Π° RIDE ΠΈ RIDE4DAPPS. Част 2 (DAO - Π”Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Π° организация)

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ Π½Π° всички!

Π’ ΠΏΡŠΡ€Π²ΠΎ част, Π½ΠΈΠ΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΊΠ°ΠΊ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ с dApp (Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅) Π² Waves RIDE IDE.

НСка сСга тСствамС ΠΌΠ°Π»ΠΊΠΎ Ρ€Π°Π·Π³Π»ΠΎΠ±Π΅Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π•Ρ‚Π°ΠΏ 3. ВСстванС Π½Π° dApp Π°ΠΊΠ°ΡƒΠ½Ρ‚Π°

НаучаванС ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Waves Π½Π° RIDE ΠΈ RIDE4DAPPS. Част 2 (DAO - Π”Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Π° организация)

Какви ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π²Π΅Π΄Π½Π°Π³Π° сС Π²Ρ‚ΡƒΡ€Π²Π°Ρ‚ към гласовСтС с Алис DAPP Π‘ΠΌΠ΅Ρ‚ΠΊΠ°?
На ΠΏΡŠΡ€Π²ΠΎ място:
Boob ΠΈ Cooper ΠΌΠΎΠ³Π°Ρ‚ случайно Π΄Π° изпратят срСдства Π½Π° адрСс Π½Π° dApp, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ няма Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ тях ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ.

На Π²Ρ‚ΠΎΡ€ΠΎ място:
НиС ΠΏΠΎ никакъв Π½Π°Ρ‡ΠΈΠ½ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°ΠΌΠ΅ Alice Π΄Π° Ρ‚Π΅Π³Π»ΠΈ срСдства Π±Π΅Π· ΡΡŠΠ³Π»Π°ΡΠΈΠ΅Ρ‚ΠΎ Π½Π° Boob ΠΈ/ΠΈΠ»ΠΈ Cooper. Въй ΠΊΠ°Ρ‚ΠΎ, ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π°, всички Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ Alice Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ изпълнСни.

НСка ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌ 2, ΠΊΠ°Ρ‚ΠΎ Π·Π°Π±Ρ€Π°Π½ΠΈΠΌ Alice ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ сдСлки. Π Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Ρ‚Π΅ коригирания скрипт:
НаучаванС ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° 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 всС ΠΎΡ‰Π΅ Π½Π΅ прСдоставя Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ (Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈ, Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈ, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ, Ρ€Π΅Π΄ΡƒΠΊΡ‚ΠΎΡ€ΠΈ ΠΈ Π΄Ρ€.). Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π·Π° всякакви ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²ΡŠΡ€Ρ…Ρƒ плоски ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ ΠΊΠ»ΡŽΡ‡-стойност ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°ΠΌΠ΅ систСма Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΈΠ·ΠΎΠ²Π΅, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ с ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠΈ тяхното Π΄Π΅ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π΅.

НизовСтС са ΠΌΠ½ΠΎΠ³ΠΎ лСсни Π·Π° конкатСнация, Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ ΠΎΡ‚ индСкси.
НСка ΡΡŠΠ±Π΅Ρ€Π΅ΠΌ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π½ΠΈΠ·Π° ΠΊΠ°Ρ‚ΠΎ тСстов случай ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ сС ΠΎΡ‚Ρ€Π°Π·ΠΈ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ транзакцията.
БпряхмС сС Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Алис Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° подпишС транзакцията Π·Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°Π·ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ бСшС Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π° Π² @verifier Π·Π° Ρ‚ΠΎΠ·ΠΈ Ρ‚ΠΈΠΏ транзакция.

НСка ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ с Π½ΠΈΠ·ΠΎΠ²Π΅ ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ Ρ‚ΠΎΠ²Π°.

RIDE Π‘Ρ‚Ρ€ΡƒΠ½ΠΈ

Вранзакцията ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΅ възмоТна, Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с Π½ΠΈΠ·ΠΎΠ²Π΅.
НаучаванС ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Waves Π½Π° RIDE ΠΈ RIDE4DAPPS. Част 2 (DAO - Π”Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Π° организация)

οΏΌ
ΠšΠ°Ρ‚ΠΎ цяло ΠΈΠΌΠ°ΠΌΠ΅ всичко Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° писанС Π½Π° слоТна Π»ΠΎΠ³ΠΈΠΊΠ° DAO dApp.

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ с Π΄Π°Π½Π½ΠΈ

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ с Π΄Π°Π½Π½ΠΈ:
β€žΠœΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΈΡΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΊΠ»ΡŽΡ‡ Π΅ 100 Π·Π½Π°ΠΊΠ° ΠΈ ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ Unicode ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΠΈ символи. БтойноститС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅ ΠΈΠΌΠ°Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ 32,768 100 Π±Π°ΠΉΡ‚Π° ΠΈ максималният Π±Ρ€ΠΎΠΉ възмоТни записи Π² транзакция с Π΄Π°Π½Π½ΠΈ Π΅ 140. ΠšΠ°Ρ‚ΠΎ цяло максималният Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° транзакция с Π΄Π°Π½Π½ΠΈ Π΅ ΠΎΠΊΠΎΠ»ΠΎ XNUMX kb β€” Π·Π° справка, ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄ΡŠΠ»ΠΆΠΈΠ½Π°Ρ‚Π° Π½Π° пиСсата Π½Π° ШСкспир β€žΠ ΠΎΠΌΠ΅ΠΎ ΠΈ Π–ΡƒΠ»ΠΈΠ΅Ρ‚Π°β€œ '.

НиС създавамС DAO със слСднитС условия:
Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΅Π΄ΠΈΠ½ ΡΡ‚Π°Ρ€Ρ‚ΡŠΠΏ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ финансиранС Ρ‡Ρ€Π΅Π· ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅ getFunds() Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π΅ ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ°Ρ‚Π° Π½Π° ΠΏΠΎΠ½Π΅ 2 участника - DAO инвСститори. Π’Π΅Π³Π»Π΅Π½Π΅ Ρ‰Π΅ бъдС възмоТно Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π°, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΅ сумата, посочСна Π½Π° гласуванС БобствСници Π½Π° DAO.

НСка Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ 3 Π²ΠΈΠ΄Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с баланси Π² 2 Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ vote ΠΈ getFunds:
хх…хх_ia = инвСститори, Π½Π°Π»ΠΈΡ‡Π΅Π½ баланс (гласуванС, Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚, Ρ‚Π΅Π³Π»Π΅Π½Π΅)
хх…хх_св = стартиращи ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π±Ρ€ΠΎΠΉ гласовС (гласуванС, getFunds)
хх…хх_sf = стартиращи ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π±Ρ€ΠΎΠΉ гласовС (гласуванС, getFunds)
xx…xx = общСствСн адрСс (35 Π·Π½Π°ΠΊΠ°)

Π—Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ Π² Vote, Ρ‡Π΅ трябва Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ няколко ΠΏΠΎΠ»Π΅Ρ‚Π° навСднъТ:

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

WriteSet Π½ΠΈ позволява Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ няколко записа навСднъТ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ invokeScript сдСлки.

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π·Π° ΠΊΠ»ΡŽΡ‡-стойност Π½Π° DAO dApp слСд ΠΏΠΎΠΏΡŠΠ»Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π‘ΠΎΠ± ΠΈ ΠšΡƒΠΏΡŠΡ€ ia- Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΈ:
НаучаванС ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Waves Π½Π° RIDE ΠΈ RIDE4DAPPS. Част 2 (DAO - Π”Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Π° организация)

ΠΠ°ΡˆΠ°Ρ‚Π° функция Π·Π° Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚ сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π»Π΅ΠΊΠΎ:
НаучаванС ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Waves Π½Π° RIDE ΠΈ RIDE4DAPPS. Част 2 (DAO - Π”Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Π° организация)

Π‘Π΅Π³Π° ΠΈΠ΄Π²Π° Π½Π°ΠΉ-ваТният ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² дСйността Π½Π° DAO - гласувайтС Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π·Π° финансиранС.

Π‘ΠΎΠ± гласува Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Neli Π½Π° 500000 XNUMX вълни:

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 - Π”Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Π° организация)
ΠšΡƒΠΏΡŠΡ€ ΡΡŠΡ‰ΠΎ гласува Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° НСли.
НаучаванС ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Waves Π½Π° RIDE ΠΈ RIDE4DAPPS. Част 2 (DAO - Π”Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Π° организация)

НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ функционалния ΠΊΠΎΠ΄ getFunds. НСли трябва Π΄Π° ΡΡŠΠ±Π΅Ρ€Π΅ ΠΏΠΎΠ½Π΅ 2 гласа, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ‚Π΅Π³Π»ΠΈ срСдства ΠΎΡ‚ DAO.
НаучаванС ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Waves Π½Π° RIDE ΠΈ RIDE4DAPPS. Част 2 (DAO - Π”Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Π° организация)

НСли Ρ‰Π΅ ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°Ρ‚Π° ΠΎΡ‚ ΠΏΠΎΠ²Π΅Ρ€Π΅Π½Π°Ρ‚Π° ΠΉ сума:

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

НаучаванС ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Waves Π½Π° RIDE ΠΈ RIDE4DAPPS. Част 2 (DAO - Π”Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Π° организация)

Вя успява, тоСст 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€