tx · CKFaq8MYYZEh9dntNJW931hQFBQhaGomjhZQhxuADrLU

3MsmgWBZKrHwbVbSQiqmStRiFyg5hkfxxa2:  -0.00400000 Waves

2022.09.20 12:12 [2237269] smart account 3MsmgWBZKrHwbVbSQiqmStRiFyg5hkfxxa2 > SELF 0.00000000 Waves

{ "type": 13, "id": "CKFaq8MYYZEh9dntNJW931hQFBQhaGomjhZQhxuADrLU", "fee": 400000, "feeAssetId": null, "timestamp": 1663665213960, "version": 2, "chainId": 84, "sender": "3MsmgWBZKrHwbVbSQiqmStRiFyg5hkfxxa2", "senderPublicKey": "9TejtrnvgE7MvzMR4DcLbf3dqUzovyt4BKEmCsqha2z", "proofs": [ "2Pa4hDGa5haM826F14ZdwqJSL5connDGKjWoHH8PgkZ5uazxMzp6HQhsQtrL3zYjiJSikgMAmqEpysVdbMZH5ZeA" ], "script": "base64:AAIFAAAAAAAAAAcIAhIDCgEIAAAACQAAAAAJaGVpZ2h0RW5kCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwIAAAAKaGVpZ2h0X2VuZAIAAAAkaGVpZ2h0X2VuZCBpcyBub3Qgc3BlY2lmaWVkIGluIHN0YXRlAAAAAAxhc3NldHNTdHJpbmcJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzAgAAABBhdmFpbGFibGVfYXNzZXRzAgAAACVBc3NldHMgbGlzdCBpcyBub3Qgc3BlY2lmaWVkIGluIHN0YXRlAQAAAAlhc0FueUxpc3QAAAABAAAAA3ZhbAQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAlMaXN0W0FueV0EAAAACnZhbEFueUx5c3QFAAAAByRtYXRjaDAFAAAACnZhbEFueUx5c3QJAAACAAAAAQIAAAAbZmFpbCB0byBjYXN0IGludG8gTGlzdFtBbnldAQAAAAVhc0ludAAAAAEAAAADdmFsBAAAAAckbWF0Y2gwBQAAAAN2YWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAGdmFsSW50BQAAAAckbWF0Y2gwBQAAAAZ2YWxJbnQJAAACAAAAAQIAAAAVZmFpbCB0byBjYXN0IGludG8gSW50AAAAABNuc2J0U3Rha2luZ0NvbnRyYWN0CQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUOrz+4umfUdrssqn6lKJS7u88U0ntbQvvAAAAAA5hdmFpbGFibGVWb3RlcwkABLUAAAACBQAAAAxhc3NldHNTdHJpbmcCAAAAASwBAAAADmtleVVzZXJCYWxhbmNlAAAAAQAAAAh1c2VyQWRkcgkABLkAAAACCQAETAAAAAICAAAAB2JhbGFuY2UJAARMAAAAAgkABCUAAAABBQAAAAh1c2VyQWRkcgUAAAADbmlsAgAAAAFfAQAAABJrZXlVc2VyVm90aW5nUG93ZXIAAAABAAAACHVzZXJBZGRyCQAEuQAAAAIJAARMAAAAAgIAAAALdm90aW5nUG93ZXIJAARMAAAAAgUAAAAIdXNlckFkZHIFAAAAA25pbAIAAAABXwEAAAAPa2V5VXNlckxhc3RWb3RlAAAAAQAAAAh1c2VyQWRkcgkABLkAAAACCQAETAAAAAICAAAACWxhc3Rfdm90ZQkABEwAAAACBQAAAAh1c2VyQWRkcgUAAAADbmlsAgAAAAFfAAAAAQAAAApjb250ZXh0T2JqAQAAAAhjYXN0Vm90ZQAAAAEAAAAWbmV3VXNlclNlbGVjdGVkT3B0aW9ucwQAAAALdXNlckFkZHJlc3MJAAQlAAAAAQgFAAAACmNvbnRleHRPYmoAAAAGY2FsbGVyAwkAAAAAAAACCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAOYXZhaWxhYmxlVm90ZXMFAAAAFm5ld1VzZXJTZWxlY3RlZE9wdGlvbnMHCQAAAgAAAAECAAAAD0luY29ycmVjdCB2b3RlIQMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAAAloZWlnaHRFbmQJAAACAAAAAQIAAAANdm90ZSBmaW5pc2hlZAQAAAAIbnNidERhdGEJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAAE25zYnRTdGFraW5nQ29udHJhY3QCAAAAFm5zYnRTdGFraW5nU1lTUkVBRE9OTFkJAARMAAAAAgUAAAALdXNlckFkZHJlc3MJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAAANuaWwEAAAAEm5ld1VzZXJWb3RpbmdQb3dlcgkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAAhuc2J0RGF0YQAAAAAAAAAAAAQAAAASc2VsZWN0ZWRPcHRpb25zQXJyCQAEtQAAAAIFAAAAFm5ld1VzZXJTZWxlY3RlZE9wdGlvbnMCAAAAAToEAAAAEXByZXZVc2VyQ2hvaWNlS0VZCQEAAAAPa2V5VXNlckxhc3RWb3RlAAAAAQUAAAALdXNlckFkZHJlc3MEAAAAF3ByZXZVc2VyU2VsZWN0ZWRPcHRpb25zCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAEXByZXZVc2VyQ2hvaWNlS0VZBQAAABZuZXdVc2VyU2VsZWN0ZWRPcHRpb25zBAAAABpwcmV2VXNlclNlbGVjdGVkT3B0aW9uc0FycgkABLUAAAACBQAAABdwcmV2VXNlclNlbGVjdGVkT3B0aW9ucwIAAAABOgQAAAAWcHJldlVzZXJWb3RpbmdQb3dlcktFWQkBAAAAEmtleVVzZXJWb3RpbmdQb3dlcgAAAAEFAAAAC3VzZXJBZGRyZXNzBAAAABNwcmV2VXNlclZvdGluZ1Bvd2VyCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAFnByZXZVc2VyVm90aW5nUG93ZXJLRVkAAAAAAAAAAAAKAQAAAAxyZWZyZXNoVm90ZXMAAAACAAAABGRhdGEAAAADaWR4BAAAAA1uZXdVc2VyQ2hvaWNlCQABkQAAAAIFAAAAEnNlbGVjdGVkT3B0aW9uc0FycgUAAAADaWR4BAAAAA5wcmV2VXNlckNob2ljZQkAAZEAAAACBQAAABpwcmV2VXNlclNlbGVjdGVkT3B0aW9uc0FycgUAAAADaWR4BAAAABNuZXdUb3RhbEJ5Q2hvaWNlS0VZCQAEuQAAAAIJAARMAAAAAgIAAAAEdm90ZQkABEwAAAACBQAAAA1uZXdVc2VyQ2hvaWNlBQAAAANuaWwCAAAAAV8EAAAAFm5ld1RvdGFsQnlDaG9pY2VBbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAATbmV3VG90YWxCeUNob2ljZUtFWQAAAAAAAAAAAAQAAAAUcHJldlRvdGFsQnlDaG9pY2VLRVkJAAS5AAAAAgkABEwAAAACAgAAAAR2b3RlCQAETAAAAAIFAAAADnByZXZVc2VyQ2hvaWNlBQAAAANuaWwCAAAAAV8EAAAAF3ByZXZUb3RhbEJ5Q2hvaWNlQW1vdW50CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAFHByZXZUb3RhbEJ5Q2hvaWNlS0VZAAAAAAAAAAAABAAAAA1yZWZyZXNoVG90YWxzAwkBAAAAAiE9AAAAAgUAAAANbmV3VXNlckNob2ljZQUAAAAOcHJldlVzZXJDaG9pY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFHByZXZUb3RhbEJ5Q2hvaWNlS0VZCQAAZQAAAAIFAAAAF3ByZXZUb3RhbEJ5Q2hvaWNlQW1vdW50BQAAABNwcmV2VXNlclZvdGluZ1Bvd2VyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNuZXdUb3RhbEJ5Q2hvaWNlS0VZCQAAZAAAAAIFAAAAFm5ld1RvdGFsQnlDaG9pY2VBbW91bnQFAAAAEm5ld1VzZXJWb3RpbmdQb3dlcgUAAAADbmlsCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNuZXdUb3RhbEJ5Q2hvaWNlS0VZCQAAZQAAAAIJAABkAAAAAgUAAAAWbmV3VG90YWxCeUNob2ljZUFtb3VudAUAAAASbmV3VXNlclZvdGluZ1Bvd2VyBQAAABNwcmV2VXNlclZvdGluZ1Bvd2VyBQAAAANuaWwJAAROAAAAAgUAAAAEZGF0YQUAAAANcmVmcmVzaFRvdGFscwQAAAAFaWR4ZXMJAARMAAAAAgAAAAAAAAAAAAkABEwAAAACAAAAAAAAAAABBQAAAANuaWwJAAROAAAAAgoAAAAAAiRsBQAAAAVpZHhlcwoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzAFAAAAA25pbAoBAAAABSRmMF8xAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkBAAAADHJlZnJlc2hWb3RlcwAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAABSRmMF8yAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkAAAIAAAABAgAAABNMaXN0IHNpemUgZXhjZWVkcyAyCQEAAAAFJGYwXzIAAAACCQEAAAAFJGYwXzEAAAACCQEAAAAFJGYwXzEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAWcHJldlVzZXJWb3RpbmdQb3dlcktFWQUAAAASbmV3VXNlclZvdGluZ1Bvd2VyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEXByZXZVc2VyQ2hvaWNlS0VZBQAAABZuZXdVc2VyU2VsZWN0ZWRPcHRpb25zBQAAAANuaWwAAAAAJ2HzXg==", "height": 2237269, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6senFtP8RRHEmvH8sC2hgR5bQV8y9EENEWihz3dTXnYa Next: none 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'3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J')
2525
2626 let availableVotes = split(assetsString, ",")
2727
2828 func keyUserBalance (userAddr) = makeString(["balance", toString(userAddr)], "_")
2929
3030
3131 func keyUserVotingPower (userAddr) = makeString(["votingPower", userAddr], "_")
3232
3333
3434 func keyUserLastVote (userAddr) = makeString(["last_vote", userAddr], "_")
3535
3636
3737 @Callable(contextObj)
3838 func castVote (newUserSelectedOptions) = {
3939 let userAddress = toString(contextObj.caller)
4040 if ((containsElement(availableVotes, newUserSelectedOptions) == false))
4141 then throw("Incorrect vote!")
4242 else if ((height >= heightEnd))
4343 then throw("vote finished")
4444 else {
4545 let nsbtData = asAnyList(invoke(nsbtStakingContract, "nsbtStakingSYSREADONLY", [userAddress, 0], nil))
4646 let newUserVotingPower = asInt(nsbtData[0])
4747 let selectedOptionsArr = split(newUserSelectedOptions, ":")
4848 let prevUserChoiceKEY = keyUserLastVote(userAddress)
4949 let prevUserSelectedOptions = valueOrElse(getString(this, prevUserChoiceKEY), newUserSelectedOptions)
5050 let prevUserSelectedOptionsArr = split(prevUserSelectedOptions, ":")
5151 let prevUserVotingPowerKEY = keyUserVotingPower(userAddress)
5252 let prevUserVotingPower = valueOrElse(getInteger(this, prevUserVotingPowerKEY), 0)
5353 func refreshVotes (data,idx) = {
5454 let newUserChoice = selectedOptionsArr[idx]
5555 let prevUserChoice = prevUserSelectedOptionsArr[idx]
5656 let newTotalByChoiceKEY = makeString(["vote", newUserChoice], "_")
5757 let newTotalByChoiceAmount = valueOrElse(getInteger(this, newTotalByChoiceKEY), 0)
5858 let prevTotalByChoiceKEY = makeString(["vote", prevUserChoice], "_")
5959 let prevTotalByChoiceAmount = valueOrElse(getInteger(this, prevTotalByChoiceKEY), 0)
6060 let refreshTotals = if ((newUserChoice != prevUserChoice))
6161 then [IntegerEntry(prevTotalByChoiceKEY, (prevTotalByChoiceAmount - prevUserVotingPower)), IntegerEntry(newTotalByChoiceKEY, (newTotalByChoiceAmount + newUserVotingPower))]
6262 else [IntegerEntry(newTotalByChoiceKEY, ((newTotalByChoiceAmount + newUserVotingPower) - prevUserVotingPower))]
6363 (data ++ refreshTotals)
6464 }
6565
6666 let idxes = [0, 1]
6767 ({
6868 let $l = idxes
6969 let $s = size($l)
7070 let $acc0 = nil
7171 func $f0_1 ($a,$i) = if (($i >= $s))
7272 then $a
7373 else refreshVotes($a, $l[$i])
7474
7575 func $f0_2 ($a,$i) = if (($i >= $s))
7676 then $a
7777 else throw("List size exceeds 2")
7878
7979 $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
8080 } ++ [IntegerEntry(prevUserVotingPowerKEY, newUserVotingPower), StringEntry(prevUserChoiceKEY, newUserSelectedOptions)])
8181 }
8282 }
8383
8484

github/deemru/w8io/169f3d6 
41.75 ms