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:
OldNewDifferences
55
66 let assetsString = valueOrErrorMessage(getString(this, "available_assets"), "Assets list is not specified in state")
77
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
1119 case _ =>
1220 throw("fail to cast into Int")
1321 }
1422
1523
16-let neutrinoContract = Address(base58'3N9be2mwrA52WJho6DiesZkk4351GvpnWuj')
24+let nsbtStakingContract = Address(base58'3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J')
1725
1826 let availableVotes = split(assetsString, ",")
1927
3240 if ((containsElement(availableVotes, vote) == false))
3341 then throw("Incorrect vote!")
3442 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)
5762 [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)])
5867 }
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.")
6269 }
6370 }
6471
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let heightEnd = valueOrErrorMessage(getInteger(this, "height_end"), "height_end is not specified in state")
55
66 let assetsString = valueOrErrorMessage(getString(this, "available_assets"), "Assets list is not specified in state")
77
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
1119 case _ =>
1220 throw("fail to cast into Int")
1321 }
1422
1523
16-let neutrinoContract = Address(base58'3N9be2mwrA52WJho6DiesZkk4351GvpnWuj')
24+let nsbtStakingContract = Address(base58'3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J')
1725
1826 let availableVotes = split(assetsString, ",")
1927
2028 func keyUserBalance (userAddr) = makeString(["balance", toString(userAddr)], "_")
2129
2230
2331 func keyUserVote (userAddr,vote) = makeString(["vote", userAddr, vote], "_")
2432
2533
2634 func keyUserLastVote (userAddr) = makeString(["last_vote", userAddr], "_")
2735
2836
2937 @Callable(contextObj)
3038 func castVote (vote) = {
3139 let userAddress = toString(contextObj.caller)
3240 if ((containsElement(availableVotes, vote) == false))
3341 then throw("Incorrect vote!")
3442 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)
5762 [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)])
5867 }
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.")
6269 }
6370 }
6471
6572

github/deemru/w8io/169f3d6 
32.36 ms