tx · 4zrHKEhC3pguvoHM22y2ewmLzQVii38ejakZe9oTiYHy 3PAETTtuW7aSiyKtn9GuML3RgtV1xdq1mQW: -0.01400000 Waves 2021.10.21 17:32 [2821155] smart account 3PAETTtuW7aSiyKtn9GuML3RgtV1xdq1mQW > SELF 0.00000000 Waves
{ "type": 13, "id": "4zrHKEhC3pguvoHM22y2ewmLzQVii38ejakZe9oTiYHy", "fee": 1400000, "feeAssetId": null, "timestamp": 1634826793475, "version": 2, "chainId": 87, "sender": "3PAETTtuW7aSiyKtn9GuML3RgtV1xdq1mQW", "senderPublicKey": "DSNxHVyf38CbPoz2oSJ1b4FWqRvqFsAphCzdtrPeWPHa", "proofs": [ "4hR3MeUXRP3wsGMNNUE5cups7rqEsbxCss3pc36zFk354MTX6hLxMj3GfwFWY1QbAi1w5oGcb33BWXeWMLPTBBXV" ], "script": "base64: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AAECAAAAF3RvdGFsX2xhc3RDaGVja0ludGVyZXN0BAAAABZwcmV2aW91c0ludGVyZXN0SGVpZ2h0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAHXRvdGFsX2xhc3RDaGVja0ludGVyZXN0SGVpZ2h0BAAAABF0b3RhbEZhcm1pbmdQb3dlcgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABJ0b3RhbF9mYXJtaW5nUG93ZXIJAQAAAAxjYWxjSW50ZXJlc3QAAAADBQAAABBwcmV2aW91c0ludGVyZXN0BQAAABZwcmV2aW91c0ludGVyZXN0SGVpZ2h0BQAAABF0b3RhbEZhcm1pbmdQb3dlcgMJAQAAAAIhPQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAARdG90YWxfc3RhcnRIZWlnaHQAAAAAAAAAAAAJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAXdG90YWxfbGFzdENoZWNrSW50ZXJlc3QJAAACAAAAAQIAAAAcZmFybWluZyBpcyBub3QgbGF1bmNoZWQsIHlldAEAAAAUY2FsY0Fzc2V0UmV3YXJkRGVsdGEAAAADAAAAB2FkZHJlc3MAAAAHYXNzZXRJZAAAABFhc3NldEZhcm1pbmdQb3dlcgQAAAAWbGFzdENoZWNrQXNzZXRJbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAdhc3NldElkAgAAABJfbGFzdENoZWNrSW50ZXJlc3QEAAAAD2N1cnJlbnRJbnRlcmVzdAkBAAAAEmdldEN1cnJlbnRJbnRlcmVzdAAAAAAJAABoAAAAAgUAAAARYXNzZXRGYXJtaW5nUG93ZXIJAABlAAAAAgUAAAAPY3VycmVudEludGVyZXN0BQAAABZsYXN0Q2hlY2tBc3NldEludGVyZXN0AQAAABRhZGRBc3NldElkVG9HZW5FbnRyeQAAAAIAAAAHYXNzZXRJZAAAAAhhc3NldEdlbgQAAAAMY3VycmVudFZhbHVlCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAAB2Fzc2V0c18FAAAACGFzc2V0R2VuAgAAAAdfbG9ja2VkAwkAAAAAAAACBQAAAAxjdXJyZW50VmFsdWUCAAAAAAUAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAIFAAAADGN1cnJlbnRWYWx1ZQIAAAABLAUAAAAHYXNzZXRJZAEAAAAOZ2V0U3Rha2VSZXN1bHQAAAADAAAAB2FkZHJlc3MAAAAHYXNzZXRJZAAAABFhc3NldEZhcm1pbmdQb3dlcgQAAAAFYXNzZXQJAAJYAAAAAQUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAASdG90YWxfZmFybWluZ1Bvd2VyCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAASdG90YWxfZmFybWluZ1Bvd2VyBQAAABFhc3NldEZhcm1pbmdQb3dlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAXdG90YWxfbGFzdENoZWNrSW50ZXJlc3QJAQAAABJnZXRDdXJyZW50SW50ZXJlc3QAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAB10b3RhbF9sYXN0Q2hlY2tJbnRlcmVzdEhlaWdodAUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAANX2Zhcm1pbmdQb3dlcgUAAAARYXNzZXRGYXJtaW5nUG93ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAABJfbGFzdENoZWNrSW50ZXJlc3QJAQAAABJnZXRDdXJyZW50SW50ZXJlc3QAAAAABQAAAANuaWwBAAAAEGdldFVuc3Rha2VSZXN1bHQAAAAFAAAAB2FkZHJlc3MAAAAHYXNzZXRJZAAAAAtyZXdhcmREZWx0YQAAAA93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b25lIG9mIHRoZSBEdWNrc3F1aWQgZ2FtZXMhIEFzIHlvdSBhbHJlYWR5IGtub3csIGFueSBsb3NzIGhhcyBpdHMgY29uc2VxdWVuY2VzLCBzbyB5b3Ugd2lsbCBiZSBub3QgYWJsZSB0byBjbGFpbSB5b3VyIGZhcm1pbmcgcmV3YXJkcyB0aWxsIHRoZSBlbmQgb2YgRHVja1NxdWlkIGdhbWUuIFF1YWNrIGluIHBlYWNlIQMJAABmAAAAAgkBAAAACGlzTG9ja2VkAAAAAAAAAAAAAAAAAAkAAAIAAAABAgAAACVFR0cgb3BlcmF0aW9ucyBhcmUgdGVtcG9yYXJpbHkgbG9ja2VkBAAAAAdhc3NldElkCQACWQAAAAEFAAAABWFzc2V0BAAAAAdhZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAARYXNzZXRGYXJtaW5nUG93ZXIJAQAAAB1nZXRMYXN0S25vd25Bc3NldEZhcm1pbmdQb3dlcgAAAAIFAAAAB2FkZHJlc3MFAAAABWFzc2V0BAAAABBhc3NldFJld2FyZERlbHRhCQEAAAAUY2FsY0Fzc2V0UmV3YXJkRGVsdGEAAAADBQAAAAdhZGRyZXNzBQAAAAVhc3NldAUAAAARYXNzZXRGYXJtaW5nUG93ZXIEAAAADGZhcm1lZEFtb3VudAkAAGQAAAACBQAAABBhc3NldFJld2FyZERlbHRhCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAABZfbGFzdENoZWNrRmFybWVkQW1vdW50BAAAAA93aXRoZHJhd25BbW91bnQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAAEF93aXRoZHJhd25BbW91bnQEAAAABnJld2FyZAkAAGkAAAACCQAAZQAAAAIFAAAADGZhcm1lZEFtb3VudAUAAAAPd2l0aGRyYXduQW1vdW50CQAAaAAA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", "height": 2821155, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8jPVf2SF8jn4NJavWYkQSTk4czHXcqedm98tRe6znmkn Next: 4ggovozEjvDfcpf16o7AQUrJBeXdnCG5SU5Bcb326vDY Diff:
Old | New | Differences | |
---|---|---|---|
51 | 51 | } | |
52 | 52 | ||
53 | 53 | ||
54 | + | func isUserBlacklisted (address) = { | |
55 | + | let k = getBoolean(Address(base58'3PAHCfc8ZAwJ26bB32YK6ZNVTVBpgVnGTNc'), (("locked_" + address) + "_status")) | |
56 | + | match k { | |
57 | + | case k: Boolean => | |
58 | + | k | |
59 | + | case _ => | |
60 | + | false | |
61 | + | } | |
62 | + | } | |
63 | + | ||
64 | + | ||
54 | 65 | func isSymbolA (accumulated,sym) = if ((sym == "A")) | |
55 | 66 | then (accumulated + 1) | |
56 | 67 | else (accumulated + 0) | |
99 | 110 | func getGen (assetName) = { | |
100 | 111 | let genotype = split(dropRight(drop(assetName, 5), 3), "") | |
101 | 112 | (((((((getAmountOrClear((toString({ | |
102 | - | let $list22212252 = genotype | |
103 | - | let $size22212252 = size($list22212252) | |
104 | - | let $acc022212252 = 0 | |
105 | - | if (($size22212252 == 0)) | |
106 | - | then $acc022212252 | |
107 | - | else { | |
108 | - | let $acc122212252 = isSymbolA($acc022212252, $list22212252[0]) | |
109 | - | if (($size22212252 == 1)) | |
110 | - | then $acc122212252 | |
111 | - | else { | |
112 | - | let $acc222212252 = isSymbolA($acc122212252, $list22212252[1]) | |
113 | - | if (($size22212252 == 2)) | |
114 | - | then $acc222212252 | |
115 | - | else { | |
116 | - | let $acc322212252 = isSymbolA($acc222212252, $list22212252[2]) | |
117 | - | if (($size22212252 == 3)) | |
118 | - | then $acc322212252 | |
119 | - | else { | |
120 | - | let $acc422212252 = isSymbolA($acc322212252, $list22212252[3]) | |
121 | - | if (($size22212252 == 4)) | |
122 | - | then $acc422212252 | |
123 | - | else { | |
124 | - | let $acc522212252 = isSymbolA($acc422212252, $list22212252[4]) | |
125 | - | if (($size22212252 == 5)) | |
126 | - | then $acc522212252 | |
127 | - | else { | |
128 | - | let $acc622212252 = isSymbolA($acc522212252, $list22212252[5]) | |
129 | - | if (($size22212252 == 6)) | |
130 | - | then $acc622212252 | |
131 | - | else { | |
132 | - | let $acc722212252 = isSymbolA($acc622212252, $list22212252[6]) | |
133 | - | if (($size22212252 == 7)) | |
134 | - | then $acc722212252 | |
135 | - | else { | |
136 | - | let $acc822212252 = isSymbolA($acc722212252, $list22212252[7]) | |
137 | - | if (($size22212252 == 8)) | |
138 | - | then $acc822212252 | |
139 | - | else { | |
140 | - | let $acc922212252 = isSymbolA($acc822212252, $list22212252[8]) | |
141 | - | throw("List size exceed 8") | |
142 | - | } | |
143 | - | } | |
144 | - | } | |
145 | - | } | |
146 | - | } | |
147 | - | } | |
148 | - | } | |
149 | - | } | |
150 | - | } | |
113 | + | let $l = genotype | |
114 | + | let $s = size($l) | |
115 | + | let $acc0 = 0 | |
116 | + | func 1 ($a,$i) = if (($i >= $s)) | |
117 | + | then $a | |
118 | + | else isSymbolA($a, $l[$i]) | |
119 | + | ||
120 | + | func 2 ($a,$i) = if (($i >= $s)) | |
121 | + | then $a | |
122 | + | else throw("List size exceeds 8") | |
123 | + | ||
124 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
151 | 125 | }) + "A")) + getAmountOrClear((toString({ | |
152 | - | let $list22892320 = genotype | |
153 | - | let $size22892320 = size($list22892320) | |
154 | - | let $acc022892320 = 0 | |
155 | - | if (($size22892320 == 0)) | |
156 | - | then $acc022892320 | |
157 | - | else { | |
158 | - | let $acc122892320 = isSymbolB($acc022892320, $list22892320[0]) | |
159 | - | if (($size22892320 == 1)) | |
160 | - | then $acc122892320 | |
161 | - | else { | |
162 | - | let $acc222892320 = isSymbolB($acc122892320, $list22892320[1]) | |
163 | - | if (($size22892320 == 2)) | |
164 | - | then $acc222892320 | |
165 | - | else { | |
166 | - | let $acc322892320 = isSymbolB($acc222892320, $list22892320[2]) | |
167 | - | if (($size22892320 == 3)) | |
168 | - | then $acc322892320 | |
169 | - | else { | |
170 | - | let $acc422892320 = isSymbolB($acc322892320, $list22892320[3]) | |
171 | - | if (($size22892320 == 4)) | |
172 | - | then $acc422892320 | |
173 | - | else { | |
174 | - | let $acc522892320 = isSymbolB($acc422892320, $list22892320[4]) | |
175 | - | if (($size22892320 == 5)) | |
176 | - | then $acc522892320 | |
177 | - | else { | |
178 | - | let $acc622892320 = isSymbolB($acc522892320, $list22892320[5]) | |
179 | - | if (($size22892320 == 6)) | |
180 | - | then $acc622892320 | |
181 | - | else { | |
182 | - | let $acc722892320 = isSymbolB($acc622892320, $list22892320[6]) | |
183 | - | if (($size22892320 == 7)) | |
184 | - | then $acc722892320 | |
185 | - | else { | |
186 | - | let $acc822892320 = isSymbolB($acc722892320, $list22892320[7]) | |
187 | - | if (($size22892320 == 8)) | |
188 | - | then $acc822892320 | |
189 | - | else { | |
190 | - | let $acc922892320 = isSymbolB($acc822892320, $list22892320[8]) | |
191 | - | throw("List size exceed 8") | |
192 | - | } | |
193 | - | } | |
194 | - | } | |
195 | - | } | |
196 | - | } | |
197 | - | } | |
198 | - | } | |
199 | - | } | |
200 | - | } | |
126 | + | let $l = genotype | |
127 | + | let $s = size($l) | |
128 | + | let $acc0 = 0 | |
129 | + | func 1 ($a,$i) = if (($i >= $s)) | |
130 | + | then $a | |
131 | + | else isSymbolB($a, $l[$i]) | |
132 | + | ||
133 | + | func 2 ($a,$i) = if (($i >= $s)) | |
134 | + | then $a | |
135 | + | else throw("List size exceeds 8") | |
136 | + | ||
137 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
201 | 138 | }) + "B"))) + getAmountOrClear((toString({ | |
202 | - | let $list23572388 = genotype | |
203 | - | let $size23572388 = size($list23572388) | |
204 | - | let $acc023572388 = 0 | |
205 | - | if (($size23572388 == 0)) | |
206 | - | then $acc023572388 | |
207 | - | else { | |
208 | - | let $acc123572388 = isSymbolC($acc023572388, $list23572388[0]) | |
209 | - | if (($size23572388 == 1)) | |
210 | - | then $acc123572388 | |
211 | - | else { | |
212 | - | let $acc223572388 = isSymbolC($acc123572388, $list23572388[1]) | |
213 | - | if (($size23572388 == 2)) | |
214 | - | then $acc223572388 | |
215 | - | else { | |
216 | - | let $acc323572388 = isSymbolC($acc223572388, $list23572388[2]) | |
217 | - | if (($size23572388 == 3)) | |
218 | - | then $acc323572388 | |
219 | - | else { | |
220 | - | let $acc423572388 = isSymbolC($acc323572388, $list23572388[3]) | |
221 | - | if (($size23572388 == 4)) | |
222 | - | then $acc423572388 | |
223 | - | else { | |
224 | - | let $acc523572388 = isSymbolC($acc423572388, $list23572388[4]) | |
225 | - | if (($size23572388 == 5)) | |
226 | - | then $acc523572388 | |
227 | - | else { | |
228 | - | let $acc623572388 = isSymbolC($acc523572388, $list23572388[5]) | |
229 | - | if (($size23572388 == 6)) | |
230 | - | then $acc623572388 | |
231 | - | else { | |
232 | - | let $acc723572388 = isSymbolC($acc623572388, $list23572388[6]) | |
233 | - | if (($size23572388 == 7)) | |
234 | - | then $acc723572388 | |
235 | - | else { | |
236 | - | let $acc823572388 = isSymbolC($acc723572388, $list23572388[7]) | |
237 | - | if (($size23572388 == 8)) | |
238 | - | then $acc823572388 | |
239 | - | else { | |
240 | - | let $acc923572388 = isSymbolC($acc823572388, $list23572388[8]) | |
241 | - | throw("List size exceed 8") | |
242 | - | } | |
243 | - | } | |
244 | - | } | |
245 | - | } | |
246 | - | } | |
247 | - | } | |
248 | - | } | |
249 | - | } | |
250 | - | } | |
139 | + | let $l = genotype | |
140 | + | let $s = size($l) | |
141 | + | let $acc0 = 0 | |
142 | + | func 1 ($a,$i) = if (($i >= $s)) | |
143 | + | then $a | |
144 | + | else isSymbolC($a, $l[$i]) | |
145 | + | ||
146 | + | func 2 ($a,$i) = if (($i >= $s)) | |
147 | + | then $a | |
148 | + | else throw("List size exceeds 8") | |
149 | + | ||
150 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
251 | 151 | }) + "C"))) + getAmountOrClear((toString({ | |
252 | - | let $list24272458 = genotype | |
253 | - | let $size24272458 = size($list24272458) | |
254 | - | let $acc024272458 = 0 | |
255 | - | if (($size24272458 == 0)) | |
256 | - | then $acc024272458 | |
257 | - | else { | |
258 | - | let $acc124272458 = isSymbolD($acc024272458, $list24272458[0]) | |
259 | - | if (($size24272458 == 1)) | |
260 | - | then $acc124272458 | |
261 | - | else { | |
262 | - | let $acc224272458 = isSymbolD($acc124272458, $list24272458[1]) | |
263 | - | if (($size24272458 == 2)) | |
264 | - | then $acc224272458 | |
265 | - | else { | |
266 | - | let $acc324272458 = isSymbolD($acc224272458, $list24272458[2]) | |
267 | - | if (($size24272458 == 3)) | |
268 | - | then $acc324272458 | |
269 | - | else { | |
270 | - | let $acc424272458 = isSymbolD($acc324272458, $list24272458[3]) | |
271 | - | if (($size24272458 == 4)) | |
272 | - | then $acc424272458 | |
273 | - | else { | |
274 | - | let $acc524272458 = isSymbolD($acc424272458, $list24272458[4]) | |
275 | - | if (($size24272458 == 5)) | |
276 | - | then $acc524272458 | |
277 | - | else { | |
278 | - | let $acc624272458 = isSymbolD($acc524272458, $list24272458[5]) | |
279 | - | if (($size24272458 == 6)) | |
280 | - | then $acc624272458 | |
281 | - | else { | |
282 | - | let $acc724272458 = isSymbolD($acc624272458, $list24272458[6]) | |
283 | - | if (($size24272458 == 7)) | |
284 | - | then $acc724272458 | |
285 | - | else { | |
286 | - | let $acc824272458 = isSymbolD($acc724272458, $list24272458[7]) | |
287 | - | if (($size24272458 == 8)) | |
288 | - | then $acc824272458 | |
289 | - | else { | |
290 | - | let $acc924272458 = isSymbolD($acc824272458, $list24272458[8]) | |
291 | - | throw("List size exceed 8") | |
292 | - | } | |
293 | - | } | |
294 | - | } | |
295 | - | } | |
296 | - | } | |
297 | - | } | |
298 | - | } | |
299 | - | } | |
300 | - | } | |
152 | + | let $l = genotype | |
153 | + | let $s = size($l) | |
154 | + | let $acc0 = 0 | |
155 | + | func 1 ($a,$i) = if (($i >= $s)) | |
156 | + | then $a | |
157 | + | else isSymbolD($a, $l[$i]) | |
158 | + | ||
159 | + | func 2 ($a,$i) = if (($i >= $s)) | |
160 | + | then $a | |
161 | + | else throw("List size exceeds 8") | |
162 | + | ||
163 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
301 | 164 | }) + "D"))) + getAmountOrClear((toString({ | |
302 | - | let $list24952526 = genotype | |
303 | - | let $size24952526 = size($list24952526) | |
304 | - | let $acc024952526 = 0 | |
305 | - | if (($size24952526 == 0)) | |
306 | - | then $acc024952526 | |
307 | - | else { | |
308 | - | let $acc124952526 = isSymbolE($acc024952526, $list24952526[0]) | |
309 | - | if (($size24952526 == 1)) | |
310 | - | then $acc124952526 | |
311 | - | else { | |
312 | - | let $acc224952526 = isSymbolE($acc124952526, $list24952526[1]) | |
313 | - | if (($size24952526 == 2)) | |
314 | - | then $acc224952526 | |
315 | - | else { | |
316 | - | let $acc324952526 = isSymbolE($acc224952526, $list24952526[2]) | |
317 | - | if (($size24952526 == 3)) | |
318 | - | then $acc324952526 | |
319 | - | else { | |
320 | - | let $acc424952526 = isSymbolE($acc324952526, $list24952526[3]) | |
321 | - | if (($size24952526 == 4)) | |
322 | - | then $acc424952526 | |
323 | - | else { | |
324 | - | let $acc524952526 = isSymbolE($acc424952526, $list24952526[4]) | |
325 | - | if (($size24952526 == 5)) | |
326 | - | then $acc524952526 | |
327 | - | else { | |
328 | - | let $acc624952526 = isSymbolE($acc524952526, $list24952526[5]) | |
329 | - | if (($size24952526 == 6)) | |
330 | - | then $acc624952526 | |
331 | - | else { | |
332 | - | let $acc724952526 = isSymbolE($acc624952526, $list24952526[6]) | |
333 | - | if (($size24952526 == 7)) | |
334 | - | then $acc724952526 | |
335 | - | else { | |
336 | - | let $acc824952526 = isSymbolE($acc724952526, $list24952526[7]) | |
337 | - | if (($size24952526 == 8)) | |
338 | - | then $acc824952526 | |
339 | - | else { | |
340 | - | let $acc924952526 = isSymbolE($acc824952526, $list24952526[8]) | |
341 | - | throw("List size exceed 8") | |
342 | - | } | |
343 | - | } | |
344 | - | } | |
345 | - | } | |
346 | - | } | |
347 | - | } | |
348 | - | } | |
349 | - | } | |
350 | - | } | |
165 | + | let $l = genotype | |
166 | + | let $s = size($l) | |
167 | + | let $acc0 = 0 | |
168 | + | func 1 ($a,$i) = if (($i >= $s)) | |
169 | + | then $a | |
170 | + | else isSymbolE($a, $l[$i]) | |
171 | + | ||
172 | + | func 2 ($a,$i) = if (($i >= $s)) | |
173 | + | then $a | |
174 | + | else throw("List size exceeds 8") | |
175 | + | ||
176 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
351 | 177 | }) + "E"))) + getAmountOrClear((toString({ | |
352 | - | let $list25632594 = genotype | |
353 | - | let $size25632594 = size($list25632594) | |
354 | - | let $acc025632594 = 0 | |
355 | - | if (($size25632594 == 0)) | |
356 | - | then $acc025632594 | |
357 | - | else { | |
358 | - | let $acc125632594 = isSymbolF($acc025632594, $list25632594[0]) | |
359 | - | if (($size25632594 == 1)) | |
360 | - | then $acc125632594 | |
361 | - | else { | |
362 | - | let $acc225632594 = isSymbolF($acc125632594, $list25632594[1]) | |
363 | - | if (($size25632594 == 2)) | |
364 | - | then $acc225632594 | |
365 | - | else { | |
366 | - | let $acc325632594 = isSymbolF($acc225632594, $list25632594[2]) | |
367 | - | if (($size25632594 == 3)) | |
368 | - | then $acc325632594 | |
369 | - | else { | |
370 | - | let $acc425632594 = isSymbolF($acc325632594, $list25632594[3]) | |
371 | - | if (($size25632594 == 4)) | |
372 | - | then $acc425632594 | |
373 | - | else { | |
374 | - | let $acc525632594 = isSymbolF($acc425632594, $list25632594[4]) | |
375 | - | if (($size25632594 == 5)) | |
376 | - | then $acc525632594 | |
377 | - | else { | |
378 | - | let $acc625632594 = isSymbolF($acc525632594, $list25632594[5]) | |
379 | - | if (($size25632594 == 6)) | |
380 | - | then $acc625632594 | |
381 | - | else { | |
382 | - | let $acc725632594 = isSymbolF($acc625632594, $list25632594[6]) | |
383 | - | if (($size25632594 == 7)) | |
384 | - | then $acc725632594 | |
385 | - | else { | |
386 | - | let $acc825632594 = isSymbolF($acc725632594, $list25632594[7]) | |
387 | - | if (($size25632594 == 8)) | |
388 | - | then $acc825632594 | |
389 | - | else { | |
390 | - | let $acc925632594 = isSymbolF($acc825632594, $list25632594[8]) | |
391 | - | throw("List size exceed 8") | |
392 | - | } | |
393 | - | } | |
394 | - | } | |
395 | - | } | |
396 | - | } | |
397 | - | } | |
398 | - | } | |
399 | - | } | |
400 | - | } | |
178 | + | let $l = genotype | |
179 | + | let $s = size($l) | |
180 | + | let $acc0 = 0 | |
181 | + | func 1 ($a,$i) = if (($i >= $s)) | |
182 | + | then $a | |
183 | + | else isSymbolF($a, $l[$i]) | |
184 | + | ||
185 | + | func 2 ($a,$i) = if (($i >= $s)) | |
186 | + | then $a | |
187 | + | else throw("List size exceeds 8") | |
188 | + | ||
189 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
401 | 190 | }) + "F"))) + getAmountOrClear((toString({ | |
402 | - | let $list26332664 = genotype | |
403 | - | let $size26332664 = size($list26332664) | |
404 | - | let $acc026332664 = 0 | |
405 | - | if (($size26332664 == 0)) | |
406 | - | then $acc026332664 | |
407 | - | else { | |
408 | - | let $acc126332664 = isSymbolG($acc026332664, $list26332664[0]) | |
409 | - | if (($size26332664 == 1)) | |
410 | - | then $acc126332664 | |
411 | - | else { | |
412 | - | let $acc226332664 = isSymbolG($acc126332664, $list26332664[1]) | |
413 | - | if (($size26332664 == 2)) | |
414 | - | then $acc226332664 | |
415 | - | else { | |
416 | - | let $acc326332664 = isSymbolG($acc226332664, $list26332664[2]) | |
417 | - | if (($size26332664 == 3)) | |
418 | - | then $acc326332664 | |
419 | - | else { | |
420 | - | let $acc426332664 = isSymbolG($acc326332664, $list26332664[3]) | |
421 | - | if (($size26332664 == 4)) | |
422 | - | then $acc426332664 | |
423 | - | else { | |
424 | - | let $acc526332664 = isSymbolG($acc426332664, $list26332664[4]) | |
425 | - | if (($size26332664 == 5)) | |
426 | - | then $acc526332664 | |
427 | - | else { | |
428 | - | let $acc626332664 = isSymbolG($acc526332664, $list26332664[5]) | |
429 | - | if (($size26332664 == 6)) | |
430 | - | then $acc626332664 | |
431 | - | else { | |
432 | - | let $acc726332664 = isSymbolG($acc626332664, $list26332664[6]) | |
433 | - | if (($size26332664 == 7)) | |
434 | - | then $acc726332664 | |
435 | - | else { | |
436 | - | let $acc826332664 = isSymbolG($acc726332664, $list26332664[7]) | |
437 | - | if (($size26332664 == 8)) | |
438 | - | then $acc826332664 | |
439 | - | else { | |
440 | - | let $acc926332664 = isSymbolG($acc826332664, $list26332664[8]) | |
441 | - | throw("List size exceed 8") | |
442 | - | } | |
443 | - | } | |
444 | - | } | |
445 | - | } | |
446 | - | } | |
447 | - | } | |
448 | - | } | |
449 | - | } | |
450 | - | } | |
191 | + | let $l = genotype | |
192 | + | let $s = size($l) | |
193 | + | let $acc0 = 0 | |
194 | + | func 1 ($a,$i) = if (($i >= $s)) | |
195 | + | then $a | |
196 | + | else isSymbolG($a, $l[$i]) | |
197 | + | ||
198 | + | func 2 ($a,$i) = if (($i >= $s)) | |
199 | + | then $a | |
200 | + | else throw("List size exceeds 8") | |
201 | + | ||
202 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
451 | 203 | }) + "G"))) + getAmountOrClear((toString({ | |
452 | - | let $list27012732 = genotype | |
453 | - | let $size27012732 = size($list27012732) | |
454 | - | let $acc027012732 = 0 | |
455 | - | if (($size27012732 == 0)) | |
456 | - | then $acc027012732 | |
457 | - | else { | |
458 | - | let $acc127012732 = isSymbolH($acc027012732, $list27012732[0]) | |
459 | - | if (($size27012732 == 1)) | |
460 | - | then $acc127012732 | |
461 | - | else { | |
462 | - | let $acc227012732 = isSymbolH($acc127012732, $list27012732[1]) | |
463 | - | if (($size27012732 == 2)) | |
464 | - | then $acc227012732 | |
465 | - | else { | |
466 | - | let $acc327012732 = isSymbolH($acc227012732, $list27012732[2]) | |
467 | - | if (($size27012732 == 3)) | |
468 | - | then $acc327012732 | |
469 | - | else { | |
470 | - | let $acc427012732 = isSymbolH($acc327012732, $list27012732[3]) | |
471 | - | if (($size27012732 == 4)) | |
472 | - | then $acc427012732 | |
473 | - | else { | |
474 | - | let $acc527012732 = isSymbolH($acc427012732, $list27012732[4]) | |
475 | - | if (($size27012732 == 5)) | |
476 | - | then $acc527012732 | |
477 | - | else { | |
478 | - | let $acc627012732 = isSymbolH($acc527012732, $list27012732[5]) | |
479 | - | if (($size27012732 == 6)) | |
480 | - | then $acc627012732 | |
481 | - | else { | |
482 | - | let $acc727012732 = isSymbolH($acc627012732, $list27012732[6]) | |
483 | - | if (($size27012732 == 7)) | |
484 | - | then $acc727012732 | |
485 | - | else { | |
486 | - | let $acc827012732 = isSymbolH($acc727012732, $list27012732[7]) | |
487 | - | if (($size27012732 == 8)) | |
488 | - | then $acc827012732 | |
489 | - | else { | |
490 | - | let $acc927012732 = isSymbolH($acc827012732, $list27012732[8]) | |
491 | - | throw("List size exceed 8") | |
492 | - | } | |
493 | - | } | |
494 | - | } | |
495 | - | } | |
496 | - | } | |
497 | - | } | |
498 | - | } | |
499 | - | } | |
500 | - | } | |
204 | + | let $l = genotype | |
205 | + | let $s = size($l) | |
206 | + | let $acc0 = 0 | |
207 | + | func 1 ($a,$i) = if (($i >= $s)) | |
208 | + | then $a | |
209 | + | else isSymbolH($a, $l[$i]) | |
210 | + | ||
211 | + | func 2 ($a,$i) = if (($i >= $s)) | |
212 | + | then $a | |
213 | + | else throw("List size exceeds 8") | |
214 | + | ||
215 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
501 | 216 | }) + "H"))) | |
502 | 217 | } | |
503 | 218 | ||
640 | 355 | if ((0 >= availablePerches)) | |
641 | 356 | then throw(("no perches available for the color " + color)) | |
642 | 357 | else { | |
643 | - | let $ | |
644 | - | let assetGen = $ | |
645 | - | let assetFarmingPower = $ | |
358 | + | let $t092029267 = getAssetFarmingPower(assetId) | |
359 | + | let assetGen = $t092029267._1 | |
360 | + | let assetFarmingPower = $t092029267._2 | |
646 | 361 | let assetRewardDelta = calcAssetRewardDelta(address, toBase58String(assetId), assetFarmingPower) | |
647 | 362 | (getStakeResult(address, assetId, assetFarmingPower) ++ [IntegerEntry(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color), (availablePerches - 1))]) | |
648 | 363 | } | |
651 | 366 | ||
652 | 367 | ||
653 | 368 | @Callable(i) | |
654 | - | func unstakeNFT (asset) = if ((isLocked() > 0)) | |
655 | - | then throw("EGG operations are temporarily locked") | |
656 | - | else { | |
657 | - | let assetId = fromBase58String(asset) | |
658 | - | let address = toString(i.caller) | |
659 | - | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
660 | - | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
661 | - | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
662 | - | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
663 | - | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
664 | - | let color = takeRight(value(assetInfo(assetId)).name, 1) | |
665 | - | if ((0 >= assetFarmingPower)) | |
666 | - | then throw("asset not available") | |
667 | - | else if ((color == "U")) | |
668 | - | then throw("use another function to unstake Jackpot NFT") | |
669 | - | else { | |
670 | - | let result = getUnstakeResult(address, assetId, assetRewardDelta, reward, assetFarmingPower) | |
671 | - | $Tuple2((result ++ [IntegerEntry(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)) + 1)), ScriptTransfer(i.caller, (reward * 1000000), eggsAssetId), ScriptTransfer(i.caller, 1, assetId)]), (reward * 1000000)) | |
672 | - | } | |
673 | - | } | |
369 | + | func unstakeNFT (asset) = if (isUserBlacklisted(toString(i.caller))) | |
370 | + | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
371 | + | else if ((isLocked() > 0)) | |
372 | + | then throw("EGG operations are temporarily locked") | |
373 | + | else { | |
374 | + | let assetId = fromBase58String(asset) | |
375 | + | let address = toString(i.caller) | |
376 | + | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
377 | + | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
378 | + | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
379 | + | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
380 | + | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
381 | + | let color = takeRight(value(assetInfo(assetId)).name, 1) | |
382 | + | if ((0 >= assetFarmingPower)) | |
383 | + | then throw("asset not available") | |
384 | + | else if ((color == "U")) | |
385 | + | then throw("use another function to unstake Jackpot NFT") | |
386 | + | else { | |
387 | + | let result = getUnstakeResult(address, assetId, assetRewardDelta, reward, assetFarmingPower) | |
388 | + | $Tuple2((result ++ [IntegerEntry(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)) + 1)), ScriptTransfer(i.caller, (reward * 1000000), eggsAssetId), ScriptTransfer(i.caller, 1, assetId)]), (reward * 1000000)) | |
389 | + | } | |
390 | + | } | |
674 | 391 | ||
675 | 392 | ||
676 | 393 | ||
696 | 413 | ||
697 | 414 | ||
698 | 415 | @Callable(i) | |
699 | - | func unstakeJackpot (asset) = if ((isLocked() > 0)) | |
700 | - | then throw("EGG operations are temporarily locked") | |
701 | - | else { | |
702 | - | let assetId = fromBase58String(asset) | |
703 | - | let address = toString(i.caller) | |
704 | - | let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor")) | |
705 | - | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
706 | - | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
707 | - | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
708 | - | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
709 | - | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
710 | - | if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U")) | |
711 | - | then throw("jackpot only") | |
712 | - | else if ((assetFarmingPower > 0)) | |
713 | - | then { | |
714 | - | let result = getUnstakeResult(address, assetId, assetRewardDelta, reward, assetFarmingPower) | |
715 | - | $Tuple2((result ++ [IntegerEntry(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)) + 1)), ScriptTransfer(i.caller, (reward * 1000000), eggsAssetId), ScriptTransfer(i.caller, 1, assetId)]), (reward * 1000000)) | |
716 | - | } | |
717 | - | else throw("") | |
718 | - | } | |
416 | + | func unstakeJackpot (asset) = if (isUserBlacklisted(toString(i.caller))) | |
417 | + | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
418 | + | else if ((isLocked() > 0)) | |
419 | + | then throw("EGG operations are temporarily locked") | |
420 | + | else { | |
421 | + | let assetId = fromBase58String(asset) | |
422 | + | let address = toString(i.caller) | |
423 | + | let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor")) | |
424 | + | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
425 | + | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
426 | + | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
427 | + | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
428 | + | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
429 | + | if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U")) | |
430 | + | then throw("jackpot only") | |
431 | + | else if ((assetFarmingPower > 0)) | |
432 | + | then { | |
433 | + | let result = getUnstakeResult(address, assetId, assetRewardDelta, reward, assetFarmingPower) | |
434 | + | $Tuple2((result ++ [IntegerEntry(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)) + 1)), ScriptTransfer(i.caller, (reward * 1000000), eggsAssetId), ScriptTransfer(i.caller, 1, assetId)]), (reward * 1000000)) | |
435 | + | } | |
436 | + | else throw("") | |
437 | + | } | |
719 | 438 | ||
720 | 439 | ||
721 | 440 | ||
722 | 441 | @Callable(i) | |
723 | - | func claimReward (asset) = if ((isLocked() > 0)) | |
724 | - | then throw("EGG operations are temporarily locked") | |
725 | - | else { | |
726 | - | let address = toString(i.caller) | |
727 | - | let assetId = fromBase58String(asset) | |
728 | - | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
729 | - | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
730 | - | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
731 | - | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
732 | - | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
733 | - | if ((0 >= reward)) | |
734 | - | then throw("you have no EGGs to withdraw") | |
735 | - | else $Tuple2([IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (reward * scale2))), ScriptTransfer(Address(fromBase58String(address)), (reward * 1000000), eggsAssetId)], (reward * 1000000)) | |
736 | - | } | |
442 | + | func claimReward (asset) = if (isUserBlacklisted(toString(i.caller))) | |
443 | + | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
444 | + | else if ((isLocked() > 0)) | |
445 | + | then throw("EGG operations are temporarily locked") | |
446 | + | else { | |
447 | + | let address = toString(i.caller) | |
448 | + | let assetId = fromBase58String(asset) | |
449 | + | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
450 | + | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
451 | + | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
452 | + | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
453 | + | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
454 | + | if ((0 >= reward)) | |
455 | + | then throw("you have no EGGs to withdraw") | |
456 | + | else $Tuple2([IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (reward * scale2))), ScriptTransfer(Address(fromBase58String(address)), (reward * 1000000), eggsAssetId)], (reward * 1000000)) | |
457 | + | } | |
737 | 458 | ||
738 | 459 | ||
739 | 460 | @Verifier(tx) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let eggsAssetId = base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS' | |
5 | 5 | ||
6 | 6 | let perchPrice = (100 * 1000000) | |
7 | 7 | ||
8 | 8 | let scale = 10000 | |
9 | 9 | ||
10 | 10 | let scale2 = 1000000 | |
11 | 11 | ||
12 | 12 | let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv' | |
13 | 13 | ||
14 | 14 | let breederAddress = base58'3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb' | |
15 | 15 | ||
16 | 16 | let refContractAddress = base58'3P8ejTkfRpz9WqCwCuihesNXU5k3zmFFfVe' | |
17 | 17 | ||
18 | 18 | let RefererReward = 5 | |
19 | 19 | ||
20 | 20 | let rebirthAddress = base58'3PCC6fVHNa6289DTDmcUo3RuLaFmteZZsmQ' | |
21 | 21 | ||
22 | 22 | let GENS = ["A", "B", "C", "D", "E", "F", "G"] | |
23 | 23 | ||
24 | 24 | func getRewardPerBlock () = 684 | |
25 | 25 | ||
26 | 26 | ||
27 | 27 | func isLocked () = { | |
28 | 28 | let masterAddress = Address(base58'3PEPftf2kWZDmAaWBjs6BUJa9957kiA2PkU') | |
29 | 29 | match getInteger(masterAddress, "egglock") { | |
30 | 30 | case b: Int => | |
31 | 31 | b | |
32 | 32 | case _ => | |
33 | 33 | 0 | |
34 | 34 | } | |
35 | 35 | } | |
36 | 36 | ||
37 | 37 | ||
38 | 38 | func tryGetInteger (key) = match getInteger(this, key) { | |
39 | 39 | case b: Int => | |
40 | 40 | b | |
41 | 41 | case _ => | |
42 | 42 | 0 | |
43 | 43 | } | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func tryGetString (key) = match getString(this, key) { | |
47 | 47 | case a: String => | |
48 | 48 | a | |
49 | 49 | case _ => | |
50 | 50 | "" | |
51 | 51 | } | |
52 | 52 | ||
53 | 53 | ||
54 | + | func isUserBlacklisted (address) = { | |
55 | + | let k = getBoolean(Address(base58'3PAHCfc8ZAwJ26bB32YK6ZNVTVBpgVnGTNc'), (("locked_" + address) + "_status")) | |
56 | + | match k { | |
57 | + | case k: Boolean => | |
58 | + | k | |
59 | + | case _ => | |
60 | + | false | |
61 | + | } | |
62 | + | } | |
63 | + | ||
64 | + | ||
54 | 65 | func isSymbolA (accumulated,sym) = if ((sym == "A")) | |
55 | 66 | then (accumulated + 1) | |
56 | 67 | else (accumulated + 0) | |
57 | 68 | ||
58 | 69 | ||
59 | 70 | func isSymbolB (accumulated,sym) = if ((sym == "B")) | |
60 | 71 | then (accumulated + 1) | |
61 | 72 | else (accumulated + 0) | |
62 | 73 | ||
63 | 74 | ||
64 | 75 | func isSymbolC (accumulated,sym) = if ((sym == "C")) | |
65 | 76 | then (accumulated + 1) | |
66 | 77 | else (accumulated + 0) | |
67 | 78 | ||
68 | 79 | ||
69 | 80 | func isSymbolD (accumulated,sym) = if ((sym == "D")) | |
70 | 81 | then (accumulated + 1) | |
71 | 82 | else (accumulated + 0) | |
72 | 83 | ||
73 | 84 | ||
74 | 85 | func isSymbolE (accumulated,sym) = if ((sym == "E")) | |
75 | 86 | then (accumulated + 1) | |
76 | 87 | else (accumulated + 0) | |
77 | 88 | ||
78 | 89 | ||
79 | 90 | func isSymbolF (accumulated,sym) = if ((sym == "F")) | |
80 | 91 | then (accumulated + 1) | |
81 | 92 | else (accumulated + 0) | |
82 | 93 | ||
83 | 94 | ||
84 | 95 | func isSymbolG (accumulated,sym) = if ((sym == "G")) | |
85 | 96 | then (accumulated + 1) | |
86 | 97 | else (accumulated + 0) | |
87 | 98 | ||
88 | 99 | ||
89 | 100 | func isSymbolH (accumulated,sym) = if ((sym == "H")) | |
90 | 101 | then (accumulated + 1) | |
91 | 102 | else (accumulated + 0) | |
92 | 103 | ||
93 | 104 | ||
94 | 105 | func getAmountOrClear (amount) = if (contains(amount, "0")) | |
95 | 106 | then "" | |
96 | 107 | else amount | |
97 | 108 | ||
98 | 109 | ||
99 | 110 | func getGen (assetName) = { | |
100 | 111 | let genotype = split(dropRight(drop(assetName, 5), 3), "") | |
101 | 112 | (((((((getAmountOrClear((toString({ | |
102 | - | let $list22212252 = genotype | |
103 | - | let $size22212252 = size($list22212252) | |
104 | - | let $acc022212252 = 0 | |
105 | - | if (($size22212252 == 0)) | |
106 | - | then $acc022212252 | |
107 | - | else { | |
108 | - | let $acc122212252 = isSymbolA($acc022212252, $list22212252[0]) | |
109 | - | if (($size22212252 == 1)) | |
110 | - | then $acc122212252 | |
111 | - | else { | |
112 | - | let $acc222212252 = isSymbolA($acc122212252, $list22212252[1]) | |
113 | - | if (($size22212252 == 2)) | |
114 | - | then $acc222212252 | |
115 | - | else { | |
116 | - | let $acc322212252 = isSymbolA($acc222212252, $list22212252[2]) | |
117 | - | if (($size22212252 == 3)) | |
118 | - | then $acc322212252 | |
119 | - | else { | |
120 | - | let $acc422212252 = isSymbolA($acc322212252, $list22212252[3]) | |
121 | - | if (($size22212252 == 4)) | |
122 | - | then $acc422212252 | |
123 | - | else { | |
124 | - | let $acc522212252 = isSymbolA($acc422212252, $list22212252[4]) | |
125 | - | if (($size22212252 == 5)) | |
126 | - | then $acc522212252 | |
127 | - | else { | |
128 | - | let $acc622212252 = isSymbolA($acc522212252, $list22212252[5]) | |
129 | - | if (($size22212252 == 6)) | |
130 | - | then $acc622212252 | |
131 | - | else { | |
132 | - | let $acc722212252 = isSymbolA($acc622212252, $list22212252[6]) | |
133 | - | if (($size22212252 == 7)) | |
134 | - | then $acc722212252 | |
135 | - | else { | |
136 | - | let $acc822212252 = isSymbolA($acc722212252, $list22212252[7]) | |
137 | - | if (($size22212252 == 8)) | |
138 | - | then $acc822212252 | |
139 | - | else { | |
140 | - | let $acc922212252 = isSymbolA($acc822212252, $list22212252[8]) | |
141 | - | throw("List size exceed 8") | |
142 | - | } | |
143 | - | } | |
144 | - | } | |
145 | - | } | |
146 | - | } | |
147 | - | } | |
148 | - | } | |
149 | - | } | |
150 | - | } | |
113 | + | let $l = genotype | |
114 | + | let $s = size($l) | |
115 | + | let $acc0 = 0 | |
116 | + | func 1 ($a,$i) = if (($i >= $s)) | |
117 | + | then $a | |
118 | + | else isSymbolA($a, $l[$i]) | |
119 | + | ||
120 | + | func 2 ($a,$i) = if (($i >= $s)) | |
121 | + | then $a | |
122 | + | else throw("List size exceeds 8") | |
123 | + | ||
124 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
151 | 125 | }) + "A")) + getAmountOrClear((toString({ | |
152 | - | let $list22892320 = genotype | |
153 | - | let $size22892320 = size($list22892320) | |
154 | - | let $acc022892320 = 0 | |
155 | - | if (($size22892320 == 0)) | |
156 | - | then $acc022892320 | |
157 | - | else { | |
158 | - | let $acc122892320 = isSymbolB($acc022892320, $list22892320[0]) | |
159 | - | if (($size22892320 == 1)) | |
160 | - | then $acc122892320 | |
161 | - | else { | |
162 | - | let $acc222892320 = isSymbolB($acc122892320, $list22892320[1]) | |
163 | - | if (($size22892320 == 2)) | |
164 | - | then $acc222892320 | |
165 | - | else { | |
166 | - | let $acc322892320 = isSymbolB($acc222892320, $list22892320[2]) | |
167 | - | if (($size22892320 == 3)) | |
168 | - | then $acc322892320 | |
169 | - | else { | |
170 | - | let $acc422892320 = isSymbolB($acc322892320, $list22892320[3]) | |
171 | - | if (($size22892320 == 4)) | |
172 | - | then $acc422892320 | |
173 | - | else { | |
174 | - | let $acc522892320 = isSymbolB($acc422892320, $list22892320[4]) | |
175 | - | if (($size22892320 == 5)) | |
176 | - | then $acc522892320 | |
177 | - | else { | |
178 | - | let $acc622892320 = isSymbolB($acc522892320, $list22892320[5]) | |
179 | - | if (($size22892320 == 6)) | |
180 | - | then $acc622892320 | |
181 | - | else { | |
182 | - | let $acc722892320 = isSymbolB($acc622892320, $list22892320[6]) | |
183 | - | if (($size22892320 == 7)) | |
184 | - | then $acc722892320 | |
185 | - | else { | |
186 | - | let $acc822892320 = isSymbolB($acc722892320, $list22892320[7]) | |
187 | - | if (($size22892320 == 8)) | |
188 | - | then $acc822892320 | |
189 | - | else { | |
190 | - | let $acc922892320 = isSymbolB($acc822892320, $list22892320[8]) | |
191 | - | throw("List size exceed 8") | |
192 | - | } | |
193 | - | } | |
194 | - | } | |
195 | - | } | |
196 | - | } | |
197 | - | } | |
198 | - | } | |
199 | - | } | |
200 | - | } | |
126 | + | let $l = genotype | |
127 | + | let $s = size($l) | |
128 | + | let $acc0 = 0 | |
129 | + | func 1 ($a,$i) = if (($i >= $s)) | |
130 | + | then $a | |
131 | + | else isSymbolB($a, $l[$i]) | |
132 | + | ||
133 | + | func 2 ($a,$i) = if (($i >= $s)) | |
134 | + | then $a | |
135 | + | else throw("List size exceeds 8") | |
136 | + | ||
137 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
201 | 138 | }) + "B"))) + getAmountOrClear((toString({ | |
202 | - | let $list23572388 = genotype | |
203 | - | let $size23572388 = size($list23572388) | |
204 | - | let $acc023572388 = 0 | |
205 | - | if (($size23572388 == 0)) | |
206 | - | then $acc023572388 | |
207 | - | else { | |
208 | - | let $acc123572388 = isSymbolC($acc023572388, $list23572388[0]) | |
209 | - | if (($size23572388 == 1)) | |
210 | - | then $acc123572388 | |
211 | - | else { | |
212 | - | let $acc223572388 = isSymbolC($acc123572388, $list23572388[1]) | |
213 | - | if (($size23572388 == 2)) | |
214 | - | then $acc223572388 | |
215 | - | else { | |
216 | - | let $acc323572388 = isSymbolC($acc223572388, $list23572388[2]) | |
217 | - | if (($size23572388 == 3)) | |
218 | - | then $acc323572388 | |
219 | - | else { | |
220 | - | let $acc423572388 = isSymbolC($acc323572388, $list23572388[3]) | |
221 | - | if (($size23572388 == 4)) | |
222 | - | then $acc423572388 | |
223 | - | else { | |
224 | - | let $acc523572388 = isSymbolC($acc423572388, $list23572388[4]) | |
225 | - | if (($size23572388 == 5)) | |
226 | - | then $acc523572388 | |
227 | - | else { | |
228 | - | let $acc623572388 = isSymbolC($acc523572388, $list23572388[5]) | |
229 | - | if (($size23572388 == 6)) | |
230 | - | then $acc623572388 | |
231 | - | else { | |
232 | - | let $acc723572388 = isSymbolC($acc623572388, $list23572388[6]) | |
233 | - | if (($size23572388 == 7)) | |
234 | - | then $acc723572388 | |
235 | - | else { | |
236 | - | let $acc823572388 = isSymbolC($acc723572388, $list23572388[7]) | |
237 | - | if (($size23572388 == 8)) | |
238 | - | then $acc823572388 | |
239 | - | else { | |
240 | - | let $acc923572388 = isSymbolC($acc823572388, $list23572388[8]) | |
241 | - | throw("List size exceed 8") | |
242 | - | } | |
243 | - | } | |
244 | - | } | |
245 | - | } | |
246 | - | } | |
247 | - | } | |
248 | - | } | |
249 | - | } | |
250 | - | } | |
139 | + | let $l = genotype | |
140 | + | let $s = size($l) | |
141 | + | let $acc0 = 0 | |
142 | + | func 1 ($a,$i) = if (($i >= $s)) | |
143 | + | then $a | |
144 | + | else isSymbolC($a, $l[$i]) | |
145 | + | ||
146 | + | func 2 ($a,$i) = if (($i >= $s)) | |
147 | + | then $a | |
148 | + | else throw("List size exceeds 8") | |
149 | + | ||
150 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
251 | 151 | }) + "C"))) + getAmountOrClear((toString({ | |
252 | - | let $list24272458 = genotype | |
253 | - | let $size24272458 = size($list24272458) | |
254 | - | let $acc024272458 = 0 | |
255 | - | if (($size24272458 == 0)) | |
256 | - | then $acc024272458 | |
257 | - | else { | |
258 | - | let $acc124272458 = isSymbolD($acc024272458, $list24272458[0]) | |
259 | - | if (($size24272458 == 1)) | |
260 | - | then $acc124272458 | |
261 | - | else { | |
262 | - | let $acc224272458 = isSymbolD($acc124272458, $list24272458[1]) | |
263 | - | if (($size24272458 == 2)) | |
264 | - | then $acc224272458 | |
265 | - | else { | |
266 | - | let $acc324272458 = isSymbolD($acc224272458, $list24272458[2]) | |
267 | - | if (($size24272458 == 3)) | |
268 | - | then $acc324272458 | |
269 | - | else { | |
270 | - | let $acc424272458 = isSymbolD($acc324272458, $list24272458[3]) | |
271 | - | if (($size24272458 == 4)) | |
272 | - | then $acc424272458 | |
273 | - | else { | |
274 | - | let $acc524272458 = isSymbolD($acc424272458, $list24272458[4]) | |
275 | - | if (($size24272458 == 5)) | |
276 | - | then $acc524272458 | |
277 | - | else { | |
278 | - | let $acc624272458 = isSymbolD($acc524272458, $list24272458[5]) | |
279 | - | if (($size24272458 == 6)) | |
280 | - | then $acc624272458 | |
281 | - | else { | |
282 | - | let $acc724272458 = isSymbolD($acc624272458, $list24272458[6]) | |
283 | - | if (($size24272458 == 7)) | |
284 | - | then $acc724272458 | |
285 | - | else { | |
286 | - | let $acc824272458 = isSymbolD($acc724272458, $list24272458[7]) | |
287 | - | if (($size24272458 == 8)) | |
288 | - | then $acc824272458 | |
289 | - | else { | |
290 | - | let $acc924272458 = isSymbolD($acc824272458, $list24272458[8]) | |
291 | - | throw("List size exceed 8") | |
292 | - | } | |
293 | - | } | |
294 | - | } | |
295 | - | } | |
296 | - | } | |
297 | - | } | |
298 | - | } | |
299 | - | } | |
300 | - | } | |
152 | + | let $l = genotype | |
153 | + | let $s = size($l) | |
154 | + | let $acc0 = 0 | |
155 | + | func 1 ($a,$i) = if (($i >= $s)) | |
156 | + | then $a | |
157 | + | else isSymbolD($a, $l[$i]) | |
158 | + | ||
159 | + | func 2 ($a,$i) = if (($i >= $s)) | |
160 | + | then $a | |
161 | + | else throw("List size exceeds 8") | |
162 | + | ||
163 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
301 | 164 | }) + "D"))) + getAmountOrClear((toString({ | |
302 | - | let $list24952526 = genotype | |
303 | - | let $size24952526 = size($list24952526) | |
304 | - | let $acc024952526 = 0 | |
305 | - | if (($size24952526 == 0)) | |
306 | - | then $acc024952526 | |
307 | - | else { | |
308 | - | let $acc124952526 = isSymbolE($acc024952526, $list24952526[0]) | |
309 | - | if (($size24952526 == 1)) | |
310 | - | then $acc124952526 | |
311 | - | else { | |
312 | - | let $acc224952526 = isSymbolE($acc124952526, $list24952526[1]) | |
313 | - | if (($size24952526 == 2)) | |
314 | - | then $acc224952526 | |
315 | - | else { | |
316 | - | let $acc324952526 = isSymbolE($acc224952526, $list24952526[2]) | |
317 | - | if (($size24952526 == 3)) | |
318 | - | then $acc324952526 | |
319 | - | else { | |
320 | - | let $acc424952526 = isSymbolE($acc324952526, $list24952526[3]) | |
321 | - | if (($size24952526 == 4)) | |
322 | - | then $acc424952526 | |
323 | - | else { | |
324 | - | let $acc524952526 = isSymbolE($acc424952526, $list24952526[4]) | |
325 | - | if (($size24952526 == 5)) | |
326 | - | then $acc524952526 | |
327 | - | else { | |
328 | - | let $acc624952526 = isSymbolE($acc524952526, $list24952526[5]) | |
329 | - | if (($size24952526 == 6)) | |
330 | - | then $acc624952526 | |
331 | - | else { | |
332 | - | let $acc724952526 = isSymbolE($acc624952526, $list24952526[6]) | |
333 | - | if (($size24952526 == 7)) | |
334 | - | then $acc724952526 | |
335 | - | else { | |
336 | - | let $acc824952526 = isSymbolE($acc724952526, $list24952526[7]) | |
337 | - | if (($size24952526 == 8)) | |
338 | - | then $acc824952526 | |
339 | - | else { | |
340 | - | let $acc924952526 = isSymbolE($acc824952526, $list24952526[8]) | |
341 | - | throw("List size exceed 8") | |
342 | - | } | |
343 | - | } | |
344 | - | } | |
345 | - | } | |
346 | - | } | |
347 | - | } | |
348 | - | } | |
349 | - | } | |
350 | - | } | |
165 | + | let $l = genotype | |
166 | + | let $s = size($l) | |
167 | + | let $acc0 = 0 | |
168 | + | func 1 ($a,$i) = if (($i >= $s)) | |
169 | + | then $a | |
170 | + | else isSymbolE($a, $l[$i]) | |
171 | + | ||
172 | + | func 2 ($a,$i) = if (($i >= $s)) | |
173 | + | then $a | |
174 | + | else throw("List size exceeds 8") | |
175 | + | ||
176 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
351 | 177 | }) + "E"))) + getAmountOrClear((toString({ | |
352 | - | let $list25632594 = genotype | |
353 | - | let $size25632594 = size($list25632594) | |
354 | - | let $acc025632594 = 0 | |
355 | - | if (($size25632594 == 0)) | |
356 | - | then $acc025632594 | |
357 | - | else { | |
358 | - | let $acc125632594 = isSymbolF($acc025632594, $list25632594[0]) | |
359 | - | if (($size25632594 == 1)) | |
360 | - | then $acc125632594 | |
361 | - | else { | |
362 | - | let $acc225632594 = isSymbolF($acc125632594, $list25632594[1]) | |
363 | - | if (($size25632594 == 2)) | |
364 | - | then $acc225632594 | |
365 | - | else { | |
366 | - | let $acc325632594 = isSymbolF($acc225632594, $list25632594[2]) | |
367 | - | if (($size25632594 == 3)) | |
368 | - | then $acc325632594 | |
369 | - | else { | |
370 | - | let $acc425632594 = isSymbolF($acc325632594, $list25632594[3]) | |
371 | - | if (($size25632594 == 4)) | |
372 | - | then $acc425632594 | |
373 | - | else { | |
374 | - | let $acc525632594 = isSymbolF($acc425632594, $list25632594[4]) | |
375 | - | if (($size25632594 == 5)) | |
376 | - | then $acc525632594 | |
377 | - | else { | |
378 | - | let $acc625632594 = isSymbolF($acc525632594, $list25632594[5]) | |
379 | - | if (($size25632594 == 6)) | |
380 | - | then $acc625632594 | |
381 | - | else { | |
382 | - | let $acc725632594 = isSymbolF($acc625632594, $list25632594[6]) | |
383 | - | if (($size25632594 == 7)) | |
384 | - | then $acc725632594 | |
385 | - | else { | |
386 | - | let $acc825632594 = isSymbolF($acc725632594, $list25632594[7]) | |
387 | - | if (($size25632594 == 8)) | |
388 | - | then $acc825632594 | |
389 | - | else { | |
390 | - | let $acc925632594 = isSymbolF($acc825632594, $list25632594[8]) | |
391 | - | throw("List size exceed 8") | |
392 | - | } | |
393 | - | } | |
394 | - | } | |
395 | - | } | |
396 | - | } | |
397 | - | } | |
398 | - | } | |
399 | - | } | |
400 | - | } | |
178 | + | let $l = genotype | |
179 | + | let $s = size($l) | |
180 | + | let $acc0 = 0 | |
181 | + | func 1 ($a,$i) = if (($i >= $s)) | |
182 | + | then $a | |
183 | + | else isSymbolF($a, $l[$i]) | |
184 | + | ||
185 | + | func 2 ($a,$i) = if (($i >= $s)) | |
186 | + | then $a | |
187 | + | else throw("List size exceeds 8") | |
188 | + | ||
189 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
401 | 190 | }) + "F"))) + getAmountOrClear((toString({ | |
402 | - | let $list26332664 = genotype | |
403 | - | let $size26332664 = size($list26332664) | |
404 | - | let $acc026332664 = 0 | |
405 | - | if (($size26332664 == 0)) | |
406 | - | then $acc026332664 | |
407 | - | else { | |
408 | - | let $acc126332664 = isSymbolG($acc026332664, $list26332664[0]) | |
409 | - | if (($size26332664 == 1)) | |
410 | - | then $acc126332664 | |
411 | - | else { | |
412 | - | let $acc226332664 = isSymbolG($acc126332664, $list26332664[1]) | |
413 | - | if (($size26332664 == 2)) | |
414 | - | then $acc226332664 | |
415 | - | else { | |
416 | - | let $acc326332664 = isSymbolG($acc226332664, $list26332664[2]) | |
417 | - | if (($size26332664 == 3)) | |
418 | - | then $acc326332664 | |
419 | - | else { | |
420 | - | let $acc426332664 = isSymbolG($acc326332664, $list26332664[3]) | |
421 | - | if (($size26332664 == 4)) | |
422 | - | then $acc426332664 | |
423 | - | else { | |
424 | - | let $acc526332664 = isSymbolG($acc426332664, $list26332664[4]) | |
425 | - | if (($size26332664 == 5)) | |
426 | - | then $acc526332664 | |
427 | - | else { | |
428 | - | let $acc626332664 = isSymbolG($acc526332664, $list26332664[5]) | |
429 | - | if (($size26332664 == 6)) | |
430 | - | then $acc626332664 | |
431 | - | else { | |
432 | - | let $acc726332664 = isSymbolG($acc626332664, $list26332664[6]) | |
433 | - | if (($size26332664 == 7)) | |
434 | - | then $acc726332664 | |
435 | - | else { | |
436 | - | let $acc826332664 = isSymbolG($acc726332664, $list26332664[7]) | |
437 | - | if (($size26332664 == 8)) | |
438 | - | then $acc826332664 | |
439 | - | else { | |
440 | - | let $acc926332664 = isSymbolG($acc826332664, $list26332664[8]) | |
441 | - | throw("List size exceed 8") | |
442 | - | } | |
443 | - | } | |
444 | - | } | |
445 | - | } | |
446 | - | } | |
447 | - | } | |
448 | - | } | |
449 | - | } | |
450 | - | } | |
191 | + | let $l = genotype | |
192 | + | let $s = size($l) | |
193 | + | let $acc0 = 0 | |
194 | + | func 1 ($a,$i) = if (($i >= $s)) | |
195 | + | then $a | |
196 | + | else isSymbolG($a, $l[$i]) | |
197 | + | ||
198 | + | func 2 ($a,$i) = if (($i >= $s)) | |
199 | + | then $a | |
200 | + | else throw("List size exceeds 8") | |
201 | + | ||
202 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
451 | 203 | }) + "G"))) + getAmountOrClear((toString({ | |
452 | - | let $list27012732 = genotype | |
453 | - | let $size27012732 = size($list27012732) | |
454 | - | let $acc027012732 = 0 | |
455 | - | if (($size27012732 == 0)) | |
456 | - | then $acc027012732 | |
457 | - | else { | |
458 | - | let $acc127012732 = isSymbolH($acc027012732, $list27012732[0]) | |
459 | - | if (($size27012732 == 1)) | |
460 | - | then $acc127012732 | |
461 | - | else { | |
462 | - | let $acc227012732 = isSymbolH($acc127012732, $list27012732[1]) | |
463 | - | if (($size27012732 == 2)) | |
464 | - | then $acc227012732 | |
465 | - | else { | |
466 | - | let $acc327012732 = isSymbolH($acc227012732, $list27012732[2]) | |
467 | - | if (($size27012732 == 3)) | |
468 | - | then $acc327012732 | |
469 | - | else { | |
470 | - | let $acc427012732 = isSymbolH($acc327012732, $list27012732[3]) | |
471 | - | if (($size27012732 == 4)) | |
472 | - | then $acc427012732 | |
473 | - | else { | |
474 | - | let $acc527012732 = isSymbolH($acc427012732, $list27012732[4]) | |
475 | - | if (($size27012732 == 5)) | |
476 | - | then $acc527012732 | |
477 | - | else { | |
478 | - | let $acc627012732 = isSymbolH($acc527012732, $list27012732[5]) | |
479 | - | if (($size27012732 == 6)) | |
480 | - | then $acc627012732 | |
481 | - | else { | |
482 | - | let $acc727012732 = isSymbolH($acc627012732, $list27012732[6]) | |
483 | - | if (($size27012732 == 7)) | |
484 | - | then $acc727012732 | |
485 | - | else { | |
486 | - | let $acc827012732 = isSymbolH($acc727012732, $list27012732[7]) | |
487 | - | if (($size27012732 == 8)) | |
488 | - | then $acc827012732 | |
489 | - | else { | |
490 | - | let $acc927012732 = isSymbolH($acc827012732, $list27012732[8]) | |
491 | - | throw("List size exceed 8") | |
492 | - | } | |
493 | - | } | |
494 | - | } | |
495 | - | } | |
496 | - | } | |
497 | - | } | |
498 | - | } | |
499 | - | } | |
500 | - | } | |
204 | + | let $l = genotype | |
205 | + | let $s = size($l) | |
206 | + | let $acc0 = 0 | |
207 | + | func 1 ($a,$i) = if (($i >= $s)) | |
208 | + | then $a | |
209 | + | else isSymbolH($a, $l[$i]) | |
210 | + | ||
211 | + | func 2 ($a,$i) = if (($i >= $s)) | |
212 | + | then $a | |
213 | + | else throw("List size exceeds 8") | |
214 | + | ||
215 | + | 2(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8) | |
501 | 216 | }) + "H"))) | |
502 | 217 | } | |
503 | 218 | ||
504 | 219 | ||
505 | 220 | func getAssetOrigin (generation) = if ((generation == "G")) | |
506 | 221 | then incubatorAddress | |
507 | 222 | else breederAddress | |
508 | 223 | ||
509 | 224 | ||
510 | 225 | func getAssetRarity (genotype,generation) = { | |
511 | 226 | let quantity = getIntegerValue(Address(getAssetOrigin(generation)), (("stats_" + genotype) + "_quantity")) | |
512 | 227 | let power = pow((10000 / quantity), 4, 5, 1, 2, FLOOR) | |
513 | 228 | if ((power > 0)) | |
514 | 229 | then power | |
515 | 230 | else 2 | |
516 | 231 | } | |
517 | 232 | ||
518 | 233 | ||
519 | 234 | func getAssetFarmingPower (assetId) = if (if ((value(assetInfo(assetId)).issuer == Address(breederAddress))) | |
520 | 235 | then true | |
521 | 236 | else (value(assetInfo(assetId)).issuer == Address(incubatorAddress))) | |
522 | 237 | then { | |
523 | 238 | let assetName = value(assetInfo(assetId)).name | |
524 | 239 | let generation = take(takeRight(assetName, 2), 1) | |
525 | 240 | let gen = ((getGen(assetName) + "-") + generation) | |
526 | 241 | $Tuple2(gen, getAssetRarity(gen, generation)) | |
527 | 242 | } | |
528 | 243 | else throw("not valid NFT") | |
529 | 244 | ||
530 | 245 | ||
531 | 246 | func getLastKnownAssetFarmingPower (address,assetId) = tryGetInteger((((("address_" + address) + "_asset_") + assetId) + "_farmingPower")) | |
532 | 247 | ||
533 | 248 | ||
534 | 249 | func getAssetsByGen (gen) = { | |
535 | 250 | let s = tryGetString(("assets_" + gen)) | |
536 | 251 | if ((s == "")) | |
537 | 252 | then nil | |
538 | 253 | else split(s, ",") | |
539 | 254 | } | |
540 | 255 | ||
541 | 256 | ||
542 | 257 | func calcInterest (previousInterest,previousInterestHeight,totalFarmingPower) = (previousInterest + (((scale * getRewardPerBlock()) * (height - previousInterestHeight)) / totalFarmingPower)) | |
543 | 258 | ||
544 | 259 | ||
545 | 260 | func getCurrentInterest () = if ((tryGetInteger("total_farmingPower") > 0)) | |
546 | 261 | then { | |
547 | 262 | let previousInterest = tryGetInteger("total_lastCheckInterest") | |
548 | 263 | let previousInterestHeight = tryGetInteger("total_lastCheckInterestHeight") | |
549 | 264 | let totalFarmingPower = tryGetInteger("total_farmingPower") | |
550 | 265 | calcInterest(previousInterest, previousInterestHeight, totalFarmingPower) | |
551 | 266 | } | |
552 | 267 | else if ((tryGetInteger("total_startHeight") != 0)) | |
553 | 268 | then tryGetInteger("total_lastCheckInterest") | |
554 | 269 | else throw("farming is not launched, yet") | |
555 | 270 | ||
556 | 271 | ||
557 | 272 | func calcAssetRewardDelta (address,assetId,assetFarmingPower) = { | |
558 | 273 | let lastCheckAssetInterest = tryGetInteger((((("address_" + address) + "_asset_") + assetId) + "_lastCheckInterest")) | |
559 | 274 | let currentInterest = getCurrentInterest() | |
560 | 275 | (assetFarmingPower * (currentInterest - lastCheckAssetInterest)) | |
561 | 276 | } | |
562 | 277 | ||
563 | 278 | ||
564 | 279 | func addAssetIdToGenEntry (assetId,assetGen) = { | |
565 | 280 | let currentValue = tryGetString((("assets_" + assetGen) + "_locked")) | |
566 | 281 | if ((currentValue == "")) | |
567 | 282 | then assetId | |
568 | 283 | else ((currentValue + ",") + assetId) | |
569 | 284 | } | |
570 | 285 | ||
571 | 286 | ||
572 | 287 | func getStakeResult (address,assetId,assetFarmingPower) = { | |
573 | 288 | let asset = toBase58String(assetId) | |
574 | 289 | [IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") + assetFarmingPower)), IntegerEntry("total_lastCheckInterest", getCurrentInterest()), IntegerEntry("total_lastCheckInterestHeight", height), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), assetFarmingPower), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest"), getCurrentInterest())] | |
575 | 290 | } | |
576 | 291 | ||
577 | 292 | ||
578 | 293 | func getUnstakeResult (address,assetId,rewardDelta,withdrawnAmount,assetFarmingPower) = { | |
579 | 294 | let asset = toBase58String(assetId) | |
580 | 295 | [IntegerEntry("total_farmingPower", (tryGetInteger("total_farmingPower") - assetFarmingPower)), IntegerEntry("total_lastCheckInterest", getCurrentInterest()), IntegerEntry("total_lastCheckInterestHeight", height), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_farmingPower"), 0), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest"), getCurrentInterest()), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (withdrawnAmount * scale2))), IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount")) + rewardDelta))] | |
581 | 296 | } | |
582 | 297 | ||
583 | 298 | ||
584 | 299 | @Callable(i) | |
585 | 300 | func init () = if ((i.caller != this)) | |
586 | 301 | then throw("admin only") | |
587 | 302 | else [IntegerEntry("total_startHeight", height)] | |
588 | 303 | ||
589 | 304 | ||
590 | 305 | ||
591 | 306 | @Callable(i) | |
592 | 307 | func buyPerch (color,refererAddress) = if ((isLocked() > 0)) | |
593 | 308 | then throw("EGG operations are temporarily locked") | |
594 | 309 | else if ((0 > value(indexOf(["B", "R", "G", "Y"], color)))) | |
595 | 310 | then throw("you need to set color properly") | |
596 | 311 | else { | |
597 | 312 | let firstPayment = value(i.payments[0]) | |
598 | 313 | if ((firstPayment.assetId != eggsAssetId)) | |
599 | 314 | then throw(("You can attach only EGG tokens with the following asset id: " + toBase58String(eggsAssetId))) | |
600 | 315 | else if ((firstPayment.amount != perchPrice)) | |
601 | 316 | then throw(("To buy a perch you currently need the following amount of EGGlets: " + toString(perchPrice))) | |
602 | 317 | else { | |
603 | 318 | let refererRewardForPerch = fraction(firstPayment.amount, RefererReward, 100) | |
604 | 319 | let refCall = invoke(Address(refContractAddress), "refPayment", [refererAddress], [AttachedPayment(eggsAssetId, refererRewardForPerch)]) | |
605 | 320 | if ((refCall == refCall)) | |
606 | 321 | then { | |
607 | 322 | let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color) | |
608 | 323 | let perchAmount = tryGetInteger(perchAmountKey) | |
609 | 324 | [IntegerEntry(perchAmountKey, (perchAmount + 1))] | |
610 | 325 | } | |
611 | 326 | else throw("Strict value is not equal to itself.") | |
612 | 327 | } | |
613 | 328 | } | |
614 | 329 | ||
615 | 330 | ||
616 | 331 | ||
617 | 332 | @Callable(i) | |
618 | 333 | func addFreePerch (address,color) = if ((0 > value(indexOf(["B", "R", "G", "Y"], color)))) | |
619 | 334 | then throw("you need to set color properly") | |
620 | 335 | else if (if ((i.caller != Address(rebirthAddress))) | |
621 | 336 | then (i.caller != this) | |
622 | 337 | else false) | |
623 | 338 | then throw("rebirth only") | |
624 | 339 | else { | |
625 | 340 | let perchAmountKey = ((("address_" + address) + "_perchesAvailable_") + color) | |
626 | 341 | let perchAmount = tryGetInteger(perchAmountKey) | |
627 | 342 | $Tuple2([IntegerEntry(perchAmountKey, (perchAmount + 1))], "") | |
628 | 343 | } | |
629 | 344 | ||
630 | 345 | ||
631 | 346 | ||
632 | 347 | @Callable(i) | |
633 | 348 | func stakeNFT () = if ((isLocked() > 0)) | |
634 | 349 | then throw("EGG operations are temporarily locked") | |
635 | 350 | else { | |
636 | 351 | let assetId = value(value(i.payments[0]).assetId) | |
637 | 352 | let address = toString(i.caller) | |
638 | 353 | let color = takeRight(value(assetInfo(assetId)).name, 1) | |
639 | 354 | let availablePerches = tryGetInteger(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)) | |
640 | 355 | if ((0 >= availablePerches)) | |
641 | 356 | then throw(("no perches available for the color " + color)) | |
642 | 357 | else { | |
643 | - | let $ | |
644 | - | let assetGen = $ | |
645 | - | let assetFarmingPower = $ | |
358 | + | let $t092029267 = getAssetFarmingPower(assetId) | |
359 | + | let assetGen = $t092029267._1 | |
360 | + | let assetFarmingPower = $t092029267._2 | |
646 | 361 | let assetRewardDelta = calcAssetRewardDelta(address, toBase58String(assetId), assetFarmingPower) | |
647 | 362 | (getStakeResult(address, assetId, assetFarmingPower) ++ [IntegerEntry(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color), (availablePerches - 1))]) | |
648 | 363 | } | |
649 | 364 | } | |
650 | 365 | ||
651 | 366 | ||
652 | 367 | ||
653 | 368 | @Callable(i) | |
654 | - | func unstakeNFT (asset) = if ((isLocked() > 0)) | |
655 | - | then throw("EGG operations are temporarily locked") | |
656 | - | else { | |
657 | - | let assetId = fromBase58String(asset) | |
658 | - | let address = toString(i.caller) | |
659 | - | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
660 | - | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
661 | - | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
662 | - | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
663 | - | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
664 | - | let color = takeRight(value(assetInfo(assetId)).name, 1) | |
665 | - | if ((0 >= assetFarmingPower)) | |
666 | - | then throw("asset not available") | |
667 | - | else if ((color == "U")) | |
668 | - | then throw("use another function to unstake Jackpot NFT") | |
669 | - | else { | |
670 | - | let result = getUnstakeResult(address, assetId, assetRewardDelta, reward, assetFarmingPower) | |
671 | - | $Tuple2((result ++ [IntegerEntry(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)) + 1)), ScriptTransfer(i.caller, (reward * 1000000), eggsAssetId), ScriptTransfer(i.caller, 1, assetId)]), (reward * 1000000)) | |
672 | - | } | |
673 | - | } | |
369 | + | func unstakeNFT (asset) = if (isUserBlacklisted(toString(i.caller))) | |
370 | + | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
371 | + | else if ((isLocked() > 0)) | |
372 | + | then throw("EGG operations are temporarily locked") | |
373 | + | else { | |
374 | + | let assetId = fromBase58String(asset) | |
375 | + | let address = toString(i.caller) | |
376 | + | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
377 | + | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
378 | + | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
379 | + | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
380 | + | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
381 | + | let color = takeRight(value(assetInfo(assetId)).name, 1) | |
382 | + | if ((0 >= assetFarmingPower)) | |
383 | + | then throw("asset not available") | |
384 | + | else if ((color == "U")) | |
385 | + | then throw("use another function to unstake Jackpot NFT") | |
386 | + | else { | |
387 | + | let result = getUnstakeResult(address, assetId, assetRewardDelta, reward, assetFarmingPower) | |
388 | + | $Tuple2((result ++ [IntegerEntry(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)) + 1)), ScriptTransfer(i.caller, (reward * 1000000), eggsAssetId), ScriptTransfer(i.caller, 1, assetId)]), (reward * 1000000)) | |
389 | + | } | |
390 | + | } | |
674 | 391 | ||
675 | 392 | ||
676 | 393 | ||
677 | 394 | @Callable(i) | |
678 | 395 | func stakeJackpot (color) = if ((isLocked() > 0)) | |
679 | 396 | then throw("EGG operations are temporarily locked") | |
680 | 397 | else { | |
681 | 398 | let assetId = value(value(i.payments[0]).assetId) | |
682 | 399 | let address = toString(i.caller) | |
683 | 400 | let availablePerches = tryGetInteger(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)) | |
684 | 401 | let assetIssuer = value(assetInfo(assetId)).issuer.bytes | |
685 | 402 | if (if ((assetIssuer == incubatorAddress)) | |
686 | 403 | then true | |
687 | 404 | else (assetIssuer == breederAddress)) | |
688 | 405 | then if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U")) | |
689 | 406 | then throw("jackpot only") | |
690 | 407 | else if ((0 >= availablePerches)) | |
691 | 408 | then throw(("no perches available for the color " + color)) | |
692 | 409 | else (getStakeResult(address, assetId, 100) ++ [IntegerEntry(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((((("address_" + toString(i.caller)) + "_asset_") + toBase58String(assetId)) + "_perchColor"), color)]) | |
693 | 410 | else throw("asset is not valid") | |
694 | 411 | } | |
695 | 412 | ||
696 | 413 | ||
697 | 414 | ||
698 | 415 | @Callable(i) | |
699 | - | func unstakeJackpot (asset) = if ((isLocked() > 0)) | |
700 | - | then throw("EGG operations are temporarily locked") | |
701 | - | else { | |
702 | - | let assetId = fromBase58String(asset) | |
703 | - | let address = toString(i.caller) | |
704 | - | let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor")) | |
705 | - | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
706 | - | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
707 | - | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
708 | - | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
709 | - | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
710 | - | if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U")) | |
711 | - | then throw("jackpot only") | |
712 | - | else if ((assetFarmingPower > 0)) | |
713 | - | then { | |
714 | - | let result = getUnstakeResult(address, assetId, assetRewardDelta, reward, assetFarmingPower) | |
715 | - | $Tuple2((result ++ [IntegerEntry(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)) + 1)), ScriptTransfer(i.caller, (reward * 1000000), eggsAssetId), ScriptTransfer(i.caller, 1, assetId)]), (reward * 1000000)) | |
716 | - | } | |
717 | - | else throw("") | |
718 | - | } | |
416 | + | func unstakeJackpot (asset) = if (isUserBlacklisted(toString(i.caller))) | |
417 | + | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
418 | + | else if ((isLocked() > 0)) | |
419 | + | then throw("EGG operations are temporarily locked") | |
420 | + | else { | |
421 | + | let assetId = fromBase58String(asset) | |
422 | + | let address = toString(i.caller) | |
423 | + | let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor")) | |
424 | + | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
425 | + | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
426 | + | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
427 | + | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
428 | + | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
429 | + | if ((takeRight(value(value(assetInfo(assetId)).name), 1) != "U")) | |
430 | + | then throw("jackpot only") | |
431 | + | else if ((assetFarmingPower > 0)) | |
432 | + | then { | |
433 | + | let result = getUnstakeResult(address, assetId, assetRewardDelta, reward, assetFarmingPower) | |
434 | + | $Tuple2((result ++ [IntegerEntry(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)) + 1)), ScriptTransfer(i.caller, (reward * 1000000), eggsAssetId), ScriptTransfer(i.caller, 1, assetId)]), (reward * 1000000)) | |
435 | + | } | |
436 | + | else throw("") | |
437 | + | } | |
719 | 438 | ||
720 | 439 | ||
721 | 440 | ||
722 | 441 | @Callable(i) | |
723 | - | func claimReward (asset) = if ((isLocked() > 0)) | |
724 | - | then throw("EGG operations are temporarily locked") | |
725 | - | else { | |
726 | - | let address = toString(i.caller) | |
727 | - | let assetId = fromBase58String(asset) | |
728 | - | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
729 | - | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
730 | - | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
731 | - | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
732 | - | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
733 | - | if ((0 >= reward)) | |
734 | - | then throw("you have no EGGs to withdraw") | |
735 | - | else $Tuple2([IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (reward * scale2))), ScriptTransfer(Address(fromBase58String(address)), (reward * 1000000), eggsAssetId)], (reward * 1000000)) | |
736 | - | } | |
442 | + | func claimReward (asset) = if (isUserBlacklisted(toString(i.caller))) | |
443 | + | then throw("Ooops, looks like you lost in one of the Ducksquid games! As you already know, any loss has its consequences, so you will be not able to claim your farming rewards till the end of DuckSquid game. Quack in peace!") | |
444 | + | else if ((isLocked() > 0)) | |
445 | + | then throw("EGG operations are temporarily locked") | |
446 | + | else { | |
447 | + | let address = toString(i.caller) | |
448 | + | let assetId = fromBase58String(asset) | |
449 | + | let assetFarmingPower = getLastKnownAssetFarmingPower(address, asset) | |
450 | + | let assetRewardDelta = calcAssetRewardDelta(address, asset, assetFarmingPower) | |
451 | + | let farmedAmount = (assetRewardDelta + tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_lastCheckFarmedAmount"))) | |
452 | + | let withdrawnAmount = tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) | |
453 | + | let reward = ((farmedAmount - withdrawnAmount) / (scale * 100)) | |
454 | + | if ((0 >= reward)) | |
455 | + | then throw("you have no EGGs to withdraw") | |
456 | + | else $Tuple2([IntegerEntry((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount"), (tryGetInteger((((("address_" + address) + "_asset_") + asset) + "_withdrawnAmount")) + (reward * scale2))), ScriptTransfer(Address(fromBase58String(address)), (reward * 1000000), eggsAssetId)], (reward * 1000000)) | |
457 | + | } | |
737 | 458 | ||
738 | 459 | ||
739 | 460 | @Verifier(tx) | |
740 | 461 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
741 | 462 |
github/deemru/w8io/0e76f2f 109.88 ms ◑