tx · BGdn1CTMD15hT3Y29evbW5xkEPDxVzjM3eA62Sct1rmy 3N3tDUvYTUkPj99XK6ahYY1seKQssSPSUxa: -0.04000000 Waves 2022.05.21 19:04 [2061653] smart account 3N3tDUvYTUkPj99XK6ahYY1seKQssSPSUxa > SELF 0.00000000 Waves
{ "type": 13, "id": "BGdn1CTMD15hT3Y29evbW5xkEPDxVzjM3eA62Sct1rmy", "fee": 4000000, "feeAssetId": null, "timestamp": 1653149016867, "version": 2, "chainId": 84, "sender": "3N3tDUvYTUkPj99XK6ahYY1seKQssSPSUxa", "senderPublicKey": "uabndDFnsGq9PjWSXCTHbtJ6qRyJrTnAiV1p3iLLEBf", "proofs": [ "Vq3JUWnj3fSn8GMr7cEvC7Cao8Fi3p65FStS2S8xJchmAW2VyZyBZSDxhzqfrKJp2rKtGUoWQK6QZYn3hYsQgVW" ], "script": "base64:AAIFAAAAAAAAAA4IAhIECgIIARIECgIIAQAAABkAAAAAC2ZhY3RvcnNCYXNlAAAAAAAAAAPoAQAAABFhc1VzZXJCYWxhbmNlRGF0YQAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAACIoSW50LCBJbnQsIEludCwgSW50LCBJbnQsIEJvb2xlYW4pBAAAAAF4BQAAAAckbWF0Y2gwBQAAAAF4BAAAAAF0BQAAAAckbWF0Y2gwCQAAAgAAAAECAAAAFWV4cGVjdGVkIGludDUmYm9vbGVhbgAAAAAKYWRtaW5TdG9yZQIAAAAFYWRtaW4AAAAAC2NvbmZpZ1N0b3JlAgAAAAZjb25maWcAAAAADXJlc2VydmVzU3RvcmUCAAAACHJlc2VydmVzAAAAAA1hVG9rZW5JZFN0b3JlAgAAAAhhVG9rZW5JZAAAAAAMYXNzZXRJZFN0b3JlAgAAAAdhc3NldElkAAAAAAVhZG1pbgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAAKYWRtaW5TdG9yZQAAAAAGY29uZmlnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAAAtjb25maWdTdG9yZQAAAAALcmVzZXJ2ZXNTdHIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAA1yZXNlcnZlc1N0b3JlAgAAABZubyByZXNlcnZlcyByZWdpc3RlcmVkAAAAAAhyZXNlcnZlcwkABLUAAAACBQAAAAtyZXNlcnZlc1N0cgIAAAABfAEAAAAQYXNzZXRJZE9mUmVzZXJ2ZQAAAAEAAAAHcmVzZXJ2ZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAB3Jlc2VydmUFAAAADGFzc2V0SWRTdG9yZQIAAAAVbm8gYXNzZXRJZCBpbiByZXNlcnZlAQAAABBjb2xsYXRlcmFsRmFjdG9yAAAAAQAAAAdyZXNlcnZlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAGY29uZmlnCQABLAAAAAIJAQAAABBhc3NldElkT2ZSZXNlcnZlAAAAAQUAAAAHcmVzZXJ2ZQIAAAARX0NvbGxhdGVyYWxGYWN0b3ICAAAAHW5vIENvbGxhdGVyYWxGYWN0b3IgaW4gY29uZmlnAQAAABRsaXF1aWRhdGlvblRocmVzaG9sZAAAAAEAAAAHcmVzZXJ2ZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABmNvbmZpZwkAASwAAAACCQEAAAAQYXNzZXRJZE9mUmVzZXJ2ZQAAAAEFAAAAB3Jlc2VydmUCAAAAFV9MaXF1aWRhdGlvblRocmVzaG9sZAIAAAAhbm8gTGlxdWlkYXRpb25UaHJlc2hvbGQgaW4gY29uZmlnAQAAABJsaXF1aWRhdGlvblBlbmFsdHkAAAABAAAAB2Fzc2V0SWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAZjb25maWcJAAEsAAAAAgUAAAAHYXNzZXRJZAIAAAATX0xpcXVpZGF0aW9uUGVuYWx0eQIAAAAfbm8gTGlxdWlkYXRpb25QZW5hbHR5IGluIGNvbmZpZwAAAAAWYWNjb3VudEhlYWx0aFRocmVzaG9sZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABmNvbmZpZwIAAAAYYWNjb3VudF9oZWFsdGhfdGhyZXNob2xkAgAAABtubyBhY2NvdW50X2hlYWx0aF90aHJlc2hvbGQAAAAAFGFjY291bnRIZWFsdGhPdmVybGFwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAGY29uZmlnAgAAABZhY2NvdW50X2hlYWx0aF9vdmVybGFwAgAAABlubyBhY2NvdW50X2hlYWx0aF9vdmVybGFwAAAAAA9jb2xsYXBzZVBlbmFsdHkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAZjb25maWcCAAAAEGNvbGxhcHNlX3BlbmFsdHkCAAAAE25vIGNvbGxhcHNlX3BlbmFsdHkAAAAAC2xpcXVpZGF0b3JzCQEAAAALdmFs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YXRlcmFsRmFjdG9yAAAAAQUAAAAHcmVzZXJ2ZQQAAAACbHQJAQAAABRsaXF1aWRhdGlvblRocmVzaG9sZAAAAAEFAAAAB3Jlc2VydmUEAAAACyR0MDMwMzAzMTE4CQEAAAALdXNlckJhbGFuY2UAAAACBQAAAAdyZXNlcnZlBQAAAAR1c2VyBAAAAAV0b2tlbggFAAAACyR0MDMwMzAzMTE4AAAAAl8xBAAAAAVhc3NldAgFAAAACyR0MDMwMzAzMTE4AAAAAl8yBAAAAApkZXBvc2l0VXNkCAUAAAALJHQwMzAzMDMxMTgAAAACXzMEAAAABGRlYnQIBQAAAAskdDAzMDMwMzExOAAAAAJfNAQAAAAHZGVidFVzZAgFAAAACyR0MDMwMzAzMTE4AAAAAl81BAAAAAxhc0NvbGxhdGVyYWwIBQAAAAskdDAzMDMwMzExOAAAAAJfNgQAAAATZWZmZWN0aXZlRGVwb3NpdFVzZAMFAAAADGFzQ29sbGF0ZXJhbAUAAAAKZGVwb3NpdFVzZAAAAAAAAAAAAAQAAAAKb3ZlcmxhcFVzZAkAAZcAAAABCQAETAAAAAIFAAAAB2RlYnRVc2QJAARMAAAAAgUAAAATZWZmZWN0aXZlRGVwb3NpdFVzZAUAAAADbmlsBAAAAA1vdmVybGFwQ2hhcmdlCQEAAAAMZnJhY3Rpb25DZWlsAAAAAwUAAAAKb3ZlcmxhcFVzZAUAAAAUYWNjb3VudEhlYWx0aE92ZXJsYXAFAAAAC2ZhY3RvcnNCYXNlAwkAAGYAAAACBQAAAAdkZWJ0VXNkBQAAABNlZmZlY3RpdmVEZXBvc2l0VXNkCQAFFAAAAAIFAAAABnRvdGFsRAkAAGQAAAACCQAAZAAAAAIFAAAABnRvdGFsQgkAAGsAAAADCQAAZQAAAAIFAAAAB2RlYnRVc2QFAAAAE2VmZmVjdGl2ZURlcG9zaXRVc2QFAAAAC2ZhY3RvcnNCYXNlBQAAAAJsdAUAAAANb3ZlcmxhcENoYXJnZQkABRQAAAACCQAAZAAAAAIFAAAABnRvdGFsRAkAAGsAAAADCQAAZQAAAAIFAAAAE2VmZmVjdGl2ZURlcG9zaXRVc2QFAAAAB2RlYnRVc2QFAAAAAmNmBQAAAAtmYWN0b3JzQmFzZQkAAGQAAAACBQAAAAZ0b3RhbEIFAAAA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", "height": 2061653, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4XFU74NbrQpJFf5axJkXTB5kgjaGitFBsk9RBaU9Ko9h Next: AQAh3Mj5gYC5vcLENxLAbSMYkcsqM5kj3UMGJMm3kJUG Full:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let a = 1000 | |
4 | 5 | ||
5 | - | ||
6 | - | @Callable(a) | |
7 | - | func call () = { | |
8 | - | let b = Issue("Asset", "", 1, 0, true, unit, 0) | |
9 | - | let c = calculateAssetId(b) | |
10 | - | [BinaryEntry("bin", base58''), BooleanEntry("bool", true), IntegerEntry("int", 1), StringEntry("str", ""), DeleteEntry("str"), b, Reissue(c, 1, false), Burn(c, 1), ScriptTransfer(a.caller, 1, c)] | |
6 | + | func b (c) = { | |
7 | + | let d = c | |
8 | + | if ($isInstanceOf(d, "(Int, Int, Int, Int, Int, Boolean)")) | |
9 | + | then { | |
10 | + | let e = d | |
11 | + | e | |
12 | + | } | |
13 | + | else { | |
14 | + | let f = d | |
15 | + | throw("expected int5&boolean") | |
16 | + | } | |
11 | 17 | } | |
12 | 18 | ||
13 | 19 | ||
14 | - | @Verifier(d) | |
15 | - | func e () = sigVerify(d.bodyBytes, d.proofs[0], d.senderPublicKey) | |
20 | + | let g = "admin" | |
21 | + | ||
22 | + | let h = "config" | |
23 | + | ||
24 | + | let i = "reserves" | |
25 | + | ||
26 | + | let j = "aTokenId" | |
27 | + | ||
28 | + | let k = "assetId" | |
29 | + | ||
30 | + | let l = addressFromStringValue(getStringValue(this, g)) | |
31 | + | ||
32 | + | let m = addressFromStringValue(getStringValue(this, h)) | |
33 | + | ||
34 | + | let n = valueOrErrorMessage(getString(this, i), "no reserves registered") | |
35 | + | ||
36 | + | let o = split(n, "|") | |
37 | + | ||
38 | + | func p (q) = valueOrErrorMessage(getString(q, k), "no assetId in reserve") | |
39 | + | ||
40 | + | ||
41 | + | func r (q) = valueOrErrorMessage(getInteger(m, (p(q) + "_CollateralFactor")), "no CollateralFactor in config") | |
42 | + | ||
43 | + | ||
44 | + | func s (q) = valueOrErrorMessage(getInteger(m, (p(q) + "_LiquidationThreshold")), "no LiquidationThreshold in config") | |
45 | + | ||
46 | + | ||
47 | + | func t (u) = valueOrErrorMessage(getInteger(m, (u + "_LiquidationPenalty")), "no LiquidationPenalty in config") | |
48 | + | ||
49 | + | ||
50 | + | let v = valueOrErrorMessage(getInteger(m, "account_health_threshold"), "no account_health_threshold") | |
51 | + | ||
52 | + | let w = valueOrErrorMessage(getInteger(m, "account_health_overlap"), "no account_health_overlap") | |
53 | + | ||
54 | + | let x = valueOrErrorMessage(getInteger(m, "collapse_penalty"), "no collapse_penalty") | |
55 | + | ||
56 | + | let y = valueOrElse(getString(m, "liquidators"), "") | |
57 | + | ||
58 | + | func z (A) = if (contains(n, A)) | |
59 | + | then true | |
60 | + | else throw(("unknown reserve:" + A)) | |
61 | + | ||
62 | + | ||
63 | + | func B (q,C) = b(invoke(q, "userBalance", [C], nil)) | |
64 | + | ||
65 | + | ||
66 | + | func D (E,c) = { | |
67 | + | func F (G,A) = { | |
68 | + | let d = G | |
69 | + | if ($isInstanceOf(d, "Address")) | |
70 | + | then { | |
71 | + | let H = d | |
72 | + | H | |
73 | + | } | |
74 | + | else { | |
75 | + | let q = valueOrErrorMessage(addressFromString(A), "reserve bad address") | |
76 | + | if ((valueOrErrorMessage(getString(q, E), ("reserve has no " + E)) == c)) | |
77 | + | then q | |
78 | + | else unit | |
79 | + | } | |
80 | + | } | |
81 | + | ||
82 | + | let d = { | |
83 | + | let I = o | |
84 | + | let J = size(I) | |
85 | + | let K = unit | |
86 | + | func L (M,N) = if ((N >= J)) | |
87 | + | then M | |
88 | + | else F(M, I[N]) | |
89 | + | ||
90 | + | func O (M,N) = if ((N >= J)) | |
91 | + | then M | |
92 | + | else throw("List size exceeds 6") | |
93 | + | ||
94 | + | O(L(L(L(L(L(L(K, 0), 1), 2), 3), 4), 5), 6) | |
95 | + | } | |
96 | + | if ($isInstanceOf(d, "Address")) | |
97 | + | then { | |
98 | + | let H = d | |
99 | + | H | |
100 | + | } | |
101 | + | else throw(("unknown " + E)) | |
102 | + | } | |
103 | + | ||
104 | + | ||
105 | + | func P (c,Q,R) = { | |
106 | + | let S = fraction(c, Q, R) | |
107 | + | let T = 3037000499 | |
108 | + | let U = ((((S % T) * (R % T)) % T) == (((c % T) * (Q % T)) % T)) | |
109 | + | if (U) | |
110 | + | then S | |
111 | + | else (S + 1) | |
112 | + | } | |
113 | + | ||
114 | + | ||
115 | + | func V (C) = { | |
116 | + | func F (W,A) = { | |
117 | + | let X = W | |
118 | + | let Y = X._1 | |
119 | + | let Z = X._2 | |
120 | + | let q = valueOrErrorMessage(addressFromString(A), "reserve bad address") | |
121 | + | let aa = r(q) | |
122 | + | let ab = s(q) | |
123 | + | let ac = B(q, C) | |
124 | + | let ad = ac._1 | |
125 | + | let ae = ac._2 | |
126 | + | let af = ac._3 | |
127 | + | let ag = ac._4 | |
128 | + | let ah = ac._5 | |
129 | + | let ai = ac._6 | |
130 | + | let aj = if (ai) | |
131 | + | then af | |
132 | + | else 0 | |
133 | + | let ak = min([ah, aj]) | |
134 | + | let al = P(ak, w, a) | |
135 | + | if ((ah > aj)) | |
136 | + | then $Tuple2(Y, ((Z + fraction((ah - aj), a, ab)) + al)) | |
137 | + | else $Tuple2((Y + fraction((aj - ah), aa, a)), (Z + al)) | |
138 | + | } | |
139 | + | ||
140 | + | let I = o | |
141 | + | let J = size(I) | |
142 | + | let K = $Tuple2(0, 0) | |
143 | + | func L (M,N) = if ((N >= J)) | |
144 | + | then M | |
145 | + | else F(M, I[N]) | |
146 | + | ||
147 | + | func O (M,N) = if ((N >= J)) | |
148 | + | then M | |
149 | + | else throw("List size exceeds 6") | |
150 | + | ||
151 | + | O(L(L(L(L(L(L(K, 0), 1), 2), 3), 4), 5), 6) | |
152 | + | } | |
153 | + | ||
154 | + | ||
155 | + | func am (C,an) = { | |
156 | + | let ao = V(C) | |
157 | + | let ap = ao._1 | |
158 | + | let aq = ao._2 | |
159 | + | let ar = (((ap - aq) * a) / ap) | |
160 | + | if (if ((ap == 0)) | |
161 | + | then (aq == 0) | |
162 | + | else false) | |
163 | + | then nil | |
164 | + | else if (if ((ap == 0)) | |
165 | + | then (aq > 0) | |
166 | + | else false) | |
167 | + | then throw(((an + " too much: breaching liquidation threshold(bp=0, bpu=") + toString(aq))) | |
168 | + | else if ((v > ar)) | |
169 | + | then throw((((((((an + " too much: breaching liquidation threshold(bp=") + toString(ap)) + ", bpu=") + toString(aq)) + ", health=") + toString(ar)) + ")")) | |
170 | + | else nil | |
171 | + | } | |
172 | + | ||
173 | + | ||
174 | + | @Callable(as) | |
175 | + | func withdraw (u,at) = { | |
176 | + | let C = toString(as.caller) | |
177 | + | let au = D(k, u) | |
178 | + | let av = invoke(au, "withdrawFor", [C, at], nil) | |
179 | + | if ((av == av)) | |
180 | + | then am(C, "withdrawing") | |
181 | + | else throw("Strict value is not equal to itself.") | |
182 | + | } | |
183 | + | ||
184 | + | ||
185 | + | ||
186 | + | @Callable(as) | |
187 | + | func withdraw2 (q,at) = { | |
188 | + | let aw = z(q) | |
189 | + | if ((aw == aw)) | |
190 | + | then { | |
191 | + | let C = toString(as.caller) | |
192 | + | let au = addressFromStringValue(q) | |
193 | + | let av = invoke(au, "withdrawFor", [C, at], nil) | |
194 | + | if ((av == av)) | |
195 | + | then am(C, "withdrawing2") | |
196 | + | else throw("Strict value is not equal to itself.") | |
197 | + | } | |
198 | + | else throw("Strict value is not equal to itself.") | |
199 | + | } | |
200 | + | ||
16 | 201 |
github/deemru/w8io/873ac7e 26.40 ms ◑![]()