เจนเฉเจฒเฉ เจนเจฐ เจเฉเจ!
ะ
เจเจฒเฉ เจนเฉเจฃ เจฅเฉเฉเจพ เจเจฟเจนเจพ เจกเจฟเจธเจธเฉเจเจฌเจฒ เจฆเฉ เจเจพเจเจ เจเจฐเฉเจ
เจชเฉเจพเจ 3. dApp เจเจพเจคเฉ เจฆเฉ เจเจพเจเจ เจเจฐเจจเจพ
เจเจฟเจนเฉเฉเจเจ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจคเฉเจฐเฉฐเจค เจเจฒเจฟเจธ เจฆเฉ เจจเจพเจฒ เจเจตเจพเจเจผเจพเจ เจตเฉฑเจฒ เจญเฉฑเจเจฆเฉเจเจ เจนเจจ dApp เจเจพเจคเจพ?
เจชเจนเจฟเจฒเจพ:
Boob เจ เจคเฉ Cooper เจเจฒเจคเฉ เจจเจพเจฒ เจเฉฑเจ เจธเจงเจพเจฐเจจ เจตเจฐเจคเจฆเฉ เจนเฉเจ เจเฉฑเจ dApp เจชเจคเฉ 'เจคเฉ เจซเฉฐเจก เจญเฉเจ เจธเจเจฆเฉ เจนเจจ เจเฉเจฐเจพเจเจธเจซเจฐ เจฒเฉเจฃ-เจฆเฉเจฃ เจ เจคเฉ เจเจธ เจคเจฐเฉเจนเจพเจ เจเจนเจจเจพเจ เจจเฉเฉฐ เจตเจพเจชเจธ เจเจเจธเฉเจธ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจจเจนเฉเจ เจนเฉเจฃเจเฉเฅคเจฆเฉเจเจพ:
เจ เจธเฉเจ เจเจฟเจธเฉ เจตเฉ เจคเจฐเฉเจนเจพเจ เจเจฒเจฟเจธ เจจเฉเฉฐ เจฌเฉเจฌ เจ เจคเฉ/เจเจพเจ เจเฉเจชเจฐ เจฆเฉ เจธเจนเจฟเจฎเจคเฉ เจคเฉเจ เจฌเจฟเจจเจพเจ เจซเฉฐเจก เจเจขเจตเจพเจเจฃ เจคเฉเจ เจฐเฉเจเจฆเฉ เจจเจนเฉเจ เจนเจพเจเฅค เจเจฟเจเจเจเจฟ, เจคเจธเจฆเฉเจ เจเจฐเจจ เจตเฉฑเจฒ เจงเจฟเจเจจ เจฆเจฟเจ, เจเจฒเจฟเจธ เจคเฉเจ เจธเจพเจฐเฉ เจฒเฉเจฃ-เจฆเฉเจฃ เจเฉเจคเฉ เจเจพเจฃเจเฉเฅค
เจเจ เจเจฒเจฟเจธ 'เจคเฉ เจชเจพเจฌเฉฐเจฆเฉ เจฒเจเจพ เจเฉ 2 เจจเฉเฉฐ เจ เฉเจ เจเจฐเฉเจ เจเฉเจฐเจพเจเจธเจซเจฐ เจฒเฉเจฃ-เจฆเฉเจฃ เจธเจนเฉ เจเฉเจคเฉ เจธเจเฉเจฐเจฟเจชเจ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเฉ:
๏ฟผ
เจ
เจธเฉเจ dApp เจเจฒเจฟเจธ เจ
เจคเฉ เจเจธเจฆเฉ เจฆเจธเจคเจเจค เจจเจพเจฒ เจธเจฟเฉฑเจเฉ เจตเจพเจชเจธ เจฒเฉเจฃ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐ เจฐเจนเฉ เจนเจพเจเฅค เจธเจพเจจเฉเฉฐ เจเฉฑเจ เจเจฒเจคเฉ เจฎเจฟเจฒเจฆเฉ เจนเฉ:
เจเจขเจตเจพเจเจฃ เจฆเฉเจเจฐเจพ เจตเจพเจชเจธ เจฒเฉเจฃ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเฉ:
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"withdraw",args:[{type:"integer", value: 1000000}]}, payment: []}))
เจธเจเฉเจฐเจฟเจชเจ เจเฉฐเจฎ เจเจฐเจฆเฉ เจนเฉ เจ เจคเฉ เจ เจธเฉเจ เจฆเฉเจเจพ เจฌเจฟเฉฐเจฆเฉ เจฒเฉฑเจญ เจฒเจฟเจ เจนเฉ!
เจชเฉเจพเจ 4. เจตเฉเจเจฟเฉฐเจ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ DAO เจฌเจฃเจพเจ
เจฌเจฆเจเจฟเจธเจฎเจคเฉ เจจเจพเจฒ, เจฐเจพเจเจก เจญเจพเจธเจผเจพ เจ เจเฉ เจตเฉ เจธเฉฐเจเฉเจฐเจนเจฟ (เจเฉเจธเจผเจพเจ, เจธเจผเจฌเจฆเจเฉเจธเจผ, เจฆเฉเจนเจฐเจพเจ, เจฐเฉเจกเจฟเจเจธเจฐ, เจเจฆเจฟ) เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฆเฉ เจฏเฉเจเจคเจพ เจชเฉเจฐเจฆเจพเจจ เจจเจนเฉเจ เจเจฐเจฆเฉ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจซเจฒเฉเจ เจเจฒเฉเจเจธเจผเจจ 'เจคเฉ เจเจฟเจธเฉ เจตเฉ เจเจพเจฐเจตเจพเจ เจฒเจ เจเฉเฉฐเจเฉ-เจฎเฉเฉฑเจฒ เจ เจธเฉเจ เจเฉเจฐเจฎเจตเจพเจฐ เจเฉเฉฐเจเฉเจเจ เจ เจคเฉ เจเจนเจจเจพเจ เจฆเฉ เจกเฉเจเฉเจฐเจฟเจชเจธเจผเจจ เจฆเฉ เจจเจพเจฒ, เจธเจเจฐเจฟเฉฐเจเจพเจ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจธเจฟเจธเจเจฎ เจคเจฟเจเจฐ เจเจฐ เจธเจเจฆเฉ เจนเจพเจเฅค
เจธเจเฉเจฐเจฟเฉฐเจเจธ เจจเฉเฉฐ เจเฉเฉเจจเจพ เจฌเจนเฉเจค เจเจธเจพเจจ เจนเฉ, เจธเจคเจฐ เจจเฉเฉฐ เจธเฉเจเจเจพเจเจ เจฆเฉเจเจฐเจพ เจตเฉฑเจ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค
เจเจ เจเฉฑเจ เจเฉเจธเจ เจเฉเจธ เจตเจเฉเจ เจธเจคเจฐ เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจ
เจคเฉ เจชเจพเจฐเจธ เจเจฐเฉเจ เจ
เจคเฉ เจเจพเจเจ เจเจฐเฉเจ เจเจฟ เจเจน เจฒเฉเจฃ-เจฆเฉเจฃ เจฆเฉ เจจเจคเฉเจเฉ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจชเฉเจฐเจญเจพเจตเจค เจเจฐเฉเจเจพเฅค
เจ
เจธเฉเจ เจเจธ เจคเฉฑเจฅ 'เจคเฉ เจธเฉเจเจฒ เจนเฉ เจเจ เจเจฟ เจเจฒเจฟเจธ เจเฉเจฐเจพเจเจธเจซเจฐ เจเฉเจฐเจพเจเจเฉเจเจธเจผเจจ 'เจคเฉ เจฆเจธเจคเจเจค เจจเจนเฉเจ เจเจฐ เจธเจเจฆเฉ เจธเฉ, เจเจฟเจเจเจเจฟ เจเจธ เจเจฟเจธเจฎ เจฆเฉ เจฒเฉเจฃ-เจฆเฉเจฃ เจฒเจ @verifier เจตเจฟเฉฑเจ เจเจธ เจธเฉฐเจญเจพเจตเจจเจพ เจจเฉเฉฐ เจฌเจฒเฉเจ เจเฉเจคเจพ เจเจฟเจ เจธเฉเฅค
เจเจ เจธเจคเจฐ เจจเจพเจฒ เจ เจญเจฟเจเจธ เจเจฐเฉเจ เจ เจคเฉ เจซเจฟเจฐ เจเจธเจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเฉเจเฅค
เจฐเจพเจเจก เจธเจคเจฐ
เจเฉเจฐเจพเจเจเฉเจเจธเจผเจจ เจฆเฉเจฌเจพเจฐเจพ เจธเฉฐเจญเจต เจนเฉ, เจ
เจธเฉเจ เจเจพเจฃเจฆเฉ เจนเจพเจ เจเจฟ เจธเจคเจฐ เจจเจพเจฒ เจเจฟเจตเฉเจ เจเฉฐเจฎ เจเจฐเจจเจพ เจนเฉ.
๏ฟผ
เจเฉเฉฑเจฒ เจฎเจฟเจฒเจพ เจเฉ, เจธเจพเจกเฉ เจเฉเจฒ เจเจน เจธเจญ เจเฉเจ เจนเฉ เจเจฟเจธเจฆเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจคเจฐเจ เจฒเจฟเจเจฃ เจฒเจ เจฒเฉเฉ เจนเฉ 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- เจกเจฟเจชเจพเจเจผเจฟเจ:
เจธเจพเจกเจพ เจกเจฟเจชเจพเจเจผเจฟเจ เจซเฉฐเจเจธเจผเจจ เจฅเฉเฉเฉเจนเจพ เจฌเจฆเจฒ เจเจฟเจ เจนเฉ:
เจนเฉเจฃ DAO เจฆเฉเจเจ เจเจคเฉเจตเจฟเจงเฉเจเจ เจตเจฟเฉฑเจ เจธเจญ เจคเฉเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจชเจฒ เจ เจเจฟเจ เจนเฉ - เจตเฉเจ เจซเฉฐเจกเจฟเฉฐเจ เจฒเจ เจชเฉเจฐเฉเจเฉเจเจเจพเจ เจฒเจ.
เจฌเฉเจฌ เจจเฉ 500000 เจตเฉเจตเจฒเฉเจเจธ 'เจคเฉ เจจเฉเจฒเฉ เจชเฉเจฐเฉเจเฉเจเจ เจฒเจ เจตเฉเจ เจฆเจฟเฉฑเจคเฉ:
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"vote",args:[{type:"integer", value: 500000}, {type:"string", value: "3MrXEKJr9nDLNyVZ1d12Mq4jjeUYwxNjMsH"}]}, payment: []}))
เจกเฉเจเจพ เจธเจเฉเจฐ เจตเจฟเฉฑเจ, เจ
เจธเฉเจ เจจเฉเจฒเฉ เจชเจคเฉ เจฒเจ เจธเจพเจฐเฉเจเจ เจเจผเจฐเฉเจฐเฉ เจเจเจเจฐเฉเจเจ เจตเฉเจเจฆเฉ เจนเจพเจ:
เจเฉเจชเจฐ เจจเฉ เจจเฉเจฒเฉ เจชเฉเจฐเฉเจเฉเจเจ เจฒเจ เจตเฉ เจตเฉเจ เจฆเจฟเฉฑเจคเฉเฅค
เจเจ เจซเฉฐเจเจธเจผเจจ เจเฉเจก 'เจคเฉ เจเฉฑเจ เจจเจเจผเจฐ เจฎเจพเจฐเฉเจ เจซเฉฐเจก เจชเฉเจฐเจพเจชเจค เจเจฐเฉ. เจจเฉเจฒเฉ เจจเฉเฉฐ DAO เจคเฉเจ เจซเฉฐเจก เจเจขเจตเจพเจเจฃ เจฆเฉ เจฏเฉเจ เจนเฉเจฃ เจฒเจ เจเฉฑเจเฉ-เจเฉฑเจ 2 เจตเฉเจเจพเจ เจเจเฉฑเจ เฉเจเจ เจเจฐเจจเฉเจเจ เจเจพเจนเฉเจฆเฉเจเจ เจนเจจเฅค
เจจเฉเจฒเฉ เจเจธ เจจเฉเฉฐ เจธเฉเจเจชเฉ เจเจ เจ เฉฑเจงเฉ เจฐเจเจฎ เจตเจพเจชเจธ เจฒเฉเจฃ เจเจพ เจฐเจนเฉ เจนเฉ:
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"getFunds",args:[{type:"integer", value: 500000}]}, payment: []}))
เจเจน เจธเจซเจฒ เจนเฉเฉฐเจฆเฉ เจนเฉ, เจฏเจพเจจเฉ เจกเฉเจเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ!
เจ
เจธเฉเจ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจ DAO เจฌเจฃเจพเจเจฃ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเฉ เจธเจฎเฉเจเจฟเจ เจเฉเจคเฉ RIDE4DAPPS.
เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจญเจพเจเจพเจ เจตเจฟเฉฑเจ, เจ
เจธเฉเจ เจเฉเจก เจฐเฉเจซเฉเจเจเจฐเจฟเฉฐเจ เจ
เจคเฉ เจเฉเจธ เจเฉเจธเจเจฟเฉฐเจ 'เจคเฉ เจกเฉเฉฐเจเจพเจ เจจเจพเจฒ เจตเจฟเจเจพเจฐ เจเจฐเจพเจเจเฉเฅค
เจตเจฟเฉฑเจ เจชเฉเจฐเจพ เจเฉเจก
# 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
}
}
เจธเจฐเฉเจค: www.habr.com