tx · 3HCuVqYFPepucfJhzkTB3BDNH7CyCBRNN4Z4wiTjxjTx 3N5QUR83YdtSxhxoFjPCs3Ngh2BAVtFE7E1: -0.01000000 Waves 2022.04.04 18:05 [1993997] smart account 3N5QUR83YdtSxhxoFjPCs3Ngh2BAVtFE7E1 > SELF 0.00000000 Waves
{ "type": 13, "id": "3HCuVqYFPepucfJhzkTB3BDNH7CyCBRNN4Z4wiTjxjTx", "fee": 1000000, "feeAssetId": null, "timestamp": 1649084816827, "version": 2, "chainId": 84, "sender": "3N5QUR83YdtSxhxoFjPCs3Ngh2BAVtFE7E1", "senderPublicKey": "J2hHGUChrqTSuvmLqT9DyWgn25qit1CEpMxEGDCSjuUi", "proofs": [ "2vhJgVk4Aq8U6gX6Z82j5nhTHfsWRZ4Ba1WDYWY3nAuhYkMYSxnUjstzRUV35mZXgupyyf8nsEVRfJU93Y9RksGZ" ], "script": "base64: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BHZvdGUEAAAAH3JlbW92ZUFtb3VudEZvclByZXZpb3VzU2FtZVZvdGUDCQAAAAAAAAIFAAAADHVzZXJMYXN0Vm90ZQUAAAAEdm90ZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAA91c2VyVGhpc1ZvdGVLZXkAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEnJlZHVjZU9sZFVzZXJWb3RlcwMJAAAAAAAAAgUAAAAMdXNlckxhc3RWb3RlBQAAAAR2b3RlBQAAAANuaWwEAAAAFWtleVVzZXJMYXN0Vm90ZUFtb3VudAkBAAAAC2tleVVzZXJWb3RlAAAAAgUAAAALdXNlckFkZHJlc3MFAAAADHVzZXJMYXN0Vm90ZQQAAAAQdG90YWxMYXN0Vm90ZUtleQkABLkAAAACCQAETAAAAAICAAAABHZvdGUJAARMAAAAAgUAAAAMdXNlckxhc3RWb3RlBQAAAANuaWwCAAAAAV8EAAAAE2xhc3RWb3RlVG90YWxBbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAQdG90YWxMYXN0Vm90ZUtleQAAAAAAAAAAAAQAAAAUbGFzdFZvdGVCeVVzZXJBbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAVa2V5VXNlckxhc3RWb3RlQW1vdW50AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABVrZXlVc2VyTGFzdFZvdGVBbW91bnQAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEHRvdGFsTGFzdFZvdGVLZXkJAABlAAAAAgUAAAATbGFzdFZvdGVUb3RhbEFtb3VudAUAAAAUbGFzdFZvdGVCeVVzZXJBbW91bnQFAAAAA25pbAMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAAAloZWlnaHRFbmQJAAACAAAAAQIAAAANdm90ZSBmaW5pc2hlZAkABE4AAAACBQAAABJyZWR1Y2VPbGRVc2VyVm90ZXMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEHRvdGFsVGhpc1ZvdGVLZXkJAABlAAAAAgkAAGQAAAACBQAAABN0b3RhbFRoaXNWb3RlQW1vdW50BQAAAA91c2VyVm90aW5nUG93ZXIFAAAAH3JlbW92ZUFtb3VudEZvclByZXZpb3VzU2FtZVZvdGUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD3VzZXJUaGlzVm90ZUtleQUAAAAPdXNlclZvdGluZ1Bvd2VyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAD3VzZXJMYXN0Vm90ZUtleQUAAAAEdm90ZQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAABtS8hK", "height": 1993997, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: J3FSn1T8kkUFB6ZUx7Njd1iddvdh5oW3NNgcxEF8FnzM Next: none Diff:
Old | New | Differences | |
---|---|---|---|
5 | 5 | ||
6 | 6 | let assetsString = valueOrErrorMessage(getString(this, "available_assets"), "Assets list is not specified in state") | |
7 | 7 | ||
8 | - | func asSwapParamsSTRUCT (val) = match val { | |
9 | - | case struct: (Int, Int, Int, Int, Int) => | |
10 | - | struct | |
8 | + | func asAnyList (val) = match val { | |
9 | + | case valAnyLyst: List[Any] => | |
10 | + | valAnyLyst | |
11 | + | case _ => | |
12 | + | throw("fail to cast into List[Any]") | |
13 | + | } | |
14 | + | ||
15 | + | ||
16 | + | func asInt (val) = match val { | |
17 | + | case valInt: Int => | |
18 | + | valInt | |
11 | 19 | case _ => | |
12 | 20 | throw("fail to cast into Int") | |
13 | 21 | } | |
14 | 22 | ||
15 | 23 | ||
16 | - | let | |
24 | + | let nsbtStakingContract = Address(base58'3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J') | |
17 | 25 | ||
18 | 26 | let availableVotes = split(assetsString, ",") | |
19 | 27 | ||
32 | 40 | if ((containsElement(availableVotes, vote) == false)) | |
33 | 41 | then throw("Incorrect vote!") | |
34 | 42 | else { | |
35 | - | let $t012701447 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddress, 0], nil)) | |
36 | - | let limitMaxUsdn = $t012701447._1 | |
37 | - | let limitSpent = $t012701447._2 | |
38 | - | let blcks2LmtReset = $t012701447._3 | |
39 | - | let gnsbtAmt = $t012701447._4 | |
40 | - | let gnsbtAmtTotal = $t012701447._5 | |
41 | - | let userVotingPower = gnsbtAmt | |
42 | - | let totalThisVoteKey = makeString(["vote", vote], "_") | |
43 | - | let totalThisVoteAmount = valueOrElse(getInteger(this, totalThisVoteKey), 0) | |
44 | - | let userThisVoteKey = keyUserVote(userAddress, vote) | |
45 | - | let userLastVoteKey = keyUserLastVote(userAddress) | |
46 | - | let userLastVote = valueOrElse(getString(this, userLastVoteKey), vote) | |
47 | - | let removeAmountForPreviousSameVote = if ((userLastVote == vote)) | |
48 | - | then valueOrElse(getInteger(this, userThisVoteKey), 0) | |
49 | - | else 0 | |
50 | - | let reduceOldUserVotes = if ((userLastVote == vote)) | |
51 | - | then nil | |
52 | - | else { | |
53 | - | let keyUserLastVoteAmount = keyUserVote(userAddress, userLastVote) | |
54 | - | let totalLastVoteKey = makeString(["vote", userLastVote], "_") | |
55 | - | let lastVoteTotalAmount = valueOrElse(getInteger(this, totalLastVoteKey), 0) | |
56 | - | let lastVoteByUserAmount = valueOrElse(getInteger(this, keyUserLastVoteAmount), 0) | |
43 | + | let nsbtData = asAnyList(invoke(nsbtStakingContract, "nsbtStakingSYSREADONLY", [userAddress], nil)) | |
44 | + | if ((nsbtData == nsbtData)) | |
45 | + | then { | |
46 | + | let userVotingPower = asInt(nsbtData[0]) | |
47 | + | let totalThisVoteKey = makeString(["vote", vote], "_") | |
48 | + | let totalThisVoteAmount = valueOrElse(getInteger(this, totalThisVoteKey), 0) | |
49 | + | let userThisVoteKey = keyUserVote(userAddress, vote) | |
50 | + | let userLastVoteKey = keyUserLastVote(userAddress) | |
51 | + | let userLastVote = valueOrElse(getString(this, userLastVoteKey), vote) | |
52 | + | let removeAmountForPreviousSameVote = if ((userLastVote == vote)) | |
53 | + | then valueOrElse(getInteger(this, userThisVoteKey), 0) | |
54 | + | else 0 | |
55 | + | let reduceOldUserVotes = if ((userLastVote == vote)) | |
56 | + | then nil | |
57 | + | else { | |
58 | + | let keyUserLastVoteAmount = keyUserVote(userAddress, userLastVote) | |
59 | + | let totalLastVoteKey = makeString(["vote", userLastVote], "_") | |
60 | + | let lastVoteTotalAmount = valueOrElse(getInteger(this, totalLastVoteKey), 0) | |
61 | + | let lastVoteByUserAmount = valueOrElse(getInteger(this, keyUserLastVoteAmount), 0) | |
57 | 62 | [IntegerEntry(keyUserLastVoteAmount, 0), IntegerEntry(totalLastVoteKey, (lastVoteTotalAmount - lastVoteByUserAmount))] | |
63 | + | } | |
64 | + | if ((height >= heightEnd)) | |
65 | + | then throw("vote finished") | |
66 | + | else (reduceOldUserVotes ++ [IntegerEntry(totalThisVoteKey, ((totalThisVoteAmount + userVotingPower) - removeAmountForPreviousSameVote)), IntegerEntry(userThisVoteKey, userVotingPower), StringEntry(userLastVoteKey, vote)]) | |
58 | 67 | } | |
59 | - | if ((height >= heightEnd)) | |
60 | - | then throw("vote finished") | |
61 | - | else (reduceOldUserVotes ++ [IntegerEntry(totalThisVoteKey, ((totalThisVoteAmount + userVotingPower) - removeAmountForPreviousSameVote)), IntegerEntry(userThisVoteKey, userVotingPower), StringEntry(userLastVoteKey, vote)]) | |
68 | + | else throw("Strict value is not equal to itself.") | |
62 | 69 | } | |
63 | 70 | } | |
64 | 71 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let heightEnd = valueOrErrorMessage(getInteger(this, "height_end"), "height_end is not specified in state") | |
5 | 5 | ||
6 | 6 | let assetsString = valueOrErrorMessage(getString(this, "available_assets"), "Assets list is not specified in state") | |
7 | 7 | ||
8 | - | func asSwapParamsSTRUCT (val) = match val { | |
9 | - | case struct: (Int, Int, Int, Int, Int) => | |
10 | - | struct | |
8 | + | func asAnyList (val) = match val { | |
9 | + | case valAnyLyst: List[Any] => | |
10 | + | valAnyLyst | |
11 | + | case _ => | |
12 | + | throw("fail to cast into List[Any]") | |
13 | + | } | |
14 | + | ||
15 | + | ||
16 | + | func asInt (val) = match val { | |
17 | + | case valInt: Int => | |
18 | + | valInt | |
11 | 19 | case _ => | |
12 | 20 | throw("fail to cast into Int") | |
13 | 21 | } | |
14 | 22 | ||
15 | 23 | ||
16 | - | let | |
24 | + | let nsbtStakingContract = Address(base58'3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J') | |
17 | 25 | ||
18 | 26 | let availableVotes = split(assetsString, ",") | |
19 | 27 | ||
20 | 28 | func keyUserBalance (userAddr) = makeString(["balance", toString(userAddr)], "_") | |
21 | 29 | ||
22 | 30 | ||
23 | 31 | func keyUserVote (userAddr,vote) = makeString(["vote", userAddr, vote], "_") | |
24 | 32 | ||
25 | 33 | ||
26 | 34 | func keyUserLastVote (userAddr) = makeString(["last_vote", userAddr], "_") | |
27 | 35 | ||
28 | 36 | ||
29 | 37 | @Callable(contextObj) | |
30 | 38 | func castVote (vote) = { | |
31 | 39 | let userAddress = toString(contextObj.caller) | |
32 | 40 | if ((containsElement(availableVotes, vote) == false)) | |
33 | 41 | then throw("Incorrect vote!") | |
34 | 42 | else { | |
35 | - | let $t012701447 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddress, 0], nil)) | |
36 | - | let limitMaxUsdn = $t012701447._1 | |
37 | - | let limitSpent = $t012701447._2 | |
38 | - | let blcks2LmtReset = $t012701447._3 | |
39 | - | let gnsbtAmt = $t012701447._4 | |
40 | - | let gnsbtAmtTotal = $t012701447._5 | |
41 | - | let userVotingPower = gnsbtAmt | |
42 | - | let totalThisVoteKey = makeString(["vote", vote], "_") | |
43 | - | let totalThisVoteAmount = valueOrElse(getInteger(this, totalThisVoteKey), 0) | |
44 | - | let userThisVoteKey = keyUserVote(userAddress, vote) | |
45 | - | let userLastVoteKey = keyUserLastVote(userAddress) | |
46 | - | let userLastVote = valueOrElse(getString(this, userLastVoteKey), vote) | |
47 | - | let removeAmountForPreviousSameVote = if ((userLastVote == vote)) | |
48 | - | then valueOrElse(getInteger(this, userThisVoteKey), 0) | |
49 | - | else 0 | |
50 | - | let reduceOldUserVotes = if ((userLastVote == vote)) | |
51 | - | then nil | |
52 | - | else { | |
53 | - | let keyUserLastVoteAmount = keyUserVote(userAddress, userLastVote) | |
54 | - | let totalLastVoteKey = makeString(["vote", userLastVote], "_") | |
55 | - | let lastVoteTotalAmount = valueOrElse(getInteger(this, totalLastVoteKey), 0) | |
56 | - | let lastVoteByUserAmount = valueOrElse(getInteger(this, keyUserLastVoteAmount), 0) | |
43 | + | let nsbtData = asAnyList(invoke(nsbtStakingContract, "nsbtStakingSYSREADONLY", [userAddress], nil)) | |
44 | + | if ((nsbtData == nsbtData)) | |
45 | + | then { | |
46 | + | let userVotingPower = asInt(nsbtData[0]) | |
47 | + | let totalThisVoteKey = makeString(["vote", vote], "_") | |
48 | + | let totalThisVoteAmount = valueOrElse(getInteger(this, totalThisVoteKey), 0) | |
49 | + | let userThisVoteKey = keyUserVote(userAddress, vote) | |
50 | + | let userLastVoteKey = keyUserLastVote(userAddress) | |
51 | + | let userLastVote = valueOrElse(getString(this, userLastVoteKey), vote) | |
52 | + | let removeAmountForPreviousSameVote = if ((userLastVote == vote)) | |
53 | + | then valueOrElse(getInteger(this, userThisVoteKey), 0) | |
54 | + | else 0 | |
55 | + | let reduceOldUserVotes = if ((userLastVote == vote)) | |
56 | + | then nil | |
57 | + | else { | |
58 | + | let keyUserLastVoteAmount = keyUserVote(userAddress, userLastVote) | |
59 | + | let totalLastVoteKey = makeString(["vote", userLastVote], "_") | |
60 | + | let lastVoteTotalAmount = valueOrElse(getInteger(this, totalLastVoteKey), 0) | |
61 | + | let lastVoteByUserAmount = valueOrElse(getInteger(this, keyUserLastVoteAmount), 0) | |
57 | 62 | [IntegerEntry(keyUserLastVoteAmount, 0), IntegerEntry(totalLastVoteKey, (lastVoteTotalAmount - lastVoteByUserAmount))] | |
63 | + | } | |
64 | + | if ((height >= heightEnd)) | |
65 | + | then throw("vote finished") | |
66 | + | else (reduceOldUserVotes ++ [IntegerEntry(totalThisVoteKey, ((totalThisVoteAmount + userVotingPower) - removeAmountForPreviousSameVote)), IntegerEntry(userThisVoteKey, userVotingPower), StringEntry(userLastVoteKey, vote)]) | |
58 | 67 | } | |
59 | - | if ((height >= heightEnd)) | |
60 | - | then throw("vote finished") | |
61 | - | else (reduceOldUserVotes ++ [IntegerEntry(totalThisVoteKey, ((totalThisVoteAmount + userVotingPower) - removeAmountForPreviousSameVote)), IntegerEntry(userThisVoteKey, userVotingPower), StringEntry(userLastVoteKey, vote)]) | |
68 | + | else throw("Strict value is not equal to itself.") | |
62 | 69 | } | |
63 | 70 | } | |
64 | 71 | ||
65 | 72 |
github/deemru/w8io/169f3d6 32.36 ms ◑![]()