tx · A3LafxmzmEeSNmTKLdkwy8B5nvpkj2FPsS4FkZFroDPL

3PGZyyPg7Mx91yaNT8k3MWxSQzuzusMUyzX:  -0.01400000 Waves

2021.09.28 12:54 [2787663] smart account 3PGZyyPg7Mx91yaNT8k3MWxSQzuzusMUyzX > SELF 0.00000000 Waves

{ "type": 13, "id": "A3LafxmzmEeSNmTKLdkwy8B5nvpkj2FPsS4FkZFroDPL", "fee": 1400000, "feeAssetId": null, "timestamp": 1632822940648, "version": 2, "chainId": 87, "sender": "3PGZyyPg7Mx91yaNT8k3MWxSQzuzusMUyzX", "senderPublicKey": "EmRAgwaLuMrvnkeorjU9UmmGnRMXMu5ctEqkYRxnG2za", "proofs": [ "5Mtm1gzwGmzwxqexCj1Aghq5ut34hmAs6ZEHmLsjg9nkxiimPS2oeNMcELgppkRhiwYmrEqEbQ8YkYQscrrCFzB4" ], "script": "base64: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b3VudAQAAAATcmVmZXJlckVhcm5lZFJld2FyZAkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAA5yZWZlcmVyQWRkcmVzcwIAAAANX2Vhcm5lZFJld2FyZAQAAAAWcmVmZXJhbERlbGl2ZXJlZFJld2FyZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhyZWZlcmVyXwUAAAAOcmVmZXJlckFkZHJlc3MCAAAACV9yZWZlcmFsXwUAAAAOcmVmZXJhbEFkZHJlc3MCAAAAEF9kZWxpdmVyZWRSZXdhcmQDCQAAAAAAAAIFAAAADnJlZmVyZXJBZGRyZXNzBQAAAA5yZWZlcmFsQWRkcmVzcwUAAAADbmlsCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAOcmVmZXJhbEFkZHJlc3MCAAAACl9yZWZlcmVkQnkFAAAADnJlZmVyZXJBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNyZWZlcmVyRWFybmVkUmV3YXJkCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAATcmVmZXJlckVhcm5lZFJld2FyZAUAAAARcGF5bWVudEZvclJlZmVyZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFnJlZmVyYWxEZWxpdmVyZWRSZXdhcmQJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABBQAAABZyZWZlcmFsRGVsaXZlcmVkUmV3YXJkBQAAABFwYXltZW50Rm9yUmVmZXJlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhyZWZlcmVyXwUAAAAOcmVmZXJlckFkZHJlc3MCAAAACV9yZWZlcmFsXwUAAAAOcmVmZXJhbEFkZHJlc3MCAAAAB19hbW91bnQJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACHJlZmVyZXJfBQAAAA5yZWZlcmVyQWRkcmVzcwIAAAAJX3JlZmVyYWxfBQAAAA5yZWZlcmFsQWRkcmVzcwIAAAAHX2Ftb3VudAAAAAAAAAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABNyZWZlcmVyQWRkcmVzc1ZhbHVlBQAAABFwYXltZW50Rm9yUmVmZXJlcgUAAAALZWdnc0Fzc2V0SWQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5SuaLpA==", "height": 2787663, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: JBBEmincE2tfgwhEVCz9NK863uHUHAuigSDQrNDj5rTU Next: EDEztYPUYTJMVBJx8n9x1jYKzGALKuuzKEj4NRn12qmU Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let eggsAssetId = base58'53bLXGQhnMxAoiWnza2SJQRp7hNQZVHnyrRziLmwdVjb'
55
6-let feeAmount = 50
6+let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv'
77
8-let delayForHatching = 0
8+let farmingAddress = base58'3PAETTtuW7aSiyKtn9GuML3RgtV1xdq1mQW'
99
10-let incubatorAddress = base58'3P6TwNU39Ykkbeqhn5TE4a2736xsA1vXemM'
10+let collectiveMasterAddress = base58'3PDktsxDVEcoobpEBJcausnKo4enhcWUDEF'
1111
12-let breederAddress = base58'3P9REuLBnYBafDqtEu6hfzs2Rv2haSU158y'
13-
14-let farmingAddress = base58'3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA'
15-
16-let ducklingAddress = base58'3PKwLVb8jYk58oYbfXxs2dUjD3YEKeqGWrX'
17-
18-let PHOENIXBASEOPTIONS = 1000
19-
20-func isLocked () = {
21- let masterAddress = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU')
22- match getInteger(masterAddress, "egglock") {
23- case b: Int =>
24- b
25- case _ =>
26- 0
27- }
28- }
29-
12+let ref20 = ["3PR66kMvUDE1QvYAg8r6e1xDX7QbnTV7JW5"]
3013
3114 func tryGetInteger (key) = match getInteger(this, key) {
3215 case b: Int =>
3619 }
3720
3821
39-func asString (value) = match value {
40- case s: String =>
41- s
22+func masterTryGetBoolean (key) = match getBoolean(Address(collectiveMasterAddress), key) {
23+ case b: Boolean =>
24+ b
4225 case _ =>
43- throw("wrong type, expected: String")
26+ false
27+}
28+
29+
30+func isValidAddress (address) = match addressFromString(address) {
31+ case a: Address =>
32+ true
33+ case _ =>
34+ false
4435 }
4536
4637
5243 }
5344
5445
55-func isSymbolA (accumulated,sym) = if ((sym == "A"))
56- then (accumulated + 1)
57- else (accumulated + 0)
58-
59-
60-func isSymbolB (accumulated,sym) = if ((sym == "B"))
61- then (accumulated + 1)
62- else (accumulated + 0)
63-
64-
65-func isSymbolC (accumulated,sym) = if ((sym == "C"))
66- then (accumulated + 1)
67- else (accumulated + 0)
68-
69-
70-func isSymbolD (accumulated,sym) = if ((sym == "D"))
71- then (accumulated + 1)
72- else (accumulated + 0)
73-
74-
75-func isSymbolE (accumulated,sym) = if ((sym == "E"))
76- then (accumulated + 1)
77- else (accumulated + 0)
78-
79-
80-func isSymbolF (accumulated,sym) = if ((sym == "F"))
81- then (accumulated + 1)
82- else (accumulated + 0)
83-
84-
85-func isSymbolG (accumulated,sym) = if ((sym == "G"))
86- then (accumulated + 1)
87- else (accumulated + 0)
88-
89-
90-func isSymbolH (accumulated,sym) = if ((sym == "H"))
91- then (accumulated + 1)
92- else (accumulated + 0)
93-
94-
95-func getAmountOrClear (amount) = if (contains(amount, "0"))
96- then ""
97- else amount
98-
99-
100-func getGen (assetName) = {
101- let genotype = split(dropRight(drop(assetName, 5), 3), "")
102- (((((((getAmountOrClear((toString({
103- let $list22372268 = genotype
104- let $size22372268 = size($list22372268)
105- let $acc022372268 = 0
106- if (($size22372268 == 0))
107- then $acc022372268
108- else {
109- let $acc122372268 = isSymbolA($acc022372268, $list22372268[0])
110- if (($size22372268 == 1))
111- then $acc122372268
112- else {
113- let $acc222372268 = isSymbolA($acc122372268, $list22372268[1])
114- if (($size22372268 == 2))
115- then $acc222372268
116- else {
117- let $acc322372268 = isSymbolA($acc222372268, $list22372268[2])
118- if (($size22372268 == 3))
119- then $acc322372268
120- else {
121- let $acc422372268 = isSymbolA($acc322372268, $list22372268[3])
122- if (($size22372268 == 4))
123- then $acc422372268
124- else {
125- let $acc522372268 = isSymbolA($acc422372268, $list22372268[4])
126- if (($size22372268 == 5))
127- then $acc522372268
128- else {
129- let $acc622372268 = isSymbolA($acc522372268, $list22372268[5])
130- if (($size22372268 == 6))
131- then $acc622372268
132- else {
133- let $acc722372268 = isSymbolA($acc622372268, $list22372268[6])
134- if (($size22372268 == 7))
135- then $acc722372268
136- else {
137- let $acc822372268 = isSymbolA($acc722372268, $list22372268[7])
138- if (($size22372268 == 8))
139- then $acc822372268
140- else {
141- let $acc922372268 = isSymbolA($acc822372268, $list22372268[8])
142- throw("List size exceed 8")
143- }
144- }
145- }
146- }
147- }
148- }
149- }
150- }
151- }
152- }) + "A")) + getAmountOrClear((toString({
153- let $list23052336 = genotype
154- let $size23052336 = size($list23052336)
155- let $acc023052336 = 0
156- if (($size23052336 == 0))
157- then $acc023052336
158- else {
159- let $acc123052336 = isSymbolB($acc023052336, $list23052336[0])
160- if (($size23052336 == 1))
161- then $acc123052336
162- else {
163- let $acc223052336 = isSymbolB($acc123052336, $list23052336[1])
164- if (($size23052336 == 2))
165- then $acc223052336
166- else {
167- let $acc323052336 = isSymbolB($acc223052336, $list23052336[2])
168- if (($size23052336 == 3))
169- then $acc323052336
170- else {
171- let $acc423052336 = isSymbolB($acc323052336, $list23052336[3])
172- if (($size23052336 == 4))
173- then $acc423052336
174- else {
175- let $acc523052336 = isSymbolB($acc423052336, $list23052336[4])
176- if (($size23052336 == 5))
177- then $acc523052336
178- else {
179- let $acc623052336 = isSymbolB($acc523052336, $list23052336[5])
180- if (($size23052336 == 6))
181- then $acc623052336
182- else {
183- let $acc723052336 = isSymbolB($acc623052336, $list23052336[6])
184- if (($size23052336 == 7))
185- then $acc723052336
186- else {
187- let $acc823052336 = isSymbolB($acc723052336, $list23052336[7])
188- if (($size23052336 == 8))
189- then $acc823052336
190- else {
191- let $acc923052336 = isSymbolB($acc823052336, $list23052336[8])
192- throw("List size exceed 8")
193- }
194- }
195- }
196- }
197- }
198- }
199- }
200- }
201- }
202- }) + "B"))) + getAmountOrClear((toString({
203- let $list23732404 = genotype
204- let $size23732404 = size($list23732404)
205- let $acc023732404 = 0
206- if (($size23732404 == 0))
207- then $acc023732404
208- else {
209- let $acc123732404 = isSymbolC($acc023732404, $list23732404[0])
210- if (($size23732404 == 1))
211- then $acc123732404
212- else {
213- let $acc223732404 = isSymbolC($acc123732404, $list23732404[1])
214- if (($size23732404 == 2))
215- then $acc223732404
216- else {
217- let $acc323732404 = isSymbolC($acc223732404, $list23732404[2])
218- if (($size23732404 == 3))
219- then $acc323732404
220- else {
221- let $acc423732404 = isSymbolC($acc323732404, $list23732404[3])
222- if (($size23732404 == 4))
223- then $acc423732404
224- else {
225- let $acc523732404 = isSymbolC($acc423732404, $list23732404[4])
226- if (($size23732404 == 5))
227- then $acc523732404
228- else {
229- let $acc623732404 = isSymbolC($acc523732404, $list23732404[5])
230- if (($size23732404 == 6))
231- then $acc623732404
232- else {
233- let $acc723732404 = isSymbolC($acc623732404, $list23732404[6])
234- if (($size23732404 == 7))
235- then $acc723732404
236- else {
237- let $acc823732404 = isSymbolC($acc723732404, $list23732404[7])
238- if (($size23732404 == 8))
239- then $acc823732404
240- else {
241- let $acc923732404 = isSymbolC($acc823732404, $list23732404[8])
242- throw("List size exceed 8")
243- }
244- }
245- }
246- }
247- }
248- }
249- }
250- }
251- }
252- }) + "C"))) + getAmountOrClear((toString({
253- let $list24432474 = genotype
254- let $size24432474 = size($list24432474)
255- let $acc024432474 = 0
256- if (($size24432474 == 0))
257- then $acc024432474
258- else {
259- let $acc124432474 = isSymbolD($acc024432474, $list24432474[0])
260- if (($size24432474 == 1))
261- then $acc124432474
262- else {
263- let $acc224432474 = isSymbolD($acc124432474, $list24432474[1])
264- if (($size24432474 == 2))
265- then $acc224432474
266- else {
267- let $acc324432474 = isSymbolD($acc224432474, $list24432474[2])
268- if (($size24432474 == 3))
269- then $acc324432474
270- else {
271- let $acc424432474 = isSymbolD($acc324432474, $list24432474[3])
272- if (($size24432474 == 4))
273- then $acc424432474
274- else {
275- let $acc524432474 = isSymbolD($acc424432474, $list24432474[4])
276- if (($size24432474 == 5))
277- then $acc524432474
278- else {
279- let $acc624432474 = isSymbolD($acc524432474, $list24432474[5])
280- if (($size24432474 == 6))
281- then $acc624432474
282- else {
283- let $acc724432474 = isSymbolD($acc624432474, $list24432474[6])
284- if (($size24432474 == 7))
285- then $acc724432474
286- else {
287- let $acc824432474 = isSymbolD($acc724432474, $list24432474[7])
288- if (($size24432474 == 8))
289- then $acc824432474
290- else {
291- let $acc924432474 = isSymbolD($acc824432474, $list24432474[8])
292- throw("List size exceed 8")
293- }
294- }
295- }
296- }
297- }
298- }
299- }
300- }
301- }
302- }) + "D"))) + getAmountOrClear((toString({
303- let $list25112542 = genotype
304- let $size25112542 = size($list25112542)
305- let $acc025112542 = 0
306- if (($size25112542 == 0))
307- then $acc025112542
308- else {
309- let $acc125112542 = isSymbolE($acc025112542, $list25112542[0])
310- if (($size25112542 == 1))
311- then $acc125112542
312- else {
313- let $acc225112542 = isSymbolE($acc125112542, $list25112542[1])
314- if (($size25112542 == 2))
315- then $acc225112542
316- else {
317- let $acc325112542 = isSymbolE($acc225112542, $list25112542[2])
318- if (($size25112542 == 3))
319- then $acc325112542
320- else {
321- let $acc425112542 = isSymbolE($acc325112542, $list25112542[3])
322- if (($size25112542 == 4))
323- then $acc425112542
324- else {
325- let $acc525112542 = isSymbolE($acc425112542, $list25112542[4])
326- if (($size25112542 == 5))
327- then $acc525112542
328- else {
329- let $acc625112542 = isSymbolE($acc525112542, $list25112542[5])
330- if (($size25112542 == 6))
331- then $acc625112542
332- else {
333- let $acc725112542 = isSymbolE($acc625112542, $list25112542[6])
334- if (($size25112542 == 7))
335- then $acc725112542
336- else {
337- let $acc825112542 = isSymbolE($acc725112542, $list25112542[7])
338- if (($size25112542 == 8))
339- then $acc825112542
340- else {
341- let $acc925112542 = isSymbolE($acc825112542, $list25112542[8])
342- throw("List size exceed 8")
343- }
344- }
345- }
346- }
347- }
348- }
349- }
350- }
351- }
352- }) + "E"))) + getAmountOrClear((toString({
353- let $list25792610 = genotype
354- let $size25792610 = size($list25792610)
355- let $acc025792610 = 0
356- if (($size25792610 == 0))
357- then $acc025792610
358- else {
359- let $acc125792610 = isSymbolF($acc025792610, $list25792610[0])
360- if (($size25792610 == 1))
361- then $acc125792610
362- else {
363- let $acc225792610 = isSymbolF($acc125792610, $list25792610[1])
364- if (($size25792610 == 2))
365- then $acc225792610
366- else {
367- let $acc325792610 = isSymbolF($acc225792610, $list25792610[2])
368- if (($size25792610 == 3))
369- then $acc325792610
370- else {
371- let $acc425792610 = isSymbolF($acc325792610, $list25792610[3])
372- if (($size25792610 == 4))
373- then $acc425792610
374- else {
375- let $acc525792610 = isSymbolF($acc425792610, $list25792610[4])
376- if (($size25792610 == 5))
377- then $acc525792610
378- else {
379- let $acc625792610 = isSymbolF($acc525792610, $list25792610[5])
380- if (($size25792610 == 6))
381- then $acc625792610
382- else {
383- let $acc725792610 = isSymbolF($acc625792610, $list25792610[6])
384- if (($size25792610 == 7))
385- then $acc725792610
386- else {
387- let $acc825792610 = isSymbolF($acc725792610, $list25792610[7])
388- if (($size25792610 == 8))
389- then $acc825792610
390- else {
391- let $acc925792610 = isSymbolF($acc825792610, $list25792610[8])
392- throw("List size exceed 8")
393- }
394- }
395- }
396- }
397- }
398- }
399- }
400- }
401- }
402- }) + "F"))) + getAmountOrClear((toString({
403- let $list26492680 = genotype
404- let $size26492680 = size($list26492680)
405- let $acc026492680 = 0
406- if (($size26492680 == 0))
407- then $acc026492680
408- else {
409- let $acc126492680 = isSymbolG($acc026492680, $list26492680[0])
410- if (($size26492680 == 1))
411- then $acc126492680
412- else {
413- let $acc226492680 = isSymbolG($acc126492680, $list26492680[1])
414- if (($size26492680 == 2))
415- then $acc226492680
416- else {
417- let $acc326492680 = isSymbolG($acc226492680, $list26492680[2])
418- if (($size26492680 == 3))
419- then $acc326492680
420- else {
421- let $acc426492680 = isSymbolG($acc326492680, $list26492680[3])
422- if (($size26492680 == 4))
423- then $acc426492680
424- else {
425- let $acc526492680 = isSymbolG($acc426492680, $list26492680[4])
426- if (($size26492680 == 5))
427- then $acc526492680
428- else {
429- let $acc626492680 = isSymbolG($acc526492680, $list26492680[5])
430- if (($size26492680 == 6))
431- then $acc626492680
432- else {
433- let $acc726492680 = isSymbolG($acc626492680, $list26492680[6])
434- if (($size26492680 == 7))
435- then $acc726492680
436- else {
437- let $acc826492680 = isSymbolG($acc726492680, $list26492680[7])
438- if (($size26492680 == 8))
439- then $acc826492680
440- else {
441- let $acc926492680 = isSymbolG($acc826492680, $list26492680[8])
442- throw("List size exceed 8")
443- }
444- }
445- }
446- }
447- }
448- }
449- }
450- }
451- }
452- }) + "G"))) + getAmountOrClear((toString({
453- let $list27172748 = genotype
454- let $size27172748 = size($list27172748)
455- let $acc027172748 = 0
456- if (($size27172748 == 0))
457- then $acc027172748
458- else {
459- let $acc127172748 = isSymbolH($acc027172748, $list27172748[0])
460- if (($size27172748 == 1))
461- then $acc127172748
462- else {
463- let $acc227172748 = isSymbolH($acc127172748, $list27172748[1])
464- if (($size27172748 == 2))
465- then $acc227172748
466- else {
467- let $acc327172748 = isSymbolH($acc227172748, $list27172748[2])
468- if (($size27172748 == 3))
469- then $acc327172748
470- else {
471- let $acc427172748 = isSymbolH($acc327172748, $list27172748[3])
472- if (($size27172748 == 4))
473- then $acc427172748
474- else {
475- let $acc527172748 = isSymbolH($acc427172748, $list27172748[4])
476- if (($size27172748 == 5))
477- then $acc527172748
478- else {
479- let $acc627172748 = isSymbolH($acc527172748, $list27172748[5])
480- if (($size27172748 == 6))
481- then $acc627172748
482- else {
483- let $acc727172748 = isSymbolH($acc627172748, $list27172748[6])
484- if (($size27172748 == 7))
485- then $acc727172748
486- else {
487- let $acc827172748 = isSymbolH($acc727172748, $list27172748[7])
488- if (($size27172748 == 8))
489- then $acc827172748
490- else {
491- let $acc927172748 = isSymbolH($acc827172748, $list27172748[8])
492- throw("List size exceed 8")
493- }
494- }
495- }
496- }
497- }
498- }
499- }
500- }
501- }
502- }) + "H")))
503- }
504-
505-
506-func getAssetOrigin (generation) = if ((generation == "G"))
507- then incubatorAddress
508- else breederAddress
509-
510-
511-func getAssetRarity (genotype,generation) = {
512- let quantity = getIntegerValue(Address(getAssetOrigin(generation)), (("stats_" + genotype) + "_quantity"))
513- let power = pow((10000 / quantity), 4, 5, 1, 2, FLOOR)
514- if ((power > 0))
515- then power
516- else 2
517- }
518-
519-
520-func getAssetFarmingPower (assetId) = if (if ((value(assetInfo(assetId)).issuer == Address(breederAddress)))
521- then true
522- else (value(assetInfo(assetId)).issuer == Address(incubatorAddress)))
523- then {
524- let assetName = value(assetInfo(assetId)).name
525- let generation = take(takeRight(assetName, 2), 1)
526- let gen = ((getGen(assetName) + "-") + generation)
527- $Tuple2(gen, getAssetRarity(gen, generation))
528- }
529- else throw("not valid NFT")
530-
531-
532-func getRandomNumber (options,txId,hatchingFinishHeight,offset) = {
533- let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
534- let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
535- (toInt(randomHash, (offset * 8)) % options)
536- }
537-
538-
539-func getRandomWin (tx,finishHeight,assetRarity) = {
540- let phoenixOptions = (PHOENIXBASEOPTIONS - fraction((PHOENIXBASEOPTIONS / 2), assetRarity, 100))
541- let phoenixRandom = getRandomNumber(phoenixOptions, tx, finishHeight, 1)
542- if ((phoenixRandom == 1))
543- then "phoenix"
544- else {
545- let n = getRandomNumber(10, tx, finishHeight, 0)
546- if ((3 > n))
547- then "gone"
548- else if ((5 > n))
549- then "duckling"
550- else if ((n == 5))
551- then "perch_Y"
552- else if ((n == 6))
553- then "perch_G"
554- else if ((n == 7))
555- then "perch_B"
556- else if ((n == 8))
557- then "perch_R"
558- else "incubator"
559- }
560- }
561-
562-
563-func getOrigin (assetId) = {
564- let assetName = value(assetInfo(assetId)).name
565- let generation = take(takeRight(assetName, 2), 1)
566- if (if ((generation == "G"))
567- then true
568- else (generation == "J"))
569- then incubatorAddress
570- else breederAddress
571- }
46+func getRefMultiplier (refererAddress) = if ((indexOf(ref20, refererAddress) != unit))
47+ then 4
48+ else 1
57249
57350
57451 @Callable(i)
575-func initRebirth () = if ((isLocked() > 0))
576- then throw("egg spendings are temporarily locked")
52+func addRefKey (refererAddress,refererKey) = if ((i.caller != this))
53+ then throw("admin only")
57754 else {
578- let assetId = value(i.payments[0].assetId)
579- let initTx = toBase58String(i.transactionId)
580- let address = toString(i.caller)
581- let feePayment = value(i.payments[1])
582- if ((feePayment.assetId != eggsAssetId))
583- then throw("You need to attach EGG tokens as fee")
584- else if ((feeAmount > feePayment.amount))
585- then throw(("You need to attach the following amount of EGG tokens as fee: 0." + toString(feeAmount)))
586- else {
587- let $t053675416 = getAssetFarmingPower(assetId)
588- let gen = $t053675416._1
589- let rarity = $t053675416._2
590- let call = invoke(Address(getOrigin(assetId)), "reduceRarity", [toBase58String(assetId), gen], nil)
591- if ((call == call))
592- 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))]
593- else throw("Strict value is not equal to itself.")
594- }
55+ let refStateKey = (("key_" + refererKey) + "_refererAddress")
56+ if ((tryGetString(refStateKey) == ""))
57+ then [StringEntry(refStateKey, refererAddress), StringEntry(((("address_" + refererAddress) + "_refererKey_") + refererKey), refererKey)]
58+ else throw((("The ref key \"" + refererKey) + "\" is already registered"))
59559 }
59660
59761
59862
59963 @Callable(i)
600-func finishRebirth (initTx) = {
601- let address = toString(i.caller)
602- let finishBlock = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"))
603- let assetRarity = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_assetRarity"))
604- let status = tryGetString((((("address_" + address) + "_initTx_") + initTx) + "_status"))
605- if ((status != "open"))
606- then throw("rebirth is finished or not open")
607- else if ((finishBlock > height))
608- then throw("you cannot finish rebirth, yet")
609- else {
610- let win = getRandomWin(fromBase58String(initTx), finishBlock, assetRarity)
611- let txId = toBase58String(i.transactionId)
612- let result = if ((indexOf(win, "perch") != unit))
613- then {
614- let color = takeRight(win, 1)
615- let call = invoke(Address(farmingAddress), "addFreePerch", [address, color], nil)
616- if ((call == call))
617- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
618- else throw("Strict value is not equal to itself.")
619- }
620- else if ((win == "incubator"))
621- then {
622- let call = invoke(Address(incubatorAddress), "issueFreeDuck", [address, txId], nil)
623- if ((call == call))
624- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
625- else throw("Strict value is not equal to itself.")
64+func refPayment (refererKey) = {
65+ let referalAddress = toString(i.originCaller)
66+ if (if ((i.caller.bytes != incubatorAddress))
67+ then (i.caller.bytes != farmingAddress)
68+ else false)
69+ then throw("This method can be called only by farming and incubator dApps")
70+ else if (if ((refererKey == ""))
71+ then (tryGetString((("address_" + referalAddress) + "_referedBy")) == "")
72+ else false)
73+ then nil
74+ else if (masterTryGetBoolean(("farm_" + referalAddress)))
75+ then nil
76+ else {
77+ let givenReferer = match getString(this, (("key_" + refererKey) + "_refererAddress")) {
78+ case x: String =>
79+ x
80+ case _ =>
81+ refererKey
82+ }
83+ let refererAddress = match getString(this, (("address_" + referalAddress) + "_referedBy")) {
84+ case x: String =>
85+ x
86+ case _ =>
87+ givenReferer
88+ }
89+ let refAmount = (i.payments[0].amount * getRefMultiplier(refererAddress))
90+ if ((addressFromString(refererAddress) == unit))
91+ then nil
92+ else {
93+ let refererAddressValue = addressFromStringValue(refererAddress)
94+ let referalAddressValue = addressFromStringValue(referalAddress)
95+ let paymentForReferer = refAmount
96+ let refererEarnedReward = (("address_" + refererAddress) + "_earnedReward")
97+ let referalDeliveredReward = (((("referer_" + refererAddress) + "_referal_") + referalAddress) + "_deliveredReward")
98+ if ((refererAddress == referalAddress))
99+ then nil
100+ else [StringEntry((("address_" + referalAddress) + "_referedBy"), refererAddress), IntegerEntry(refererEarnedReward, (tryGetInteger(refererEarnedReward) + paymentForReferer)), IntegerEntry(referalDeliveredReward, (tryGetInteger(referalDeliveredReward) + paymentForReferer)), IntegerEntry((((("referer_" + refererAddress) + "_referal_") + referalAddress) + "_amount"), (tryGetInteger((((("referer_" + refererAddress) + "_referal_") + referalAddress) + "_amount")) + 1)), ScriptTransfer(refererAddressValue, paymentForReferer, eggsAssetId)]
626101 }
627- else if ((win == "phoenix"))
628- then {
629- let call = invoke(Address(incubatorAddress), "issueJackpot", [address, txId, "WWWWWWWP"], nil)
630- if ((call == call))
631- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
632- else throw("Strict value is not equal to itself.")
633- }
634- else if ((win == "duckling"))
635- then {
636- let call = invoke(Address(ducklingAddress), "issueFreeDuckling", [address, txId], nil)
637- if ((call == call))
638- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
639- else throw("Strict value is not equal to itself.")
640- }
641- else [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), "")]
642- (result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish")])
643- }
102+ }
644103 }
645104
646105
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let eggsAssetId = base58'53bLXGQhnMxAoiWnza2SJQRp7hNQZVHnyrRziLmwdVjb'
55
6-let feeAmount = 50
6+let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv'
77
8-let delayForHatching = 0
8+let farmingAddress = base58'3PAETTtuW7aSiyKtn9GuML3RgtV1xdq1mQW'
99
10-let incubatorAddress = base58'3P6TwNU39Ykkbeqhn5TE4a2736xsA1vXemM'
10+let collectiveMasterAddress = base58'3PDktsxDVEcoobpEBJcausnKo4enhcWUDEF'
1111
12-let breederAddress = base58'3P9REuLBnYBafDqtEu6hfzs2Rv2haSU158y'
13-
14-let farmingAddress = base58'3PH75p2rmMKCV2nyW4TsAdFgFtmc61mJaqA'
15-
16-let ducklingAddress = base58'3PKwLVb8jYk58oYbfXxs2dUjD3YEKeqGWrX'
17-
18-let PHOENIXBASEOPTIONS = 1000
19-
20-func isLocked () = {
21- let masterAddress = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU')
22- match getInteger(masterAddress, "egglock") {
23- case b: Int =>
24- b
25- case _ =>
26- 0
27- }
28- }
29-
12+let ref20 = ["3PR66kMvUDE1QvYAg8r6e1xDX7QbnTV7JW5"]
3013
3114 func tryGetInteger (key) = match getInteger(this, key) {
3215 case b: Int =>
3316 b
3417 case _ =>
3518 0
3619 }
3720
3821
39-func asString (value) = match value {
40- case s: String =>
41- s
22+func masterTryGetBoolean (key) = match getBoolean(Address(collectiveMasterAddress), key) {
23+ case b: Boolean =>
24+ b
4225 case _ =>
43- throw("wrong type, expected: String")
26+ false
27+}
28+
29+
30+func isValidAddress (address) = match addressFromString(address) {
31+ case a: Address =>
32+ true
33+ case _ =>
34+ false
4435 }
4536
4637
4738 func tryGetString (key) = match getString(this, key) {
4839 case a: String =>
4940 a
5041 case _ =>
5142 ""
5243 }
5344
5445
55-func isSymbolA (accumulated,sym) = if ((sym == "A"))
56- then (accumulated + 1)
57- else (accumulated + 0)
58-
59-
60-func isSymbolB (accumulated,sym) = if ((sym == "B"))
61- then (accumulated + 1)
62- else (accumulated + 0)
63-
64-
65-func isSymbolC (accumulated,sym) = if ((sym == "C"))
66- then (accumulated + 1)
67- else (accumulated + 0)
68-
69-
70-func isSymbolD (accumulated,sym) = if ((sym == "D"))
71- then (accumulated + 1)
72- else (accumulated + 0)
73-
74-
75-func isSymbolE (accumulated,sym) = if ((sym == "E"))
76- then (accumulated + 1)
77- else (accumulated + 0)
78-
79-
80-func isSymbolF (accumulated,sym) = if ((sym == "F"))
81- then (accumulated + 1)
82- else (accumulated + 0)
83-
84-
85-func isSymbolG (accumulated,sym) = if ((sym == "G"))
86- then (accumulated + 1)
87- else (accumulated + 0)
88-
89-
90-func isSymbolH (accumulated,sym) = if ((sym == "H"))
91- then (accumulated + 1)
92- else (accumulated + 0)
93-
94-
95-func getAmountOrClear (amount) = if (contains(amount, "0"))
96- then ""
97- else amount
98-
99-
100-func getGen (assetName) = {
101- let genotype = split(dropRight(drop(assetName, 5), 3), "")
102- (((((((getAmountOrClear((toString({
103- let $list22372268 = genotype
104- let $size22372268 = size($list22372268)
105- let $acc022372268 = 0
106- if (($size22372268 == 0))
107- then $acc022372268
108- else {
109- let $acc122372268 = isSymbolA($acc022372268, $list22372268[0])
110- if (($size22372268 == 1))
111- then $acc122372268
112- else {
113- let $acc222372268 = isSymbolA($acc122372268, $list22372268[1])
114- if (($size22372268 == 2))
115- then $acc222372268
116- else {
117- let $acc322372268 = isSymbolA($acc222372268, $list22372268[2])
118- if (($size22372268 == 3))
119- then $acc322372268
120- else {
121- let $acc422372268 = isSymbolA($acc322372268, $list22372268[3])
122- if (($size22372268 == 4))
123- then $acc422372268
124- else {
125- let $acc522372268 = isSymbolA($acc422372268, $list22372268[4])
126- if (($size22372268 == 5))
127- then $acc522372268
128- else {
129- let $acc622372268 = isSymbolA($acc522372268, $list22372268[5])
130- if (($size22372268 == 6))
131- then $acc622372268
132- else {
133- let $acc722372268 = isSymbolA($acc622372268, $list22372268[6])
134- if (($size22372268 == 7))
135- then $acc722372268
136- else {
137- let $acc822372268 = isSymbolA($acc722372268, $list22372268[7])
138- if (($size22372268 == 8))
139- then $acc822372268
140- else {
141- let $acc922372268 = isSymbolA($acc822372268, $list22372268[8])
142- throw("List size exceed 8")
143- }
144- }
145- }
146- }
147- }
148- }
149- }
150- }
151- }
152- }) + "A")) + getAmountOrClear((toString({
153- let $list23052336 = genotype
154- let $size23052336 = size($list23052336)
155- let $acc023052336 = 0
156- if (($size23052336 == 0))
157- then $acc023052336
158- else {
159- let $acc123052336 = isSymbolB($acc023052336, $list23052336[0])
160- if (($size23052336 == 1))
161- then $acc123052336
162- else {
163- let $acc223052336 = isSymbolB($acc123052336, $list23052336[1])
164- if (($size23052336 == 2))
165- then $acc223052336
166- else {
167- let $acc323052336 = isSymbolB($acc223052336, $list23052336[2])
168- if (($size23052336 == 3))
169- then $acc323052336
170- else {
171- let $acc423052336 = isSymbolB($acc323052336, $list23052336[3])
172- if (($size23052336 == 4))
173- then $acc423052336
174- else {
175- let $acc523052336 = isSymbolB($acc423052336, $list23052336[4])
176- if (($size23052336 == 5))
177- then $acc523052336
178- else {
179- let $acc623052336 = isSymbolB($acc523052336, $list23052336[5])
180- if (($size23052336 == 6))
181- then $acc623052336
182- else {
183- let $acc723052336 = isSymbolB($acc623052336, $list23052336[6])
184- if (($size23052336 == 7))
185- then $acc723052336
186- else {
187- let $acc823052336 = isSymbolB($acc723052336, $list23052336[7])
188- if (($size23052336 == 8))
189- then $acc823052336
190- else {
191- let $acc923052336 = isSymbolB($acc823052336, $list23052336[8])
192- throw("List size exceed 8")
193- }
194- }
195- }
196- }
197- }
198- }
199- }
200- }
201- }
202- }) + "B"))) + getAmountOrClear((toString({
203- let $list23732404 = genotype
204- let $size23732404 = size($list23732404)
205- let $acc023732404 = 0
206- if (($size23732404 == 0))
207- then $acc023732404
208- else {
209- let $acc123732404 = isSymbolC($acc023732404, $list23732404[0])
210- if (($size23732404 == 1))
211- then $acc123732404
212- else {
213- let $acc223732404 = isSymbolC($acc123732404, $list23732404[1])
214- if (($size23732404 == 2))
215- then $acc223732404
216- else {
217- let $acc323732404 = isSymbolC($acc223732404, $list23732404[2])
218- if (($size23732404 == 3))
219- then $acc323732404
220- else {
221- let $acc423732404 = isSymbolC($acc323732404, $list23732404[3])
222- if (($size23732404 == 4))
223- then $acc423732404
224- else {
225- let $acc523732404 = isSymbolC($acc423732404, $list23732404[4])
226- if (($size23732404 == 5))
227- then $acc523732404
228- else {
229- let $acc623732404 = isSymbolC($acc523732404, $list23732404[5])
230- if (($size23732404 == 6))
231- then $acc623732404
232- else {
233- let $acc723732404 = isSymbolC($acc623732404, $list23732404[6])
234- if (($size23732404 == 7))
235- then $acc723732404
236- else {
237- let $acc823732404 = isSymbolC($acc723732404, $list23732404[7])
238- if (($size23732404 == 8))
239- then $acc823732404
240- else {
241- let $acc923732404 = isSymbolC($acc823732404, $list23732404[8])
242- throw("List size exceed 8")
243- }
244- }
245- }
246- }
247- }
248- }
249- }
250- }
251- }
252- }) + "C"))) + getAmountOrClear((toString({
253- let $list24432474 = genotype
254- let $size24432474 = size($list24432474)
255- let $acc024432474 = 0
256- if (($size24432474 == 0))
257- then $acc024432474
258- else {
259- let $acc124432474 = isSymbolD($acc024432474, $list24432474[0])
260- if (($size24432474 == 1))
261- then $acc124432474
262- else {
263- let $acc224432474 = isSymbolD($acc124432474, $list24432474[1])
264- if (($size24432474 == 2))
265- then $acc224432474
266- else {
267- let $acc324432474 = isSymbolD($acc224432474, $list24432474[2])
268- if (($size24432474 == 3))
269- then $acc324432474
270- else {
271- let $acc424432474 = isSymbolD($acc324432474, $list24432474[3])
272- if (($size24432474 == 4))
273- then $acc424432474
274- else {
275- let $acc524432474 = isSymbolD($acc424432474, $list24432474[4])
276- if (($size24432474 == 5))
277- then $acc524432474
278- else {
279- let $acc624432474 = isSymbolD($acc524432474, $list24432474[5])
280- if (($size24432474 == 6))
281- then $acc624432474
282- else {
283- let $acc724432474 = isSymbolD($acc624432474, $list24432474[6])
284- if (($size24432474 == 7))
285- then $acc724432474
286- else {
287- let $acc824432474 = isSymbolD($acc724432474, $list24432474[7])
288- if (($size24432474 == 8))
289- then $acc824432474
290- else {
291- let $acc924432474 = isSymbolD($acc824432474, $list24432474[8])
292- throw("List size exceed 8")
293- }
294- }
295- }
296- }
297- }
298- }
299- }
300- }
301- }
302- }) + "D"))) + getAmountOrClear((toString({
303- let $list25112542 = genotype
304- let $size25112542 = size($list25112542)
305- let $acc025112542 = 0
306- if (($size25112542 == 0))
307- then $acc025112542
308- else {
309- let $acc125112542 = isSymbolE($acc025112542, $list25112542[0])
310- if (($size25112542 == 1))
311- then $acc125112542
312- else {
313- let $acc225112542 = isSymbolE($acc125112542, $list25112542[1])
314- if (($size25112542 == 2))
315- then $acc225112542
316- else {
317- let $acc325112542 = isSymbolE($acc225112542, $list25112542[2])
318- if (($size25112542 == 3))
319- then $acc325112542
320- else {
321- let $acc425112542 = isSymbolE($acc325112542, $list25112542[3])
322- if (($size25112542 == 4))
323- then $acc425112542
324- else {
325- let $acc525112542 = isSymbolE($acc425112542, $list25112542[4])
326- if (($size25112542 == 5))
327- then $acc525112542
328- else {
329- let $acc625112542 = isSymbolE($acc525112542, $list25112542[5])
330- if (($size25112542 == 6))
331- then $acc625112542
332- else {
333- let $acc725112542 = isSymbolE($acc625112542, $list25112542[6])
334- if (($size25112542 == 7))
335- then $acc725112542
336- else {
337- let $acc825112542 = isSymbolE($acc725112542, $list25112542[7])
338- if (($size25112542 == 8))
339- then $acc825112542
340- else {
341- let $acc925112542 = isSymbolE($acc825112542, $list25112542[8])
342- throw("List size exceed 8")
343- }
344- }
345- }
346- }
347- }
348- }
349- }
350- }
351- }
352- }) + "E"))) + getAmountOrClear((toString({
353- let $list25792610 = genotype
354- let $size25792610 = size($list25792610)
355- let $acc025792610 = 0
356- if (($size25792610 == 0))
357- then $acc025792610
358- else {
359- let $acc125792610 = isSymbolF($acc025792610, $list25792610[0])
360- if (($size25792610 == 1))
361- then $acc125792610
362- else {
363- let $acc225792610 = isSymbolF($acc125792610, $list25792610[1])
364- if (($size25792610 == 2))
365- then $acc225792610
366- else {
367- let $acc325792610 = isSymbolF($acc225792610, $list25792610[2])
368- if (($size25792610 == 3))
369- then $acc325792610
370- else {
371- let $acc425792610 = isSymbolF($acc325792610, $list25792610[3])
372- if (($size25792610 == 4))
373- then $acc425792610
374- else {
375- let $acc525792610 = isSymbolF($acc425792610, $list25792610[4])
376- if (($size25792610 == 5))
377- then $acc525792610
378- else {
379- let $acc625792610 = isSymbolF($acc525792610, $list25792610[5])
380- if (($size25792610 == 6))
381- then $acc625792610
382- else {
383- let $acc725792610 = isSymbolF($acc625792610, $list25792610[6])
384- if (($size25792610 == 7))
385- then $acc725792610
386- else {
387- let $acc825792610 = isSymbolF($acc725792610, $list25792610[7])
388- if (($size25792610 == 8))
389- then $acc825792610
390- else {
391- let $acc925792610 = isSymbolF($acc825792610, $list25792610[8])
392- throw("List size exceed 8")
393- }
394- }
395- }
396- }
397- }
398- }
399- }
400- }
401- }
402- }) + "F"))) + getAmountOrClear((toString({
403- let $list26492680 = genotype
404- let $size26492680 = size($list26492680)
405- let $acc026492680 = 0
406- if (($size26492680 == 0))
407- then $acc026492680
408- else {
409- let $acc126492680 = isSymbolG($acc026492680, $list26492680[0])
410- if (($size26492680 == 1))
411- then $acc126492680
412- else {
413- let $acc226492680 = isSymbolG($acc126492680, $list26492680[1])
414- if (($size26492680 == 2))
415- then $acc226492680
416- else {
417- let $acc326492680 = isSymbolG($acc226492680, $list26492680[2])
418- if (($size26492680 == 3))
419- then $acc326492680
420- else {
421- let $acc426492680 = isSymbolG($acc326492680, $list26492680[3])
422- if (($size26492680 == 4))
423- then $acc426492680
424- else {
425- let $acc526492680 = isSymbolG($acc426492680, $list26492680[4])
426- if (($size26492680 == 5))
427- then $acc526492680
428- else {
429- let $acc626492680 = isSymbolG($acc526492680, $list26492680[5])
430- if (($size26492680 == 6))
431- then $acc626492680
432- else {
433- let $acc726492680 = isSymbolG($acc626492680, $list26492680[6])
434- if (($size26492680 == 7))
435- then $acc726492680
436- else {
437- let $acc826492680 = isSymbolG($acc726492680, $list26492680[7])
438- if (($size26492680 == 8))
439- then $acc826492680
440- else {
441- let $acc926492680 = isSymbolG($acc826492680, $list26492680[8])
442- throw("List size exceed 8")
443- }
444- }
445- }
446- }
447- }
448- }
449- }
450- }
451- }
452- }) + "G"))) + getAmountOrClear((toString({
453- let $list27172748 = genotype
454- let $size27172748 = size($list27172748)
455- let $acc027172748 = 0
456- if (($size27172748 == 0))
457- then $acc027172748
458- else {
459- let $acc127172748 = isSymbolH($acc027172748, $list27172748[0])
460- if (($size27172748 == 1))
461- then $acc127172748
462- else {
463- let $acc227172748 = isSymbolH($acc127172748, $list27172748[1])
464- if (($size27172748 == 2))
465- then $acc227172748
466- else {
467- let $acc327172748 = isSymbolH($acc227172748, $list27172748[2])
468- if (($size27172748 == 3))
469- then $acc327172748
470- else {
471- let $acc427172748 = isSymbolH($acc327172748, $list27172748[3])
472- if (($size27172748 == 4))
473- then $acc427172748
474- else {
475- let $acc527172748 = isSymbolH($acc427172748, $list27172748[4])
476- if (($size27172748 == 5))
477- then $acc527172748
478- else {
479- let $acc627172748 = isSymbolH($acc527172748, $list27172748[5])
480- if (($size27172748 == 6))
481- then $acc627172748
482- else {
483- let $acc727172748 = isSymbolH($acc627172748, $list27172748[6])
484- if (($size27172748 == 7))
485- then $acc727172748
486- else {
487- let $acc827172748 = isSymbolH($acc727172748, $list27172748[7])
488- if (($size27172748 == 8))
489- then $acc827172748
490- else {
491- let $acc927172748 = isSymbolH($acc827172748, $list27172748[8])
492- throw("List size exceed 8")
493- }
494- }
495- }
496- }
497- }
498- }
499- }
500- }
501- }
502- }) + "H")))
503- }
504-
505-
506-func getAssetOrigin (generation) = if ((generation == "G"))
507- then incubatorAddress
508- else breederAddress
509-
510-
511-func getAssetRarity (genotype,generation) = {
512- let quantity = getIntegerValue(Address(getAssetOrigin(generation)), (("stats_" + genotype) + "_quantity"))
513- let power = pow((10000 / quantity), 4, 5, 1, 2, FLOOR)
514- if ((power > 0))
515- then power
516- else 2
517- }
518-
519-
520-func getAssetFarmingPower (assetId) = if (if ((value(assetInfo(assetId)).issuer == Address(breederAddress)))
521- then true
522- else (value(assetInfo(assetId)).issuer == Address(incubatorAddress)))
523- then {
524- let assetName = value(assetInfo(assetId)).name
525- let generation = take(takeRight(assetName, 2), 1)
526- let gen = ((getGen(assetName) + "-") + generation)
527- $Tuple2(gen, getAssetRarity(gen, generation))
528- }
529- else throw("not valid NFT")
530-
531-
532-func getRandomNumber (options,txId,hatchingFinishHeight,offset) = {
533- let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
534- let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
535- (toInt(randomHash, (offset * 8)) % options)
536- }
537-
538-
539-func getRandomWin (tx,finishHeight,assetRarity) = {
540- let phoenixOptions = (PHOENIXBASEOPTIONS - fraction((PHOENIXBASEOPTIONS / 2), assetRarity, 100))
541- let phoenixRandom = getRandomNumber(phoenixOptions, tx, finishHeight, 1)
542- if ((phoenixRandom == 1))
543- then "phoenix"
544- else {
545- let n = getRandomNumber(10, tx, finishHeight, 0)
546- if ((3 > n))
547- then "gone"
548- else if ((5 > n))
549- then "duckling"
550- else if ((n == 5))
551- then "perch_Y"
552- else if ((n == 6))
553- then "perch_G"
554- else if ((n == 7))
555- then "perch_B"
556- else if ((n == 8))
557- then "perch_R"
558- else "incubator"
559- }
560- }
561-
562-
563-func getOrigin (assetId) = {
564- let assetName = value(assetInfo(assetId)).name
565- let generation = take(takeRight(assetName, 2), 1)
566- if (if ((generation == "G"))
567- then true
568- else (generation == "J"))
569- then incubatorAddress
570- else breederAddress
571- }
46+func getRefMultiplier (refererAddress) = if ((indexOf(ref20, refererAddress) != unit))
47+ then 4
48+ else 1
57249
57350
57451 @Callable(i)
575-func initRebirth () = if ((isLocked() > 0))
576- then throw("egg spendings are temporarily locked")
52+func addRefKey (refererAddress,refererKey) = if ((i.caller != this))
53+ then throw("admin only")
57754 else {
578- let assetId = value(i.payments[0].assetId)
579- let initTx = toBase58String(i.transactionId)
580- let address = toString(i.caller)
581- let feePayment = value(i.payments[1])
582- if ((feePayment.assetId != eggsAssetId))
583- then throw("You need to attach EGG tokens as fee")
584- else if ((feeAmount > feePayment.amount))
585- then throw(("You need to attach the following amount of EGG tokens as fee: 0." + toString(feeAmount)))
586- else {
587- let $t053675416 = getAssetFarmingPower(assetId)
588- let gen = $t053675416._1
589- let rarity = $t053675416._2
590- let call = invoke(Address(getOrigin(assetId)), "reduceRarity", [toBase58String(assetId), gen], nil)
591- if ((call == call))
592- 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))]
593- else throw("Strict value is not equal to itself.")
594- }
55+ let refStateKey = (("key_" + refererKey) + "_refererAddress")
56+ if ((tryGetString(refStateKey) == ""))
57+ then [StringEntry(refStateKey, refererAddress), StringEntry(((("address_" + refererAddress) + "_refererKey_") + refererKey), refererKey)]
58+ else throw((("The ref key \"" + refererKey) + "\" is already registered"))
59559 }
59660
59761
59862
59963 @Callable(i)
600-func finishRebirth (initTx) = {
601- let address = toString(i.caller)
602- let finishBlock = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_finishBlock"))
603- let assetRarity = tryGetInteger((((("address_" + address) + "_initTx_") + initTx) + "_assetRarity"))
604- let status = tryGetString((((("address_" + address) + "_initTx_") + initTx) + "_status"))
605- if ((status != "open"))
606- then throw("rebirth is finished or not open")
607- else if ((finishBlock > height))
608- then throw("you cannot finish rebirth, yet")
609- else {
610- let win = getRandomWin(fromBase58String(initTx), finishBlock, assetRarity)
611- let txId = toBase58String(i.transactionId)
612- let result = if ((indexOf(win, "perch") != unit))
613- then {
614- let color = takeRight(win, 1)
615- let call = invoke(Address(farmingAddress), "addFreePerch", [address, color], nil)
616- if ((call == call))
617- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
618- else throw("Strict value is not equal to itself.")
619- }
620- else if ((win == "incubator"))
621- then {
622- let call = invoke(Address(incubatorAddress), "issueFreeDuck", [address, txId], nil)
623- if ((call == call))
624- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
625- else throw("Strict value is not equal to itself.")
64+func refPayment (refererKey) = {
65+ let referalAddress = toString(i.originCaller)
66+ if (if ((i.caller.bytes != incubatorAddress))
67+ then (i.caller.bytes != farmingAddress)
68+ else false)
69+ then throw("This method can be called only by farming and incubator dApps")
70+ else if (if ((refererKey == ""))
71+ then (tryGetString((("address_" + referalAddress) + "_referedBy")) == "")
72+ else false)
73+ then nil
74+ else if (masterTryGetBoolean(("farm_" + referalAddress)))
75+ then nil
76+ else {
77+ let givenReferer = match getString(this, (("key_" + refererKey) + "_refererAddress")) {
78+ case x: String =>
79+ x
80+ case _ =>
81+ refererKey
82+ }
83+ let refererAddress = match getString(this, (("address_" + referalAddress) + "_referedBy")) {
84+ case x: String =>
85+ x
86+ case _ =>
87+ givenReferer
88+ }
89+ let refAmount = (i.payments[0].amount * getRefMultiplier(refererAddress))
90+ if ((addressFromString(refererAddress) == unit))
91+ then nil
92+ else {
93+ let refererAddressValue = addressFromStringValue(refererAddress)
94+ let referalAddressValue = addressFromStringValue(referalAddress)
95+ let paymentForReferer = refAmount
96+ let refererEarnedReward = (("address_" + refererAddress) + "_earnedReward")
97+ let referalDeliveredReward = (((("referer_" + refererAddress) + "_referal_") + referalAddress) + "_deliveredReward")
98+ if ((refererAddress == referalAddress))
99+ then nil
100+ else [StringEntry((("address_" + referalAddress) + "_referedBy"), refererAddress), IntegerEntry(refererEarnedReward, (tryGetInteger(refererEarnedReward) + paymentForReferer)), IntegerEntry(referalDeliveredReward, (tryGetInteger(referalDeliveredReward) + paymentForReferer)), IntegerEntry((((("referer_" + refererAddress) + "_referal_") + referalAddress) + "_amount"), (tryGetInteger((((("referer_" + refererAddress) + "_referal_") + referalAddress) + "_amount")) + 1)), ScriptTransfer(refererAddressValue, paymentForReferer, eggsAssetId)]
626101 }
627- else if ((win == "phoenix"))
628- then {
629- let call = invoke(Address(incubatorAddress), "issueJackpot", [address, txId, "WWWWWWWP"], nil)
630- if ((call == call))
631- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
632- else throw("Strict value is not equal to itself.")
633- }
634- else if ((win == "duckling"))
635- then {
636- let call = invoke(Address(ducklingAddress), "issueFreeDuckling", [address, txId], nil)
637- if ((call == call))
638- then [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), asString(call))]
639- else throw("Strict value is not equal to itself.")
640- }
641- else [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_result"), "")]
642- (result ++ [StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_win"), win), StringEntry((((("address_" + address) + "_initTx_") + initTx) + "_status"), "finish")])
643- }
102+ }
644103 }
645104
646105
647106 @Verifier(tx)
648107 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
649108

github/deemru/w8io/3ef1775 
63.09 ms