tx · Ccv7yPPWKSby2iymoHDCnsezwWdk9iXeWVCoseanDBAT

3P5x9RxuqbMaVFPsaycvXHeFZXPmcswxA1c:  -0.01000000 Waves

2023.09.23 23:34 [3834324] smart account 3P5x9RxuqbMaVFPsaycvXHeFZXPmcswxA1c > SELF 0.00000000 Waves

{ "type": 13, "id": "Ccv7yPPWKSby2iymoHDCnsezwWdk9iXeWVCoseanDBAT", "fee": 1000000, "feeAssetId": null, "timestamp": 1695501297660, "version": 2, "chainId": 87, "sender": "3P5x9RxuqbMaVFPsaycvXHeFZXPmcswxA1c", "senderPublicKey": "9uEm8fN7ZMqn6sPuc39LRogUGXKNPPmRThGEL4GAqGa3", "proofs": [ "3H3PCAZptu9sMXfZpRz521F7yDkn59FfgWYCJ2YsfVjoXP2XytRGpovQgGVxFrAKp86E1M2AXMBuHHrpupWUhWMR" ], "script": "base64:BgIWCAISAwoBCBIDCgEBEgQKAgEBEgASABYAC1NUQVJUX1BSSUNFAKDCHgAIUVVPVElFTlQAAgAIREVDSU1BTFMAgMLXLwEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAhRzdGF0aWNfb3JhY2xlQWRkcmVzcwEUc3RhdGljS2V5X2VnZ0Fzc2V0SWQAAhFzdGF0aWNfZWdnQXNzZXRJZAESc3RhdGljS2V5X2V4dHJhRmVlAAIPc3RhdGljX2V4dHJhRmVlARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgACFHN0YXRpY19mZWVBZ2dyZWdhdG9yARhzdGF0aWNLZXlfY291cG9uc0FkZHJlc3MAAhVzdGF0aWNfY291cG9uc0FkZHJlc3MBDmtleVVzZXJBZGRyZXNzAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCBl9sZXZlbAETa2V5VXNlclNwZW50T25MZXZlbAEHYWRkcmVzcwkArAICBQdhZGRyZXNzAg1fc3BlbnRPbkxldmVsARZrZXlVc2VyU2tpbGxSZXNldFRpbWVzAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCEV9za2lsbHNSZXNldFRpbWVzARNrZXlVc2VyU3BlbnRPblJlc2V0AQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCDV9zcGVudE9uUmVzZXQBDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABFHRyeUdldFN0cmluZ0V4dGVybmFsAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABDHRyeUdldFN0cmluZwEDa2V5CQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCBQR0aGlzBQNrZXkBCWdldE9yYWNsZQAJAQdBZGRyZXNzAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQkBF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAENZ2V0RWdnQXNzZXRJZAAJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARRzdGF0aWNLZXlfZWdnQXNzZXRJZAABEGdldEZlZUFnZ3JlZ2F0b3IACQEHQWRkcmVzcwEJANkEAQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgkBCWdldE9yYWNsZQAJARdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgABEWdldENvdXBvbnNBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUACQEYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAEQY2FsY3VsYXRlTGV2ZWxVcAELZnV0dXJlTGV2ZWwEAnAxCQBsBgULU1RBUlRfUFJJQ0UACAkAaQIAkE4FC2Z1dHVyZUxldmVsAAQACAUHQ0VJTElORwQCcDIJAGwGBQtmdXR1cmVMZXZlbAAACQBpAgCQTgUIUVVPVElFTlQABAAIBQdDRUlMSU5HBAV0b3RhbAkAawMFAnAxBQJwMgUIREVDSU1BTFMEBWRlYnVnCQC5CQIJAMwIAgkArAICAgluZXdMZXZlbD0JAKQDAQULZnV0dXJlTGV2ZWwJAMwIAgkArAICAgNwMT0JAKQDAQUCcDEJAMwIAgkArAICAgNwMj0JAKQDAQUCcDIJAMwIAgkArAICAgZ0b3RhbD0JAKQDAQUFdG90YWwFA25pbAIBOwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQICBURFQlVHBQVkZWJ1ZwUDbmlsBQV0b3RhbAEOY2FsY3VsYXRlUmVzZXQCDGN1cnJlbnRMZXZlbApyZXNldFRpbWVzBAdERVZJREVSAAQED3Jlc2V0VGltZXNUb1VzZQkAZAIFCnJlc2V0VGltZXMAAQQGcmVzdWx0CQBrAwUPcmVzZXRUaW1lc1RvVXNlCQBoAgUMY3VycmVudExldmVsBQhERUNJTUFMUwUHREVWSURFUgQFZGVidWcJALkJAgkAzAgCCQCsAgICBmxldmVsPQkApAMBBQxjdXJyZW50TGV2ZWwJAMwIAgkArAICAgtyZXNldFRpbWVzPQkApAMBBQpyZXNldFRpbWVzCQDMCAIJAKwCAgIQcmVzZXRUaW1lc1RvVXNlPQkApAMBBQ9yZXNldFRpbWVzVG9Vc2UJAMwIAgkArAICAgdyZXN1bHQ9CQCkAwEFBnJlc3VsdAUDbmlsAgE7CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgIFREVCVUcFBWRlYnVnBQNuaWwFBnJlc3VsdAEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEHcGF5bWVudAMJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkCQACAQIaTFNDQVA6IFBsZWFzZSBhdHRhY2ggd2F2ZXMECWZlZUFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgkBCWdldE9yYWNsZQAJARJzdGF0aWNLZXlfZXh0cmFGZWUAAwkBAiE9AggFB3BheW1lbnQGYW1vdW50BQlmZWVBbW91bnQJAAIBCQCsAgIJAKwCAgIdTFNDQVA6IFBsZWFzZSBhdHRhY2ggZXhhY3RseSAJAKQDAQUJZmVlQW1vdW50AhMgYW1vdW50IG9mIHdhdmVsZXRzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARBnZXRGZWVBZ2dyZWdhdG9yAAUJZmVlQW1vdW50BQR1bml0BQNuaWwFAWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIPUkNPOiBhZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQIJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwAFBm9yYWNsZQUDbmlsAWkBC2xldmVsVXBNYXRoAQtmdXR1cmVMZXZlbAkBEGNhbGN1bGF0ZUxldmVsVXABBQtmdXR1cmVMZXZlbAFpAQ9yZXNldFNraWxsc01hdGgCDGN1cnJlbnRMZXZlbApyZXNldFRpbWVzCQEOY2FsY3VsYXRlUmVzZXQCBQxjdXJyZW50TGV2ZWwFCnJlc2V0VGltZXMBaQEHbGV2ZWxVcAAEFGtleVVzZXJBZGRyZXNzRmlsbGVkCQEOa2V5VXNlckFkZHJlc3MBCQClCAEIBQFpBmNhbGxlcgQZa2V5VXNlclNwZW50T25MZXZlbEZpbGxlZAkBE2tleVVzZXJTcGVudE9uTGV2ZWwBCQClCAEIBQFpBmNhbGxlcgQLbGV2ZWxPZlVzZXIJAQ10cnlHZXRJbnRlZ2VyAQUUa2V5VXNlckFkZHJlc3NGaWxsZWQEDnRvdGFsU3BlbnRVc2VyCQENdHJ5R2V0SW50ZWdlcgEFGWtleVVzZXJTcGVudE9uTGV2ZWxGaWxsZWQECXByaWNlQ2FsYwkBEGNhbGN1bGF0ZUxldmVsVXABCQBkAgULbGV2ZWxPZlVzZXIAAQQFcHJpY2UIBQlwcmljZUNhbGMCXzIEDGZpcnN0UGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAZhbW91bnQIBQxmaXJzdFBheW1lbnQGYW1vdW50AwkBAiE9AggFDGZpcnN0UGF5bWVudAdhc3NldElkCQENZ2V0RWdnQXNzZXRJZAAJAAIBCQCsAgICQUxMVTogWW91IGNhbiBhdHRhY2ggb25seSBFR0cgdG9rZW5zIHdpdGggdGhlIGZvbGxvd2luZyBhc3NldCBpZDogCQDYBAEJAQ1nZXRFZ2dBc3NldElkAAMJAQIhPQIFBmFtb3VudAUFcHJpY2UJAAIBCQCsAgICKUxMVTogUGxlYXNlIGF0dGFjaCB0aGUgZXhhY3QgYXNzZXQgYW1vdW50CQCkAwEFBXByaWNlBAxyZWNvcmRBY3Rpb24JAPwHBAkBEWdldENvdXBvbnNBZGRyZXNzAAIMcmVjb3JkQWN0aW9uCQDMCAICB0xFVkVMVVAFA25pbAUDbmlsAwkAAAIFDHJlY29yZEFjdGlvbgUMcmVjb3JkQWN0aW9uCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUUa2V5VXNlckFkZHJlc3NGaWxsZWQJAGQCBQtsZXZlbE9mVXNlcgABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRlrZXlVc2VyU3BlbnRPbkxldmVsRmlsbGVkCQBkAgUOdG90YWxTcGVudFVzZXIFBmFtb3VudAUDbmlsCAUJcHJpY2VDYWxjAl8xCQEWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAEJAJEDAggFAWkIcGF5bWVudHMAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVyZXNldAAEFGtleVVzZXJBZGRyZXNzRmlsbGVkCQEOa2V5VXNlckFkZHJlc3MBCQClCAEIBQFpBmNhbGxlcgQLbGV2ZWxPZlVzZXIJAQ10cnlHZXRJbnRlZ2VyAQUUa2V5VXNlckFkZHJlc3NGaWxsZWQEHGtleVVzZXJTa2lsbFJlc2V0VGltZXNGaWxsZWQJARZrZXlVc2VyU2tpbGxSZXNldFRpbWVzAQkApQgBCAUBaQZjYWxsZXIEDHJlc2V0c09mVXNlcgkBDXRyeUdldEludGVnZXIBBRxrZXlVc2VyU2tpbGxSZXNldFRpbWVzRmlsbGVkBBlrZXlVc2VyU3BlbnRPblJlc2V0RmlsbGVkCQETa2V5VXNlclNwZW50T25SZXNldAEJAKUIAQgFAWkGY2FsbGVyBBRhbW91bnRPZlNwZW5kT25SZXNldAkBDXRyeUdldEludGVnZXIBBRlrZXlVc2VyU3BlbnRPblJlc2V0RmlsbGVkBBhjYWxjdWxhdGVSZXNldENhbGN1bGF0ZWQJAQ5jYWxjdWxhdGVSZXNldAIFC2xldmVsT2ZVc2VyBQxyZXNldHNPZlVzZXIEBXByaWNlCAUYY2FsY3VsYXRlUmVzZXRDYWxjdWxhdGVkAl8yBAxmaXJzdFBheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQGYW1vdW50CAUMZmlyc3RQYXltZW50BmFtb3VudAMJAQIhPQIIBQxmaXJzdFBheW1lbnQHYXNzZXRJZAkBDWdldEVnZ0Fzc2V0SWQACQACAQkArAICAkBMUjogWW91IGNhbiBhdHRhY2ggb25seSBFR0cgdG9rZW5zIHdpdGggdGhlIGZvbGxvd2luZyBhc3NldCBpZDogCQDYBAEJAQ1nZXRFZ2dBc3NldElkAAMJAQIhPQIFBmFtb3VudAUFcHJpY2UJAAIBCQCsAgICKExSOiBQbGVhc2UgYXR0YWNoIHRoZSBleGFjdCBhc3NldCBhbW91bnQJAKQDAQUFcHJpY2UJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRxrZXlVc2VyU2tpbGxSZXNldFRpbWVzRmlsbGVkCQBkAgUMcmVzZXRzT2ZVc2VyAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFGWtleVVzZXJTcGVudE9uUmVzZXRGaWxsZWQJAGQCBRRhbW91bnRPZlNwZW5kT25SZXNldAUGYW1vdW50BQNuaWwIBRhjYWxjdWxhdGVSZXNldENhbGN1bGF0ZWQCXzEJARZjaGVja0FkZGl0aW9uYWxQYXltZW50AQkAkQMCCAUBaQhwYXltZW50cwABAMnYnAc=", "height": 3834324, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FqzC8FRHCiRjgzSDc4gSbdSSNRiEG6bT9RtaXg4UkDiB Next: none Diff:
OldNewDifferences
1717
1818
1919 func staticKey_feeAggregator () = "static_feeAggregator"
20+
21+
22+func staticKey_couponsAddress () = "static_couponsAddress"
2023
2124
2225 func keyUserAddress (address) = (address + "_level")
5760
5861
5962 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
63+
64+
65+func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
6066
6167
6268 func calculateLevelUp (futureLevel) = {
118124 then throw(("LLU: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
119125 else if ((amount != price))
120126 then throw(("LLU: Please attach the exact asset amount" + toString(price)))
121- else (([IntegerEntry(keyUserAddressFilled, (levelOfUser + 1)), IntegerEntry(keyUserSpentOnLevelFilled, (totalSpentUser + amount))] ++ priceCalc._1) ++ checkAdditionalPayment(i.payments[1]))
127+ else {
128+ let recordAction = invoke(getCouponsAddress(), "recordAction", ["LEVELUP"], nil)
129+ if ((recordAction == recordAction))
130+ then (([IntegerEntry(keyUserAddressFilled, (levelOfUser + 1)), IntegerEntry(keyUserSpentOnLevelFilled, (totalSpentUser + amount))] ++ priceCalc._1) ++ checkAdditionalPayment(i.payments[1]))
131+ else throw("Strict value is not equal to itself.")
132+ }
122133 }
123134
124135
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let START_PRICE = 500000
55
66 let QUOTIENT = 2
77
88 let DECIMALS = 100000000
99
1010 func staticKey_oracleAddress () = "static_oracleAddress"
1111
1212
1313 func staticKey_eggAssetId () = "static_eggAssetId"
1414
1515
1616 func staticKey_extraFee () = "static_extraFee"
1717
1818
1919 func staticKey_feeAggregator () = "static_feeAggregator"
20+
21+
22+func staticKey_couponsAddress () = "static_couponsAddress"
2023
2124
2225 func keyUserAddress (address) = (address + "_level")
2326
2427
2528 func keyUserSpentOnLevel (address) = (address + "_spentOnLevel")
2629
2730
2831 func keyUserSkillResetTimes (address) = (address + "_skillsResetTimes")
2932
3033
3134 func keyUserSpentOnReset (address) = (address + "_spentOnReset")
3235
3336
3437 func tryGetInteger (key) = match getInteger(this, key) {
3538 case b: Int =>
3639 b
3740 case _ =>
3841 0
3942 }
4043
4144
4245 func tryGetStringExternal (address,key) = match getString(address, key) {
4346 case a: String =>
4447 a
4548 case _ =>
4649 ""
4750 }
4851
4952
5053 func tryGetString (key) = tryGetStringExternal(this, key)
5154
5255
5356 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
5457
5558
5659 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
5760
5861
5962 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
63+
64+
65+func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
6066
6167
6268 func calculateLevelUp (futureLevel) = {
6369 let p1 = pow(START_PRICE, 8, (10000 / futureLevel), 4, 8, CEILING)
6470 let p2 = pow(futureLevel, 0, (10000 / QUOTIENT), 4, 8, CEILING)
6571 let total = fraction(p1, p2, DECIMALS)
6672 let debug = makeString([("newLevel=" + toString(futureLevel)), ("p1=" + toString(p1)), ("p2=" + toString(p2)), ("total=" + toString(total))], ";")
6773 $Tuple2([StringEntry("DEBUG", debug)], total)
6874 }
6975
7076
7177 func calculateReset (currentLevel,resetTimes) = {
7278 let DEVIDER = 4
7379 let resetTimesToUse = (resetTimes + 1)
7480 let result = fraction(resetTimesToUse, (currentLevel * DECIMALS), DEVIDER)
7581 let debug = makeString([("level=" + toString(currentLevel)), ("resetTimes=" + toString(resetTimes)), ("resetTimesToUse=" + toString(resetTimesToUse)), ("result=" + toString(result))], ";")
7682 $Tuple2([StringEntry("DEBUG", debug)], result)
7783 }
7884
7985
8086 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
8187 then throw("LSCAP: Please attach waves")
8288 else {
8389 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
8490 if ((payment.amount != feeAmount))
8591 then throw((("LSCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
8692 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
8793 }
8894
8995
9096 @Callable(i)
9197 func configureOracle (oracle) = if ((i.caller != this))
9298 then throw("RCO: admin only")
9399 else [StringEntry(staticKey_oracleAddress(), oracle)]
94100
95101
96102
97103 @Callable(i)
98104 func levelUpMath (futureLevel) = calculateLevelUp(futureLevel)
99105
100106
101107
102108 @Callable(i)
103109 func resetSkillsMath (currentLevel,resetTimes) = calculateReset(currentLevel, resetTimes)
104110
105111
106112
107113 @Callable(i)
108114 func levelUp () = {
109115 let keyUserAddressFilled = keyUserAddress(toString(i.caller))
110116 let keyUserSpentOnLevelFilled = keyUserSpentOnLevel(toString(i.caller))
111117 let levelOfUser = tryGetInteger(keyUserAddressFilled)
112118 let totalSpentUser = tryGetInteger(keyUserSpentOnLevelFilled)
113119 let priceCalc = calculateLevelUp((levelOfUser + 1))
114120 let price = priceCalc._2
115121 let firstPayment = value(i.payments[0])
116122 let amount = firstPayment.amount
117123 if ((firstPayment.assetId != getEggAssetId()))
118124 then throw(("LLU: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
119125 else if ((amount != price))
120126 then throw(("LLU: Please attach the exact asset amount" + toString(price)))
121- else (([IntegerEntry(keyUserAddressFilled, (levelOfUser + 1)), IntegerEntry(keyUserSpentOnLevelFilled, (totalSpentUser + amount))] ++ priceCalc._1) ++ checkAdditionalPayment(i.payments[1]))
127+ else {
128+ let recordAction = invoke(getCouponsAddress(), "recordAction", ["LEVELUP"], nil)
129+ if ((recordAction == recordAction))
130+ then (([IntegerEntry(keyUserAddressFilled, (levelOfUser + 1)), IntegerEntry(keyUserSpentOnLevelFilled, (totalSpentUser + amount))] ++ priceCalc._1) ++ checkAdditionalPayment(i.payments[1]))
131+ else throw("Strict value is not equal to itself.")
132+ }
122133 }
123134
124135
125136
126137 @Callable(i)
127138 func reset () = {
128139 let keyUserAddressFilled = keyUserAddress(toString(i.caller))
129140 let levelOfUser = tryGetInteger(keyUserAddressFilled)
130141 let keyUserSkillResetTimesFilled = keyUserSkillResetTimes(toString(i.caller))
131142 let resetsOfUser = tryGetInteger(keyUserSkillResetTimesFilled)
132143 let keyUserSpentOnResetFilled = keyUserSpentOnReset(toString(i.caller))
133144 let amountOfSpendOnReset = tryGetInteger(keyUserSpentOnResetFilled)
134145 let calculateResetCalculated = calculateReset(levelOfUser, resetsOfUser)
135146 let price = calculateResetCalculated._2
136147 let firstPayment = value(i.payments[0])
137148 let amount = firstPayment.amount
138149 if ((firstPayment.assetId != getEggAssetId()))
139150 then throw(("LR: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
140151 else if ((amount != price))
141152 then throw(("LR: Please attach the exact asset amount" + toString(price)))
142153 else (([IntegerEntry(keyUserSkillResetTimesFilled, (resetsOfUser + 1)), IntegerEntry(keyUserSpentOnResetFilled, (amountOfSpendOnReset + amount))] ++ calculateResetCalculated._1) ++ checkAdditionalPayment(i.payments[1]))
143154 }
144155
145156

github/deemru/w8io/6500d08 
44.84 ms