2023.03.28 16:18 [3575478] smart account 3PJyz4AHXKBgDuFx7uZdYmHCBtTmDnRgCx3 > SELF 0.00000000 Waves

{ "type": 13, "id": "D4YRLWmUXVnRGruMx8iDxdokyms2F3yanZASntoSd6MK", "fee": 1400000, "feeAssetId": null, "timestamp": 1680009539257, "version": 2, "chainId": 87, "sender": "3PJyz4AHXKBgDuFx7uZdYmHCBtTmDnRgCx3", "senderPublicKey": "FoGdD9qz4AFW3pdmp1QCA5vvo9wn3fTbv4JnYrWZe3BB", "proofs": [ "3ecRKznxhzD6gsmoitWpwRPjM6AonDApik28QtzeD1e7Phwuju5mWeZUwJLNFHo9nM6wLQ1fjV8ag5AwdBu1tSxG" ], "script": "base64:AAIFAAAAAAAAACIIAhIJCgcIAQEBAQEIEgMKAQgSAwoBARIAEgMKAQgSABIAAAAALwAAAAADU0VQAgAAAAJfXwEAAAAHd3JhcEVycgAAAAEAAAADbXNnCQAEuQAAAAIJAARMAAAAAgIAAAAOZW1pc3Npb24ucmlkZToJAARMAAAAAgkABCUAAAABBQAAAAR0aGlzCQAETAAAAAIFAAAAA21zZwUAAAADbmlsAgAAAAEgAQAAAAh0aHJvd0VycgAAAAEAAAADbXNnCQAAAgAAAAEJAQAAAAd3cmFwRXJyAAAAAQUAAAADbXNnAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQEAAAAHd3JhcEVycgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAA9tYW5kYXRvcnkgdGhpcy4FAAAAA2tleQIAAAAPIGlzIG5vdCBkZWZpbmVkAQAAABFrZXlGYWN0b3J5QWRkcmVzcwAAAAACAAAAHCVzJXNfX2NvbmZpZ19fZmFjdG9yeUFkZHJlc3MAAAAAGWtleVZvdGluZ1ZlcmlmaWVkQ29udHJhY3QCAAAAJCVzJXNfX2NvbmZpZ19fdm90aW5nVmVyaWZpZWRDb250cmFjdAAAAAAia2V5Vm90aW5nRW1pc3Npb25DYW5kaWRhdGVDb250cmFjdAIAAAAtJXMlc19fY29uZmlnX192b3RpbmdFbWlzc2lvbkNhbmRpZGF0ZUNvbnRyYWN0AAAAABRrZXlVc2VyUG9vbHNDb250cmFjdAIAAAAfJXMlc19fY29uZmlnX191c2VyUG9vbHNDb250cmFjdAAAAAAWdm90aW5nVmVyaWZpZWRDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMFAAAAGWtleVZvdGluZ1ZlcmlmaWVkQ29udHJhY3QAAAAAH3ZvdGluZ0VtaXNzaW9uQ2FuZGlkYXRlQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzBQAAACJrZXlWb3RpbmdFbWlzc2lvbkNhbmRpZGF0ZUNvbnRyYWN0AAAAABF1c2VyUG9vbHNDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMFAAAAFGtleVVzZXJQb29sc0NvbnRyYWN0AAAAABhJZHhGYWN0b3J5Q2ZnU3Rha2luZ0RhcHAAAAAAAAAAAAEAAAAAGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHAAAAAAAAAAAAIAAAAAFElkeEZhY3RvcnlDZmdJZG9EYXBwAAAAAAAAAAADAAAAABVJZHhGYWN0b3J5Q2ZnVGVhbURhcHAAAAAAAAAAAAQAAAAAGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHAAAAAAAAAAAAUAAAAAFUlkeEZhY3RvcnlDZmdSZXN0RGFwcAAAAAAAAAAABgAAAAAZSWR4RmFjdG9yeUNmZ1NsaXBwYWdlRGFwcAAAAAAAAAAABwAAAAAaSWR4RmFjdG9yeUNmZ0d3eFJld2FyZERhcHAAAAAAAAAAAAoBAAAADWtleUZhY3RvcnlDZmcAAAAAAgAAABElc19fZmFjdG9yeUNvbmZpZwEAAAAaa2V5RmFjdG9yeUxwMkFzc2V0c01hcHBpbmcAAAABAAAACmxwQXNzZXRTdHIJAAS5AAAAAgkABEwAAAACAgAAAAYlcyVzJXMJAARMAAAAAgUAAAAKbHBBc3NldFN0cgkABEwAAAACAgAAAB5tYXBwaW5nc19fbHBBc3NldDJQb29sQ29udHJhY3QFAAAAA25pbAUAAAADU0VQAQAAABBrZXlGYWN0b3J5THBMaXN0AAAAAAIAAAAQJXNfX2xwVG9rZW5zTGlzdAEAAAAma2V5RmFjdG9yeUxwQXNzZXRUb1Bvb2xDb250cmFjdEFkZHJlc3MAAAABAAAACmxwQXNzZXRTdHIJAAS5AAAAAgkABEwAAAACAgAAAAYlcyVzJXMJAARMAAAAAgUAAAAKbHBBc3NldFN0cgkABEwAAAACAgAAAB5tYXBwaW5nc19fbHBBc3NldDJQb29sQ29udHJhY3QFAAAAA25pbAUAAAADU0VQAQAAABRrZXlGYWN0b3J5UG9vbFdlaWdodAAAAAEAAAAPY29udHJhY3RBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAEJXMlcwkABEwAAAACAgAAAApwb29sV2VpZ2h0CQAETAAAAAIFAAAAD2NvbnRyYWN0QWRkcmVzcwUAAAADbmlsBQAAAANTRVABAAAAGHJlYWRGYWN0b3J5QWRkcmVzc09yRmFpbAAAAAAJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAARa2V5RmFjdG9yeUFkZHJlc3MAAAAAAQAAAApyZWFkTHBMaXN0AAAAAAkABLUAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIJAQAAABhyZWFkRmFjdG9yeUFkZHJlc3NPckZhaWwAAAAACQEAAAAQa2V5RmFjdG9yeUxwTGlzdAAAAAACAAAAAAUAAAADU0VQAQAAABRyZWFkRmFjdG9yeUNmZ09yRmFpbAAAAAEAAAAHZmFjdG9yeQkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAHZmFjdG9yeQkBAAAADWtleUZhY3RvcnlDZmcAAAAABQAAAANTRVABAAAAGGdldEJvb3N0aW5nQWRkcmVzc09yRmFpbAAAAAEAAAAKZmFjdG9yeUNmZwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnBQAAABlJZHhGYWN0b3J5Q2ZnQm9vc3RpbmdEYXBwAQAAABhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcAEAAAAXZ2V0U3Rha2luZ0FkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwAQAAABlnZXRHd3hSZXdhcmRBZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGklkeEZhY3RvcnlDZmdHd3hSZXdhcmREYXBwAQAAAAlrZXlDb25maWcAAAAAAgAAAAolc19fY29uZmlnAQAAABlrZXlSYXRlUGVyQmxvY2tNYXhDdXJyZW50AAAAAAIAAAAeJXMlc19fcmF0ZVBlckJsb2NrTWF4X19jdXJyZW50AQAAABtrZXlSYXRlUGVyQmxvY2tNYXhTdGFydEZyb20AAAACAAAACXRpbWVzdGFtcAAAAAVibG9jawkABLkAAAACCQAETAAAAAICAAAAICVzJXMlZCVkX19yYXRlUGVyQmxvY2tNYXhfX3N0YXJ0CQAETAAAAAIJAAGkAAAAAQUAAAAJdGltZXN0YW1wCQAETAAAAAIJAAGkAAAAAQUAAAAFYmxvY2sFAAAAA25pbAUAAAADU0VQAQAAABZrZXlSYXRlUGVyQmxvY2tDdXJyZW50AAAAAAIAAAAbJXMlc19fcmF0ZVBlckJsb2NrX19jdXJyZW50AQAAABhrZXlSYXRlUGVyQmxvY2tTdGFydEZyb20AAAACAAAACXRpbWVzdGFtcAAAAAVibG9jawkABLkAAAACCQAETAAAAAICAAAAHSVzJXMlZCVkX19yYXRlUGVyQmxvY2tfX3N0YXJ0CQAETAAAAAIJAAGkAAAAAQUAAAAJdGltZXN0YW1wCQAETAAAAAIJAAGkAAAAAQUAAAAFYmxvY2sFAAAAA25pbAUAAAADU0VQAQAAABVrZXlFbWlzc2lvblN0YXJ0QmxvY2sAAAAAAgAAABolcyVzX19lbWlzc2lvbl9fc3RhcnRCbG9jawEAAAAba2V5RW1pc3Npb25EdXJhdGlvbkluQmxvY2tzAAAAAAIAAAAYJXMlc19fZW1pc3Npb25fX2R1cmF0aW9uAQAAABNrZXlFbWlzc2lvbkVuZEJsb2NrAAAAAAIAAAAYJXMlc19fZW1pc3Npb25fX2VuZEJsb2NrAQAAAA1rZXlCb29zdENvZWZmAAAAAAIAAAAOJXNfX2Jvb3N0Q29lZmYAAAAAEWJvb3N0Q29lZmZEZWZhdWx0AAAAAAAAAAADAAAAAApib29zdENvZWZmCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAAA1rZXlCb29zdENvZWZmAAAAAAUAAAARYm9vc3RDb2VmZkRlZmF1bHQBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABQlc19fbWFuYWdlclB1YmxpY0tleQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAALbXVzdE1hbmFnZXIAAAABAAAAAWkEAAAAAnBkCQEAAAAIdGhyb3dFcnIAAAABAgAAABFQZXJtaXNzaW9uIGRlbmllZAQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAAJwawYFAAAAAnBkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0AwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMGBQAAAAJwZAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgAAAAcAAAABaQEAAAALY29uc3RydWN0b3IAAAAHAAAADmZhY3RvcnlBZGRyZXNzAAAAD3JhdGVQZXJCbG9ja01heAAAAAxyYXRlUGVyQmxvY2sAAAASZW1pc3Npb25TdGFydEJsb2NrAAAAEGVtaXNzaW9uRHVyYXRpb24AAAAWZW1pc3Npb25TdGFydFRpbWVzdGFtcAAAAAx3eEFzc2V0SWRTdHIEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABtrZXlSYXRlUGVyQmxvY2tNYXhTdGFydEZyb20AAAACBQAAABZlbWlzc2lvblN0YXJ0VGltZXN0YW1wBQAAABJlbWlzc2lvblN0YXJ0QmxvY2sFAAAAD3JhdGVQZXJCbG9ja01heAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGWtleVJhdGVQZXJCbG9ja01heEN1cnJlbnQAAAAABQAAAA9yYXRlUGVyQmxvY2tNYXgJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABhrZXlSYXRlUGVyQmxvY2tTdGFydEZyb20AAAACBQAAABZlbWlzc2lvblN0YXJ0VGltZXN0YW1wBQAAABJlbWlzc2lvblN0YXJ0QmxvY2sFAAAADHJhdGVQZXJCbG9jawkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmtleVJhdGVQZXJCbG9ja0N1cnJlbnQAAAAABQAAAAxyYXRlUGVyQmxvY2sJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABVrZXlFbWlzc2lvblN0YXJ0QmxvY2sAAAAABQAAABJlbWlzc2lvblN0YXJ0QmxvY2sJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABtrZXlFbWlzc2lvbkR1cmF0aW9uSW5CbG9ja3MAAAAABQAAABBlbWlzc2lvbkR1cmF0aW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAATa2V5RW1pc3Npb25FbmRCbG9jawAAAAAJAABkAAAAAgUAAAASZW1pc3Npb25TdGFydEJsb2NrBQAAABBlbWlzc2lvbkR1cmF0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFrZXlGYWN0b3J5QWRkcmVzcwAAAAAFAAAADmZhY3RvcnlBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAlrZXlDb25maWcAAAAACQABLAAAAAICAAAABCVzX18FAAAADHd4QXNzZXRJZFN0cgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA1jb25zdHJ1Y3RvclYyAAAAAQAAABl2b3RpbmdWZXJpZmllZENvbnRyYWN0UHJtBAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAFFAAAAAIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAZa2V5Vm90aW5nVmVyaWZpZWRDb250cmFjdAUAAAAZdm90aW5nVmVyaWZpZWRDb250cmFjdFBybQUAAAADbmlsBQAAAAR1bml0CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAARlbWl0AAAAAQAAAAZhbW91bnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAABmFtb3VudAkABRQAAAACBQAAAANuaWwFAAAAA25pbAQAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAYcmVhZEZhY3RvcnlBZGRyZXNzT3JGYWlsAAAAAAQAAAAKZmFjdG9yeUNmZwkBAAAAFHJlYWRGYWN0b3J5Q2ZnT3JGYWlsAAAAAQUAAAAPZmFjdG9yeUNvbnRyYWN0BAAAAA9zdGFraW5nQ29udHJhY3QJAQAAABdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAAAAAEFAAAACmZhY3RvcnlDZmcEAAAAEmd3eFJld2FyZHNDb250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", "height": 3575478, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BNDAKFvuPkUrDqBnR3GBu14JDcbZrgaRZoX8Jm8M9UVN Next: 3vrci1Jm1Fha1jTKnEoCoMcPTHMkxYvXg8PzypgnUwit 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"
97103 func keyEmissionEndBlock () = "%s%s__emission__endBlock"
98104
99105
106+func keyBoostCoeff () = "%s__boostCoeff"
107+
108+
109+let boostCoeffDefault = 3
110+
111+let boostCoeff = valueOrElse(getInteger(this, keyBoostCoeff()), boostCoeffDefault)
112+
100113 func keyManagerPublicKey () = "%s__managerPublicKey"
101114
102115
124137
125138
126139 func mustManager (i) = {
127- let pd = throw("Permission denied")
140+ let pd = throwErr("Permission denied")
128141 match managerPublicKeyOrUnit() {
129142 case pk: ByteVector =>
130143 if ((i.callerPublicKey == pk))
172185 if (if ((caller != stakingContract))
173186 then (caller != gwxRewardsContract)
174187 else false)
175- then throw("permissions denied")
188+ then throwErr("permissions denied")
176189 else {
177190 let wxAssetIdStr = split(getStringOrFail(this, keyConfig()), SEP)[1]
178191 let wxAssetId = fromBase58String(wxAssetIdStr)
188201 let factoryCfg = readFactoryCfgOrFail(factoryContract)
189202 let boostingContract = getBoostingAddressOrFail(factoryCfg)
190203 if ((size(i.payments) != 1))
191- then throw("exact one payment is allowed")
204+ then throwErr("exact one payment is allowed")
192205 else {
193206 let pmt = i.payments[0]
194207 let assetId = value(pmt.assetId)
195208 let pmtAmount = pmt.amount
196209 let wxAssetId = fromBase58String(split(getStringOrFail(this, keyConfig()), SEP)[1])
197210 if ((assetId != wxAssetId))
198- then throw("invalid wxAssetId is passed")
211+ then throwErr("invalid wxAssetId is passed")
199212 else if (!(containsElement([boostingContract, votingVerifiedContract, votingEmissionCandidateContract, userPoolsContract], i.caller)))
200- then throw("permissions denied")
213+ then throwErr("permissions denied")
201214 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))]
202215 }
203216 }
224237 let pm = pendingManagerPublicKeyOrUnit()
225238 let hasPM = if (isDefined(pm))
226239 then true
227- else throw("No pending manager")
240+ else throwErr("No pending manager")
228241 if ((hasPM == hasPM))
229242 then {
230243 let checkPM = if ((i.callerPublicKey == value(pm)))
231244 then true
232- else throw("You are not pending manager")
245+ else throwErr("You are not pending manager")
233246 if ((checkPM == checkPM))
234247 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
235248 else throw("Strict value is not equal to itself.")
236249 }
237250 else throw("Strict value is not equal to itself.")
238251 }
252+
253+
254+
255+@Callable(i)
256+func getBoostCoeffREADONLY () = $Tuple2(nil, boostCoeff)
239257
240258
241259 @Verifier(tx)
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
106+func keyBoostCoeff () = "%s__boostCoeff"
107+
108+
109+let boostCoeffDefault = 3
110+
111+let boostCoeff = valueOrElse(getInteger(this, keyBoostCoeff()), boostCoeffDefault)
112+
100113 func keyManagerPublicKey () = "%s__managerPublicKey"
101114
102115
103116 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
104117
105118
106119 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
107120 case s: String =>
108121 fromBase58String(s)
109122 case _: Unit =>
110123 unit
111124 case _ =>
112125 throw("Match error")
113126 }
114127
115128
116129 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
117130 case s: String =>
118131 fromBase58String(s)
119132 case _: Unit =>
120133 unit
121134 case _ =>
122135 throw("Match error")
123136 }
124137
125138
126139 func mustManager (i) = {
127- let pd = throw("Permission denied")
140+ let pd = throwErr("Permission denied")
128141 match managerPublicKeyOrUnit() {
129142 case pk: ByteVector =>
130143 if ((i.callerPublicKey == pk))
131144 then true
132145 else pd
133146 case _: Unit =>
134147 if ((i.caller == this))
135148 then true
136149 else pd
137150 case _ =>
138151 throw("Match error")
139152 }
140153 }
141154
142155
143156 @Callable(i)
144157 func constructor (factoryAddress,ratePerBlockMax,ratePerBlock,emissionStartBlock,emissionDuration,emissionStartTimestamp,wxAssetIdStr) = {
145158 let checkCaller = mustManager(i)
146159 if ((checkCaller == checkCaller))
147160 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))]
148161 else throw("Strict value is not equal to itself.")
149162 }
150163
151164
152165
153166 @Callable(i)
154167 func constructorV2 (votingVerifiedContractPrm) = {
155168 let checkCaller = mustManager(i)
156169 if ((checkCaller == checkCaller))
157170 then $Tuple2([StringEntry(keyVotingVerifiedContract, votingVerifiedContractPrm)], unit)
158171 else throw("Strict value is not equal to itself.")
159172 }
160173
161174
162175
163176 @Callable(i)
164177 func emit (amount) = if ((0 >= amount))
165178 then $Tuple2(nil, nil)
166179 else {
167180 let factoryContract = readFactoryAddressOrFail()
168181 let factoryCfg = readFactoryCfgOrFail(factoryContract)
169182 let stakingContract = getStakingAddressOrFail(factoryCfg)
170183 let gwxRewardsContract = getGwxRewardAddressOrFail(factoryCfg)
171184 let caller = i.caller
172185 if (if ((caller != stakingContract))
173186 then (caller != gwxRewardsContract)
174187 else false)
175- then throw("permissions denied")
188+ then throwErr("permissions denied")
176189 else {
177190 let wxAssetIdStr = split(getStringOrFail(this, keyConfig()), SEP)[1]
178191 let wxAssetId = fromBase58String(wxAssetIdStr)
179192 $Tuple2([ScriptTransfer(caller, amount, wxAssetId)], [wxAssetId])
180193 }
181194 }
182195
183196
184197
185198 @Callable(i)
186199 func burn () = {
187200 let factoryContract = readFactoryAddressOrFail()
188201 let factoryCfg = readFactoryCfgOrFail(factoryContract)
189202 let boostingContract = getBoostingAddressOrFail(factoryCfg)
190203 if ((size(i.payments) != 1))
191- then throw("exact one payment is allowed")
204+ then throwErr("exact one payment is allowed")
192205 else {
193206 let pmt = i.payments[0]
194207 let assetId = value(pmt.assetId)
195208 let pmtAmount = pmt.amount
196209 let wxAssetId = fromBase58String(split(getStringOrFail(this, keyConfig()), SEP)[1])
197210 if ((assetId != wxAssetId))
198- then throw("invalid wxAssetId is passed")
211+ then throwErr("invalid wxAssetId is passed")
199212 else if (!(containsElement([boostingContract, votingVerifiedContract, votingEmissionCandidateContract, userPoolsContract], i.caller)))
200- then throw("permissions denied")
213+ then throwErr("permissions denied")
201214 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))]
202215 }
203216 }
204217
205218
206219
207220 @Callable(i)
208221 func setManager (pendingManagerPublicKey) = {
209222 let checkCaller = mustManager(i)
210223 if ((checkCaller == checkCaller))
211224 then {
212225 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
213226 if ((checkManagerPublicKey == checkManagerPublicKey))
214227 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
215228 else throw("Strict value is not equal to itself.")
216229 }
217230 else throw("Strict value is not equal to itself.")
218231 }
219232
220233
221234
222235 @Callable(i)
223236 func confirmManager () = {
224237 let pm = pendingManagerPublicKeyOrUnit()
225238 let hasPM = if (isDefined(pm))
226239 then true
227- else throw("No pending manager")
240+ else throwErr("No pending manager")
228241 if ((hasPM == hasPM))
229242 then {
230243 let checkPM = if ((i.callerPublicKey == value(pm)))
231244 then true
232- else throw("You are not pending manager")
245+ else throwErr("You are not pending manager")
233246 if ((checkPM == checkPM))
234247 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
235248 else throw("Strict value is not equal to itself.")
236249 }
237250 else throw("Strict value is not equal to itself.")
238251 }
252+
253+
254+
255+@Callable(i)
256+func getBoostCoeffREADONLY () = $Tuple2(nil, boostCoeff)
239257
240258
241259 @Verifier(tx)
242260 func verify () = {
243261 let targetPublicKey = match managerPublicKeyOrUnit() {
244262 case pk: ByteVector =>
245263 pk
246264 case _: Unit =>
247265 tx.senderPublicKey
248266 case _ =>
249267 throw("Match error")
250268 }
251269 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
252270 }
253271

github/deemru/w8io/786bc32 
43.80 ms