tx · 9vHL7r6M9ndfd8VKh1tFWGn3LPm3pCoMpHG6mo8JoZy5

3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T:  -0.01400000 Waves

2022.05.06 11:34 [2039592] smart account 3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T > SELF 0.00000000 Waves

{ "type": 13, "id": "9vHL7r6M9ndfd8VKh1tFWGn3LPm3pCoMpHG6mo8JoZy5", "fee": 1400000, "feeAssetId": null, "timestamp": 1651826068990, "version": 1, "sender": "3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T", "senderPublicKey": "7iXEgsFNsnbLZ3ca4tmz8jffnyxMu9keuBV6CuQPJLuA", "proofs": [ "4Yz4brVuqmbxED5nXeAYhBPMfSnzgbAQSjk8xmu24g1joRKoqA41TAE9YspUcnweQMifpMJcUzpqypmxVva6iQU" ], "script": "base64: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AAIFAAAADWFtb3VudEFzc2V0SWQJAARMAAAAAgUAAAAMcHJpY2VBc3NldElkCQAETAAAAAIFAAAADHZvdGVyQWRkcmVzcwUAAAADbmlsBQAAAAlzZXBhcmF0b3IBAAAADGtleVZvdGVWYWx1ZQAAAAIAAAAJZ3d4QW1vdW50AAAABHZvdGUEAAAAA2tleQMFAAAABHZvdGUJAAS5AAAAAgkABEwAAAACAgAAAAQlZCVzCQAETAAAAAIFAAAACWd3eEFtb3VudAkABEwAAAACAgAAAAN5ZXMFAAAAA25pbAUAAAAJc2VwYXJhdG9yCQAEuQAAAAIJAARMAAAAAgIAAAAEJWQlcwkABEwAAAACBQAAAAlnd3hBbW91bnQJAARMAAAAAgIAAAACbm8FAAAAA25pbAUAAAAJc2VwYXJhdG9yBQAAAANrZXkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABQlc19fbWFuYWdlclB1YmxpY0tleQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAEGVtaXNzaW9uQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAABNrZXlFbWlzc2lvbkNvbnRyYWN0AAAAABB1c2VyUG9vbENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAATa2V5dXNlclBvb2xDb250cmFjdAAAAAAQYm9vc3RpbmdDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAAE2tleUJvb3N0aW5nQ29udHJhY3QAAAAAEmFzc2V0U3RvcmVDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAAFmtleUFzc2V0c1N0b3JlQ29udHJhY3QBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAALbXVzdE1hbmFnZXIAAAABAAAAAWkEAAAAAnBkCQAAAgAAAAECAAAAEVBlcm1pc3Npb24gZGVuaWVkBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAAnBrBgUAAAACcGQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwYFAAAAAnBkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAVhc0ludAAAAAEAAAADdmFsBAAAAAckbWF0Y2gwBQAAAAN2YWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAGdmFsSW50BQAAAAckbWF0Y2gwBQAAAAZ2YWxJbnQJAAACAAAAAQIAAAAbRmFpbGVkIHRvIGNhc3QgaW50byBJbnRlZ2VyAAAACQAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAoAAAAWYXNzZXRzU3RvcmVDb250cmFjdFBybQAAABN1c2VyUG9vbENvbnRyYWN0UHJtAAAAE2Jvb3N0aW5nQ29udHJhY3RQcm0AAAATZW1pc3Npb25Db250cmFjdFBybQAAAAxmZWVBbW91bnRQcm0AAAAMd3hBc3NldElkUHJtAAAAEnZvdGluZ1RocmVzaG9sZFBybQAAABF2b3RpbmdEdXJhdGlvblBybQAAAA51c2RuQXNzZXRJZFBybQAAABFmaW5hbGl6ZVJld2FyZFBybQQAAAAGY2hlY2tzCQAETAAAAAIDCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpBgkAAAIAAAABAgAAAAxNdXN0IG1hbmFnZXIJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEJgAAAAEFAAAAFmFzc2V0c1N0b3JlQ29udHJhY3RQcm0GCQAAAgAAAAECAAAAJEludmFsaWQgYXNzZXRfc3RvcmUgY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQmAAAAAQUAAAATYm9vc3RpbmdDb250cmFjdFBybQYJAAACAAAAAQIAAAAhSW52YWxpZCBib29zdGluZyBjb250cmFjdCBhZGRyZXNzCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkABCYAAAABBQAAABN1c2VyUG9vbENvbnRyYWN0UHJtBgkAAAIAAAABAgAAACNJbnZhbGlkIHVzZXJfcG9vbHMgY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQmAAAAAQUAAAATZW1pc3Npb25Db250cmFjdFBybQYJAAACAAAAAQIAAAAhSW52YWxpZCBlbWlzc2lvbiBjb250cmFjdCBhZGRyZXNzCQAETAAAAAIDCQAAZwAAAAIFAAAADGZlZUFtb3VudFBybQAAAAAAAAAAAAYJAAACAAAAAQIAAAASSW52YWxpZCBmZWUgYW1vdW50CQAETAAAAAIDCQAAZgAAAAIFAAAAEXZvdGluZ0R1cmF0aW9uUHJtAAAAAAAAAAAABgkAAAIAAAABAgAAABdJbnZhbGlkIHZvdGluZyBkdXJhdGlvbgkABEwAAAACAwkAAGYAAAACBQAAABFmaW5hbGl6ZVJld2FyZFBybQAAAAAAAAAAAAYJAAACAAAAAQIAAAAXSW52YWxpZCBmaW5hbGl6ZSByZXdhcmQJAARMAAAAAgMJAABnAAAAAgUAAAASdm90aW5nVGhyZXNob2xkUHJtAAAAAAAAAAAABgkAAAIAAAABAgAAABhJbnZhbGlkIHZvdGluZyB0aHJlc2hvbGQJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAD7AAAAAEJAAJZAAAAAQUAAAAMd3hBc3NldElkUHJtBgkAAAIAAAABAgAAABNJbnZhbGlkIFdYIGFzc2V0IElECQAETAAAAAIDCQEAAAAJaXNEZWZpbmVkAAAAAQkAA+wAAAABCQACWQAAAAEFAAAADnVzZG5Bc3NldElkUHJtBgkAAAIAAAABAgAAABVJbnZhbGlkIFVTRE4gYXNzZXQgSUQFAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MJAAUUAAAAAgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABZrZXlBc3NldHNTdG9yZUNvbnRyYWN0BQAAABZhc3NldHNTdG9yZUNvbnRyYWN0UHJtCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAE2tleXVzZXJQb29sQ29udHJhY3QFAAAAE3VzZXJQb29sQ29udHJhY3RQcm0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAATa2V5RW1pc3Npb25Db250cmFjdAUAAAATZW1pc3Npb25Db250cmFjdFBybQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMa2V5RmVlQW1vdW50BQAAAAxmZWVBbW91bnRQcm0JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEWtleVZvdGluZ0R1cmF0aW9uBQAAABF2b3RpbmdEdXJhdGlvblBybQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa2V5RmluYWxpemVSZXdhcmQFAAAAEWZpbmFsaXplUmV3YXJkUHJtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJrZXlWb3RpbmdUaHJlc2hvbGQFAAAAEnZvdGluZ1RocmVzaG9sZFBybQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAxr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YWN0AgAAAARidXJuBQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQIBQAAAAdwYXltZW50AAAABmFtb3VudAUAAAADbmlsAwkAAAAAAAACBQAAAApidXJuRmVlSW52BQAAAApidXJuRmVlSW52CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAQa2V5SW5MaXN0QXNzZXRJZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAYJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA5rZXlTdGFydEhlaWdodAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAGaGVpZ2h0BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAABHZvdGUAAAADAAAADWFtb3VudEFzc2V0SWQAAAAMcHJpY2VBc3NldElkAAAAB2luRmF2b3IEAAAAEnZvdGluZ0ZpbmlzaEhlaWdodAkAAGQAAAACCQEAAAAFdmFsdWUAAAABCQAEHwAAAAEJAQAAAA5rZXlTdGFydEhlaWdodAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAkBAAAABXZhbHVlAAAAAQkABB8AAAABBQAAABFrZXlWb3RpbmdEdXJhdGlvbgQAAAAGY2hlY2tzCQAETAAAAAIDCQEAAAALdmFsdWVPckVsc2UAAAACCQAEIAAAAAEJAQAAABBrZXlJbkxpc3RBc3NldElkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBwYJAAACAAAAAQIAAAAiVGhlIHRva2VuIGlz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aW5nTWFuYWdlclB1YmxpY0tleQQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQACWQAAAAEFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAAAAAACBQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAOY29uZmlybU1hbmFnZXIAAAAABAAAAAJwbQkBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAFaGFzUE0DCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAFaGFzUE0FAAAABWhhc1BNBAAAAAdjaGVja1BNAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAAB2NoZWNrUE0FAAAAB2NoZWNrUE0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAACQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAPdGFyZ2V0UHVibGljS2V5BAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwBQAAAAJwawMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAD3RhcmdldFB1YmxpY0tleS2UJvs=", "chainId": 84, "height": 2039592, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9mtHfAgaGN7N91fkPGmPhsUBTh3D6wTaYQWxY2A7hnSX Next: 66aDmYgExJDGMj1nKA9pEAZrpsf6rqFUCGu9cuCFQdHj Diff:
OldNewDifferences
88 let keyUsdnAssetId = makeString(["%s", "usdnAssetId"], separator)
99
1010 let keyVotingDuration = makeString(["%s", "epochLength"], separator)
11+
12+let keyFinalizeReward = makeString(["%s", "finalizeReward"], separator)
1113
1214 let keyVotingThreshold = makeString(["%s", "votingThreshold"], separator)
1315
3638 func keyVote (amountAssetId,priceAssetId,voterAddress) = makeString(["%s%s%s%s", "vote", amountAssetId, priceAssetId, voterAddress], separator)
3739
3840
41+func keyVoteValue (gwxAmount,vote) = {
42+ let key = if (vote)
43+ then makeString(["%d%s", gwxAmount, "yes"], separator)
44+ else makeString(["%d%s", gwxAmount, "no"], separator)
45+ key
46+ }
47+
48+
3949 func keyManagerPublicKey () = "%s__managerPublicKey"
4050
4151
4757 let userPoolContract = addressFromStringValue(getStringOrFail(keyuserPoolContract))
4858
4959 let boostingContract = addressFromStringValue(getStringOrFail(keyBoostingContract))
60+
61+let assetStoreContract = addressFromStringValue(getStringOrFail(keyAssetsStoreContract))
5062
5163 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
5264 case s: String =>
94106
95107
96108 @Callable(i)
97-func constructor (assetsStoreContractPrm,userPoolContractPrm,boostingContractPrm,emissionContractPrm,feeAmountPrm,wxAssetIdPrm,votingThresholdPrm,votingDurationPrm,usdnAssetIdPrm) = {
109+func constructor (assetsStoreContractPrm,userPoolContractPrm,boostingContractPrm,emissionContractPrm,feeAmountPrm,wxAssetIdPrm,votingThresholdPrm,votingDurationPrm,usdnAssetIdPrm,finalizeRewardPrm) = {
98110 let checks = [if (mustManager(i))
99111 then true
100112 else throw("Must manager"), if (isDefined(addressFromString(assetsStoreContractPrm)))
109121 then true
110122 else throw("Invalid fee amount"), if ((votingDurationPrm > 0))
111123 then true
112- else throw("Invalid voting duration"), if ((votingThresholdPrm >= 0))
124+ else throw("Invalid voting duration"), if ((finalizeRewardPrm > 0))
125+ then true
126+ else throw("Invalid finalize reward"), if ((votingThresholdPrm >= 0))
113127 then true
114128 else throw("Invalid voting threshold"), if (isDefined(assetInfo(fromBase58String(wxAssetIdPrm))))
115129 then true
117131 then true
118132 else throw("Invalid USDN asset ID")]
119133 if ((checks == checks))
120- then $Tuple2([StringEntry(keyAssetsStoreContract, assetsStoreContractPrm), StringEntry(keyuserPoolContract, userPoolContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), IntegerEntry(keyFeeAmount, feeAmountPrm), IntegerEntry(keyVotingDuration, votingDurationPrm), IntegerEntry(keyVotingThreshold, votingThresholdPrm), StringEntry(keyWxAssetId, wxAssetIdPrm), StringEntry(keyUsdnAssetId, usdnAssetIdPrm)], unit)
134+ then $Tuple2([StringEntry(keyAssetsStoreContract, assetsStoreContractPrm), StringEntry(keyuserPoolContract, userPoolContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), IntegerEntry(keyFeeAmount, feeAmountPrm), IntegerEntry(keyVotingDuration, votingDurationPrm), IntegerEntry(keyFinalizeReward, finalizeRewardPrm), IntegerEntry(keyVotingThreshold, votingThresholdPrm), StringEntry(keyWxAssetId, wxAssetIdPrm), StringEntry(keyUsdnAssetId, usdnAssetIdPrm)], unit)
121135 else throw("Strict value is not equal to itself.")
122136 }
123137
176190
177191 @Callable(i)
178192 func vote (amountAssetId,priceAssetId,inFavor) = {
193+ let votingFinishHeight = (value(getInteger(keyStartHeight(amountAssetId, priceAssetId))) + value(getInteger(keyVotingDuration)))
179194 let checks = [if (valueOrElse(getBoolean(keyInListAssetId(amountAssetId, priceAssetId)), false))
180195 then true
181- else throw("The token isn't on the voting list"), (height >= (value(getInteger(keyStartHeight(amountAssetId, priceAssetId))) + value(getInteger(keyVotingDuration))))]
196+ else throw("The token isn't on the voting list"), if ((height >= votingFinishHeight))
197+ then true
198+ else throw("too late to vote")]
182199 if ((checks == checks))
183200 then {
184201 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId))), separator)
185202 let positiveVotes = votingResult[1]
186203 let negativeVotes = votingResult[2]
187- let gwxAmount = invoke(boostingContract, "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), height], nil)
204+ let gwxAmount = invoke(boostingContract, "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), votingFinishHeight], nil)
188205 let entries = if (inFavor)
189206 then {
190207 let newPositiveVotes = (parseIntValue(positiveVotes) + asInt(gwxAmount))
191208 let totalVotes = makeString(["%d%d", toString(newPositiveVotes), negativeVotes], separator)
192209 let yesVoteKey = keyVote(amountAssetId, priceAssetId, toString(i.caller))
193- let yesVoteValue = makeString([keyVotingResult(amountAssetId, priceAssetId), "yes"], separator)
210+ let yesVoteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
194211 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId), totalVotes), StringEntry(yesVoteKey, yesVoteValue)], unit)
195212 }
196213 else {
197214 let newNegativeVotes = (parseIntValue(negativeVotes) + asInt(gwxAmount))
198215 let totalVotes = makeString(["%d%d", positiveVotes, toString(newNegativeVotes)], separator)
199216 let noVoteKey = keyVote(amountAssetId, priceAssetId, toString(i.caller))
200- let noVoteValue = makeString([keyVotingResult(amountAssetId, priceAssetId), "no"], separator)
217+ let noVoteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
201218 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId), totalVotes), StringEntry(noVoteKey, noVoteValue)], unit)
202219 }
203220 entries
221+ }
222+ else throw("Strict value is not equal to itself.")
223+ }
224+
225+
226+
227+@Callable(i)
228+func cancelVote (amountAssetId,priceAssetId) = {
229+ let checks = [if (isDefined(keyVotingResult(amountAssetId, priceAssetId)))
230+ then true
231+ else throw("No vote for assets pair")]
232+ if ((checks == checks))
233+ then {
234+ let vote = split(value(getString(keyVote(amountAssetId, priceAssetId, toString(i.caller)))), separator)
235+ let voteValue = vote[1]
236+ let voteType = vote[2]
237+ let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId))), separator)
238+ let positiveVotes = votingResult[1]
239+ let negativeVotes = votingResult[2]
240+ let actions = if ((voteType == "yes"))
241+ then {
242+ let newPositiveVotes = (parseIntValue(positiveVotes) - parseIntValue(voteValue))
243+ let totalVotes = makeString(["%d%d", toString(newPositiveVotes), negativeVotes], separator)
244+ $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId), totalVotes), DeleteEntry(keyVote(amountAssetId, priceAssetId, toString(i.caller)))], unit)
245+ }
246+ else {
247+ let newNegativeVotes = (parseIntValue(negativeVotes) - parseIntValue(voteValue))
248+ let totalVotes = makeString(["%d%d", toString(newNegativeVotes), negativeVotes], separator)
249+ $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId), totalVotes), DeleteEntry(keyVote(amountAssetId, priceAssetId, toString(i.caller)))], unit)
250+ }
251+ actions
252+ }
253+ else throw("Strict value is not equal to itself.")
254+ }
255+
256+
257+
258+@Callable(i)
259+func setVotingThreshold (newThreshold) = {
260+ let checks = [if (mustManager(i))
261+ then true
262+ else throw("Must manager")]
263+ if ((checks == checks))
264+ then [IntegerEntry(keyVotingThreshold, newThreshold)]
265+ else throw("Strict value is not equal to itself.")
266+ }
267+
268+
269+
270+@Callable(i)
271+func setFee (newFee) = {
272+ let checks = [if (mustManager(i))
273+ then true
274+ else throw("Must manager")]
275+ if ((checks == checks))
276+ then [IntegerEntry(keyFeeAmount, newFee)]
277+ else throw("Strict value is not equal to itself.")
278+ }
279+
280+
281+
282+@Callable(i)
283+func finalize (amountAssetId,priceAssetId) = {
284+ let votingFinishHeight = (value(getInteger(keyStartHeight(amountAssetId, priceAssetId))) + value(getInteger(keyVotingDuration)))
285+ let checks = [if (isDefined(keyInListAssetId(amountAssetId, priceAssetId)))
286+ then true
287+ else throw("No assets pair"), if ((votingFinishHeight > height))
288+ then true
289+ else throw("insufficient height for completion")]
290+ if ((checks == checks))
291+ then {
292+ let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId))), separator)
293+ let positiveVotes = parseIntValue(votingResult[1])
294+ let negativeVotes = parseIntValue(votingResult[2])
295+ let actions = if ((positiveVotes > negativeVotes))
296+ then {
297+ let res = invoke(assetStoreContract, "setPoolLabels", [amountAssetId, priceAssetId, "WX_EMISSION"], nil)
298+ if ((res == res))
299+ then $Tuple2([DeleteEntry(keyInListAssetId(amountAssetId, priceAssetId))], unit)
300+ else throw("Strict value is not equal to itself.")
301+ }
302+ else $Tuple2([DeleteEntry(keyInListAssetId(amountAssetId, priceAssetId))], unit)
303+ actions
204304 }
205305 else throw("Strict value is not equal to itself.")
206306 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "__"
55
66 let keyFeeAmount = makeString(["%s", "fee"], separator)
77
88 let keyUsdnAssetId = makeString(["%s", "usdnAssetId"], separator)
99
1010 let keyVotingDuration = makeString(["%s", "epochLength"], separator)
11+
12+let keyFinalizeReward = makeString(["%s", "finalizeReward"], separator)
1113
1214 let keyVotingThreshold = makeString(["%s", "votingThreshold"], separator)
1315
1416 let keyWxAssetId = makeString(["%s", "wxAssetId"], separator)
1517
1618 let keyAssetsStoreContract = makeString(["%s", "assetsStoreContract"], separator)
1719
1820 let keyuserPoolContract = makeString(["%s", "userPoolContract"], separator)
1921
2022 let keyEmissionContract = makeString(["%s", "emissionContract"], separator)
2123
2224 let keyBoostingContract = makeString(["%s", "boostingContract"], separator)
2325
2426 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (key + " is not defined"))
2527
2628
2729 func keyInListAssetId (amountAssetId,priceAssetId) = makeString([("%s%s%s" + "inList"), amountAssetId, priceAssetId], separator)
2830
2931
3032 func keyStartHeight (amountAssetId,priceAssetId) = makeString([("%s%s%s" + "startHeight"), amountAssetId, priceAssetId], separator)
3133
3234
3335 func keyVotingResult (amountAssetId,priceAssetId) = makeString(["%s%s%s", "votingResult", amountAssetId, priceAssetId], separator)
3436
3537
3638 func keyVote (amountAssetId,priceAssetId,voterAddress) = makeString(["%s%s%s%s", "vote", amountAssetId, priceAssetId, voterAddress], separator)
3739
3840
41+func keyVoteValue (gwxAmount,vote) = {
42+ let key = if (vote)
43+ then makeString(["%d%s", gwxAmount, "yes"], separator)
44+ else makeString(["%d%s", gwxAmount, "no"], separator)
45+ key
46+ }
47+
48+
3949 func keyManagerPublicKey () = "%s__managerPublicKey"
4050
4151
4252 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
4353
4454
4555 let emissionContract = addressFromStringValue(getStringOrFail(keyEmissionContract))
4656
4757 let userPoolContract = addressFromStringValue(getStringOrFail(keyuserPoolContract))
4858
4959 let boostingContract = addressFromStringValue(getStringOrFail(keyBoostingContract))
60+
61+let assetStoreContract = addressFromStringValue(getStringOrFail(keyAssetsStoreContract))
5062
5163 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
5264 case s: String =>
5365 fromBase58String(s)
5466 case _: Unit =>
5567 unit
5668 case _ =>
5769 throw("Match error")
5870 }
5971
6072
6173 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
6274 case s: String =>
6375 fromBase58String(s)
6476 case _: Unit =>
6577 unit
6678 case _ =>
6779 throw("Match error")
6880 }
6981
7082
7183 func mustManager (i) = {
7284 let pd = throw("Permission denied")
7385 match managerPublicKeyOrUnit() {
7486 case pk: ByteVector =>
7587 if ((i.callerPublicKey == pk))
7688 then true
7789 else pd
7890 case _: Unit =>
7991 if ((i.caller == this))
8092 then true
8193 else pd
8294 case _ =>
8395 throw("Match error")
8496 }
8597 }
8698
8799
88100 func asInt (val) = match val {
89101 case valInt: Int =>
90102 valInt
91103 case _ =>
92104 throw("Failed to cast into Integer")
93105 }
94106
95107
96108 @Callable(i)
97-func constructor (assetsStoreContractPrm,userPoolContractPrm,boostingContractPrm,emissionContractPrm,feeAmountPrm,wxAssetIdPrm,votingThresholdPrm,votingDurationPrm,usdnAssetIdPrm) = {
109+func constructor (assetsStoreContractPrm,userPoolContractPrm,boostingContractPrm,emissionContractPrm,feeAmountPrm,wxAssetIdPrm,votingThresholdPrm,votingDurationPrm,usdnAssetIdPrm,finalizeRewardPrm) = {
98110 let checks = [if (mustManager(i))
99111 then true
100112 else throw("Must manager"), if (isDefined(addressFromString(assetsStoreContractPrm)))
101113 then true
102114 else throw("Invalid asset_store contract address"), if (isDefined(addressFromString(boostingContractPrm)))
103115 then true
104116 else throw("Invalid boosting contract address"), if (isDefined(addressFromString(userPoolContractPrm)))
105117 then true
106118 else throw("Invalid user_pools contract address"), if (isDefined(addressFromString(emissionContractPrm)))
107119 then true
108120 else throw("Invalid emission contract address"), if ((feeAmountPrm >= 0))
109121 then true
110122 else throw("Invalid fee amount"), if ((votingDurationPrm > 0))
111123 then true
112- else throw("Invalid voting duration"), if ((votingThresholdPrm >= 0))
124+ else throw("Invalid voting duration"), if ((finalizeRewardPrm > 0))
125+ then true
126+ else throw("Invalid finalize reward"), if ((votingThresholdPrm >= 0))
113127 then true
114128 else throw("Invalid voting threshold"), if (isDefined(assetInfo(fromBase58String(wxAssetIdPrm))))
115129 then true
116130 else throw("Invalid WX asset ID"), if (isDefined(assetInfo(fromBase58String(usdnAssetIdPrm))))
117131 then true
118132 else throw("Invalid USDN asset ID")]
119133 if ((checks == checks))
120- then $Tuple2([StringEntry(keyAssetsStoreContract, assetsStoreContractPrm), StringEntry(keyuserPoolContract, userPoolContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), IntegerEntry(keyFeeAmount, feeAmountPrm), IntegerEntry(keyVotingDuration, votingDurationPrm), IntegerEntry(keyVotingThreshold, votingThresholdPrm), StringEntry(keyWxAssetId, wxAssetIdPrm), StringEntry(keyUsdnAssetId, usdnAssetIdPrm)], unit)
134+ then $Tuple2([StringEntry(keyAssetsStoreContract, assetsStoreContractPrm), StringEntry(keyuserPoolContract, userPoolContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), IntegerEntry(keyFeeAmount, feeAmountPrm), IntegerEntry(keyVotingDuration, votingDurationPrm), IntegerEntry(keyFinalizeReward, finalizeRewardPrm), IntegerEntry(keyVotingThreshold, votingThresholdPrm), StringEntry(keyWxAssetId, wxAssetIdPrm), StringEntry(keyUsdnAssetId, usdnAssetIdPrm)], unit)
121135 else throw("Strict value is not equal to itself.")
122136 }
123137
124138
125139
126140 @Callable(i)
127141 func suggest (amountAssetId,priceAssetId) = {
128142 let payment = value(i.payments[0])
129143 let info = valueOrErrorMessage(assetInfo(fromBase58String(amountAssetId)), "Invalid amountAssetId ID")
130144 let checks = [if ((info.issuer == i.caller))
131145 then true
132146 else throw("Asset can only be suggested by its issuer"), if ((info.scripted == false))
133147 then true
134148 else throw("Asset is smart"), if ((toBase58String(value(payment.assetId)) == value(getString(keyWxAssetId))))
135149 then true
136150 else throw("Invalid fee asset"), if ((payment.amount == value(getInteger(keyFeeAmount))))
137151 then true
138152 else throw("Invalid fee amount"), if ((priceAssetId == value(getString(keyUsdnAssetId))))
139153 then true
140154 else throw("priceAssetId is not USDN"), if ((getBoolean(keyInListAssetId(amountAssetId, priceAssetId)) == unit))
141155 then true
142156 else throw("Already in voting list")]
143157 if ((checks == checks))
144158 then {
145159 let ensureActive = match invoke(userPoolContract, "statusREADONLY", [amountAssetId, priceAssetId], nil) {
146160 case s: String =>
147161 if ((s == "active"))
148162 then true
149163 else throw("User pool is not active")
150164 case _ =>
151165 throw("User pool is not active")
152166 }
153167 if ((ensureActive == ensureActive))
154168 then {
155169 let ensureAmountAssetVerified = match invoke(value(addressFromString(keyAssetsStoreContract)), "isVerifiedREADONLY", [amountAssetId], nil) {
156170 case b: Boolean =>
157171 b
158172 case _ =>
159173 throw("Asset is not verified")
160174 }
161175 if ((ensureAmountAssetVerified == ensureAmountAssetVerified))
162176 then {
163177 let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
164178 if ((burnFeeInv == burnFeeInv))
165179 then [BooleanEntry(keyInListAssetId(amountAssetId, priceAssetId), true), IntegerEntry(keyStartHeight(amountAssetId, priceAssetId), height)]
166180 else throw("Strict value is not equal to itself.")
167181 }
168182 else throw("Strict value is not equal to itself.")
169183 }
170184 else throw("Strict value is not equal to itself.")
171185 }
172186 else throw("Strict value is not equal to itself.")
173187 }
174188
175189
176190
177191 @Callable(i)
178192 func vote (amountAssetId,priceAssetId,inFavor) = {
193+ let votingFinishHeight = (value(getInteger(keyStartHeight(amountAssetId, priceAssetId))) + value(getInteger(keyVotingDuration)))
179194 let checks = [if (valueOrElse(getBoolean(keyInListAssetId(amountAssetId, priceAssetId)), false))
180195 then true
181- else throw("The token isn't on the voting list"), (height >= (value(getInteger(keyStartHeight(amountAssetId, priceAssetId))) + value(getInteger(keyVotingDuration))))]
196+ else throw("The token isn't on the voting list"), if ((height >= votingFinishHeight))
197+ then true
198+ else throw("too late to vote")]
182199 if ((checks == checks))
183200 then {
184201 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId))), separator)
185202 let positiveVotes = votingResult[1]
186203 let negativeVotes = votingResult[2]
187- let gwxAmount = invoke(boostingContract, "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), height], nil)
204+ let gwxAmount = invoke(boostingContract, "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), votingFinishHeight], nil)
188205 let entries = if (inFavor)
189206 then {
190207 let newPositiveVotes = (parseIntValue(positiveVotes) + asInt(gwxAmount))
191208 let totalVotes = makeString(["%d%d", toString(newPositiveVotes), negativeVotes], separator)
192209 let yesVoteKey = keyVote(amountAssetId, priceAssetId, toString(i.caller))
193- let yesVoteValue = makeString([keyVotingResult(amountAssetId, priceAssetId), "yes"], separator)
210+ let yesVoteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
194211 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId), totalVotes), StringEntry(yesVoteKey, yesVoteValue)], unit)
195212 }
196213 else {
197214 let newNegativeVotes = (parseIntValue(negativeVotes) + asInt(gwxAmount))
198215 let totalVotes = makeString(["%d%d", positiveVotes, toString(newNegativeVotes)], separator)
199216 let noVoteKey = keyVote(amountAssetId, priceAssetId, toString(i.caller))
200- let noVoteValue = makeString([keyVotingResult(amountAssetId, priceAssetId), "no"], separator)
217+ let noVoteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
201218 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId), totalVotes), StringEntry(noVoteKey, noVoteValue)], unit)
202219 }
203220 entries
221+ }
222+ else throw("Strict value is not equal to itself.")
223+ }
224+
225+
226+
227+@Callable(i)
228+func cancelVote (amountAssetId,priceAssetId) = {
229+ let checks = [if (isDefined(keyVotingResult(amountAssetId, priceAssetId)))
230+ then true
231+ else throw("No vote for assets pair")]
232+ if ((checks == checks))
233+ then {
234+ let vote = split(value(getString(keyVote(amountAssetId, priceAssetId, toString(i.caller)))), separator)
235+ let voteValue = vote[1]
236+ let voteType = vote[2]
237+ let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId))), separator)
238+ let positiveVotes = votingResult[1]
239+ let negativeVotes = votingResult[2]
240+ let actions = if ((voteType == "yes"))
241+ then {
242+ let newPositiveVotes = (parseIntValue(positiveVotes) - parseIntValue(voteValue))
243+ let totalVotes = makeString(["%d%d", toString(newPositiveVotes), negativeVotes], separator)
244+ $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId), totalVotes), DeleteEntry(keyVote(amountAssetId, priceAssetId, toString(i.caller)))], unit)
245+ }
246+ else {
247+ let newNegativeVotes = (parseIntValue(negativeVotes) - parseIntValue(voteValue))
248+ let totalVotes = makeString(["%d%d", toString(newNegativeVotes), negativeVotes], separator)
249+ $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId), totalVotes), DeleteEntry(keyVote(amountAssetId, priceAssetId, toString(i.caller)))], unit)
250+ }
251+ actions
252+ }
253+ else throw("Strict value is not equal to itself.")
254+ }
255+
256+
257+
258+@Callable(i)
259+func setVotingThreshold (newThreshold) = {
260+ let checks = [if (mustManager(i))
261+ then true
262+ else throw("Must manager")]
263+ if ((checks == checks))
264+ then [IntegerEntry(keyVotingThreshold, newThreshold)]
265+ else throw("Strict value is not equal to itself.")
266+ }
267+
268+
269+
270+@Callable(i)
271+func setFee (newFee) = {
272+ let checks = [if (mustManager(i))
273+ then true
274+ else throw("Must manager")]
275+ if ((checks == checks))
276+ then [IntegerEntry(keyFeeAmount, newFee)]
277+ else throw("Strict value is not equal to itself.")
278+ }
279+
280+
281+
282+@Callable(i)
283+func finalize (amountAssetId,priceAssetId) = {
284+ let votingFinishHeight = (value(getInteger(keyStartHeight(amountAssetId, priceAssetId))) + value(getInteger(keyVotingDuration)))
285+ let checks = [if (isDefined(keyInListAssetId(amountAssetId, priceAssetId)))
286+ then true
287+ else throw("No assets pair"), if ((votingFinishHeight > height))
288+ then true
289+ else throw("insufficient height for completion")]
290+ if ((checks == checks))
291+ then {
292+ let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId))), separator)
293+ let positiveVotes = parseIntValue(votingResult[1])
294+ let negativeVotes = parseIntValue(votingResult[2])
295+ let actions = if ((positiveVotes > negativeVotes))
296+ then {
297+ let res = invoke(assetStoreContract, "setPoolLabels", [amountAssetId, priceAssetId, "WX_EMISSION"], nil)
298+ if ((res == res))
299+ then $Tuple2([DeleteEntry(keyInListAssetId(amountAssetId, priceAssetId))], unit)
300+ else throw("Strict value is not equal to itself.")
301+ }
302+ else $Tuple2([DeleteEntry(keyInListAssetId(amountAssetId, priceAssetId))], unit)
303+ actions
204304 }
205305 else throw("Strict value is not equal to itself.")
206306 }
207307
208308
209309
210310 @Callable(i)
211311 func setManager (pendingManagerPublicKey) = {
212312 let checkCaller = mustManager(i)
213313 if ((checkCaller == checkCaller))
214314 then {
215315 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
216316 if ((checkManagerPublicKey == checkManagerPublicKey))
217317 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
218318 else throw("Strict value is not equal to itself.")
219319 }
220320 else throw("Strict value is not equal to itself.")
221321 }
222322
223323
224324
225325 @Callable(i)
226326 func confirmManager () = {
227327 let pm = pendingManagerPublicKeyOrUnit()
228328 let hasPM = if (isDefined(pm))
229329 then true
230330 else throw("No pending manager")
231331 if ((hasPM == hasPM))
232332 then {
233333 let checkPM = if ((i.callerPublicKey == value(pm)))
234334 then true
235335 else throw("You are not pending manager")
236336 if ((checkPM == checkPM))
237337 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
238338 else throw("Strict value is not equal to itself.")
239339 }
240340 else throw("Strict value is not equal to itself.")
241341 }
242342
243343
244344 @Verifier(tx)
245345 func verify () = {
246346 let targetPublicKey = match managerPublicKeyOrUnit() {
247347 case pk: ByteVector =>
248348 pk
249349 case _: Unit =>
250350 tx.senderPublicKey
251351 case _ =>
252352 throw("Match error")
253353 }
254354 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
255355 }
256356

github/deemru/w8io/169f3d6 
55.66 ms