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