tx · 9WTWmrDj3xHekfa78f7sHmGLo7nPf5iyLiRKqVCabkvy 3MriS1yLhFcKRAM51jDyNAdusa6bCWrTCYj: -0.05000000 Waves 2024.02.07 15:30 [2965821] smart account 3MriS1yLhFcKRAM51jDyNAdusa6bCWrTCYj > SELF 0.00000000 Waves
{ "type": 13, "id": "9WTWmrDj3xHekfa78f7sHmGLo7nPf5iyLiRKqVCabkvy", "fee": 5000000, "feeAssetId": null, "timestamp": 1707309052546, "version": 2, "chainId": 84, "sender": "3MriS1yLhFcKRAM51jDyNAdusa6bCWrTCYj", "senderPublicKey": "CgjXoHPsstPW1WBAcTeBgjKtLSNFmLbQ7pLJ19JzkCy9", "proofs": [ "4MQiEEJs5ioYuLwLPRHK9JG8AYBkT9py7j9gA1eiNBEnUPQhkZPHwodz3ESD64E8B6h65dq9EHVscnhpbEeuEnv7" ], "script": "base64:AAIFAAAAAAAAABgIAhIFCgMICAgSAwoBCBIDCgEIEgMKAQgAAAAGAAAAAA9tYWluREFPQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAECAAAAIzNOOXRLaXh6cVRZV25FWFF4ckRRNXBCVEd2UWQ2c0Zzdm1WAAAAABV2b3RlSW5pdGlhdGVUaHJlc2hvbGQAAAAAAAX14QABAAAAEmdldFZvdGVzRnJvbUNhbGxlcgAAAAEAAAAJcHVibGljS2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAAD21haW5EQU9Db250cmFjdAkAASwAAAACAgAAAAlkYW9fdXNlcl8FAAAACXB1YmxpY0tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFpBQAAAAckbWF0Y2gwBQAAAAFpAP//////////AQAAAA9nZXRBbHJlYWR5Vm90ZWQAAAACAAAABnZvdGVJZAAAAAlwdWJsaWNLZXkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAGdm90ZUlkAgAAAAFfBQAAAAlwdWJsaWNLZXkCAAAABl92b3RlZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgcBAAAAF2dldEN1cnJlbnRZZXNWb3Rlc0ZvcklkAAAAAQAAAAZ2b3RlSWQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAZ2b3RlSWQCAAAABF95ZXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABaQUAAAAHJG1hdGNoMAUAAAABaQD//////////wEAAAAWZ2V0Q3VycmVudE5vVm90ZXNGb3JJZAAAAAEAAAAGdm90ZUlkBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAGdm90ZUlkAgAAAANfbm8DCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABaQUAAAAHJG1hdGNoMAUAAAABaQD//////////wAAAAQAAAABaQEAAAAMcmVnaXN0ZXJWb3RlAAAAAwAAAAV0aXRsZQAAAARkZXNjAAAABGxpbmsEAAAAD2NhbGxlclB1YmxpY0tleQkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAABnZvdGVJZAkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBAAAAAhlbmRCbG9jawkAAGQAAAACBQAAAAZoZWlnaHQAAAAAAAAAHCAEAAAAC3ZvdGluZ1Bvd2VyCQEAAAASZ2V0Vm90ZXNGcm9tQ2FsbGVyAAAAAQUAAAAPY2FsbGVyUHVibGljS2V5AwkAAGYAAAACBQAAABV2b3RlSW5pdGlhdGVUaHJlc2hvbGQFAAAAC3ZvdGluZ1Bvd2VyCQAAAgAAAAECAAAAMFVzZXIgaGFzIG5vdCBiZWVuIGFjdGl2ZSBlbm91Z2ggb24gdGhlIHBsYXRmb3JtIQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAZ2b3RlSWQCAAAACl9lbmRIZWlnaHQFAAAACGVuZEJsb2NrCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAAGdm90ZUlkAgAAAAZfdGl0bGUFAAAABXRpdGxlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAAGdm90ZUlkAgAAAAxfZGVzY3JpcHRpb24FAAAABGRlc2MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACBQAAAAZ2b3RlSWQCAAAABV9saW5rBQAAAARsaW5rCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAABnZvdGVJZAIAAAAEX3llcwAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAZ2b3RlSWQCAAAAA19ubwAAAAAAAAAAAAUAAAADbmlsAAAAAWkBAAAAA3llcwAAAAEAAAAGdm90ZUlkBAAAAA9jYWxsZXJQdWJsaWNLZXkJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAA9jdXJyZW50WWVzVm90ZXMJAQAAABdnZXRDdXJyZW50WWVzVm90ZXNGb3JJZAAAAAEFAAAABnZvdGVJZAQAAAAPdm90ZXNGcm9tQ2FsbGVyCQEAAAASZ2V0Vm90ZXNGcm9tQ2FsbGVyAAAAAQUAAAAPY2FsbGVyUHVibGljS2V5BAAAAAxhbHJlYWR5Vm90ZWQJAQAAAA9nZXRBbHJlYWR5Vm90ZWQAAAACBQAAAAZ2b3RlSWQFAAAAD2NhbGxlclB1YmxpY0tleQMJAAAAAAAAAgUAAAAPY3VycmVudFllc1ZvdGVzAP//////////CQAAAgAAAAECAAAAD1ZvdGUgbm90IGZvdW5kIQMFAAAADGFscmVhZHlWb3RlZAkAAAIAAAABAgAAABZBZGRyZXNzIGFscmVhZHkgdm90ZWQhCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAABnZvdGVJZAIAAAAEX3llcwkAAGQAAAACBQAAAA9jdXJyZW50WWVzVm90ZXMFAAAAD3ZvdGVzRnJvbUNhbGxlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAGdm90ZUlkAgAAAAFfBQAAAA9jYWxsZXJQdWJsaWNLZXkCAAAABF95ZXMFAAAAD3ZvdGVzRnJvbUNhbGxlcgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAGdm90ZUlkAgAAAAFfBQAAAA9jYWxsZXJQdWJsaWNLZXkCAAAABl92b3RlZAYFAAAAA25pbAAAAAFpAQAAAAJubwAAAAEAAAAGdm90ZUlkBAAAAA9jYWxsZXJQdWJsaWNLZXkJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAA5jdXJyZW50Tm9Wb3RlcwkBAAAAFmdldEN1cnJlbnROb1ZvdGVzRm9ySWQAAAABBQAAAAZ2b3RlSWQEAAAAD3ZvdGVzRnJvbUNhbGxlcgkBAAAAEmdldFZvdGVzRnJvbUNhbGxlcgAAAAEFAAAAD2NhbGxlclB1YmxpY0tleQQAAAAMYWxyZWFkeVZvdGVkCQEAAAAPZ2V0QWxyZWFkeVZvdGVkAAAAAgUAAAAGdm90ZUlkBQAAAA9jYWxsZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAADmN1cnJl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", "height": 2965821, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6fcRYCzvb6mLmjpGTEqqzn7ZXpaJQ5WcCUzG57Z3T8o9 Next: 89M6nn5Tu9uL2j6m7rJFuEGPoRLmtP8FMeCiMK9PY5WQ Diff:
Old | New | Differences | |
---|---|---|---|
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let mainDAOContract = addressFromStringValue("3N9tKixzqTYWnEXQxrDQ5pBTGvQd6sFsvmV") | |
5 | + | ||
6 | + | let voteInitiateThreshold = 100000000 | |
5 | 7 | ||
6 | 8 | func getVotesFromCaller (publicKey) = match getInteger(mainDAOContract, ("dao_user_" + publicKey)) { | |
7 | 9 | case i: Int => | |
37 | 39 | ||
38 | 40 | @Callable(i) | |
39 | 41 | func registerVote (title,desc,link) = { | |
42 | + | let callerPublicKey = toBase58String(i.callerPublicKey) | |
40 | 43 | let voteId = toBase58String(i.transactionId) | |
41 | 44 | let endBlock = (height + 7200) | |
42 | - | [IntegerEntry((voteId + "_endHeight"), endBlock), StringEntry((voteId + "_title"), title), StringEntry((voteId + "_description"), desc), StringEntry((voteId + "_link"), link), IntegerEntry((voteId + "_yes"), 0), IntegerEntry((voteId + "_no"), 0)] | |
45 | + | let votingPower = getVotesFromCaller(callerPublicKey) | |
46 | + | if ((voteInitiateThreshold > votingPower)) | |
47 | + | then throw("User has not been active enough on the platform!") | |
48 | + | else [IntegerEntry((voteId + "_endHeight"), endBlock), StringEntry((voteId + "_title"), title), StringEntry((voteId + "_description"), desc), StringEntry((voteId + "_link"), link), IntegerEntry((voteId + "_yes"), 0), IntegerEntry((voteId + "_no"), 0)] | |
43 | 49 | } | |
44 | 50 | ||
45 | 51 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let mainDAOContract = addressFromStringValue("3N9tKixzqTYWnEXQxrDQ5pBTGvQd6sFsvmV") | |
5 | + | ||
6 | + | let voteInitiateThreshold = 100000000 | |
5 | 7 | ||
6 | 8 | func getVotesFromCaller (publicKey) = match getInteger(mainDAOContract, ("dao_user_" + publicKey)) { | |
7 | 9 | case i: Int => | |
8 | 10 | i | |
9 | 11 | case _ => | |
10 | 12 | -1 | |
11 | 13 | } | |
12 | 14 | ||
13 | 15 | ||
14 | 16 | func getAlreadyVoted (voteId,publicKey) = match getBoolean(this, (((voteId + "_") + publicKey) + "_voted")) { | |
15 | 17 | case b: Boolean => | |
16 | 18 | b | |
17 | 19 | case _ => | |
18 | 20 | false | |
19 | 21 | } | |
20 | 22 | ||
21 | 23 | ||
22 | 24 | func getCurrentYesVotesForId (voteId) = match getInteger(this, (voteId + "_yes")) { | |
23 | 25 | case i: Int => | |
24 | 26 | i | |
25 | 27 | case _ => | |
26 | 28 | -1 | |
27 | 29 | } | |
28 | 30 | ||
29 | 31 | ||
30 | 32 | func getCurrentNoVotesForId (voteId) = match getInteger(this, (voteId + "_no")) { | |
31 | 33 | case i: Int => | |
32 | 34 | i | |
33 | 35 | case _ => | |
34 | 36 | -1 | |
35 | 37 | } | |
36 | 38 | ||
37 | 39 | ||
38 | 40 | @Callable(i) | |
39 | 41 | func registerVote (title,desc,link) = { | |
42 | + | let callerPublicKey = toBase58String(i.callerPublicKey) | |
40 | 43 | let voteId = toBase58String(i.transactionId) | |
41 | 44 | let endBlock = (height + 7200) | |
42 | - | [IntegerEntry((voteId + "_endHeight"), endBlock), StringEntry((voteId + "_title"), title), StringEntry((voteId + "_description"), desc), StringEntry((voteId + "_link"), link), IntegerEntry((voteId + "_yes"), 0), IntegerEntry((voteId + "_no"), 0)] | |
45 | + | let votingPower = getVotesFromCaller(callerPublicKey) | |
46 | + | if ((voteInitiateThreshold > votingPower)) | |
47 | + | then throw("User has not been active enough on the platform!") | |
48 | + | else [IntegerEntry((voteId + "_endHeight"), endBlock), StringEntry((voteId + "_title"), title), StringEntry((voteId + "_description"), desc), StringEntry((voteId + "_link"), link), IntegerEntry((voteId + "_yes"), 0), IntegerEntry((voteId + "_no"), 0)] | |
43 | 49 | } | |
44 | 50 | ||
45 | 51 | ||
46 | 52 | ||
47 | 53 | @Callable(i) | |
48 | 54 | func yes (voteId) = { | |
49 | 55 | let callerPublicKey = toBase58String(i.callerPublicKey) | |
50 | 56 | let currentYesVotes = getCurrentYesVotesForId(voteId) | |
51 | 57 | let votesFromCaller = getVotesFromCaller(callerPublicKey) | |
52 | 58 | let alreadyVoted = getAlreadyVoted(voteId, callerPublicKey) | |
53 | 59 | if ((currentYesVotes == -1)) | |
54 | 60 | then throw("Vote not found!") | |
55 | 61 | else if (alreadyVoted) | |
56 | 62 | then throw("Address already voted!") | |
57 | 63 | else [IntegerEntry((voteId + "_yes"), (currentYesVotes + votesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_yes"), votesFromCaller), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), true)] | |
58 | 64 | } | |
59 | 65 | ||
60 | 66 | ||
61 | 67 | ||
62 | 68 | @Callable(i) | |
63 | 69 | func no (voteId) = { | |
64 | 70 | let callerPublicKey = toBase58String(i.callerPublicKey) | |
65 | 71 | let currentNoVotes = getCurrentNoVotesForId(voteId) | |
66 | 72 | let votesFromCaller = getVotesFromCaller(callerPublicKey) | |
67 | 73 | let alreadyVoted = getAlreadyVoted(voteId, callerPublicKey) | |
68 | 74 | if ((currentNoVotes == -1)) | |
69 | 75 | then throw("Vote not found!") | |
70 | 76 | else if (alreadyVoted) | |
71 | 77 | then throw("Address already voted!") | |
72 | 78 | else [IntegerEntry((voteId + "_no"), (currentNoVotes + votesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_no"), votesFromCaller), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), true)] | |
73 | 79 | } | |
74 | 80 | ||
75 | 81 | ||
76 | 82 | ||
77 | 83 | @Callable(i) | |
78 | 84 | func retractVote (voteId) = { | |
79 | 85 | let callerPublicKey = toBase58String(i.callerPublicKey) | |
80 | 86 | let currentNoVotes = getCurrentNoVotesForId(voteId) | |
81 | 87 | let currentYesVotes = getCurrentYesVotesForId(voteId) | |
82 | 88 | let noVotesFromCaller = match getInteger(this, (((voteId + "_") + callerPublicKey) + "_no")) { | |
83 | 89 | case n: Int => | |
84 | 90 | n | |
85 | 91 | case _ => | |
86 | 92 | 0 | |
87 | 93 | } | |
88 | 94 | let yesVotesFromCaller = match getInteger(this, (((voteId + "_") + callerPublicKey) + "_yes")) { | |
89 | 95 | case n: Int => | |
90 | 96 | n | |
91 | 97 | case _ => | |
92 | 98 | 0 | |
93 | 99 | } | |
94 | 100 | if (if ((currentYesVotes == -1)) | |
95 | 101 | then true | |
96 | 102 | else (currentNoVotes == -1)) | |
97 | 103 | then throw("No active vote for this vote id!") | |
98 | 104 | else [IntegerEntry((voteId + "_no"), (currentNoVotes - noVotesFromCaller)), IntegerEntry((voteId + "_yes"), (currentYesVotes - yesVotesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_no"), 0), IntegerEntry((((voteId + "_") + callerPublicKey) + "_yes"), 0), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), false)] | |
99 | 105 | } | |
100 | 106 | ||
101 | 107 | ||
102 | 108 | @Verifier(tx) | |
103 | 109 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
104 | 110 |
github/deemru/w8io/169f3d6 38.13 ms ◑![]()