tx · 9vixyuM1TkeC73BhoPKFjmGe5HDuqpYom75TB1nRUFaC 3MwK6nw9HMwuKbXxu6J1rfecvePPd3JyAje: -0.03100000 Waves 2022.12.01 17:34 [2341399] smart account 3MwK6nw9HMwuKbXxu6J1rfecvePPd3JyAje > SELF 0.00000000 Waves
{ "type": 13, "id": "9vixyuM1TkeC73BhoPKFjmGe5HDuqpYom75TB1nRUFaC", "fee": 3100000, "feeAssetId": null, "timestamp": 1669905331640, "version": 1, "sender": "3MwK6nw9HMwuKbXxu6J1rfecvePPd3JyAje", "senderPublicKey": "8JB75GXEKqxmpXc6KVtT9UNqJ3BBSUZDodYD4DU7CUUB", "proofs": [ "665b7ijmJZod9D4uDjL2MFZRmcDEp6i3DEKfgGosyveWYtNuFgiBuqq3TFkxL2JYp3ZTZRLhVq7bLjXGNbe6XLdG" ], "script": "base64:AAIFAAAAAAAAEYIIAhIJCgcBAQEBAQgBEgASBAoCCAgSAwoBCBIECgIICBIECgIICBIDCgEIEgAiD2dldFN0cmluZ09yRmFpbCIDa2V5IgNTRVAiCEJVRlNDQUxFIgZzY2FsZTgiCHRocm93RXJyIgNtc2ciCGFzU3RyaW5nIgN2YWwiByRtYXRjaDAiBnZhbFN0ciIdY29udmVydFByaWNlQXNzZXRJbnRvSWRvQXNzZXQiEHByaWNlQXNzZXRBbW91bnQiDnByaWNlQXNzZXRNVUxUIgVwcmljZSIJcHJpY2VNVUxUIgxpZG9Bc3NldE1VTFQiD2JQcmljZUFzc2V0TVVMVCINYklkb0Fzc2V0TVVMVCIOYlByaWNlQXNzZXRCVUYiD2JBbW91bnRBc3NldEJVRiIOSWR4Q2ZnSWRvU3RhcnQiEUlkeENmZ0lkb0R1cmF0aW9uIhBJZHhDZmdDbGFpbVN0YXJ0IhNJZHhDZmdDbGFpbUR1cmF0aW9uIgtJZHhDZmdQcmljZSIPSWR4Q2ZnUHJpY2VNdWx0IhBJZHhDZmdJZG9Bc3NldElkIhJJZHhDZmdJZG9Bc3NldE11bHQiEklkeENmZ1ByaWNlQXNzZXRJZCIUSWR4Q2ZnUHJpY2VBc3NldE11bHQiFUlkeENmZ01pbkludmVzdEFtb3VudCINZnJvbWF0Q29uZmlnUyIIaWRvU3RhcnQiC2lkb0R1cmF0aW9uIgpjbGFpbVN0YXJ0Ig1jbGFpbUR1cmF0aW9uIglwcmljZU11bHQiDGlkb0Fzc2V0SWQ1OCIMaWRvQXNzZXRNdWx0Ig5wcmljZUFzc2V0SWQ1OCIOcHJpY2VBc3NldE11bHQiD21pbkludmVzdEFtb3VudCITdG90YWxJZG9Bc3NldFRvU2VsbCIMZnJvbWF0Q29uZmlnIhFJZHhJbnZUb3RhbEFtb3VudCIVSWR4SW52UmVtYWluaW5nQW1vdW50Ih1JZHhJbnZDbGFpbWVkUHJpY2VBc3NldEFtb3VudCIbSWR4SW52Q2xhaW1lZElkb0Fzc2V0QW1vdW50IhdJZHhJbnZMYXN0Q2xhaW1lZEhlaWdodCIPZm9ybWF0SW52ZXN0b3JTIgt0b3RhbEFtb3VudCIPcmVtYWluaW5nQW1vdW50IhdjbGFpbWVkUHJpY2VBc3NldEFtb3VudCIVY2xhaW1lZElkb0Fzc2V0QW1vdW50IhFsYXN0Q2xhaW1lZEhlaWdodCIOZm9ybWF0SW52ZXN0b3IiE2Zvcm1hdEhpc3RvcnlSZWNvcmQiDmlkb0Fzc2V0QW1vdW50IglrZXlDb25maWciC2tleUludmVzdG9yIgt1c2VyQWRkcmVzcyIJa2V5VG90YWxzIhlrZXlPcGVyYXRpb25IaXN0b3J5UmVjb3JkIgR0eXBlIgZ0eElkNTgiFGtleVVTRE5DbGFpbURpc2FibGVkIhVrZXlVU0ROQ2xhaW1FbmRIZWlnaHQiD2tleVBlcmlvZExlbmd0aCIQa2V5Q3VycmVudFBlcmlvZCIUa2V5UGVyaW9kU3RhcnRIZWlnaHQiCXBlcmlvZE51bSISa2V5UGVyaW9kRW5kSGVpZ2h0Ih9rZXlVc2R0UHJpY2VBc3NldEFsbG93YWJsZVJhdGlvIhdrZXlUb3RhbFBlcmlvZEFsbG93YW5jZSIHYXNzZXRJZCIWa2V5VXNlclBlcmlvZEFsbG93YW5jZSIea2V5UGVyaW9kVG90YWxBdmFpbGFibGVUb0NsYWltIh1rZXlQZXJpb2RVc2VyQXZhaWxhYmxlVG9DbGFpbSIba2V5VXNkdFByaWNlQXNzZXRTdGFibGVQb29sIg5rZXlVc2R0QXNzZXRJZCIUa2V5UHJpY2VBc3NldEJhbGFuY2UiB2FkZHJlc3MiGmtleUludmVzdG9yUmVtYWluaW5nQW1vdW50IhdrZXlUb3RhbFJlbWFpbmluZ0Ftb3VudCITa2V5TWFuYWdlclB1YmxpY0tleSIaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiD3JlYWRDb25maWdBcnJheSIjcmVhZFRvdGFsc0FycmF5T3JEZWZhdWx0QnlDdXN0b21LZXkiCWN1c3RvbUtleSIYcmVhZFRvdGFsc0FycmF5T3JEZWZhdWx0IhpyZWFkSW52ZXN0b3JBcnJheU9yRGVmYXVsdCIXcmVhZEludmVzdG9yQXJyYXlPckZhaWwiFUlkeERpZmZUb3RhbEluY3JlbWVudCIkSWR4RGlmZlJlbWFpbmluZ1ByaWNlQW1vdW50SW5jcmVtZW50IiJJZHhEaWZmQ2xhaW1lZFByaWNlQW1vdW50SW5jcmVtZW50IiVJZHhEaWZmQ2xhaW1lZElkb0Fzc2V0QW1vdW50SW5jcmVtZW50IgtUb3RhbHNFbnRyeSIJb3JpZ0FycmF5Ig1pbmNyZW1lbnREaWZmIhRuZXdMYXN0Q2xhaW1lZEhlaWdodCIRcHJpY2VBc3NldEJhbGFuY2UiDm5ld1RvdGFsQW1vdW50IhJuZXdSZW1haW5pbmdBbW91bnQiCGNmZ0FycmF5IhJwcmljZUFzc2V0RGVjaW1hbHMiI3ByaWNlQXNzZXRCYWxhbmNlUHJpY2VBc3NldERlY2ltYWxzIhpuZXdDbGFpbWVkUHJpY2VBc3NldEFtb3VudCIYbmV3Q2xhaW1lZElkb0Fzc2V0QW1vdW50IgdlbnRyaWVzIgRkaWZmIhduZXdMb2dpY1JlbWFpbmluZ0Ftb3VudCIbSW52ZXN0T3BlcmF0aW9uSGlzdG9yeUVudHJ5IgR0eElkIhpDbGFpbU9wZXJhdGlvbkhpc3RvcnlFbnRyeSINaW50ZXJuYWxDbGFpbSIQY2xhaW1lZEFzc2V0SWQ1OCIIY2xhaW1FbmQiCmlkb0Fzc2V0SWQiDHByaWNlQXNzZXRJZCINdXNlckFkZHJlc3M1OCIPb3JpZ0ludmVzdEFycmF5IhFpbnZlc3RUb3RhbEFtb3VudCIaaW52ZXN0TGFzdENsYWltZWRIZWlnaHRUTVAiF2ludmVzdExhc3RDbGFpbWVkSGVpZ2h0IhRuZXdDbGFpbVBlcmlvZEhlaWdodCIOY2xhaW1pbmdCbG9ja3MiGGNsYWltaW5nUHJpY2VBc3NldEFtb3VudCIWY2xhaW1pbmdJZG9Bc3NldEFtb3VudCIGaXNVU0ROIhNpc1VTRE5DbGFpbURpc2FibGVkIgZjaGVja3MiD2ludGVybmFsQ2xhaW1WMiIJb3V0QW1vdW50Ihl0b3RhbFVzZXJBdmFpbGFibGVUb0NsYWltIh50b3RhbFBlcmlvZFByaWNlQXNzZXRBbGxvd2FuY2UiHXVzZXJQZXJpb2RQcmljZUFzc2V0QWxsb3dhbmNlIgxwZXJpb2RMZW5ndGgiDWN1cnJlbnRQZXJpb2QiG3plcm9QZXJpb2RFbmRIZWlnaElzRGVmaW5lZCINJHQwMTI5ODcxNDg1NyIVbGFzdFBlcmlvZFN0YXJ0SGVpZ2h0IhNsYXN0UGVyaW9kRW5kSGVpZ2h0Ig0kdDAxMzI0NzEzOTUyIhR1cGRhdGVkQ3VycmVudFBlcmlvZCILcGVyaW9kU3RhcnQiF2Jsb2Nrc1RvTGFzdFBlcmlvZFN0YXJ0IglwZXJpb2RFbmQiFXplcm9QZXJpb2RTdGFydEhlaWdodCITemVyb1BlcmlvZEVuZEhlaWdodCINJHQwMTQyMDcxNDU4OSIbcGVyaW9kVG90YWxBdmFpbGFibGVUb0NsYWltIhpwZXJpb2RVc2VyQXZhaWxhYmxlVG9DbGFpbSIZcGVyaW9kTWluQXZhaWxhYmxlVG9DbGFpbSIcdXNkdFByaWNlQXNzZXRBbGxvd2FibGVSYXRpbyIbcHV0T25lVGtuVjJQcmljZUFzc2V0QW1vdW50Ig0kdDAxNTYxMjE1ODY1IgFAIgVib251cyIJZmVlQW1vdW50IghscEFtb3VudCILdXNkdEFzc2V0SWQiDSR0MDE1OTI3MTYxNDUiFGdldE9uZVRrblYyRmVlQW1vdW50Igp1c2R0QW1vdW50IhpjdXJyZW50VXNkdFByaWNlQXNzZXRSYXRpbyITZW5kUGVyaW9kQmxvY2tzTGVmdCIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCIBcyIdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQiC211c3RNYW5hZ2VyIgFpIgJwZCICcGsiBmlkb0VuZCIDcG10IgxpZG9Bc3NldEluZm8iDnByaWNlQXNzZXRJbmZvIg9vcmlnVG90YWxzQXJyYXkiCnRvdGFsc0RpZmYiDm1pbkl2ZXN0QW1vdW50IgpwbXRBc3NldElkIglwbXRBbW91bnQiEW9yaWdJbnZlc3RvckFycmF5IhNuZXdQcmljZVRvdGFsQW1vdW50IhZyZXF1aXJlZElkb0Fzc2V0QW1vdW50Ig9jYWxsZXJBZGRyZXNzNTgiEGNsYWltUmVzdWx0VHVwbGUiCm91dEFzc2V0SWQiGmNsYWltZWRQcmljZUFtb3VudEZyb21EaWZmIh1jbGFpbWVkSWRvQXNzZXRBbW91bnRGcm9tRGlmZiINJHQwMjIwNTQyMjQ5OCIidXBkYXRlZFBlcmlvZFRvdGFsQXZhaWxhYmxlVG9DbGFpbSIhdXBkYXRlZFBlcmlvZFVzZXJBdmFpbGFibGVUb0NsYWltIg5ldmFsdWF0ZVJlc3VsdCIbYXZhaWxhYmxlUHJpY2VBbW91bnRUb0NsYWltIhBsYXN0Q2xhaW1FbnRyaWVzIhNpbnZlc3RvclRvdGFsQW1vdW50IhdpbnZlc3RvclJlbWFpbmluZ0Ftb3VudCIZaW52ZXN0b3JQcmljZUFzc2V0QmFsYW5jZSIXaW52ZXN0b3JJZG9Bc3NldEJhbGFuY2UiGWludmVzdG9yTGFzdENsYWltZWRIZWlnaHQiDm5ld0ludmVzdEFycmF5IgZ0b3RhbHMiEXRvdGFsc1RvdGFsQW1vdW50IhV0b3RhbHNSZW1haW5pbmdBbW91bnQiHXRvdGFsc0NsYWltZWRQcmljZUFzc2V0QW1vdW50Iht0b3RhbHNDbGFpbWVkSWRvQXNzZXRBbW91bnQiF3RvdGFsc0xhc3RDbGFpbWVkSGVpZ2h0IhhuZXdUb3RhbHNSZW1haW5pbmdBbW91bnQiDW5ld1RvdGFsQXJyYXkiF25ld1RvdGFsUmVtYWluaW5nQW1vdW50Ihh1cGRhdGVkUHJpY2VBc3NldEJhbGFuY2UiHHByaWNlQXNzZXRCYWxhbmNlSWRvRGVjaW1hbHMiFGNoZWNrVW5jbGFpbWVkQXNzZXRzIghpbnZlc3RvciIcaW52ZXN0b3JSZW1haW5pbmdBbW91bnRDaGVjayILbmV3SW52ZXN0b3IiCW5ld1RvdGFscyIVYXZhaWxhYmxlVG9DbGFpbUFycmF5IhlhdmFpbGFibGVJZG9BbW91bnRUb0NsYWltIi5hdmFpbGFibGVJZG9BbW91bnRUb0NsYWltV2l0aFByaWNlQXNzZXRCYWxhbmNlIg0kdDAzMzczNzM0MTQ5IhZjdXJyZW50UGVyaW9kRW5kSGVpZ2h0Ihp1c2VyVG90YWxQcmljZUFzc2V0Q2xhaW1lZCIMcmVzdWx0U3RyaW5nIgxwZXJpb2RMZW5naHQiE3VzZXJQZXJpb2RBbGxvd2FuY2UiFHRvdGFsUGVyaW9kQWxsb3dhbmNlIhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSILY2hlY2tDYWxsZXIiFWNoZWNrTWFuYWdlclB1YmxpY0tleSICcG0iBWhhc1BNIgdjaGVja1BNIgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXkAAABDAQAA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", "chainId": 84, "height": 2341399, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2qW17c8JnPrwt2Bw4FoKQzpxMSG4bt4Hu6iqKS9WCJre Next: none Diff:
Old | New | Differences | |
---|---|---|---|
134 | 134 | func aD (aE) = makeString(["%s%s", "priceAssetBalance", aE], c) | |
135 | 135 | ||
136 | 136 | ||
137 | - | func aF (aE) = makeString(["%s%s", " | |
137 | + | func aF (aE) = makeString(["%s%s", "investorRemainingAmount", aE], c) | |
138 | 138 | ||
139 | 139 | ||
140 | - | func aG () = "%s | |
140 | + | func aG () = makeString(["%s", "totalRemainingAmount"], c) | |
141 | 141 | ||
142 | 142 | ||
143 | - | func aH () = "%s__ | |
143 | + | func aH () = "%s__managerPublicKey" | |
144 | 144 | ||
145 | 145 | ||
146 | - | func aI () = | |
146 | + | func aI () = "%s__pendingManagerPublicKey" | |
147 | 147 | ||
148 | 148 | ||
149 | - | func aJ ( | |
149 | + | func aJ () = split(a(ah()), c) | |
150 | 150 | ||
151 | 151 | ||
152 | - | func | |
152 | + | func aK (aL) = split(valueOrElse(getString(aL), Y("0", "0", "0", "0", "0")), c) | |
153 | 153 | ||
154 | 154 | ||
155 | - | func aM ( | |
155 | + | func aM () = aK(ak()) | |
156 | 156 | ||
157 | 157 | ||
158 | - | func aN (aj) = | |
158 | + | func aN (aj) = aK(ai(aj)) | |
159 | 159 | ||
160 | 160 | ||
161 | - | ||
161 | + | func aO (aj) = split(a(ai(aj)), c) | |
162 | 162 | ||
163 | - | let aP = 1 | |
164 | 163 | ||
165 | - | let | |
164 | + | let aP = 0 | |
166 | 165 | ||
167 | - | let | |
166 | + | let aQ = 1 | |
168 | 167 | ||
169 | - | func aS (b,aT,aU,aV,aW) = { | |
170 | - | let Z = parseIntValue(aT[T]) | |
171 | - | let aa = parseIntValue(aT[U]) | |
172 | - | let ab = parseIntValue(aT[V]) | |
173 | - | let ac = parseIntValue(aT[W]) | |
174 | - | let ad = parseIntValue(aT[X]) | |
175 | - | let aX = (Z + aU[aO]) | |
176 | - | let aY = (aa + aU[aP]) | |
177 | - | let aZ = aI() | |
178 | - | let O = aZ[D] | |
179 | - | let ba = value(assetInfo(fromBase58String(O))).decimals | |
180 | - | let bb = fraction(aW, e, pow(10, 0, ba, 0, 0, DOWN)) | |
181 | - | let bc = ((ab + aU[aQ]) - aW) | |
182 | - | let bd = ((ac + aU[aR]) + bb) | |
183 | - | let be = if ((0 > aY)) | |
168 | + | let aR = 2 | |
169 | + | ||
170 | + | let aS = 3 | |
171 | + | ||
172 | + | func aT (b,aU,aV,aW,aX) = { | |
173 | + | let Z = parseIntValue(aU[T]) | |
174 | + | let aa = parseIntValue(aU[U]) | |
175 | + | let ab = parseIntValue(aU[V]) | |
176 | + | let ac = parseIntValue(aU[W]) | |
177 | + | let ad = parseIntValue(aU[X]) | |
178 | + | let aY = (Z + aV[aP]) | |
179 | + | let aZ = (aa + aV[aQ]) | |
180 | + | let ba = aJ() | |
181 | + | let O = ba[D] | |
182 | + | let bb = value(assetInfo(fromBase58String(O))).decimals | |
183 | + | let bc = fraction(aX, e, pow(10, 0, bb, 0, 0, DOWN)) | |
184 | + | let bd = ((ab + aV[aR]) - aX) | |
185 | + | let be = ((ac + aV[aS]) + bc) | |
186 | + | let bf = if ((0 > aZ)) | |
184 | 187 | then { | |
185 | - | let | |
186 | - | let | |
188 | + | let bg = ((aY - bd) - be) | |
189 | + | let bh = if ((0 > bg)) | |
187 | 190 | then 0 | |
188 | - | else | |
189 | - | StringEntry(b, ae( | |
191 | + | else bg | |
192 | + | StringEntry(b, ae(aY, bh, bd, be, aW)) | |
190 | 193 | } | |
191 | - | else StringEntry(b, ae( | |
192 | - | | |
194 | + | else StringEntry(b, ae(aY, aZ, bd, be, aW)) | |
195 | + | bf | |
193 | 196 | } | |
194 | 197 | ||
195 | 198 | ||
196 | - | func | |
199 | + | func bi (aj,m,ag,bj) = StringEntry(al("invest", aj, toBase58String(bj)), af(m, ag)) | |
197 | 200 | ||
198 | 201 | ||
199 | - | func | |
202 | + | func bk (aj,m,ag,bj) = StringEntry(al("claim", aj, toBase58String(bj)), af(m, ag)) | |
200 | 203 | ||
201 | 204 | ||
202 | - | func | |
203 | - | let | |
204 | - | let J = parseIntValue( | |
205 | - | let K = parseIntValue( | |
206 | - | let | |
207 | - | let o = parseIntValue( | |
208 | - | let L = parseIntValue( | |
209 | - | let M = | |
210 | - | let | |
211 | - | let N = parseIntValue( | |
212 | - | let O = | |
213 | - | let | |
214 | - | let P = parseIntValue( | |
215 | - | let | |
216 | - | let | |
217 | - | let | |
218 | - | let | |
219 | - | let | |
205 | + | func bl (bm,aj,bj) = { | |
206 | + | let ba = aJ() | |
207 | + | let J = parseIntValue(ba[x]) | |
208 | + | let K = parseIntValue(ba[y]) | |
209 | + | let bn = (J + K) | |
210 | + | let o = parseIntValue(ba[z]) | |
211 | + | let L = parseIntValue(ba[A]) | |
212 | + | let M = ba[B] | |
213 | + | let bo = fromBase58String(M) | |
214 | + | let N = parseIntValue(ba[C]) | |
215 | + | let O = ba[D] | |
216 | + | let bp = fromBase58String(O) | |
217 | + | let P = parseIntValue(ba[E]) | |
218 | + | let bq = toString(aj) | |
219 | + | let br = aO(bq) | |
220 | + | let bs = parseIntValue(br[T]) | |
221 | + | let bt = parseIntValue(br[X]) | |
222 | + | let bu = if ((J >= bt)) | |
220 | 223 | then J | |
221 | - | else | |
222 | - | let | |
223 | - | then | |
224 | + | else bt | |
225 | + | let bv = if ((height > bn)) | |
226 | + | then bn | |
224 | 227 | else if ((J > height)) | |
225 | 228 | then J | |
226 | 229 | else height | |
227 | - | let | |
228 | - | let | |
229 | - | let | |
230 | - | let | |
231 | - | let | |
232 | - | let | |
233 | - | then | |
230 | + | let bw = (bv - bu) | |
231 | + | let bx = fraction(bs, bw, K) | |
232 | + | let by = l(bx, P, o, L, N) | |
233 | + | let bz = (bm == O) | |
234 | + | let bA = valueOrElse(getBoolean(ao()), false) | |
235 | + | let bB = [if (!(if (bz) | |
236 | + | then bA | |
234 | 237 | else false)) | |
235 | 238 | then true | |
236 | 239 | else throw("USDN claim is disabled")] | |
237 | - | if (( | |
238 | - | then if (( | |
239 | - | then $Tuple6([0, -( | |
240 | - | else if (( | |
241 | - | then $Tuple6([0, -( | |
242 | - | else throw(("unsupported assetId: " + | |
240 | + | if ((bB == bB)) | |
241 | + | then if ((bm == O)) | |
242 | + | then $Tuple6([0, -(bx), bx, 0], bx, bp, br, bv, [bx, by]) | |
243 | + | else if ((bm == M)) | |
244 | + | then $Tuple6([0, -(bx), 0, by], by, bo, br, bv, [bx, by]) | |
245 | + | else throw(("unsupported assetId: " + bm)) | |
243 | 246 | else throw("Strict value is not equal to itself.") | |
244 | 247 | } | |
245 | 248 | ||
246 | 249 | ||
247 | - | func | |
248 | - | let | |
249 | - | let | |
250 | - | let | |
251 | - | let | |
252 | - | let | |
253 | - | let | |
250 | + | func bC (O,bq,bD,bE) = { | |
251 | + | let bF = value(getInteger(aw(O))) | |
252 | + | let bG = value(getInteger(ay(O))) | |
253 | + | let bH = value(getInteger(aq())) | |
254 | + | let bI = valueOrElse(getInteger(ar()), 0) | |
255 | + | let bJ = isDefined(getInteger(au(0))) | |
256 | + | let bK = if ((bI > 0)) | |
254 | 257 | then { | |
255 | - | let | |
256 | - | let | |
257 | - | let | |
258 | + | let bL = value(getInteger(as(bI))) | |
259 | + | let bM = value(getInteger(au(bI))) | |
260 | + | let bN = if ((height > bM)) | |
258 | 261 | then { | |
259 | - | let | |
260 | - | let | |
262 | + | let bO = (bI + 1) | |
263 | + | let bP = if ((height > (bM + bH))) | |
261 | 264 | then { | |
262 | - | let | |
263 | - | if (( | |
264 | - | then ((height - | |
265 | - | else (height - | |
265 | + | let bQ = ((height - bM) % bH) | |
266 | + | if ((bQ == 0)) | |
267 | + | then ((height - bH) + 1) | |
268 | + | else (height - bQ) | |
266 | 269 | } | |
267 | - | else ( | |
268 | - | let | |
269 | - | $Tuple3( | |
270 | + | else (bM + 1) | |
271 | + | let bR = ((bP + bH) - 1) | |
272 | + | $Tuple3(bO, bP, bR) | |
270 | 273 | } | |
271 | - | else $Tuple3( | |
272 | - | let | |
273 | - | let | |
274 | - | let | |
275 | - | $Tuple3( | |
274 | + | else $Tuple3(bI, bL, bM) | |
275 | + | let bO = bN._1 | |
276 | + | let bP = bN._2 | |
277 | + | let bR = bN._3 | |
278 | + | $Tuple3(bO, bP, bR) | |
276 | 279 | } | |
277 | - | else if ( | |
280 | + | else if (bJ) | |
278 | 281 | then { | |
279 | - | let | |
280 | - | let | |
281 | - | let | |
282 | + | let bS = value(getInteger(as(0))) | |
283 | + | let bT = value(getInteger(au(0))) | |
284 | + | let bU = if ((height > bT)) | |
282 | 285 | then { | |
283 | - | let | |
284 | - | let | |
285 | - | let | |
286 | - | $Tuple3( | |
286 | + | let bO = (bI + 1) | |
287 | + | let bP = (bT + 1) | |
288 | + | let bR = ((bP + bH) - 1) | |
289 | + | $Tuple3(bO, bP, bR) | |
287 | 290 | } | |
288 | - | else $Tuple3( | |
289 | - | let | |
290 | - | let | |
291 | - | let | |
292 | - | $Tuple3( | |
291 | + | else $Tuple3(bI, bS, bT) | |
292 | + | let bO = bU._1 | |
293 | + | let bP = bU._2 | |
294 | + | let bR = bU._3 | |
295 | + | $Tuple3(bO, bP, bR) | |
293 | 296 | } | |
294 | - | else $Tuple3( | |
295 | - | let | |
296 | - | let | |
297 | - | let | |
298 | - | let | |
299 | - | let | |
300 | - | let | |
301 | - | let | |
302 | - | let | |
303 | - | let | |
304 | - | let | |
305 | - | let | |
306 | - | if ($isInstanceOf( | |
307 | - | then | |
297 | + | else $Tuple3(bI, valueOrElse(getInteger(as(bI)), height), valueOrElse(getInteger(au(bI)), ((height + bH) - 1))) | |
298 | + | let bO = bK._1 | |
299 | + | let bP = bK._2 | |
300 | + | let bR = bK._3 | |
301 | + | let bV = valueOrElse(getInteger(az(O, bO)), bF) | |
302 | + | let bW = valueOrElse(getInteger(aA(O, bO, bq)), bG) | |
303 | + | let aX = valueOrElse(getInteger(aD(bq)), 0) | |
304 | + | let bX = min([(bD + aX), bV, bW]) | |
305 | + | let bY = value(getInteger(av())) | |
306 | + | let bZ = e | |
307 | + | let ca = { | |
308 | + | let cb = invoke(addressFromStringValue(value(getString(aB()))), "putOneTknV2WithoutTakeFeeREADONLY", [bZ, O], nil) | |
309 | + | if ($isInstanceOf(cb, "(Int, Int, Int)")) | |
310 | + | then cb | |
308 | 311 | else throw("Couldn't cast Any to (Int, Int, Int)") | |
309 | 312 | } | |
310 | - | if (( | |
313 | + | if ((ca == ca)) | |
311 | 314 | then { | |
312 | - | let | |
313 | - | let | |
314 | - | let | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | if ($isInstanceOf( | |
319 | - | then | |
315 | + | let cc = ca._3 | |
316 | + | let cd = ca._2 | |
317 | + | let ce = ca._1 | |
318 | + | let cf = value(getString(aC())) | |
319 | + | let cg = { | |
320 | + | let cb = invoke(addressFromStringValue(value(getString(aB()))), "getOneTknV2READONLY", [cf, ce], nil) | |
321 | + | if ($isInstanceOf(cb, "(Int, Int)")) | |
322 | + | then cb | |
320 | 323 | else throw("Couldn't cast Any to (Int, Int)") | |
321 | 324 | } | |
322 | - | if (( | |
325 | + | if ((cg == cg)) | |
323 | 326 | then { | |
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
328 | - | $Tuple10( | |
327 | + | let ch = cg._2 | |
328 | + | let ci = cg._1 | |
329 | + | let cj = fraction(bZ, e, ci) | |
330 | + | let ck = (bR - height) | |
331 | + | $Tuple10(bX, bV, bW, bE, bY, cj, ck, bO, bP, bR) | |
329 | 332 | } | |
330 | 333 | else throw("Strict value is not equal to itself.") | |
331 | 334 | } | |
333 | 336 | } | |
334 | 337 | ||
335 | 338 | ||
336 | - | func | |
337 | - | let j = getString( | |
339 | + | func cl () = { | |
340 | + | let j = getString(aH()) | |
338 | 341 | if ($isInstanceOf(j, "String")) | |
339 | 342 | then { | |
340 | - | let | |
341 | - | fromBase58String( | |
343 | + | let cm = j | |
344 | + | fromBase58String(cm) | |
342 | 345 | } | |
343 | 346 | else if ($isInstanceOf(j, "Unit")) | |
344 | 347 | then unit | |
346 | 349 | } | |
347 | 350 | ||
348 | 351 | ||
349 | - | func | |
350 | - | let j = getString( | |
352 | + | func cn () = { | |
353 | + | let j = getString(aI()) | |
351 | 354 | if ($isInstanceOf(j, "String")) | |
352 | 355 | then { | |
353 | - | let | |
354 | - | fromBase58String( | |
356 | + | let cm = j | |
357 | + | fromBase58String(cm) | |
355 | 358 | } | |
356 | 359 | else if ($isInstanceOf(j, "Unit")) | |
357 | 360 | then unit | |
359 | 362 | } | |
360 | 363 | ||
361 | 364 | ||
362 | - | func | |
363 | - | let | |
364 | - | let j = | |
365 | + | func co (cp) = { | |
366 | + | let cq = throw("Permission denied") | |
367 | + | let j = cl() | |
365 | 368 | if ($isInstanceOf(j, "ByteVector")) | |
366 | 369 | then { | |
367 | - | let | |
368 | - | if (( | |
370 | + | let cr = j | |
371 | + | if ((cp.callerPublicKey == cr)) | |
369 | 372 | then true | |
370 | - | else | |
373 | + | else cq | |
371 | 374 | } | |
372 | 375 | else if ($isInstanceOf(j, "Unit")) | |
373 | - | then if (( | |
376 | + | then if ((cp.caller == this)) | |
374 | 377 | then true | |
375 | - | else | |
378 | + | else cq | |
376 | 379 | else throw("Match error") | |
377 | 380 | } | |
378 | 381 | ||
379 | 382 | ||
380 | - | @Callable( | |
383 | + | @Callable(cp) | |
381 | 384 | func constructor (H,I,J,K,o,O,Q) = { | |
382 | 385 | let L = ((100 * 1000) * 1000) | |
383 | - | let | |
386 | + | let cs = (H + I) | |
384 | 387 | if (isDefined(getString(ah()))) | |
385 | 388 | then throw("already initialized") | |
386 | - | else if (("3PMEHLx1j6zerarZTYfsGqDeeZqQoMpxq5S" != toString( | |
389 | + | else if (("3PMEHLx1j6zerarZTYfsGqDeeZqQoMpxq5S" != toString(cp.caller))) | |
387 | 390 | then throw("not authorized") | |
388 | - | else if ((size( | |
391 | + | else if ((size(cp.payments) != 1)) | |
389 | 392 | then throw("exactly 1 payment must be attached") | |
390 | - | else if (( | |
393 | + | else if ((cs >= J)) | |
391 | 394 | then throw("claimStart must be greater than idoEnd") | |
392 | 395 | else { | |
393 | - | let | |
394 | - | let | |
395 | - | let | |
396 | - | let M = toBase58String( | |
397 | - | let N = pow(10, 0, | |
398 | - | let | |
399 | - | let | |
400 | - | let P = pow(10, 0, | |
401 | - | let | |
402 | - | let | |
403 | - | [StringEntry(ah(), S(H, I, J, K, o, L, M, N, O, P, Q, | |
396 | + | let ct = value(cp.payments[0]) | |
397 | + | let bo = value(ct.assetId) | |
398 | + | let cu = valueOrErrorMessage(assetInfo(bo), "fail to load ido asset info") | |
399 | + | let M = toBase58String(bo) | |
400 | + | let N = pow(10, 0, cu.decimals, 0, 0, DOWN) | |
401 | + | let bp = fromBase58String(O) | |
402 | + | let cv = valueOrErrorMessage(assetInfo(bp), "fail to load price asset info") | |
403 | + | let P = pow(10, 0, cv.decimals, 0, 0, DOWN) | |
404 | + | let cw = aM() | |
405 | + | let cx = [0, 0, 0, 0] | |
406 | + | [StringEntry(ah(), S(H, I, J, K, o, L, M, N, O, P, Q, ct.amount)), aT(ak(), cw, cx, J, 0)] | |
404 | 407 | } | |
405 | 408 | } | |
406 | 409 | ||
407 | 410 | ||
408 | 411 | ||
409 | - | @Callable( | |
412 | + | @Callable(cp) | |
410 | 413 | func invest () = { | |
411 | - | let | |
412 | - | let H = parseIntValue( | |
413 | - | let I = parseIntValue( | |
414 | - | let | |
415 | - | let J = parseIntValue( | |
416 | - | let K = parseIntValue( | |
417 | - | let o = parseIntValue( | |
418 | - | let L = parseIntValue( | |
419 | - | let M = | |
420 | - | let | |
421 | - | let N = parseIntValue( | |
422 | - | let O = | |
423 | - | let | |
424 | - | let P = parseIntValue( | |
425 | - | let | |
426 | - | let aj = toString( | |
414 | + | let ba = aJ() | |
415 | + | let H = parseIntValue(ba[v]) | |
416 | + | let I = parseIntValue(ba[w]) | |
417 | + | let cs = (H + I) | |
418 | + | let J = parseIntValue(ba[x]) | |
419 | + | let K = parseIntValue(ba[y]) | |
420 | + | let o = parseIntValue(ba[z]) | |
421 | + | let L = parseIntValue(ba[A]) | |
422 | + | let M = ba[B] | |
423 | + | let bo = fromBase58String(M) | |
424 | + | let N = parseIntValue(ba[C]) | |
425 | + | let O = ba[D] | |
426 | + | let bp = fromBase58String(O) | |
427 | + | let P = parseIntValue(ba[E]) | |
428 | + | let cy = parseIntValue(ba[F]) | |
429 | + | let aj = toString(cp.caller) | |
427 | 430 | if ((H > height)) | |
428 | 431 | then throw("ido has not been started yet") | |
429 | - | else if ((height > | |
432 | + | else if ((height > cs)) | |
430 | 433 | then throw("ido has been already ended") | |
431 | - | else if ((size( | |
434 | + | else if ((size(cp.payments) != 1)) | |
432 | 435 | then throw("exactly 1 payment is expected") | |
433 | 436 | else { | |
434 | - | let | |
435 | - | let | |
436 | - | let | |
437 | - | if (( | |
438 | - | then throw((("invalid payment asset id: " + toBase58String( | |
437 | + | let ct = value(cp.payments[0]) | |
438 | + | let cz = value(ct.assetId) | |
439 | + | let cA = ct.amount | |
440 | + | if ((cz != bp)) | |
441 | + | then throw((("invalid payment asset id: " + toBase58String(cz)) + " is expected")) | |
439 | 442 | else { | |
440 | - | let | |
441 | - | let | |
442 | - | let | |
443 | - | let | |
444 | - | if (( | |
443 | + | let cB = aN(aj) | |
444 | + | let cw = aM() | |
445 | + | let cC = (parseIntValue(cw[T]) + cA) | |
446 | + | let cD = (cC * 100) | |
447 | + | if ((cD > assetBalance(this, bo))) | |
445 | 448 | then throw("IDO asset has been - sold consider to use smaller payment") | |
446 | 449 | else { | |
447 | - | let | |
448 | - | [ | |
450 | + | let cx = [cA, cA, 0, 0] | |
451 | + | [aT(ai(aj), cB, cx, J, 0), aT(ak(), cw, cx, J, 0), bi(aj, cA, 0, cp.transactionId)] | |
449 | 452 | } | |
450 | 453 | } | |
451 | 454 | } | |
453 | 456 | ||
454 | 457 | ||
455 | 458 | ||
456 | - | @Callable( | |
457 | - | func claim ( | |
458 | - | let | |
459 | - | if (( | |
459 | + | @Callable(cp) | |
460 | + | func claim (bm,bq) = { | |
461 | + | let cE = toString(cp.caller) | |
462 | + | if ((bq != cE)) | |
460 | 463 | then throw("not authorized") | |
461 | 464 | else { | |
462 | - | let | |
463 | - | let O = | |
464 | - | let | |
465 | - | let | |
466 | - | let | |
467 | - | let | |
468 | - | let | |
469 | - | let | |
470 | - | let | |
471 | - | let | |
472 | - | let | |
473 | - | let | |
474 | - | let | |
465 | + | let ba = aJ() | |
466 | + | let O = ba[D] | |
467 | + | let cF = bl(bm, cp.caller, cp.transactionId) | |
468 | + | let cx = cF._1 | |
469 | + | let bD = cF._2 | |
470 | + | let cG = cF._3 | |
471 | + | let br = cF._4 | |
472 | + | let bv = cF._5 | |
473 | + | let cH = cx[aR] | |
474 | + | let cI = cx[aS] | |
475 | + | let aX = valueOrElse(getInteger(aD(bq)), 0) | |
476 | + | let bb = value(assetInfo(fromBase58String(O))).decimals | |
477 | + | let bf = if ((bm == O)) | |
475 | 478 | then { | |
476 | - | let | |
477 | - | let | |
478 | - | let | |
479 | - | let | |
480 | - | let | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
484 | - | let | |
485 | - | let | |
486 | - | let | |
487 | - | let | |
479 | + | let cJ = bC(O, bq, bD, cx[aR]) | |
480 | + | let bX = cJ._1 | |
481 | + | let bV = cJ._2 | |
482 | + | let bW = cJ._3 | |
483 | + | let bE = cJ._4 | |
484 | + | let bY = cJ._5 | |
485 | + | let cj = cJ._6 | |
486 | + | let ck = cJ._7 | |
487 | + | let bO = cJ._8 | |
488 | + | let bP = cJ._9 | |
489 | + | let bR = cJ._10 | |
490 | + | let bB = [if ((bW > 0)) | |
488 | 491 | then true | |
489 | - | else f("unavailable to claim because user period allowance reached"), if (( | |
492 | + | else f("unavailable to claim because user period allowance reached"), if ((bV > 0)) | |
490 | 493 | then true | |
491 | - | else f("unavailable to claim because total period allowance reached"), if (( | |
494 | + | else f("unavailable to claim because total period allowance reached"), if ((bX > 0)) | |
492 | 495 | then true | |
493 | - | else f("nothing to claim"), if (( | |
496 | + | else f("nothing to claim"), if ((bY > cj)) | |
494 | 497 | then true | |
495 | 498 | else f("unavailable to claim because usdn price lower than usdtPriceAssetAllowableRatio")] | |
496 | - | if (( | |
499 | + | if ((bB == bB)) | |
497 | 500 | then { | |
498 | - | let | |
499 | - | let | |
500 | - | let | |
501 | - | then [ScriptTransfer( | |
501 | + | let cK = (bV - bX) | |
502 | + | let cL = (bW - bX) | |
503 | + | let bf = if ((aX > bX)) | |
504 | + | then [ScriptTransfer(cp.caller, bX, cG), IntegerEntry(aD(bq), (aX - bX))] | |
502 | 505 | else { | |
503 | - | let | |
504 | - | if (( | |
506 | + | let cM = split(h(invoke(this, "claimREADONLY", [O, bq], nil)), c) | |
507 | + | if ((cM == cM)) | |
505 | 508 | then { | |
506 | - | let | |
507 | - | let | |
509 | + | let cN = parseIntValue(cM[3]) | |
510 | + | let cO = if ((cN == bX)) | |
508 | 511 | then { | |
509 | - | let cO = parseIntValue(bq[T]) | |
510 | - | let cP = parseIntValue(bq[U]) | |
511 | - | let cQ = parseIntValue(bq[V]) | |
512 | - | let cR = parseIntValue(bq[W]) | |
513 | - | let cS = parseIntValue(bq[X]) | |
514 | - | let cT = [toString(cO), "0", toString(cQ), toString(cR), toString(cS)] | |
515 | - | let cU = aL() | |
516 | - | let cV = parseIntValue(cU[T]) | |
517 | - | let cW = parseIntValue(cU[U]) | |
518 | - | let cX = parseIntValue(cU[U]) | |
519 | - | let cY = parseIntValue(cU[V]) | |
520 | - | let cZ = parseIntValue(cU[X]) | |
521 | - | let da = (cW - cP) | |
522 | - | let db = [toString(cV), toString(da), toString(cX), toString(cY), toString(cZ)] | |
523 | - | [StringEntry(aF(bp), toString(cP)), aS(ai(bp), cT, cw, bu, 0), aS(ak(), db, cw, bu, 0)] | |
512 | + | let cP = parseIntValue(br[T]) | |
513 | + | let cQ = parseIntValue(br[U]) | |
514 | + | let cR = parseIntValue(br[V]) | |
515 | + | let cS = parseIntValue(br[W]) | |
516 | + | let cT = parseIntValue(br[X]) | |
517 | + | let cU = [toString(cP), "0", toString(cR), toString(cS), toString(cT)] | |
518 | + | let cV = aM() | |
519 | + | let cW = parseIntValue(cV[T]) | |
520 | + | let cX = parseIntValue(cV[U]) | |
521 | + | let cY = parseIntValue(cV[U]) | |
522 | + | let cZ = parseIntValue(cV[V]) | |
523 | + | let da = parseIntValue(cV[X]) | |
524 | + | let db = (cX - cQ) | |
525 | + | let dc = [toString(cW), toString(db), toString(cY), toString(cZ), toString(da)] | |
526 | + | let dd = (valueOrElse(getInteger(aG()), 0) - cQ) | |
527 | + | [StringEntry(aF(bq), toString(cQ)), StringEntry(aG(), toString(dd)), aT(ai(bq), cU, cx, bv, 0), aT(ak(), dc, cx, bv, 0)] | |
524 | 528 | } | |
525 | - | else [ | |
526 | - | let | |
527 | - | ([ScriptTransfer( | |
529 | + | else [aT(ai(bq), br, cx, bv, 0), aT(ak(), aM(), cx, bv, 0)] | |
530 | + | let de = ((aX + bD) - bX) | |
531 | + | ([ScriptTransfer(cp.caller, bX, cG), IntegerEntry(aD(bq), de)] ++ cO) | |
528 | 532 | } | |
529 | 533 | else throw("Strict value is not equal to itself.") | |
530 | 534 | } | |
531 | - | $Tuple2(([IntegerEntry(ar(), | |
535 | + | $Tuple2(([IntegerEntry(ar(), bO), IntegerEntry(as(bO), bP), IntegerEntry(au(bO), bR), IntegerEntry(az(O, bO), cK), IntegerEntry(aA(O, bO, bq), cL), bk(bq, bX, cI, cp.transactionId)] ++ bf), unit) | |
532 | 536 | } | |
533 | 537 | else throw("Strict value is not equal to itself.") | |
534 | 538 | } | |
535 | 539 | else { | |
536 | - | let | |
537 | - | $Tuple2([ScriptTransfer( | |
540 | + | let df = fraction(aX, e, pow(10, 0, bb, 0, 0, DOWN)) | |
541 | + | $Tuple2([ScriptTransfer(cp.caller, (bD + df), cG), IntegerEntry(aD(bq), 0), aT(ai(bq), br, cx, bv, aX), aT(ak(), aM(), cx, bv, aX), bk(bq, cH, (cI + df), cp.transactionId)], unit) | |
538 | 542 | } | |
539 | - | | |
543 | + | bf | |
540 | 544 | } | |
541 | 545 | } | |
542 | 546 | ||
543 | 547 | ||
544 | 548 | ||
545 | - | @Callable( | |
546 | - | func cleanRemaingAmount ( | |
547 | - | let O = | |
548 | - | let | |
549 | - | if (( | |
549 | + | @Callable(cp) | |
550 | + | func cleanRemaingAmount (bq) = { | |
551 | + | let O = aJ()[D] | |
552 | + | let cM = split(h(invoke(this, "claimREADONLY", [O, bq], nil)), c) | |
553 | + | if ((cM == cM)) | |
550 | 554 | then { | |
551 | - | let | |
552 | - | let | |
555 | + | let cN = parseIntValue(cM[3]) | |
556 | + | let dg = if ((cN == 0)) | |
553 | 557 | then true | |
554 | 558 | else f("user have unclaimed assets") | |
555 | - | if (( | |
559 | + | if ((dg == dg)) | |
556 | 560 | then { | |
557 | - | let | |
558 | - | let | |
559 | - | let | |
560 | - | let | |
561 | - | let | |
562 | - | let | |
563 | - | let | |
561 | + | let dh = split(value(getString(ai(bq))), c) | |
562 | + | let cP = parseIntValue(dh[T]) | |
563 | + | let cQ = parseIntValue(dh[U]) | |
564 | + | let cR = parseIntValue(dh[V]) | |
565 | + | let cS = parseIntValue(dh[W]) | |
566 | + | let cT = parseIntValue(dh[X]) | |
567 | + | let di = if ((cQ != 0)) | |
564 | 568 | then true | |
565 | 569 | else f("investorRemainingAmount already zero") | |
566 | - | if (( | |
570 | + | if ((di == di)) | |
567 | 571 | then { | |
568 | - | let dh = makeString(["%d%d%d%d%d", toString(cO), "0", toString(cQ), toString(cR), toString(cS)], c) | |
569 | - | let cU = split(value(getString(ak())), c) | |
570 | - | let cV = parseIntValue(cU[T]) | |
571 | - | let cW = parseIntValue(cU[U]) | |
572 | - | let cX = parseIntValue(cU[U]) | |
573 | - | let cY = parseIntValue(cU[V]) | |
574 | - | let cZ = parseIntValue(cU[X]) | |
575 | - | let di = makeString(["%d%d%d%d%d", toString(cV), toString((cW - cP)), toString(cX), toString(cY), toString(cZ)], c) | |
576 | - | [StringEntry(aF(bp), toString(cP)), StringEntry(ai(bp), dh), StringEntry(ak(), di)] | |
572 | + | let dj = makeString(["%d%d%d%d%d", toString(cP), "0", toString(cR), toString(cS), toString(cT)], c) | |
573 | + | let cV = split(value(getString(ak())), c) | |
574 | + | let cW = parseIntValue(cV[T]) | |
575 | + | let cX = parseIntValue(cV[U]) | |
576 | + | let cY = parseIntValue(cV[U]) | |
577 | + | let cZ = parseIntValue(cV[V]) | |
578 | + | let da = parseIntValue(cV[X]) | |
579 | + | let dk = makeString(["%d%d%d%d%d", toString(cW), toString((cX - cQ)), toString(cY), toString(cZ), toString(da)], c) | |
580 | + | let dd = (valueOrElse(getInteger(aG()), 0) - cQ) | |
581 | + | [StringEntry(aF(bq), toString(cQ)), StringEntry(aG(), toString(dd)), StringEntry(ai(bq), dj), StringEntry(ak(), dk)] | |
577 | 582 | } | |
578 | 583 | else throw("Strict value is not equal to itself.") | |
579 | 584 | } | |
584 | 589 | ||
585 | 590 | ||
586 | 591 | ||
587 | - | @Callable( | |
588 | - | func claimREADONLY ( | |
589 | - | let | |
590 | - | let | |
591 | - | let | |
592 | - | let | |
593 | - | let | |
594 | - | let | |
595 | - | let | |
596 | - | let | |
597 | - | let | |
598 | - | $Tuple2(nil, makeString(["%s%d%d", | |
592 | + | @Callable(cp) | |
593 | + | func claimREADONLY (bm,bq) = { | |
594 | + | let cF = bl(bm, addressFromStringValue(bq), fromBase58String("")) | |
595 | + | let cx = cF._1 | |
596 | + | let bD = cF._2 | |
597 | + | let cG = cF._3 | |
598 | + | let br = cF._4 | |
599 | + | let bv = cF._5 | |
600 | + | let dl = cF._6 | |
601 | + | let cN = dl[0] | |
602 | + | let dm = dl[1] | |
603 | + | $Tuple2(nil, makeString(["%s%d%d", bq, toString(cN), toString(dm)], c)) | |
599 | 604 | } | |
600 | 605 | ||
601 | 606 | ||
602 | 607 | ||
603 | - | @Callable( | |
604 | - | func claimV2READONLY ( | |
605 | - | let | |
606 | - | let | |
607 | - | let | |
608 | - | let | |
609 | - | let | |
610 | - | let | |
611 | - | let | |
612 | - | let | |
613 | - | let | |
614 | - | let | |
615 | - | let O = | |
616 | - | let | |
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | let | |
621 | - | let | |
622 | - | let | |
623 | - | let | |
624 | - | let | |
625 | - | let | |
626 | - | let | |
627 | - | let | |
628 | - | let | |
629 | - | let | |
630 | - | let | |
631 | - | let | |
632 | - | let | |
608 | + | @Callable(cp) | |
609 | + | func claimV2READONLY (bm,bq) = { | |
610 | + | let cF = bl(bm, addressFromStringValue(bq), fromBase58String("")) | |
611 | + | let cx = cF._1 | |
612 | + | let bD = cF._2 | |
613 | + | let cG = cF._3 | |
614 | + | let br = cF._4 | |
615 | + | let bv = cF._5 | |
616 | + | let dl = cF._6 | |
617 | + | let cN = dl[0] | |
618 | + | let dm = dl[1] | |
619 | + | let ba = aJ() | |
620 | + | let O = ba[D] | |
621 | + | let aX = valueOrElse(getInteger(aD(bq)), 0) | |
622 | + | let df = (aX * 100) | |
623 | + | let dn = (dm + df) | |
624 | + | let do = bC(O, bq, bD, cx[aR]) | |
625 | + | let bX = do._1 | |
626 | + | let bV = do._2 | |
627 | + | let bW = do._3 | |
628 | + | let bE = do._4 | |
629 | + | let bY = do._5 | |
630 | + | let cj = do._6 | |
631 | + | let ck = do._7 | |
632 | + | let bO = do._8 | |
633 | + | let bP = do._9 | |
634 | + | let bR = do._10 | |
635 | + | let dp = valueOrElse(getInteger(au(bO)), 0) | |
636 | + | let dq = (parseIntValue(aO(bq)[V]) - aX) | |
637 | + | let dr = if ((height > dp)) | |
633 | 638 | then { | |
634 | - | let | |
635 | - | let | |
636 | - | let | |
637 | - | makeString(["%d%d%d%d%d%d", toString( | |
639 | + | let ds = value(getInteger(aq())) | |
640 | + | let dt = value(getInteger(ay(O))) | |
641 | + | let du = value(getInteger(aw(O))) | |
642 | + | makeString(["%d%d%d%d%d%d", toString(dn), toString(dt), toString(du), toString(bY), toString(cj), toString(ds), toString(dq)], c) | |
638 | 643 | } | |
639 | - | else makeString(["%d%d%d%d%d%d", toString( | |
640 | - | $Tuple2(nil, | |
644 | + | else makeString(["%d%d%d%d%d%d", toString(dn), toString(bX), toString(bV), toString(bY), toString(cj), toString(ck), toString(dq)], c) | |
645 | + | $Tuple2(nil, dr) | |
641 | 646 | } | |
642 | 647 | ||
643 | 648 | ||
644 | 649 | ||
645 | - | @Callable( | |
646 | - | func setManager ( | |
647 | - | let | |
648 | - | if (( | |
650 | + | @Callable(cp) | |
651 | + | func setManager (dv) = { | |
652 | + | let dw = co(cp) | |
653 | + | if ((dw == dw)) | |
649 | 654 | then { | |
650 | - | let | |
651 | - | if (( | |
652 | - | then [StringEntry( | |
655 | + | let dx = fromBase58String(dv) | |
656 | + | if ((dx == dx)) | |
657 | + | then [StringEntry(aI(), dv)] | |
653 | 658 | else throw("Strict value is not equal to itself.") | |
654 | 659 | } | |
655 | 660 | else throw("Strict value is not equal to itself.") | |
657 | 662 | ||
658 | 663 | ||
659 | 664 | ||
660 | - | @Callable( | |
665 | + | @Callable(cp) | |
661 | 666 | func confirmManager () = { | |
662 | - | let | |
663 | - | let | |
667 | + | let dy = cn() | |
668 | + | let dz = if (isDefined(dy)) | |
664 | 669 | then true | |
665 | 670 | else throw("No pending manager") | |
666 | - | if (( | |
671 | + | if ((dz == dz)) | |
667 | 672 | then { | |
668 | - | let | |
673 | + | let dA = if ((cp.callerPublicKey == value(dy))) | |
669 | 674 | then true | |
670 | 675 | else throw("You are not pending manager") | |
671 | - | if (( | |
672 | - | then [StringEntry( | |
676 | + | if ((dA == dA)) | |
677 | + | then [StringEntry(aH(), toBase58String(value(dy))), DeleteEntry(aI())] | |
673 | 678 | else throw("Strict value is not equal to itself.") | |
674 | 679 | } | |
675 | 680 | else throw("Strict value is not equal to itself.") | |
676 | 681 | } | |
677 | 682 | ||
678 | 683 | ||
679 | - | @Verifier( | |
680 | - | func | |
681 | - | let | |
682 | - | let j = | |
684 | + | @Verifier(dB) | |
685 | + | func dC () = { | |
686 | + | let dD = { | |
687 | + | let j = cl() | |
683 | 688 | if ($isInstanceOf(j, "ByteVector")) | |
684 | 689 | then { | |
685 | - | let | |
686 | - | | |
690 | + | let cr = j | |
691 | + | cr | |
687 | 692 | } | |
688 | 693 | else if ($isInstanceOf(j, "Unit")) | |
689 | - | then | |
694 | + | then dB.senderPublicKey | |
690 | 695 | else throw("Match error") | |
691 | 696 | } | |
692 | - | sigVerify( | |
697 | + | sigVerify(dB.bodyBytes, dB.proofs[0], dD) | |
693 | 698 | } | |
694 | 699 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func a (b) = valueOrErrorMessage(getString(b), (("mandatory this." + b) + " is not defined")) | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | let c = "__" | |
8 | 8 | ||
9 | 9 | let d = toBigInt(1000000000000000000) | |
10 | 10 | ||
11 | 11 | let e = 100000000 | |
12 | 12 | ||
13 | 13 | func f (g) = throw(makeString(["ido.ride:", g], " ")) | |
14 | 14 | ||
15 | 15 | ||
16 | 16 | func h (i) = { | |
17 | 17 | let j = i | |
18 | 18 | if ($isInstanceOf(j, "String")) | |
19 | 19 | then { | |
20 | 20 | let k = j | |
21 | 21 | k | |
22 | 22 | } | |
23 | 23 | else throw("fail to cast into String") | |
24 | 24 | } | |
25 | 25 | ||
26 | 26 | ||
27 | 27 | func l (m,n,o,p,q) = { | |
28 | 28 | let r = toBigInt(n) | |
29 | 29 | let s = toBigInt(q) | |
30 | 30 | let t = fraction(toBigInt(m), d, r) | |
31 | 31 | let u = fraction(t, toBigInt(p), toBigInt(o)) | |
32 | 32 | toInt(fraction(u, toBigInt(q), d)) | |
33 | 33 | } | |
34 | 34 | ||
35 | 35 | ||
36 | 36 | let v = 1 | |
37 | 37 | ||
38 | 38 | let w = 2 | |
39 | 39 | ||
40 | 40 | let x = 3 | |
41 | 41 | ||
42 | 42 | let y = 4 | |
43 | 43 | ||
44 | 44 | let z = 5 | |
45 | 45 | ||
46 | 46 | let A = 6 | |
47 | 47 | ||
48 | 48 | let B = 7 | |
49 | 49 | ||
50 | 50 | let C = 8 | |
51 | 51 | ||
52 | 52 | let D = 9 | |
53 | 53 | ||
54 | 54 | let E = 10 | |
55 | 55 | ||
56 | 56 | let F = 11 | |
57 | 57 | ||
58 | 58 | func G (H,I,J,K,o,L,M,N,O,P,Q,R) = makeString(["%d%d%d%d%d%d%s%d%s%d%d%d", H, I, J, K, o, L, M, N, O, P, Q, R], c) | |
59 | 59 | ||
60 | 60 | ||
61 | 61 | func S (H,I,J,K,o,L,M,N,O,P,Q,R) = G(toString(H), toString(I), toString(J), toString(K), toString(o), toString(L), M, toString(N), O, toString(P), toString(Q), toString(R)) | |
62 | 62 | ||
63 | 63 | ||
64 | 64 | let T = 1 | |
65 | 65 | ||
66 | 66 | let U = 2 | |
67 | 67 | ||
68 | 68 | let V = 3 | |
69 | 69 | ||
70 | 70 | let W = 4 | |
71 | 71 | ||
72 | 72 | let X = 5 | |
73 | 73 | ||
74 | 74 | func Y (Z,aa,ab,ac,ad) = makeString(["%d%d%d%d%d", Z, aa, ab, ac, ad], c) | |
75 | 75 | ||
76 | 76 | ||
77 | 77 | func ae (Z,aa,ab,ac,ad) = Y(toString(Z), toString(aa), toString(ab), toString(ac), toString(ad)) | |
78 | 78 | ||
79 | 79 | ||
80 | 80 | func af (m,ag) = makeString(["%d%d%d%d", toString(height), toString(lastBlock.timestamp), toString(m), toString(ag)], c) | |
81 | 81 | ||
82 | 82 | ||
83 | 83 | func ah () = "%s__config" | |
84 | 84 | ||
85 | 85 | ||
86 | 86 | func ai (aj) = ("%s__" + aj) | |
87 | 87 | ||
88 | 88 | ||
89 | 89 | func ak () = "%s__totals" | |
90 | 90 | ||
91 | 91 | ||
92 | 92 | func al (am,aj,an) = makeString(["%s%s%s%s__history", am, aj, an], c) | |
93 | 93 | ||
94 | 94 | ||
95 | 95 | func ao () = "%s__usdnClaimDisabled" | |
96 | 96 | ||
97 | 97 | ||
98 | 98 | func ap () = "%s__usdnClaimEndHeight" | |
99 | 99 | ||
100 | 100 | ||
101 | 101 | func aq () = makeString(["%s", "periodLength"], c) | |
102 | 102 | ||
103 | 103 | ||
104 | 104 | func ar () = makeString(["%s", "currentPeriod"], c) | |
105 | 105 | ||
106 | 106 | ||
107 | 107 | func as (at) = makeString(["%s%s", "periodStartHeight", toString(at)], c) | |
108 | 108 | ||
109 | 109 | ||
110 | 110 | func au (at) = makeString(["%s%s", "periodEndHeight", toString(at)], c) | |
111 | 111 | ||
112 | 112 | ||
113 | 113 | func av () = makeString(["%s", "usdtPriceAssetAllowableRatio"], c) | |
114 | 114 | ||
115 | 115 | ||
116 | 116 | func aw (ax) = makeString(["%s%s", "totalPeriodAllowance", ax], c) | |
117 | 117 | ||
118 | 118 | ||
119 | 119 | func ay (ax) = makeString(["%s%s", "userPeriodAllowance", ax], c) | |
120 | 120 | ||
121 | 121 | ||
122 | 122 | func az (ax,at) = makeString(["%s%s%s", "periodTotalAvailableToClaim", ax, toString(at)], c) | |
123 | 123 | ||
124 | 124 | ||
125 | 125 | func aA (ax,at,aj) = makeString(["%s%s%s%s", "periodUserAvailableToClaim", ax, toString(at), aj], c) | |
126 | 126 | ||
127 | 127 | ||
128 | 128 | func aB () = makeString(["%s", "usdtPriceAssetStablePool"], c) | |
129 | 129 | ||
130 | 130 | ||
131 | 131 | func aC () = makeString(["%s", "usdtAssetId"], c) | |
132 | 132 | ||
133 | 133 | ||
134 | 134 | func aD (aE) = makeString(["%s%s", "priceAssetBalance", aE], c) | |
135 | 135 | ||
136 | 136 | ||
137 | - | func aF (aE) = makeString(["%s%s", " | |
137 | + | func aF (aE) = makeString(["%s%s", "investorRemainingAmount", aE], c) | |
138 | 138 | ||
139 | 139 | ||
140 | - | func aG () = "%s | |
140 | + | func aG () = makeString(["%s", "totalRemainingAmount"], c) | |
141 | 141 | ||
142 | 142 | ||
143 | - | func aH () = "%s__ | |
143 | + | func aH () = "%s__managerPublicKey" | |
144 | 144 | ||
145 | 145 | ||
146 | - | func aI () = | |
146 | + | func aI () = "%s__pendingManagerPublicKey" | |
147 | 147 | ||
148 | 148 | ||
149 | - | func aJ ( | |
149 | + | func aJ () = split(a(ah()), c) | |
150 | 150 | ||
151 | 151 | ||
152 | - | func | |
152 | + | func aK (aL) = split(valueOrElse(getString(aL), Y("0", "0", "0", "0", "0")), c) | |
153 | 153 | ||
154 | 154 | ||
155 | - | func aM ( | |
155 | + | func aM () = aK(ak()) | |
156 | 156 | ||
157 | 157 | ||
158 | - | func aN (aj) = | |
158 | + | func aN (aj) = aK(ai(aj)) | |
159 | 159 | ||
160 | 160 | ||
161 | - | ||
161 | + | func aO (aj) = split(a(ai(aj)), c) | |
162 | 162 | ||
163 | - | let aP = 1 | |
164 | 163 | ||
165 | - | let | |
164 | + | let aP = 0 | |
166 | 165 | ||
167 | - | let | |
166 | + | let aQ = 1 | |
168 | 167 | ||
169 | - | func aS (b,aT,aU,aV,aW) = { | |
170 | - | let Z = parseIntValue(aT[T]) | |
171 | - | let aa = parseIntValue(aT[U]) | |
172 | - | let ab = parseIntValue(aT[V]) | |
173 | - | let ac = parseIntValue(aT[W]) | |
174 | - | let ad = parseIntValue(aT[X]) | |
175 | - | let aX = (Z + aU[aO]) | |
176 | - | let aY = (aa + aU[aP]) | |
177 | - | let aZ = aI() | |
178 | - | let O = aZ[D] | |
179 | - | let ba = value(assetInfo(fromBase58String(O))).decimals | |
180 | - | let bb = fraction(aW, e, pow(10, 0, ba, 0, 0, DOWN)) | |
181 | - | let bc = ((ab + aU[aQ]) - aW) | |
182 | - | let bd = ((ac + aU[aR]) + bb) | |
183 | - | let be = if ((0 > aY)) | |
168 | + | let aR = 2 | |
169 | + | ||
170 | + | let aS = 3 | |
171 | + | ||
172 | + | func aT (b,aU,aV,aW,aX) = { | |
173 | + | let Z = parseIntValue(aU[T]) | |
174 | + | let aa = parseIntValue(aU[U]) | |
175 | + | let ab = parseIntValue(aU[V]) | |
176 | + | let ac = parseIntValue(aU[W]) | |
177 | + | let ad = parseIntValue(aU[X]) | |
178 | + | let aY = (Z + aV[aP]) | |
179 | + | let aZ = (aa + aV[aQ]) | |
180 | + | let ba = aJ() | |
181 | + | let O = ba[D] | |
182 | + | let bb = value(assetInfo(fromBase58String(O))).decimals | |
183 | + | let bc = fraction(aX, e, pow(10, 0, bb, 0, 0, DOWN)) | |
184 | + | let bd = ((ab + aV[aR]) - aX) | |
185 | + | let be = ((ac + aV[aS]) + bc) | |
186 | + | let bf = if ((0 > aZ)) | |
184 | 187 | then { | |
185 | - | let | |
186 | - | let | |
188 | + | let bg = ((aY - bd) - be) | |
189 | + | let bh = if ((0 > bg)) | |
187 | 190 | then 0 | |
188 | - | else | |
189 | - | StringEntry(b, ae( | |
191 | + | else bg | |
192 | + | StringEntry(b, ae(aY, bh, bd, be, aW)) | |
190 | 193 | } | |
191 | - | else StringEntry(b, ae( | |
192 | - | | |
194 | + | else StringEntry(b, ae(aY, aZ, bd, be, aW)) | |
195 | + | bf | |
193 | 196 | } | |
194 | 197 | ||
195 | 198 | ||
196 | - | func | |
199 | + | func bi (aj,m,ag,bj) = StringEntry(al("invest", aj, toBase58String(bj)), af(m, ag)) | |
197 | 200 | ||
198 | 201 | ||
199 | - | func | |
202 | + | func bk (aj,m,ag,bj) = StringEntry(al("claim", aj, toBase58String(bj)), af(m, ag)) | |
200 | 203 | ||
201 | 204 | ||
202 | - | func | |
203 | - | let | |
204 | - | let J = parseIntValue( | |
205 | - | let K = parseIntValue( | |
206 | - | let | |
207 | - | let o = parseIntValue( | |
208 | - | let L = parseIntValue( | |
209 | - | let M = | |
210 | - | let | |
211 | - | let N = parseIntValue( | |
212 | - | let O = | |
213 | - | let | |
214 | - | let P = parseIntValue( | |
215 | - | let | |
216 | - | let | |
217 | - | let | |
218 | - | let | |
219 | - | let | |
205 | + | func bl (bm,aj,bj) = { | |
206 | + | let ba = aJ() | |
207 | + | let J = parseIntValue(ba[x]) | |
208 | + | let K = parseIntValue(ba[y]) | |
209 | + | let bn = (J + K) | |
210 | + | let o = parseIntValue(ba[z]) | |
211 | + | let L = parseIntValue(ba[A]) | |
212 | + | let M = ba[B] | |
213 | + | let bo = fromBase58String(M) | |
214 | + | let N = parseIntValue(ba[C]) | |
215 | + | let O = ba[D] | |
216 | + | let bp = fromBase58String(O) | |
217 | + | let P = parseIntValue(ba[E]) | |
218 | + | let bq = toString(aj) | |
219 | + | let br = aO(bq) | |
220 | + | let bs = parseIntValue(br[T]) | |
221 | + | let bt = parseIntValue(br[X]) | |
222 | + | let bu = if ((J >= bt)) | |
220 | 223 | then J | |
221 | - | else | |
222 | - | let | |
223 | - | then | |
224 | + | else bt | |
225 | + | let bv = if ((height > bn)) | |
226 | + | then bn | |
224 | 227 | else if ((J > height)) | |
225 | 228 | then J | |
226 | 229 | else height | |
227 | - | let | |
228 | - | let | |
229 | - | let | |
230 | - | let | |
231 | - | let | |
232 | - | let | |
233 | - | then | |
230 | + | let bw = (bv - bu) | |
231 | + | let bx = fraction(bs, bw, K) | |
232 | + | let by = l(bx, P, o, L, N) | |
233 | + | let bz = (bm == O) | |
234 | + | let bA = valueOrElse(getBoolean(ao()), false) | |
235 | + | let bB = [if (!(if (bz) | |
236 | + | then bA | |
234 | 237 | else false)) | |
235 | 238 | then true | |
236 | 239 | else throw("USDN claim is disabled")] | |
237 | - | if (( | |
238 | - | then if (( | |
239 | - | then $Tuple6([0, -( | |
240 | - | else if (( | |
241 | - | then $Tuple6([0, -( | |
242 | - | else throw(("unsupported assetId: " + | |
240 | + | if ((bB == bB)) | |
241 | + | then if ((bm == O)) | |
242 | + | then $Tuple6([0, -(bx), bx, 0], bx, bp, br, bv, [bx, by]) | |
243 | + | else if ((bm == M)) | |
244 | + | then $Tuple6([0, -(bx), 0, by], by, bo, br, bv, [bx, by]) | |
245 | + | else throw(("unsupported assetId: " + bm)) | |
243 | 246 | else throw("Strict value is not equal to itself.") | |
244 | 247 | } | |
245 | 248 | ||
246 | 249 | ||
247 | - | func | |
248 | - | let | |
249 | - | let | |
250 | - | let | |
251 | - | let | |
252 | - | let | |
253 | - | let | |
250 | + | func bC (O,bq,bD,bE) = { | |
251 | + | let bF = value(getInteger(aw(O))) | |
252 | + | let bG = value(getInteger(ay(O))) | |
253 | + | let bH = value(getInteger(aq())) | |
254 | + | let bI = valueOrElse(getInteger(ar()), 0) | |
255 | + | let bJ = isDefined(getInteger(au(0))) | |
256 | + | let bK = if ((bI > 0)) | |
254 | 257 | then { | |
255 | - | let | |
256 | - | let | |
257 | - | let | |
258 | + | let bL = value(getInteger(as(bI))) | |
259 | + | let bM = value(getInteger(au(bI))) | |
260 | + | let bN = if ((height > bM)) | |
258 | 261 | then { | |
259 | - | let | |
260 | - | let | |
262 | + | let bO = (bI + 1) | |
263 | + | let bP = if ((height > (bM + bH))) | |
261 | 264 | then { | |
262 | - | let | |
263 | - | if (( | |
264 | - | then ((height - | |
265 | - | else (height - | |
265 | + | let bQ = ((height - bM) % bH) | |
266 | + | if ((bQ == 0)) | |
267 | + | then ((height - bH) + 1) | |
268 | + | else (height - bQ) | |
266 | 269 | } | |
267 | - | else ( | |
268 | - | let | |
269 | - | $Tuple3( | |
270 | + | else (bM + 1) | |
271 | + | let bR = ((bP + bH) - 1) | |
272 | + | $Tuple3(bO, bP, bR) | |
270 | 273 | } | |
271 | - | else $Tuple3( | |
272 | - | let | |
273 | - | let | |
274 | - | let | |
275 | - | $Tuple3( | |
274 | + | else $Tuple3(bI, bL, bM) | |
275 | + | let bO = bN._1 | |
276 | + | let bP = bN._2 | |
277 | + | let bR = bN._3 | |
278 | + | $Tuple3(bO, bP, bR) | |
276 | 279 | } | |
277 | - | else if ( | |
280 | + | else if (bJ) | |
278 | 281 | then { | |
279 | - | let | |
280 | - | let | |
281 | - | let | |
282 | + | let bS = value(getInteger(as(0))) | |
283 | + | let bT = value(getInteger(au(0))) | |
284 | + | let bU = if ((height > bT)) | |
282 | 285 | then { | |
283 | - | let | |
284 | - | let | |
285 | - | let | |
286 | - | $Tuple3( | |
286 | + | let bO = (bI + 1) | |
287 | + | let bP = (bT + 1) | |
288 | + | let bR = ((bP + bH) - 1) | |
289 | + | $Tuple3(bO, bP, bR) | |
287 | 290 | } | |
288 | - | else $Tuple3( | |
289 | - | let | |
290 | - | let | |
291 | - | let | |
292 | - | $Tuple3( | |
291 | + | else $Tuple3(bI, bS, bT) | |
292 | + | let bO = bU._1 | |
293 | + | let bP = bU._2 | |
294 | + | let bR = bU._3 | |
295 | + | $Tuple3(bO, bP, bR) | |
293 | 296 | } | |
294 | - | else $Tuple3( | |
295 | - | let | |
296 | - | let | |
297 | - | let | |
298 | - | let | |
299 | - | let | |
300 | - | let | |
301 | - | let | |
302 | - | let | |
303 | - | let | |
304 | - | let | |
305 | - | let | |
306 | - | if ($isInstanceOf( | |
307 | - | then | |
297 | + | else $Tuple3(bI, valueOrElse(getInteger(as(bI)), height), valueOrElse(getInteger(au(bI)), ((height + bH) - 1))) | |
298 | + | let bO = bK._1 | |
299 | + | let bP = bK._2 | |
300 | + | let bR = bK._3 | |
301 | + | let bV = valueOrElse(getInteger(az(O, bO)), bF) | |
302 | + | let bW = valueOrElse(getInteger(aA(O, bO, bq)), bG) | |
303 | + | let aX = valueOrElse(getInteger(aD(bq)), 0) | |
304 | + | let bX = min([(bD + aX), bV, bW]) | |
305 | + | let bY = value(getInteger(av())) | |
306 | + | let bZ = e | |
307 | + | let ca = { | |
308 | + | let cb = invoke(addressFromStringValue(value(getString(aB()))), "putOneTknV2WithoutTakeFeeREADONLY", [bZ, O], nil) | |
309 | + | if ($isInstanceOf(cb, "(Int, Int, Int)")) | |
310 | + | then cb | |
308 | 311 | else throw("Couldn't cast Any to (Int, Int, Int)") | |
309 | 312 | } | |
310 | - | if (( | |
313 | + | if ((ca == ca)) | |
311 | 314 | then { | |
312 | - | let | |
313 | - | let | |
314 | - | let | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | if ($isInstanceOf( | |
319 | - | then | |
315 | + | let cc = ca._3 | |
316 | + | let cd = ca._2 | |
317 | + | let ce = ca._1 | |
318 | + | let cf = value(getString(aC())) | |
319 | + | let cg = { | |
320 | + | let cb = invoke(addressFromStringValue(value(getString(aB()))), "getOneTknV2READONLY", [cf, ce], nil) | |
321 | + | if ($isInstanceOf(cb, "(Int, Int)")) | |
322 | + | then cb | |
320 | 323 | else throw("Couldn't cast Any to (Int, Int)") | |
321 | 324 | } | |
322 | - | if (( | |
325 | + | if ((cg == cg)) | |
323 | 326 | then { | |
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
328 | - | $Tuple10( | |
327 | + | let ch = cg._2 | |
328 | + | let ci = cg._1 | |
329 | + | let cj = fraction(bZ, e, ci) | |
330 | + | let ck = (bR - height) | |
331 | + | $Tuple10(bX, bV, bW, bE, bY, cj, ck, bO, bP, bR) | |
329 | 332 | } | |
330 | 333 | else throw("Strict value is not equal to itself.") | |
331 | 334 | } | |
332 | 335 | else throw("Strict value is not equal to itself.") | |
333 | 336 | } | |
334 | 337 | ||
335 | 338 | ||
336 | - | func | |
337 | - | let j = getString( | |
339 | + | func cl () = { | |
340 | + | let j = getString(aH()) | |
338 | 341 | if ($isInstanceOf(j, "String")) | |
339 | 342 | then { | |
340 | - | let | |
341 | - | fromBase58String( | |
343 | + | let cm = j | |
344 | + | fromBase58String(cm) | |
342 | 345 | } | |
343 | 346 | else if ($isInstanceOf(j, "Unit")) | |
344 | 347 | then unit | |
345 | 348 | else throw("Match error") | |
346 | 349 | } | |
347 | 350 | ||
348 | 351 | ||
349 | - | func | |
350 | - | let j = getString( | |
352 | + | func cn () = { | |
353 | + | let j = getString(aI()) | |
351 | 354 | if ($isInstanceOf(j, "String")) | |
352 | 355 | then { | |
353 | - | let | |
354 | - | fromBase58String( | |
356 | + | let cm = j | |
357 | + | fromBase58String(cm) | |
355 | 358 | } | |
356 | 359 | else if ($isInstanceOf(j, "Unit")) | |
357 | 360 | then unit | |
358 | 361 | else throw("Match error") | |
359 | 362 | } | |
360 | 363 | ||
361 | 364 | ||
362 | - | func | |
363 | - | let | |
364 | - | let j = | |
365 | + | func co (cp) = { | |
366 | + | let cq = throw("Permission denied") | |
367 | + | let j = cl() | |
365 | 368 | if ($isInstanceOf(j, "ByteVector")) | |
366 | 369 | then { | |
367 | - | let | |
368 | - | if (( | |
370 | + | let cr = j | |
371 | + | if ((cp.callerPublicKey == cr)) | |
369 | 372 | then true | |
370 | - | else | |
373 | + | else cq | |
371 | 374 | } | |
372 | 375 | else if ($isInstanceOf(j, "Unit")) | |
373 | - | then if (( | |
376 | + | then if ((cp.caller == this)) | |
374 | 377 | then true | |
375 | - | else | |
378 | + | else cq | |
376 | 379 | else throw("Match error") | |
377 | 380 | } | |
378 | 381 | ||
379 | 382 | ||
380 | - | @Callable( | |
383 | + | @Callable(cp) | |
381 | 384 | func constructor (H,I,J,K,o,O,Q) = { | |
382 | 385 | let L = ((100 * 1000) * 1000) | |
383 | - | let | |
386 | + | let cs = (H + I) | |
384 | 387 | if (isDefined(getString(ah()))) | |
385 | 388 | then throw("already initialized") | |
386 | - | else if (("3PMEHLx1j6zerarZTYfsGqDeeZqQoMpxq5S" != toString( | |
389 | + | else if (("3PMEHLx1j6zerarZTYfsGqDeeZqQoMpxq5S" != toString(cp.caller))) | |
387 | 390 | then throw("not authorized") | |
388 | - | else if ((size( | |
391 | + | else if ((size(cp.payments) != 1)) | |
389 | 392 | then throw("exactly 1 payment must be attached") | |
390 | - | else if (( | |
393 | + | else if ((cs >= J)) | |
391 | 394 | then throw("claimStart must be greater than idoEnd") | |
392 | 395 | else { | |
393 | - | let | |
394 | - | let | |
395 | - | let | |
396 | - | let M = toBase58String( | |
397 | - | let N = pow(10, 0, | |
398 | - | let | |
399 | - | let | |
400 | - | let P = pow(10, 0, | |
401 | - | let | |
402 | - | let | |
403 | - | [StringEntry(ah(), S(H, I, J, K, o, L, M, N, O, P, Q, | |
396 | + | let ct = value(cp.payments[0]) | |
397 | + | let bo = value(ct.assetId) | |
398 | + | let cu = valueOrErrorMessage(assetInfo(bo), "fail to load ido asset info") | |
399 | + | let M = toBase58String(bo) | |
400 | + | let N = pow(10, 0, cu.decimals, 0, 0, DOWN) | |
401 | + | let bp = fromBase58String(O) | |
402 | + | let cv = valueOrErrorMessage(assetInfo(bp), "fail to load price asset info") | |
403 | + | let P = pow(10, 0, cv.decimals, 0, 0, DOWN) | |
404 | + | let cw = aM() | |
405 | + | let cx = [0, 0, 0, 0] | |
406 | + | [StringEntry(ah(), S(H, I, J, K, o, L, M, N, O, P, Q, ct.amount)), aT(ak(), cw, cx, J, 0)] | |
404 | 407 | } | |
405 | 408 | } | |
406 | 409 | ||
407 | 410 | ||
408 | 411 | ||
409 | - | @Callable( | |
412 | + | @Callable(cp) | |
410 | 413 | func invest () = { | |
411 | - | let | |
412 | - | let H = parseIntValue( | |
413 | - | let I = parseIntValue( | |
414 | - | let | |
415 | - | let J = parseIntValue( | |
416 | - | let K = parseIntValue( | |
417 | - | let o = parseIntValue( | |
418 | - | let L = parseIntValue( | |
419 | - | let M = | |
420 | - | let | |
421 | - | let N = parseIntValue( | |
422 | - | let O = | |
423 | - | let | |
424 | - | let P = parseIntValue( | |
425 | - | let | |
426 | - | let aj = toString( | |
414 | + | let ba = aJ() | |
415 | + | let H = parseIntValue(ba[v]) | |
416 | + | let I = parseIntValue(ba[w]) | |
417 | + | let cs = (H + I) | |
418 | + | let J = parseIntValue(ba[x]) | |
419 | + | let K = parseIntValue(ba[y]) | |
420 | + | let o = parseIntValue(ba[z]) | |
421 | + | let L = parseIntValue(ba[A]) | |
422 | + | let M = ba[B] | |
423 | + | let bo = fromBase58String(M) | |
424 | + | let N = parseIntValue(ba[C]) | |
425 | + | let O = ba[D] | |
426 | + | let bp = fromBase58String(O) | |
427 | + | let P = parseIntValue(ba[E]) | |
428 | + | let cy = parseIntValue(ba[F]) | |
429 | + | let aj = toString(cp.caller) | |
427 | 430 | if ((H > height)) | |
428 | 431 | then throw("ido has not been started yet") | |
429 | - | else if ((height > | |
432 | + | else if ((height > cs)) | |
430 | 433 | then throw("ido has been already ended") | |
431 | - | else if ((size( | |
434 | + | else if ((size(cp.payments) != 1)) | |
432 | 435 | then throw("exactly 1 payment is expected") | |
433 | 436 | else { | |
434 | - | let | |
435 | - | let | |
436 | - | let | |
437 | - | if (( | |
438 | - | then throw((("invalid payment asset id: " + toBase58String( | |
437 | + | let ct = value(cp.payments[0]) | |
438 | + | let cz = value(ct.assetId) | |
439 | + | let cA = ct.amount | |
440 | + | if ((cz != bp)) | |
441 | + | then throw((("invalid payment asset id: " + toBase58String(cz)) + " is expected")) | |
439 | 442 | else { | |
440 | - | let | |
441 | - | let | |
442 | - | let | |
443 | - | let | |
444 | - | if (( | |
443 | + | let cB = aN(aj) | |
444 | + | let cw = aM() | |
445 | + | let cC = (parseIntValue(cw[T]) + cA) | |
446 | + | let cD = (cC * 100) | |
447 | + | if ((cD > assetBalance(this, bo))) | |
445 | 448 | then throw("IDO asset has been - sold consider to use smaller payment") | |
446 | 449 | else { | |
447 | - | let | |
448 | - | [ | |
450 | + | let cx = [cA, cA, 0, 0] | |
451 | + | [aT(ai(aj), cB, cx, J, 0), aT(ak(), cw, cx, J, 0), bi(aj, cA, 0, cp.transactionId)] | |
449 | 452 | } | |
450 | 453 | } | |
451 | 454 | } | |
452 | 455 | } | |
453 | 456 | ||
454 | 457 | ||
455 | 458 | ||
456 | - | @Callable( | |
457 | - | func claim ( | |
458 | - | let | |
459 | - | if (( | |
459 | + | @Callable(cp) | |
460 | + | func claim (bm,bq) = { | |
461 | + | let cE = toString(cp.caller) | |
462 | + | if ((bq != cE)) | |
460 | 463 | then throw("not authorized") | |
461 | 464 | else { | |
462 | - | let | |
463 | - | let O = | |
464 | - | let | |
465 | - | let | |
466 | - | let | |
467 | - | let | |
468 | - | let | |
469 | - | let | |
470 | - | let | |
471 | - | let | |
472 | - | let | |
473 | - | let | |
474 | - | let | |
465 | + | let ba = aJ() | |
466 | + | let O = ba[D] | |
467 | + | let cF = bl(bm, cp.caller, cp.transactionId) | |
468 | + | let cx = cF._1 | |
469 | + | let bD = cF._2 | |
470 | + | let cG = cF._3 | |
471 | + | let br = cF._4 | |
472 | + | let bv = cF._5 | |
473 | + | let cH = cx[aR] | |
474 | + | let cI = cx[aS] | |
475 | + | let aX = valueOrElse(getInteger(aD(bq)), 0) | |
476 | + | let bb = value(assetInfo(fromBase58String(O))).decimals | |
477 | + | let bf = if ((bm == O)) | |
475 | 478 | then { | |
476 | - | let | |
477 | - | let | |
478 | - | let | |
479 | - | let | |
480 | - | let | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
484 | - | let | |
485 | - | let | |
486 | - | let | |
487 | - | let | |
479 | + | let cJ = bC(O, bq, bD, cx[aR]) | |
480 | + | let bX = cJ._1 | |
481 | + | let bV = cJ._2 | |
482 | + | let bW = cJ._3 | |
483 | + | let bE = cJ._4 | |
484 | + | let bY = cJ._5 | |
485 | + | let cj = cJ._6 | |
486 | + | let ck = cJ._7 | |
487 | + | let bO = cJ._8 | |
488 | + | let bP = cJ._9 | |
489 | + | let bR = cJ._10 | |
490 | + | let bB = [if ((bW > 0)) | |
488 | 491 | then true | |
489 | - | else f("unavailable to claim because user period allowance reached"), if (( | |
492 | + | else f("unavailable to claim because user period allowance reached"), if ((bV > 0)) | |
490 | 493 | then true | |
491 | - | else f("unavailable to claim because total period allowance reached"), if (( | |
494 | + | else f("unavailable to claim because total period allowance reached"), if ((bX > 0)) | |
492 | 495 | then true | |
493 | - | else f("nothing to claim"), if (( | |
496 | + | else f("nothing to claim"), if ((bY > cj)) | |
494 | 497 | then true | |
495 | 498 | else f("unavailable to claim because usdn price lower than usdtPriceAssetAllowableRatio")] | |
496 | - | if (( | |
499 | + | if ((bB == bB)) | |
497 | 500 | then { | |
498 | - | let | |
499 | - | let | |
500 | - | let | |
501 | - | then [ScriptTransfer( | |
501 | + | let cK = (bV - bX) | |
502 | + | let cL = (bW - bX) | |
503 | + | let bf = if ((aX > bX)) | |
504 | + | then [ScriptTransfer(cp.caller, bX, cG), IntegerEntry(aD(bq), (aX - bX))] | |
502 | 505 | else { | |
503 | - | let | |
504 | - | if (( | |
506 | + | let cM = split(h(invoke(this, "claimREADONLY", [O, bq], nil)), c) | |
507 | + | if ((cM == cM)) | |
505 | 508 | then { | |
506 | - | let | |
507 | - | let | |
509 | + | let cN = parseIntValue(cM[3]) | |
510 | + | let cO = if ((cN == bX)) | |
508 | 511 | then { | |
509 | - | let cO = parseIntValue(bq[T]) | |
510 | - | let cP = parseIntValue(bq[U]) | |
511 | - | let cQ = parseIntValue(bq[V]) | |
512 | - | let cR = parseIntValue(bq[W]) | |
513 | - | let cS = parseIntValue(bq[X]) | |
514 | - | let cT = [toString(cO), "0", toString(cQ), toString(cR), toString(cS)] | |
515 | - | let cU = aL() | |
516 | - | let cV = parseIntValue(cU[T]) | |
517 | - | let cW = parseIntValue(cU[U]) | |
518 | - | let cX = parseIntValue(cU[U]) | |
519 | - | let cY = parseIntValue(cU[V]) | |
520 | - | let cZ = parseIntValue(cU[X]) | |
521 | - | let da = (cW - cP) | |
522 | - | let db = [toString(cV), toString(da), toString(cX), toString(cY), toString(cZ)] | |
523 | - | [StringEntry(aF(bp), toString(cP)), aS(ai(bp), cT, cw, bu, 0), aS(ak(), db, cw, bu, 0)] | |
512 | + | let cP = parseIntValue(br[T]) | |
513 | + | let cQ = parseIntValue(br[U]) | |
514 | + | let cR = parseIntValue(br[V]) | |
515 | + | let cS = parseIntValue(br[W]) | |
516 | + | let cT = parseIntValue(br[X]) | |
517 | + | let cU = [toString(cP), "0", toString(cR), toString(cS), toString(cT)] | |
518 | + | let cV = aM() | |
519 | + | let cW = parseIntValue(cV[T]) | |
520 | + | let cX = parseIntValue(cV[U]) | |
521 | + | let cY = parseIntValue(cV[U]) | |
522 | + | let cZ = parseIntValue(cV[V]) | |
523 | + | let da = parseIntValue(cV[X]) | |
524 | + | let db = (cX - cQ) | |
525 | + | let dc = [toString(cW), toString(db), toString(cY), toString(cZ), toString(da)] | |
526 | + | let dd = (valueOrElse(getInteger(aG()), 0) - cQ) | |
527 | + | [StringEntry(aF(bq), toString(cQ)), StringEntry(aG(), toString(dd)), aT(ai(bq), cU, cx, bv, 0), aT(ak(), dc, cx, bv, 0)] | |
524 | 528 | } | |
525 | - | else [ | |
526 | - | let | |
527 | - | ([ScriptTransfer( | |
529 | + | else [aT(ai(bq), br, cx, bv, 0), aT(ak(), aM(), cx, bv, 0)] | |
530 | + | let de = ((aX + bD) - bX) | |
531 | + | ([ScriptTransfer(cp.caller, bX, cG), IntegerEntry(aD(bq), de)] ++ cO) | |
528 | 532 | } | |
529 | 533 | else throw("Strict value is not equal to itself.") | |
530 | 534 | } | |
531 | - | $Tuple2(([IntegerEntry(ar(), | |
535 | + | $Tuple2(([IntegerEntry(ar(), bO), IntegerEntry(as(bO), bP), IntegerEntry(au(bO), bR), IntegerEntry(az(O, bO), cK), IntegerEntry(aA(O, bO, bq), cL), bk(bq, bX, cI, cp.transactionId)] ++ bf), unit) | |
532 | 536 | } | |
533 | 537 | else throw("Strict value is not equal to itself.") | |
534 | 538 | } | |
535 | 539 | else { | |
536 | - | let | |
537 | - | $Tuple2([ScriptTransfer( | |
540 | + | let df = fraction(aX, e, pow(10, 0, bb, 0, 0, DOWN)) | |
541 | + | $Tuple2([ScriptTransfer(cp.caller, (bD + df), cG), IntegerEntry(aD(bq), 0), aT(ai(bq), br, cx, bv, aX), aT(ak(), aM(), cx, bv, aX), bk(bq, cH, (cI + df), cp.transactionId)], unit) | |
538 | 542 | } | |
539 | - | | |
543 | + | bf | |
540 | 544 | } | |
541 | 545 | } | |
542 | 546 | ||
543 | 547 | ||
544 | 548 | ||
545 | - | @Callable( | |
546 | - | func cleanRemaingAmount ( | |
547 | - | let O = | |
548 | - | let | |
549 | - | if (( | |
549 | + | @Callable(cp) | |
550 | + | func cleanRemaingAmount (bq) = { | |
551 | + | let O = aJ()[D] | |
552 | + | let cM = split(h(invoke(this, "claimREADONLY", [O, bq], nil)), c) | |
553 | + | if ((cM == cM)) | |
550 | 554 | then { | |
551 | - | let | |
552 | - | let | |
555 | + | let cN = parseIntValue(cM[3]) | |
556 | + | let dg = if ((cN == 0)) | |
553 | 557 | then true | |
554 | 558 | else f("user have unclaimed assets") | |
555 | - | if (( | |
559 | + | if ((dg == dg)) | |
556 | 560 | then { | |
557 | - | let | |
558 | - | let | |
559 | - | let | |
560 | - | let | |
561 | - | let | |
562 | - | let | |
563 | - | let | |
561 | + | let dh = split(value(getString(ai(bq))), c) | |
562 | + | let cP = parseIntValue(dh[T]) | |
563 | + | let cQ = parseIntValue(dh[U]) | |
564 | + | let cR = parseIntValue(dh[V]) | |
565 | + | let cS = parseIntValue(dh[W]) | |
566 | + | let cT = parseIntValue(dh[X]) | |
567 | + | let di = if ((cQ != 0)) | |
564 | 568 | then true | |
565 | 569 | else f("investorRemainingAmount already zero") | |
566 | - | if (( | |
570 | + | if ((di == di)) | |
567 | 571 | then { | |
568 | - | let dh = makeString(["%d%d%d%d%d", toString(cO), "0", toString(cQ), toString(cR), toString(cS)], c) | |
569 | - | let cU = split(value(getString(ak())), c) | |
570 | - | let cV = parseIntValue(cU[T]) | |
571 | - | let cW = parseIntValue(cU[U]) | |
572 | - | let cX = parseIntValue(cU[U]) | |
573 | - | let cY = parseIntValue(cU[V]) | |
574 | - | let cZ = parseIntValue(cU[X]) | |
575 | - | let di = makeString(["%d%d%d%d%d", toString(cV), toString((cW - cP)), toString(cX), toString(cY), toString(cZ)], c) | |
576 | - | [StringEntry(aF(bp), toString(cP)), StringEntry(ai(bp), dh), StringEntry(ak(), di)] | |
572 | + | let dj = makeString(["%d%d%d%d%d", toString(cP), "0", toString(cR), toString(cS), toString(cT)], c) | |
573 | + | let cV = split(value(getString(ak())), c) | |
574 | + | let cW = parseIntValue(cV[T]) | |
575 | + | let cX = parseIntValue(cV[U]) | |
576 | + | let cY = parseIntValue(cV[U]) | |
577 | + | let cZ = parseIntValue(cV[V]) | |
578 | + | let da = parseIntValue(cV[X]) | |
579 | + | let dk = makeString(["%d%d%d%d%d", toString(cW), toString((cX - cQ)), toString(cY), toString(cZ), toString(da)], c) | |
580 | + | let dd = (valueOrElse(getInteger(aG()), 0) - cQ) | |
581 | + | [StringEntry(aF(bq), toString(cQ)), StringEntry(aG(), toString(dd)), StringEntry(ai(bq), dj), StringEntry(ak(), dk)] | |
577 | 582 | } | |
578 | 583 | else throw("Strict value is not equal to itself.") | |
579 | 584 | } | |
580 | 585 | else throw("Strict value is not equal to itself.") | |
581 | 586 | } | |
582 | 587 | else throw("Strict value is not equal to itself.") | |
583 | 588 | } | |
584 | 589 | ||
585 | 590 | ||
586 | 591 | ||
587 | - | @Callable( | |
588 | - | func claimREADONLY ( | |
589 | - | let | |
590 | - | let | |
591 | - | let | |
592 | - | let | |
593 | - | let | |
594 | - | let | |
595 | - | let | |
596 | - | let | |
597 | - | let | |
598 | - | $Tuple2(nil, makeString(["%s%d%d", | |
592 | + | @Callable(cp) | |
593 | + | func claimREADONLY (bm,bq) = { | |
594 | + | let cF = bl(bm, addressFromStringValue(bq), fromBase58String("")) | |
595 | + | let cx = cF._1 | |
596 | + | let bD = cF._2 | |
597 | + | let cG = cF._3 | |
598 | + | let br = cF._4 | |
599 | + | let bv = cF._5 | |
600 | + | let dl = cF._6 | |
601 | + | let cN = dl[0] | |
602 | + | let dm = dl[1] | |
603 | + | $Tuple2(nil, makeString(["%s%d%d", bq, toString(cN), toString(dm)], c)) | |
599 | 604 | } | |
600 | 605 | ||
601 | 606 | ||
602 | 607 | ||
603 | - | @Callable( | |
604 | - | func claimV2READONLY ( | |
605 | - | let | |
606 | - | let | |
607 | - | let | |
608 | - | let | |
609 | - | let | |
610 | - | let | |
611 | - | let | |
612 | - | let | |
613 | - | let | |
614 | - | let | |
615 | - | let O = | |
616 | - | let | |
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | let | |
621 | - | let | |
622 | - | let | |
623 | - | let | |
624 | - | let | |
625 | - | let | |
626 | - | let | |
627 | - | let | |
628 | - | let | |
629 | - | let | |
630 | - | let | |
631 | - | let | |
632 | - | let | |
608 | + | @Callable(cp) | |
609 | + | func claimV2READONLY (bm,bq) = { | |
610 | + | let cF = bl(bm, addressFromStringValue(bq), fromBase58String("")) | |
611 | + | let cx = cF._1 | |
612 | + | let bD = cF._2 | |
613 | + | let cG = cF._3 | |
614 | + | let br = cF._4 | |
615 | + | let bv = cF._5 | |
616 | + | let dl = cF._6 | |
617 | + | let cN = dl[0] | |
618 | + | let dm = dl[1] | |
619 | + | let ba = aJ() | |
620 | + | let O = ba[D] | |
621 | + | let aX = valueOrElse(getInteger(aD(bq)), 0) | |
622 | + | let df = (aX * 100) | |
623 | + | let dn = (dm + df) | |
624 | + | let do = bC(O, bq, bD, cx[aR]) | |
625 | + | let bX = do._1 | |
626 | + | let bV = do._2 | |
627 | + | let bW = do._3 | |
628 | + | let bE = do._4 | |
629 | + | let bY = do._5 | |
630 | + | let cj = do._6 | |
631 | + | let ck = do._7 | |
632 | + | let bO = do._8 | |
633 | + | let bP = do._9 | |
634 | + | let bR = do._10 | |
635 | + | let dp = valueOrElse(getInteger(au(bO)), 0) | |
636 | + | let dq = (parseIntValue(aO(bq)[V]) - aX) | |
637 | + | let dr = if ((height > dp)) | |
633 | 638 | then { | |
634 | - | let | |
635 | - | let | |
636 | - | let | |
637 | - | makeString(["%d%d%d%d%d%d", toString( | |
639 | + | let ds = value(getInteger(aq())) | |
640 | + | let dt = value(getInteger(ay(O))) | |
641 | + | let du = value(getInteger(aw(O))) | |
642 | + | makeString(["%d%d%d%d%d%d", toString(dn), toString(dt), toString(du), toString(bY), toString(cj), toString(ds), toString(dq)], c) | |
638 | 643 | } | |
639 | - | else makeString(["%d%d%d%d%d%d", toString( | |
640 | - | $Tuple2(nil, | |
644 | + | else makeString(["%d%d%d%d%d%d", toString(dn), toString(bX), toString(bV), toString(bY), toString(cj), toString(ck), toString(dq)], c) | |
645 | + | $Tuple2(nil, dr) | |
641 | 646 | } | |
642 | 647 | ||
643 | 648 | ||
644 | 649 | ||
645 | - | @Callable( | |
646 | - | func setManager ( | |
647 | - | let | |
648 | - | if (( | |
650 | + | @Callable(cp) | |
651 | + | func setManager (dv) = { | |
652 | + | let dw = co(cp) | |
653 | + | if ((dw == dw)) | |
649 | 654 | then { | |
650 | - | let | |
651 | - | if (( | |
652 | - | then [StringEntry( | |
655 | + | let dx = fromBase58String(dv) | |
656 | + | if ((dx == dx)) | |
657 | + | then [StringEntry(aI(), dv)] | |
653 | 658 | else throw("Strict value is not equal to itself.") | |
654 | 659 | } | |
655 | 660 | else throw("Strict value is not equal to itself.") | |
656 | 661 | } | |
657 | 662 | ||
658 | 663 | ||
659 | 664 | ||
660 | - | @Callable( | |
665 | + | @Callable(cp) | |
661 | 666 | func confirmManager () = { | |
662 | - | let | |
663 | - | let | |
667 | + | let dy = cn() | |
668 | + | let dz = if (isDefined(dy)) | |
664 | 669 | then true | |
665 | 670 | else throw("No pending manager") | |
666 | - | if (( | |
671 | + | if ((dz == dz)) | |
667 | 672 | then { | |
668 | - | let | |
673 | + | let dA = if ((cp.callerPublicKey == value(dy))) | |
669 | 674 | then true | |
670 | 675 | else throw("You are not pending manager") | |
671 | - | if (( | |
672 | - | then [StringEntry( | |
676 | + | if ((dA == dA)) | |
677 | + | then [StringEntry(aH(), toBase58String(value(dy))), DeleteEntry(aI())] | |
673 | 678 | else throw("Strict value is not equal to itself.") | |
674 | 679 | } | |
675 | 680 | else throw("Strict value is not equal to itself.") | |
676 | 681 | } | |
677 | 682 | ||
678 | 683 | ||
679 | - | @Verifier( | |
680 | - | func | |
681 | - | let | |
682 | - | let j = | |
684 | + | @Verifier(dB) | |
685 | + | func dC () = { | |
686 | + | let dD = { | |
687 | + | let j = cl() | |
683 | 688 | if ($isInstanceOf(j, "ByteVector")) | |
684 | 689 | then { | |
685 | - | let | |
686 | - | | |
690 | + | let cr = j | |
691 | + | cr | |
687 | 692 | } | |
688 | 693 | else if ($isInstanceOf(j, "Unit")) | |
689 | - | then | |
694 | + | then dB.senderPublicKey | |
690 | 695 | else throw("Match error") | |
691 | 696 | } | |
692 | - | sigVerify( | |
697 | + | sigVerify(dB.bodyBytes, dB.proofs[0], dD) | |
693 | 698 | } | |
694 | 699 |
github/deemru/w8io/026f985 216.78 ms ◑