tx · 9mtHfAgaGN7N91fkPGmPhsUBTh3D6wTaYQWxY2A7hnSX

3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T:  -0.01400000 Waves

2022.04.29 18:49 [2029966] smart account 3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T > SELF 0.00000000 Waves

{ "type": 13, "id": "9mtHfAgaGN7N91fkPGmPhsUBTh3D6wTaYQWxY2A7hnSX", "fee": 1400000, "feeAssetId": null, "timestamp": 1651247392618, "version": 1, "sender": "3N1Epwa6GQuTQr2K9WzeUcqSFCdERwuvL5T", "senderPublicKey": "7iXEgsFNsnbLZ3ca4tmz8jffnyxMu9keuBV6CuQPJLuA", "proofs": [ "qvt8cRpPZaDnMwuwcDiNxMjQsoSuSAcuKNgFkWhTWLtqtL9pFiXPzFqzsytDToqG3j1xJPEwUBK2rJxJKPyyxfn" ], "script": "base64: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AAAAAgAAABQlc19fbWFuYWdlclB1YmxpY0tleQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAEGVtaXNzaW9uQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAABNrZXlFbWlzc2lvbkNvbnRyYWN0AAAAABB1c2VyUG9vbENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAATa2V5dXNlclBvb2xDb250cmFjdAAAAAAQYm9vc3RpbmdDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAAE2tleUJvb3N0aW5nQ29udHJhY3QBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAALbXVzdE1hbmFnZXIAAAABAAAAAWkEAAAAAnBkCQAAAgAAAAECAAAAEVBlcm1pc3Npb24gZGVuaWVkBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAAnBrBgUAAAACcGQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwYFAAAAAnBkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAVhc0ludAAAAAEAAAADdmFsBAAAAAckbWF0Y2gwBQAAAAN2YWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAGdmFsSW50BQAAAAckbWF0Y2gwBQAAAAZ2YWxJbnQJAAACAAAAAQIAAAAbRmFpbGVkIHRvIGNhc3QgaW50byBJbnRlZ2VyAAAABQAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAkAAAAWYXNzZXRzU3RvcmVDb250cmFjdFBybQAAABN1c2VyUG9vbENvbnRyYWN0UHJtAAAAE2Jvb3N0aW5nQ29udHJhY3RQcm0AAAATZW1pc3Npb25Db250cmFjdFBybQAAAAxmZWVBbW91bnRQcm0AAAAMd3hBc3NldElkUHJtAAAAEnZvdGluZ1RocmVzaG9sZFBybQAAABF2b3RpbmdEdXJhdGlvblBybQAAAA51c2RuQXNzZXRJZFBybQQAAAAGY2hlY2tzCQAETAAAAAIDCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpBgkAAAIAAAABAgAAAAxNdXN0IG1hbmFnZXIJAARMAAAAAgMJAQAAAAlpc0RlZmluZWQAAAABCQAEJgAAAAEFAAAAFmFzc2V0c1N0b3JlQ29udHJhY3RQcm0GCQAAAgAAAAECAAAAJEludmFsaWQgYXNzZXRfc3RvcmUgY29udHJhY3QgYWRkcmVzcwkABEwAAAACAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQmAAAAAQUAAAATYm9vc3RpbmdDb250cmFjdFBybQYJAAACAAAAAQIAAAAhSW52YWxpZCBib29zdGluZyBjb250cmFjdCBhZGRyZXNzCQAETAAAAAIDCQEAAAAJaXNEZWZpbmVk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AAASaXNWZXJpZmllZFJFQURPTkxZCQAETAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAAA25pbAUAAAADbmlsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiCQAAAgAAAAECAAAAFUFzc2V0IGlzIG5vdCB2ZXJpZmllZAMJAAAAAAAAAgUAAAAZZW5zdXJlQW1vdW50QXNzZXRWZXJpZmllZAUAAAAZZW5zdXJlQW1vdW50QXNzZXRWZXJpZmllZAQAAAAKYnVybkZlZUludgkAA/wAAAAEBQAAABBlbWlzc2lvbkNvbnRyYWN0AgAAAARidXJuBQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQIBQAAAAdwYXltZW50AAAABmFtb3VudAUAAAADbmlsAwkAAAAAAAACBQAAAApidXJuRmVlSW52BQAAAApidXJuRmVlSW52CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAQa2V5SW5MaXN0QXNzZXRJZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAYJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA5rZXlTdGFydEhlaWdodAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAGaGVpZ2h0BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAABHZvdGUAAAADAAAADWFtb3VudEFzc2V0SWQAAAAMcHJpY2VBc3NldElkAAAAB2luRmF2b3IEAAAABmNoZWNrcwkABEwAAAACAwkBAAAAC3ZhbHVl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c2VwYXJhdG9yCQAFFAAAAAIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleVZvdGluZ1Jlc3VsdAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAAKdG90YWxWb3RlcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAlub1ZvdGVLZXkFAAAAC25vVm90ZVZhbHVlBQAAAANuaWwFAAAABHVuaXQFAAAAB2VudHJpZXMJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAAACAAAAAQIAAAASTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAVoYXNQTQUAAAAFaGFzUE0EAAAAB2NoZWNrUE0DCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkBAAAABXZhbHVlAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAHY2hlY2tQTQUAAAAHY2hlY2tQTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAACcG0JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAA90YXJnZXRQdWJsaWNLZXkEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDAFAAAAAnBrAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5CQAAAgAAAAECAAAAC01hdGNoIGVycm9yCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAPdGFyZ2V0UHVibGljS2V5+oW66g==", "chainId": 84, "height": 2029966, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: J7CtRfvmR6nxAmVpGH798a1n9V3WL4HU17ZVEzPLqXak Next: 9vHL7r6M9ndfd8VKh1tFWGn3LPm3pCoMpHG6mo8JoZy5 Diff:
OldNewDifferences
139139 then true
140140 else throw("priceAssetId is not USDN"), if ((getBoolean(keyInListAssetId(amountAssetId, priceAssetId)) == unit))
141141 then true
142- else throw("Already in voting list"), if (valueOrElse(invoke(userPoolContract, "keyStatus", [amountAssetId, priceAssetId], nil), false))
143- then true
144- else throw("User pool is not active")]
142+ else throw("Already in voting list")]
145143 if ((checks == checks))
146144 then {
147- let isAmountAssetVerified = match invoke(value(addressFromString(keyAssetsStoreContract)), "isVerifiedREADONLY", [amountAssetId], nil) {
148- case b: Boolean =>
149- b
145+ let ensureActive = match invoke(userPoolContract, "statusREADONLY", [amountAssetId, priceAssetId], nil) {
146+ case s: String =>
147+ if ((s == "active"))
148+ then true
149+ else throw("User pool is not active")
150150 case _ =>
151- throw("Asset is not verified")
151+ throw("User pool is not active")
152152 }
153- let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
154- if ((burnFeeInv == burnFeeInv))
155- then [BooleanEntry(keyInListAssetId(amountAssetId, priceAssetId), true), IntegerEntry(keyStartHeight(amountAssetId, priceAssetId), height)]
153+ if ((ensureActive == ensureActive))
154+ then {
155+ let ensureAmountAssetVerified = match invoke(value(addressFromString(keyAssetsStoreContract)), "isVerifiedREADONLY", [amountAssetId], nil) {
156+ case b: Boolean =>
157+ b
158+ case _ =>
159+ throw("Asset is not verified")
160+ }
161+ if ((ensureAmountAssetVerified == ensureAmountAssetVerified))
162+ then {
163+ let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
164+ if ((burnFeeInv == burnFeeInv))
165+ then [BooleanEntry(keyInListAssetId(amountAssetId, priceAssetId), true), IntegerEntry(keyStartHeight(amountAssetId, priceAssetId), height)]
166+ else throw("Strict value is not equal to itself.")
167+ }
168+ else throw("Strict value is not equal to itself.")
169+ }
156170 else throw("Strict value is not equal to itself.")
157171 }
158172 else throw("Strict value is not equal to itself.")
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)
1111
1212 let keyVotingThreshold = makeString(["%s", "votingThreshold"], 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 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (key + " is not defined"))
2525
2626
2727 func keyInListAssetId (amountAssetId,priceAssetId) = makeString([("%s%s%s" + "inList"), amountAssetId, priceAssetId], separator)
2828
2929
3030 func keyStartHeight (amountAssetId,priceAssetId) = makeString([("%s%s%s" + "startHeight"), amountAssetId, priceAssetId], separator)
3131
3232
3333 func keyVotingResult (amountAssetId,priceAssetId) = makeString(["%s%s%s", "votingResult", amountAssetId, priceAssetId], separator)
3434
3535
3636 func keyVote (amountAssetId,priceAssetId,voterAddress) = makeString(["%s%s%s%s", "vote", amountAssetId, priceAssetId, voterAddress], separator)
3737
3838
3939 func keyManagerPublicKey () = "%s__managerPublicKey"
4040
4141
4242 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
4343
4444
4545 let emissionContract = addressFromStringValue(getStringOrFail(keyEmissionContract))
4646
4747 let userPoolContract = addressFromStringValue(getStringOrFail(keyuserPoolContract))
4848
4949 let boostingContract = addressFromStringValue(getStringOrFail(keyBoostingContract))
5050
5151 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
5252 case s: String =>
5353 fromBase58String(s)
5454 case _: Unit =>
5555 unit
5656 case _ =>
5757 throw("Match error")
5858 }
5959
6060
6161 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
6262 case s: String =>
6363 fromBase58String(s)
6464 case _: Unit =>
6565 unit
6666 case _ =>
6767 throw("Match error")
6868 }
6969
7070
7171 func mustManager (i) = {
7272 let pd = throw("Permission denied")
7373 match managerPublicKeyOrUnit() {
7474 case pk: ByteVector =>
7575 if ((i.callerPublicKey == pk))
7676 then true
7777 else pd
7878 case _: Unit =>
7979 if ((i.caller == this))
8080 then true
8181 else pd
8282 case _ =>
8383 throw("Match error")
8484 }
8585 }
8686
8787
8888 func asInt (val) = match val {
8989 case valInt: Int =>
9090 valInt
9191 case _ =>
9292 throw("Failed to cast into Integer")
9393 }
9494
9595
9696 @Callable(i)
9797 func constructor (assetsStoreContractPrm,userPoolContractPrm,boostingContractPrm,emissionContractPrm,feeAmountPrm,wxAssetIdPrm,votingThresholdPrm,votingDurationPrm,usdnAssetIdPrm) = {
9898 let checks = [if (mustManager(i))
9999 then true
100100 else throw("Must manager"), if (isDefined(addressFromString(assetsStoreContractPrm)))
101101 then true
102102 else throw("Invalid asset_store contract address"), if (isDefined(addressFromString(boostingContractPrm)))
103103 then true
104104 else throw("Invalid boosting contract address"), if (isDefined(addressFromString(userPoolContractPrm)))
105105 then true
106106 else throw("Invalid user_pools contract address"), if (isDefined(addressFromString(emissionContractPrm)))
107107 then true
108108 else throw("Invalid emission contract address"), if ((feeAmountPrm >= 0))
109109 then true
110110 else throw("Invalid fee amount"), if ((votingDurationPrm > 0))
111111 then true
112112 else throw("Invalid voting duration"), if ((votingThresholdPrm >= 0))
113113 then true
114114 else throw("Invalid voting threshold"), if (isDefined(assetInfo(fromBase58String(wxAssetIdPrm))))
115115 then true
116116 else throw("Invalid WX asset ID"), if (isDefined(assetInfo(fromBase58String(usdnAssetIdPrm))))
117117 then true
118118 else throw("Invalid USDN asset ID")]
119119 if ((checks == checks))
120120 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)
121121 else throw("Strict value is not equal to itself.")
122122 }
123123
124124
125125
126126 @Callable(i)
127127 func suggest (amountAssetId,priceAssetId) = {
128128 let payment = value(i.payments[0])
129129 let info = valueOrErrorMessage(assetInfo(fromBase58String(amountAssetId)), "Invalid amountAssetId ID")
130130 let checks = [if ((info.issuer == i.caller))
131131 then true
132132 else throw("Asset can only be suggested by its issuer"), if ((info.scripted == false))
133133 then true
134134 else throw("Asset is smart"), if ((toBase58String(value(payment.assetId)) == value(getString(keyWxAssetId))))
135135 then true
136136 else throw("Invalid fee asset"), if ((payment.amount == value(getInteger(keyFeeAmount))))
137137 then true
138138 else throw("Invalid fee amount"), if ((priceAssetId == value(getString(keyUsdnAssetId))))
139139 then true
140140 else throw("priceAssetId is not USDN"), if ((getBoolean(keyInListAssetId(amountAssetId, priceAssetId)) == unit))
141141 then true
142- else throw("Already in voting list"), if (valueOrElse(invoke(userPoolContract, "keyStatus", [amountAssetId, priceAssetId], nil), false))
143- then true
144- else throw("User pool is not active")]
142+ else throw("Already in voting list")]
145143 if ((checks == checks))
146144 then {
147- let isAmountAssetVerified = match invoke(value(addressFromString(keyAssetsStoreContract)), "isVerifiedREADONLY", [amountAssetId], nil) {
148- case b: Boolean =>
149- b
145+ let ensureActive = match invoke(userPoolContract, "statusREADONLY", [amountAssetId, priceAssetId], nil) {
146+ case s: String =>
147+ if ((s == "active"))
148+ then true
149+ else throw("User pool is not active")
150150 case _ =>
151- throw("Asset is not verified")
151+ throw("User pool is not active")
152152 }
153- let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
154- if ((burnFeeInv == burnFeeInv))
155- then [BooleanEntry(keyInListAssetId(amountAssetId, priceAssetId), true), IntegerEntry(keyStartHeight(amountAssetId, priceAssetId), height)]
153+ if ((ensureActive == ensureActive))
154+ then {
155+ let ensureAmountAssetVerified = match invoke(value(addressFromString(keyAssetsStoreContract)), "isVerifiedREADONLY", [amountAssetId], nil) {
156+ case b: Boolean =>
157+ b
158+ case _ =>
159+ throw("Asset is not verified")
160+ }
161+ if ((ensureAmountAssetVerified == ensureAmountAssetVerified))
162+ then {
163+ let burnFeeInv = invoke(emissionContract, "burn", nil, [AttachedPayment(payment.assetId, payment.amount)])
164+ if ((burnFeeInv == burnFeeInv))
165+ then [BooleanEntry(keyInListAssetId(amountAssetId, priceAssetId), true), IntegerEntry(keyStartHeight(amountAssetId, priceAssetId), height)]
166+ else throw("Strict value is not equal to itself.")
167+ }
168+ else throw("Strict value is not equal to itself.")
169+ }
156170 else throw("Strict value is not equal to itself.")
157171 }
158172 else throw("Strict value is not equal to itself.")
159173 }
160174
161175
162176
163177 @Callable(i)
164178 func vote (amountAssetId,priceAssetId,inFavor) = {
165179 let checks = [if (valueOrElse(getBoolean(keyInListAssetId(amountAssetId, priceAssetId)), false))
166180 then true
167181 else throw("The token isn't on the voting list"), (height >= (value(getInteger(keyStartHeight(amountAssetId, priceAssetId))) + value(getInteger(keyVotingDuration))))]
168182 if ((checks == checks))
169183 then {
170184 let votingResult = split(value(getString(keyVotingResult(amountAssetId, priceAssetId))), separator)
171185 let positiveVotes = votingResult[1]
172186 let negativeVotes = votingResult[2]
173187 let gwxAmount = invoke(boostingContract, "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), height], nil)
174188 let entries = if (inFavor)
175189 then {
176190 let newPositiveVotes = (parseIntValue(positiveVotes) + asInt(gwxAmount))
177191 let totalVotes = makeString(["%d%d", toString(newPositiveVotes), negativeVotes], separator)
178192 let yesVoteKey = keyVote(amountAssetId, priceAssetId, toString(i.caller))
179193 let yesVoteValue = makeString([keyVotingResult(amountAssetId, priceAssetId), "yes"], separator)
180194 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId), totalVotes), StringEntry(yesVoteKey, yesVoteValue)], unit)
181195 }
182196 else {
183197 let newNegativeVotes = (parseIntValue(negativeVotes) + asInt(gwxAmount))
184198 let totalVotes = makeString(["%d%d", positiveVotes, toString(newNegativeVotes)], separator)
185199 let noVoteKey = keyVote(amountAssetId, priceAssetId, toString(i.caller))
186200 let noVoteValue = makeString([keyVotingResult(amountAssetId, priceAssetId), "no"], separator)
187201 $Tuple2([StringEntry(keyVotingResult(amountAssetId, priceAssetId), totalVotes), StringEntry(noVoteKey, noVoteValue)], unit)
188202 }
189203 entries
190204 }
191205 else throw("Strict value is not equal to itself.")
192206 }
193207
194208
195209
196210 @Callable(i)
197211 func setManager (pendingManagerPublicKey) = {
198212 let checkCaller = mustManager(i)
199213 if ((checkCaller == checkCaller))
200214 then {
201215 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
202216 if ((checkManagerPublicKey == checkManagerPublicKey))
203217 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
204218 else throw("Strict value is not equal to itself.")
205219 }
206220 else throw("Strict value is not equal to itself.")
207221 }
208222
209223
210224
211225 @Callable(i)
212226 func confirmManager () = {
213227 let pm = pendingManagerPublicKeyOrUnit()
214228 let hasPM = if (isDefined(pm))
215229 then true
216230 else throw("No pending manager")
217231 if ((hasPM == hasPM))
218232 then {
219233 let checkPM = if ((i.callerPublicKey == value(pm)))
220234 then true
221235 else throw("You are not pending manager")
222236 if ((checkPM == checkPM))
223237 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
224238 else throw("Strict value is not equal to itself.")
225239 }
226240 else throw("Strict value is not equal to itself.")
227241 }
228242
229243
230244 @Verifier(tx)
231245 func verify () = {
232246 let targetPublicKey = match managerPublicKeyOrUnit() {
233247 case pk: ByteVector =>
234248 pk
235249 case _: Unit =>
236250 tx.senderPublicKey
237251 case _ =>
238252 throw("Match error")
239253 }
240254 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
241255 }
242256

github/deemru/w8io/169f3d6 
38.79 ms