tx · 4hjhVa9avX3SA43YBAFMtMMKqFkjQVTgMa8uHVMARvkd

3P4dgXSMby8XiF7f7dby1wCzLbkYHZY9gd3:  -0.00500000 Waves

2022.09.20 15:11 [3302891] smart account 3P4dgXSMby8XiF7f7dby1wCzLbkYHZY9gd3 > SELF 0.00000000 Waves

{ "type": 13, "id": "4hjhVa9avX3SA43YBAFMtMMKqFkjQVTgMa8uHVMARvkd", "fee": 500000, "feeAssetId": null, "timestamp": 1663675962368, "version": 1, "sender": "3P4dgXSMby8XiF7f7dby1wCzLbkYHZY9gd3", "senderPublicKey": "6BDK9EfwxBV71JDR9eE96szFTZTyXfwhNZAxou9UPij8", "proofs": [ "5h9S2UvxryBF6HtayFqjMR22BBWVnqR8UxBbLaSFyTRaR4sfrj5hT279nzzMWMihcVWrtofhRAvjLz8misaYN5f2" ], "script": "base64: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AAAAAgUAAAALdXNlckFkZHJlc3MJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAAANuaWwEAAAAEm5ld1VzZXJWb3RpbmdQb3dlcgkAAGQAAAACCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAACG5zYnREYXRhAAAAAAAAAAAABQAAAA1nbnNidEZyb21TdXJmAwkAAGcAAAACAAAAAAAAAAAABQAAABJuZXdVc2VyVm90aW5nUG93ZXIJAAACAAAAAQIAAAAYbm90IGVub3VnaCBnbnNidCB0byB2b3RlBAAAABJzZWxlY3RlZE9wdGlvbnNBcnIJAAS1AAAAAgUAAAAWbmV3VXNlclNlbGVjdGVkT3B0aW9ucwIAAAABOgQAAAARcHJldlVzZXJDaG9pY2VLRVkJAQAAAA9rZXlVc2VyTGFzdFZvdGUAAAABBQAAAAt1c2VyQWRkcmVzcwQAAAAXcHJldlVzZXJTZWxlY3RlZE9wdGlvbnMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAARcHJldlVzZXJDaG9pY2VLRVkFAAAAFm5ld1VzZXJTZWxlY3RlZE9wdGlvbnMEAAAAGnByZXZVc2VyU2VsZWN0ZWRPcHRpb25zQXJyCQAEtQAAAAIFAAAAF3ByZXZVc2VyU2VsZWN0ZWRPcHRpb25zAgAAAAE6BAAAABZwcmV2VXNlclZvdGluZ1Bvd2VyS0VZCQEAAAASa2V5VXNlclZvdGluZ1Bvd2VyAAAAAQUAAAALdXNlckFkZHJlc3MEAAAAE3ByZXZVc2VyVm90aW5nUG93ZXIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAWcHJldlVzZXJWb3RpbmdQb3dlcktFWQAAAAAAAAAAAAoBAAAADHJlZnJlc2hWb3RlcwAAAAIAAAAEZGF0YQAAAANpZHgEAAAADW5ld1VzZXJDaG9pY2UJAAGRAAAAAgUAAAASc2VsZWN0ZWRPcHRpb25zQXJyBQAAAANpZHgEAAAADnByZXZVc2VyQ2hvaWNlCQABkQAAAAIFAAAAGnByZXZVc2VyU2VsZWN0ZWRPcHRpb25zQXJyBQAAAANpZHgEAAAAE25ld1RvdGFsQnlDaG9pY2VLRVkJAAS5AAAAAgkABEwAAAACAgAAAAR2b3RlCQAETAAAAAIFAAAADW5ld1VzZXJDaG9pY2UFAAAAA25pbAIAAAABXwQAAAAWbmV3VG90YWxCeUNob2ljZUFtb3VudAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABNuZXdUb3RhbEJ5Q2hvaWNlS0VZAAAAAAAAAAAABAAAABRwcmV2VG90YWxCeUNob2ljZUtFWQkABLkAAAACCQAETAAAAAICAAAABHZvdGUJAARMAAAAAgUAAAAOcHJldlVzZXJDaG9pY2UFAAAAA25pbAIAAAABXwQAAAAXcHJldlRvdGFsQnlDaG9pY2VBbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAUcHJldlRvdGFsQnlDaG9pY2VLRVkAAAAAAAAAAAAEAAAADXJlZnJlc2hUb3RhbHMDCQEAAAACIT0AAAACBQAAAA1uZXdVc2VyQ2hvaWNlBQAAAA5wcmV2VXNlckNob2ljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAUcHJldlRvdGFsQnlDaG9pY2VLRVkJAABlAAAAAgUAAAAXcHJldlRvdGFsQnlDaG9pY2VBbW91bnQFAAAAE3ByZXZVc2VyVm90aW5nUG93ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE25ld1RvdGFsQnlDaG9pY2VLRVkJAABkAAAAAgUAAAAWbmV3VG90YWxCeUNob2ljZUFtb3VudAUAAAASbmV3VXNlclZvdGluZ1Bvd2VyBQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE25ld1RvdGFsQnlDaG9pY2VLRVkJAABlAAAAAgkAAGQAAAACBQAAABZuZXdUb3RhbEJ5Q2hvaWNlQW1vdW50BQAAABJuZXdVc2VyVm90aW5nUG93ZXIFAAAAE3ByZXZVc2VyVm90aW5nUG93ZXIFAAAAA25pbAkABE4AAAACBQAAAARkYXRhBQAAAA1yZWZyZXNoVG90YWxzBAAAAAVpZHhlcwkABEwAAAACAAAAAAAAAAAACQAETAAAAAIAAAAAAAAAAAEFAAAAA25pbAkABE4AAAACCgAAAAACJGwFAAAABWlkeGVzCgAAAAACJHMJAAGQAAAAAQUAAAACJGwKAAAAAAUkYWNjMAUAAAADbmlsCgEAAAAFJGYwXzEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAAMcmVmcmVzaFZvdGVzAAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAAFJGYwXzIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAE0xpc3Qgc2l6ZSBleGNlZWRzIDIJAQAAAAUkZjBfMgAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABZwcmV2VXNlclZvdGluZ1Bvd2VyS0VZBQAAABJuZXdVc2VyVm90aW5nUG93ZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAARcHJldlVzZXJDaG9pY2VLRVkFAAAAFm5ld1VzZXJTZWxlY3RlZE9wdGlvbnMFAAAAA25pbAAAAAAkRF2K", "chainId": 87, "height": 3302891, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5oJYkzKQXtLCaLq1FFV4ND5xzh5143wo9msh7cnHTVQ5 Next: 3cNdTqrUgu3ayaEUKTUKfZdMVWYRHSELKSEfQHVD57pe Diff:
OldNewDifferences
2323
2424 let nsbtStakingContract = Address(base58'3P8w8NXZUtYdCA13tHbDY5sW4mC27ZFJgG3')
2525
26+let surfStakingContract = Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C')
27+
2628 let availableVotes = split(assetsString, ",")
2729
2830 func keyUserBalance (userAddr) = makeString(["balance", toString(userAddr)], "_")
4244 else if ((height >= heightEnd))
4345 then throw("vote finished")
4446 else {
47+ let surfData = asAnyList(invoke(surfStakingContract, "surfStakingSYSREADONLY", [userAddress, 0], nil))
48+ let gnsbtFromSurfEffectiveHeight = asInt(surfData[4])
49+ let gnsbtFromSurf = if ((gnsbtFromSurfEffectiveHeight > heightEnd))
50+ then 0
51+ else asInt(surfData[2])
4552 let nsbtData = asAnyList(invoke(nsbtStakingContract, "nsbtStakingSYSREADONLY", [userAddress, 0], nil))
46- let newUserVotingPower = asInt(nsbtData[0])
53+ let newUserVotingPower = (asInt(nsbtData[0]) + gnsbtFromSurf)
4754 if ((0 >= newUserVotingPower))
4855 then throw("not enough gnsbt to vote")
4956 else {
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
88 func asAnyList (val) = match val {
99 case valAnyLyst: List[Any] =>
1010 valAnyLyst
1111 case _ =>
1212 throw("fail to cast into List[Any]")
1313 }
1414
1515
1616 func asInt (val) = match val {
1717 case valInt: Int =>
1818 valInt
1919 case _ =>
2020 throw("fail to cast into Int")
2121 }
2222
2323
2424 let nsbtStakingContract = Address(base58'3P8w8NXZUtYdCA13tHbDY5sW4mC27ZFJgG3')
2525
26+let surfStakingContract = Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C')
27+
2628 let availableVotes = split(assetsString, ",")
2729
2830 func keyUserBalance (userAddr) = makeString(["balance", toString(userAddr)], "_")
2931
3032
3133 func keyUserVotingPower (userAddr) = makeString(["votingPower", userAddr], "_")
3234
3335
3436 func keyUserLastVote (userAddr) = makeString(["last_vote", userAddr], "_")
3537
3638
3739 @Callable(contextObj)
3840 func castVote (newUserSelectedOptions) = {
3941 let userAddress = toString(contextObj.caller)
4042 if ((containsElement(availableVotes, newUserSelectedOptions) == false))
4143 then throw("Incorrect vote!")
4244 else if ((height >= heightEnd))
4345 then throw("vote finished")
4446 else {
47+ let surfData = asAnyList(invoke(surfStakingContract, "surfStakingSYSREADONLY", [userAddress, 0], nil))
48+ let gnsbtFromSurfEffectiveHeight = asInt(surfData[4])
49+ let gnsbtFromSurf = if ((gnsbtFromSurfEffectiveHeight > heightEnd))
50+ then 0
51+ else asInt(surfData[2])
4552 let nsbtData = asAnyList(invoke(nsbtStakingContract, "nsbtStakingSYSREADONLY", [userAddress, 0], nil))
46- let newUserVotingPower = asInt(nsbtData[0])
53+ let newUserVotingPower = (asInt(nsbtData[0]) + gnsbtFromSurf)
4754 if ((0 >= newUserVotingPower))
4855 then throw("not enough gnsbt to vote")
4956 else {
5057 let selectedOptionsArr = split(newUserSelectedOptions, ":")
5158 let prevUserChoiceKEY = keyUserLastVote(userAddress)
5259 let prevUserSelectedOptions = valueOrElse(getString(this, prevUserChoiceKEY), newUserSelectedOptions)
5360 let prevUserSelectedOptionsArr = split(prevUserSelectedOptions, ":")
5461 let prevUserVotingPowerKEY = keyUserVotingPower(userAddress)
5562 let prevUserVotingPower = valueOrElse(getInteger(this, prevUserVotingPowerKEY), 0)
5663 func refreshVotes (data,idx) = {
5764 let newUserChoice = selectedOptionsArr[idx]
5865 let prevUserChoice = prevUserSelectedOptionsArr[idx]
5966 let newTotalByChoiceKEY = makeString(["vote", newUserChoice], "_")
6067 let newTotalByChoiceAmount = valueOrElse(getInteger(this, newTotalByChoiceKEY), 0)
6168 let prevTotalByChoiceKEY = makeString(["vote", prevUserChoice], "_")
6269 let prevTotalByChoiceAmount = valueOrElse(getInteger(this, prevTotalByChoiceKEY), 0)
6370 let refreshTotals = if ((newUserChoice != prevUserChoice))
6471 then [IntegerEntry(prevTotalByChoiceKEY, (prevTotalByChoiceAmount - prevUserVotingPower)), IntegerEntry(newTotalByChoiceKEY, (newTotalByChoiceAmount + newUserVotingPower))]
6572 else [IntegerEntry(newTotalByChoiceKEY, ((newTotalByChoiceAmount + newUserVotingPower) - prevUserVotingPower))]
6673 (data ++ refreshTotals)
6774 }
6875
6976 let idxes = [0, 1]
7077 ({
7178 let $l = idxes
7279 let $s = size($l)
7380 let $acc0 = nil
7481 func $f0_1 ($a,$i) = if (($i >= $s))
7582 then $a
7683 else refreshVotes($a, $l[$i])
7784
7885 func $f0_2 ($a,$i) = if (($i >= $s))
7986 then $a
8087 else throw("List size exceeds 2")
8188
8289 $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
8390 } ++ [IntegerEntry(prevUserVotingPowerKEY, newUserVotingPower), StringEntry(prevUserChoiceKEY, newUserSelectedOptions)])
8491 }
8592 }
8693 }
8794
8895

github/deemru/w8io/0e76f2f 
34.77 ms