tx · 8G2canSJ1tpAAsnjZs7JfF7j6BSFRdeigFUuoVNe2FBU

3PAChhfAJB6CM3PgN1Gguz7HWGaGQeCZNuT:  -0.01700000 Waves

2023.01.19 14:36 [3477268] smart account 3PAChhfAJB6CM3PgN1Gguz7HWGaGQeCZNuT > SELF 0.00000000 Waves

{ "type": 13, "id": "8G2canSJ1tpAAsnjZs7JfF7j6BSFRdeigFUuoVNe2FBU", "fee": 1700000, "feeAssetId": null, "timestamp": 1674128242925, "version": 2, "chainId": 87, "sender": "3PAChhfAJB6CM3PgN1Gguz7HWGaGQeCZNuT", "senderPublicKey": "EY8iGCRDbPaCGeaXESYXRcMqQdgfWvZgndMJXgw1icdy", "proofs": [ "dETjjEyhQDbcNAWx1gnJm4GaRNQFkFoZmMgLj6dpKa53Xr6HashMihEaTri7CcVuJY428YUhfb8ELQCCUz9tEXA" ], "script": "base64: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CQAEIgAAAAECAAAAFHN0YXRpY19zaG9ydEdhbWVOYW1lAgAAACQzR0dOOiBUaGVyZSBpcyBubyBnYW1lIG5hbWUgZGVmaW5lZCEBAAAAD2dldExvbmdHYW1lTmFtZQAAAAAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABAgAAABNzdGF0aWNfbG9uZ0dhbWVOYW1lAgAAACozR0xHTjogVGhlcmUgaXMgbm8gbG9uZyBnYW1lIG5hbWUgZGVmaW5lZCEBAAAACmdldE5GVE5hbWUAAAAACQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQIAAAAOc3RhdGljX25mdE5hbWUCAAAAIzNHTk46IFRoZXJlIGlzIG5vIG5mdCBuYW1lIGRlZmluZWQhAQAAABNnZXRJbmN1YmF0b3JBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFXN0YXRpY19icmVlZGVyQWRkcmVzcwEAAAARZ2V0RmFybWluZ0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFXN0YXRpY19mYXJtaW5nQWRkcmVzcwEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAEXN0YXRpY19lZ2dBc3NldElkAQAAABRnZXRBY2Nlc3NJdGVtQXNzZXRJZAAAAAAJAAJZAAAAAQkBAAAADHRyeUdldFN0cmluZwAAAAECAAAAGHN0YXRpY19hY2Nlc3NJdGVtQXNzZXRJZAEAAAASZ2V0QWNjZXNzSXRlbVByaWNlAAAAAAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABZzdGF0aWNfYWNjZXNzSXRlbVByaWNlAQAAABJnZXRNaW5Mb2NrRHVyYXRpb24AAAAACQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAFnN0YXRpY19taW5Mb2NrRHVyYXRpb24BAAAAFWdldERlZmF1bHRWZWhpY2xlVHlwZQAAAAAJAQAAAAx0cnlHZXRTdHJpbmcAAAABAgAAABlzdGF0aWNfZGVmYXVsdFZlaGljbGVUeXBlAQAAABNnZXRCb3N0ZXJCdXlBc3NldElkAAAAAAkAAlkAAAABCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQIAAAAYc3RhdGljX2Jvb3N0ZXJCdXlBc3NldElkAQAAABZnZXRCb3N0ZXJQcmljZUZvckxldmVsAAAAAQAAAAVsZXZlbAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAAEsAAAAAgIAAAAZc3RhdGljX2Jvb3N0ZXJQcmljZUxldmVsXwkAAaQAAAABBQAAAAVsZXZlbAIAAAA5M0dCUEZMOiBUaGVyZSBpcyBubyBwcmljZSB2YWx1ZSBmb3IgdGhpcyBsZXZlbCBvZiBib29zdGVyAQAAABVnZXRCb3N0ZXJOYW1lRm9yTGV2ZWwAAAABAAAABWxldmVsCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkAASwAAAACAgAAABNzdGF0aWNfYm9vc3Rlck5hbWVfCQABpAAAAAEFAAAABWxldmVsAgAAACAzR0JORkw6IFRoZXJlIGlzIG5vIHN1Y2ggYm9vc3RlcgEAAAAIYXNTdHJpbmcAAAABAAAABXZhbHVlBAAAAAckbWF0Y2gwBQAAAAV2YWx1ZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAZzdHJpbmcFAAAAByRtYXRjaDAFAAAABnN0cmluZwkAAAIAAAABAgAAACEzQVM6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBAAAAFmdldERlZmF1bHRWZWhpY2xlQXNzZXQAAAAACQEAAAAFQXNzZXQAAAAKAQAAAAEAAAAAAAAAAAABAAAAAAAAAAAABQAAAAR0aGlzAQAAAAEABwcFAAAABHVuaXQJAQAAABVnZXREZWZhdWx0VmVoaWNsZVR5cGUAAAAACQABLAAAAAICAAAACltWZWhpY2xlXSAJAQAAABVnZXREZWZhdWx0VmVoaWNsZVR5cGUAAAAAAQAAABBsb2NrRHVja0ludGVybmFsAAAAAgAAAAphZGRyZXNzU3RyAAAAA3BtdAQAAAAHYXNzZXRJZAkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAAthc3NldElzc3VlcggJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAHYXNzZXRJZAAAAAZpc3N1ZXIEAAAADHREdWNrRGV0YWlscwkBAAAADmdldER1Y2tEZXRhaWxzAAAAAQUAAAAHYXNzZXRJZAQAAAAKYXNzZXRDb2xvcggFAAAADHREdWNrRGV0YWlscwAAAAJfMQQAAAAJaXNKYWNrcG90CAUAAAAMdER1Y2tEZXRhaWxzAAAAAl8yBAAAAAprU3BvdHNCdXN5CQEAAAAMa2V5U3BvdHNCdXN5AAAAAQUAAAAKYWRkcmVzc1N0cgQAAAAJc3BvdHNCdXN5CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEFAAAACmtTcG90c0J1c3kEAAAADGtTcG90c0JvdWdodAkBAAAADmtleVNwb3RzQm91Z2h0AAAAAQUAAAAKYWRkcmVzc1N0cgQAAAAVYWRkcmVzc1Nwb3RzQXZhaWxhYmxlCQAAZQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAMa1Nwb3RzQm91Z2h0BQAAAAlzcG90c0J1c3kDCQEAAAACIT0AAAACCAUAAAADcG10AAAABmFtb3VudAAAAAAAAAAAAQkAAAIAAAABAgAAABNORlQgaXMgbm90IGF0dGFjaGVkAwMJAQAAAAIhPQAAAAIFAAAAC2Fzc2V0SXNzdWVyCQEAAAATZ2V0SW5jdWJhdG9yQWRkcmVzcwAAAAAJAQAAAAIhPQAAAAIFAAAAC2Fzc2V0SXNzdWVyCQEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAABwkAAAIAAAABAgAAABNpdmFsaWQgTkZUIGF0dGFjaGVkAwkAAGcAAAACAAAAAAAAAAAABQAAABVhZGRyZXNzU3BvdHNBdmFpbGFibGUJAAACAAAAAQIAAAASTm8gc3BvdHMgYXZhaWxhYmxlBAAAABFrUGVyY2hlc0F2YWlsYWJsZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18JAAQlAAAAAQUAAAAEdGhpcwIAAAASX3BlcmNoZXNBdmFpbGFibGVfBQAAAAphc3NldENvbG9yBAAAABBwZXJjaGVzQXZhaWxhYmxlBAAAAAckbWF0Y2gwCQAEGgAAAAIJAQAAABFnZXRGYXJtaW5nQWRkcmVzcwAAAAAFAAAAEWtQZXJjaGVzQXZhaWxhYmxlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIAAAAAAAAAAAADCQAAAAAAAAIFAAAAEHBlcmNoZXNBdmFpbGFibGUFAAAAEHBlcmNoZXNBdmFpbGFibGUEAAAACmVnZ0Fzc2V0SWQJAQAAAA1nZXRFZ2dBc3NldElkAAAAAAQAAAAEaW52MQMJAABmAAAAAgUAAAAQcGVyY2hlc0F2YWlsYWJsZQAAAAAAAAAAAAUAAAAEdW5pdAkAA/wAAAAECQEAAAARZ2V0RmFybWluZ0FkZHJlc3MAAAAAAgAAAAhidXlQZXJjaAkABEwAAAACBQAAAAphc3NldENvbG9yCQAETAAAAAICAAAAAAUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAplZ2dBc3NldElkAAAAAAAF9eEABQAAAANuaWwDCQAAAAAAAAIFAAAABGludjEFAAAABGludjEEAAAABGludjIDCQAAAAAAAAIFAAAACWlzSmFja3BvdAcJAAP8AAAABAkBAAAAEWdldEZhcm1pbmdBZGRyZXNzAAAAAAIAAAAIc3Rha2VORlQFAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgUAAAAHYXNzZXRJZAAAAAAAAAAAAQUAAAADbmlsCQAD/AAAAAQJAQAAABFnZXRGYXJtaW5nQWRkcmVzcwAAAAACAAAADHN0YWtlSmFja3BvdAkABEwAAAACBQAAAAphc3NldENvbG9yBQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIFAAAAB2Fzc2V0SWQAAAAAAAAAAAEFAAAAA25pbAMJAAAAAAAAAgUAAAAEaW52MgUAAAAEaW52MgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAKa1Nwb3RzQnVzeQkAAGQAAAACBQAAAAlzcG90c0J1c3kAAAAAAAAAAAEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADGtleUR1Y2tPd25lcgAAAAEFAAAAB2Fzc2V0SWQFAAAACmFkZHJlc3NTdHIJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAABNrZXlMb2NrZWREdWNrU3RhdHVzAAAAAgUAAAAKYWRkcmVzc1N0cgkAAlgAAAABBQAAAAdhc3NldElkBgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWtleUR1Y2tVbmxvY2tUaW1lAAAAAQUAAAAHYXNzZXRJZAkAAGQAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkBAAAAEmdldE1pbkxvY2tEdXJhdGlvbgAAAAAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEAAAALdW5zdGFrZUR1Y2sAAAACAAAACmFzc2V0SWRTdHIAAAAKYWRkcmVzc1N0cgQAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAphc3NldElkU3RyBAAAAAx0RHVja0RldGFpbHMJAQAAAA5nZXREdWNrRGV0YWlscwAAAAEFAAAAB2Fzc2V0SWQEAAAACmFzc2V0Q29sb3IIBQAAAAx0RHVja0RldGFpbHMAAAACXzEEAAAACWlzSmFja3BvdAgFAAAADHREdWNrRGV0YWlscwAAAAJfMgQAAAAKa1Nwb3RzQnVzeQkBAAAADGtleVNwb3RzQnVzeQAAAAEFAAAACmFkZHJlc3NTdHIEAAAACmtEdWNrT3duZXIJAQAAAAxrZXlEdWNrT3duZXIAAAAB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", "height": 3477268, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EHuZ1oVG351AUvDKDiMWqX7FYAUu6jeS56tJCncEZhjQ Next: 3bqS2BdknYsjKTLugcBBsF4MkZDgenrjBgmDFPtBiBJs Diff:
OldNewDifferences
9494 func J () = a("static_minLockDuration")
9595
9696
97-func K () = fromBase58String(y("static_boosterBuyAssetId"))
97+func K () = y("static_defaultVehicleType")
9898
9999
100-func L (M) = valueOrErrorMessage(getInteger(("static_boosterPriceLevel_" + toString(M))), "3GBPFL: There is no price value for this level of booster")
100+func L () = fromBase58String(y("static_boosterBuyAssetId"))
101101
102102
103-func N (M) = valueOrErrorMessage(getString(("static_boosterName_" + toString(M))), "3GBNFL: There is no such booster")
103+func M (N) = valueOrErrorMessage(getInteger(("static_boosterPriceLevel_" + toString(N))), "3GBPFL: There is no price value for this level of booster")
104104
105105
106-func O (P) = {
107- let c = P
106+func O (N) = valueOrErrorMessage(getString(("static_boosterName_" + toString(N))), "3GBNFL: There is no such booster")
107+
108+
109+func P (Q) = {
110+ let c = Q
108111 if ($isInstanceOf(c, "String"))
109112 then {
110- let Q = c
111- Q
113+ let R = c
114+ R
112115 }
113116 else throw("3AS: wrong type, expected: String")
114117 }
115118
116119
117-func R (j,S) = {
118- let f = value(S.assetId)
119- let T = value(assetInfo(f)).issuer
120- let U = q(f)
121- let u = U._1
122- let t = U._2
123- let V = n(j)
124- let W = a(V)
125- let X = i(j)
126- let Y = (a(X) - W)
127- if ((S.amount != 1))
120+func S () = Asset(base58'1', 1, 0, this, base58'1', false, false, unit, K(), ("[Vehicle] " + K()))
121+
122+
123+func T (j,U) = {
124+ let f = value(U.assetId)
125+ let V = value(assetInfo(f)).issuer
126+ let W = q(f)
127+ let u = W._1
128+ let t = W._2
129+ let X = n(j)
130+ let Y = a(X)
131+ let Z = i(j)
132+ let aa = (a(Z) - Y)
133+ if ((U.amount != 1))
128134 then throw("NFT is not attached")
129- else if (if ((T != D()))
130- then (T != E())
135+ else if (if ((V != D()))
136+ then (V != E())
131137 else false)
132138 then throw("ivalid NFT attached")
133- else if ((0 >= Y))
139+ else if ((0 >= aa))
134140 then throw("No spots available")
135141 else {
136- let Z = ((("address_" + toString(this)) + "_perchesAvailable_") + u)
137- let aa = {
138- let c = getInteger(F(), Z)
142+ let ab = ((("address_" + toString(this)) + "_perchesAvailable_") + u)
143+ let ac = {
144+ let c = getInteger(F(), ab)
139145 if ($isInstanceOf(c, "Int"))
140146 then {
141147 let d = c
143149 }
144150 else 0
145151 }
146- if ((aa == aa))
152+ if ((ac == ac))
147153 then {
148- let ab = G()
149- let ac = if ((aa > 0))
154+ let ad = G()
155+ let ae = if ((ac > 0))
150156 then unit
151- else invoke(F(), "buyPerch", [u, ""], [AttachedPayment(ab, 100000000)])
152- if ((ac == ac))
157+ else invoke(F(), "buyPerch", [u, ""], [AttachedPayment(ad, 100000000)])
158+ if ((ae == ae))
153159 then {
154- let ad = if ((t == false))
160+ let af = if ((t == false))
155161 then invoke(F(), "stakeNFT", nil, [AttachedPayment(f, 1)])
156162 else invoke(F(), "stakeJackpot", [u], [AttachedPayment(f, 1)])
157- if ((ad == ad))
158- then [IntegerEntry(V, (W + 1)), StringEntry(g(f), j), BooleanEntry(o(j, toBase58String(f)), true), IntegerEntry(e(f), (lastBlock.timestamp + J()))]
163+ if ((af == af))
164+ then [IntegerEntry(X, (Y + 1)), StringEntry(g(f), j), BooleanEntry(o(j, toBase58String(f)), true), IntegerEntry(e(f), (lastBlock.timestamp + J()))]
159165 else throw("Strict value is not equal to itself.")
160166 }
161167 else throw("Strict value is not equal to itself.")
165171 }
166172
167173
168-func ae (p,j) = {
174+func ag (p,j) = {
169175 let f = fromBase58String(p)
170- let U = q(f)
171- let u = U._1
172- let t = U._2
173- let V = n(j)
174- let af = g(f)
175- let ag = (a(e(f)) - lastBlock.timestamp)
176- if ((y(af) != j))
176+ let W = q(f)
177+ let u = W._1
178+ let t = W._2
179+ let X = n(j)
180+ let ah = g(f)
181+ let ai = (a(e(f)) - lastBlock.timestamp)
182+ if ((y(ah) != j))
177183 then throw("3UL: The duck is not yours")
178- else if ((ag > 0))
179- then throw((("3UL: You need to wait to unlock " + toString((ag / 1000))) + " seconds"))
184+ else if ((ai > 0))
185+ then throw((("3UL: You need to wait to unlock " + toString((ai / 1000))) + " seconds"))
180186 else {
181- let ah = if ((t == true))
187+ let aj = if ((t == true))
182188 then "unstakeJackpot"
183189 else "unstakeNFT"
184- let ac = invoke(F(), ah, [p], nil)
185- if ((ac == ac))
186- then [ScriptTransfer(Address(fromBase58String(j)), 1, f), DeleteEntry(o(j, p)), DeleteEntry(af), IntegerEntry(V, (a(V) - 1))]
190+ let ae = invoke(F(), aj, [p], nil)
191+ if ((ae == ae))
192+ then [ScriptTransfer(Address(fromBase58String(j)), 1, f), DeleteEntry(o(j, p)), DeleteEntry(ah), IntegerEntry(X, (a(X) - 1))]
187193 else throw("Strict value is not equal to itself.")
188194 }
189195 }
190196
191197
192-func ai (aj) = getStringValue(this, (("static_vehicle_" + aj) + "_name"))
198+func ak (al) = getStringValue(this, (("static_vehicle_" + al) + "_name"))
193199
194200
195-func ak (aj) = a((("static_vehicle_" + aj) + "_price"))
201+func am (al) = a((("static_vehicle_" + al) + "_price"))
196202
197203
198-func al (aj,am) = {
199- let an = Issue(aj, (("[Vehicle] " + aj) + " vehicle for the Metarace game. https://metarace.com"), 1, 0, false)
200- let ao = calculateAssetId(an)
201- let ap = 0
202-[an, IntegerEntry(h(toBase58String(ao)), ap), ScriptTransfer(am, 1, ao)]
204+func an (al,ao,ap) = {
205+ let aq = Issue(al, (("[Vehicle] " + al) + " vehicle for the Metarace game. https://metarace.com"), 1, 0, false)
206+ let ar = calculateAssetId(aq)
207+[aq, IntegerEntry(h(toBase58String(ar)), ap), ScriptTransfer(ao, 1, ar)]
203208 }
204209
205210
206-@Callable(aq)
207-func buyAccessItemInternal (j) = if ((aq.caller != this))
211+@Callable(as)
212+func buyAccessItemInternal (j) = if ((as.caller != this))
208213 then throw("3BAII: internal use only")
209214 else {
210- let ar = Issue(("ACCESS-" + A()), ((("[Access] " + B()) + " access NFT for ") + C()), 1, 0, false)
211- let as = toBase58String(calculateAssetId(ar))
212- let X = i(j)
213- $Tuple2([ar, StringEntry((("accessItem_" + as) + "_owner"), j), StringEntry((("address_" + j) + "_owning"), as), IntegerEntry(X, (a(X) + 1))], as)
215+ let at = Issue(("ACCESS-" + A()), ((("[Access] " + B()) + " access NFT for ") + C()), 1, 0, false)
216+ let au = toBase58String(calculateAssetId(at))
217+ let Z = i(j)
218+ $Tuple2([at, StringEntry((("accessItem_" + au) + "_owner"), j), StringEntry((("address_" + j) + "_owning"), au), IntegerEntry(Z, (a(Z) + 1))], au)
214219 }
215220
216221
217222
218-@Callable(aq)
219-func configureOracle (at,au,av,aw) = if ((aq.caller != this))
223+@Callable(as)
224+func configureOracle (av,aw,ax,ay) = if ((as.caller != this))
220225 then throw("3CO: admin only")
221- else [StringEntry("static_oracleAddress", at), StringEntry("static_shortGameName", au), StringEntry("static_longGameName", av), StringEntry("static_nftName", aw)]
226+ else [StringEntry("static_oracleAddress", av), StringEntry("static_shortGameName", aw), StringEntry("static_longGameName", ax), StringEntry("static_nftName", ay)]
222227
223228
224229
225-@Callable(aq)
226-func updateSetting (b,P) = if ((aq.caller != this))
230+@Callable(as)
231+func updateSetting (b,Q) = if ((as.caller != this))
227232 then throw("Only administrator can call this method")
228233 else {
229- let c = P
234+ let c = Q
230235 if ($isInstanceOf(c, "Int"))
231236 then {
232- let ax = c
233-[IntegerEntry(b, ax)]
237+ let az = c
238+[IntegerEntry(b, az)]
234239 }
235240 else if ($isInstanceOf(c, "String"))
236241 then {
237- let ay = c
238-[StringEntry(b, ay)]
242+ let aA = c
243+[StringEntry(b, aA)]
239244 }
240245 else if ($isInstanceOf(c, "Boolean"))
241246 then {
244249 }
245250 else if ($isInstanceOf(c, "ByteVector"))
246251 then {
247- let az = c
248-[BinaryEntry(b, az)]
252+ let aB = c
253+[BinaryEntry(b, aB)]
249254 }
250255 else throw("Bad value type")
251256 }
252257
253258
254259
255-@Callable(aq)
256-func deleteSetting (b) = if ((aq.caller != this))
260+@Callable(as)
261+func deleteSetting (b) = if ((as.caller != this))
257262 then throw("3DS: Only administrator can call this method")
258263 else [DeleteEntry(b)]
259264
260265
261266
262-@Callable(aq)
263-func buyVehicle (aA) = {
264- let aB = ak(aA)
265- let S = value(aq.payments[0])
266- let aC = K()
267- if ((aB == 0))
267+@Callable(as)
268+func buyVehicle (aC) = {
269+ let aD = am(aC)
270+ let U = value(as.payments[0])
271+ let aE = L()
272+ if ((aD == 0))
268273 then throw("There is no such vehicle type")
269- else if ((S.amount != aB))
270- then throw(("3BB: Bad price, it should be: " + toString(aB)))
271- else if ((S.assetId != aC))
272- then throw(("3BB: Bad payment attached, it should be $RACE token with asset id: " + toBase58String(aC)))
273- else al(aA, aq.caller)
274+ else if ((U.amount != aD))
275+ then throw(("3BB: Bad price, it should be: " + toString(aD)))
276+ else if ((U.assetId != aE))
277+ then throw(("3BB: Bad payment attached, it should be $RACE token with asset id: " + toBase58String(aE)))
278+ else an(aC, as.caller, 0)
274279 }
275280
276281
277282
278-@Callable(aq)
283+@Callable(as)
279284 func buyBooster (f) = {
280- let aD = h(f)
281- let aE = a(aD)
282- let aF = (aE + 1)
283- let S = value(aq.payments[0])
284- let aB = L(aF)
285- let aC = K()
286- let aG = value(assetInfo(fromBase58String(f)))
287- if ((aG.issuer != this))
285+ let aF = h(f)
286+ let aG = a(aF)
287+ let aH = (aG + 1)
288+ let U = value(as.payments[0])
289+ let aD = M(aH)
290+ let aE = L()
291+ let aI = valueOrElse(assetInfo(fromBase58String(f)), S())
292+ if ((aI.issuer != this))
288293 then throw("This asset is not a vehicle")
289- else if ((contains(value(aG.description), "[Vehicle]") == false))
294+ else if ((contains(value(aI.description), "[Vehicle]") == false))
290295 then throw("This asset is not a vehicle")
291- else if (if ((S.amount != aB))
296+ else if (if ((U.amount != aD))
292297 then true
293- else (aB == 0))
294- then throw(("3BB: Bad price, it should be: " + toString(aB)))
295- else if ((S.assetId != aC))
296- then throw(("3BB: Bad payment attached, it should be: " + toBase58String(aC)))
297- else {
298- let m = N(aF)
299-[IntegerEntry(aD, aF)]
300- }
298+ else (aD == 0))
299+ then throw(("3BB: Bad price, it should be: " + toString(aD)))
300+ else if ((U.assetId != aE))
301+ then throw(("3BB: Bad payment attached, it should be: " + toBase58String(aE)))
302+ else if ((f == ""))
303+ then an(K(), as.caller, 1)
304+ else [IntegerEntry(aF, aH)]
301305 }
302306
303307
304308
305-@Callable(aq)
306-func buyManyBoosters (f,aH) = {
307- let aD = h(f)
308- let aE = a(aD)
309- func aI (aJ,aK) = if (if ((aE >= aK))
309+@Callable(as)
310+func buyManyBoosters (f,aJ) = {
311+ let aF = h(f)
312+ let aG = a(aF)
313+ func aK (aL,aM) = if (if ((aG >= aM))
310314 then true
311- else (aK > aH))
312- then aJ
315+ else (aM > aJ))
316+ then aL
313317 else {
314- let aL = L(aK)
315- (aJ + aL)
318+ let aN = M(aM)
319+ (aL + aN)
316320 }
317321
318- let aM = {
319- let aN = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
320- let aO = size(aN)
321- let aP = 0
322- func aQ (aR,aS) = if ((aS >= aO))
323- then aR
324- else aI(aR, aN[aS])
322+ let aO = {
323+ let aP = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
324+ let aQ = size(aP)
325+ let aR = 0
326+ func aS (aT,aU) = if ((aU >= aQ))
327+ then aT
328+ else aK(aT, aP[aU])
325329
326- func aT (aR,aS) = if ((aS >= aO))
327- then aR
330+ func aV (aT,aU) = if ((aU >= aQ))
331+ then aT
328332 else throw("List size exceeds 11")
329333
330- aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11)
334+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11)
331335 }
332- let S = value(aq.payments[0])
333- let aC = K()
334- let aG = value(assetInfo(fromBase58String(f)))
335- if ((aG.issuer != this))
336+ let U = value(as.payments[0])
337+ let aE = L()
338+ let aI = valueOrElse(assetInfo(fromBase58String(f)), S())
339+ if ((aI.issuer != this))
336340 then throw("This asset is not a vehicle")
337- else if ((contains(value(aG.description), "[Vehicle]") == false))
341+ else if ((contains(value(aI.description), "[Vehicle]") == false))
338342 then throw("This asset is not a vehicle")
339- else if ((aE >= aH))
343+ else if ((aG >= aJ))
340344 then throw("3BB: Booster was already bought")
341- else if ((S.amount != aM))
342- then throw(("3BB: Bad price, it should be: " + toString(aM)))
343- else if ((S.assetId != aC))
344- then throw(("3BB: Bad payment attached, it should be: " + toBase58String(aC)))
345- else [IntegerEntry(aD, aH)]
345+ else if ((U.amount != aO))
346+ then throw(("3BB: Bad price, it should be: " + toString(aO)))
347+ else if ((U.assetId != aE))
348+ then throw(("3BB: Bad payment attached, it should be: " + toBase58String(aE)))
349+ else if ((f == ""))
350+ then an(K(), as.caller, aJ)
351+ else [IntegerEntry(aF, aJ)]
346352 }
347353
348354
349355
350-@Callable(aq)
356+@Callable(as)
351357 func buyTickets () = {
352- let aU = k(toString(aq.caller))
353- let aV = a(aU)
354- let S = aq.payments[0]
355- let aC = K()
356- let aW = (S.amount / 100000000)
357- if ((S.assetId != aC))
358+ let aW = k(toString(as.caller))
359+ let aX = a(aW)
360+ let U = as.payments[0]
361+ let aE = L()
362+ let aY = (U.amount / 100000000)
363+ if ((U.assetId != aE))
358364 then throw("3BC: Wrong asset attached")
359- else [IntegerEntry(aU, (aV + aW))]
365+ else [IntegerEntry(aW, (aX + aY))]
360366 }
361367
362368
363369
364-@Callable(aq)
370+@Callable(as)
365371 func buyAccessItemAndLockDuck () = {
366- let aX = value(aq.payments[0])
367- let aY = value(aq.payments[1])
368- let j = toString(aq.caller)
369- if ((aX.assetId != H()))
372+ let aZ = value(as.payments[0])
373+ let ba = value(as.payments[1])
374+ let j = toString(as.caller)
375+ if ((aZ.assetId != H()))
370376 then throw("3BAI: Wrong asset attached")
371- else if ((aX.amount != I()))
377+ else if ((aZ.amount != I()))
372378 then throw("3BAI: Wrong amount of assets attached")
373379 else {
374- let aZ = O(invoke(this, "buyAccessItemInternal", [j], nil))
375- if ((aZ == aZ))
380+ let bb = P(invoke(this, "buyAccessItemInternal", [j], nil))
381+ if ((bb == bb))
376382 then {
377- let ba = R(j, aY)
378- $Tuple2(ba, aZ)
383+ let bc = T(j, ba)
384+ $Tuple2(bc, bb)
379385 }
380386 else throw("Strict value is not equal to itself.")
381387 }
383389
384390
385391
386-@Callable(aq)
392+@Callable(as)
387393 func buyAccessItem () = {
388- let j = toString(aq.caller)
389- let aX = value(aq.payments[0])
390- if ((aX.assetId != H()))
394+ let j = toString(as.caller)
395+ let aZ = value(as.payments[0])
396+ if ((aZ.assetId != H()))
391397 then throw("3BAI: Wrong asset attached")
392- else if ((aX.amount != I()))
398+ else if ((aZ.amount != I()))
393399 then throw("3BAI: Wrong amount of assets attached")
394400 else {
395- let aZ = O(invoke(this, "buyAccessItemInternal", [j], nil))
396- if ((aZ == aZ))
397- then $Tuple2(nil, aZ)
401+ let bb = P(invoke(this, "buyAccessItemInternal", [j], nil))
402+ if ((bb == bb))
403+ then $Tuple2(nil, bb)
398404 else throw("Strict value is not equal to itself.")
399405 }
400406 }
401407
402408
403409
404-@Callable(aq)
405-func buyAccessItemOther (bb) = {
406- let aX = value(aq.payments[0])
407- if ((aX.assetId != H()))
410+@Callable(as)
411+func buyAccessItemOther (bd) = {
412+ let aZ = value(as.payments[0])
413+ if ((aZ.assetId != H()))
408414 then throw("3BAI: Wrong asset attached")
409- else if ((aX.amount != I()))
415+ else if ((aZ.amount != I()))
410416 then throw("3BAI: Wrong amount of assets attached")
411417 else {
412- let aZ = O(invoke(this, "buyAccessItemInternal", [bb], nil))
413- if ((aZ == aZ))
414- then $Tuple2(nil, aZ)
418+ let bb = P(invoke(this, "buyAccessItemInternal", [bd], nil))
419+ if ((bb == bb))
420+ then $Tuple2(nil, bb)
415421 else throw("Strict value is not equal to itself.")
416422 }
417423 }
418424
419425
420426
421-@Callable(aq)
427+@Callable(as)
422428 func lockDuck () = {
423- let j = toString(aq.caller)
424- let aY = value(aq.payments[0])
425- R(j, aY)
429+ let j = toString(as.caller)
430+ let ba = value(as.payments[0])
431+ T(j, ba)
426432 }
427433
428434
429435
430-@Callable(aq)
431-func unlockDuckOther (p) = if ((aq.caller != this))
436+@Callable(as)
437+func unlockDuckOther (p) = if ((as.caller != this))
432438 then throw("3UDO: Admin only!")
433439 else {
434- let bc = y(g(fromBase58String(p)))
435- ae(p, bc)
440+ let be = y(g(fromBase58String(p)))
441+ ag(p, be)
436442 }
437443
438444
439445
440-@Callable(aq)
446+@Callable(as)
441447 func unlockDuck (p) = {
442- let j = toString(aq.caller)
443- ae(p, j)
448+ let j = toString(as.caller)
449+ ag(p, j)
444450 }
445451
446452
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = {
55 let c = getInteger(this, b)
66 if ($isInstanceOf(c, "Int"))
77 then {
88 let d = c
99 d
1010 }
1111 else 0
1212 }
1313
1414
1515 func e (f) = (("duck_" + toBase58String(f)) + "_unlockTime")
1616
1717
1818 func g (f) = (("duck_" + toBase58String(f)) + "_owner")
1919
2020
2121 func h (f) = (("vehicle_" + f) + "_boostersLevel")
2222
2323
2424 func i (j) = (("address_" + j) + "_spotsBought")
2525
2626
2727 func k (j) = (("address_" + j) + "_ticketsBought")
2828
2929
3030 func l (m) = (("vehicleType_" + m) + "_price")
3131
3232
3333 func n (j) = (("address_" + j) + "_spotsBusy")
3434
3535
3636 func o (j,p) = (((("address_" + j) + "_lockedDuck_") + p) + "_status")
3737
3838
3939 func q (f) = {
4040 let r = value(value(assetInfo(f)).name)
4141 let s = split(r, "")
4242 let t = (s[(size(s) - 2)] == "J")
4343 let u = if (t)
4444 then "B"
4545 else s[(size(s) - 1)]
4646 $Tuple2(u, t)
4747 }
4848
4949
5050 func v (w,b) = {
5151 let c = getString(w, b)
5252 if ($isInstanceOf(c, "String"))
5353 then {
5454 let x = c
5555 x
5656 }
5757 else ""
5858 }
5959
6060
6161 func y (b) = v(this, b)
6262
6363
6464 func z () = Address(fromBase58String(y("static_oracleAddress")))
6565
6666
6767 func A () = valueOrErrorMessage(getString("static_shortGameName"), "3GGN: There is no game name defined!")
6868
6969
7070 func B () = valueOrErrorMessage(getString("static_longGameName"), "3GLGN: There is no long game name defined!")
7171
7272
7373 func C () = valueOrErrorMessage(getString("static_nftName"), "3GNN: There is no nft name defined!")
7474
7575
7676 func D () = Address(fromBase58String(v(z(), "static_incubatorAddress")))
7777
7878
7979 func E () = Address(fromBase58String(v(z(), "static_breederAddress")))
8080
8181
8282 func F () = Address(fromBase58String(v(z(), "static_farmingAddress")))
8383
8484
8585 func G () = fromBase58String(v(z(), "static_eggAssetId"))
8686
8787
8888 func H () = fromBase58String(y("static_accessItemAssetId"))
8989
9090
9191 func I () = a("static_accessItemPrice")
9292
9393
9494 func J () = a("static_minLockDuration")
9595
9696
97-func K () = fromBase58String(y("static_boosterBuyAssetId"))
97+func K () = y("static_defaultVehicleType")
9898
9999
100-func L (M) = valueOrErrorMessage(getInteger(("static_boosterPriceLevel_" + toString(M))), "3GBPFL: There is no price value for this level of booster")
100+func L () = fromBase58String(y("static_boosterBuyAssetId"))
101101
102102
103-func N (M) = valueOrErrorMessage(getString(("static_boosterName_" + toString(M))), "3GBNFL: There is no such booster")
103+func M (N) = valueOrErrorMessage(getInteger(("static_boosterPriceLevel_" + toString(N))), "3GBPFL: There is no price value for this level of booster")
104104
105105
106-func O (P) = {
107- let c = P
106+func O (N) = valueOrErrorMessage(getString(("static_boosterName_" + toString(N))), "3GBNFL: There is no such booster")
107+
108+
109+func P (Q) = {
110+ let c = Q
108111 if ($isInstanceOf(c, "String"))
109112 then {
110- let Q = c
111- Q
113+ let R = c
114+ R
112115 }
113116 else throw("3AS: wrong type, expected: String")
114117 }
115118
116119
117-func R (j,S) = {
118- let f = value(S.assetId)
119- let T = value(assetInfo(f)).issuer
120- let U = q(f)
121- let u = U._1
122- let t = U._2
123- let V = n(j)
124- let W = a(V)
125- let X = i(j)
126- let Y = (a(X) - W)
127- if ((S.amount != 1))
120+func S () = Asset(base58'1', 1, 0, this, base58'1', false, false, unit, K(), ("[Vehicle] " + K()))
121+
122+
123+func T (j,U) = {
124+ let f = value(U.assetId)
125+ let V = value(assetInfo(f)).issuer
126+ let W = q(f)
127+ let u = W._1
128+ let t = W._2
129+ let X = n(j)
130+ let Y = a(X)
131+ let Z = i(j)
132+ let aa = (a(Z) - Y)
133+ if ((U.amount != 1))
128134 then throw("NFT is not attached")
129- else if (if ((T != D()))
130- then (T != E())
135+ else if (if ((V != D()))
136+ then (V != E())
131137 else false)
132138 then throw("ivalid NFT attached")
133- else if ((0 >= Y))
139+ else if ((0 >= aa))
134140 then throw("No spots available")
135141 else {
136- let Z = ((("address_" + toString(this)) + "_perchesAvailable_") + u)
137- let aa = {
138- let c = getInteger(F(), Z)
142+ let ab = ((("address_" + toString(this)) + "_perchesAvailable_") + u)
143+ let ac = {
144+ let c = getInteger(F(), ab)
139145 if ($isInstanceOf(c, "Int"))
140146 then {
141147 let d = c
142148 d
143149 }
144150 else 0
145151 }
146- if ((aa == aa))
152+ if ((ac == ac))
147153 then {
148- let ab = G()
149- let ac = if ((aa > 0))
154+ let ad = G()
155+ let ae = if ((ac > 0))
150156 then unit
151- else invoke(F(), "buyPerch", [u, ""], [AttachedPayment(ab, 100000000)])
152- if ((ac == ac))
157+ else invoke(F(), "buyPerch", [u, ""], [AttachedPayment(ad, 100000000)])
158+ if ((ae == ae))
153159 then {
154- let ad = if ((t == false))
160+ let af = if ((t == false))
155161 then invoke(F(), "stakeNFT", nil, [AttachedPayment(f, 1)])
156162 else invoke(F(), "stakeJackpot", [u], [AttachedPayment(f, 1)])
157- if ((ad == ad))
158- then [IntegerEntry(V, (W + 1)), StringEntry(g(f), j), BooleanEntry(o(j, toBase58String(f)), true), IntegerEntry(e(f), (lastBlock.timestamp + J()))]
163+ if ((af == af))
164+ then [IntegerEntry(X, (Y + 1)), StringEntry(g(f), j), BooleanEntry(o(j, toBase58String(f)), true), IntegerEntry(e(f), (lastBlock.timestamp + J()))]
159165 else throw("Strict value is not equal to itself.")
160166 }
161167 else throw("Strict value is not equal to itself.")
162168 }
163169 else throw("Strict value is not equal to itself.")
164170 }
165171 }
166172
167173
168-func ae (p,j) = {
174+func ag (p,j) = {
169175 let f = fromBase58String(p)
170- let U = q(f)
171- let u = U._1
172- let t = U._2
173- let V = n(j)
174- let af = g(f)
175- let ag = (a(e(f)) - lastBlock.timestamp)
176- if ((y(af) != j))
176+ let W = q(f)
177+ let u = W._1
178+ let t = W._2
179+ let X = n(j)
180+ let ah = g(f)
181+ let ai = (a(e(f)) - lastBlock.timestamp)
182+ if ((y(ah) != j))
177183 then throw("3UL: The duck is not yours")
178- else if ((ag > 0))
179- then throw((("3UL: You need to wait to unlock " + toString((ag / 1000))) + " seconds"))
184+ else if ((ai > 0))
185+ then throw((("3UL: You need to wait to unlock " + toString((ai / 1000))) + " seconds"))
180186 else {
181- let ah = if ((t == true))
187+ let aj = if ((t == true))
182188 then "unstakeJackpot"
183189 else "unstakeNFT"
184- let ac = invoke(F(), ah, [p], nil)
185- if ((ac == ac))
186- then [ScriptTransfer(Address(fromBase58String(j)), 1, f), DeleteEntry(o(j, p)), DeleteEntry(af), IntegerEntry(V, (a(V) - 1))]
190+ let ae = invoke(F(), aj, [p], nil)
191+ if ((ae == ae))
192+ then [ScriptTransfer(Address(fromBase58String(j)), 1, f), DeleteEntry(o(j, p)), DeleteEntry(ah), IntegerEntry(X, (a(X) - 1))]
187193 else throw("Strict value is not equal to itself.")
188194 }
189195 }
190196
191197
192-func ai (aj) = getStringValue(this, (("static_vehicle_" + aj) + "_name"))
198+func ak (al) = getStringValue(this, (("static_vehicle_" + al) + "_name"))
193199
194200
195-func ak (aj) = a((("static_vehicle_" + aj) + "_price"))
201+func am (al) = a((("static_vehicle_" + al) + "_price"))
196202
197203
198-func al (aj,am) = {
199- let an = Issue(aj, (("[Vehicle] " + aj) + " vehicle for the Metarace game. https://metarace.com"), 1, 0, false)
200- let ao = calculateAssetId(an)
201- let ap = 0
202-[an, IntegerEntry(h(toBase58String(ao)), ap), ScriptTransfer(am, 1, ao)]
204+func an (al,ao,ap) = {
205+ let aq = Issue(al, (("[Vehicle] " + al) + " vehicle for the Metarace game. https://metarace.com"), 1, 0, false)
206+ let ar = calculateAssetId(aq)
207+[aq, IntegerEntry(h(toBase58String(ar)), ap), ScriptTransfer(ao, 1, ar)]
203208 }
204209
205210
206-@Callable(aq)
207-func buyAccessItemInternal (j) = if ((aq.caller != this))
211+@Callable(as)
212+func buyAccessItemInternal (j) = if ((as.caller != this))
208213 then throw("3BAII: internal use only")
209214 else {
210- let ar = Issue(("ACCESS-" + A()), ((("[Access] " + B()) + " access NFT for ") + C()), 1, 0, false)
211- let as = toBase58String(calculateAssetId(ar))
212- let X = i(j)
213- $Tuple2([ar, StringEntry((("accessItem_" + as) + "_owner"), j), StringEntry((("address_" + j) + "_owning"), as), IntegerEntry(X, (a(X) + 1))], as)
215+ let at = Issue(("ACCESS-" + A()), ((("[Access] " + B()) + " access NFT for ") + C()), 1, 0, false)
216+ let au = toBase58String(calculateAssetId(at))
217+ let Z = i(j)
218+ $Tuple2([at, StringEntry((("accessItem_" + au) + "_owner"), j), StringEntry((("address_" + j) + "_owning"), au), IntegerEntry(Z, (a(Z) + 1))], au)
214219 }
215220
216221
217222
218-@Callable(aq)
219-func configureOracle (at,au,av,aw) = if ((aq.caller != this))
223+@Callable(as)
224+func configureOracle (av,aw,ax,ay) = if ((as.caller != this))
220225 then throw("3CO: admin only")
221- else [StringEntry("static_oracleAddress", at), StringEntry("static_shortGameName", au), StringEntry("static_longGameName", av), StringEntry("static_nftName", aw)]
226+ else [StringEntry("static_oracleAddress", av), StringEntry("static_shortGameName", aw), StringEntry("static_longGameName", ax), StringEntry("static_nftName", ay)]
222227
223228
224229
225-@Callable(aq)
226-func updateSetting (b,P) = if ((aq.caller != this))
230+@Callable(as)
231+func updateSetting (b,Q) = if ((as.caller != this))
227232 then throw("Only administrator can call this method")
228233 else {
229- let c = P
234+ let c = Q
230235 if ($isInstanceOf(c, "Int"))
231236 then {
232- let ax = c
233-[IntegerEntry(b, ax)]
237+ let az = c
238+[IntegerEntry(b, az)]
234239 }
235240 else if ($isInstanceOf(c, "String"))
236241 then {
237- let ay = c
238-[StringEntry(b, ay)]
242+ let aA = c
243+[StringEntry(b, aA)]
239244 }
240245 else if ($isInstanceOf(c, "Boolean"))
241246 then {
242247 let d = c
243248 [BooleanEntry(b, d)]
244249 }
245250 else if ($isInstanceOf(c, "ByteVector"))
246251 then {
247- let az = c
248-[BinaryEntry(b, az)]
252+ let aB = c
253+[BinaryEntry(b, aB)]
249254 }
250255 else throw("Bad value type")
251256 }
252257
253258
254259
255-@Callable(aq)
256-func deleteSetting (b) = if ((aq.caller != this))
260+@Callable(as)
261+func deleteSetting (b) = if ((as.caller != this))
257262 then throw("3DS: Only administrator can call this method")
258263 else [DeleteEntry(b)]
259264
260265
261266
262-@Callable(aq)
263-func buyVehicle (aA) = {
264- let aB = ak(aA)
265- let S = value(aq.payments[0])
266- let aC = K()
267- if ((aB == 0))
267+@Callable(as)
268+func buyVehicle (aC) = {
269+ let aD = am(aC)
270+ let U = value(as.payments[0])
271+ let aE = L()
272+ if ((aD == 0))
268273 then throw("There is no such vehicle type")
269- else if ((S.amount != aB))
270- then throw(("3BB: Bad price, it should be: " + toString(aB)))
271- else if ((S.assetId != aC))
272- then throw(("3BB: Bad payment attached, it should be $RACE token with asset id: " + toBase58String(aC)))
273- else al(aA, aq.caller)
274+ else if ((U.amount != aD))
275+ then throw(("3BB: Bad price, it should be: " + toString(aD)))
276+ else if ((U.assetId != aE))
277+ then throw(("3BB: Bad payment attached, it should be $RACE token with asset id: " + toBase58String(aE)))
278+ else an(aC, as.caller, 0)
274279 }
275280
276281
277282
278-@Callable(aq)
283+@Callable(as)
279284 func buyBooster (f) = {
280- let aD = h(f)
281- let aE = a(aD)
282- let aF = (aE + 1)
283- let S = value(aq.payments[0])
284- let aB = L(aF)
285- let aC = K()
286- let aG = value(assetInfo(fromBase58String(f)))
287- if ((aG.issuer != this))
285+ let aF = h(f)
286+ let aG = a(aF)
287+ let aH = (aG + 1)
288+ let U = value(as.payments[0])
289+ let aD = M(aH)
290+ let aE = L()
291+ let aI = valueOrElse(assetInfo(fromBase58String(f)), S())
292+ if ((aI.issuer != this))
288293 then throw("This asset is not a vehicle")
289- else if ((contains(value(aG.description), "[Vehicle]") == false))
294+ else if ((contains(value(aI.description), "[Vehicle]") == false))
290295 then throw("This asset is not a vehicle")
291- else if (if ((S.amount != aB))
296+ else if (if ((U.amount != aD))
292297 then true
293- else (aB == 0))
294- then throw(("3BB: Bad price, it should be: " + toString(aB)))
295- else if ((S.assetId != aC))
296- then throw(("3BB: Bad payment attached, it should be: " + toBase58String(aC)))
297- else {
298- let m = N(aF)
299-[IntegerEntry(aD, aF)]
300- }
298+ else (aD == 0))
299+ then throw(("3BB: Bad price, it should be: " + toString(aD)))
300+ else if ((U.assetId != aE))
301+ then throw(("3BB: Bad payment attached, it should be: " + toBase58String(aE)))
302+ else if ((f == ""))
303+ then an(K(), as.caller, 1)
304+ else [IntegerEntry(aF, aH)]
301305 }
302306
303307
304308
305-@Callable(aq)
306-func buyManyBoosters (f,aH) = {
307- let aD = h(f)
308- let aE = a(aD)
309- func aI (aJ,aK) = if (if ((aE >= aK))
309+@Callable(as)
310+func buyManyBoosters (f,aJ) = {
311+ let aF = h(f)
312+ let aG = a(aF)
313+ func aK (aL,aM) = if (if ((aG >= aM))
310314 then true
311- else (aK > aH))
312- then aJ
315+ else (aM > aJ))
316+ then aL
313317 else {
314- let aL = L(aK)
315- (aJ + aL)
318+ let aN = M(aM)
319+ (aL + aN)
316320 }
317321
318- let aM = {
319- let aN = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
320- let aO = size(aN)
321- let aP = 0
322- func aQ (aR,aS) = if ((aS >= aO))
323- then aR
324- else aI(aR, aN[aS])
322+ let aO = {
323+ let aP = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
324+ let aQ = size(aP)
325+ let aR = 0
326+ func aS (aT,aU) = if ((aU >= aQ))
327+ then aT
328+ else aK(aT, aP[aU])
325329
326- func aT (aR,aS) = if ((aS >= aO))
327- then aR
330+ func aV (aT,aU) = if ((aU >= aQ))
331+ then aT
328332 else throw("List size exceeds 11")
329333
330- aT(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aQ(aP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11)
334+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11)
331335 }
332- let S = value(aq.payments[0])
333- let aC = K()
334- let aG = value(assetInfo(fromBase58String(f)))
335- if ((aG.issuer != this))
336+ let U = value(as.payments[0])
337+ let aE = L()
338+ let aI = valueOrElse(assetInfo(fromBase58String(f)), S())
339+ if ((aI.issuer != this))
336340 then throw("This asset is not a vehicle")
337- else if ((contains(value(aG.description), "[Vehicle]") == false))
341+ else if ((contains(value(aI.description), "[Vehicle]") == false))
338342 then throw("This asset is not a vehicle")
339- else if ((aE >= aH))
343+ else if ((aG >= aJ))
340344 then throw("3BB: Booster was already bought")
341- else if ((S.amount != aM))
342- then throw(("3BB: Bad price, it should be: " + toString(aM)))
343- else if ((S.assetId != aC))
344- then throw(("3BB: Bad payment attached, it should be: " + toBase58String(aC)))
345- else [IntegerEntry(aD, aH)]
345+ else if ((U.amount != aO))
346+ then throw(("3BB: Bad price, it should be: " + toString(aO)))
347+ else if ((U.assetId != aE))
348+ then throw(("3BB: Bad payment attached, it should be: " + toBase58String(aE)))
349+ else if ((f == ""))
350+ then an(K(), as.caller, aJ)
351+ else [IntegerEntry(aF, aJ)]
346352 }
347353
348354
349355
350-@Callable(aq)
356+@Callable(as)
351357 func buyTickets () = {
352- let aU = k(toString(aq.caller))
353- let aV = a(aU)
354- let S = aq.payments[0]
355- let aC = K()
356- let aW = (S.amount / 100000000)
357- if ((S.assetId != aC))
358+ let aW = k(toString(as.caller))
359+ let aX = a(aW)
360+ let U = as.payments[0]
361+ let aE = L()
362+ let aY = (U.amount / 100000000)
363+ if ((U.assetId != aE))
358364 then throw("3BC: Wrong asset attached")
359- else [IntegerEntry(aU, (aV + aW))]
365+ else [IntegerEntry(aW, (aX + aY))]
360366 }
361367
362368
363369
364-@Callable(aq)
370+@Callable(as)
365371 func buyAccessItemAndLockDuck () = {
366- let aX = value(aq.payments[0])
367- let aY = value(aq.payments[1])
368- let j = toString(aq.caller)
369- if ((aX.assetId != H()))
372+ let aZ = value(as.payments[0])
373+ let ba = value(as.payments[1])
374+ let j = toString(as.caller)
375+ if ((aZ.assetId != H()))
370376 then throw("3BAI: Wrong asset attached")
371- else if ((aX.amount != I()))
377+ else if ((aZ.amount != I()))
372378 then throw("3BAI: Wrong amount of assets attached")
373379 else {
374- let aZ = O(invoke(this, "buyAccessItemInternal", [j], nil))
375- if ((aZ == aZ))
380+ let bb = P(invoke(this, "buyAccessItemInternal", [j], nil))
381+ if ((bb == bb))
376382 then {
377- let ba = R(j, aY)
378- $Tuple2(ba, aZ)
383+ let bc = T(j, ba)
384+ $Tuple2(bc, bb)
379385 }
380386 else throw("Strict value is not equal to itself.")
381387 }
382388 }
383389
384390
385391
386-@Callable(aq)
392+@Callable(as)
387393 func buyAccessItem () = {
388- let j = toString(aq.caller)
389- let aX = value(aq.payments[0])
390- if ((aX.assetId != H()))
394+ let j = toString(as.caller)
395+ let aZ = value(as.payments[0])
396+ if ((aZ.assetId != H()))
391397 then throw("3BAI: Wrong asset attached")
392- else if ((aX.amount != I()))
398+ else if ((aZ.amount != I()))
393399 then throw("3BAI: Wrong amount of assets attached")
394400 else {
395- let aZ = O(invoke(this, "buyAccessItemInternal", [j], nil))
396- if ((aZ == aZ))
397- then $Tuple2(nil, aZ)
401+ let bb = P(invoke(this, "buyAccessItemInternal", [j], nil))
402+ if ((bb == bb))
403+ then $Tuple2(nil, bb)
398404 else throw("Strict value is not equal to itself.")
399405 }
400406 }
401407
402408
403409
404-@Callable(aq)
405-func buyAccessItemOther (bb) = {
406- let aX = value(aq.payments[0])
407- if ((aX.assetId != H()))
410+@Callable(as)
411+func buyAccessItemOther (bd) = {
412+ let aZ = value(as.payments[0])
413+ if ((aZ.assetId != H()))
408414 then throw("3BAI: Wrong asset attached")
409- else if ((aX.amount != I()))
415+ else if ((aZ.amount != I()))
410416 then throw("3BAI: Wrong amount of assets attached")
411417 else {
412- let aZ = O(invoke(this, "buyAccessItemInternal", [bb], nil))
413- if ((aZ == aZ))
414- then $Tuple2(nil, aZ)
418+ let bb = P(invoke(this, "buyAccessItemInternal", [bd], nil))
419+ if ((bb == bb))
420+ then $Tuple2(nil, bb)
415421 else throw("Strict value is not equal to itself.")
416422 }
417423 }
418424
419425
420426
421-@Callable(aq)
427+@Callable(as)
422428 func lockDuck () = {
423- let j = toString(aq.caller)
424- let aY = value(aq.payments[0])
425- R(j, aY)
429+ let j = toString(as.caller)
430+ let ba = value(as.payments[0])
431+ T(j, ba)
426432 }
427433
428434
429435
430-@Callable(aq)
431-func unlockDuckOther (p) = if ((aq.caller != this))
436+@Callable(as)
437+func unlockDuckOther (p) = if ((as.caller != this))
432438 then throw("3UDO: Admin only!")
433439 else {
434- let bc = y(g(fromBase58String(p)))
435- ae(p, bc)
440+ let be = y(g(fromBase58String(p)))
441+ ag(p, be)
436442 }
437443
438444
439445
440-@Callable(aq)
446+@Callable(as)
441447 func unlockDuck (p) = {
442- let j = toString(aq.caller)
443- ae(p, j)
448+ let j = toString(as.caller)
449+ ag(p, j)
444450 }
445451
446452

github/deemru/w8io/3ef1775 
119.19 ms