tx · 7A5u8p8xKPJ1cD8oHe5VmfWhFYW1wU213LEv7ycbEKrC

3NBqs2vfpyT5cMdUJ97mEJ1Ycp2y8GbAZDA:  -0.01300000 Waves

2023.03.27 18:11 [2508531] smart account 3NBqs2vfpyT5cMdUJ97mEJ1Ycp2y8GbAZDA > SELF 0.00000000 Waves

{ "type": 13, "id": "7A5u8p8xKPJ1cD8oHe5VmfWhFYW1wU213LEv7ycbEKrC", "fee": 1300000, "feeAssetId": null, "timestamp": 1679929943034, "version": 2, "chainId": 84, "sender": "3NBqs2vfpyT5cMdUJ97mEJ1Ycp2y8GbAZDA", "senderPublicKey": "H19CeJVbUnfsK8EYs8K6fHxwBH7pLyxw8WCDFu7D4rGQ", "proofs": [ "4VgebUhevVNc6wcWJCirhNJxxJS4UCq1TnvAL49vsZw8kWd679pzHSptj1UEjaH2hd8SwpoBW3guqMxJY6coksDQ" ], "script": "base64:AAIFAAAAAAAABjgIAhIJCgcIAQEBAQEIEgMKAQgSAwoBARIAEgMKAQgSABIAIgNTRVAiB3dyYXBFcnIiA21zZyIIdGhyb3dFcnIiD2dldFN0cmluZ09yRmFpbCIHYWRkcmVzcyIDa2V5IhFrZXlGYWN0b3J5QWRkcmVzcyIZa2V5Vm90aW5nVmVyaWZpZWRDb250cmFjdCIia2V5Vm90aW5nRW1pc3Npb25DYW5kaWRhdGVDb250cmFjdCIUa2V5VXNlclBvb2xzQ29udHJhY3QiFnZvdGluZ1ZlcmlmaWVkQ29udHJhY3QiH3ZvdGluZ0VtaXNzaW9uQ2FuZGlkYXRlQ29udHJhY3QiEXVzZXJQb29sc0NvbnRyYWN0IhhJZHhGYWN0b3J5Q2ZnU3Rha2luZ0RhcHAiGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHAiFElkeEZhY3RvcnlDZmdJZG9EYXBwIhVJZHhGYWN0b3J5Q2ZnVGVhbURhcHAiGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHAiFUlkeEZhY3RvcnlDZmdSZXN0RGFwcCIZSWR4RmFjdG9yeUNmZ1NsaXBwYWdlRGFwcCIaSWR4RmFjdG9yeUNmZ0d3eFJld2FyZERhcHAiDWtleUZhY3RvcnlDZmciGmtleUZhY3RvcnlMcDJBc3NldHNNYXBwaW5nIgpscEFzc2V0U3RyIhBrZXlGYWN0b3J5THBMaXN0IiZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcyIUa2V5RmFjdG9yeVBvb2xXZWlnaHQiD2NvbnRyYWN0QWRkcmVzcyIYcmVhZEZhY3RvcnlBZGRyZXNzT3JGYWlsIgpyZWFkTHBMaXN0IhRyZWFkRmFjdG9yeUNmZ09yRmFpbCIHZmFjdG9yeSIYZ2V0Qm9vc3RpbmdBZGRyZXNzT3JGYWlsIgpmYWN0b3J5Q2ZnIhhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwiF2dldFN0YWtpbmdBZGRyZXNzT3JGYWlsIhlnZXRHd3hSZXdhcmRBZGRyZXNzT3JGYWlsIglrZXlDb25maWciGWtleVJhdGVQZXJCbG9ja01heEN1cnJlbnQiG2tleVJhdGVQZXJCbG9ja01heFN0YXJ0RnJvbSIJdGltZXN0YW1wIgVibG9jayIWa2V5UmF0ZVBlckJsb2NrQ3VycmVudCIYa2V5UmF0ZVBlckJsb2NrU3RhcnRGcm9tIhVrZXlFbWlzc2lvblN0YXJ0QmxvY2siG2tleUVtaXNzaW9uRHVyYXRpb25JbkJsb2NrcyITa2V5RW1pc3Npb25FbmRCbG9jayINa2V5Qm9vc3RDb2VmZiIRYm9vc3RDb2VmZkRlZmF1bHQiCmJvb3N0Q29lZmYiE2tleU1hbmFnZXJQdWJsaWNLZXkiGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5IhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IgckbWF0Y2gwIgFzIh1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdCILbXVzdE1hbmFnZXIiAWkiAnBkIgJwayIOZmFjdG9yeUFkZHJlc3MiD3JhdGVQZXJCbG9ja01heCIMcmF0ZVBlckJsb2NrIhJlbWlzc2lvblN0YXJ0QmxvY2siEGVtaXNzaW9uRHVyYXRpb24iFmVtaXNzaW9uU3RhcnRUaW1lc3RhbXAiDHd4QXNzZXRJZFN0ciILY2hlY2tDYWxsZXIiGXZvdGluZ1ZlcmlmaWVkQ29udHJhY3RQcm0iBmFtb3VudCIPZmFjdG9yeUNvbnRyYWN0Ig9zdGFraW5nQ29udHJhY3QiEmd3eFJld2FyZHNDb250cmFjdCIGY2FsbGVyIgl3eEFzc2V0SWQiEGJvb3N0aW5nQ29udHJhY3QiA3BtdCIHYXNzZXRJZCIJcG10QW1vdW50IhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleQAAAC8AAAAAAWECAAAAAl9fAQAAAAFiAAAAAQAAAAFjCQAEuQAAAAIJAARMAAAAAgIAAAAOZW1pc3Npb24ucmlkZToJAARMAAAAAgkABCUAAAABBQAAAAR0aGlzCQAETAAAAAIFAAAAAWMFAAAAA25pbAIAAAABIAEAAAABZAAAAAEAAAABYwkAAAIAAAABCQEAAAABYgAAAAEFAAAAAWMBAAAAAWUAAAACAAAAAWYAAAABZwkBAAAAE3ZhbHVlT3JFcnJv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", "height": 2508531, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9LX9TmfgFMvNdxpdNuFmF1cnHUb3bVbQmBTqccJWMyWe Next: 4M8AEUuhVe2LGh2AJayJAGKCnMvfzgTKfU11XeJZbQcC Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
6-func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), (("mandatory this." + key) + " is not defined"))
6+func wrapErr (msg) = makeString(["emission.ride:", toString(this), msg], " ")
7+
8+
9+func throwErr (msg) = throw(wrapErr(msg))
10+
11+
12+func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), wrapErr((("mandatory this." + key) + " is not defined")))
713
814
915 func keyFactoryAddress () = "%s%s__config__factoryAddress"
131137
132138
133139 func mustManager (i) = {
134- let pd = throw("Permission denied")
140+ let pd = throwErr("Permission denied")
135141 match managerPublicKeyOrUnit() {
136142 case pk: ByteVector =>
137143 if ((i.callerPublicKey == pk))
179185 if (if ((caller != stakingContract))
180186 then (caller != gwxRewardsContract)
181187 else false)
182- then throw("permissions denied")
188+ then throwErr("permissions denied")
183189 else {
184190 let wxAssetIdStr = split(getStringOrFail(this, keyConfig()), SEP)[1]
185191 let wxAssetId = fromBase58String(wxAssetIdStr)
195201 let factoryCfg = readFactoryCfgOrFail(factoryContract)
196202 let boostingContract = getBoostingAddressOrFail(factoryCfg)
197203 if ((size(i.payments) != 1))
198- then throw("exact one payment is allowed")
204+ then throwErr("exact one payment is allowed")
199205 else {
200206 let pmt = i.payments[0]
201207 let assetId = value(pmt.assetId)
202208 let pmtAmount = pmt.amount
203209 let wxAssetId = fromBase58String(split(getStringOrFail(this, keyConfig()), SEP)[1])
204210 if ((assetId != wxAssetId))
205- then throw("invalid wxAssetId is passed")
211+ then throwErr("invalid wxAssetId is passed")
206212 else if (!(containsElement([boostingContract, votingVerifiedContract, votingEmissionCandidateContract, userPoolsContract], i.caller)))
207- then throw("permissions denied")
213+ then throwErr("permissions denied")
208214 else [Burn(assetId, pmtAmount), StringEntry(("%s%s%s__history__burn__" + toBase58String(i.transactionId)), makeString(["%d%d%d", toString(height), toString(lastBlock.timestamp), toString(pmtAmount)], SEP))]
209215 }
210216 }
231237 let pm = pendingManagerPublicKeyOrUnit()
232238 let hasPM = if (isDefined(pm))
233239 then true
234- else throw("No pending manager")
240+ else throwErr("No pending manager")
235241 if ((hasPM == hasPM))
236242 then {
237243 let checkPM = if ((i.callerPublicKey == value(pm)))
238244 then true
239- else throw("You are not pending manager")
245+ else throwErr("You are not pending manager")
240246 if ((checkPM == checkPM))
241247 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
242248 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 SEP = "__"
55
6-func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), (("mandatory this." + key) + " is not defined"))
6+func wrapErr (msg) = makeString(["emission.ride:", toString(this), msg], " ")
7+
8+
9+func throwErr (msg) = throw(wrapErr(msg))
10+
11+
12+func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), wrapErr((("mandatory this." + key) + " is not defined")))
713
814
915 func keyFactoryAddress () = "%s%s__config__factoryAddress"
1016
1117
1218 let keyVotingVerifiedContract = "%s%s__config__votingVerifiedContract"
1319
1420 let keyVotingEmissionCandidateContract = "%s%s__config__votingEmissionCandidateContract"
1521
1622 let keyUserPoolsContract = "%s%s__config__userPoolsContract"
1723
1824 let votingVerifiedContract = addressFromStringValue(getStringOrFail(this, keyVotingVerifiedContract))
1925
2026 let votingEmissionCandidateContract = addressFromStringValue(getStringOrFail(this, keyVotingEmissionCandidateContract))
2127
2228 let userPoolsContract = addressFromStringValue(getStringOrFail(this, keyUserPoolsContract))
2329
2430 let IdxFactoryCfgStakingDapp = 1
2531
2632 let IdxFactoryCfgBoostingDapp = 2
2733
2834 let IdxFactoryCfgIdoDapp = 3
2935
3036 let IdxFactoryCfgTeamDapp = 4
3137
3238 let IdxFactoryCfgEmissionDapp = 5
3339
3440 let IdxFactoryCfgRestDapp = 6
3541
3642 let IdxFactoryCfgSlippageDapp = 7
3743
3844 let IdxFactoryCfgGwxRewardDapp = 10
3945
4046 func keyFactoryCfg () = "%s__factoryConfig"
4147
4248
4349 func keyFactoryLp2AssetsMapping (lpAssetStr) = makeString(["%s%s%s", lpAssetStr, "mappings__lpAsset2PoolContract"], SEP)
4450
4551
4652 func keyFactoryLpList () = "%s__lpTokensList"
4753
4854
4955 func keyFactoryLpAssetToPoolContractAddress (lpAssetStr) = makeString(["%s%s%s", lpAssetStr, "mappings__lpAsset2PoolContract"], SEP)
5056
5157
5258 func keyFactoryPoolWeight (contractAddress) = makeString(["%s%s", "poolWeight", contractAddress], SEP)
5359
5460
5561 func readFactoryAddressOrFail () = addressFromStringValue(getStringOrFail(this, keyFactoryAddress()))
5662
5763
5864 func readLpList () = split(valueOrElse(getString(readFactoryAddressOrFail(), keyFactoryLpList()), ""), SEP)
5965
6066
6167 func readFactoryCfgOrFail (factory) = split(getStringOrFail(factory, keyFactoryCfg()), SEP)
6268
6369
6470 func getBoostingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgBoostingDapp])
6571
6672
6773 func getEmissionAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgEmissionDapp])
6874
6975
7076 func getStakingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgStakingDapp])
7177
7278
7379 func getGwxRewardAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgGwxRewardDapp])
7480
7581
7682 func keyConfig () = "%s__config"
7783
7884
7985 func keyRatePerBlockMaxCurrent () = "%s%s__ratePerBlockMax__current"
8086
8187
8288 func keyRatePerBlockMaxStartFrom (timestamp,block) = makeString(["%s%s%d%d__ratePerBlockMax__start", toString(timestamp), toString(block)], SEP)
8389
8490
8591 func keyRatePerBlockCurrent () = "%s%s__ratePerBlock__current"
8692
8793
8894 func keyRatePerBlockStartFrom (timestamp,block) = makeString(["%s%s%d%d__ratePerBlock__start", toString(timestamp), toString(block)], SEP)
8995
9096
9197 func keyEmissionStartBlock () = "%s%s__emission__startBlock"
9298
9399
94100 func keyEmissionDurationInBlocks () = "%s%s__emission__duration"
95101
96102
97103 func keyEmissionEndBlock () = "%s%s__emission__endBlock"
98104
99105
100106 func keyBoostCoeff () = "%s__boostCoeff"
101107
102108
103109 let boostCoeffDefault = 3
104110
105111 let boostCoeff = valueOrElse(getInteger(this, keyBoostCoeff()), boostCoeffDefault)
106112
107113 func keyManagerPublicKey () = "%s__managerPublicKey"
108114
109115
110116 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
111117
112118
113119 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
114120 case s: String =>
115121 fromBase58String(s)
116122 case _: Unit =>
117123 unit
118124 case _ =>
119125 throw("Match error")
120126 }
121127
122128
123129 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
124130 case s: String =>
125131 fromBase58String(s)
126132 case _: Unit =>
127133 unit
128134 case _ =>
129135 throw("Match error")
130136 }
131137
132138
133139 func mustManager (i) = {
134- let pd = throw("Permission denied")
140+ let pd = throwErr("Permission denied")
135141 match managerPublicKeyOrUnit() {
136142 case pk: ByteVector =>
137143 if ((i.callerPublicKey == pk))
138144 then true
139145 else pd
140146 case _: Unit =>
141147 if ((i.caller == this))
142148 then true
143149 else pd
144150 case _ =>
145151 throw("Match error")
146152 }
147153 }
148154
149155
150156 @Callable(i)
151157 func constructor (factoryAddress,ratePerBlockMax,ratePerBlock,emissionStartBlock,emissionDuration,emissionStartTimestamp,wxAssetIdStr) = {
152158 let checkCaller = mustManager(i)
153159 if ((checkCaller == checkCaller))
154160 then [IntegerEntry(keyRatePerBlockMaxStartFrom(emissionStartTimestamp, emissionStartBlock), ratePerBlockMax), IntegerEntry(keyRatePerBlockMaxCurrent(), ratePerBlockMax), IntegerEntry(keyRatePerBlockStartFrom(emissionStartTimestamp, emissionStartBlock), ratePerBlock), IntegerEntry(keyRatePerBlockCurrent(), ratePerBlock), IntegerEntry(keyEmissionStartBlock(), emissionStartBlock), IntegerEntry(keyEmissionDurationInBlocks(), emissionDuration), IntegerEntry(keyEmissionEndBlock(), (emissionStartBlock + emissionDuration)), StringEntry(keyFactoryAddress(), factoryAddress), StringEntry(keyConfig(), ("%s__" + wxAssetIdStr))]
155161 else throw("Strict value is not equal to itself.")
156162 }
157163
158164
159165
160166 @Callable(i)
161167 func constructorV2 (votingVerifiedContractPrm) = {
162168 let checkCaller = mustManager(i)
163169 if ((checkCaller == checkCaller))
164170 then $Tuple2([StringEntry(keyVotingVerifiedContract, votingVerifiedContractPrm)], unit)
165171 else throw("Strict value is not equal to itself.")
166172 }
167173
168174
169175
170176 @Callable(i)
171177 func emit (amount) = if ((0 >= amount))
172178 then $Tuple2(nil, nil)
173179 else {
174180 let factoryContract = readFactoryAddressOrFail()
175181 let factoryCfg = readFactoryCfgOrFail(factoryContract)
176182 let stakingContract = getStakingAddressOrFail(factoryCfg)
177183 let gwxRewardsContract = getGwxRewardAddressOrFail(factoryCfg)
178184 let caller = i.caller
179185 if (if ((caller != stakingContract))
180186 then (caller != gwxRewardsContract)
181187 else false)
182- then throw("permissions denied")
188+ then throwErr("permissions denied")
183189 else {
184190 let wxAssetIdStr = split(getStringOrFail(this, keyConfig()), SEP)[1]
185191 let wxAssetId = fromBase58String(wxAssetIdStr)
186192 $Tuple2([ScriptTransfer(caller, amount, wxAssetId)], [wxAssetId])
187193 }
188194 }
189195
190196
191197
192198 @Callable(i)
193199 func burn () = {
194200 let factoryContract = readFactoryAddressOrFail()
195201 let factoryCfg = readFactoryCfgOrFail(factoryContract)
196202 let boostingContract = getBoostingAddressOrFail(factoryCfg)
197203 if ((size(i.payments) != 1))
198- then throw("exact one payment is allowed")
204+ then throwErr("exact one payment is allowed")
199205 else {
200206 let pmt = i.payments[0]
201207 let assetId = value(pmt.assetId)
202208 let pmtAmount = pmt.amount
203209 let wxAssetId = fromBase58String(split(getStringOrFail(this, keyConfig()), SEP)[1])
204210 if ((assetId != wxAssetId))
205- then throw("invalid wxAssetId is passed")
211+ then throwErr("invalid wxAssetId is passed")
206212 else if (!(containsElement([boostingContract, votingVerifiedContract, votingEmissionCandidateContract, userPoolsContract], i.caller)))
207- then throw("permissions denied")
213+ then throwErr("permissions denied")
208214 else [Burn(assetId, pmtAmount), StringEntry(("%s%s%s__history__burn__" + toBase58String(i.transactionId)), makeString(["%d%d%d", toString(height), toString(lastBlock.timestamp), toString(pmtAmount)], SEP))]
209215 }
210216 }
211217
212218
213219
214220 @Callable(i)
215221 func setManager (pendingManagerPublicKey) = {
216222 let checkCaller = mustManager(i)
217223 if ((checkCaller == checkCaller))
218224 then {
219225 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
220226 if ((checkManagerPublicKey == checkManagerPublicKey))
221227 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
222228 else throw("Strict value is not equal to itself.")
223229 }
224230 else throw("Strict value is not equal to itself.")
225231 }
226232
227233
228234
229235 @Callable(i)
230236 func confirmManager () = {
231237 let pm = pendingManagerPublicKeyOrUnit()
232238 let hasPM = if (isDefined(pm))
233239 then true
234- else throw("No pending manager")
240+ else throwErr("No pending manager")
235241 if ((hasPM == hasPM))
236242 then {
237243 let checkPM = if ((i.callerPublicKey == value(pm)))
238244 then true
239- else throw("You are not pending manager")
245+ else throwErr("You are not pending manager")
240246 if ((checkPM == checkPM))
241247 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
242248 else throw("Strict value is not equal to itself.")
243249 }
244250 else throw("Strict value is not equal to itself.")
245251 }
246252
247253
248254
249255 @Callable(i)
250256 func getBoostCoeffREADONLY () = $Tuple2(nil, boostCoeff)
251257
252258
253259 @Verifier(tx)
254260 func verify () = {
255261 let targetPublicKey = match managerPublicKeyOrUnit() {
256262 case pk: ByteVector =>
257263 pk
258264 case _: Unit =>
259265 tx.senderPublicKey
260266 case _ =>
261267 throw("Match error")
262268 }
263269 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
264270 }
265271

github/deemru/w8io/3ef1775 
67.65 ms