tx · G6XefpmYPKbpKLfwWgTSqYMYKmDgxS5nyMApY96DAAa

3PKL9tfUmNciXvbSA3zpXr6PnDNnhn936ba:  -0.02100000 Waves

2023.05.12 19:37 [3640441] smart account 3PKL9tfUmNciXvbSA3zpXr6PnDNnhn936ba > SELF 0.00000000 Waves

{ "type": 13, "id": "G6XefpmYPKbpKLfwWgTSqYMYKmDgxS5nyMApY96DAAa", "fee": 2100000, "feeAssetId": null, "timestamp": 1683909462243, "version": 2, "chainId": 87, "sender": "3PKL9tfUmNciXvbSA3zpXr6PnDNnhn936ba", "senderPublicKey": "8yG34okaNeKtYZriaoqUQTinJjpk3pYKFTeGptmiWvTV", "proofs": [ "3ai2LXnD3ab23bwnzzEQ2FwLUHVMwgQ3wWH3P18oTajPMyQQiJCwLxoMHspSp7ZbCu6n5z9PC9D36PiFhDJgFm5j" ], "script": "base64:AAIFAAAAAAAAABEIAhIDCgEIEgMKAQgSAwoBCAAAADABAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAABF0cnlHZXRJbnRFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAbUlRHSUU6IFNvbWV0aGluZyB3ZW50IHdyb25nAQAAAAx0cnlHZXRTdHJpbmcAAAABAAAAA2tleQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgUAAAAEdGhpcwUAAAADa2V5AAAAABBkZWxheUZvckhhdGNoaW5nAAAAAAAAAAACAQAAABdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwAAAAACAAAAFHN0YXRpY19vcmFjbGVBZGRyZXNzAQAAABRzdGF0aWNLZXlfZWdnQXNzZXRJZAAAAAACAAAAEXN0YXRpY19lZ2dBc3NldElkAQAAABpzdGF0aWNLZXlfaW5jdWJhdG9yQWRkcmVzcwAAAAACAAAAF3N0YXRpY19pbmN1YmF0b3JBZGRyZXNzAQAAABhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAAAAAAgAAABVzdGF0aWNfYnJlZWRlckFkZHJlc3MBAAAAGHN0YXRpY0tleV9mYXJtaW5nQWRkcmVzcwAAAAACAAAAFXN0YXRpY19mYXJtaW5nQWRkcmVzcwEAAAAZc3RhdGljS2V5X2JhYnlEdWNrQWRkcmVzcwAAAAACAAAAFnN0YXRpY19iYWJ5RHVja0FkZHJlc3MBAAAAGXN0YXRpY0tleV9nYW1lRGFwcEFkZHJlc3MAAAAAAgAAABZzdGF0aWNfZ2FtZURhcHBBZGRyZXNzAQAAABZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAAAAAIAAAATc3RhdGljX2l0ZW1zQWRkcmVzcwEAAAAYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAAAAAIAAAAVc3RhdGljX2NvdXBvbnNBZGRyZXNzAQAAABlzdGF0aWNLZXlfbWV0YVJhY2VBZGRyZXNzAAAAAAIAAAAWc3RhdGljX21ldGFSYWNlQWRkcmVzcwEAAAAVc3RhdGljS2V5X2h1bnRBZGRyZXNzAAAAAAIAAAASc3RhdGljX2h1bnRBZGRyZXNzAQAAABVzdGF0aWNLZXlfYnVybkFkZHJlc3MAAAAAAgAAABJzdGF0aWNfYnVybkFkZHJlc3MBAAAAHHN0YXRpY0tleV9yZWZDb250cmFjdEFkZHJlc3MAAAAAAgAAABlzdGF0aWNfcmVmQ29udHJhY3RBZGRyZXNzAQAAABJzdGF0aWNLZXlfZXh0cmFGZWUAAAAAAgAAAA9zdGF0aWNfZXh0cmFGZWUBAAAAF3N0YXRpY0tleV9mZWVBZ2dyZWdhdG9yAAAAAAIAAAAUc3RhdGljX2ZlZUFnZ3JlZ2F0b3IBAAAACWdldE9yYWNsZQAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAAF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAAAAAEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABRzdGF0aWNLZXlfZWdnQXNzZXRJZAAAAAABAAAAE2dldEluY3ViYXRvckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABpzdGF0aWNLZXlfaW5jdWJhdG9yQWRkcmVzcwAAAAABAAAAEWdldEJyZWVkZXJBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAYc3RhdGljS2V5X2JyZWVkZXJBZGRyZXNzAAAAAAEAAAARZ2V0RmFybWluZ0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABhzdGF0aWNLZXlfZmFybWluZ0FkZHJlc3MAAAAAAQAAABJnZXRCYWJ5RHVja0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABlzdGF0aWNLZXlfYmFieUR1Y2tBZGRyZXNzAAAAAAEAAAASZ2V0R2FtZURhcHBBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAZc3RhdGljS2V5X2dhbWVEYXBwQWRkcmVzcwAAAAABAAAAD2dldEl0ZW1zQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAAAAAAQAAABFnZXRDb3Vwb25zQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAGHN0YXRpY0tleV9jb3Vwb25zQWRkcmVzcwAAAAABAAAAEmdldE1ldGFyYWNlQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAGXN0YXRpY0tleV9tZXRhUmFjZUFkZHJlc3MAAAAAAQAAAA5nZXRIdW50QWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAFXN0YXRpY0tleV9odW50QWRkcmVzcwAAAAABAAAADmdldEJ1cm5BZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAVc3RhdGljS2V5X2J1cm5BZGRyZXNzAAAAAAEAAAAVZ2V0UmVmQ29udHJhY3RBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAcc3RhdGljS2V5X3JlZkNvbnRyYWN0QWRkcmVzcwAAAAABAAAAEGdldEZlZUFnZ3JlZ2F0b3IAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABdzdGF0aWNLZXlfZmVlQWdncmVnYXRvcgAAAAABAAAAFmNoZWNrQWRkaXRpb25hbFBheW1lbnQAAAABAAAAB3BheW1lbnQDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAAAIAAAABAgAAABlSQ0FQOiBQbGVhc2UgYXR0YWNoIHdhdmVzBAAAAAlmZWVBbW91bnQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAASc3RhdGljS2V5X2V4dHJhRmVlAAAAAAMJAQAAAAIhPQAAAAIIBQAAAAdwYXltZW50AAAABmFtb3VudAUAAAAJZmVlQW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABxSQ0FQOiBQbGVhc2UgYXR0YWNoIGV4YWN0bHkgCQABpAAAAAEFAAAACWZlZUFtb3VudAIAAAATIGFtb3VudCBvZiB3YXZlbGV0cwkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAQZ2V0RmVlQWdncmVnYXRvcgAAAAAFAAAACWZlZUFtb3VudAUAAAAEdW5pdAUAAAADbmlsAAAAABJQ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", "height": 3640441, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 23pduavFTkFgquXRadcdB6X8wvHmNvHaWnvExyBiJvBP Next: 4taFPuLFCw4VAa3GUMbYWiUD3WdkGW7iN4cipFGRH2yt Diff:
OldNewDifferences
2222
2323 let delayForHatching = 2
2424
25-func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
25+func staticKey_oracleAddress () = "static_oracleAddress"
2626
2727
28-func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
28+func staticKey_eggAssetId () = "static_eggAssetId"
2929
3030
31-func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress")))
31+func staticKey_incubatorAddress () = "static_incubatorAddress"
3232
3333
34-func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
34+func staticKey_breederAddress () = "static_breederAddress"
3535
3636
37-func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_farmingAddress")))
37+func staticKey_farmingAddress () = "static_farmingAddress"
3838
3939
40-func getBabyDuckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_babyDuckAddress")))
40+func staticKey_babyDuckAddress () = "static_babyDuckAddress"
4141
4242
43-func getGameDappAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_gameDappAddress")))
43+func staticKey_gameDappAddress () = "static_gameDappAddress"
4444
4545
46-func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
46+func staticKey_itemsAddress () = "static_itemsAddress"
4747
4848
49-func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_couponsAddress")))
49+func staticKey_couponsAddress () = "static_couponsAddress"
5050
5151
52-func getMetaraceAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_metaRaceAddress")))
52+func staticKey_metaRaceAddress () = "static_metaRaceAddress"
5353
5454
55-func getHuntAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_huntAddress")))
55+func staticKey_huntAddress () = "static_huntAddress"
5656
5757
58-func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_burnAddress")))
58+func staticKey_burnAddress () = "static_burnAddress"
5959
6060
61-func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_refContractAddress")))
61+func staticKey_refContractAddress () = "static_refContractAddress"
62+
63+
64+func staticKey_extraFee () = "static_extraFee"
65+
66+
67+func staticKey_feeAggregator () = "static_feeAggregator"
68+
69+
70+func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
71+
72+
73+func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
74+
75+
76+func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_incubatorAddress())))
77+
78+
79+func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
80+
81+
82+func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_farmingAddress())))
83+
84+
85+func getBabyDuckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_babyDuckAddress())))
86+
87+
88+func getGameDappAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_gameDappAddress())))
89+
90+
91+func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
92+
93+
94+func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
95+
96+
97+func getMetaraceAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_metaRaceAddress())))
98+
99+
100+func getHuntAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_huntAddress())))
101+
102+
103+func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress())))
104+
105+
106+func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_refContractAddress())))
107+
108+
109+func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
110+
111+
112+func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
113+ then throw("RCAP: Please attach waves")
114+ else {
115+ let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
116+ if ((payment.amount != feeAmount))
117+ then throw((("RCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
118+ else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
119+ }
62120
63121
64122 let PHOENIXBASEOPTIONS = 1000
143201 then "duckling_20"
144202 else if ((250 > n))
145203 then "incubator"
146- else if ((375 > n))
147- then "perch_Y"
148- else if ((500 > n))
149- then "perch_G"
150- else if ((625 > n))
151- then "perch_B"
152- else if ((750 > n))
153- then "perch_R"
154- else if ((875 > n))
155- then "ar"
156- else "meta"
204+ else if ((280 > n))
205+ then "item_ART-SNAKE"
206+ else if ((410 > n))
207+ then "item_ART-KATANA"
208+ else if ((460 > n))
209+ then "item_ART-ROBODUCK"
210+ else if ((480 > n))
211+ then "item_ART-CROWN"
212+ else if ((610 > n))
213+ then "item_ART-SCEPTER"
214+ else if ((740 > n))
215+ then "item_ART-BUILTBODY"
216+ else if ((750 > n))
217+ then "item_ART-FEED10"
218+ else if ((875 > n))
219+ then "ar"
220+ else "meta"
157221 }
158222 }
159223
210274 if ((amountPaidByCoupons == amountPaidByCoupons))
211275 then {
212276 let leftToPay = (feeAmount - amountPaidByCoupons)
213- let payment = if ((leftToPay != 0))
277+ let validPayment = checkAdditionalPayment(i.payments[1])
278+ if ((validPayment == validPayment))
214279 then {
215- let feePayment = value(i.payments[1])
216- if ((feePayment.assetId != getEggAssetId()))
217- then throw("You need to attach EGG tokens as fee")
218- else if ((leftToPay > feePayment.amount))
219- then throw(("You need to attach the following amount of EGG tokens as fee: 0." + toString(leftToPay)))
220- else {
221- let refererRewardForPerch = fraction(leftToPay, 5, 100)
222- let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)])
223- if ((refCall == refCall))
224- then {
225- let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), (leftToPay - refererRewardForPerch))])
226- if ((burnCall == burnCall))
227- then leftToPay
280+ let payment = if ((leftToPay != 0))
281+ then {
282+ let feePayment = value(i.payments[2])
283+ if ((feePayment.assetId != getEggAssetId()))
284+ then throw("You need to attach EGG tokens as fee")
285+ else if ((leftToPay > feePayment.amount))
286+ then throw(("You need to attach the following amount of EGG tokens as fee: 0." + toString(leftToPay)))
287+ else {
288+ let refererRewardForPerch = fraction(leftToPay, 5, 100)
289+ let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)])
290+ if ((refCall == refCall))
291+ then {
292+ let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), (leftToPay - refererRewardForPerch))])
293+ if ((burnCall == burnCall))
294+ then leftToPay
295+ else throw("Strict value is not equal to itself.")
296+ }
228297 else throw("Strict value is not equal to itself.")
229298 }
230- else throw("Strict value is not equal to itself.")
231- }
232- }
233- else 0
234- if ((payment == payment))
235- then {
236- let $t068846933 = getAssetFarmingPower(assetId)
237- let gen = $t068846933._1
238- let rarity = $t068846933._2
239- let call = invoke(getOrigin(assetId), "reduceRarity", [toBase58String(assetId), gen], nil)
240- if ((call == call))
241- then [IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"), (height + delayForHatching)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "open"), IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_assetRarity"), rarity), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_assetId"), toBase58String(assetId))]
299+ }
300+ else 0
301+ if ((payment == payment))
302+ then {
303+ let $t085158564 = getAssetFarmingPower(assetId)
304+ let gen = $t085158564._1
305+ let rarity = $t085158564._2
306+ let call = invoke(getOrigin(assetId), "reduceRarity", [toBase58String(assetId), gen], nil)
307+ if ((call == call))
308+ then ([IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"), (height + delayForHatching)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "open"), IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_assetRarity"), rarity), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_assetId"), toBase58String(assetId))] ++ validPayment)
309+ else throw("Strict value is not equal to itself.")
310+ }
242311 else throw("Strict value is not equal to itself.")
243312 }
244313 else throw("Strict value is not equal to itself.")
255324 let finishBlock = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"))
256325 let assetRarity = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_assetRarity"))
257326 let status = tryGetString((((("address_" + address) + "_initTx_") + initTx) + "_status"))
258- func getAccessItemAssetId (address) = fromBase58String(tryGetStringExternal(address, "static_accessItemAssetId"))
327+ let validPayment = checkAdditionalPayment(i.payments[0])
328+ if ((validPayment == validPayment))
329+ then {
330+ func getAccessItemAssetId (address) = fromBase58String(tryGetStringExternal(address, "static_accessItemAssetId"))
259331
260- func getAccessItemPrice (address) = tryGetIntExternal(address, "static_accessItemPrice")
332+ func getAccessItemPrice (address) = tryGetIntExternal(address, "static_accessItemPrice")
261333
262- if ((status != "open"))
263- then throw("rebirth is finished or not open")
264- else if ((finishBlock > height))
265- then throw("you cannot finish rebirth, yet")
266- else {
267- let win = getRandomWin(fromBase58String(initTx), finishBlock, assetRarity)
268- let txId = initTx
269- let result = if ((indexOf(win, "perch") != unit))
270- then {
271- let color = takeRight(win, 1)
272- let call = invoke(getFarmingAddress(), "addFreePerch", [address, color], nil)
273- if ((call == call))
274- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
275- else throw("Strict value is not equal to itself.")
276- }
277- else if ((win == "incubator"))
278- then {
279- let call = invoke(getIncubatorAddress(), "issueFreeDuck", [address, txId], nil)
280- if ((call == call))
281- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
282- else throw("Strict value is not equal to itself.")
283- }
284- else if ((win == "ar"))
334+ if ((status != "open"))
335+ then throw("rebirth is finished or not open")
336+ else if ((finishBlock > height))
337+ then throw("you cannot finish rebirth, yet")
338+ else {
339+ let win = getRandomWin(fromBase58String(initTx), finishBlock, assetRarity)
340+ let txId = initTx
341+ let result = if ((indexOf(win, "perch") != unit))
285342 then {
286- let assetId = getAccessItemAssetId(getHuntAddress())
287- let price = getAccessItemPrice(getHuntAddress())
288- let call = invoke(getHuntAddress(), "buyAccessItemOther", [address], [AttachedPayment(assetId, price)])
343+ let color = takeRight(win, 1)
344+ let call = invoke(getFarmingAddress(), "addFreePerch", [address, color], nil)
289345 if ((call == call))
290346 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
291347 else throw("Strict value is not equal to itself.")
292348 }
293- else if ((win == "meta"))
349+ else if ((win == "incubator"))
294350 then {
295- let assetId = getAccessItemAssetId(getMetaraceAddress())
296- let price = getAccessItemPrice(getMetaraceAddress())
297- let call = invoke(getMetaraceAddress(), "buyAccessItemOther", [address], [AttachedPayment(assetId, price)])
351+ let call = invoke(getIncubatorAddress(), "issueFreeDuck", [address, txId], nil)
298352 if ((call == call))
299353 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
300354 else throw("Strict value is not equal to itself.")
301355 }
302- else if ((win == "phoenix"))
356+ else if ((win == "ar"))
303357 then {
304- let call = invoke(getIncubatorAddress(), "issueJackpot", [address, txId, "WWWWWWWP"], nil)
358+ let assetId = getAccessItemAssetId(getHuntAddress())
359+ let price = getAccessItemPrice(getHuntAddress())
360+ let call = invoke(getHuntAddress(), "buyAccessItemOther", [address], [AttachedPayment(assetId, price)])
305361 if ((call == call))
306362 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
307363 else throw("Strict value is not equal to itself.")
308364 }
309- else if ((indexOf(win, "duckling") != unit))
365+ else if ((win == "meta"))
310366 then {
311- let level = parseIntValue(split(win, "_")[1])
312- let call = invoke(getBabyDuckAddress(), "issueFreeDuckling", [address, txId, level], nil)
367+ let assetId = getAccessItemAssetId(getMetaraceAddress())
368+ let price = getAccessItemPrice(getMetaraceAddress())
369+ let call = invoke(getMetaraceAddress(), "buyAccessItemOther", [address], [AttachedPayment(assetId, price)])
313370 if ((call == call))
314371 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
315372 else throw("Strict value is not equal to itself.")
316373 }
317- else if ((indexOf(win, "item") != unit))
374+ else if ((win == "phoenix"))
318375 then {
319- let itemName = split(win, "_")[1]
320- let call = invoke(getItemsAddress(), "issueArtefact", [itemName, address], nil)
376+ let call = invoke(getIncubatorAddress(), "issueJackpot", [address, txId, "WWWWWWWP"], nil)
321377 if ((call == call))
322378 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
323379 else throw("Strict value is not equal to itself.")
324380 }
325- else throw("RFB: Some error occured, please contact the admins!")
326- (result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish")])
327- }
381+ else if ((indexOf(win, "duckling") != unit))
382+ then {
383+ let level = parseIntValue(split(win, "_")[1])
384+ let call = invoke(getBabyDuckAddress(), "issueFreeDuckling", [address, txId, level], nil)
385+ if ((call == call))
386+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
387+ else throw("Strict value is not equal to itself.")
388+ }
389+ else if ((indexOf(win, "item") != unit))
390+ then {
391+ let itemName = split(win, "_")[1]
392+ let call = invoke(getItemsAddress(), "issueArtefact", [itemName, address], nil)
393+ if ((call == call))
394+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
395+ else throw("Strict value is not equal to itself.")
396+ }
397+ else throw("RFB: Some error occured, please contact the admins!")
398+ ((result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish")]) ++ validPayment)
399+ }
400+ }
401+ else throw("Strict value is not equal to itself.")
328402 }
329403
330404
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func tryGetStringExternal (address,key) = match getString(address, key) {
55 case a: String =>
66 a
77 case _ =>
88 ""
99 }
1010
1111
1212 func tryGetIntExternal (address,key) = match getInteger(address, key) {
1313 case a: Int =>
1414 a
1515 case _ =>
1616 throw("RTGIE: Something went wrong")
1717 }
1818
1919
2020 func tryGetString (key) = tryGetStringExternal(this, key)
2121
2222
2323 let delayForHatching = 2
2424
25-func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
25+func staticKey_oracleAddress () = "static_oracleAddress"
2626
2727
28-func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
28+func staticKey_eggAssetId () = "static_eggAssetId"
2929
3030
31-func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress")))
31+func staticKey_incubatorAddress () = "static_incubatorAddress"
3232
3333
34-func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
34+func staticKey_breederAddress () = "static_breederAddress"
3535
3636
37-func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_farmingAddress")))
37+func staticKey_farmingAddress () = "static_farmingAddress"
3838
3939
40-func getBabyDuckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_babyDuckAddress")))
40+func staticKey_babyDuckAddress () = "static_babyDuckAddress"
4141
4242
43-func getGameDappAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_gameDappAddress")))
43+func staticKey_gameDappAddress () = "static_gameDappAddress"
4444
4545
46-func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
46+func staticKey_itemsAddress () = "static_itemsAddress"
4747
4848
49-func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_couponsAddress")))
49+func staticKey_couponsAddress () = "static_couponsAddress"
5050
5151
52-func getMetaraceAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_metaRaceAddress")))
52+func staticKey_metaRaceAddress () = "static_metaRaceAddress"
5353
5454
55-func getHuntAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_huntAddress")))
55+func staticKey_huntAddress () = "static_huntAddress"
5656
5757
58-func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_burnAddress")))
58+func staticKey_burnAddress () = "static_burnAddress"
5959
6060
61-func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_refContractAddress")))
61+func staticKey_refContractAddress () = "static_refContractAddress"
62+
63+
64+func staticKey_extraFee () = "static_extraFee"
65+
66+
67+func staticKey_feeAggregator () = "static_feeAggregator"
68+
69+
70+func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
71+
72+
73+func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
74+
75+
76+func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_incubatorAddress())))
77+
78+
79+func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
80+
81+
82+func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_farmingAddress())))
83+
84+
85+func getBabyDuckAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_babyDuckAddress())))
86+
87+
88+func getGameDappAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_gameDappAddress())))
89+
90+
91+func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
92+
93+
94+func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
95+
96+
97+func getMetaraceAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_metaRaceAddress())))
98+
99+
100+func getHuntAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_huntAddress())))
101+
102+
103+func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress())))
104+
105+
106+func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_refContractAddress())))
107+
108+
109+func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
110+
111+
112+func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
113+ then throw("RCAP: Please attach waves")
114+ else {
115+ let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
116+ if ((payment.amount != feeAmount))
117+ then throw((("RCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
118+ else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
119+ }
62120
63121
64122 let PHOENIXBASEOPTIONS = 1000
65123
66124 func tryGetInteger (key) = match getInteger(this, key) {
67125 case b: Int =>
68126 b
69127 case _ =>
70128 0
71129 }
72130
73131
74132 func asString (value) = match value {
75133 case s: String =>
76134 s
77135 case s: Int =>
78136 throw("wrong type, expected: String, got: Int")
79137 case s: Unit =>
80138 throw("wrong type, expected: String, got: Unit")
81139 case _ =>
82140 throw("wrong type, expected: String")
83141 }
84142
85143
86144 let feeAmount = tryGetInteger("currentPrice")
87145
88146 func getAmountOrClear (amount) = if (contains(amount, "0"))
89147 then ""
90148 else amount
91149
92150
93151 func getAssetOrigin (generation) = if ((generation == "G"))
94152 then getIncubatorAddress()
95153 else getBreederAddress()
96154
97155
98156 func getAssetRarity (genotype,generation) = {
99157 let quantity = getIntegerValue(getAssetOrigin(generation), (("stats_" + genotype) + "_quantity"))
100158 let power = pow((10000 / quantity), 4, 5, 1, 2, FLOOR)
101159 if ((power > 0))
102160 then power
103161 else 2
104162 }
105163
106164
107165 func getAssetFarmingPower (assetId) = if (if ((value(assetInfo(assetId)).issuer == getBreederAddress()))
108166 then true
109167 else (value(assetInfo(assetId)).issuer == getIncubatorAddress()))
110168 then {
111169 let assetName = value(assetInfo(assetId)).name
112170 let generation = take(takeRight(assetName, 2), 1)
113171 let farmGen = asString(invoke(getBreederAddress(), "getGenFromName", [assetName], nil))
114172 if ((farmGen == farmGen))
115173 then $Tuple2(farmGen, getAssetRarity(farmGen, generation))
116174 else throw("Strict value is not equal to itself.")
117175 }
118176 else throw("not valid NFT")
119177
120178
121179 func getRandomNumber (options,txId,hatchingFinishHeight,offset) = {
122180 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
123181 let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
124182 (toInt(randomHash, (offset * 8)) % options)
125183 }
126184
127185
128186 func getRandomWin (tx,finishHeight,assetRarity) = {
129187 let phoenixOptions = (PHOENIXBASEOPTIONS - fraction((PHOENIXBASEOPTIONS / 2), assetRarity, 100))
130188 let jackpotRandom = getRandomNumber(phoenixOptions, tx, finishHeight, 1)
131189 let itemRandom = getRandomNumber(phoenixOptions, tx, finishHeight, 2)
132190 if ((jackpotRandom == 1))
133191 then "phoenix"
134192 else if ((itemRandom == 1))
135193 then "item_ART-FREEGENE"
136194 else {
137195 let n = getRandomNumber(1000, tx, finishHeight, 0)
138196 if ((150 > n))
139197 then "duckling_2"
140198 else if ((200 > n))
141199 then "duckling_10"
142200 else if ((210 > n))
143201 then "duckling_20"
144202 else if ((250 > n))
145203 then "incubator"
146- else if ((375 > n))
147- then "perch_Y"
148- else if ((500 > n))
149- then "perch_G"
150- else if ((625 > n))
151- then "perch_B"
152- else if ((750 > n))
153- then "perch_R"
154- else if ((875 > n))
155- then "ar"
156- else "meta"
204+ else if ((280 > n))
205+ then "item_ART-SNAKE"
206+ else if ((410 > n))
207+ then "item_ART-KATANA"
208+ else if ((460 > n))
209+ then "item_ART-ROBODUCK"
210+ else if ((480 > n))
211+ then "item_ART-CROWN"
212+ else if ((610 > n))
213+ then "item_ART-SCEPTER"
214+ else if ((740 > n))
215+ then "item_ART-BUILTBODY"
216+ else if ((750 > n))
217+ then "item_ART-FEED10"
218+ else if ((875 > n))
219+ then "ar"
220+ else "meta"
157221 }
158222 }
159223
160224
161225 func getOrigin (assetId) = {
162226 let assetName = value(assetInfo(assetId)).name
163227 let generation = take(takeRight(assetName, 2), 1)
164228 if (if ((generation == "G"))
165229 then true
166230 else (generation == "J"))
167231 then getIncubatorAddress()
168232 else getBreederAddress()
169233 }
170234
171235
172236 func asInt (value) = match value {
173237 case int: Int =>
174238 int
175239 case string: String =>
176240 throw(("RAI: wrong type, expected: Int, but got: " + string))
177241 case _ =>
178242 throw("RAI: wrong type, expected: Int")
179243 }
180244
181245
182246 func getBool (key) = match getBoolean(this, key) {
183247 case b: Boolean =>
184248 b
185249 case _ =>
186250 false
187251 }
188252
189253
190254 func isTestEnv () = getBool("TESTENV")
191255
192256
193257 @Callable(i)
194258 func configureOracle (oracle) = if ((i.caller != this))
195259 then throw("RCU: admin only")
196260 else [StringEntry("static_oracleAddress", oracle)]
197261
198262
199263
200264 @Callable(i)
201265 func initRebirth (refererAddress) = {
202266 let pmt = i.payments[0]
203267 let assetId = value(pmt.assetId)
204268 let initTx = toBase58String(i.transactionId)
205269 let address = toString(i.caller)
206270 if ((pmt.amount != 1))
207271 then throw("NFT is not attached")
208272 else {
209273 let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [feeAmount], nil))
210274 if ((amountPaidByCoupons == amountPaidByCoupons))
211275 then {
212276 let leftToPay = (feeAmount - amountPaidByCoupons)
213- let payment = if ((leftToPay != 0))
277+ let validPayment = checkAdditionalPayment(i.payments[1])
278+ if ((validPayment == validPayment))
214279 then {
215- let feePayment = value(i.payments[1])
216- if ((feePayment.assetId != getEggAssetId()))
217- then throw("You need to attach EGG tokens as fee")
218- else if ((leftToPay > feePayment.amount))
219- then throw(("You need to attach the following amount of EGG tokens as fee: 0." + toString(leftToPay)))
220- else {
221- let refererRewardForPerch = fraction(leftToPay, 5, 100)
222- let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)])
223- if ((refCall == refCall))
224- then {
225- let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), (leftToPay - refererRewardForPerch))])
226- if ((burnCall == burnCall))
227- then leftToPay
280+ let payment = if ((leftToPay != 0))
281+ then {
282+ let feePayment = value(i.payments[2])
283+ if ((feePayment.assetId != getEggAssetId()))
284+ then throw("You need to attach EGG tokens as fee")
285+ else if ((leftToPay > feePayment.amount))
286+ then throw(("You need to attach the following amount of EGG tokens as fee: 0." + toString(leftToPay)))
287+ else {
288+ let refererRewardForPerch = fraction(leftToPay, 5, 100)
289+ let refCall = invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)])
290+ if ((refCall == refCall))
291+ then {
292+ let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), (leftToPay - refererRewardForPerch))])
293+ if ((burnCall == burnCall))
294+ then leftToPay
295+ else throw("Strict value is not equal to itself.")
296+ }
228297 else throw("Strict value is not equal to itself.")
229298 }
230- else throw("Strict value is not equal to itself.")
231- }
232- }
233- else 0
234- if ((payment == payment))
235- then {
236- let $t068846933 = getAssetFarmingPower(assetId)
237- let gen = $t068846933._1
238- let rarity = $t068846933._2
239- let call = invoke(getOrigin(assetId), "reduceRarity", [toBase58String(assetId), gen], nil)
240- if ((call == call))
241- then [IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"), (height + delayForHatching)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "open"), IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_assetRarity"), rarity), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_assetId"), toBase58String(assetId))]
299+ }
300+ else 0
301+ if ((payment == payment))
302+ then {
303+ let $t085158564 = getAssetFarmingPower(assetId)
304+ let gen = $t085158564._1
305+ let rarity = $t085158564._2
306+ let call = invoke(getOrigin(assetId), "reduceRarity", [toBase58String(assetId), gen], nil)
307+ if ((call == call))
308+ then ([IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"), (height + delayForHatching)), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "open"), IntegerEntry((((("address_" + address) + "_initTx_") + initTx) + "_assetRarity"), rarity), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_assetId"), toBase58String(assetId))] ++ validPayment)
309+ else throw("Strict value is not equal to itself.")
310+ }
242311 else throw("Strict value is not equal to itself.")
243312 }
244313 else throw("Strict value is not equal to itself.")
245314 }
246315 else throw("Strict value is not equal to itself.")
247316 }
248317 }
249318
250319
251320
252321 @Callable(i)
253322 func finishRebirth (initTx) = {
254323 let address = toString(i.caller)
255324 let finishBlock = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"))
256325 let assetRarity = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_assetRarity"))
257326 let status = tryGetString((((("address_" + address) + "_initTx_") + initTx) + "_status"))
258- func getAccessItemAssetId (address) = fromBase58String(tryGetStringExternal(address, "static_accessItemAssetId"))
327+ let validPayment = checkAdditionalPayment(i.payments[0])
328+ if ((validPayment == validPayment))
329+ then {
330+ func getAccessItemAssetId (address) = fromBase58String(tryGetStringExternal(address, "static_accessItemAssetId"))
259331
260- func getAccessItemPrice (address) = tryGetIntExternal(address, "static_accessItemPrice")
332+ func getAccessItemPrice (address) = tryGetIntExternal(address, "static_accessItemPrice")
261333
262- if ((status != "open"))
263- then throw("rebirth is finished or not open")
264- else if ((finishBlock > height))
265- then throw("you cannot finish rebirth, yet")
266- else {
267- let win = getRandomWin(fromBase58String(initTx), finishBlock, assetRarity)
268- let txId = initTx
269- let result = if ((indexOf(win, "perch") != unit))
270- then {
271- let color = takeRight(win, 1)
272- let call = invoke(getFarmingAddress(), "addFreePerch", [address, color], nil)
273- if ((call == call))
274- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
275- else throw("Strict value is not equal to itself.")
276- }
277- else if ((win == "incubator"))
278- then {
279- let call = invoke(getIncubatorAddress(), "issueFreeDuck", [address, txId], nil)
280- if ((call == call))
281- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
282- else throw("Strict value is not equal to itself.")
283- }
284- else if ((win == "ar"))
334+ if ((status != "open"))
335+ then throw("rebirth is finished or not open")
336+ else if ((finishBlock > height))
337+ then throw("you cannot finish rebirth, yet")
338+ else {
339+ let win = getRandomWin(fromBase58String(initTx), finishBlock, assetRarity)
340+ let txId = initTx
341+ let result = if ((indexOf(win, "perch") != unit))
285342 then {
286- let assetId = getAccessItemAssetId(getHuntAddress())
287- let price = getAccessItemPrice(getHuntAddress())
288- let call = invoke(getHuntAddress(), "buyAccessItemOther", [address], [AttachedPayment(assetId, price)])
343+ let color = takeRight(win, 1)
344+ let call = invoke(getFarmingAddress(), "addFreePerch", [address, color], nil)
289345 if ((call == call))
290346 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
291347 else throw("Strict value is not equal to itself.")
292348 }
293- else if ((win == "meta"))
349+ else if ((win == "incubator"))
294350 then {
295- let assetId = getAccessItemAssetId(getMetaraceAddress())
296- let price = getAccessItemPrice(getMetaraceAddress())
297- let call = invoke(getMetaraceAddress(), "buyAccessItemOther", [address], [AttachedPayment(assetId, price)])
351+ let call = invoke(getIncubatorAddress(), "issueFreeDuck", [address, txId], nil)
298352 if ((call == call))
299353 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
300354 else throw("Strict value is not equal to itself.")
301355 }
302- else if ((win == "phoenix"))
356+ else if ((win == "ar"))
303357 then {
304- let call = invoke(getIncubatorAddress(), "issueJackpot", [address, txId, "WWWWWWWP"], nil)
358+ let assetId = getAccessItemAssetId(getHuntAddress())
359+ let price = getAccessItemPrice(getHuntAddress())
360+ let call = invoke(getHuntAddress(), "buyAccessItemOther", [address], [AttachedPayment(assetId, price)])
305361 if ((call == call))
306362 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
307363 else throw("Strict value is not equal to itself.")
308364 }
309- else if ((indexOf(win, "duckling") != unit))
365+ else if ((win == "meta"))
310366 then {
311- let level = parseIntValue(split(win, "_")[1])
312- let call = invoke(getBabyDuckAddress(), "issueFreeDuckling", [address, txId, level], nil)
367+ let assetId = getAccessItemAssetId(getMetaraceAddress())
368+ let price = getAccessItemPrice(getMetaraceAddress())
369+ let call = invoke(getMetaraceAddress(), "buyAccessItemOther", [address], [AttachedPayment(assetId, price)])
313370 if ((call == call))
314371 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
315372 else throw("Strict value is not equal to itself.")
316373 }
317- else if ((indexOf(win, "item") != unit))
374+ else if ((win == "phoenix"))
318375 then {
319- let itemName = split(win, "_")[1]
320- let call = invoke(getItemsAddress(), "issueArtefact", [itemName, address], nil)
376+ let call = invoke(getIncubatorAddress(), "issueJackpot", [address, txId, "WWWWWWWP"], nil)
321377 if ((call == call))
322378 then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
323379 else throw("Strict value is not equal to itself.")
324380 }
325- else throw("RFB: Some error occured, please contact the admins!")
326- (result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish")])
327- }
381+ else if ((indexOf(win, "duckling") != unit))
382+ then {
383+ let level = parseIntValue(split(win, "_")[1])
384+ let call = invoke(getBabyDuckAddress(), "issueFreeDuckling", [address, txId, level], nil)
385+ if ((call == call))
386+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
387+ else throw("Strict value is not equal to itself.")
388+ }
389+ else if ((indexOf(win, "item") != unit))
390+ then {
391+ let itemName = split(win, "_")[1]
392+ let call = invoke(getItemsAddress(), "issueArtefact", [itemName, address], nil)
393+ if ((call == call))
394+ then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
395+ else throw("Strict value is not equal to itself.")
396+ }
397+ else throw("RFB: Some error occured, please contact the admins!")
398+ ((result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish")]) ++ validPayment)
399+ }
400+ }
401+ else throw("Strict value is not equal to itself.")
328402 }
329403
330404
331405 @Verifier(tx)
332406 func verify () = if (isTestEnv())
333407 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
334408 else {
335409 let firstUser = base58'FzsTVRXqD46KW5yj6qGNVrsouvWjpCQvD1446A96iGt4'
336410 let secondUser = base58'E23yUg8eun5nXB1nZRDf7RTyRADKxQhGNXdpTYonEvtU'
337411 let thirdUser = base58'Ga8WEBTPXbHuoXRD355mQ6ms8PsM2RFYKeA1mEP32CFe'
338412 let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser))
339413 then 1
340414 else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser))
341415 then 1
342416 else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser))
343417 then 1
344418 else 0
345419 let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser))
346420 then 1
347421 else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser))
348422 then 1
349423 else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser))
350424 then 1
351425 else 0
352426 let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser))
353427 then 1
354428 else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser))
355429 then 1
356430 else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser))
357431 then 1
358432 else 0
359433 let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
360434 match tx {
361435 case _ =>
362436 (signaturesCount >= 2)
363437 }
364438 }
365439

github/deemru/w8io/6500d08 
85.09 ms