tx · PYNG8TMuBwimUwnB5ZYa9rph4C7Q8CoRj6sFmub1CKv 3Msj81YL4DxQdbQACtfXhMbpWmze1VVnctu: -0.01000000 Waves 2022.10.17 08:56 [2275981] smart account 3Msj81YL4DxQdbQACtfXhMbpWmze1VVnctu > SELF 0.00000000 Waves
{ "type": 13, "id": "PYNG8TMuBwimUwnB5ZYa9rph4C7Q8CoRj6sFmub1CKv", "fee": 1000000, "feeAssetId": null, "timestamp": 1665986296621, "version": 2, "chainId": 84, "sender": "3Msj81YL4DxQdbQACtfXhMbpWmze1VVnctu", "senderPublicKey": "28hGQdonCy33HT27DAdzF7rwYRv24Nizp2yBBtwjRUia", "proofs": [ "52VXTX1hDF34WpdPNXz49rdGWrhNyR4rP758bgwSN1WxHxHUstCg4PBq66ASY6t7SSkaqRhe4HfejJj6JitaVxyE" ], "script": "base64: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bnMgZGVuaWVkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOaGVpZ2h0U3RhcnRLRVkAAAAABQAAAAtoZWlnaHRTdGFydAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADGhlaWdodEVuZEtFWQAAAAAFAAAACWhlaWdodEVuZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASYXZhaWxhYmxlQXNzZXRzS0VZAAAAAAUAAAAQYXZhaWxhYmxlX2Fzc2V0cwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAUZ25zYnRfZnJvbU5zYnRfdG90YWwFAAAAEmduc2J0RnJvbU5zYnRUb3RhbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAUZ25zYnRfZnJvbVN1cmZfdG90YWwFAAAAEmduc2J0RnJvbVN1cmZUb3RhbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAGcXVvcnVtCQAAawAAAAMJAABkAAAAAgUAAAASZ25zYnRGcm9tTnNidFRvdGFsBQAAABJnbnNidEZyb21TdXJmVG90YWwFAAAADXF1b3J1bVBlcmNlbnQAAAAAAAAAAGQFAAAAA25pbAAAAApjb250ZXh0T2JqAQAAAAhjYXN0Vm90ZQAAAAEAAAAWbmV3VXNlclNlbGVjdGVkT3B0aW9ucwQAAAALdXNlckFkZHJlc3MJAAQlAAAAAQgFAAAACmNvbnRleHRPYmoAAAAGY2FsbGVyAwkAAAAAAAACCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAOYXZhaWxhYmxlVm90ZXMFAAAAFm5ld1VzZXJTZWxlY3RlZE9wdGlvbnMHCQAAAgAAAAECAAAAD0luY29ycmVjdCB2b3RlIQMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAAAloZWlnaHRFbmQJAAACAAAAAQIAAAANdm90ZSBmaW5pc2hlZAQAAAAIc3VyZkRhdGEJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAAE3N1cmZTdGFraW5nQ29udHJhY3QCAAAAFnN1cmZTdGFraW5nU1lTUkVBRE9OTFkJAARMAAAAAgUAAAALdXNlckFkZHJlc3MJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAAANuaWwEAAAAHGduc2J0RnJvbVN1cmZFZmZlY3RpdmVIZWlnaHQJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAIc3VyZkRhdGEAAAAAAAAAAAQEAAAADWduc2J0RnJvbVN1cmYDCQAAZgAAAAIFAAAAHGduc2J0RnJvbVN1cmZFZmZlY3RpdmVIZWlnaHQFAAAACWhlaWdodEVuZAAAAAAAAAAAAAkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAAhzdXJmRGF0YQAAAAAAAAAAAgQAAAAIbnNidERhdGEJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAAE25zYnRTdGFraW5nQ29udHJhY3QCAAAAFm5zYnRTdGFraW5nU1lTUkVBRE9OTFkJAARMAAAAAgUAAAALdXNlckFkZHJlc3MJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAAANuaWwEAAAAEm5ld1VzZXJWb3RpbmdQb3dlcgkAAGQAAAACCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAACG5zYnREYXRhAAAAAAAAAAAABQAAAA1nbnNidEZyb21TdXJmAwkAAGcAAAACAAAAAAAAAAAABQAAABJuZXdVc2VyVm90aW5nUG93ZXIJAAACAAAAAQIAAAAYbm90IGVub3VnaCBnbnNidCB0byB2b3RlBAAAABJzZWxlY3RlZE9wdGlvbnNBcnIJAAS1AAAAAgUAAAAWbmV3VXNlclNlbGVjdGVkT3B0aW9ucwIAAAABOgQAAAARcHJldlVzZXJDaG9pY2VLRVkJAQAAAA9rZXlVc2VyTGFzdFZvdGUAAAABBQAAAAt1c2VyQWRkcmVzcwQAAAAXcHJldlVzZXJTZWxlY3RlZE9wdGlvbnMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAARcHJldlVzZXJDaG9pY2VLRVkFAAAAFm5ld1VzZXJTZWxlY3RlZE9wdGlvbnMEAAAAGnByZXZVc2VyU2VsZWN0ZWRPcHRpb25zQXJyCQAEtQAAAAIFAAAAF3ByZXZVc2VyU2VsZWN0ZWRPcHRpb25zAgAAAAE6BAAAABZwcmV2VXNlclZvdGluZ1Bvd2VyS0VZCQEAAAASa2V5VXNlclZvdGluZ1Bvd2VyAAAAAQUAAAALdXNlckFkZHJlc3MEAAAAE3ByZXZVc2VyVm90aW5nUG93ZXIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAWcHJldlVzZXJWb3RpbmdQb3dlcktFWQAAAAAAAAAAAAoBAAAADHJlZnJlc2hWb3RlcwAAAAIAAAAEZGF0YQAAAANpZHgEAAAADW5ld1VzZXJDaG9pY2UJAAGRAAAAAgUAAAASc2VsZWN0ZWRPcHRpb25zQXJyBQAAAANpZHgEAAAADnByZXZVc2VyQ2hvaWNlCQABkQAAAAIFAAAAGnByZXZVc2VyU2VsZWN0ZWRPcHRpb25zQXJyBQAAAANpZHgEAAAAE25ld1RvdGFsQnlDaG9pY2VLRVkJAAS5AAAAAgkABEwAAAACAgAAAAR2b3RlCQAETAAAAAIFAAAADW5ld1VzZXJDaG9pY2UFAAAAA25pbAIAAAABXwQAAAAWbmV3VG90YWxCeUNob2ljZUFtb3VudAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABNuZXdUb3RhbEJ5Q2hvaWNlS0VZAAAAAAAAAAAABAAAABRwcmV2VG90YWxCeUNob2ljZUtFWQkABLkAAAACCQAETAAAAAICAAAABHZvdGUJAARMAAAAAgUAAAAOcHJldlVzZXJDaG9pY2UFAAAAA25pbAIAAAABXwQAAAAXcHJldlRvdGFsQnlDaG9pY2VBbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAUcHJldlRvdGFsQnlDaG9pY2VLRVkAAAAAAAAAAAAEAAAADXJlZnJlc2hUb3RhbHMDCQEAAAACIT0AAAACBQAAAA1uZXdVc2VyQ2hvaWNlBQAAAA5wcmV2VXNlckNob2ljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAUcHJldlRvdGFsQnlDaG9pY2VLRVkJAABlAAAAAgUAAAAXcHJldlRvdGFsQnlDaG9pY2VBbW91bnQFAAAAE3ByZXZVc2VyVm90aW5nUG93ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE25ld1RvdGFsQnlDaG9pY2VLRVkJAABkAAAAAgUAAAAWbmV3VG90YWxCeUNob2ljZUFtb3VudAUAAAASbmV3VXNlclZvdGluZ1Bvd2VyBQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE25ld1RvdGFsQnlDaG9pY2VLRVkJAABlAAAAAgkAAGQAAAACBQAAABZuZXdUb3RhbEJ5Q2hvaWNlQW1vdW50BQAAABJuZXdVc2VyVm90aW5nUG93ZXIFAAAAE3ByZXZVc2VyVm90aW5nUG93ZXIFAAAAA25pbAkABE4AAAACBQAAAARkYXRhBQAAAA1yZWZyZXNoVG90YWxzBAAAAAVpZHhlcwkABEwAAAACAAAAAAAAAAAABQAAAANuaWwJAAROAAAAAgoAAAAAAiRsBQAAAAVpZHhlcwoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzAFAAAAA25pbAoBAAAABSRmMF8xAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkBAAAADHJlZnJlc2hWb3RlcwAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAABSRmMF8yAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkAAAIAAAABAgAAABNMaXN0IHNpemUgZXhjZWVkcyAyCQEAAAAFJGYwXzIAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAWcHJldlVzZXJWb3RpbmdQb3dlcktFWQUAAAASbmV3VXNlclZvdGluZ1Bvd2VyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEXByZXZVc2VyQ2hvaWNlS0VZBQAAABZuZXdVc2VyU2VsZWN0ZWRPcHRpb25zBQAAAANuaWwAAAAAtY7GoA==", "height": 2275981, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 5 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func heightEndKEY () = "height_end" | |
5 | + | ||
6 | + | ||
7 | + | func heightStartKEY () = "height_start" | |
8 | + | ||
9 | + | ||
10 | + | func availableAssetsKEY () = "available_assets" | |
11 | + | ||
12 | + | ||
13 | + | let heightEnd = valueOrErrorMessage(getInteger(this, heightEndKEY()), "height_end is not specified in state") | |
14 | + | ||
15 | + | let assetsString = valueOrErrorMessage(getString(this, availableAssetsKEY()), "Assets list is not specified in state") | |
16 | + | ||
17 | + | func asAnyList (val) = match val { | |
18 | + | case valAnyLyst: List[Any] => | |
19 | + | valAnyLyst | |
20 | + | case _ => | |
21 | + | throw("fail to cast into List[Any]") | |
22 | + | } | |
23 | + | ||
24 | + | ||
25 | + | func asInt (val) = match val { | |
26 | + | case valInt: Int => | |
27 | + | valInt | |
28 | + | case _ => | |
29 | + | throw("fail to cast into Int") | |
30 | + | } | |
31 | + | ||
32 | + | ||
33 | + | let nsbtStakingContract = Address(base58'3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J') | |
34 | + | ||
35 | + | let surfStakingContract = Address(base58'3N5yarEiTQccnnuerogYT3BxM5Zc5bRgDZy') | |
36 | + | ||
37 | + | let availableVotes = split(assetsString, ",") | |
38 | + | ||
39 | + | func keyUserBalance (userAddr) = makeString(["balance", toString(userAddr)], "_") | |
40 | + | ||
41 | + | ||
42 | + | func keyUserVotingPower (userAddr) = makeString(["votingPower", userAddr], "_") | |
43 | + | ||
44 | + | ||
45 | + | func keyUserLastVote (userAddr) = makeString(["last_vote", userAddr], "_") | |
46 | + | ||
47 | + | ||
48 | + | @Callable(contextObj) | |
49 | + | func constructor (available_assets,heightStart,heightEnd,quorumPercent) = { | |
50 | + | let surfData = asAnyList(invoke(surfStakingContract, "surfStakingSYSREADONLY", ["", 0], nil)) | |
51 | + | let gnsbtFromSurfTotal = asInt(surfData[3]) | |
52 | + | let nsbtData = asAnyList(invoke(nsbtStakingContract, "nsbtStakingSYSREADONLY", ["", 0], nil)) | |
53 | + | let gnsbtFromNsbtTotal = asInt(nsbtData[1]) | |
54 | + | if ((contextObj.caller != this)) | |
55 | + | then throw("permissions denied") | |
56 | + | else [IntegerEntry(heightStartKEY(), heightStart), IntegerEntry(heightEndKEY(), heightEnd), StringEntry(availableAssetsKEY(), available_assets), IntegerEntry("gnsbt_fromNsbt_total", gnsbtFromNsbtTotal), IntegerEntry("gnsbt_fromSurf_total", gnsbtFromSurfTotal), IntegerEntry("quorum", fraction((gnsbtFromNsbtTotal + gnsbtFromSurfTotal), quorumPercent, 100))] | |
57 | + | } | |
58 | + | ||
59 | + | ||
60 | + | ||
61 | + | @Callable(contextObj) | |
62 | + | func castVote (newUserSelectedOptions) = { | |
63 | + | let userAddress = toString(contextObj.caller) | |
64 | + | if ((containsElement(availableVotes, newUserSelectedOptions) == false)) | |
65 | + | then throw("Incorrect vote!") | |
66 | + | else if ((height >= heightEnd)) | |
67 | + | then throw("vote finished") | |
68 | + | else { | |
69 | + | let surfData = asAnyList(invoke(surfStakingContract, "surfStakingSYSREADONLY", [userAddress, 0], nil)) | |
70 | + | let gnsbtFromSurfEffectiveHeight = asInt(surfData[4]) | |
71 | + | let gnsbtFromSurf = if ((gnsbtFromSurfEffectiveHeight > heightEnd)) | |
72 | + | then 0 | |
73 | + | else asInt(surfData[2]) | |
74 | + | let nsbtData = asAnyList(invoke(nsbtStakingContract, "nsbtStakingSYSREADONLY", [userAddress, 0], nil)) | |
75 | + | let newUserVotingPower = (asInt(nsbtData[0]) + gnsbtFromSurf) | |
76 | + | if ((0 >= newUserVotingPower)) | |
77 | + | then throw("not enough gnsbt to vote") | |
78 | + | else { | |
79 | + | let selectedOptionsArr = split(newUserSelectedOptions, ":") | |
80 | + | let prevUserChoiceKEY = keyUserLastVote(userAddress) | |
81 | + | let prevUserSelectedOptions = valueOrElse(getString(this, prevUserChoiceKEY), newUserSelectedOptions) | |
82 | + | let prevUserSelectedOptionsArr = split(prevUserSelectedOptions, ":") | |
83 | + | let prevUserVotingPowerKEY = keyUserVotingPower(userAddress) | |
84 | + | let prevUserVotingPower = valueOrElse(getInteger(this, prevUserVotingPowerKEY), 0) | |
85 | + | func refreshVotes (data,idx) = { | |
86 | + | let newUserChoice = selectedOptionsArr[idx] | |
87 | + | let prevUserChoice = prevUserSelectedOptionsArr[idx] | |
88 | + | let newTotalByChoiceKEY = makeString(["vote", newUserChoice], "_") | |
89 | + | let newTotalByChoiceAmount = valueOrElse(getInteger(this, newTotalByChoiceKEY), 0) | |
90 | + | let prevTotalByChoiceKEY = makeString(["vote", prevUserChoice], "_") | |
91 | + | let prevTotalByChoiceAmount = valueOrElse(getInteger(this, prevTotalByChoiceKEY), 0) | |
92 | + | let refreshTotals = if ((newUserChoice != prevUserChoice)) | |
93 | + | then [IntegerEntry(prevTotalByChoiceKEY, (prevTotalByChoiceAmount - prevUserVotingPower)), IntegerEntry(newTotalByChoiceKEY, (newTotalByChoiceAmount + newUserVotingPower))] | |
94 | + | else [IntegerEntry(newTotalByChoiceKEY, ((newTotalByChoiceAmount + newUserVotingPower) - prevUserVotingPower))] | |
95 | + | (data ++ refreshTotals) | |
96 | + | } | |
97 | + | ||
98 | + | let idxes = [0] | |
99 | + | ({ | |
100 | + | let $l = idxes | |
101 | + | let $s = size($l) | |
102 | + | let $acc0 = nil | |
103 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
104 | + | then $a | |
105 | + | else refreshVotes($a, $l[$i]) | |
106 | + | ||
107 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
108 | + | then $a | |
109 | + | else throw("List size exceeds 2") | |
110 | + | ||
111 | + | $f0_2($f0_1($f0_1($acc0, 0), 1), 2) | |
112 | + | } ++ [IntegerEntry(prevUserVotingPowerKEY, newUserVotingPower), StringEntry(prevUserChoiceKEY, newUserSelectedOptions)]) | |
113 | + | } | |
114 | + | } | |
115 | + | } | |
116 | + | ||
117 | + |
github/deemru/w8io/169f3d6 24.71 ms ◑