tx · 77GzLmgJoXoBthBdKB42FqQAzrQCu1kS6Q49CgdYkdfX 3PA2w9i9GnbKR3HB7XTmwf3DnaFBFcDiP12: -0.01400000 Waves 2020.01.30 17:06 [1907761] smart account 3PA2w9i9GnbKR3HB7XTmwf3DnaFBFcDiP12 > SELF 0.00000000 Waves
{ "type": 13, "id": "77GzLmgJoXoBthBdKB42FqQAzrQCu1kS6Q49CgdYkdfX", "fee": 1400000, "feeAssetId": null, "timestamp": 1580392579096, "version": 1, "sender": "3PA2w9i9GnbKR3HB7XTmwf3DnaFBFcDiP12", "senderPublicKey": "5G9pgymdyBYGnWF3oahQXQNPnVaWEthMkeFRUzHjZ7mX", "proofs": [ "4yydkYTmTvupY7ULMS7yFupoRh3rUhPrvPgdEQUovVwes9XC6KgFfKvsCxmsaJJByeskGqhsb6rZEB9B3TzMogeM", "zkyuiS4T8jeBhUjuHRmMiPndmuFbVdCWGB96if3zbUT6whc4BsGNB2FDdu9qrLhiYGpwm2f3iw7Vn2hD23eXFMG", "5PMK6QkoB9fa1txzTUfuxTUJKUPZ85JaXbyJjv21VmMHb94n5M1Y8Hke7erfUyxbv2SwoJEQGd9wvNtHhfAUzsDK" ], "script": "base64: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", "chainId": 87, "height": 1907761, "spentComplexity": 0 } View: original | compacted Prev: Ar1MZfocGruKVy2Yz7kMawjSFXRGK5E74qsPyKTvnmTu Next: CcXRbcLQXjKzZViGJQ7CfPvJiqnfTGtMWcoY7fY5KSCY Diff:
Old | New | Differences | |
---|---|---|---|
5 | 5 | ||
6 | 6 | let b = 100000 | |
7 | 7 | ||
8 | - | let c = ( | |
8 | + | let c = (2629746 * 1000) | |
9 | 9 | ||
10 | - | let d = ( | |
10 | + | let d = (b / 100) | |
11 | 11 | ||
12 | - | let e = ( | |
12 | + | let e = (10000 * b) | |
13 | 13 | ||
14 | 14 | let f = base58'EMdiF8uaySswfCdMxc114rSfzUsAKCtK9d8eSx6ruKP4' | |
15 | 15 | ||
17 | 17 | ||
18 | 18 | let h = base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT' | |
19 | 19 | ||
20 | - | let i = | |
20 | + | let i = lastBlock.timestamp | |
21 | 21 | ||
22 | 22 | let j = ((i / c) * c) | |
23 | 23 | ||
24 | 24 | let k = (j + c) | |
25 | 25 | ||
26 | - | func l (m,n) = { | |
27 | - | func o (p,q) = if (if ((p == "")) | |
28 | - | then (q == 0) | |
26 | + | let l = (k - (((24 * 60) * 60) * 1000)) | |
27 | + | ||
28 | + | func m (n,o) = { | |
29 | + | let p = "," | |
30 | + | let q = "." | |
31 | + | func r (s,t) = if (if ((s == "")) | |
32 | + | then (t == 0) | |
29 | 33 | else false) | |
30 | 34 | then "" | |
31 | - | else if (( | |
32 | - | then toString( | |
33 | - | else (( | |
35 | + | else if ((s == "")) | |
36 | + | then toString(t) | |
37 | + | else ((s + p) + drop(toString((t + 1000)), 1)) | |
34 | 38 | ||
35 | - | let r = (m / n) | |
36 | - | let s = (m % n) | |
37 | - | let t = (r / (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000)) | |
38 | - | let u = (r % (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000)) | |
39 | - | let v = (u / ((((1000 * 1000) * 1000) * 1000) * 1000)) | |
40 | - | let w = (u % ((((1000 * 1000) * 1000) * 1000) * 1000)) | |
41 | - | let x = (w / (((1000 * 1000) * 1000) * 1000)) | |
42 | - | let y = (w % (((1000 * 1000) * 1000) * 1000)) | |
43 | - | let z = (y / ((1000 * 1000) * 1000)) | |
44 | - | let A = (y % ((1000 * 1000) * 1000)) | |
45 | - | let B = (A / (1000 * 1000)) | |
46 | - | let C = (A % (1000 * 1000)) | |
47 | - | let D = (C / 1000) | |
48 | - | let E = (C % 1000) | |
49 | - | let F = { | |
50 | - | let G = [t, v, x, z, B, D, E] | |
51 | - | let H = size(G) | |
52 | - | let I = "" | |
53 | - | if ((H == 0)) | |
54 | - | then I | |
39 | + | func u (v) = if ((drop(v, (size(v) - 1)) != "0")) | |
40 | + | then v | |
41 | + | else take(v, (size(v) - 1)) | |
42 | + | ||
43 | + | let w = (n / o) | |
44 | + | let x = (n % o) | |
45 | + | let y = (w / (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000)) | |
46 | + | let z = (w % (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000)) | |
47 | + | let A = (z / ((((1000 * 1000) * 1000) * 1000) * 1000)) | |
48 | + | let B = (z % ((((1000 * 1000) * 1000) * 1000) * 1000)) | |
49 | + | let C = (B / (((1000 * 1000) * 1000) * 1000)) | |
50 | + | let D = (B % (((1000 * 1000) * 1000) * 1000)) | |
51 | + | let E = (D / ((1000 * 1000) * 1000)) | |
52 | + | let F = (D % ((1000 * 1000) * 1000)) | |
53 | + | let G = (F / (1000 * 1000)) | |
54 | + | let H = (F % (1000 * 1000)) | |
55 | + | let I = (H / 1000) | |
56 | + | let J = (H % 1000) | |
57 | + | let K = { | |
58 | + | let L = [y, A, C, E, G, I, J] | |
59 | + | let M = size(L) | |
60 | + | let N = "" | |
61 | + | if ((M == 0)) | |
62 | + | then N | |
55 | 63 | else { | |
56 | - | let | |
57 | - | if (( | |
58 | - | then | |
64 | + | let O = r(N, L[0]) | |
65 | + | if ((M == 1)) | |
66 | + | then O | |
59 | 67 | else { | |
60 | - | let | |
61 | - | if (( | |
62 | - | then | |
68 | + | let P = r(O, L[1]) | |
69 | + | if ((M == 2)) | |
70 | + | then P | |
63 | 71 | else { | |
64 | - | let | |
65 | - | if (( | |
66 | - | then | |
72 | + | let Q = r(P, L[2]) | |
73 | + | if ((M == 3)) | |
74 | + | then Q | |
67 | 75 | else { | |
68 | - | let | |
69 | - | if (( | |
70 | - | then | |
76 | + | let R = r(Q, L[3]) | |
77 | + | if ((M == 4)) | |
78 | + | then R | |
71 | 79 | else { | |
72 | - | let | |
73 | - | if (( | |
74 | - | then | |
80 | + | let S = r(R, L[4]) | |
81 | + | if ((M == 5)) | |
82 | + | then S | |
75 | 83 | else { | |
76 | - | let | |
77 | - | if (( | |
78 | - | then | |
84 | + | let T = r(S, L[5]) | |
85 | + | if ((M == 6)) | |
86 | + | then T | |
79 | 87 | else { | |
80 | - | let | |
81 | - | if (( | |
82 | - | then | |
88 | + | let U = r(T, L[6]) | |
89 | + | if ((M == 7)) | |
90 | + | then U | |
83 | 91 | else { | |
84 | - | let | |
92 | + | let V = r(U, L[7]) | |
85 | 93 | throw("List size exceed 7") | |
86 | 94 | } | |
87 | 95 | } | |
92 | 100 | } | |
93 | 101 | } | |
94 | 102 | } | |
95 | - | let R = take(drop((toString((s + n)) + "00000000"), 1), 8) | |
96 | - | let S = if ((takeRight(R, 1) == "0")) | |
97 | - | then dropRight(R, 1) | |
98 | - | else R | |
99 | - | let T = if ((takeRight(S, 1) == "0")) | |
100 | - | then dropRight(S, 1) | |
101 | - | else S | |
102 | - | let U = if ((takeRight(T, 1) == "0")) | |
103 | - | then dropRight(T, 1) | |
104 | - | else T | |
105 | - | let V = if ((takeRight(U, 1) == "0")) | |
106 | - | then dropRight(U, 1) | |
107 | - | else U | |
108 | - | let W = if ((takeRight(V, 1) == "0")) | |
109 | - | then dropRight(V, 1) | |
110 | - | else V | |
111 | - | let X = if ((takeRight(W, 1) == "0")) | |
112 | - | then dropRight(W, 1) | |
113 | - | else W | |
114 | - | let Y = if ((takeRight(X, 1) == "0")) | |
115 | - | then dropRight(X, 1) | |
116 | - | else X | |
117 | - | let Z = if ((takeRight(Y, 1) == "0")) | |
118 | - | then dropRight(Y, 1) | |
119 | - | else Y | |
120 | - | ((if ((F != "")) | |
121 | - | then F | |
122 | - | else "0") + (if ((Z != "")) | |
123 | - | then ("." + Z) | |
103 | + | let W = u(u(u(u(u(u(u(u(take(drop(toString((x + o)), 1), 8))))))))) | |
104 | + | ((if ((K != "")) | |
105 | + | then K | |
106 | + | else "0") + (if ((W != "")) | |
107 | + | then (q + W) | |
124 | 108 | else "")) | |
125 | 109 | } | |
126 | 110 | ||
127 | 111 | ||
128 | - | @Callable(aa) | |
112 | + | func X (Y) = { | |
113 | + | let Z = " " | |
114 | + | let aa = " UTC" | |
115 | + | let ab = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365] | |
116 | + | let ac = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366] | |
117 | + | if (if ((-12212553600000 > Y)) | |
118 | + | then true | |
119 | + | else (Y > 253402300799999)) | |
120 | + | then throw("ISO 8601: Only years from 1583 to 9999 are permitted.") | |
121 | + | else { | |
122 | + | let ad = (((((1969 * 365) + (1969 / 4)) - (1969 / 100)) + (1969 / 400)) + 366) | |
123 | + | let ae = (Y + ((ad * 86400) * 1000)) | |
124 | + | let af = { | |
125 | + | let ag = ((ae / (31556952 * 1000)) - 1) | |
126 | + | let ah = (((((ag * 365) + (ag / 4)) - (ag / 100)) + (ag / 400)) + 366) | |
127 | + | let ai = ((ae / (86400 * 1000)) - ah) | |
128 | + | let aj = if (if (if ((((ag + 1) % 4) == 0)) | |
129 | + | then (((ag + 1) % 100) != 0) | |
130 | + | else false) | |
131 | + | then true | |
132 | + | else (((ag + 1) % 400) == 0)) | |
133 | + | then ac | |
134 | + | else ab | |
135 | + | let ak = if ((ai >= aj[12])) | |
136 | + | then throw() | |
137 | + | else if ((ai >= aj[11])) | |
138 | + | then 11 | |
139 | + | else if ((ai >= aj[10])) | |
140 | + | then 10 | |
141 | + | else if ((ai >= aj[9])) | |
142 | + | then 9 | |
143 | + | else if ((ai >= aj[8])) | |
144 | + | then 8 | |
145 | + | else if ((ai >= aj[7])) | |
146 | + | then 7 | |
147 | + | else if ((ai >= aj[6])) | |
148 | + | then 6 | |
149 | + | else if ((ai >= aj[5])) | |
150 | + | then 5 | |
151 | + | else if ((ai >= aj[4])) | |
152 | + | then 4 | |
153 | + | else if ((ai >= aj[3])) | |
154 | + | then 3 | |
155 | + | else if ((ai >= aj[2])) | |
156 | + | then 2 | |
157 | + | else if ((ai >= aj[1])) | |
158 | + | then 1 | |
159 | + | else if ((ai >= aj[0])) | |
160 | + | then 0 | |
161 | + | else throw() | |
162 | + | let al = (ai - aj[ak]) | |
163 | + | ((((toString((ag + 1)) + "-") + drop(toString((ak + 101)), 1)) + "-") + drop(toString((al + 101)), 1)) | |
164 | + | } | |
165 | + | let am = { | |
166 | + | let an = (ae % (86400 * 1000)) | |
167 | + | let ao = (an / (3600 * 1000)) | |
168 | + | let ap = (an % (3600 * 1000)) | |
169 | + | let ak = (ap / (60 * 1000)) | |
170 | + | let aq = (ap % (60 * 1000)) | |
171 | + | let ar = (aq / 1000) | |
172 | + | let as = (aq % 1000) | |
173 | + | ((((drop(toString((ao + 100)), 1) + ":") + drop(toString((ak + 100)), 1)) + ":") + drop(toString((ar + 100)), 1)) | |
174 | + | } | |
175 | + | (((af + Z) + am) + aa) | |
176 | + | } | |
177 | + | } | |
178 | + | ||
179 | + | ||
180 | + | @Callable(at) | |
129 | 181 | func deposit () = { | |
130 | - | let | |
131 | - | then extract( | |
182 | + | let au = if (isDefined(at.payment)) | |
183 | + | then extract(at.payment) | |
132 | 184 | else throw((("There is no attached payment " + a) + ".")) | |
133 | - | if (( | |
185 | + | if ((au.assetId != f)) | |
134 | 186 | then throw((("Only " + a) + " is allowed to deposit.")) | |
135 | 187 | else { | |
136 | - | let | |
137 | - | let | |
138 | - | let | |
139 | - | let | |
140 | - | let | |
141 | - | if ($isInstanceOf( | |
188 | + | let av = toBase58String(this.bytes) | |
189 | + | let aw = getIntegerValue(this, (av + "_balance")) | |
190 | + | let ax = toBase58String(at.caller.bytes) | |
191 | + | let ay = { | |
192 | + | let az = getInteger(this, (ax + "_updatetime")) | |
193 | + | if ($isInstanceOf(az, "Int")) | |
142 | 194 | then { | |
143 | - | let | |
144 | - | | |
195 | + | let aA = az | |
196 | + | aA | |
145 | 197 | } | |
146 | 198 | else 0 | |
147 | 199 | } | |
148 | - | let | |
149 | - | let | |
150 | - | let | |
151 | - | if ($isInstanceOf( | |
200 | + | let aB = (j >= ay) | |
201 | + | let aC = { | |
202 | + | let az = getBoolean(this, (ax + "_status")) | |
203 | + | if ($isInstanceOf(az, "Boolean")) | |
152 | 204 | then { | |
153 | - | let | |
154 | - | | |
205 | + | let aA = az | |
206 | + | aA | |
155 | 207 | } | |
156 | 208 | else false | |
157 | 209 | } | |
158 | - | let | |
159 | - | then !( | |
210 | + | let aD = if (if (aB) | |
211 | + | then !(aC) | |
160 | 212 | else false) | |
161 | 213 | then 0 | |
162 | 214 | else { | |
163 | - | let | |
164 | - | if ($isInstanceOf( | |
215 | + | let az = getInteger(this, (ax + "_balance")) | |
216 | + | if ($isInstanceOf(az, "Int")) | |
165 | 217 | then { | |
166 | - | let | |
167 | - | | |
218 | + | let aA = az | |
219 | + | aA | |
168 | 220 | } | |
169 | 221 | else 0 | |
170 | 222 | } | |
171 | - | let | |
172 | - | let | |
173 | - | then ( | |
174 | - | else | |
175 | - | if (if ((d > | |
223 | + | let aE = au.amount | |
224 | + | let aF = if (aC) | |
225 | + | then (aD + aE) | |
226 | + | else aE | |
227 | + | if (if ((d > aF)) | |
176 | 228 | then true | |
177 | - | else ( | |
178 | - | then throw((((((((("The minimum allowable balance is " + | |
229 | + | else (aF > e)) | |
230 | + | then throw((((((((("The minimum allowable balance is " + m(d, b)) + " ") + a) + ", and the maximum is ") + m(e, b)) + " ") + a) + ".")) | |
179 | 231 | else { | |
180 | - | let | |
181 | - | then | |
232 | + | let aG = if (if (aB) | |
233 | + | then aC | |
182 | 234 | else false) | |
183 | 235 | then j | |
184 | - | else if (if ( | |
185 | - | then !( | |
236 | + | else if (if (aB) | |
237 | + | then !(aC) | |
186 | 238 | else false) | |
187 | 239 | then i | |
188 | 240 | else { | |
189 | - | let | |
190 | - | if ($isInstanceOf( | |
241 | + | let az = getInteger(this, (ax + "_starttime")) | |
242 | + | if ($isInstanceOf(az, "Int")) | |
191 | 243 | then { | |
192 | - | let | |
193 | - | if ( | |
194 | - | then | |
195 | - | else (( | |
244 | + | let aA = az | |
245 | + | if (aC) | |
246 | + | then aA | |
247 | + | else ((aA + i) - ay) | |
196 | 248 | } | |
197 | 249 | else 0 | |
198 | 250 | } | |
199 | - | let | |
251 | + | let aH = if ((aG > i)) | |
200 | 252 | then k | |
201 | 253 | else { | |
202 | - | let | |
203 | - | let | |
204 | - | (fraction( | |
254 | + | let aI = (aD / d) | |
255 | + | let aJ = (aF / d) | |
256 | + | (fraction(aG, aI, aJ) + fraction(i, (aJ - aI), aJ)) | |
205 | 257 | } | |
206 | - | if ( | |
207 | - | then WriteSet([DataEntry(( | |
208 | - | else if (isDefined(getString(this, ( | |
209 | - | then WriteSet([DataEntry(( | |
210 | - | else WriteSet([DataEntry(( | |
258 | + | if (aC) | |
259 | + | then WriteSet([DataEntry((av + "_balance"), (aw + aE)), DataEntry((ax + "_balance"), aF), DataEntry((ax + "_starttime"), aH), DataEntry((ax + "_updatetime"), i)]) | |
260 | + | else if (isDefined(getString(this, (ax + "_address")))) | |
261 | + | then WriteSet([DataEntry((av + "_balance"), (aw + aE)), DataEntry((ax + "_balance"), aF), DataEntry((ax + "_starttime"), aH), DataEntry((ax + "_status"), true), DataEntry((ax + "_updatetime"), i)]) | |
262 | + | else WriteSet([DataEntry((av + "_balance"), (aw + aE)), DataEntry((ax + "_address"), ax), DataEntry((ax + "_balance"), aF), DataEntry((ax + "_starttime"), aH), DataEntry((ax + "_status"), true), DataEntry((ax + "_updatetime"), i)]) | |
211 | 263 | } | |
212 | 264 | } | |
213 | 265 | } | |
214 | 266 | ||
215 | 267 | ||
216 | 268 | ||
217 | - | @Callable( | |
218 | - | func withdraw ( | |
219 | - | then throw("Please | |
269 | + | @Callable(at) | |
270 | + | func withdraw (aK) = if (isDefined(at.payment)) | |
271 | + | then throw("Please do not attach payment when withdrawing funds.") | |
220 | 272 | else { | |
221 | - | let | |
222 | - | let | |
223 | - | let | |
224 | - | let | |
225 | - | let | |
226 | - | let | |
227 | - | if ($isInstanceOf( | |
273 | + | let av = toBase58String(this.bytes) | |
274 | + | let aw = getIntegerValue(this, (av + "_balance")) | |
275 | + | let aL = getIntegerValue(this, (av + "_starttime")) | |
276 | + | let ax = toBase58String(at.caller.bytes) | |
277 | + | let ay = { | |
278 | + | let az = getInteger(this, (ax + "_updatetime")) | |
279 | + | if ($isInstanceOf(az, "Int")) | |
228 | 280 | then { | |
229 | - | let | |
230 | - | | |
281 | + | let aA = az | |
282 | + | aA | |
231 | 283 | } | |
232 | 284 | else 0 | |
233 | 285 | } | |
234 | - | let | |
235 | - | let | |
236 | - | let | |
237 | - | if ($isInstanceOf( | |
286 | + | let aB = (j >= ay) | |
287 | + | let aC = { | |
288 | + | let az = getBoolean(this, (ax + "_status")) | |
289 | + | if ($isInstanceOf(az, "Boolean")) | |
238 | 290 | then { | |
239 | - | let | |
240 | - | | |
291 | + | let aA = az | |
292 | + | aA | |
241 | 293 | } | |
242 | 294 | else false | |
243 | 295 | } | |
244 | - | let | |
296 | + | let aD = if (!(aC)) | |
245 | 297 | then 0 | |
246 | 298 | else { | |
247 | - | let | |
248 | - | if ($isInstanceOf( | |
299 | + | let az = getInteger(this, (ax + "_balance")) | |
300 | + | if ($isInstanceOf(az, "Int")) | |
249 | 301 | then { | |
250 | - | let | |
251 | - | | |
302 | + | let aA = az | |
303 | + | aA | |
252 | 304 | } | |
253 | 305 | else 0 | |
254 | 306 | } | |
255 | - | let | |
256 | - | let | |
257 | - | then | |
258 | - | else | |
259 | - | let | |
260 | - | if (if (if (( | |
261 | - | then ( | |
307 | + | let aM = (ay + c) | |
308 | + | let aE = if ((aK > 0)) | |
309 | + | then aK | |
310 | + | else aD | |
311 | + | let aF = (aD - aE) | |
312 | + | if (if (if ((aL >= 0)) | |
313 | + | then (aD >= aL) | |
262 | 314 | else false) | |
263 | - | then ( | |
315 | + | then (aM > i) | |
264 | 316 | else false) | |
265 | - | then throw((("Unable to withdraw coins! The account is locked for up to " + | |
266 | - | else if ((0 >= | |
317 | + | then throw((("Unable to withdraw coins! The account is locked for up to " + X(aM)) + ". Please wait...")) | |
318 | + | else if ((0 >= aE)) | |
267 | 319 | then throw("It's impossible to withdraw a negative amount or no balance.") | |
268 | - | else if (( | |
269 | - | then throw((((((("It's impossible to withdraw more than the balance of " + toString( | |
270 | - | else if ((d > | |
271 | - | then throw((((((("The minimum withdrawal amount is " + toString(d)) + " (") + | |
320 | + | else if ((aE > aD)) | |
321 | + | then throw((((((("It's impossible to withdraw more than the balance of " + toString(aD)) + " (") + m(aD, b)) + " ") + a) + ").")) | |
322 | + | else if ((d > aE)) | |
323 | + | then throw((((((("The minimum withdrawal amount is " + toString(d)) + " (") + m(d, b)) + " ") + a) + ").")) | |
272 | 324 | else { | |
273 | - | let | |
325 | + | let aG = if (aB) | |
274 | 326 | then j | |
275 | 327 | else { | |
276 | - | let | |
277 | - | if ($isInstanceOf( | |
328 | + | let az = getInteger(this, (ax + "_starttime")) | |
329 | + | if ($isInstanceOf(az, "Int")) | |
278 | 330 | then { | |
279 | - | let | |
280 | - | | |
331 | + | let aA = az | |
332 | + | aA | |
281 | 333 | } | |
282 | 334 | else 0 | |
283 | 335 | } | |
284 | - | let | |
336 | + | let aH = if ((aG > i)) | |
285 | 337 | then k | |
286 | - | else if ((d > | |
287 | - | then | |
338 | + | else if ((d > aF)) | |
339 | + | then aG | |
288 | 340 | else { | |
289 | - | let | |
290 | - | let | |
291 | - | (fraction( | |
341 | + | let aI = (aD / d) | |
342 | + | let aJ = (aF / d) | |
343 | + | (fraction(aG, aI, aJ) + fraction(i, (aJ - aI), aJ)) | |
292 | 344 | } | |
293 | - | if (( | |
294 | - | then ScriptResult(WriteSet([DataEntry(( | |
295 | - | else ScriptResult(WriteSet([DataEntry(( | |
345 | + | if ((aF >= d)) | |
346 | + | then ScriptResult(WriteSet([DataEntry((av + "_balance"), (aw - aE)), DataEntry((ax + "_balance"), aF), DataEntry((ax + "_starttime"), aH), DataEntry((ax + "_updatetime"), i)]), TransferSet([ScriptTransfer(at.caller, aE, f)])) | |
347 | + | else ScriptResult(WriteSet([DataEntry((av + "_balance"), (aw - aD)), DataEntry((ax + "_starttime"), aH), DataEntry((ax + "_status"), false), DataEntry((ax + "_updatetime"), i)]), TransferSet([ScriptTransfer(at.caller, aD, f)])) | |
296 | 348 | } | |
297 | 349 | } | |
298 | 350 | ||
299 | 351 | ||
300 | 352 | ||
301 | - | @Callable( | |
302 | - | func | |
303 | - | then ( | |
353 | + | @Callable(at) | |
354 | + | func sendRewards (aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW,aX,aY,aZ,ba,bb,bc,bd,be,bf,bg) = if (if ((at.callerPublicKey != g)) | |
355 | + | then (at.callerPublicKey != h) | |
304 | 356 | else false) | |
305 | - | then throw("Only | |
306 | - | else if ( | |
307 | - | then throw("Please | |
357 | + | then throw("Only the administrator can send rewards to customers!") | |
358 | + | else if ((l > i)) | |
359 | + | then throw((("The time to send rewards has not yet come! Beginning at " + X(l)) + ". Please wait...")) | |
308 | 360 | else { | |
309 | - | let ac = toBase58String(this.bytes) | |
310 | - | if (isDefined(getString(this, (ac + "_address")))) | |
311 | - | then WriteSet([DataEntry((ac + "_starttime"), ar), DataEntry((ac + "_updatetime"), i)]) | |
312 | - | else WriteSet([DataEntry((ac + "_address"), ac), DataEntry((ac + "_balance"), 0), DataEntry((ac + "_starttime"), ar), DataEntry((ac + "_status"), false), DataEntry((ac + "_updatetime"), i)]) | |
361 | + | let av = toBase58String(this.bytes) | |
362 | + | let aw = getIntegerValue(this, (av + "_balance")) | |
363 | + | let bh = (assetBalance(this, f) - aw) | |
364 | + | let bi = (((((((((aO + aQ) + aS) + aU) + aW) + aY) + ba) + bc) + be) + bg) | |
365 | + | let bj = if (!(isDefined(at.payment))) | |
366 | + | then bh | |
367 | + | else { | |
368 | + | let au = extract(at.payment) | |
369 | + | if ((au.assetId != f)) | |
370 | + | then throw((("Only " + a) + " is allowed to deposit.")) | |
371 | + | else (bh + au.amount) | |
372 | + | } | |
373 | + | if ((0 >= bi)) | |
374 | + | then throw("Zero or negative rewards are not allowed.") | |
375 | + | else if ((bi > bj)) | |
376 | + | then throw((((("Insufficient effective balance! The required amount is " + m((bi - bj), b)) + " ") + a) + ".")) | |
377 | + | else { | |
378 | + | let bk = if (if ((bf == "-")) | |
379 | + | then (bg == 0) | |
380 | + | else false) | |
381 | + | then nil | |
382 | + | else if (!(getBooleanValue(this, (bf + "_status")))) | |
383 | + | then throw("The status of client #9 is inactive!") | |
384 | + | else if ((0 >= bg)) | |
385 | + | then throw("Zero or negative amounts are not allowed.") | |
386 | + | else { | |
387 | + | let bl = getIntegerValue(this, (bf + "_balance")) | |
388 | + | [DataEntry((bf + "_balance"), (bl + bg)), DataEntry((bf + "_starttime"), k)] | |
389 | + | } | |
390 | + | let bm = if (if ((bd == "-")) | |
391 | + | then (be == 0) | |
392 | + | else false) | |
393 | + | then bk | |
394 | + | else if (!(getBooleanValue(this, (bd + "_status")))) | |
395 | + | then throw("The status of client #8 is inactive!") | |
396 | + | else if ((0 >= be)) | |
397 | + | then throw("Zero or negative amounts are not allowed.") | |
398 | + | else { | |
399 | + | let bn = getIntegerValue(this, (bd + "_balance")) | |
400 | + | [DataEntry((bd + "_balance"), (bn + be)), DataEntry((bd + "_starttime"), k)] :: bk | |
401 | + | } | |
402 | + | let bo = if (if ((bb == "-")) | |
403 | + | then (bc == 0) | |
404 | + | else false) | |
405 | + | then bm | |
406 | + | else if (!(getBooleanValue(this, (bb + "_status")))) | |
407 | + | then throw("The status of client #7 is inactive!") | |
408 | + | else if ((0 >= bc)) | |
409 | + | then throw("Zero or negative amounts are not allowed.") | |
410 | + | else { | |
411 | + | let bp = getIntegerValue(this, (bb + "_balance")) | |
412 | + | [DataEntry((bb + "_balance"), (bp + bc)), DataEntry((bb + "_starttime"), k)] :: bm | |
413 | + | } | |
414 | + | let bq = if (if ((aZ == "-")) | |
415 | + | then (ba == 0) | |
416 | + | else false) | |
417 | + | then bo | |
418 | + | else if (!(getBooleanValue(this, (aZ + "_status")))) | |
419 | + | then throw("The status of client #6 is inactive!") | |
420 | + | else if ((0 >= ba)) | |
421 | + | then throw("Zero or negative amounts are not allowed.") | |
422 | + | else { | |
423 | + | let br = getIntegerValue(this, (aZ + "_balance")) | |
424 | + | [DataEntry((aZ + "_balance"), (br + ba)), DataEntry((aZ + "_starttime"), k)] :: bo | |
425 | + | } | |
426 | + | let bs = if (if ((aX == "-")) | |
427 | + | then (aY == 0) | |
428 | + | else false) | |
429 | + | then bq | |
430 | + | else if (!(getBooleanValue(this, (aX + "_status")))) | |
431 | + | then throw("The status of client #5 is inactive!") | |
432 | + | else if ((0 >= aY)) | |
433 | + | then throw("Zero or negative amounts are not allowed.") | |
434 | + | else { | |
435 | + | let bt = getIntegerValue(this, (aX + "_balance")) | |
436 | + | [DataEntry((aX + "_balance"), (bt + aY)), DataEntry((aX + "_starttime"), k)] :: bq | |
437 | + | } | |
438 | + | let bu = if (if ((aV == "-")) | |
439 | + | then (aW == 0) | |
440 | + | else false) | |
441 | + | then bs | |
442 | + | else if (!(getBooleanValue(this, (aV + "_status")))) | |
443 | + | then throw("The status of client #4 is inactive!") | |
444 | + | else if ((0 >= aW)) | |
445 | + | then throw("Zero or negative amounts are not allowed.") | |
446 | + | else { | |
447 | + | let bv = getIntegerValue(this, (aV + "_balance")) | |
448 | + | [DataEntry((aV + "_balance"), (bv + aW)), DataEntry((aV + "_starttime"), k)] :: bs | |
449 | + | } | |
450 | + | let bw = if (if ((aT == "-")) | |
451 | + | then (aU == 0) | |
452 | + | else false) | |
453 | + | then bu | |
454 | + | else if (!(getBooleanValue(this, (aT + "_status")))) | |
455 | + | then throw("The status of client #3 is inactive!") | |
456 | + | else if ((0 >= aU)) | |
457 | + | then throw("Zero or negative amounts are not allowed.") | |
458 | + | else { | |
459 | + | let bx = getIntegerValue(this, (aT + "_balance")) | |
460 | + | [DataEntry((aT + "_balance"), (bx + aU)), DataEntry((aT + "_starttime"), k)] :: bu | |
461 | + | } | |
462 | + | let by = if (if ((aR == "-")) | |
463 | + | then (aS == 0) | |
464 | + | else false) | |
465 | + | then bw | |
466 | + | else if (!(getBooleanValue(this, (aR + "_status")))) | |
467 | + | then throw("The status of client #2 is inactive!") | |
468 | + | else if ((0 >= aS)) | |
469 | + | then throw("Zero or negative amounts are not allowed.") | |
470 | + | else { | |
471 | + | let bz = getIntegerValue(this, (aR + "_balance")) | |
472 | + | [DataEntry((aR + "_balance"), (bz + aS)), DataEntry((aR + "_starttime"), k)] :: bw | |
473 | + | } | |
474 | + | let bA = if (if ((aP == "-")) | |
475 | + | then (aQ == 0) | |
476 | + | else false) | |
477 | + | then by | |
478 | + | else if (!(getBooleanValue(this, (aP + "_status")))) | |
479 | + | then throw("The status of client #1 is inactive!") | |
480 | + | else if ((0 >= aQ)) | |
481 | + | then throw("Zero or negative amounts are not allowed.") | |
482 | + | else { | |
483 | + | let bB = getIntegerValue(this, (aP + "_balance")) | |
484 | + | [DataEntry((aP + "_balance"), (bB + aQ)), DataEntry((aP + "_starttime"), k)] :: by | |
485 | + | } | |
486 | + | let bC = if (if ((aN == "-")) | |
487 | + | then (aO == 0) | |
488 | + | else false) | |
489 | + | then bA | |
490 | + | else if (!(getBooleanValue(this, (aN + "_status")))) | |
491 | + | then throw("The status of client #0 is inactive!") | |
492 | + | else if ((0 >= aO)) | |
493 | + | then throw("Zero or negative amounts are not allowed.") | |
494 | + | else { | |
495 | + | let bD = getIntegerValue(this, (aN + "_balance")) | |
496 | + | [DataEntry((aN + "_balance"), (bD + aO)), DataEntry((aN + "_starttime"), k)] :: bA | |
497 | + | } | |
498 | + | WriteSet(DataEntry((av + "_balance"), (aw + bi)) :: bC) | |
499 | + | } | |
313 | 500 | } | |
314 | 501 | ||
315 | 502 | ||
316 | - | @Verifier(au) | |
317 | - | func av () = { | |
318 | - | let ag = au | |
319 | - | if ($isInstanceOf(ag, "TransferTransaction")) | |
503 | + | ||
504 | + | @Callable(at) | |
505 | + | func setMinStake (aE) = if (if ((at.callerPublicKey != g)) | |
506 | + | then (at.callerPublicKey != h) | |
507 | + | else false) | |
508 | + | then throw("Only the administrator can set and modify minStake!") | |
509 | + | else if (isDefined(at.payment)) | |
510 | + | then throw("Please do not attach payment when setting up minStake.") | |
511 | + | else { | |
512 | + | let av = toBase58String(this.bytes) | |
513 | + | if (isDefined(getString(this, (av + "_address")))) | |
514 | + | then WriteSet([DataEntry((av + "_starttime"), aE), DataEntry((av + "_updatetime"), i)]) | |
515 | + | else WriteSet([DataEntry((av + "_address"), av), DataEntry((av + "_balance"), 0), DataEntry((av + "_starttime"), aE), DataEntry((av + "_status"), false), DataEntry((av + "_updatetime"), i)]) | |
516 | + | } | |
517 | + | ||
518 | + | ||
519 | + | @Verifier(bE) | |
520 | + | func bF () = { | |
521 | + | let az = bE | |
522 | + | if ($isInstanceOf(az, "TransferTransaction")) | |
320 | 523 | then { | |
321 | - | let | |
322 | - | if (if (if (( | |
323 | - | then ( | |
524 | + | let bG = az | |
525 | + | if (if (if ((bG.assetId != f)) | |
526 | + | then (bG.feeAssetId != f) | |
324 | 527 | else false) | |
325 | - | then sigVerify( | |
528 | + | then sigVerify(bG.bodyBytes, bG.proofs[2], g) | |
326 | 529 | else false) | |
327 | - | then sigVerify( | |
530 | + | then sigVerify(bG.bodyBytes, bG.proofs[1], h) | |
328 | 531 | else false | |
329 | 532 | } | |
330 | - | else if ($isInstanceOf( | |
533 | + | else if ($isInstanceOf(az, "SetScriptTransaction")) | |
331 | 534 | then { | |
332 | - | let | |
333 | - | if (sigVerify( | |
334 | - | then sigVerify( | |
535 | + | let bH = az | |
536 | + | if (sigVerify(bH.bodyBytes, bH.proofs[2], g)) | |
537 | + | then sigVerify(bH.bodyBytes, bH.proofs[1], h) | |
335 | 538 | else false | |
336 | 539 | } | |
337 | 540 | else false |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 3 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "RusCoin" | |
5 | 5 | ||
6 | 6 | let b = 100000 | |
7 | 7 | ||
8 | - | let c = ( | |
8 | + | let c = (2629746 * 1000) | |
9 | 9 | ||
10 | - | let d = ( | |
10 | + | let d = (b / 100) | |
11 | 11 | ||
12 | - | let e = ( | |
12 | + | let e = (10000 * b) | |
13 | 13 | ||
14 | 14 | let f = base58'EMdiF8uaySswfCdMxc114rSfzUsAKCtK9d8eSx6ruKP4' | |
15 | 15 | ||
16 | 16 | let g = base58'2in4yGNBKfitQbXbsHmL2unWrUnRo7GWyqcZXsmAzhQi' | |
17 | 17 | ||
18 | 18 | let h = base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT' | |
19 | 19 | ||
20 | - | let i = | |
20 | + | let i = lastBlock.timestamp | |
21 | 21 | ||
22 | 22 | let j = ((i / c) * c) | |
23 | 23 | ||
24 | 24 | let k = (j + c) | |
25 | 25 | ||
26 | - | func l (m,n) = { | |
27 | - | func o (p,q) = if (if ((p == "")) | |
28 | - | then (q == 0) | |
26 | + | let l = (k - (((24 * 60) * 60) * 1000)) | |
27 | + | ||
28 | + | func m (n,o) = { | |
29 | + | let p = "," | |
30 | + | let q = "." | |
31 | + | func r (s,t) = if (if ((s == "")) | |
32 | + | then (t == 0) | |
29 | 33 | else false) | |
30 | 34 | then "" | |
31 | - | else if (( | |
32 | - | then toString( | |
33 | - | else (( | |
35 | + | else if ((s == "")) | |
36 | + | then toString(t) | |
37 | + | else ((s + p) + drop(toString((t + 1000)), 1)) | |
34 | 38 | ||
35 | - | let r = (m / n) | |
36 | - | let s = (m % n) | |
37 | - | let t = (r / (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000)) | |
38 | - | let u = (r % (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000)) | |
39 | - | let v = (u / ((((1000 * 1000) * 1000) * 1000) * 1000)) | |
40 | - | let w = (u % ((((1000 * 1000) * 1000) * 1000) * 1000)) | |
41 | - | let x = (w / (((1000 * 1000) * 1000) * 1000)) | |
42 | - | let y = (w % (((1000 * 1000) * 1000) * 1000)) | |
43 | - | let z = (y / ((1000 * 1000) * 1000)) | |
44 | - | let A = (y % ((1000 * 1000) * 1000)) | |
45 | - | let B = (A / (1000 * 1000)) | |
46 | - | let C = (A % (1000 * 1000)) | |
47 | - | let D = (C / 1000) | |
48 | - | let E = (C % 1000) | |
49 | - | let F = { | |
50 | - | let G = [t, v, x, z, B, D, E] | |
51 | - | let H = size(G) | |
52 | - | let I = "" | |
53 | - | if ((H == 0)) | |
54 | - | then I | |
39 | + | func u (v) = if ((drop(v, (size(v) - 1)) != "0")) | |
40 | + | then v | |
41 | + | else take(v, (size(v) - 1)) | |
42 | + | ||
43 | + | let w = (n / o) | |
44 | + | let x = (n % o) | |
45 | + | let y = (w / (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000)) | |
46 | + | let z = (w % (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000)) | |
47 | + | let A = (z / ((((1000 * 1000) * 1000) * 1000) * 1000)) | |
48 | + | let B = (z % ((((1000 * 1000) * 1000) * 1000) * 1000)) | |
49 | + | let C = (B / (((1000 * 1000) * 1000) * 1000)) | |
50 | + | let D = (B % (((1000 * 1000) * 1000) * 1000)) | |
51 | + | let E = (D / ((1000 * 1000) * 1000)) | |
52 | + | let F = (D % ((1000 * 1000) * 1000)) | |
53 | + | let G = (F / (1000 * 1000)) | |
54 | + | let H = (F % (1000 * 1000)) | |
55 | + | let I = (H / 1000) | |
56 | + | let J = (H % 1000) | |
57 | + | let K = { | |
58 | + | let L = [y, A, C, E, G, I, J] | |
59 | + | let M = size(L) | |
60 | + | let N = "" | |
61 | + | if ((M == 0)) | |
62 | + | then N | |
55 | 63 | else { | |
56 | - | let | |
57 | - | if (( | |
58 | - | then | |
64 | + | let O = r(N, L[0]) | |
65 | + | if ((M == 1)) | |
66 | + | then O | |
59 | 67 | else { | |
60 | - | let | |
61 | - | if (( | |
62 | - | then | |
68 | + | let P = r(O, L[1]) | |
69 | + | if ((M == 2)) | |
70 | + | then P | |
63 | 71 | else { | |
64 | - | let | |
65 | - | if (( | |
66 | - | then | |
72 | + | let Q = r(P, L[2]) | |
73 | + | if ((M == 3)) | |
74 | + | then Q | |
67 | 75 | else { | |
68 | - | let | |
69 | - | if (( | |
70 | - | then | |
76 | + | let R = r(Q, L[3]) | |
77 | + | if ((M == 4)) | |
78 | + | then R | |
71 | 79 | else { | |
72 | - | let | |
73 | - | if (( | |
74 | - | then | |
80 | + | let S = r(R, L[4]) | |
81 | + | if ((M == 5)) | |
82 | + | then S | |
75 | 83 | else { | |
76 | - | let | |
77 | - | if (( | |
78 | - | then | |
84 | + | let T = r(S, L[5]) | |
85 | + | if ((M == 6)) | |
86 | + | then T | |
79 | 87 | else { | |
80 | - | let | |
81 | - | if (( | |
82 | - | then | |
88 | + | let U = r(T, L[6]) | |
89 | + | if ((M == 7)) | |
90 | + | then U | |
83 | 91 | else { | |
84 | - | let | |
92 | + | let V = r(U, L[7]) | |
85 | 93 | throw("List size exceed 7") | |
86 | 94 | } | |
87 | 95 | } | |
88 | 96 | } | |
89 | 97 | } | |
90 | 98 | } | |
91 | 99 | } | |
92 | 100 | } | |
93 | 101 | } | |
94 | 102 | } | |
95 | - | let R = take(drop((toString((s + n)) + "00000000"), 1), 8) | |
96 | - | let S = if ((takeRight(R, 1) == "0")) | |
97 | - | then dropRight(R, 1) | |
98 | - | else R | |
99 | - | let T = if ((takeRight(S, 1) == "0")) | |
100 | - | then dropRight(S, 1) | |
101 | - | else S | |
102 | - | let U = if ((takeRight(T, 1) == "0")) | |
103 | - | then dropRight(T, 1) | |
104 | - | else T | |
105 | - | let V = if ((takeRight(U, 1) == "0")) | |
106 | - | then dropRight(U, 1) | |
107 | - | else U | |
108 | - | let W = if ((takeRight(V, 1) == "0")) | |
109 | - | then dropRight(V, 1) | |
110 | - | else V | |
111 | - | let X = if ((takeRight(W, 1) == "0")) | |
112 | - | then dropRight(W, 1) | |
113 | - | else W | |
114 | - | let Y = if ((takeRight(X, 1) == "0")) | |
115 | - | then dropRight(X, 1) | |
116 | - | else X | |
117 | - | let Z = if ((takeRight(Y, 1) == "0")) | |
118 | - | then dropRight(Y, 1) | |
119 | - | else Y | |
120 | - | ((if ((F != "")) | |
121 | - | then F | |
122 | - | else "0") + (if ((Z != "")) | |
123 | - | then ("." + Z) | |
103 | + | let W = u(u(u(u(u(u(u(u(take(drop(toString((x + o)), 1), 8))))))))) | |
104 | + | ((if ((K != "")) | |
105 | + | then K | |
106 | + | else "0") + (if ((W != "")) | |
107 | + | then (q + W) | |
124 | 108 | else "")) | |
125 | 109 | } | |
126 | 110 | ||
127 | 111 | ||
128 | - | @Callable(aa) | |
112 | + | func X (Y) = { | |
113 | + | let Z = " " | |
114 | + | let aa = " UTC" | |
115 | + | let ab = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365] | |
116 | + | let ac = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366] | |
117 | + | if (if ((-12212553600000 > Y)) | |
118 | + | then true | |
119 | + | else (Y > 253402300799999)) | |
120 | + | then throw("ISO 8601: Only years from 1583 to 9999 are permitted.") | |
121 | + | else { | |
122 | + | let ad = (((((1969 * 365) + (1969 / 4)) - (1969 / 100)) + (1969 / 400)) + 366) | |
123 | + | let ae = (Y + ((ad * 86400) * 1000)) | |
124 | + | let af = { | |
125 | + | let ag = ((ae / (31556952 * 1000)) - 1) | |
126 | + | let ah = (((((ag * 365) + (ag / 4)) - (ag / 100)) + (ag / 400)) + 366) | |
127 | + | let ai = ((ae / (86400 * 1000)) - ah) | |
128 | + | let aj = if (if (if ((((ag + 1) % 4) == 0)) | |
129 | + | then (((ag + 1) % 100) != 0) | |
130 | + | else false) | |
131 | + | then true | |
132 | + | else (((ag + 1) % 400) == 0)) | |
133 | + | then ac | |
134 | + | else ab | |
135 | + | let ak = if ((ai >= aj[12])) | |
136 | + | then throw() | |
137 | + | else if ((ai >= aj[11])) | |
138 | + | then 11 | |
139 | + | else if ((ai >= aj[10])) | |
140 | + | then 10 | |
141 | + | else if ((ai >= aj[9])) | |
142 | + | then 9 | |
143 | + | else if ((ai >= aj[8])) | |
144 | + | then 8 | |
145 | + | else if ((ai >= aj[7])) | |
146 | + | then 7 | |
147 | + | else if ((ai >= aj[6])) | |
148 | + | then 6 | |
149 | + | else if ((ai >= aj[5])) | |
150 | + | then 5 | |
151 | + | else if ((ai >= aj[4])) | |
152 | + | then 4 | |
153 | + | else if ((ai >= aj[3])) | |
154 | + | then 3 | |
155 | + | else if ((ai >= aj[2])) | |
156 | + | then 2 | |
157 | + | else if ((ai >= aj[1])) | |
158 | + | then 1 | |
159 | + | else if ((ai >= aj[0])) | |
160 | + | then 0 | |
161 | + | else throw() | |
162 | + | let al = (ai - aj[ak]) | |
163 | + | ((((toString((ag + 1)) + "-") + drop(toString((ak + 101)), 1)) + "-") + drop(toString((al + 101)), 1)) | |
164 | + | } | |
165 | + | let am = { | |
166 | + | let an = (ae % (86400 * 1000)) | |
167 | + | let ao = (an / (3600 * 1000)) | |
168 | + | let ap = (an % (3600 * 1000)) | |
169 | + | let ak = (ap / (60 * 1000)) | |
170 | + | let aq = (ap % (60 * 1000)) | |
171 | + | let ar = (aq / 1000) | |
172 | + | let as = (aq % 1000) | |
173 | + | ((((drop(toString((ao + 100)), 1) + ":") + drop(toString((ak + 100)), 1)) + ":") + drop(toString((ar + 100)), 1)) | |
174 | + | } | |
175 | + | (((af + Z) + am) + aa) | |
176 | + | } | |
177 | + | } | |
178 | + | ||
179 | + | ||
180 | + | @Callable(at) | |
129 | 181 | func deposit () = { | |
130 | - | let | |
131 | - | then extract( | |
182 | + | let au = if (isDefined(at.payment)) | |
183 | + | then extract(at.payment) | |
132 | 184 | else throw((("There is no attached payment " + a) + ".")) | |
133 | - | if (( | |
185 | + | if ((au.assetId != f)) | |
134 | 186 | then throw((("Only " + a) + " is allowed to deposit.")) | |
135 | 187 | else { | |
136 | - | let | |
137 | - | let | |
138 | - | let | |
139 | - | let | |
140 | - | let | |
141 | - | if ($isInstanceOf( | |
188 | + | let av = toBase58String(this.bytes) | |
189 | + | let aw = getIntegerValue(this, (av + "_balance")) | |
190 | + | let ax = toBase58String(at.caller.bytes) | |
191 | + | let ay = { | |
192 | + | let az = getInteger(this, (ax + "_updatetime")) | |
193 | + | if ($isInstanceOf(az, "Int")) | |
142 | 194 | then { | |
143 | - | let | |
144 | - | | |
195 | + | let aA = az | |
196 | + | aA | |
145 | 197 | } | |
146 | 198 | else 0 | |
147 | 199 | } | |
148 | - | let | |
149 | - | let | |
150 | - | let | |
151 | - | if ($isInstanceOf( | |
200 | + | let aB = (j >= ay) | |
201 | + | let aC = { | |
202 | + | let az = getBoolean(this, (ax + "_status")) | |
203 | + | if ($isInstanceOf(az, "Boolean")) | |
152 | 204 | then { | |
153 | - | let | |
154 | - | | |
205 | + | let aA = az | |
206 | + | aA | |
155 | 207 | } | |
156 | 208 | else false | |
157 | 209 | } | |
158 | - | let | |
159 | - | then !( | |
210 | + | let aD = if (if (aB) | |
211 | + | then !(aC) | |
160 | 212 | else false) | |
161 | 213 | then 0 | |
162 | 214 | else { | |
163 | - | let | |
164 | - | if ($isInstanceOf( | |
215 | + | let az = getInteger(this, (ax + "_balance")) | |
216 | + | if ($isInstanceOf(az, "Int")) | |
165 | 217 | then { | |
166 | - | let | |
167 | - | | |
218 | + | let aA = az | |
219 | + | aA | |
168 | 220 | } | |
169 | 221 | else 0 | |
170 | 222 | } | |
171 | - | let | |
172 | - | let | |
173 | - | then ( | |
174 | - | else | |
175 | - | if (if ((d > | |
223 | + | let aE = au.amount | |
224 | + | let aF = if (aC) | |
225 | + | then (aD + aE) | |
226 | + | else aE | |
227 | + | if (if ((d > aF)) | |
176 | 228 | then true | |
177 | - | else ( | |
178 | - | then throw((((((((("The minimum allowable balance is " + | |
229 | + | else (aF > e)) | |
230 | + | then throw((((((((("The minimum allowable balance is " + m(d, b)) + " ") + a) + ", and the maximum is ") + m(e, b)) + " ") + a) + ".")) | |
179 | 231 | else { | |
180 | - | let | |
181 | - | then | |
232 | + | let aG = if (if (aB) | |
233 | + | then aC | |
182 | 234 | else false) | |
183 | 235 | then j | |
184 | - | else if (if ( | |
185 | - | then !( | |
236 | + | else if (if (aB) | |
237 | + | then !(aC) | |
186 | 238 | else false) | |
187 | 239 | then i | |
188 | 240 | else { | |
189 | - | let | |
190 | - | if ($isInstanceOf( | |
241 | + | let az = getInteger(this, (ax + "_starttime")) | |
242 | + | if ($isInstanceOf(az, "Int")) | |
191 | 243 | then { | |
192 | - | let | |
193 | - | if ( | |
194 | - | then | |
195 | - | else (( | |
244 | + | let aA = az | |
245 | + | if (aC) | |
246 | + | then aA | |
247 | + | else ((aA + i) - ay) | |
196 | 248 | } | |
197 | 249 | else 0 | |
198 | 250 | } | |
199 | - | let | |
251 | + | let aH = if ((aG > i)) | |
200 | 252 | then k | |
201 | 253 | else { | |
202 | - | let | |
203 | - | let | |
204 | - | (fraction( | |
254 | + | let aI = (aD / d) | |
255 | + | let aJ = (aF / d) | |
256 | + | (fraction(aG, aI, aJ) + fraction(i, (aJ - aI), aJ)) | |
205 | 257 | } | |
206 | - | if ( | |
207 | - | then WriteSet([DataEntry(( | |
208 | - | else if (isDefined(getString(this, ( | |
209 | - | then WriteSet([DataEntry(( | |
210 | - | else WriteSet([DataEntry(( | |
258 | + | if (aC) | |
259 | + | then WriteSet([DataEntry((av + "_balance"), (aw + aE)), DataEntry((ax + "_balance"), aF), DataEntry((ax + "_starttime"), aH), DataEntry((ax + "_updatetime"), i)]) | |
260 | + | else if (isDefined(getString(this, (ax + "_address")))) | |
261 | + | then WriteSet([DataEntry((av + "_balance"), (aw + aE)), DataEntry((ax + "_balance"), aF), DataEntry((ax + "_starttime"), aH), DataEntry((ax + "_status"), true), DataEntry((ax + "_updatetime"), i)]) | |
262 | + | else WriteSet([DataEntry((av + "_balance"), (aw + aE)), DataEntry((ax + "_address"), ax), DataEntry((ax + "_balance"), aF), DataEntry((ax + "_starttime"), aH), DataEntry((ax + "_status"), true), DataEntry((ax + "_updatetime"), i)]) | |
211 | 263 | } | |
212 | 264 | } | |
213 | 265 | } | |
214 | 266 | ||
215 | 267 | ||
216 | 268 | ||
217 | - | @Callable( | |
218 | - | func withdraw ( | |
219 | - | then throw("Please | |
269 | + | @Callable(at) | |
270 | + | func withdraw (aK) = if (isDefined(at.payment)) | |
271 | + | then throw("Please do not attach payment when withdrawing funds.") | |
220 | 272 | else { | |
221 | - | let | |
222 | - | let | |
223 | - | let | |
224 | - | let | |
225 | - | let | |
226 | - | let | |
227 | - | if ($isInstanceOf( | |
273 | + | let av = toBase58String(this.bytes) | |
274 | + | let aw = getIntegerValue(this, (av + "_balance")) | |
275 | + | let aL = getIntegerValue(this, (av + "_starttime")) | |
276 | + | let ax = toBase58String(at.caller.bytes) | |
277 | + | let ay = { | |
278 | + | let az = getInteger(this, (ax + "_updatetime")) | |
279 | + | if ($isInstanceOf(az, "Int")) | |
228 | 280 | then { | |
229 | - | let | |
230 | - | | |
281 | + | let aA = az | |
282 | + | aA | |
231 | 283 | } | |
232 | 284 | else 0 | |
233 | 285 | } | |
234 | - | let | |
235 | - | let | |
236 | - | let | |
237 | - | if ($isInstanceOf( | |
286 | + | let aB = (j >= ay) | |
287 | + | let aC = { | |
288 | + | let az = getBoolean(this, (ax + "_status")) | |
289 | + | if ($isInstanceOf(az, "Boolean")) | |
238 | 290 | then { | |
239 | - | let | |
240 | - | | |
291 | + | let aA = az | |
292 | + | aA | |
241 | 293 | } | |
242 | 294 | else false | |
243 | 295 | } | |
244 | - | let | |
296 | + | let aD = if (!(aC)) | |
245 | 297 | then 0 | |
246 | 298 | else { | |
247 | - | let | |
248 | - | if ($isInstanceOf( | |
299 | + | let az = getInteger(this, (ax + "_balance")) | |
300 | + | if ($isInstanceOf(az, "Int")) | |
249 | 301 | then { | |
250 | - | let | |
251 | - | | |
302 | + | let aA = az | |
303 | + | aA | |
252 | 304 | } | |
253 | 305 | else 0 | |
254 | 306 | } | |
255 | - | let | |
256 | - | let | |
257 | - | then | |
258 | - | else | |
259 | - | let | |
260 | - | if (if (if (( | |
261 | - | then ( | |
307 | + | let aM = (ay + c) | |
308 | + | let aE = if ((aK > 0)) | |
309 | + | then aK | |
310 | + | else aD | |
311 | + | let aF = (aD - aE) | |
312 | + | if (if (if ((aL >= 0)) | |
313 | + | then (aD >= aL) | |
262 | 314 | else false) | |
263 | - | then ( | |
315 | + | then (aM > i) | |
264 | 316 | else false) | |
265 | - | then throw((("Unable to withdraw coins! The account is locked for up to " + | |
266 | - | else if ((0 >= | |
317 | + | then throw((("Unable to withdraw coins! The account is locked for up to " + X(aM)) + ". Please wait...")) | |
318 | + | else if ((0 >= aE)) | |
267 | 319 | then throw("It's impossible to withdraw a negative amount or no balance.") | |
268 | - | else if (( | |
269 | - | then throw((((((("It's impossible to withdraw more than the balance of " + toString( | |
270 | - | else if ((d > | |
271 | - | then throw((((((("The minimum withdrawal amount is " + toString(d)) + " (") + | |
320 | + | else if ((aE > aD)) | |
321 | + | then throw((((((("It's impossible to withdraw more than the balance of " + toString(aD)) + " (") + m(aD, b)) + " ") + a) + ").")) | |
322 | + | else if ((d > aE)) | |
323 | + | then throw((((((("The minimum withdrawal amount is " + toString(d)) + " (") + m(d, b)) + " ") + a) + ").")) | |
272 | 324 | else { | |
273 | - | let | |
325 | + | let aG = if (aB) | |
274 | 326 | then j | |
275 | 327 | else { | |
276 | - | let | |
277 | - | if ($isInstanceOf( | |
328 | + | let az = getInteger(this, (ax + "_starttime")) | |
329 | + | if ($isInstanceOf(az, "Int")) | |
278 | 330 | then { | |
279 | - | let | |
280 | - | | |
331 | + | let aA = az | |
332 | + | aA | |
281 | 333 | } | |
282 | 334 | else 0 | |
283 | 335 | } | |
284 | - | let | |
336 | + | let aH = if ((aG > i)) | |
285 | 337 | then k | |
286 | - | else if ((d > | |
287 | - | then | |
338 | + | else if ((d > aF)) | |
339 | + | then aG | |
288 | 340 | else { | |
289 | - | let | |
290 | - | let | |
291 | - | (fraction( | |
341 | + | let aI = (aD / d) | |
342 | + | let aJ = (aF / d) | |
343 | + | (fraction(aG, aI, aJ) + fraction(i, (aJ - aI), aJ)) | |
292 | 344 | } | |
293 | - | if (( | |
294 | - | then ScriptResult(WriteSet([DataEntry(( | |
295 | - | else ScriptResult(WriteSet([DataEntry(( | |
345 | + | if ((aF >= d)) | |
346 | + | then ScriptResult(WriteSet([DataEntry((av + "_balance"), (aw - aE)), DataEntry((ax + "_balance"), aF), DataEntry((ax + "_starttime"), aH), DataEntry((ax + "_updatetime"), i)]), TransferSet([ScriptTransfer(at.caller, aE, f)])) | |
347 | + | else ScriptResult(WriteSet([DataEntry((av + "_balance"), (aw - aD)), DataEntry((ax + "_starttime"), aH), DataEntry((ax + "_status"), false), DataEntry((ax + "_updatetime"), i)]), TransferSet([ScriptTransfer(at.caller, aD, f)])) | |
296 | 348 | } | |
297 | 349 | } | |
298 | 350 | ||
299 | 351 | ||
300 | 352 | ||
301 | - | @Callable( | |
302 | - | func | |
303 | - | then ( | |
353 | + | @Callable(at) | |
354 | + | func sendRewards (aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW,aX,aY,aZ,ba,bb,bc,bd,be,bf,bg) = if (if ((at.callerPublicKey != g)) | |
355 | + | then (at.callerPublicKey != h) | |
304 | 356 | else false) | |
305 | - | then throw("Only | |
306 | - | else if ( | |
307 | - | then throw("Please | |
357 | + | then throw("Only the administrator can send rewards to customers!") | |
358 | + | else if ((l > i)) | |
359 | + | then throw((("The time to send rewards has not yet come! Beginning at " + X(l)) + ". Please wait...")) | |
308 | 360 | else { | |
309 | - | let ac = toBase58String(this.bytes) | |
310 | - | if (isDefined(getString(this, (ac + "_address")))) | |
311 | - | then WriteSet([DataEntry((ac + "_starttime"), ar), DataEntry((ac + "_updatetime"), i)]) | |
312 | - | else WriteSet([DataEntry((ac + "_address"), ac), DataEntry((ac + "_balance"), 0), DataEntry((ac + "_starttime"), ar), DataEntry((ac + "_status"), false), DataEntry((ac + "_updatetime"), i)]) | |
361 | + | let av = toBase58String(this.bytes) | |
362 | + | let aw = getIntegerValue(this, (av + "_balance")) | |
363 | + | let bh = (assetBalance(this, f) - aw) | |
364 | + | let bi = (((((((((aO + aQ) + aS) + aU) + aW) + aY) + ba) + bc) + be) + bg) | |
365 | + | let bj = if (!(isDefined(at.payment))) | |
366 | + | then bh | |
367 | + | else { | |
368 | + | let au = extract(at.payment) | |
369 | + | if ((au.assetId != f)) | |
370 | + | then throw((("Only " + a) + " is allowed to deposit.")) | |
371 | + | else (bh + au.amount) | |
372 | + | } | |
373 | + | if ((0 >= bi)) | |
374 | + | then throw("Zero or negative rewards are not allowed.") | |
375 | + | else if ((bi > bj)) | |
376 | + | then throw((((("Insufficient effective balance! The required amount is " + m((bi - bj), b)) + " ") + a) + ".")) | |
377 | + | else { | |
378 | + | let bk = if (if ((bf == "-")) | |
379 | + | then (bg == 0) | |
380 | + | else false) | |
381 | + | then nil | |
382 | + | else if (!(getBooleanValue(this, (bf + "_status")))) | |
383 | + | then throw("The status of client #9 is inactive!") | |
384 | + | else if ((0 >= bg)) | |
385 | + | then throw("Zero or negative amounts are not allowed.") | |
386 | + | else { | |
387 | + | let bl = getIntegerValue(this, (bf + "_balance")) | |
388 | + | [DataEntry((bf + "_balance"), (bl + bg)), DataEntry((bf + "_starttime"), k)] | |
389 | + | } | |
390 | + | let bm = if (if ((bd == "-")) | |
391 | + | then (be == 0) | |
392 | + | else false) | |
393 | + | then bk | |
394 | + | else if (!(getBooleanValue(this, (bd + "_status")))) | |
395 | + | then throw("The status of client #8 is inactive!") | |
396 | + | else if ((0 >= be)) | |
397 | + | then throw("Zero or negative amounts are not allowed.") | |
398 | + | else { | |
399 | + | let bn = getIntegerValue(this, (bd + "_balance")) | |
400 | + | [DataEntry((bd + "_balance"), (bn + be)), DataEntry((bd + "_starttime"), k)] :: bk | |
401 | + | } | |
402 | + | let bo = if (if ((bb == "-")) | |
403 | + | then (bc == 0) | |
404 | + | else false) | |
405 | + | then bm | |
406 | + | else if (!(getBooleanValue(this, (bb + "_status")))) | |
407 | + | then throw("The status of client #7 is inactive!") | |
408 | + | else if ((0 >= bc)) | |
409 | + | then throw("Zero or negative amounts are not allowed.") | |
410 | + | else { | |
411 | + | let bp = getIntegerValue(this, (bb + "_balance")) | |
412 | + | [DataEntry((bb + "_balance"), (bp + bc)), DataEntry((bb + "_starttime"), k)] :: bm | |
413 | + | } | |
414 | + | let bq = if (if ((aZ == "-")) | |
415 | + | then (ba == 0) | |
416 | + | else false) | |
417 | + | then bo | |
418 | + | else if (!(getBooleanValue(this, (aZ + "_status")))) | |
419 | + | then throw("The status of client #6 is inactive!") | |
420 | + | else if ((0 >= ba)) | |
421 | + | then throw("Zero or negative amounts are not allowed.") | |
422 | + | else { | |
423 | + | let br = getIntegerValue(this, (aZ + "_balance")) | |
424 | + | [DataEntry((aZ + "_balance"), (br + ba)), DataEntry((aZ + "_starttime"), k)] :: bo | |
425 | + | } | |
426 | + | let bs = if (if ((aX == "-")) | |
427 | + | then (aY == 0) | |
428 | + | else false) | |
429 | + | then bq | |
430 | + | else if (!(getBooleanValue(this, (aX + "_status")))) | |
431 | + | then throw("The status of client #5 is inactive!") | |
432 | + | else if ((0 >= aY)) | |
433 | + | then throw("Zero or negative amounts are not allowed.") | |
434 | + | else { | |
435 | + | let bt = getIntegerValue(this, (aX + "_balance")) | |
436 | + | [DataEntry((aX + "_balance"), (bt + aY)), DataEntry((aX + "_starttime"), k)] :: bq | |
437 | + | } | |
438 | + | let bu = if (if ((aV == "-")) | |
439 | + | then (aW == 0) | |
440 | + | else false) | |
441 | + | then bs | |
442 | + | else if (!(getBooleanValue(this, (aV + "_status")))) | |
443 | + | then throw("The status of client #4 is inactive!") | |
444 | + | else if ((0 >= aW)) | |
445 | + | then throw("Zero or negative amounts are not allowed.") | |
446 | + | else { | |
447 | + | let bv = getIntegerValue(this, (aV + "_balance")) | |
448 | + | [DataEntry((aV + "_balance"), (bv + aW)), DataEntry((aV + "_starttime"), k)] :: bs | |
449 | + | } | |
450 | + | let bw = if (if ((aT == "-")) | |
451 | + | then (aU == 0) | |
452 | + | else false) | |
453 | + | then bu | |
454 | + | else if (!(getBooleanValue(this, (aT + "_status")))) | |
455 | + | then throw("The status of client #3 is inactive!") | |
456 | + | else if ((0 >= aU)) | |
457 | + | then throw("Zero or negative amounts are not allowed.") | |
458 | + | else { | |
459 | + | let bx = getIntegerValue(this, (aT + "_balance")) | |
460 | + | [DataEntry((aT + "_balance"), (bx + aU)), DataEntry((aT + "_starttime"), k)] :: bu | |
461 | + | } | |
462 | + | let by = if (if ((aR == "-")) | |
463 | + | then (aS == 0) | |
464 | + | else false) | |
465 | + | then bw | |
466 | + | else if (!(getBooleanValue(this, (aR + "_status")))) | |
467 | + | then throw("The status of client #2 is inactive!") | |
468 | + | else if ((0 >= aS)) | |
469 | + | then throw("Zero or negative amounts are not allowed.") | |
470 | + | else { | |
471 | + | let bz = getIntegerValue(this, (aR + "_balance")) | |
472 | + | [DataEntry((aR + "_balance"), (bz + aS)), DataEntry((aR + "_starttime"), k)] :: bw | |
473 | + | } | |
474 | + | let bA = if (if ((aP == "-")) | |
475 | + | then (aQ == 0) | |
476 | + | else false) | |
477 | + | then by | |
478 | + | else if (!(getBooleanValue(this, (aP + "_status")))) | |
479 | + | then throw("The status of client #1 is inactive!") | |
480 | + | else if ((0 >= aQ)) | |
481 | + | then throw("Zero or negative amounts are not allowed.") | |
482 | + | else { | |
483 | + | let bB = getIntegerValue(this, (aP + "_balance")) | |
484 | + | [DataEntry((aP + "_balance"), (bB + aQ)), DataEntry((aP + "_starttime"), k)] :: by | |
485 | + | } | |
486 | + | let bC = if (if ((aN == "-")) | |
487 | + | then (aO == 0) | |
488 | + | else false) | |
489 | + | then bA | |
490 | + | else if (!(getBooleanValue(this, (aN + "_status")))) | |
491 | + | then throw("The status of client #0 is inactive!") | |
492 | + | else if ((0 >= aO)) | |
493 | + | then throw("Zero or negative amounts are not allowed.") | |
494 | + | else { | |
495 | + | let bD = getIntegerValue(this, (aN + "_balance")) | |
496 | + | [DataEntry((aN + "_balance"), (bD + aO)), DataEntry((aN + "_starttime"), k)] :: bA | |
497 | + | } | |
498 | + | WriteSet(DataEntry((av + "_balance"), (aw + bi)) :: bC) | |
499 | + | } | |
313 | 500 | } | |
314 | 501 | ||
315 | 502 | ||
316 | - | @Verifier(au) | |
317 | - | func av () = { | |
318 | - | let ag = au | |
319 | - | if ($isInstanceOf(ag, "TransferTransaction")) | |
503 | + | ||
504 | + | @Callable(at) | |
505 | + | func setMinStake (aE) = if (if ((at.callerPublicKey != g)) | |
506 | + | then (at.callerPublicKey != h) | |
507 | + | else false) | |
508 | + | then throw("Only the administrator can set and modify minStake!") | |
509 | + | else if (isDefined(at.payment)) | |
510 | + | then throw("Please do not attach payment when setting up minStake.") | |
511 | + | else { | |
512 | + | let av = toBase58String(this.bytes) | |
513 | + | if (isDefined(getString(this, (av + "_address")))) | |
514 | + | then WriteSet([DataEntry((av + "_starttime"), aE), DataEntry((av + "_updatetime"), i)]) | |
515 | + | else WriteSet([DataEntry((av + "_address"), av), DataEntry((av + "_balance"), 0), DataEntry((av + "_starttime"), aE), DataEntry((av + "_status"), false), DataEntry((av + "_updatetime"), i)]) | |
516 | + | } | |
517 | + | ||
518 | + | ||
519 | + | @Verifier(bE) | |
520 | + | func bF () = { | |
521 | + | let az = bE | |
522 | + | if ($isInstanceOf(az, "TransferTransaction")) | |
320 | 523 | then { | |
321 | - | let | |
322 | - | if (if (if (( | |
323 | - | then ( | |
524 | + | let bG = az | |
525 | + | if (if (if ((bG.assetId != f)) | |
526 | + | then (bG.feeAssetId != f) | |
324 | 527 | else false) | |
325 | - | then sigVerify( | |
528 | + | then sigVerify(bG.bodyBytes, bG.proofs[2], g) | |
326 | 529 | else false) | |
327 | - | then sigVerify( | |
530 | + | then sigVerify(bG.bodyBytes, bG.proofs[1], h) | |
328 | 531 | else false | |
329 | 532 | } | |
330 | - | else if ($isInstanceOf( | |
533 | + | else if ($isInstanceOf(az, "SetScriptTransaction")) | |
331 | 534 | then { | |
332 | - | let | |
333 | - | if (sigVerify( | |
334 | - | then sigVerify( | |
535 | + | let bH = az | |
536 | + | if (sigVerify(bH.bodyBytes, bH.proofs[2], g)) | |
537 | + | then sigVerify(bH.bodyBytes, bH.proofs[1], h) | |
335 | 538 | else false | |
336 | 539 | } | |
337 | 540 | else false | |
338 | 541 | } | |
339 | 542 |
github/deemru/w8io/873ac7e 193.98 ms ◑![]()