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:
OldNewDifferences
1313
1414 let NONE = "NONE"
1515
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"))
2423 }
2524
2625
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"))
3531 }
3632
3733
3834 @Callable(i)
39-func initialize (startingHeight,duration) = {
35+func initialize (startingHeight,duration,votingAssetId,votingCost) = {
4036 let account = toBase58String(i.caller.bytes)
37+ let votationCurrNumber = getIntValue("votation_currentnumber")
38+ let votationCurrStatus = getStrValue((("votation" + toString(votationCurrNumber)) + "_status"))
4139 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))])
5074 }
5175
5276
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let RUNNING = "RUNNING"
55
66 let CLOSED = "CLOSED"
77
88 let CANCELED = "CANCELED"
99
1010 let DAPPOWNER = "3N3iL6znDFhJNWj7NKfRKoYVG1hdboZ8iC7"
1111
1212 let VOTEASSETID = base58'7KAXNTswj6947a6cVpGhVrh1utWpLcjwf8AFpWCtuMT7'
1313
1414 let NONE = "NONE"
1515
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"))
2423 }
2524
2625
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"))
3531 }
3632
3733
3834 @Callable(i)
39-func initialize (startingHeight,duration) = {
35+func initialize (startingHeight,duration,votingAssetId,votingCost) = {
4036 let account = toBase58String(i.caller.bytes)
37+ let votationCurrNumber = getIntValue("votation_currentnumber")
38+ let votationCurrStatus = getStrValue((("votation" + toString(votationCurrNumber)) + "_status"))
4139 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))])
5074 }
5175
5276
5377 @Verifier(tx)
5478 func verify () = match tx {
5579 case _: SetScriptTransaction|DataTransaction =>
5680 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
5781 case _: InvokeScriptTransaction =>
5882 true
5983 case _ =>
6084 true
6185 }
6286

github/deemru/w8io/786bc32 
21.11 ms