tx · HSSgoJad1EMVsHSohxX4DnygKLKyTtTbDVE7L62fGfXh

3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T:  -0.01900000 Waves

2023.01.10 13:35 [2398735] smart account 3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T > SELF 0.00000000 Waves

{ "type": 13, "id": "HSSgoJad1EMVsHSohxX4DnygKLKyTtTbDVE7L62fGfXh", "fee": 1900000, "feeAssetId": null, "timestamp": 1673346965405, "version": 1, "sender": "3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T", "senderPublicKey": "7iXEgsFNsnbLZ3ca4tmz8jffnyxMu9keuBV6CuQPJLuA", "proofs": [ "2Piu6TzmBejV5MXMEArjphqUZEACbHbJ5xiMfEKfU4fFwSSoYKRuJXPHt95juQqUjDcbeWNwP6vHfMESAT7J9CiY" ], "script": "base64:AAIFAAAAAAAABkUIAhINCgsICAgICAgBCAEIARIDCgEBEgQKAggIEgUKAwgIBBIECgIICBIDCgEBEgMKAQESBAoCCAgSAwoBCBIAIglzZXBhcmF0b3IiDGtleUZlZUFtb3VudCIOa2V5VXNkbkFzc2V0SWQiDmtleUVwb2NoTGVuZ3RoIhFrZXlGaW5hbGl6ZVJld2FyZCIMa2V5V3hBc3NldElkIhZrZXlBc3NldHNTdG9yZUNvbnRyYWN0IhNrZXlVc2VyUG9vbENvbnRyYWN0IhNrZXlFbWlzc2lvbkNvbnRyYWN0IhNrZXlCb29zdGluZ0NvbnRyYWN0IhJrZXlGYWN0b3J5Q29udHJhY3QiGWtleVZvdGluZ0VtaXNzaW9uQ29udHJhY3QiDGtleVRocmVzaG9sZCIPZ2V0U3RyaW5nT3JGYWlsIgNrZXkiDGdldEludE9yRmFpbCIQa2V5SW5MaXN0QXNzZXRJZCINYW1vdW50QXNzZXRJZCIMcHJpY2VBc3NldElkIg9rZXlTdWdnZXN0SW5kZXgiDmtleVN0YXJ0SGVpZ2h0IgxzdWdnZXN0SW5kZXgiD2tleVZvdGluZ1Jlc3VsdCIKdG90YWxWb3RlcyIIdG90YWxZZXMiB3RvdGFsTm8iB2tleVZvdGUiDHZvdGVyQWRkcmVzcyIMa2V5Vm90ZVZhbHVlIglnd3hBbW91bnQiBHZvdGUiCWtleUluTGlzdCIEcG9vbCILJHQwMjQ2MzI1MDMiE2tleU1hbmFnZXJQdWJsaWNLZXkiGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5IhNhc3NldHNTdG9yZUNvbnRyYWN0IhBib29zdGluZ0NvbnRyYWN0IhBlbWlzc2lvbkNvbnRyYWN0Ig9mYWN0b3J5Q29udHJhY3QiEHVzZXJQb29sQ29udHJhY3QiFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QiFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiByRtYXRjaDAiAXMiHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0Iglpc01hbmFnZXIiAWkiAnBrIgttdXN0TWFuYWdlciIFYXNJbnQiA3ZhbCIGdmFsSW50IhZhc3NldHNTdG9yZUNvbnRyYWN0UHJtIhNib29zdGluZ0NvbnRyYWN0UHJtIhNlbWlzc2lvbkNvbnRyYWN0UHJtIhJmYWN0b3J5Q29udHJhY3RQcm0iE3VzZXJQb29sQ29udHJhY3RQcm0iGXZvdGluZ0VtaXNzaW9uQ29udHJhY3RQcm0iDGZlZUFtb3VudFBybSIMd3hBc3NldElkUHJtIhF2b3RpbmdEdXJhdGlvblBybSIOdXNkbkFzc2V0SWRQcm0iEWZpbmFsaXplUmV3YXJkUHJtIgZjaGVja3MiCXRocmVzaG9sZCIHcGF5bWVudCIEaW5mbyIMZW5zdXJlQWN0aXZlIhllbnN1cmVBbW91bnRBc3NldFZlcmlmaWVkIgNpbnYiAWIiCmJ1cm5GZWVJbnYiD25ld1N1Z2dlc3RJbmRleCIDaW50IgdpbkZhdm9yIhJ2b3RpbmdGaW5pc2hIZWlnaHQiB25vdFplcm8iCXZvdGVWYWx1ZSIIdm90ZVR5cGUiEWlzVm90ZVR5cGVTaW1pbGFyIhJpc1ZvdGVWYWx1ZVNpbWlsYXIiEGlzTmV3Vm90ZVNpbWlsYXIiAXUiDHZvdGluZ1Jlc3VsdCINcG9zaXRpdmVWb3RlcyINbmVnYXRpdmVWb3RlcyIbbmV3UG9zaXRpdmVBbmROZWdhdGl2ZVZvdGVzIhBuZXdQb3NpdGl2ZVZvdGVzIhBuZXdOZWdhdGl2ZVZvdGVzIgd2b3RlS2V5Igt1c2VyQWRkcmVzcyIHYWN0aW9ucyIGbmV3RmVlIgxuZXdUaHJlc2hvbGQiCGFsbFZvdGVzIgNyZXMiEXZvdGluZ0VtaXNzaW9uSW52IhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSILY2hlY2tDYWxsZXIiFWNoZWNrTWFuYWdlclB1YmxpY0tleSICcG0iBWhhc1BNIgdjaGVja1BNIgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXkAAAAkAAAAAAFhAgAAAAJfXwAAAAABYgkABLkAAAACCQAETAAAAAICAAAAAiVzCQAETAAAAAICAAAAA2ZlZQUAAAADbmlsBQAAAAFhAAAAAAFjCQAEuQAAAAIJAARMAAAAAgIAAAACJXMJAARMAAAAAgIAAAALdXNkbkFzc2V0SWQFAAAAA25pbAUAAAABYQAAAAABZAkABLkAAAACCQAETAAAAAICAAAAAiVzCQAETAAAAAICAAAA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", "chainId": 84, "height": 2398735, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4wCuD9oHXA3f2BHoJSx8EK5dbCMhbi36Am9de4WuvX75 Next: 71Ud8HWFhSJpMryN2zzM7x5MpCJM3L1n2uBZFScoB3wA Diff:
OldNewDifferences
174174 func suggest (amountAssetId,priceAssetId) = {
175175 let pool = $Tuple2(amountAssetId, priceAssetId)
176176 let payment = value(i.payments[0])
177- let checkAmountAsset = if ((amountAssetId == "WAVES"))
178- then unit
179- else {
180- let info = valueOrErrorMessage(assetInfo(fromBase58String(amountAssetId)), "invalid amountAssetId ID")
181- if ((info.scripted == false))
182- then true
183- else throw("asset is smart")
177+ let info = valueOrErrorMessage(assetInfo(fromBase58String(amountAssetId)), "invalid amountAssetId ID")
178+ let checks = [if ((info.scripted == false))
179+ then true
180+ else throw("asset is smart"), if ((toBase58String(value(payment.assetId)) == value(getString(keyWxAssetId))))
181+ then true
182+ else throw("invalid fee asset"), if ((payment.amount == value(getInteger(keyFeeAmount))))
183+ then true
184+ else throw("invalid fee amount"), if ((getInteger(keyInListAssetId(amountAssetId, priceAssetId)) == unit))
185+ then true
186+ else throw("already in voting list"), if (!(valueOrElse(getBoolean(votingEmissionContract, keyInList(pool)), false)))
187+ then true
188+ else throw("pool is in emission voting list")]
189+ if ((checks == checks))
190+ then {
191+ let ensureActive = match invoke(userPoolContract, "statusREADONLY", [amountAssetId, priceAssetId], nil) {
192+ case s: String =>
193+ if ((s == "active"))
194+ then true
195+ else throw("user pool is not active")
196+ case _ =>
197+ throw("user pool is not active")
184198 }
185- if ((checkAmountAsset == checkAmountAsset))
186- then {
187- let checks = [if ((toBase58String(value(payment.assetId)) == value(getString(keyWxAssetId))))
188- then true
189- else throw("invalid fee asset"), if ((payment.amount == value(getInteger(keyFeeAmount))))
190- then true
191- else throw("invalid fee amount"), if ((getInteger(keyInListAssetId(amountAssetId, priceAssetId)) == unit))
192- then true
193- else throw("already in voting list"), if (!(valueOrElse(getBoolean(votingEmissionContract, keyInList(pool)), false)))
194- then true
195- else throw("pool is in emission voting list")]
196- if ((checks == checks))
199+ if ((ensureActive == ensureActive))
197200 then {
198- let ensureActive = match invoke(userPoolContract, "statusREADONLY", [amountAssetId, priceAssetId], nil) {
199- case s: String =>
200- if ((s == "active"))
201- then true
202- else throw("user pool is not active")
203- case _ =>
204- throw("user pool is not active")
205- }
206- if ((ensureActive == ensureActive))
201+ let ensureAmountAssetVerified = if (isManager(i))
202+ then unit
203+ else {
204+ let inv = match invoke(assetsStoreContract, "isVerifiedREADONLY", [amountAssetId], nil) {
205+ case b: Boolean =>
206+ if (b)
207+ then true
208+ else throw("asset is not verified")
209+ case _ =>
210+ throw("asset is not verified")
211+ }
212+ if ((inv == inv))
213+ then unit
214+ else throw("Strict value is not equal to itself.")
215+ }
216+ if ((ensureAmountAssetVerified == ensureAmountAssetVerified))
207217 then {
208- let ensureAmountAssetVerified = if (isManager(i))
209- then unit
210- else {
211- let inv = match invoke(assetsStoreContract, "isVerifiedREADONLY", [amountAssetId], nil) {
212- case b: Boolean =>
213- if (b)
214- then true
215- else throw("asset is not verified")
218+ let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
219+ if ((burnFeeInv == burnFeeInv))
220+ then {
221+ let newSuggestIndex = match getInteger(keySuggestIndex(amountAssetId, priceAssetId)) {
222+ case int: Int =>
223+ (int + 1)
216224 case _ =>
217- throw("asset is not verified")
225+ 0
218226 }
219- if ((inv == inv))
220- then unit
221- else throw("Strict value is not equal to itself.")
222- }
223- if ((ensureAmountAssetVerified == ensureAmountAssetVerified))
224- then {
225- let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
226- if ((burnFeeInv == burnFeeInv))
227- then {
228- let newSuggestIndex = match getInteger(keySuggestIndex(amountAssetId, priceAssetId)) {
229- case int: Int =>
230- (int + 1)
231- case _ =>
232- 0
233- }
234- $Tuple2([IntegerEntry(keyInListAssetId(amountAssetId, priceAssetId), newSuggestIndex), IntegerEntry(keyStartHeight(amountAssetId, priceAssetId, newSuggestIndex), height), StringEntry(keyVotingResult(amountAssetId, priceAssetId, newSuggestIndex), totalVotes("0", "0")), IntegerEntry(keySuggestIndex(amountAssetId, priceAssetId), newSuggestIndex)], unit)
235- }
236- else throw("Strict value is not equal to itself.")
227+ $Tuple2([IntegerEntry(keyInListAssetId(amountAssetId, priceAssetId), newSuggestIndex), IntegerEntry(keyStartHeight(amountAssetId, priceAssetId, newSuggestIndex), height), StringEntry(keyVotingResult(amountAssetId, priceAssetId, newSuggestIndex), totalVotes("0", "0")), IntegerEntry(keySuggestIndex(amountAssetId, priceAssetId), newSuggestIndex)], unit)
237228 }
238229 else throw("Strict value is not equal to itself.")
239230 }
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 keyEpochLength = makeString(["%s", "epochLength"], separator)
1111
1212 let keyFinalizeReward = makeString(["%s", "finalizeReward"], separator)
1313
1414 let keyWxAssetId = makeString(["%s", "wxAssetId"], separator)
1515
1616 let keyAssetsStoreContract = makeString(["%s", "assetsStoreContract"], separator)
1717
1818 let keyUserPoolContract = makeString(["%s", "userPoolContract"], separator)
1919
2020 let keyEmissionContract = makeString(["%s", "emissionContract"], separator)
2121
2222 let keyBoostingContract = makeString(["%s", "boostingContract"], separator)
2323
2424 let keyFactoryContract = makeString(["%s", "factoryContract"], separator)
2525
2626 let keyVotingEmissionContract = makeString(["%s", "votingEmissionContract"], separator)
2727
2828 let keyThreshold = makeString(["%s", "votingThreshold"], separator)
2929
3030 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (key + " is not defined"))
3131
3232
3333 func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), (key + " is not defined"))
3434
3535
3636 func keyInListAssetId (amountAssetId,priceAssetId) = makeString(["%s%s%s", "inList", amountAssetId, priceAssetId], separator)
3737
3838
3939 func keySuggestIndex (amountAssetId,priceAssetId) = makeString(["%s%s%s", "suggestIndex", amountAssetId, priceAssetId], separator)
4040
4141
4242 func keyStartHeight (amountAssetId,priceAssetId,suggestIndex) = makeString(["%s%s%s%d", "startHeight", amountAssetId, priceAssetId, toString(suggestIndex)], separator)
4343
4444
4545 func keyVotingResult (amountAssetId,priceAssetId,suggestIndex) = makeString(["%s%s%s%d", "votingResult", amountAssetId, priceAssetId, toString(suggestIndex)], separator)
4646
4747
4848 func totalVotes (totalYes,totalNo) = makeString(["%d%d", totalYes, totalNo], separator)
4949
5050
5151 func keyVote (amountAssetId,priceAssetId,suggestIndex,voterAddress) = makeString(["%s%s%s%d%s", "vote", amountAssetId, priceAssetId, toString(suggestIndex), voterAddress], separator)
5252
5353
5454 func keyVoteValue (gwxAmount,vote) = {
5555 let key = if (vote)
5656 then makeString(["%d%s", gwxAmount, "yes"], separator)
5757 else makeString(["%d%s", gwxAmount, "no"], separator)
5858 key
5959 }
6060
6161
6262 func keyInList (pool) = {
6363 let $t024632503 = pool
6464 let amountAssetId = $t024632503._1
6565 let priceAssetId = $t024632503._2
6666 makeString(["%s%s%s", "inList", amountAssetId, priceAssetId], separator)
6767 }
6868
6969
7070 func keyManagerPublicKey () = "%s__managerPublicKey"
7171
7272
7373 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
7474
7575
7676 let assetsStoreContract = addressFromStringValue(getStringOrFail(keyAssetsStoreContract))
7777
7878 let boostingContract = addressFromStringValue(getStringOrFail(keyBoostingContract))
7979
8080 let emissionContract = addressFromStringValue(getStringOrFail(keyEmissionContract))
8181
8282 let factoryContract = addressFromStringValue(getStringOrFail(keyFactoryContract))
8383
8484 let userPoolContract = addressFromStringValue(getStringOrFail(keyUserPoolContract))
8585
8686 let votingEmissionContract = addressFromStringValue(getStringOrFail(keyVotingEmissionContract))
8787
8888 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
8989 case s: String =>
9090 fromBase58String(s)
9191 case _: Unit =>
9292 unit
9393 case _ =>
9494 throw("Match error")
9595 }
9696
9797
9898 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
9999 case s: String =>
100100 fromBase58String(s)
101101 case _: Unit =>
102102 unit
103103 case _ =>
104104 throw("Match error")
105105 }
106106
107107
108108 func isManager (i) = match managerPublicKeyOrUnit() {
109109 case pk: ByteVector =>
110110 (i.callerPublicKey == pk)
111111 case _: Unit =>
112112 (i.caller == this)
113113 case _ =>
114114 throw("Match error")
115115 }
116116
117117
118118 func mustManager (i) = if (isManager(i))
119119 then true
120120 else throw("permission denied")
121121
122122
123123 func asInt (val) = match val {
124124 case valInt: Int =>
125125 valInt
126126 case _ =>
127127 throw("failed to cast into Integer")
128128 }
129129
130130
131131 @Callable(i)
132132 func constructor (assetsStoreContractPrm,boostingContractPrm,emissionContractPrm,factoryContractPrm,userPoolContractPrm,votingEmissionContractPrm,feeAmountPrm,wxAssetIdPrm,votingDurationPrm,usdnAssetIdPrm,finalizeRewardPrm) = {
133133 let checks = [mustManager(i), if (isDefined(addressFromString(assetsStoreContractPrm)))
134134 then true
135135 else throw("Invalid asset_store contract address"), if (isDefined(addressFromString(boostingContractPrm)))
136136 then true
137137 else throw("Invalid boosting contract address"), if (isDefined(addressFromString(userPoolContractPrm)))
138138 then true
139139 else throw("Invalid user_pools contract address"), if (isDefined(addressFromString(emissionContractPrm)))
140140 then true
141141 else throw("Invalid emission contract address"), if (isDefined(addressFromString(factoryContractPrm)))
142142 then true
143143 else throw("Invalid factory contract address"), if ((feeAmountPrm >= 0))
144144 then true
145145 else throw("Invalid fee amount"), if ((votingDurationPrm > 0))
146146 then true
147147 else throw("Invalid voting duration"), if ((finalizeRewardPrm >= 0))
148148 then true
149149 else throw("Invalid finalize reward"), if (isDefined(assetInfo(fromBase58String(wxAssetIdPrm))))
150150 then true
151151 else throw("Invalid WX asset ID"), if (isDefined(assetInfo(fromBase58String(usdnAssetIdPrm))))
152152 then true
153153 else throw("Invalid USDN asset ID")]
154154 if ((checks == checks))
155155 then $Tuple2([StringEntry(keyAssetsStoreContract, assetsStoreContractPrm), StringEntry(keyBoostingContract, boostingContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), StringEntry(keyFactoryContract, factoryContractPrm), StringEntry(keyUserPoolContract, userPoolContractPrm), StringEntry(keyVotingEmissionContract, votingEmissionContractPrm), IntegerEntry(keyFeeAmount, feeAmountPrm), IntegerEntry(keyEpochLength, votingDurationPrm), IntegerEntry(keyFinalizeReward, finalizeRewardPrm), StringEntry(keyWxAssetId, wxAssetIdPrm), StringEntry(keyUsdnAssetId, usdnAssetIdPrm)], unit)
156156 else throw("Strict value is not equal to itself.")
157157 }
158158
159159
160160
161161 @Callable(i)
162162 func constructorV2 (threshold) = {
163163 let checks = [mustManager(i), if ((threshold > 0))
164164 then true
165165 else throw("invalid threshold")]
166166 if ((checks == checks))
167167 then $Tuple2([IntegerEntry(keyThreshold, threshold)], unit)
168168 else throw("Strict value is not equal to itself.")
169169 }
170170
171171
172172
173173 @Callable(i)
174174 func suggest (amountAssetId,priceAssetId) = {
175175 let pool = $Tuple2(amountAssetId, priceAssetId)
176176 let payment = value(i.payments[0])
177- let checkAmountAsset = if ((amountAssetId == "WAVES"))
178- then unit
179- else {
180- let info = valueOrErrorMessage(assetInfo(fromBase58String(amountAssetId)), "invalid amountAssetId ID")
181- if ((info.scripted == false))
182- then true
183- else throw("asset is smart")
177+ let info = valueOrErrorMessage(assetInfo(fromBase58String(amountAssetId)), "invalid amountAssetId ID")
178+ let checks = [if ((info.scripted == false))
179+ then true
180+ else throw("asset is smart"), if ((toBase58String(value(payment.assetId)) == value(getString(keyWxAssetId))))
181+ then true
182+ else throw("invalid fee asset"), if ((payment.amount == value(getInteger(keyFeeAmount))))
183+ then true
184+ else throw("invalid fee amount"), if ((getInteger(keyInListAssetId(amountAssetId, priceAssetId)) == unit))
185+ then true
186+ else throw("already in voting list"), if (!(valueOrElse(getBoolean(votingEmissionContract, keyInList(pool)), false)))
187+ then true
188+ else throw("pool is in emission voting list")]
189+ if ((checks == checks))
190+ then {
191+ let ensureActive = match invoke(userPoolContract, "statusREADONLY", [amountAssetId, priceAssetId], nil) {
192+ case s: String =>
193+ if ((s == "active"))
194+ then true
195+ else throw("user pool is not active")
196+ case _ =>
197+ throw("user pool is not active")
184198 }
185- if ((checkAmountAsset == checkAmountAsset))
186- then {
187- let checks = [if ((toBase58String(value(payment.assetId)) == value(getString(keyWxAssetId))))
188- then true
189- else throw("invalid fee asset"), if ((payment.amount == value(getInteger(keyFeeAmount))))
190- then true
191- else throw("invalid fee amount"), if ((getInteger(keyInListAssetId(amountAssetId, priceAssetId)) == unit))
192- then true
193- else throw("already in voting list"), if (!(valueOrElse(getBoolean(votingEmissionContract, keyInList(pool)), false)))
194- then true
195- else throw("pool is in emission voting list")]
196- if ((checks == checks))
199+ if ((ensureActive == ensureActive))
197200 then {
198- let ensureActive = match invoke(userPoolContract, "statusREADONLY", [amountAssetId, priceAssetId], nil) {
199- case s: String =>
200- if ((s == "active"))
201- then true
202- else throw("user pool is not active")
203- case _ =>
204- throw("user pool is not active")
205- }
206- if ((ensureActive == ensureActive))
201+ let ensureAmountAssetVerified = if (isManager(i))
202+ then unit
203+ else {
204+ let inv = match invoke(assetsStoreContract, "isVerifiedREADONLY", [amountAssetId], nil) {
205+ case b: Boolean =>
206+ if (b)
207+ then true
208+ else throw("asset is not verified")
209+ case _ =>
210+ throw("asset is not verified")
211+ }
212+ if ((inv == inv))
213+ then unit
214+ else throw("Strict value is not equal to itself.")
215+ }
216+ if ((ensureAmountAssetVerified == ensureAmountAssetVerified))
207217 then {
208- let ensureAmountAssetVerified = if (isManager(i))
209- then unit
210- else {
211- let inv = match invoke(assetsStoreContract, "isVerifiedREADONLY", [amountAssetId], nil) {
212- case b: Boolean =>
213- if (b)
214- then true
215- else throw("asset is not verified")
218+ let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
219+ if ((burnFeeInv == burnFeeInv))
220+ then {
221+ let newSuggestIndex = match getInteger(keySuggestIndex(amountAssetId, priceAssetId)) {
222+ case int: Int =>
223+ (int + 1)
216224 case _ =>
217- throw("asset is not verified")
225+ 0
218226 }
219- if ((inv == inv))
220- then unit
221- else throw("Strict value is not equal to itself.")
222- }
223- if ((ensureAmountAssetVerified == ensureAmountAssetVerified))
224- then {
225- let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
226- if ((burnFeeInv == burnFeeInv))
227- then {
228- let newSuggestIndex = match getInteger(keySuggestIndex(amountAssetId, priceAssetId)) {
229- case int: Int =>
230- (int + 1)
231- case _ =>
232- 0
233- }
234- $Tuple2([IntegerEntry(keyInListAssetId(amountAssetId, priceAssetId), newSuggestIndex), IntegerEntry(keyStartHeight(amountAssetId, priceAssetId, newSuggestIndex), height), StringEntry(keyVotingResult(amountAssetId, priceAssetId, newSuggestIndex), totalVotes("0", "0")), IntegerEntry(keySuggestIndex(amountAssetId, priceAssetId), newSuggestIndex)], unit)
235- }
236- else throw("Strict value is not equal to itself.")
227+ $Tuple2([IntegerEntry(keyInListAssetId(amountAssetId, priceAssetId), newSuggestIndex), IntegerEntry(keyStartHeight(amountAssetId, priceAssetId, newSuggestIndex), height), StringEntry(keyVotingResult(amountAssetId, priceAssetId, newSuggestIndex), totalVotes("0", "0")), IntegerEntry(keySuggestIndex(amountAssetId, priceAssetId), newSuggestIndex)], unit)
237228 }
238229 else throw("Strict value is not equal to itself.")
239230 }
240231 else throw("Strict value is not equal to itself.")
241232 }
242233 else throw("Strict value is not equal to itself.")
243234 }
244235 else throw("Strict value is not equal to itself.")
245236 }
246237
247238
248239
249240 @Callable(i)
250241 func vote (amountAssetId,priceAssetId,inFavor) = {
251242 let suggestIndex = value(getInteger(keyInListAssetId(amountAssetId, priceAssetId)))
252243 let votingFinishHeight = (value(getInteger(keyStartHeight(amountAssetId, priceAssetId, suggestIndex))) + value(getInteger(keyEpochLength)))
253244 let checks = [if (isDefined(getInteger(keyInListAssetId(amountAssetId, priceAssetId))))
254245 then true
255246 else throw("the token isn't on the voting list"), if ((votingFinishHeight > height))
256247 then true
257248 else throw("too late to vote")]
258249 if ((checks == checks))
259250 then {
260251 let gwxAmount = invoke(boostingContract, "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), votingFinishHeight], nil)
261252 let notZero = if ((asInt(gwxAmount) > 0))
262253 then true
263254 else throw("you don't have gwx")
264255 if ((notZero == notZero))
265256 then {
266257 let vote = match getString(keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))) {
267258 case s: String =>
268259 let vote = split(s, separator)
269260 let voteValue = vote[1]
270261 let voteType = vote[2]
271262 let isVoteTypeSimilar = if (if ((voteType == "yes"))
272263 then (inFavor == true)
273264 else false)
274265 then true
275266 else if ((voteType == "no"))
276267 then (inFavor == false)
277268 else false
278269 let isVoteValueSimilar = if (isVoteTypeSimilar)
279270 then (asInt(gwxAmount) == parseIntValue(voteValue))
280271 else false
281272 let isNewVoteSimilar = if (if (isVoteTypeSimilar)
282273 then isVoteValueSimilar
283274 else false)
284275 then throw("you already voted")
285276 else invoke(this, "cancelVote", [amountAssetId, priceAssetId], nil)
286277 isNewVoteSimilar
287278 case u: Unit =>
288279 u
289280 case _ =>
290281 throw("Match error")
291282 }
292283 if ((vote == vote))
293284 then {
294285 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
295286 let positiveVotes = votingResult[1]
296287 let negativeVotes = votingResult[2]
297288 let newPositiveAndNegativeVotes = if (inFavor)
298289 then {
299290 let newPositiveVotes = (parseIntValue(positiveVotes) + asInt(gwxAmount))
300291 [toString(newPositiveVotes), negativeVotes]
301292 }
302293 else {
303294 let newNegativeVotes = (parseIntValue(negativeVotes) + asInt(gwxAmount))
304295 [positiveVotes, toString(newNegativeVotes)]
305296 }
306297 let voteKey = keyVote(amountAssetId, priceAssetId, suggestIndex, toString(i.caller))
307298 let voteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
308299 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(newPositiveAndNegativeVotes[0], newPositiveAndNegativeVotes[1])), StringEntry(voteKey, voteValue)], unit)
309300 }
310301 else throw("Strict value is not equal to itself.")
311302 }
312303 else throw("Strict value is not equal to itself.")
313304 }
314305 else throw("Strict value is not equal to itself.")
315306 }
316307
317308
318309
319310 @Callable(i)
320311 func cancelVote (amountAssetId,priceAssetId) = {
321312 let userAddress = if ((i.caller == this))
322313 then toString(i.originCaller)
323314 else toString(i.caller)
324315 let suggestIndex = value(getInteger(keyInListAssetId(amountAssetId, priceAssetId)))
325316 let checks = [if (isDefined(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))))
326317 then true
327318 else throw("no vote for assets pair")]
328319 if ((checks == checks))
329320 then {
330321 let vote = split(value(getString(keyVote(amountAssetId, priceAssetId, suggestIndex, userAddress))), separator)
331322 let voteValue = vote[1]
332323 let voteType = vote[2]
333324 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
334325 let positiveVotes = votingResult[1]
335326 let negativeVotes = votingResult[2]
336327 let actions = if ((voteType == "yes"))
337328 then {
338329 let newPositiveVotes = (parseIntValue(positiveVotes) - parseIntValue(voteValue))
339330 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(toString(newPositiveVotes), negativeVotes)), DeleteEntry(keyVote(amountAssetId, priceAssetId, suggestIndex, userAddress))], unit)
340331 }
341332 else {
342333 let newNegativeVotes = (parseIntValue(negativeVotes) - parseIntValue(voteValue))
343334 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId, suggestIndex), totalVotes(positiveVotes, toString(newNegativeVotes))), DeleteEntry(keyVote(amountAssetId, priceAssetId, suggestIndex, userAddress))], unit)
344335 }
345336 actions
346337 }
347338 else throw("Strict value is not equal to itself.")
348339 }
349340
350341
351342
352343 @Callable(i)
353344 func setFee (newFee) = {
354345 let checks = [mustManager(i)]
355346 if ((checks == checks))
356347 then [IntegerEntry(keyFeeAmount, newFee)]
357348 else throw("Strict value is not equal to itself.")
358349 }
359350
360351
361352
362353 @Callable(i)
363354 func setThreshold (newThreshold) = {
364355 let checks = [mustManager(i), if ((newThreshold > 0))
365356 then true
366357 else throw("invalid threshold")]
367358 if ((checks == checks))
368359 then $Tuple2([IntegerEntry(keyThreshold, newThreshold)], unit)
369360 else throw("Strict value is not equal to itself.")
370361 }
371362
372363
373364
374365 @Callable(i)
375366 func finalize (amountAssetId,priceAssetId) = {
376367 let suggestIndex = value(getInteger(keyInListAssetId(amountAssetId, priceAssetId)))
377368 let votingFinishHeight = (value(getInteger(keyStartHeight(amountAssetId, priceAssetId, suggestIndex))) + value(getInteger(keyEpochLength)))
378369 let checks = [if (isDefined(getInteger(keyInListAssetId(amountAssetId, priceAssetId))))
379370 then true
380371 else throw("no assets pair"), if ((height >= votingFinishHeight))
381372 then true
382373 else throw("insufficient height for completion")]
383374 if ((checks == checks))
384375 then {
385376 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId, suggestIndex))), separator)
386377 let positiveVotes = parseIntValue(votingResult[1])
387378 let negativeVotes = parseIntValue(votingResult[2])
388379 let allVotes = (positiveVotes + negativeVotes)
389380 let threshold = getIntOrFail(keyThreshold)
390381 let actions = if (if ((allVotes >= threshold))
391382 then (positiveVotes > negativeVotes)
392383 else false)
393384 then {
394385 let res = invoke(factoryContract, "setWxEmissionPoolLabel", [amountAssetId, priceAssetId], nil)
395386 if ((res == res))
396387 then {
397388 let votingEmissionInv = invoke(votingEmissionContract, "create", [amountAssetId, priceAssetId], nil)
398389 if ((votingEmissionInv == votingEmissionInv))
399390 then $Tuple2([DeleteEntry(keyInListAssetId(amountAssetId, priceAssetId))], unit)
400391 else throw("Strict value is not equal to itself.")
401392 }
402393 else throw("Strict value is not equal to itself.")
403394 }
404395 else $Tuple2([DeleteEntry(keyInListAssetId(amountAssetId, priceAssetId))], unit)
405396 actions
406397 }
407398 else throw("Strict value is not equal to itself.")
408399 }
409400
410401
411402
412403 @Callable(i)
413404 func setManager (pendingManagerPublicKey) = {
414405 let checkCaller = mustManager(i)
415406 if ((checkCaller == checkCaller))
416407 then {
417408 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
418409 if ((checkManagerPublicKey == checkManagerPublicKey))
419410 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
420411 else throw("Strict value is not equal to itself.")
421412 }
422413 else throw("Strict value is not equal to itself.")
423414 }
424415
425416
426417
427418 @Callable(i)
428419 func confirmManager () = {
429420 let pm = pendingManagerPublicKeyOrUnit()
430421 let hasPM = if (isDefined(pm))
431422 then true
432423 else throw("no pending manager")
433424 if ((hasPM == hasPM))
434425 then {
435426 let checkPM = if ((i.callerPublicKey == value(pm)))
436427 then true
437428 else throw("you are not pending manager")
438429 if ((checkPM == checkPM))
439430 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
440431 else throw("Strict value is not equal to itself.")
441432 }
442433 else throw("Strict value is not equal to itself.")
443434 }
444435
445436
446437 @Verifier(tx)
447438 func verify () = {
448439 let targetPublicKey = match managerPublicKeyOrUnit() {
449440 case pk: ByteVector =>
450441 pk
451442 case _: Unit =>
452443 tx.senderPublicKey
453444 case _ =>
454445 throw("Match error")
455446 }
456447 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
457448 }
458449

github/deemru/w8io/fabc49c 
51.20 ms