tx · GAJQ8ji76Yyb4PWfijnDSzYaXyCCxAxoDnSJC1G3v5te

3NAwbpcPsGSxuaojbBpYgdUYsGbrNauJ57J:  -0.03500000 Waves

2022.06.07 10:30 [2085646] smart account 3NAwbpcPsGSxuaojbBpYgdUYsGbrNauJ57J > SELF 0.00000000 Waves

{ "type": 13, "id": "GAJQ8ji76Yyb4PWfijnDSzYaXyCCxAxoDnSJC1G3v5te", "fee": 3500000, "feeAssetId": null, "timestamp": 1654587055890, "version": 1, "sender": "3NAwbpcPsGSxuaojbBpYgdUYsGbrNauJ57J", "senderPublicKey": "F3cz73sYXXXQegEA2JLAqUWZViMB9jmE26svEgk9PUFm", "proofs": [ "5uAGb4vw62DBbLMinR516utnDFfsBitENSTKBCTkfVapoCNLxuEkpW24MRoEexFggJBjTQeLNzVMBwbjbSVa4NSi" ], "script": "base64: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bRoLCgJibhIFYW1BbXQaCwoCYm8SBXByQW10GhEKAmJwEgthbXRBc0FtdFgxOBoQCgJicRIKcHJBc0FtdFgxOBoQCgJichIKY2FsY1ByaWNlcxoLCgJicxIFbHBBbXQaCQoCYnQSA2NmZxoOCgJidRIIYW10QXNEY20aDQoCYnYSB3ByQXNEY20aDgoCYncSCHByaWNlWDE4Gg4KAmJ4EghscEFtdFgxOBoTCgJieRINbHBQckluQW1Bc1gxOBoTCgJiehINbHBQckluUHJBc1gxOBoMCgFjEgdzY2FsZTE4GhAKAmNBEgphbVZpYVByWDE4GhIKAmNCEgxleHBlY3RlZEFtdHMaFwoCY0MSEWV4cEFtdEFzc2V0QW10WDE4GhkKAmNEEhNleHBQcmljZUFzc2V0QW10WDE4Gg8KAmNFEgljYWxjTHBBbXQaFAoCY0YSDmNhbGNBbUFzc2V0UG10GhQKAmNHEg5jYWxjUHJBc3NldFBtdBoSCgJjSBIMc2xpcHBhZ2VDYWxjGg8KAmNJEgllbWl0THBBbXQaDAoCY0oSBmFtRGlmZhoMCgJjSxIGcHJEaWZmGhMKAmNMEg0kdDAxNTcyNTE2MDcwGhAKAmNNEgp3cml0ZUFtQW10GhAKAmNOEgp3cml0ZVByQW10GhEKAmNPEgtjb21tb25TdGF0ZRoJCgJjUBIDbW9hGgsKAmNREgVvcmRlchoNCgJjUhIHYW10QXNJZBoMCgJjUxIGcHJBc0lkGhUKAmNUEg9hY2NBbXRBc0JhbGFuY2UaFAoCY1USDmFjY1ByQXNCYWxhbmNlGhAKAmNWEgpvckFtdEFzc2V0GhAKAmNXEgpvckFtdEFzU3RyGg8KAmNYEglvclByQXNzZXQaDwoCY1kSCW9yUHJBc1N0choQCgJjWhIKb3JkZXJQcmljZRoLCgJjYRIFc3RhdGUaCQoCY2ISA2VwbxoNCgJjYxIHaW5BbUFtdBoMCgJjZBIGaW5BbUlkGg0KAmNlEgdpblByQW10GgwKAmNmEgZpblBySWQaDAoCY2cSBmlzRXZhbBoMCgJjaBIGZW1pdExwGhAKAmNpEgppc09uZUFzc2V0GgwKAmNqEgZwbXRBbXQaCwoCY2sSBXBtdElkGg0KAmNsEgdhbUlkU3RyGg0KAmNtEgdwcklkU3RyGg8KAmNuEglpbkFt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", "chainId": 84, "height": 2085646, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GmrMbXESxUPhH7mc57bNcCspdbNAVsandzdbuPJoXErr Next: 6pS2W3Qwetd68uX93dWJCVmF5Uc6GQh4jPLUNguJDoMJ Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let scale8 = 100000000
55
66 let scale8BigInt = toBigInt(100000000)
77
88 let scale18 = toBigInt(1000000000000000000)
99
1010 let zeroBigInt = toBigInt(0)
1111
1212 let oneBigInt = toBigInt(1)
1313
1414 let slippage4D = toBigInt((scale8 - ((scale8 * 1) / scale8)))
1515
1616 let Amult = "100"
1717
1818 let Dconv = "1"
1919
2020 let SEP = "__"
2121
2222 let EMPTY = ""
2323
2424 let PoolActive = 1
2525
2626 let PoolPutDis = 2
2727
2828 let PoolMatcherDis = 3
2929
3030 let PoolShutdown = 4
3131
3232 let idxPoolAddress = 1
3333
3434 let idxPoolSt = 2
3535
3636 let idxLPAsId = 3
3737
3838 let idxAmAsId = 4
3939
4040 let idxPrAsId = 5
4141
4242 let idxAmtAsDcm = 6
4343
4444 let idxPriceAsDcm = 7
4545
4646 let idxIAmtAsId = 8
4747
4848 let idxIPriceAsId = 9
4949
5050 let idxFactStakCntr = 1
5151
5252 let idxFactSlippCntr = 7
5353
5454 let idxFactGwxRewCntr = 10
5555
5656 let delay = "%s__delay"
5757
5858 func t1 (origVal,origScaleMult) = fraction(toBigInt(origVal), scale18, toBigInt(origScaleMult))
5959
6060
6161 func f1 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), scale18))
6262
6363
6464 func ts (amt,resScale,curScale) = fraction(amt, resScale, curScale)
6565
6666
6767 func abs (val) = if ((zeroBigInt > val))
6868 then -(val)
6969 else val
7070
7171
7272 func fc () = "%s__factoryContract"
7373
7474
7575 func mpk () = "%s__managerPublicKey"
7676
7777
7878 func pmpk () = "%s__pendingManagerPublicKey"
7979
8080
8181 func pl () = "%s%s__price__last"
8282
8383
8484 func ph (h,t) = makeString(["%s%s%d%d__price__history", toString(h), toString(t)], SEP)
8585
8686
8787 func pau (ua,txId) = ((("%s%s%s__P__" + ua) + "__") + txId)
8888
8989
9090 func gau (ua,txId) = ((("%s%s%s__G__" + ua) + "__") + txId)
9191
9292
9393 func aa () = "%s__amountAsset"
9494
9595
9696 func pa () = "%s__priceAsset"
9797
9898
9999 func amp () = "%s__amp"
100100
101101
102102 func ada () = "%s__addonAddr"
103103
104104
105105 func lgopotc (caller) = makeString(["%s%s__lastGetOrPutOneTknCall", caller], SEP)
106106
107107
108108 func fcfg () = "%s__factoryConfig"
109109
110110
111111 func mtpk () = "%s%s__matcher__publicKey"
112112
113113
114114 func pc (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
115115
116116
117117 func mba (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
118118
119119
120120 func aps () = "%s__shutdown"
121121
122122
123123 func toe (orV,sendrV,matchV) = throw(((((("Failed: ordValid=" + toString(orV)) + " sndrValid=") + toString(sendrV)) + " mtchrValid=") + toString(matchV)))
124124
125125
126126 func str (val) = match val {
127127 case valStr: String =>
128128 valStr
129129 case _ =>
130130 throw("fail cast to String")
131131 }
132132
133133
134134 func strf (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
135135
136136
137137 func intf (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
138138
139139
140140 let fca = addressFromStringValue(strf(this, fc()))
141141
142142 let A = strf(this, amp())
143143
144144 func igs () = valueOrElse(getBoolean(fca, aps()), false)
145145
146146
147147 func mp () = fromBase58String(strf(fca, mtpk()))
148148
149149
150150 func gpc () = {
151151 let amtAs = strf(this, aa())
152152 let priceAs = strf(this, pa())
153153 let iPriceAs = intf(fca, mba(priceAs))
154154 let iAmtAs = intf(fca, mba(amtAs))
155155 split(strf(fca, pc(toString(iAmtAs), toString(iPriceAs))), SEP)
156156 }
157157
158158
159159 func gfc () = split(strf(fca, fcfg()), SEP)
160160
161161
162162 func dataPutActionInfo (inAmtAssetAmt,inPriceAssetAmt,outLpAmt,price,slipByUser,slippageReal,txHeight,txTimestamp,slipageAmAmt,slipagePrAmt) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(inAmtAssetAmt), toString(inPriceAssetAmt), toString(outLpAmt), toString(price), toString(slipByUser), toString(slippageReal), toString(txHeight), toString(txTimestamp), toString(slipageAmAmt), toString(slipagePrAmt)], SEP)
163163
164164
165165 func dataGetActionInfo (outAmtAssetAmt,outPriceAssetAmt,inLpAmt,price,txHeight,txTimestamp) = makeString(["%d%d%d%d%d%d", toString(outAmtAssetAmt), toString(outPriceAssetAmt), toString(inLpAmt), toString(price), toString(txHeight), toString(txTimestamp)], SEP)
166166
167167
168168 func getAccBalance (assetId) = if ((assetId == "WAVES"))
169169 then wavesBalance(this).available
170170 else assetBalance(this, fromBase58String(assetId))
171171
172172
173173 func cpbi (prAmtX18,amAmtX18) = fraction(prAmtX18, scale18, amAmtX18)
174174
175175
176176 func vad (A1,A2,slippage) = {
177177 let diff = fraction((A1 - A2), scale8BigInt, A2)
178178 let pass = ((slippage - abs(diff)) > zeroBigInt)
179179 if (!(pass))
180180 then throw(("Big slpg: " + toString(diff)))
181181 else $Tuple2(pass, min([A1, A2]))
182182 }
183183
184184
185185 func vd (D1,D0,slpg) = {
186186 let diff = fraction(D0, scale8BigInt, D1)
187187 let fail = (slpg > diff)
188188 if (if (fail)
189189 then true
190190 else (D0 > D1))
191191 then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
192192 else fail
193193 }
194194
195195
196196 func pcp (amAssetDcm,prAssetDcm,amAmt,prAmt) = {
197197 let amtAsAmtX18 = t1(amAmt, amAssetDcm)
198198 let prAsAmtX18 = t1(prAmt, prAssetDcm)
199199 cpbi(prAsAmtX18, amtAsAmtX18)
200200 }
201201
202202
203203 func calcPrices (amAmt,prAmt,lpAmt) = {
204204 let cfg = gpc()
205205 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
206206 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
207207 let priceX18 = pcp(amtAsDcm, prAsDcm, amAmt, prAmt)
208208 let amAmtX18 = t1(amAmt, amtAsDcm)
209209 let prAmtX18 = t1(prAmt, prAsDcm)
210210 let lpAmtX18 = t1(lpAmt, scale8)
211211 let lpPrInAmAsX18 = cpbi(amAmtX18, lpAmtX18)
212212 let lpPrInPrAsX18 = cpbi(prAmtX18, lpAmtX18)
213213 [priceX18, lpPrInAmAsX18, lpPrInPrAsX18]
214214 }
215215
216216
217217 func calculatePrices (amAmt,prAmt,lpAmt) = {
218218 let p = calcPrices(amAmt, prAmt, lpAmt)
219219 [f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)]
220220 }
221221
222222
223223 func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
224224 let cfg = gpc()
225225 let lpId = cfg[idxLPAsId]
226226 let amId = cfg[idxAmAsId]
227227 let prId = cfg[idxPrAsId]
228228 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
229229 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
230230 let sts = cfg[idxPoolSt]
231231 let lpEmiss = valueOrErrorMessage(assetInfo(fromBase58String(lpId)), "Wrong LP id").quantity
232232 if ((lpId != pmtAssetId))
233233 then throw("Wrong pmt asset")
234234 else {
235235 let amBalance = getAccBalance(amId)
236236 let amBalanceX18 = t1(amBalance, amDcm)
237237 let prBalance = getAccBalance(prId)
238238 let prBalanceX18 = t1(prBalance, prDcm)
239239 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
240240 let curPrice = f1(curPriceX18, scale8)
241241 let pmtLpAmtX18 = t1(pmtLpAmt, scale8)
242242 let lpEmissX18 = t1(lpEmiss, scale8)
243243 let outAmAmtX18 = fraction(amBalanceX18, pmtLpAmtX18, lpEmissX18)
244244 let outPrAmtX18 = fraction(prBalanceX18, pmtLpAmtX18, lpEmissX18)
245245 let outAmAmt = f1(outAmAmtX18, amDcm)
246246 let outPrAmt = f1(outPrAmtX18, prDcm)
247247 let state = if ((txId58 == ""))
248248 then nil
249249 else [ScriptTransfer(userAddress, outAmAmt, if ((amId == "WAVES"))
250250 then unit
251251 else fromBase58String(amId)), ScriptTransfer(userAddress, outPrAmt, if ((prId == "WAVES"))
252252 then unit
253253 else fromBase58String(prId)), StringEntry(gau(toString(userAddress), txId58), dataGetActionInfo(outAmAmt, outPrAmt, pmtLpAmt, curPrice, height, lastBlock.timestamp)), IntegerEntry(pl(), curPrice), IntegerEntry(ph(height, lastBlock.timestamp), curPrice)]
254254 $Tuple10(outAmAmt, outPrAmt, amId, prId, amBalance, prBalance, lpEmiss, curPriceX18, sts, state)
255255 }
256256 }
257257
258258
259259 func epo (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,userAddress,isEval,emitLp,isOneAsset,pmtAmt,pmtId) = {
260260 let cfg = gpc()
261261 let lpId = fromBase58String(cfg[idxLPAsId])
262262 let amIdStr = cfg[idxAmAsId]
263263 let prIdStr = cfg[idxPrAsId]
264264 let inAmIdStr = cfg[idxIAmtAsId]
265265 let inPrIdStr = cfg[idxIPriceAsId]
266266 let amtDcm = parseIntValue(cfg[idxAmtAsDcm])
267267 let priceDcm = parseIntValue(cfg[idxPriceAsDcm])
268268 let sts = cfg[idxPoolSt]
269269 let lpEm = valueOrErrorMessage(assetInfo(lpId), "Wr lp as").quantity
270270 let amBalance = if (isEval)
271271 then getAccBalance(amIdStr)
272272 else if (if (isOneAsset)
273273 then (pmtId == amIdStr)
274274 else false)
275275 then (getAccBalance(amIdStr) - pmtAmt)
276276 else if (isOneAsset)
277277 then getAccBalance(amIdStr)
278278 else (getAccBalance(amIdStr) - inAmAmt)
279279 let prBalance = if (isEval)
280280 then getAccBalance(prIdStr)
281281 else if (if (isOneAsset)
282282 then (pmtId == prIdStr)
283283 else false)
284284 then (getAccBalance(prIdStr) - pmtAmt)
285285 else if (isOneAsset)
286286 then getAccBalance(prIdStr)
287287 else (getAccBalance(prIdStr) - inPrAmt)
288288 let inAmAssetAmtX18 = t1(inAmAmt, amtDcm)
289289 let inPrAssetAmtX18 = t1(inPrAmt, priceDcm)
290290 let userPriceX18 = cpbi(inPrAssetAmtX18, inAmAssetAmtX18)
291291 let amBalanceX18 = t1(amBalance, amtDcm)
292292 let prBalanceX18 = t1(prBalance, priceDcm)
293293 let r = if ((lpEm == 0))
294294 then {
295295 let curPriceX18 = zeroBigInt
296296 let slippageX18 = zeroBigInt
297297 let lpAmtX18 = pow((inAmAssetAmtX18 * inPrAssetAmtX18), 0, toBigInt(5), 1, 0, DOWN)
298298 $Tuple5(f1(lpAmtX18, scale8), f1(inAmAssetAmtX18, amtDcm), f1(inPrAssetAmtX18, priceDcm), cpbi((prBalanceX18 + inPrAssetAmtX18), (amBalanceX18 + inAmAssetAmtX18)), slippageX18)
299299 }
300300 else {
301301 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
302302 let slippageRealX18 = fraction(abs((curPriceX18 - userPriceX18)), scale18, curPriceX18)
303303 let slippageX18 = t1(slippage, scale8)
304304 if (if ((curPriceX18 != zeroBigInt))
305305 then (slippageRealX18 > slippageX18)
306306 else false)
307307 then throw(((("Price slippage " + toString(slippageRealX18)) + " > ") + toString(slippageX18)))
308308 else {
309309 let lpEmissionX18 = t1(lpEm, scale8)
310310 let prViaAmX18 = fraction(inAmAssetAmtX18, curPriceX18, scale18)
311311 let amViaPrX18 = fraction(inPrAssetAmtX18, scale18, curPriceX18)
312312 let expectedAmts = if ((prViaAmX18 > inPrAssetAmtX18))
313313 then $Tuple2(amViaPrX18, inPrAssetAmtX18)
314314 else $Tuple2(inAmAssetAmtX18, prViaAmX18)
315315 let expAmtAssetAmtX18 = expectedAmts._1
316316 let expPriceAssetAmtX18 = expectedAmts._2
317317 let lpAmtX18 = fraction(lpEmissionX18, expPriceAssetAmtX18, prBalanceX18)
318318 $Tuple5(f1(lpAmtX18, scale8), f1(expAmtAssetAmtX18, amtDcm), f1(expPriceAssetAmtX18, priceDcm), curPriceX18, slippageX18)
319319 }
320320 }
321321 let calcLpAmt = r._1
322322 let calcAmAssetPmt = r._2
323323 let calcPrAssetPmt = r._3
324324 let curPrice = f1(r._4, scale8)
325325 let slippageCalc = f1(r._5, scale8)
326326 if ((0 >= calcLpAmt))
327327 then throw("LP <= 0")
328328 else {
329329 let emitLpAmt = if (!(emitLp))
330330 then 0
331331 else calcLpAmt
332332 let amDiff = (inAmAmt - calcAmAssetPmt)
333333 let prDiff = (inPrAmt - calcPrAssetPmt)
334334 let $t01572516070 = if (if (isOneAsset)
335335 then (pmtId == amIdStr)
336336 else false)
337337 then $Tuple2(pmtAmt, 0)
338338 else if (if (isOneAsset)
339339 then (pmtId == prIdStr)
340340 else false)
341341 then $Tuple2(0, pmtAmt)
342342 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
343343 let writeAmAmt = $t01572516070._1
344344 let writePrAmt = $t01572516070._2
345345 let commonState = [IntegerEntry(pl(), curPrice), IntegerEntry(ph(height, lastBlock.timestamp), curPrice), StringEntry(pau(userAddress, txId58), dataPutActionInfo(writeAmAmt, writePrAmt, emitLpAmt, curPrice, slippage, slippageCalc, height, lastBlock.timestamp, amDiff, prDiff))]
346346 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
347347 }
348348 }
349349
350350
351351 func moa (order) = {
352352 let cfg = gpc()
353353 let amtAsId = cfg[idxAmAsId]
354354 let prAsId = cfg[idxPrAsId]
355355 let sts = parseIntValue(cfg[idxPoolSt])
356356 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
357357 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
358358 let accAmtAsBalance = getAccBalance(amtAsId)
359359 let accPrAsBalance = getAccBalance(prAsId)
360360 let curPriceX18 = if ((order.orderType == Buy))
361361 then pcp(amtAsDcm, prAsDcm, (accAmtAsBalance + order.amount), accPrAsBalance)
362362 else pcp(amtAsDcm, prAsDcm, (accAmtAsBalance - order.amount), accPrAsBalance)
363363 let curPrice = f1(curPriceX18, scale8)
364364 if (if (if (igs())
365365 then true
366366 else (sts == PoolMatcherDis))
367367 then true
368368 else (sts == PoolShutdown))
369369 then throw("Admin blocked")
370370 else {
371371 let orAmtAsset = order.assetPair.amountAsset
372372 let orAmtAsStr = if ((orAmtAsset == unit))
373373 then "WAVES"
374374 else toBase58String(value(orAmtAsset))
375375 let orPrAsset = order.assetPair.priceAsset
376376 let orPrAsStr = if ((orPrAsset == unit))
377377 then "WAVES"
378378 else toBase58String(value(orPrAsset))
379379 if (if ((orAmtAsStr != amtAsId))
380380 then true
381381 else (orPrAsStr != prAsId))
382382 then throw("Wr assets")
383383 else {
384384 let orderPrice = order.price
385385 let priceDcm = fraction(scale8, prAsDcm, amtAsDcm)
386386 let castOrderPrice = ts(orderPrice, scale8, priceDcm)
387387 let isOrderPriceValid = if ((order.orderType == Buy))
388388 then (curPrice >= castOrderPrice)
389389 else (castOrderPrice >= curPrice)
390390 true
391391 }
392392 }
393393 }
394394
395395
396396 func cg (i) = if ((size(i.payments) != 1))
397397 then throw("1 pmnt exp")
398398 else {
399399 let pmt = value(i.payments[0])
400400 let pmtAssetId = value(pmt.assetId)
401401 let pmtAmt = pmt.amount
402402 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
403403 let outAmAmt = r._1
404404 let outPrAmt = r._2
405405 let sts = parseIntValue(r._9)
406406 let state = r._10
407407 if (if (igs())
408408 then true
409409 else (sts == PoolShutdown))
410410 then throw(("Admin blocked: " + toString(sts)))
411411 else $Tuple5(outAmAmt, outPrAmt, pmtAmt, pmtAssetId, state)
412412 }
413413
414414
415415 func cp (caller,txId,amAsPmt,prAsPmt,slippage,emitLp,isOneAsset,pmtAmt,pmtId) = {
416416 let r = epo(txId, slippage, value(amAsPmt).amount, value(amAsPmt).assetId, value(prAsPmt).amount, value(prAsPmt).assetId, caller, false, emitLp, isOneAsset, pmtAmt, pmtId)
417417 let sts = parseIntValue(r._8)
418418 if (if (if (igs())
419419 then true
420420 else (sts == PoolPutDis))
421421 then true
422422 else (sts == PoolShutdown))
423423 then throw(("Blocked:" + toString(sts)))
424424 else r
425425 }
426426
427427
428428 func m () = match getString(mpk()) {
429429 case s: String =>
430430 fromBase58String(s)
431431 case _: Unit =>
432432 unit
433433 case _ =>
434434 throw("Match error")
435435 }
436436
437437
438438 func pm () = match getString(pmpk()) {
439439 case s: String =>
440440 fromBase58String(s)
441441 case _: Unit =>
442442 unit
443443 case _ =>
444444 throw("Match error")
445445 }
446446
447447
448448 let pd = throw("Permission denied")
449449
450450 func mm (i) = match m() {
451451 case pk: ByteVector =>
452452 if ((i.callerPublicKey == pk))
453453 then true
454454 else pd
455455 case _: Unit =>
456456 if ((i.caller == this))
457457 then true
458458 else pd
459459 case _ =>
460460 throw("Match error")
461461 }
462462
463463
464464 @Callable(i)
465465 func constructor (fc,aa) = {
466466 let c = mm(i)
467467 if ((c == c))
468468 then [StringEntry(fc(), fc)]
469469 else throw("Strict value is not equal to itself.")
470470 }
471471
472472
473473
474474 @Callable(i)
475475 func setManager (pendingManagerPublicKey) = {
476476 let c = mm(i)
477477 if ((c == c))
478478 then {
479479 let cm = fromBase58String(pendingManagerPublicKey)
480480 if ((cm == cm))
481481 then [StringEntry(pmpk(), pendingManagerPublicKey)]
482482 else throw("Strict value is not equal to itself.")
483483 }
484484 else throw("Strict value is not equal to itself.")
485485 }
486486
487487
488488
489489 @Callable(i)
490490 func confirmManager () = {
491491 let p = pm()
492492 let hpm = if (isDefined(p))
493493 then true
494494 else throw("No pending manager")
495495 if ((hpm == hpm))
496496 then {
497497 let cpm = if ((i.callerPublicKey == value(p)))
498498 then true
499499 else throw("You are not pending manager")
500500 if ((cpm == cpm))
501501 then [StringEntry(mpk(), toBase58String(value(p))), DeleteEntry(pmpk())]
502502 else throw("Strict value is not equal to itself.")
503503 }
504504 else throw("Strict value is not equal to itself.")
505505 }
506506
507507
508508
509509 @Callable(i)
510510 func put (slip,autoStake) = {
511511 let factCfg = gfc()
512512 let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
513513 let slipCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactSlippCntr]), "Wr sl addr")
514514 if ((0 > slip))
515515 then throw("Wrong slippage")
516516 else if ((size(i.payments) != 2))
517517 then throw("2 pmnts expd")
518518 else {
519519 let e = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(value(i.payments[0]).assetId, value(i.payments[0]).amount), i.payments[1], slip, true, false, 0, "")
520520 let emitLpAmt = e._2
521521 let lpAssetId = e._7
522522 let state = e._9
523523 let amDiff = e._10
524524 let prDiff = e._11
525525 let amId = e._12
526526 let prId = e._13
527527 let r = invoke(fca, "emit", [emitLpAmt], nil)
528528 if ((r == r))
529529 then {
530530 let el = match r {
531531 case legacy: Address =>
532532 invoke(legacy, "emit", [emitLpAmt], nil)
533533 case _ =>
534534 unit
535535 }
536536 if ((el == el))
537537 then {
538538 let sa = if ((amDiff > 0))
539539 then invoke(slipCntr, "put", nil, [AttachedPayment(amId, amDiff)])
540540 else nil
541541 if ((sa == sa))
542542 then {
543543 let sp = if ((prDiff > 0))
544544 then invoke(slipCntr, "put", nil, [AttachedPayment(prId, prDiff)])
545545 else nil
546546 if ((sp == sp))
547547 then {
548548 let lpTrnsfr = if (autoStake)
549549 then {
550550 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
551551 if ((ss == ss))
552552 then nil
553553 else throw("Strict value is not equal to itself.")
554554 }
555555 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
556556 (state ++ lpTrnsfr)
557557 }
558558 else throw("Strict value is not equal to itself.")
559559 }
560560 else throw("Strict value is not equal to itself.")
561561 }
562562 else throw("Strict value is not equal to itself.")
563563 }
564564 else throw("Strict value is not equal to itself.")
565565 }
566566 }
567567
568568
569569
570570 @Callable(i)
571571 func putOneTkn (amAssetPart,prAssetPart,outLp,slippage,autoStake) = {
572572 let cfg = gfc()
573573 let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
574574 let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
575575 let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
576576 let poolCfg = gpc()
577577 let amId = poolCfg[idxAmAsId]
578578 let prId = poolCfg[idxPrAsId]
579579 let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
580580 let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
581581 let addon = valueOrElse(getString(this, ada()), "")
582582 let userAddress = if ((addon == toString(i.caller)))
583583 then i.originCaller
584584 else i.caller
585585 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
586586 let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
587587 if ((check == check))
588588 then if (if (if (if ((0 >= slippage))
589589 then true
590590 else (0 >= amAssetPart))
591591 then true
592592 else (0 >= prAssetPart))
593593 then true
594594 else (0 >= outLp))
595595 then throw("Wrong params")
596596 else if ((size(i.payments) != 1))
597597 then throw("1 pmnt expd")
598598 else {
599599 let pmt = value(i.payments[0])
600600 let pmtAssetId = toBase58String(value(pmt.assetId))
601601 let pmtAmt = pmt.amount
602602 if (if (if ((amAssetPart > pmtAmt))
603603 then true
604604 else (prAssetPart > pmtAmt))
605605 then true
606606 else (10000000 > pmtAmt))
607607 then throw("Wrong pmt amt")
608608 else {
609609 let amBalance = getAccBalance(amId)
610610 let prBalance = getAccBalance(prId)
611611 let $t02506325443 = if ((pmtAssetId == amId))
612612 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
613613 else if ((pmtAssetId == prId))
614614 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
615615 else throw("wrong pmtAssetId")
616616 let amBalanceNow = $t02506325443._1
617617 let prBalanceNow = $t02506325443._2
618618 let virtSwapInAm = $t02506325443._3
619619 let virtSwapOutPr = $t02506325443._4
620620 let virtSwapInPr = $t02506325443._5
621621 let virtSwapOutAm = $t02506325443._6
622622 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
623623 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
624624 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
625625 if ((D0vsD1 == D0vsD1))
626626 then {
627627 let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
628628 if ((estPut == estPut))
629629 then {
630630 let error = throw("error after estPut")
631631 if ((error == error))
632632 then {
633633 let estimLP = estPut._2
634634 let lpAssetId = estPut._7
635635 let state = estPut._9
636636 let amDiff = estPut._10
637637 let prDiff = estPut._11
638638 let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
639639 let emitLpAmt = toInt(lpCalcRes._2)
640640 let e = invoke(fca, "emit", [emitLpAmt], nil)
641641 if ((e == e))
642642 then {
643643 let el = match e {
644644 case legacy: Address =>
645645 invoke(legacy, "emit", [emitLpAmt], nil)
646646 case _ =>
647647 unit
648648 }
649649 if ((el == el))
650650 then {
651651 let sa = if ((amDiff > 0))
652652 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
653653 else nil
654654 if ((sa == sa))
655655 then {
656656 let sp = if ((prDiff > 0))
657657 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
658658 else nil
659659 if ((sp == sp))
660660 then {
661661 let lpTrnsfr = if (autoStake)
662662 then {
663663 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
664664 if ((ss == ss))
665665 then nil
666666 else throw("Strict value is not equal to itself.")
667667 }
668668 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
669669 (state ++ lpTrnsfr)
670670 }
671671 else throw("Strict value is not equal to itself.")
672672 }
673673 else throw("Strict value is not equal to itself.")
674674 }
675675 else throw("Strict value is not equal to itself.")
676676 }
677677 else throw("Strict value is not equal to itself.")
678678 }
679679 else throw("Strict value is not equal to itself.")
680680 }
681681 else throw("Strict value is not equal to itself.")
682682 }
683683 else throw("Strict value is not equal to itself.")
684684 }
685685 }
686686 else throw("Strict value is not equal to itself.")
687687 }
688688
689689
690690
691691 @Callable(i)
692692 func putForFree (maxSlpg) = if ((0 > maxSlpg))
693693 then throw("Wrong slpg")
694694 else if ((size(i.payments) != 2))
695695 then throw("2 pmnts expd")
696696 else {
697697 let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(value(i.payments[0]).assetId, value(i.payments[0]).amount), i.payments[1], maxSlpg, false, false, 0, "")
698698 estPut._9
699699 }
700700
701701
702702
703703 @Callable(i)
704704 func get () = {
705705 let r = cg(i)
706706 let outAmtAmt = r._1
707707 let outPrAmt = r._2
708708 let pmtAmt = r._3
709709 let pmtAssetId = r._4
710710 let state = r._5
711711 let b = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
712712 if ((b == b))
713713 then state
714714 else throw("Strict value is not equal to itself.")
715715 }
716716
717717
718718
719719 @Callable(i)
720720 func getOneTkn (exchResult,notUsed,outAmount,outAssetId,slippage) = if ((size(i.payments) != 1))
721721 then throw("1 pmnt expd")
722722 else {
723723 let cfg = gpc()
724724 let lpId = cfg[idxLPAsId]
725725 let amId = cfg[idxAmAsId]
726726 let prId = cfg[idxPrAsId]
727727 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
728728 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
729729 let sts = cfg[idxPoolSt]
730730 let factCfg = gfc()
731731 let gwxCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactGwxRewCntr]), "Wr sl addr")
732732 let pmt = value(i.payments[0])
733733 let addon = valueOrElse(getString(this, ada()), "")
734734 let userAddress = if ((addon == toString(i.caller)))
735735 then i.originCaller
736736 else i.caller
737737 let txId58 = toBase58String(i.transactionId)
738738 let pmtAssetId = value(pmt.assetId)
739739 let pmtAmt = pmt.amount
740740 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
741741 let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
742742 if ((check == check))
743743 then if ((1000000000 > pmtAmt))
744744 then throw("Min pmt 10 LP")
745745 else if (if (if ((0 > slippage))
746746 then true
747747 else (0 > exchResult))
748748 then true
749749 else (0 > outAmount))
750750 then throw("Wrong params")
751751 else if ((lpId != toBase58String(pmtAssetId)))
752752 then throw("Wrong LP")
753753 else {
754754 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
755755 let estimAmAmt = r._1
756756 let estimPrAmt = r._2
757757 let amBalance = getAccBalance(amId)
758758 let prBalance = getAccBalance(prId)
759759 let $t03053530992 = if ((outAssetId == amId))
760760 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
761761 else if ((outAssetId == prId))
762762 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
763763 else throw("wrong outAssetId")
764764 let amBalanceNow = $t03053530992._1
765765 let prBalanceNow = $t03053530992._2
766766 let virtSwapInAm = $t03053530992._3
767767 let virtSwapOutPr = $t03053530992._4
768768 let virtSwapInPr = $t03053530992._5
769769 let virtSwapOutAm = $t03053530992._6
770770 let totalGet = $t03053530992._7
771771 if (if ((0 > virtSwapInAm))
772772 then true
773773 else (0 > virtSwapInPr))
774774 then throw("Wrong calc")
775775 else {
776776 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
777777 let D1 = invoke(gwxCntr, "calcD", [toString(((amBalanceNow - virtSwapInAm) + virtSwapOutAm)), toString(((prBalanceNow + virtSwapOutPr) - virtSwapInPr)), A, Amult, Dconv], nil)
778778 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
779779 if ((D0vsD1 == D0vsD1))
780780 then {
781781 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
782782 if ((finalRes == finalRes))
783783 then {
784784 let $t03169731801 = if ((outAssetId == amId))
785785 then $Tuple2(toInt(finalRes._2), 0)
786786 else $Tuple2(0, toInt(finalRes._2))
787787 let outAm = $t03169731801._1
788788 let outPr = $t03169731801._2
789789 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
790790 let curPr = f1(curPrX18, scale8)
791791 let state = [ScriptTransfer(userAddress, (outAm + outPr), if ((outAssetId == "WAVES"))
792792 then unit
793793 else fromBase58String(outAssetId)), StringEntry(gau(toString(userAddress), txId58), dataGetActionInfo(outAm, outPr, pmtAmt, curPr, height, lastBlock.timestamp)), IntegerEntry(pl(), curPr), IntegerEntry(ph(height, lastBlock.timestamp), curPr)]
794794 if ((state == state))
795795 then {
796796 let burn = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
797797 if ((burn == burn))
798798 then state
799799 else throw("Strict value is not equal to itself.")
800800 }
801801 else throw("Strict value is not equal to itself.")
802802 }
803803 else throw("Strict value is not equal to itself.")
804804 }
805805 else throw("Strict value is not equal to itself.")
806806 }
807807 }
808808 else throw("Strict value is not equal to itself.")
809809 }
810810
811811
812812
813813 @Callable(i)
814814 func getNoLess (noLessThenAmtAsset,noLessThenPriceAsset) = {
815815 let r = cg(i)
816816 let outAmAmt = r._1
817817 let outPrAmt = r._2
818818 let pmtAmt = r._3
819819 let pmtAssetId = r._4
820820 let state = r._5
821821 if ((noLessThenAmtAsset > outAmAmt))
822822 then throw(((("Failed: " + toString(outAmAmt)) + " < ") + toString(noLessThenAmtAsset)))
823823 else if ((noLessThenPriceAsset > outPrAmt))
824824 then throw(((("Failed: " + toString(outPrAmt)) + " < ") + toString(noLessThenPriceAsset)))
825825 else {
826826 let burnLPAssetOnFactory = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
827827 if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
828828 then state
829829 else throw("Strict value is not equal to itself.")
830830 }
831831 }
832832
833833
834834
835835 @Callable(i)
836836 func unstakeAndGet (amount) = {
837837 let checkPayments = if ((size(i.payments) != 0))
838838 then throw("No pmnts expd")
839839 else true
840840 if ((checkPayments == checkPayments))
841841 then {
842842 let cfg = gpc()
843843 let factoryCfg = gfc()
844844 let lpAssetId = fromBase58String(cfg[idxLPAsId])
845845 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
846846 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
847847 if ((unstakeInv == unstakeInv))
848848 then {
849849 let r = ego(toBase58String(i.transactionId), toBase58String(lpAssetId), amount, i.caller)
850850 let sts = parseIntValue(r._9)
851851 let state = r._10
852852 let v = if (if (igs())
853853 then true
854854 else (sts == PoolShutdown))
855855 then throw(("Blocked: " + toString(sts)))
856856 else true
857857 if ((v == v))
858858 then {
859859 let burnA = invoke(fca, "burn", [amount], [AttachedPayment(lpAssetId, amount)])
860860 if ((burnA == burnA))
861861 then state
862862 else throw("Strict value is not equal to itself.")
863863 }
864864 else throw("Strict value is not equal to itself.")
865865 }
866866 else throw("Strict value is not equal to itself.")
867867 }
868868 else throw("Strict value is not equal to itself.")
869869 }
870870
871871
872872
873873 @Callable(i)
874874 func activate (amtAsStr,prAsStr) = if ((toString(i.caller) != toString(fca)))
875875 then throw("denied")
876876 else $Tuple2([StringEntry(aa(), amtAsStr), StringEntry(pa(), prAsStr)], "success")
877877
878878
879879
880880 @Callable(i)
881881 func setS (k,v) = if ((toString(i.caller) != strf(this, ada())))
882882 then pd
883883 else [StringEntry(k, v)]
884884
885885
886886
887887 @Callable(i)
888888 func setI (k,v) = if ((toString(i.caller) != strf(this, ada())))
889889 then pd
890890 else [IntegerEntry(k, v)]
891891
892892
893893
894894 @Callable(i)
895895 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, gpc())
896896
897897
898898
899899 @Callable(i)
900900 func getAccBalanceWrapperREADONLY (assetId) = $Tuple2(nil, getAccBalance(assetId))
901901
902902
903903
904904 @Callable(i)
905905 func calcPricesWrapperREADONLY (amAmt,prAmt,lpAmt) = {
906906 let pr = calcPrices(amAmt, prAmt, lpAmt)
907907 $Tuple2(nil, [toString(pr[0]), toString(pr[1]), toString(pr[2])])
908908 }
909909
910910
911911
912912 @Callable(i)
913913 func fromX18WrapperREADONLY (val,resScaleMult) = $Tuple2(nil, f1(parseBigIntValue(val), resScaleMult))
914914
915915
916916
917917 @Callable(i)
918918 func toX18WrapperREADONLY (origVal,origScaleMult) = $Tuple2(nil, toString(t1(origVal, origScaleMult)))
919919
920920
921921
922922 @Callable(i)
923923 func calcPriceBigIntWrapperREADONLY (prAmtX18,amAmtX18) = $Tuple2(nil, toString(cpbi(parseBigIntValue(prAmtX18), parseBigIntValue(amAmtX18))))
924924
925925
926926
927927 @Callable(i)
928928 func estimatePutOperationWrapperREADONLY (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,usrAddr,isEval,emitLp) = $Tuple2(nil, epo(txId58, slippage, inAmAmt, inAmId, inPrAmt, inPrId, usrAddr, isEval, emitLp, false, 0, ""))
929929
930930
931931
932932 @Callable(i)
933933 func estimateGetOperationWrapperREADONLY (txId58,pmtAsId,pmtLpAmt,usrAddr) = {
934934 let r = ego(txId58, pmtAsId, pmtLpAmt, addressFromStringValue(usrAddr))
935935 $Tuple2(nil, $Tuple10(r._1, r._2, r._3, r._4, r._5, r._6, r._7, toString(r._8), r._9, r._10))
936936 }
937937
938938
939939 @Verifier(tx)
940940 func verify () = match tx {
941941 case order: Order =>
942942 let mtchPub = mp()
943943 let orV = moa(order)
944944 let sndrV = sigVerify(order.bodyBytes, order.proofs[0], order.senderPublicKey)
945945 let mtchV = sigVerify(order.bodyBytes, order.proofs[1], mtchPub)
946946 if (if (if (orV)
947947 then sndrV
948948 else false)
949949 then mtchV
950950 else false)
951951 then true
952952 else toe(orV, sndrV, mtchV)
953953 case _ =>
954954 let targetPublicKey = match m() {
955955 case pk: ByteVector =>
956956 pk
957957 case _: Unit =>
958958 tx.senderPublicKey
959959 case _ =>
960960 throw("Match error")
961961 }
962962 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
963963 }
964964

github/deemru/w8io/c3f4982 
117.30 ms