tx · H2DqrHCxwycpKw3sCRabBpAESvTwzkQ3baULK5cfwPFT

3NAwbpcPsGSxuaojbBpYgdUYsGbrNauJ57J:  -0.03100000 Waves

2022.05.31 20:29 [2076132] smart account 3NAwbpcPsGSxuaojbBpYgdUYsGbrNauJ57J > SELF 0.00000000 Waves

{ "type": 13, "id": "H2DqrHCxwycpKw3sCRabBpAESvTwzkQ3baULK5cfwPFT", "fee": 3100000, "feeAssetId": null, "timestamp": 1654018148335, "version": 1, "sender": "3NAwbpcPsGSxuaojbBpYgdUYsGbrNauJ57J", "senderPublicKey": "F3cz73sYXXXQegEA2JLAqUWZViMB9jmE26svEgk9PUFm", "proofs": [ "xfNzzVJ3LnTrVr8SKK9yoTxvcaiBaRQEq8sbnuZK944Xac6c4mvHHk9j1juDvPnMrDrrfcwr7AAtHs1Hh9HR37g" ], "script": "base64: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CgJibhIKcHJBc3NldERjbRoLCgJibxIFYW1BbXQaCwoCYnASBXByQW10GhEKAmJxEgthbXRBc0FtdFgxOBoQCgJichIKcHJBc0FtdFgxOBoQCgJicxIKY2FsY1ByaWNlcxoLCgJidBIFbHBBbXQaCQoCYnUSA2NmZxoOCgJidhIIYW10QXNEY20aDQoCYncSB3ByQXNEY20aDgoCYngSCHByaWNlWDE4Gg4KAmJ5EghscEFtdFgxOBoTCgJiehINbHBQckluQW1Bc1gxOBoMCgFjEgdzY2FsZTE4GhAKAmNBEgpwclZpYUFtWDE4GhAKAmNCEgphbVZpYVByWDE4GhIKAmNDEgxleHBlY3RlZEFtdHMaFwoCY0QSEWV4cEFtdEFzc2V0QW10WDE4GhkKAmNFEhNleHBQcmljZUFzc2V0QW10WDE4Gg8KAmNGEgljYWxjTHBBbXQaFAoCY0cSDmNhbGNBbUFzc2V0UG10GhQKAmNIEg5jYWxjUHJBc3NldFBtdBoSCgJjSRIMc2xpcHBhZ2VDYWxjGg8KAmNKEgllbWl0THBBbXQaDAoCY0sSBmFtRGlmZhoMCgJjTBIGcHJEaWZmGhMKAmNNEg0kdDAxNTUzMTE1ODc2GhAKAmNOEgp3cml0ZUFtQW10GhAKAmNPEgp3cml0ZVByQW10GhEKAmNQEgtjb21tb25TdGF0ZRoJCgJjURIDbW9hGgsKAmNSEgVvcmRlchoNCgJjUxIHYW10QXNJZBoMCgJjVBIGcHJBc0lkGhUKAmNVEg9hY2NBbXRBc0JhbGFuY2UaFAoCY1YSDmFjY1ByQXNCYWxhbmNlGhAKAmNXEgpvckFtdEFzc2V0GhAKAmNYEgpvckFtdEFzU3RyGg8KAmNZEglvclByQXNzZXQaDwoCY1oSCW9yUHJBc1N0choOCgJjYRIIb3V0UHJBbXQaCwoCY2ISBXN0YXRlGgkKAmNjEgNlcG8aDQoCY2QSB2luQW1BbXQaDAoCY2USBmluQW1JZBoNCgJjZhIHaW5QckFtdBoMCgJjZxIGaW5QcklkGgwKAmNoEgZpc0V2YWwaDAoCY2kSBmVtaXRMcBoQCgJjahIKaXNPbmVBc3NldBoMCgJjaxIGcG10QW10GgsKAmNsEgVwbXRJZBoNCgJjbRIHYW1JZFN0choNCgJjbhIHcHJJZFN0choP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", "chainId": 84, "height": 2076132, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 28ND4mpNE8xut96V6QiYLoireEaHVaCTwQjqUsAzcFbn Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let scale8 = 100000000
5+
6+let scale8BigInt = toBigInt(100000000)
7+
8+let scale18 = toBigInt(1000000000000000000)
9+
10+let zeroBigInt = toBigInt(0)
11+
12+let oneBigInt = toBigInt(1)
13+
14+let slippage4D = toBigInt((scale8 - ((scale8 * 1) / scale8)))
15+
16+let Amult = "100"
17+
18+let Dconv = "1"
19+
20+let SEP = "__"
21+
22+let EMPTY = ""
23+
24+let PoolActive = 1
25+
26+let PoolPutDis = 2
27+
28+let PoolMatcherDis = 3
29+
30+let PoolShutdown = 4
31+
32+let idxPoolAddress = 1
33+
34+let idxPoolSt = 2
35+
36+let idxLPAsId = 3
37+
38+let idxAmAsId = 4
39+
40+let idxPrAsId = 5
41+
42+let idxAmtAsDcm = 6
43+
44+let idxPriceAsDcm = 7
45+
46+let idxIAmtAsId = 8
47+
48+let idxIPriceAsId = 9
49+
50+let idxFactStakCntr = 1
51+
52+let idxFactSlippCntr = 7
53+
54+let idxFactGwxRewCntr = 10
55+
56+let delay = "%s__delay"
57+
58+func t1 (origVal,origScaleMult) = fraction(toBigInt(origVal), scale18, toBigInt(origScaleMult))
59+
60+
61+func f1 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), scale18))
62+
63+
64+func ts (amt,resScale,curScale) = fraction(amt, resScale, curScale)
65+
66+
67+func abs (val) = if ((zeroBigInt > val))
68+ then -(val)
69+ else val
70+
71+
72+func fc () = "%s__factoryContract"
73+
74+
75+func mpk () = "%s__managerPublicKey"
76+
77+
78+func pmpk () = "%s__pendingManagerPublicKey"
79+
80+
81+func pl () = "%s%s__price__last"
82+
83+
84+func ph (h,t) = makeString(["%s%s%d%d__price__history", toString(h), toString(t)], SEP)
85+
86+
87+func pau (ua,txId) = ((("%s%s%s__P__" + ua) + "__") + txId)
88+
89+
90+func gau (ua,txId) = ((("%s%s%s__G__" + ua) + "__") + txId)
91+
92+
93+func aa () = "%s__amountAsset"
94+
95+
96+func pa () = "%s__priceAsset"
97+
98+
99+func amp () = "%s__amp"
100+
101+
102+func ada () = "%s__addonAddr"
103+
104+
105+func lgotc (caller) = makeString(["%s%s__lastGetOneTknCall", caller], SEP)
106+
107+
108+func lsotc (caller) = makeString(["%s%s__lastPutOneTknCall", caller], SEP)
109+
110+
111+func fcfg () = "%s__factoryConfig"
112+
113+
114+func mtpk () = "%s%s__matcher__publicKey"
115+
116+
117+func pc (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
118+
119+
120+func mba (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
121+
122+
123+func aps () = "%s__shutdown"
124+
125+
126+func toe (orV,sendrV,matchV) = throw(((((("Failed: ordValid=" + toString(orV)) + " sndrValid=") + toString(sendrV)) + " mtchrValid=") + toString(matchV)))
127+
128+
129+func str (val) = match val {
130+ case valStr: String =>
131+ valStr
132+ case _ =>
133+ throw("fail cast to String")
134+}
135+
136+
137+func strf (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
138+
139+
140+func intf (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
141+
142+
143+let fca = addressFromStringValue(strf(this, fc()))
144+
145+let A = strf(this, amp())
146+
147+func igs () = valueOrElse(getBoolean(fca, aps()), false)
148+
149+
150+func mp () = fromBase58String(strf(fca, mtpk()))
151+
152+
153+func gpc () = {
154+ let amtAs = strf(this, aa())
155+ let priceAs = strf(this, pa())
156+ let iPriceAs = intf(fca, mba(priceAs))
157+ let iAmtAs = intf(fca, mba(amtAs))
158+ split(strf(fca, pc(toString(iAmtAs), toString(iPriceAs))), SEP)
159+ }
160+
161+
162+func gfc () = split(strf(fca, fcfg()), SEP)
163+
164+
165+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)
166+
167+
168+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)
169+
170+
171+func getAccBalance (assetId) = if ((assetId == "WAVES"))
172+ then wavesBalance(this).available
173+ else assetBalance(this, fromBase58String(assetId))
174+
175+
176+func cpbi (prAmtX18,amAmtX18) = fraction(prAmtX18, scale18, amAmtX18)
177+
178+
179+func vad (A1,A2,slippage) = {
180+ let diff = fraction((A1 - A2), scale8BigInt, A2)
181+ let pass = ((slippage - abs(diff)) > zeroBigInt)
182+ if (!(pass))
183+ then throw(("Big slpg: " + toString(diff)))
184+ else $Tuple2(pass, min([A1, A2]))
185+ }
186+
187+
188+func vd (D1,D0,slpg) = {
189+ let diff = fraction(D0, scale8BigInt, D1)
190+ let fail = (slpg > diff)
191+ if (if (fail)
192+ then true
193+ else (D0 > D1))
194+ then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
195+ else fail
196+ }
197+
198+
199+func pcp (amAssetDcm,prAssetDcm,amAmt,prAmt) = {
200+ let amtAsAmtX18 = t1(amAmt, amAssetDcm)
201+ let prAsAmtX18 = t1(prAmt, prAssetDcm)
202+ cpbi(prAsAmtX18, amtAsAmtX18)
203+ }
204+
205+
206+func calcPrices (amAmt,prAmt,lpAmt) = {
207+ let cfg = gpc()
208+ let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
209+ let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
210+ let priceX18 = pcp(amtAsDcm, prAsDcm, amAmt, prAmt)
211+ let amAmtX18 = t1(amAmt, amtAsDcm)
212+ let prAmtX18 = t1(prAmt, prAsDcm)
213+ let lpAmtX18 = t1(lpAmt, scale8)
214+ let lpPrInAmAsX18 = cpbi(amAmtX18, lpAmtX18)
215+ let lpPrInPrAsX18 = cpbi(prAmtX18, lpAmtX18)
216+[priceX18, lpPrInAmAsX18, lpPrInPrAsX18]
217+ }
218+
219+
220+func calculatePrices (amAmt,prAmt,lpAmt) = {
221+ let p = calcPrices(amAmt, prAmt, lpAmt)
222+[f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)]
223+ }
224+
225+
226+func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
227+ let cfg = gpc()
228+ let lpId = cfg[idxLPAsId]
229+ let amId = cfg[idxAmAsId]
230+ let prId = cfg[idxPrAsId]
231+ let amDcm = parseIntValue(cfg[idxAmtAsDcm])
232+ let prDcm = parseIntValue(cfg[idxPriceAsDcm])
233+ let sts = cfg[idxPoolSt]
234+ let lpEmiss = valueOrErrorMessage(assetInfo(fromBase58String(lpId)), "Wrong LP id").quantity
235+ if ((lpId != pmtAssetId))
236+ then throw("Wrong pmt asset")
237+ else {
238+ let amBalance = getAccBalance(amId)
239+ let amBalanceX18 = t1(amBalance, amDcm)
240+ let prBalance = getAccBalance(prId)
241+ let prBalanceX18 = t1(prBalance, prDcm)
242+ let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
243+ let curPrice = f1(curPriceX18, scale8)
244+ let pmtLpAmtX18 = t1(pmtLpAmt, scale8)
245+ let lpEmissX18 = t1(lpEmiss, scale8)
246+ let outAmAmtX18 = fraction(amBalanceX18, pmtLpAmtX18, lpEmissX18)
247+ let outPrAmtX18 = fraction(prBalanceX18, pmtLpAmtX18, lpEmissX18)
248+ let outAmAmt = f1(outAmAmtX18, amDcm)
249+ let outPrAmt = f1(outPrAmtX18, prDcm)
250+ let state = if ((txId58 == ""))
251+ then nil
252+ else [ScriptTransfer(userAddress, outAmAmt, if ((amId == "WAVES"))
253+ then unit
254+ else fromBase58String(amId)), ScriptTransfer(userAddress, outPrAmt, if ((prId == "WAVES"))
255+ then unit
256+ 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)]
257+ $Tuple10(outAmAmt, outPrAmt, amId, prId, amBalance, prBalance, lpEmiss, curPriceX18, sts, state)
258+ }
259+ }
260+
261+
262+func epo (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,userAddress,isEval,emitLp,isOneAsset,pmtAmt,pmtId) = {
263+ let cfg = gpc()
264+ let lpId = fromBase58String(cfg[idxLPAsId])
265+ let amIdStr = cfg[idxAmAsId]
266+ let prIdStr = cfg[idxPrAsId]
267+ let inAmIdStr = cfg[idxIAmtAsId]
268+ let inPrIdStr = cfg[idxIPriceAsId]
269+ let amtDcm = parseIntValue(cfg[idxAmtAsDcm])
270+ let priceDcm = parseIntValue(cfg[idxPriceAsDcm])
271+ let sts = cfg[idxPoolSt]
272+ let lpEm = valueOrErrorMessage(assetInfo(lpId), "Wr lp as").quantity
273+ let amBalance = if (isEval)
274+ then getAccBalance(amIdStr)
275+ else if (if (isOneAsset)
276+ then (pmtId == amIdStr)
277+ else false)
278+ then (getAccBalance(amIdStr) - pmtAmt)
279+ else if (isOneAsset)
280+ then getAccBalance(amIdStr)
281+ else (getAccBalance(amIdStr) - inAmAmt)
282+ let prBalance = if (isEval)
283+ then getAccBalance(prIdStr)
284+ else if (if (isOneAsset)
285+ then (pmtId == prIdStr)
286+ else false)
287+ then (getAccBalance(prIdStr) - pmtAmt)
288+ else if (isOneAsset)
289+ then getAccBalance(prIdStr)
290+ else (getAccBalance(prIdStr) - inPrAmt)
291+ let inAmAssetAmtX18 = t1(inAmAmt, amtDcm)
292+ let inPrAssetAmtX18 = t1(inPrAmt, priceDcm)
293+ let userPriceX18 = cpbi(inPrAssetAmtX18, inAmAssetAmtX18)
294+ let amBalanceX18 = t1(amBalance, amtDcm)
295+ let prBalanceX18 = t1(prBalance, priceDcm)
296+ let r = if ((lpEm == 0))
297+ then {
298+ let curPriceX18 = zeroBigInt
299+ let slippageX18 = zeroBigInt
300+ let lpAmtX18 = pow((inAmAssetAmtX18 * inPrAssetAmtX18), 0, toBigInt(5), 1, 0, DOWN)
301+ $Tuple5(f1(lpAmtX18, scale8), f1(inAmAssetAmtX18, amtDcm), f1(inPrAssetAmtX18, priceDcm), cpbi((prBalanceX18 + inPrAssetAmtX18), (amBalanceX18 + inAmAssetAmtX18)), slippageX18)
302+ }
303+ else {
304+ let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
305+ let slippageRealX18 = fraction(abs((curPriceX18 - userPriceX18)), scale18, curPriceX18)
306+ let slippageX18 = t1(slippage, scale8)
307+ if (if ((curPriceX18 != zeroBigInt))
308+ then (slippageRealX18 > slippageX18)
309+ else false)
310+ then throw(((("Price slippage " + toString(slippageRealX18)) + " > ") + toString(slippageX18)))
311+ else {
312+ let lpEmissionX18 = t1(lpEm, scale8)
313+ let prViaAmX18 = fraction(inAmAssetAmtX18, curPriceX18, scale18)
314+ let amViaPrX18 = fraction(inPrAssetAmtX18, scale18, curPriceX18)
315+ let expectedAmts = if ((prViaAmX18 > inPrAssetAmtX18))
316+ then $Tuple2(amViaPrX18, inPrAssetAmtX18)
317+ else $Tuple2(inAmAssetAmtX18, prViaAmX18)
318+ let expAmtAssetAmtX18 = expectedAmts._1
319+ let expPriceAssetAmtX18 = expectedAmts._2
320+ let lpAmtX18 = fraction(lpEmissionX18, expPriceAssetAmtX18, prBalanceX18)
321+ $Tuple5(f1(lpAmtX18, scale8), f1(expAmtAssetAmtX18, amtDcm), f1(expPriceAssetAmtX18, priceDcm), curPriceX18, slippageX18)
322+ }
323+ }
324+ let calcLpAmt = r._1
325+ let calcAmAssetPmt = r._2
326+ let calcPrAssetPmt = r._3
327+ let curPrice = f1(r._4, scale8)
328+ let slippageCalc = f1(r._5, scale8)
329+ if ((0 >= calcLpAmt))
330+ then throw("LP <= 0")
331+ else {
332+ let emitLpAmt = if (!(emitLp))
333+ then 0
334+ else calcLpAmt
335+ let amDiff = (inAmAmt - calcAmAssetPmt)
336+ let prDiff = (inPrAmt - calcPrAssetPmt)
337+ let $t01553115876 = if (if (isOneAsset)
338+ then (pmtId == amIdStr)
339+ else false)
340+ then $Tuple2(pmtAmt, 0)
341+ else if (if (isOneAsset)
342+ then (pmtId == prIdStr)
343+ else false)
344+ then $Tuple2(0, pmtAmt)
345+ else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
346+ let writeAmAmt = $t01553115876._1
347+ let writePrAmt = $t01553115876._2
348+ 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))]
349+ $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
350+ }
351+ }
352+
353+
354+func moa (order) = {
355+ let cfg = gpc()
356+ let amtAsId = cfg[idxAmAsId]
357+ let prAsId = cfg[idxPrAsId]
358+ let sts = parseIntValue(cfg[idxPoolSt])
359+ let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
360+ let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
361+ let accAmtAsBalance = getAccBalance(amtAsId)
362+ let accPrAsBalance = getAccBalance(prAsId)
363+ let curPriceX18 = if ((order.orderType == Buy))
364+ then pcp(amtAsDcm, prAsDcm, (accAmtAsBalance + order.amount), accPrAsBalance)
365+ else pcp(amtAsDcm, prAsDcm, (accAmtAsBalance - order.amount), accPrAsBalance)
366+ let curPrice = f1(curPriceX18, scale8)
367+ if (if (if (igs())
368+ then true
369+ else (sts == PoolMatcherDis))
370+ then true
371+ else (sts == PoolShutdown))
372+ then throw("Admin blocked")
373+ else {
374+ let orAmtAsset = order.assetPair.amountAsset
375+ let orAmtAsStr = if ((orAmtAsset == unit))
376+ then "WAVES"
377+ else toBase58String(value(orAmtAsset))
378+ let orPrAsset = order.assetPair.priceAsset
379+ let orPrAsStr = if ((orPrAsset == unit))
380+ then "WAVES"
381+ else toBase58String(value(orPrAsset))
382+ if (if ((orAmtAsStr != amtAsId))
383+ then true
384+ else (orPrAsStr != prAsId))
385+ then throw("Wr assets")
386+ else {
387+ let orderPrice = order.price
388+ let priceDcm = fraction(scale8, prAsDcm, amtAsDcm)
389+ let castOrderPrice = ts(orderPrice, scale8, priceDcm)
390+ let isOrderPriceValid = if ((order.orderType == Buy))
391+ then (curPrice >= castOrderPrice)
392+ else (castOrderPrice >= curPrice)
393+ true
394+ }
395+ }
396+ }
397+
398+
399+func cg (i) = if ((size(i.payments) != 1))
400+ then throw("1 pmnt exp")
401+ else {
402+ let pmt = value(i.payments[0])
403+ let pmtAssetId = value(pmt.assetId)
404+ let pmtAmt = pmt.amount
405+ let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
406+ let outAmAmt = r._1
407+ let outPrAmt = r._2
408+ let sts = parseIntValue(r._9)
409+ let state = r._10
410+ if (if (igs())
411+ then true
412+ else (sts == PoolShutdown))
413+ then throw(("Admin blocked: " + toString(sts)))
414+ else $Tuple5(outAmAmt, outPrAmt, pmtAmt, pmtAssetId, state)
415+ }
416+
417+
418+func cp (caller,txId,amAsPmt,prAsPmt,slippage,emitLp,isOneAsset,pmtAmt,pmtId) = {
419+ let r = epo(txId, slippage, value(amAsPmt).amount, value(amAsPmt).assetId, value(prAsPmt).amount, value(prAsPmt).assetId, caller, false, emitLp, isOneAsset, pmtAmt, pmtId)
420+ let sts = parseIntValue(r._8)
421+ if (if (if (igs())
422+ then true
423+ else (sts == PoolPutDis))
424+ then true
425+ else (sts == PoolShutdown))
426+ then throw(("Blocked:" + toString(sts)))
427+ else r
428+ }
429+
430+
431+func m () = match getString(mpk()) {
432+ case s: String =>
433+ fromBase58String(s)
434+ case _: Unit =>
435+ unit
436+ case _ =>
437+ throw("Match error")
438+}
439+
440+
441+func pm () = match getString(pmpk()) {
442+ case s: String =>
443+ fromBase58String(s)
444+ case _: Unit =>
445+ unit
446+ case _ =>
447+ throw("Match error")
448+}
449+
450+
451+let pd = throw("Permission denied")
452+
453+func mm (i) = match m() {
454+ case pk: ByteVector =>
455+ if ((i.callerPublicKey == pk))
456+ then true
457+ else pd
458+ case _: Unit =>
459+ if ((i.caller == this))
460+ then true
461+ else pd
462+ case _ =>
463+ throw("Match error")
464+}
465+
466+
467+@Callable(i)
468+func constructor (fc) = {
469+ let c = mm(i)
470+ if ((c == c))
471+ then [StringEntry(fc(), fc)]
472+ else throw("Strict value is not equal to itself.")
473+ }
474+
475+
476+
477+@Callable(i)
478+func setManager (pendingManagerPublicKey) = {
479+ let c = mm(i)
480+ if ((c == c))
481+ then {
482+ let cm = fromBase58String(pendingManagerPublicKey)
483+ if ((cm == cm))
484+ then [StringEntry(pmpk(), pendingManagerPublicKey)]
485+ else throw("Strict value is not equal to itself.")
486+ }
487+ else throw("Strict value is not equal to itself.")
488+ }
489+
490+
491+
492+@Callable(i)
493+func confirmManager () = {
494+ let p = pm()
495+ let hpm = if (isDefined(p))
496+ then true
497+ else throw("No pending manager")
498+ if ((hpm == hpm))
499+ then {
500+ let cpm = if ((i.callerPublicKey == value(p)))
501+ then true
502+ else throw("You are not pending manager")
503+ if ((cpm == cpm))
504+ then [StringEntry(mpk(), toBase58String(value(p))), DeleteEntry(pmpk())]
505+ else throw("Strict value is not equal to itself.")
506+ }
507+ else throw("Strict value is not equal to itself.")
508+ }
509+
510+
511+
512+@Callable(i)
513+func put (slip,autoStake) = {
514+ let factCfg = gfc()
515+ let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
516+ let slipCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactSlippCntr]), "Wr sl addr")
517+ if ((0 > slip))
518+ then throw("Wrong slippage")
519+ else if ((size(i.payments) != 2))
520+ then throw("2 pmnts expd")
521+ else {
522+ 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, "")
523+ let emitLpAmt = e._2
524+ let lpAssetId = e._7
525+ let state = e._9
526+ let amDiff = e._10
527+ let prDiff = e._11
528+ let amId = e._12
529+ let prId = e._13
530+ let r = invoke(fca, "emit", [emitLpAmt], nil)
531+ if ((r == r))
532+ then {
533+ let el = match r {
534+ case legacy: Address =>
535+ invoke(legacy, "emit", [emitLpAmt], nil)
536+ case _ =>
537+ unit
538+ }
539+ if ((el == el))
540+ then {
541+ let sa = if ((amDiff > 0))
542+ then invoke(slipCntr, "put", nil, [AttachedPayment(amId, amDiff)])
543+ else nil
544+ if ((sa == sa))
545+ then {
546+ let sp = if ((prDiff > 0))
547+ then invoke(slipCntr, "put", nil, [AttachedPayment(prId, prDiff)])
548+ else nil
549+ if ((sp == sp))
550+ then {
551+ let lpTrnsfr = if (autoStake)
552+ then {
553+ let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
554+ if ((ss == ss))
555+ then nil
556+ else throw("Strict value is not equal to itself.")
557+ }
558+ else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
559+ (state ++ lpTrnsfr)
560+ }
561+ else throw("Strict value is not equal to itself.")
562+ }
563+ else throw("Strict value is not equal to itself.")
564+ }
565+ else throw("Strict value is not equal to itself.")
566+ }
567+ else throw("Strict value is not equal to itself.")
568+ }
569+ }
570+
571+
572+
573+@Callable(i)
574+func putOneTkn (amAssetPart,prAssetPart,outLp,slippage,autoStake) = {
575+ let cfg = gfc()
576+ let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
577+ let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
578+ let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
579+ let poolCfg = gpc()
580+ let amId = poolCfg[idxAmAsId]
581+ let prId = poolCfg[idxPrAsId]
582+ let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
583+ let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
584+ let addon = valueOrElse(getString(this, ada()), "")
585+ let userAddress = if ((addon == toString(i.caller)))
586+ then i.originCaller
587+ else i.caller
588+ let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
589+ let check = reentrantInvoke(addonContract, "ensureCanPutOneTkn", [toString(userAddress)], nil)
590+ if ((check == check))
591+ then if (if (if (if ((0 >= slippage))
592+ then true
593+ else (0 >= amAssetPart))
594+ then true
595+ else (0 >= prAssetPart))
596+ then true
597+ else (0 >= outLp))
598+ then throw("Wrong params")
599+ else if ((size(i.payments) != 1))
600+ then throw("1 pmnt expd")
601+ else {
602+ let pmt = value(i.payments[0])
603+ let pmtAssetId = toBase58String(value(pmt.assetId))
604+ let pmtAmt = pmt.amount
605+ if (if (if ((amAssetPart > pmtAmt))
606+ then true
607+ else (prAssetPart > pmtAmt))
608+ then true
609+ else (10000000 > pmtAmt))
610+ then throw("Wrong pmt amt")
611+ else {
612+ let amBalance = getAccBalance(amId)
613+ let prBalance = getAccBalance(prId)
614+ let $t02483225212 = if ((pmtAssetId == amId))
615+ then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
616+ else if ((pmtAssetId == prId))
617+ then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
618+ else throw("wrong pmtAssetId")
619+ let amBalanceNow = $t02483225212._1
620+ let prBalanceNow = $t02483225212._2
621+ let virtSwapInAm = $t02483225212._3
622+ let virtSwapOutPr = $t02483225212._4
623+ let virtSwapInPr = $t02483225212._5
624+ let virtSwapOutAm = $t02483225212._6
625+ let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
626+ let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
627+ let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
628+ if ((D0vsD1 == D0vsD1))
629+ then {
630+ let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
631+ let estimLP = estPut._2
632+ let lpAssetId = estPut._7
633+ let state = estPut._9
634+ let amDiff = estPut._10
635+ let prDiff = estPut._11
636+ let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
637+ let emitLpAmt = toInt(lpCalcRes._2)
638+ let e = invoke(fca, "emit", [emitLpAmt], nil)
639+ if ((e == e))
640+ then {
641+ let el = match e {
642+ case legacy: Address =>
643+ invoke(legacy, "emit", [emitLpAmt], nil)
644+ case _ =>
645+ unit
646+ }
647+ if ((el == el))
648+ then {
649+ let sa = if ((amDiff > 0))
650+ then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
651+ else nil
652+ if ((sa == sa))
653+ then {
654+ let sp = if ((prDiff > 0))
655+ then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
656+ else nil
657+ if ((sp == sp))
658+ then {
659+ let lpTrnsfr = if (autoStake)
660+ then {
661+ let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
662+ if ((ss == ss))
663+ then nil
664+ else throw("Strict value is not equal to itself.")
665+ }
666+ else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
667+ (state ++ lpTrnsfr)
668+ }
669+ else throw("Strict value is not equal to itself.")
670+ }
671+ else throw("Strict value is not equal to itself.")
672+ }
673+ else throw("Strict value is not equal to itself.")
674+ }
675+ else throw("Strict value is not equal to itself.")
676+ }
677+ else throw("Strict value is not equal to itself.")
678+ }
679+ }
680+ else throw("Strict value is not equal to itself.")
681+ }
682+
683+
684+
685+@Callable(i)
686+func putForFree (maxSlpg) = if ((0 > maxSlpg))
687+ then throw("Wrong slpg")
688+ else if ((size(i.payments) != 2))
689+ then throw("2 pmnts expd")
690+ else {
691+ 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, "")
692+ estPut._9
693+ }
694+
695+
696+
697+@Callable(i)
698+func get () = {
699+ let r = cg(i)
700+ let outAmtAmt = r._1
701+ let outPrAmt = r._2
702+ let pmtAmt = r._3
703+ let pmtAssetId = r._4
704+ let state = r._5
705+ let b = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
706+ if ((b == b))
707+ then state
708+ else throw("Strict value is not equal to itself.")
709+ }
710+
711+
712+
713+@Callable(i)
714+func getOneTkn (exchResult,notUsed,outAmount,outAssetId,slippage) = if ((size(i.payments) != 1))
715+ then throw("1 pmnt expd")
716+ else {
717+ let cfg = gpc()
718+ let lpId = cfg[idxLPAsId]
719+ let amId = cfg[idxAmAsId]
720+ let prId = cfg[idxPrAsId]
721+ let amDcm = parseIntValue(cfg[idxAmtAsDcm])
722+ let prDcm = parseIntValue(cfg[idxPriceAsDcm])
723+ let sts = cfg[idxPoolSt]
724+ let factCfg = gfc()
725+ let gwxCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactGwxRewCntr]), "Wr sl addr")
726+ let pmt = value(i.payments[0])
727+ let addon = valueOrElse(getString(this, ada()), "")
728+ let userAddress = if ((addon == toString(i.caller)))
729+ then i.originCaller
730+ else i.caller
731+ let txId58 = toBase58String(i.transactionId)
732+ let pmtAssetId = value(pmt.assetId)
733+ let pmtAmt = pmt.amount
734+ let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
735+ let check = reentrantInvoke(addonContract, "ensureCanGetOneTkn", [toString(userAddress)], nil)
736+ if ((check == check))
737+ then if ((1000000000 > pmtAmt))
738+ then throw("Min pmt 10 LP")
739+ else if (if (if ((0 > slippage))
740+ then true
741+ else (0 > exchResult))
742+ then true
743+ else (0 > outAmount))
744+ then throw("Wrong params")
745+ else if ((lpId != toBase58String(pmtAssetId)))
746+ then throw("Wrong LP")
747+ else {
748+ let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
749+ let estimAmAmt = r._1
750+ let estimPrAmt = r._2
751+ let amBalance = getAccBalance(amId)
752+ let prBalance = getAccBalance(prId)
753+ let $t03024330700 = if ((outAssetId == amId))
754+ then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
755+ else if ((outAssetId == prId))
756+ then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
757+ else throw("wrong outAssetId")
758+ let amBalanceNow = $t03024330700._1
759+ let prBalanceNow = $t03024330700._2
760+ let virtSwapInAm = $t03024330700._3
761+ let virtSwapOutPr = $t03024330700._4
762+ let virtSwapInPr = $t03024330700._5
763+ let virtSwapOutAm = $t03024330700._6
764+ let totalGet = $t03024330700._7
765+ if (if ((0 > virtSwapInAm))
766+ then true
767+ else (0 > virtSwapInPr))
768+ then throw("Wrong calc")
769+ else {
770+ let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
771+ let D1 = invoke(gwxCntr, "calcD", [toString(((amBalanceNow - virtSwapInAm) + virtSwapOutAm)), toString(((prBalanceNow + virtSwapOutPr) - virtSwapInPr)), A, Amult, Dconv], nil)
772+ let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
773+ if ((D0vsD1 == D0vsD1))
774+ then {
775+ let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
776+ if ((finalRes == finalRes))
777+ then {
778+ let $t03140531509 = if ((outAssetId == amId))
779+ then $Tuple2(toInt(finalRes._2), 0)
780+ else $Tuple2(0, toInt(finalRes._2))
781+ let outAm = $t03140531509._1
782+ let outPr = $t03140531509._2
783+ let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
784+ let curPr = f1(curPrX18, scale8)
785+ let state = [ScriptTransfer(userAddress, (outAm + outPr), if ((outAssetId == "WAVES"))
786+ then unit
787+ 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)]
788+ if ((state == state))
789+ then {
790+ let burn = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
791+ if ((burn == burn))
792+ then state
793+ else throw("Strict value is not equal to itself.")
794+ }
795+ else throw("Strict value is not equal to itself.")
796+ }
797+ else throw("Strict value is not equal to itself.")
798+ }
799+ else throw("Strict value is not equal to itself.")
800+ }
801+ }
802+ else throw("Strict value is not equal to itself.")
803+ }
804+
805+
806+
807+@Callable(i)
808+func getNoLess (noLessThenAmtAsset,noLessThenPriceAsset) = {
809+ let r = cg(i)
810+ let outAmAmt = r._1
811+ let outPrAmt = r._2
812+ let pmtAmt = r._3
813+ let pmtAssetId = r._4
814+ let state = r._5
815+ if ((noLessThenAmtAsset > outAmAmt))
816+ then throw(((("Failed: " + toString(outAmAmt)) + " < ") + toString(noLessThenAmtAsset)))
817+ else if ((noLessThenPriceAsset > outPrAmt))
818+ then throw(((("Failed: " + toString(outPrAmt)) + " < ") + toString(noLessThenPriceAsset)))
819+ else {
820+ let burnLPAssetOnFactory = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
821+ if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
822+ then state
823+ else throw("Strict value is not equal to itself.")
824+ }
825+ }
826+
827+
828+
829+@Callable(i)
830+func unstakeAndGet (amount) = {
831+ let checkPayments = if ((size(i.payments) != 0))
832+ then throw("No pmnts expd")
833+ else true
834+ if ((checkPayments == checkPayments))
835+ then {
836+ let cfg = gpc()
837+ let factoryCfg = gfc()
838+ let lpAssetId = fromBase58String(cfg[idxLPAsId])
839+ let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
840+ let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
841+ if ((unstakeInv == unstakeInv))
842+ then {
843+ let r = ego(toBase58String(i.transactionId), toBase58String(lpAssetId), amount, i.caller)
844+ let sts = parseIntValue(r._9)
845+ let state = r._10
846+ let v = if (if (igs())
847+ then true
848+ else (sts == PoolShutdown))
849+ then throw(("Blocked: " + toString(sts)))
850+ else true
851+ if ((v == v))
852+ then {
853+ let burnA = invoke(fca, "burn", [amount], [AttachedPayment(lpAssetId, amount)])
854+ if ((burnA == burnA))
855+ then state
856+ else throw("Strict value is not equal to itself.")
857+ }
858+ else throw("Strict value is not equal to itself.")
859+ }
860+ else throw("Strict value is not equal to itself.")
861+ }
862+ else throw("Strict value is not equal to itself.")
863+ }
864+
865+
866+
867+@Callable(i)
868+func activate (amtAsStr,prAsStr) = if ((toString(i.caller) != toString(fca)))
869+ then throw("denied")
870+ else $Tuple2([StringEntry(aa(), amtAsStr), StringEntry(pa(), prAsStr)], "success")
871+
872+
873+
874+@Callable(i)
875+func setS (k,v) = if ((toString(i.caller) != strf(this, ada())))
876+ then pd
877+ else [StringEntry(k, v)]
878+
879+
880+
881+@Callable(i)
882+func setI (k,v) = if ((toString(i.caller) != strf(this, ada())))
883+ then pd
884+ else [IntegerEntry(k, v)]
885+
886+
887+
888+@Callable(i)
889+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, gpc())
890+
891+
892+
893+@Callable(i)
894+func getAccBalanceWrapperREADONLY (assetId) = $Tuple2(nil, getAccBalance(assetId))
895+
896+
897+
898+@Callable(i)
899+func calcPricesWrapperREADONLY (amAmt,prAmt,lpAmt) = {
900+ let pr = calcPrices(amAmt, prAmt, lpAmt)
901+ $Tuple2(nil, [toString(pr[0]), toString(pr[1]), toString(pr[2])])
902+ }
903+
904+
905+
906+@Callable(i)
907+func fromX18WrapperREADONLY (val,resScaleMult) = $Tuple2(nil, f1(parseBigIntValue(val), resScaleMult))
908+
909+
910+
911+@Callable(i)
912+func toX18WrapperREADONLY (origVal,origScaleMult) = $Tuple2(nil, toString(t1(origVal, origScaleMult)))
913+
914+
915+
916+@Callable(i)
917+func calcPriceBigIntWrapperREADONLY (prAmtX18,amAmtX18) = $Tuple2(nil, toString(cpbi(parseBigIntValue(prAmtX18), parseBigIntValue(amAmtX18))))
918+
919+
920+
921+@Callable(i)
922+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, ""))
923+
924+
925+
926+@Callable(i)
927+func estimateGetOperationWrapperREADONLY (txId58,pmtAsId,pmtLpAmt,usrAddr) = {
928+ let r = ego(txId58, pmtAsId, pmtLpAmt, addressFromStringValue(usrAddr))
929+ $Tuple2(nil, $Tuple10(r._1, r._2, r._3, r._4, r._5, r._6, r._7, toString(r._8), r._9, r._10))
930+ }
931+
932+
933+@Verifier(tx)
934+func verify () = match tx {
935+ case order: Order =>
936+ let mtchPub = mp()
937+ let orV = moa(order)
938+ let sndrV = sigVerify(order.bodyBytes, order.proofs[0], order.senderPublicKey)
939+ let mtchV = sigVerify(order.bodyBytes, order.proofs[1], mtchPub)
940+ if (if (if (orV)
941+ then sndrV
942+ else false)
943+ then mtchV
944+ else false)
945+ then true
946+ else toe(orV, sndrV, mtchV)
947+ case _ =>
948+ let targetPublicKey = match m() {
949+ case pk: ByteVector =>
950+ pk
951+ case _: Unit =>
952+ tx.senderPublicKey
953+ case _ =>
954+ throw("Match error")
955+ }
956+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
957+}
958+

github/deemru/w8io/873ac7e 
135.69 ms