2019.10.20 12:11 [728194] smart account 3N3iL6znDFhJNWj7NKfRKoYVG1hdboZ8iC7 > SELF 0.00000000 Waves
{ "type": 13, "id": "A8HRouvpTtbTRiRzCLJVXHVdCzypx8NAsi12uN9XADsv", "fee": 1400000, "feeAssetId": null, "timestamp": 1571562745581, "version": 1, "sender": "3N3iL6znDFhJNWj7NKfRKoYVG1hdboZ8iC7", "senderPublicKey": "E7ctE5XJHaksUWy2PHrQGj5FRLQk6FezFZrhnphjpgUt", "proofs": [ "5q1xvP1mBRhnNGY8v94dThaHX2JA21pW1xk9qbMrbhYatkVjV8SPYSptKSu2Qsqe6MFKSxb6zYGYHHsmbKwjWf27" ], "script": "base64:AAIDAAAAAAAAAA8IARIGCgQBAQgBEgMKAQgAAAAJAAAAAAdSVU5OSU5HAgAAAAdSVU5OSU5HAAAAAAZDTE9TRUQCAAAABkNMT1NFRAAAAAAIQ0FOQ0VMRUQCAAAACENBTkNFTEVEAAAAAAlEQVBQT1dORVICAAAAIzNOM2lMNnpuREZoSk5XajdOS2ZSS29ZVkcxaGRib1o4aUM3AAAAAAtWT1RFQVNTRVRJRAEAAAAgXc1YMiAxtU0669iAvoWYChIkz8rePUfYvMDdGTUOq6oAAAAABE5PTkUCAAAABE5PTkUAAAAAClZPVElOR0NPU1QAAAAAAAABhqABAAAAC2dldFN0clZhbHVlAAAAAQAAAANrZXkEAAAABnZhbE9wdAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAGdmFsT3B0CQEAAAAHZXh0cmFjdAAAAAEFAAAABnZhbE9wdAkAAAIAAAABCQABLAAAAAIFAAAAA2tleQIAAAAvIHdhcyBub3QgaW5pdGlhbGl6ZWQgYmVmb3JlIGNvbnRyYWN0IGRlcGxveW1lbnQBAAAAC2dldEludFZhbHVlAAAAAQAAAANrZXkEAAAABnZhbE9wdAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAGdmFsT3B0CQEAAAAHZXh0cmFjdAAAAAEFAAAABnZhbE9wdAkAAAIAAAABCQABLAAAAAIFAAAAA2tleQIAAAAvIHdhcyBub3QgaW5pdGlhbGl6ZWQgYmVmb3JlIGNvbnRyYWN0IGRlcGxveW1lbnQAAAACAAAAAWkBAAAACmluaXRpYWxpemUAAAAEAAAADnN0YXJ0aW5nSGVpZ2h0AAAACGR1cmF0aW9uAAAADXZvdGluZ0Fzc2V0SWQAAAAKdm90aW5nQ29zdAQAAAAHYWNjb3VudAkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAABJ2b3RhdGlvbkN1cnJOdW1iZXIJAQAAAAtnZXRJbnRWYWx1ZQAAAAECAAAAFnZvdGF0aW9uX2N1cnJlbnRudW1iZXIEAAAAEnZvdGF0aW9uQ3VyclN0YXR1cwkBAAAAC2dldFN0clZhbHVlAAAAAQkAASwAAAACCQABLAAAAAICAAAACHZvdGF0aW9uCQABpAAAAAEFAAAAEnZvdGF0aW9uQ3Vyck51bWJlcgIAAAAHX3N0YXR1cwMJAQAAAAIhPQAAAAIFAAAAB2FjY291bnQFAAAACURBUFBPV05FUgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAADdPbmx5IGRBUFAgT3duZXIgY2FuY29uZmlndXJlIHZvdGF0aW9uLiBDYWxsZXIgYWNjb3VudDogBQAAAAdhY2NvdW50AgAAAA0gZGFwcCBvd25lcjogBQAAAAlEQVBQT1dORVIDCQAAAAAAAAIFAAAAEnZvdGF0aW9uQ3VyclN0YXR1cwUAAAAHUlVOTklORwkAAAIAAAABCQABLAAAAAICAAAAPVlvdSBjYW5ub3QgY29uZmlndXJlIGEgbmV3IFZvdGF0aW9uIHdoaWxlIGN1cnJlbnQgc3RhdHVzIGlzOiAFAAAAEnZvdGF0aW9uQ3VyclN0YXR1cwMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAA5zdGFydGluZ0hlaWdodAkAAAIAAAABAgAAAD9TdGFydGluZyBIZWlnaHQgbXVzdCBiZSBncmVhdGVyIHRoYW4gY3VycmVudCBibG9ja2NoYWluIGhlaWdodC4EAAAAEXZvdGF0aW9uTmV3TnVtYmVyCQAAZAAAAAIFAAAAEnZvdGF0aW9uQ3Vyck51bWJlcgAAAAAAAAAAAQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAAWdm90YXRpb25fY3VycmVudG51bWJlcgUAAAARdm90YXRpb25OZXdOdW1iZXIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAFHZvdGF0aW9uX3ZvdGluZ2Fzc2V0BQAAAA12b3RpbmdBc3NldElkCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAABN2b3RhdGlvbl92b3Rpbmdjb3N0BQAAAAp2b3RpbmdDb3N0CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJdm90YXRpb25fCQABpAAAAAEFAAAAEXZvdGF0aW9uTmV3TnVtYmVyAgAAAAxfc3RhcnRoZWlnaHQFAAAADnN0YXJ0aW5nSGVpZ2h0CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJdm90YXRpb25fCQABpAAAAAEFAAAAEXZvdGF0aW9uTmV3TnVtYmVyAgAAAA1fZmluaXNoaGVpZ2h0CQAAZAAAAAIFAAAADnN0YXJ0aW5nSGVpZ2h0BQAAAAhkdXJhdGlvbgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAACXZvdGF0aW9uXwkAAaQAAAABBQAAABF2b3RhdGlvbk5ld051bWJlcgIAAAAHX3N0YXR1cwUAAAAHUlVOTklORwUAAAADbmlsAAAAAWkBAAAABHZvdGUAAAABAAAABm9wdGlvbgQAAAAHYWNjb3VudAkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAQAAAASdm90YXRpb25DdXJyTnVtYmVyCQEAAAALZ2V0SW50VmFsdWUAAAABAgAAABZ2b3RhdGlvbl9jdXJyZW50bnVtYmVyBAAAABN2b3RhdGlvblZvdGluZ0Fzc2V0CQACWQAAAAEJAQAAAAtnZXRTdHJWYWx1ZQAAAAECAAAAFHZvdGF0aW9uX3ZvdGluZ2Fzc2V0BAAAABJ2b3RhdGlvblZvdGluZ0Nvc3QJAQAAAAtnZXRJbnRWYWx1ZQAAAAECAAAAE3ZvdGF0aW9uX3ZvdGluZ2Nvc3QEAAAAF3ZvdGF0aW9uQ3Vyck9wdGlvblZhbHVlCQEAAAALZ2V0SW50VmFsdWUAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAl2b3RhdGlvbl8JAAGkAAAAAQUAAAASdm90YXRpb25DdXJyTnVtYmVyAgAAAAFfBQAAAAZvcHRpb24EAAAAE3ZvdGF0aW9uU3RhcnRIZWlnaHQJAQAAAAtnZXRJbnRWYWx1ZQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAl2b3RhdGlvbl8JAAGkAAAAAQUAAAASdm90YXRpb25DdXJyTnVtYmVyAgAAAAxfc3RhcnRoZWlnaHQEAAAAFHZvdGF0aW9uRmluaXNoSGVpZ2h0CQEAAAALZ2V0SW50VmFsdWUAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAJdm90YXRpb25fCQABpAAAAAEFAAAAEnZvdGF0aW9uQ3Vyck51bWJlcgIAAAANX2ZpbmlzaGhlaWdodAQAAAASdm90YXRpb25DdXJyU3RhdHVzCQEAAAALZ2V0U3RyVmFsdWUAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAJdm90YXRpb25fCQABpAAAAAEFAAAAEnZvdGF0aW9uQ3Vyck51bWJlcgIAAAAHX3N0YXR1cwQAAAAOdm90YXRpb25TdGF0dXMJAQAAAAtnZXRTdHJWYWx1ZQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAl2b3RhdGlvbl8JAAGkAAAAAQUAAAASdm90YXRpb25DdXJyTnVtYmVyAgAAAAdfc3RhdHVzAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAAFHZvdGF0aW9uRmluaXNoSGVpZ2h0CQAAAgAAAAECAAAAJ1lvdSBjYW5ub3Qgdm90ZSBhbnltb3JlIGF0IHRoaXMgaGVpZ2h0LgMJAQAAAAIhPQAAAAIFAAAAEnZvdGF0aW9uQ3VyclN0YXR1cwUAAAAHUlVOTklORwkAAAIAAAABCQABLAAAAAICAAAAOUludmFsaWQgc3RhdHVzOiB5b3UgY2Fubm90IHZvdGUgbm93LCB2b3RhdGlvbiBzdGF0dXMgaXM6IAUAAAASdm90YXRpb25DdXJyU3RhdHVzAwMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAATdm90YXRpb25Wb3RpbmdBc3NldAYJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAGYW1vdW50BQAAABJ2b3RhdGlvblZvdGluZ0Nvc3QJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAXWW91IG11c3QgcGF5IGF0IGxlYXN0OiAJAAGkAAAAAQUAAAAKVk9USU5HQ09TVAIAAAAYIFdMVCB0byB2b3RlLiBZb3UgcGFpZDogCQABpAAAAAEIBQAAAANwbXQAAAAGYW1vdW50CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJdm90YXRpb25fCQABpAAAAAEFAAAAEnZvdGF0aW9uQ3Vyck51bWJlcgIAAAABXwUAAAAGb3B0aW9uAgAAAAFfBQAAAAdhY2NvdW50CAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAl2b3RhdGlvbl8JAAGkAAAAAQUAAAASdm90YXRpb25DdXJyTnVtYmVyAgAAAAFfBQAAAAdhY2NvdW50AgAAAAVfYmV0cwkAAGQAAAACBQAAABd2b3RhdGlvbkN1cnJPcHRpb25WYWx1ZQgFAAAAA3BtdAAAAAZhbW91bnQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4AwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24GCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAD0RhdGFUcmFuc2FjdGlvbgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBgYA4b8q", "chainId": 84, "height": 728194, "spentComplexity": 0 } View: original | compacted Prev: 8K9ZjfMwpeaViHkLNQqbbZGRx3JNB5fuRwabZCZ2UM2J Next: 2Qi7NDdAheotZecA1iqo3dX6DbXGRZXMu3SPAjUTmzNK Diff:
Old | New | Differences | |
---|---|---|---|
13 | 13 | ||
14 | 14 | let NONE = "NONE" | |
15 | 15 | ||
16 | - | func getStrByKey (key) = { | |
17 | - | let str = match getString(this, key) { | |
18 | - | case a: String => | |
19 | - | a | |
20 | - | case _ => | |
21 | - | NONE | |
22 | - | } | |
23 | - | str | |
16 | + | let VOTINGCOST = 100000 | |
17 | + | ||
18 | + | func getStrValue (key) = { | |
19 | + | let valOpt = getString(this, key) | |
20 | + | if (isDefined(valOpt)) | |
21 | + | then extract(valOpt) | |
22 | + | else throw((key + " was not initialized before contract deployment")) | |
24 | 23 | } | |
25 | 24 | ||
26 | 25 | ||
27 | - | func getNumByKey (key) = { | |
28 | - | let num = match getInteger(this, key) { | |
29 | - | case a: Int => | |
30 | - | a | |
31 | - | case _ => | |
32 | - | 0 | |
33 | - | } | |
34 | - | num | |
26 | + | func getIntValue (key) = { | |
27 | + | let valOpt = getInteger(this, key) | |
28 | + | if (isDefined(valOpt)) | |
29 | + | then extract(valOpt) | |
30 | + | else throw((key + " was not initialized before contract deployment")) | |
35 | 31 | } | |
36 | 32 | ||
37 | 33 | ||
38 | 34 | @Callable(i) | |
39 | - | func initialize (startingHeight,duration) = { | |
35 | + | func initialize (startingHeight,duration,votingAssetId,votingCost) = { | |
40 | 36 | let account = toBase58String(i.caller.bytes) | |
37 | + | let votationCurrNumber = getIntValue("votation_currentnumber") | |
38 | + | let votationCurrStatus = getStrValue((("votation" + toString(votationCurrNumber)) + "_status")) | |
41 | 39 | if ((account != DAPPOWNER)) | |
42 | - | then throw(((("Only dAPP Owner can Configure Contest. Caller account: " + account) + " dapp owner: ") + DAPPOWNER)) | |
43 | - | else if ((height > startingHeight)) | |
44 | - | then throw("Starting Height must be greater than current blockchain height.") | |
45 | - | else { | |
46 | - | let votationCurrNumber = getNumByKey("votation_currentnumber") | |
47 | - | let votationNewNumber = (votationCurrNumber + 1) | |
48 | - | WriteSet([DataEntry("votation_currentnumber", votationNewNumber), DataEntry((("votation_" + toString(votationNewNumber)) + "_finishheight"), (startingHeight + duration)), DataEntry((("votation_" + toString(votationNewNumber)) + "_status"), RUNNING)]) | |
49 | - | } | |
40 | + | then throw(((("Only dAPP Owner canconfigure votation. Caller account: " + account) + " dapp owner: ") + DAPPOWNER)) | |
41 | + | else if ((votationCurrStatus == RUNNING)) | |
42 | + | then throw(("You cannot configure a new Votation while current status is: " + votationCurrStatus)) | |
43 | + | else if ((height > startingHeight)) | |
44 | + | then throw("Starting Height must be greater than current blockchain height.") | |
45 | + | else { | |
46 | + | let votationNewNumber = (votationCurrNumber + 1) | |
47 | + | WriteSet([DataEntry("votation_currentnumber", votationNewNumber), DataEntry("votation_votingasset", votingAssetId), DataEntry("votation_votingcost", votingCost), DataEntry((("votation_" + toString(votationNewNumber)) + "_startheight"), startingHeight), DataEntry((("votation_" + toString(votationNewNumber)) + "_finishheight"), (startingHeight + duration)), DataEntry((("votation_" + toString(votationNewNumber)) + "_status"), RUNNING)]) | |
48 | + | } | |
49 | + | } | |
50 | + | ||
51 | + | ||
52 | + | ||
53 | + | @Callable(i) | |
54 | + | func vote (option) = { | |
55 | + | let account = toBase58String(i.caller.bytes) | |
56 | + | let pmt = extract(i.payment) | |
57 | + | let votationCurrNumber = getIntValue("votation_currentnumber") | |
58 | + | let votationVotingAsset = fromBase58String(getStrValue("votation_votingasset")) | |
59 | + | let votationVotingCost = getIntValue("votation_votingcost") | |
60 | + | let votationCurrOptionValue = getIntValue(((("votation_" + toString(votationCurrNumber)) + "_") + option)) | |
61 | + | let votationStartHeight = getIntValue((("votation_" + toString(votationCurrNumber)) + "_startheight")) | |
62 | + | let votationFinishHeight = getIntValue((("votation_" + toString(votationCurrNumber)) + "_finishheight")) | |
63 | + | let votationCurrStatus = getStrValue((("votation_" + toString(votationCurrNumber)) + "_status")) | |
64 | + | let votationStatus = getStrValue((("votation_" + toString(votationCurrNumber)) + "_status")) | |
65 | + | if ((height > votationFinishHeight)) | |
66 | + | then throw("You cannot vote anymore at this height.") | |
67 | + | else if ((votationCurrStatus != RUNNING)) | |
68 | + | then throw(("Invalid status: you cannot vote now, votation status is: " + votationCurrStatus)) | |
69 | + | else if (if ((pmt.assetId != votationVotingAsset)) | |
70 | + | then true | |
71 | + | else (pmt.amount != votationVotingCost)) | |
72 | + | then throw(((("You must pay at least: " + toString(VOTINGCOST)) + " WLT to vote. You paid: ") + toString(pmt.amount))) | |
73 | + | else WriteSet([DataEntry(((((("votation_" + toString(votationCurrNumber)) + "_") + option) + "_") + account), pmt.amount), DataEntry((((("votation_" + toString(votationCurrNumber)) + "_") + account) + "_bets"), (votationCurrOptionValue + pmt.amount))]) | |
50 | 74 | } | |
51 | 75 | ||
52 | 76 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 3 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let RUNNING = "RUNNING" | |
5 | 5 | ||
6 | 6 | let CLOSED = "CLOSED" | |
7 | 7 | ||
8 | 8 | let CANCELED = "CANCELED" | |
9 | 9 | ||
10 | 10 | let DAPPOWNER = "3N3iL6znDFhJNWj7NKfRKoYVG1hdboZ8iC7" | |
11 | 11 | ||
12 | 12 | let VOTEASSETID = base58'7KAXNTswj6947a6cVpGhVrh1utWpLcjwf8AFpWCtuMT7' | |
13 | 13 | ||
14 | 14 | let NONE = "NONE" | |
15 | 15 | ||
16 | - | func getStrByKey (key) = { | |
17 | - | let str = match getString(this, key) { | |
18 | - | case a: String => | |
19 | - | a | |
20 | - | case _ => | |
21 | - | NONE | |
22 | - | } | |
23 | - | str | |
16 | + | let VOTINGCOST = 100000 | |
17 | + | ||
18 | + | func getStrValue (key) = { | |
19 | + | let valOpt = getString(this, key) | |
20 | + | if (isDefined(valOpt)) | |
21 | + | then extract(valOpt) | |
22 | + | else throw((key + " was not initialized before contract deployment")) | |
24 | 23 | } | |
25 | 24 | ||
26 | 25 | ||
27 | - | func getNumByKey (key) = { | |
28 | - | let num = match getInteger(this, key) { | |
29 | - | case a: Int => | |
30 | - | a | |
31 | - | case _ => | |
32 | - | 0 | |
33 | - | } | |
34 | - | num | |
26 | + | func getIntValue (key) = { | |
27 | + | let valOpt = getInteger(this, key) | |
28 | + | if (isDefined(valOpt)) | |
29 | + | then extract(valOpt) | |
30 | + | else throw((key + " was not initialized before contract deployment")) | |
35 | 31 | } | |
36 | 32 | ||
37 | 33 | ||
38 | 34 | @Callable(i) | |
39 | - | func initialize (startingHeight,duration) = { | |
35 | + | func initialize (startingHeight,duration,votingAssetId,votingCost) = { | |
40 | 36 | let account = toBase58String(i.caller.bytes) | |
37 | + | let votationCurrNumber = getIntValue("votation_currentnumber") | |
38 | + | let votationCurrStatus = getStrValue((("votation" + toString(votationCurrNumber)) + "_status")) | |
41 | 39 | if ((account != DAPPOWNER)) | |
42 | - | then throw(((("Only dAPP Owner can Configure Contest. Caller account: " + account) + " dapp owner: ") + DAPPOWNER)) | |
43 | - | else if ((height > startingHeight)) | |
44 | - | then throw("Starting Height must be greater than current blockchain height.") | |
45 | - | else { | |
46 | - | let votationCurrNumber = getNumByKey("votation_currentnumber") | |
47 | - | let votationNewNumber = (votationCurrNumber + 1) | |
48 | - | WriteSet([DataEntry("votation_currentnumber", votationNewNumber), DataEntry((("votation_" + toString(votationNewNumber)) + "_finishheight"), (startingHeight + duration)), DataEntry((("votation_" + toString(votationNewNumber)) + "_status"), RUNNING)]) | |
49 | - | } | |
40 | + | then throw(((("Only dAPP Owner canconfigure votation. Caller account: " + account) + " dapp owner: ") + DAPPOWNER)) | |
41 | + | else if ((votationCurrStatus == RUNNING)) | |
42 | + | then throw(("You cannot configure a new Votation while current status is: " + votationCurrStatus)) | |
43 | + | else if ((height > startingHeight)) | |
44 | + | then throw("Starting Height must be greater than current blockchain height.") | |
45 | + | else { | |
46 | + | let votationNewNumber = (votationCurrNumber + 1) | |
47 | + | WriteSet([DataEntry("votation_currentnumber", votationNewNumber), DataEntry("votation_votingasset", votingAssetId), DataEntry("votation_votingcost", votingCost), DataEntry((("votation_" + toString(votationNewNumber)) + "_startheight"), startingHeight), DataEntry((("votation_" + toString(votationNewNumber)) + "_finishheight"), (startingHeight + duration)), DataEntry((("votation_" + toString(votationNewNumber)) + "_status"), RUNNING)]) | |
48 | + | } | |
49 | + | } | |
50 | + | ||
51 | + | ||
52 | + | ||
53 | + | @Callable(i) | |
54 | + | func vote (option) = { | |
55 | + | let account = toBase58String(i.caller.bytes) | |
56 | + | let pmt = extract(i.payment) | |
57 | + | let votationCurrNumber = getIntValue("votation_currentnumber") | |
58 | + | let votationVotingAsset = fromBase58String(getStrValue("votation_votingasset")) | |
59 | + | let votationVotingCost = getIntValue("votation_votingcost") | |
60 | + | let votationCurrOptionValue = getIntValue(((("votation_" + toString(votationCurrNumber)) + "_") + option)) | |
61 | + | let votationStartHeight = getIntValue((("votation_" + toString(votationCurrNumber)) + "_startheight")) | |
62 | + | let votationFinishHeight = getIntValue((("votation_" + toString(votationCurrNumber)) + "_finishheight")) | |
63 | + | let votationCurrStatus = getStrValue((("votation_" + toString(votationCurrNumber)) + "_status")) | |
64 | + | let votationStatus = getStrValue((("votation_" + toString(votationCurrNumber)) + "_status")) | |
65 | + | if ((height > votationFinishHeight)) | |
66 | + | then throw("You cannot vote anymore at this height.") | |
67 | + | else if ((votationCurrStatus != RUNNING)) | |
68 | + | then throw(("Invalid status: you cannot vote now, votation status is: " + votationCurrStatus)) | |
69 | + | else if (if ((pmt.assetId != votationVotingAsset)) | |
70 | + | then true | |
71 | + | else (pmt.amount != votationVotingCost)) | |
72 | + | then throw(((("You must pay at least: " + toString(VOTINGCOST)) + " WLT to vote. You paid: ") + toString(pmt.amount))) | |
73 | + | else WriteSet([DataEntry(((((("votation_" + toString(votationCurrNumber)) + "_") + option) + "_") + account), pmt.amount), DataEntry((((("votation_" + toString(votationCurrNumber)) + "_") + account) + "_bets"), (votationCurrOptionValue + pmt.amount))]) | |
50 | 74 | } | |
51 | 75 | ||
52 | 76 | ||
53 | 77 | @Verifier(tx) | |
54 | 78 | func verify () = match tx { | |
55 | 79 | case _: SetScriptTransaction|DataTransaction => | |
56 | 80 | sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
57 | 81 | case _: InvokeScriptTransaction => | |
58 | 82 | true | |
59 | 83 | case _ => | |
60 | 84 | true | |
61 | 85 | } | |
62 | 86 |
github/deemru/w8io/786bc32 21.11 ms ◑