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:
Old | New | Differences | |
---|---|---|---|
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let eggsAssetId = base58'53bLXGQhnMxAoiWnza2SJQRp7hNQZVHnyrRziLmwdVjb' | |
5 | 5 | ||
6 | - | let | |
6 | + | let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv' | |
7 | 7 | ||
8 | - | let | |
8 | + | let farmingAddress = base58'3PAETTtuW7aSiyKtn9GuML3RgtV1xdq1mQW' | |
9 | 9 | ||
10 | - | let | |
10 | + | let collectiveMasterAddress = base58'3PDktsxDVEcoobpEBJcausnKo4enhcWUDEF' | |
11 | 11 | ||
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"] | |
30 | 13 | ||
31 | 14 | func tryGetInteger (key) = match getInteger(this, key) { | |
32 | 15 | case b: Int => | |
36 | 19 | } | |
37 | 20 | ||
38 | 21 | ||
39 | - | func | |
40 | - | case | |
41 | - | | |
22 | + | func masterTryGetBoolean (key) = match getBoolean(Address(collectiveMasterAddress), key) { | |
23 | + | case b: Boolean => | |
24 | + | b | |
42 | 25 | 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 | |
44 | 35 | } | |
45 | 36 | ||
46 | 37 | ||
52 | 43 | } | |
53 | 44 | ||
54 | 45 | ||
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 | |
572 | 49 | ||
573 | 50 | ||
574 | 51 | @Callable(i) | |
575 | - | func | |
576 | - | then throw(" | |
52 | + | func addRefKey (refererAddress,refererKey) = if ((i.caller != this)) | |
53 | + | then throw("admin only") | |
577 | 54 | 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")) | |
595 | 59 | } | |
596 | 60 | ||
597 | 61 | ||
598 | 62 | ||
599 | 63 | @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)] | |
626 | 101 | } | |
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 | + | } | |
644 | 103 | } | |
645 | 104 | ||
646 | 105 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let eggsAssetId = base58'53bLXGQhnMxAoiWnza2SJQRp7hNQZVHnyrRziLmwdVjb' | |
5 | 5 | ||
6 | - | let | |
6 | + | let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv' | |
7 | 7 | ||
8 | - | let | |
8 | + | let farmingAddress = base58'3PAETTtuW7aSiyKtn9GuML3RgtV1xdq1mQW' | |
9 | 9 | ||
10 | - | let | |
10 | + | let collectiveMasterAddress = base58'3PDktsxDVEcoobpEBJcausnKo4enhcWUDEF' | |
11 | 11 | ||
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"] | |
30 | 13 | ||
31 | 14 | func tryGetInteger (key) = match getInteger(this, key) { | |
32 | 15 | case b: Int => | |
33 | 16 | b | |
34 | 17 | case _ => | |
35 | 18 | 0 | |
36 | 19 | } | |
37 | 20 | ||
38 | 21 | ||
39 | - | func | |
40 | - | case | |
41 | - | | |
22 | + | func masterTryGetBoolean (key) = match getBoolean(Address(collectiveMasterAddress), key) { | |
23 | + | case b: Boolean => | |
24 | + | b | |
42 | 25 | 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 | |
44 | 35 | } | |
45 | 36 | ||
46 | 37 | ||
47 | 38 | func tryGetString (key) = match getString(this, key) { | |
48 | 39 | case a: String => | |
49 | 40 | a | |
50 | 41 | case _ => | |
51 | 42 | "" | |
52 | 43 | } | |
53 | 44 | ||
54 | 45 | ||
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 | |
572 | 49 | ||
573 | 50 | ||
574 | 51 | @Callable(i) | |
575 | - | func | |
576 | - | then throw(" | |
52 | + | func addRefKey (refererAddress,refererKey) = if ((i.caller != this)) | |
53 | + | then throw("admin only") | |
577 | 54 | 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")) | |
595 | 59 | } | |
596 | 60 | ||
597 | 61 | ||
598 | 62 | ||
599 | 63 | @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)] | |
626 | 101 | } | |
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 | + | } | |
644 | 103 | } | |
645 | 104 | ||
646 | 105 | ||
647 | 106 | @Verifier(tx) | |
648 | 107 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
649 | 108 |
github/deemru/w8io/3ef1775 63.09 ms ◑