tx · 5vJHZ5p5QbT6r68taJLerTxi6CQ8MRfYh12vy3EyF7Lm

3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT:  -0.03400000 Waves

2022.06.23 14:26 [2108993] smart account 3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT > SELF 0.00000000 Waves

{ "type": 13, "id": "5vJHZ5p5QbT6r68taJLerTxi6CQ8MRfYh12vy3EyF7Lm", "fee": 3400000, "feeAssetId": null, "timestamp": 1655983652278, "version": 1, "sender": "3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT", "senderPublicKey": "D1BL65meykxFZTCuq7jq9HSGLLnWvQamQPUNrguW5w39", "proofs": [ "57pxh75WjJ2Rfrp3CwCDPtTXiQryarGsTQhVxQ2YsoL7urhE6ZpYCBJmAdg3EAJUPgUT27kVzaycL8TAoGJ5pe9K" ], "script": "base64:AAIFAAAAAAAAC68IAhIDCgEIEgMKAQgSABIECgIBBBIHCgUBAQEBBBIDCgEBEgASBwoFAQEBCAESBAoCAQESAwoBARIECgIICBIECgIICBIECgIIARIAEgMKAQgSBQoDAQEBEgQKAggBEgQKAgEBEgQKAggIEgsKCQgBAQIBAggEBBIGCgQICAEIIgZzY2FsZTgiDHNjYWxlOEJpZ0ludCIHc2NhbGUxOCIKemVyb0JpZ0ludCIJb25lQmlnSW50IgpzbGlwcGFnZTREIgVBbXVsdCIFRGNvbnYiA1NFUCIFRU1QVFkiClBvb2xBY3RpdmUiClBvb2xQdXREaXMiDlBvb2xNYXRjaGVyRGlzIgxQb29sU2h1dGRvd24iDmlkeFBvb2xBZGRyZXNzIglpZHhQb29sU3QiCWlkeExQQXNJZCIJaWR4QW1Bc0lkIglpZHhQckFzSWQiC2lkeEFtdEFzRGNtIg1pZHhQcmljZUFzRGNtIgtpZHhJQW10QXNJZCINaWR4SVByaWNlQXNJZCIPaWR4RmFjdFN0YWtDbnRyIhBpZHhGYWN0U2xpcHBDbnRyIhFpZHhGYWN0R3d4UmV3Q250ciIFZGVsYXkiAnQxIgdvcmlnVmFsIg1vcmlnU2NhbGVNdWx0IgJmMSIDdmFsIg9yZXN1bHRTY2FsZU11bHQiAnRzIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIgJmYyIDbXBrIgRwbXBrIgJwbCICcGgiAWgiAXQiA3BhdSICdWEiBHR4SWQiA2dhdSICYWEiAnBhIgNhbXAiA2FkYSIFbGdvdGMiBmNhbGxlciIFbHNvdGMiBGZjZmciBG10cGsiAnBjIgZpQW10QXMiBWlQckFzIgNtYmEiBWJBU3RyIgNhcHMiA3RvZSIDb3JWIgZzZW5kclYiBm1hdGNoViIDc3RyIgckbWF0Y2gwIgZ2YWxTdHIiBHN0cmYiBGFkZHIiA2tleSIEaW50ZiIDZmNhIgFBIgNpZ3MiAm1wIgNncGMiBWFtdEFzIgdwcmljZUFzIghpUHJpY2VBcyIDZ2ZjIhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiCnNsaXBCeVVzZXIiDHNsaXBwYWdlUmVhbCIIdHhIZWlnaHQiC3R4VGltZXN0YW1wIgxzbGlwYWdlQW1BbXQiDHNsaXBhZ2VQckFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIgdhc3NldElkIgRjcGJpIghwckFtdFgxOCIIYW1BbXRYMTgiA3ZhZCICQTEiAkEyIghzbGlwcGFnZSIEZGlmZiIEcGFzcyICdmQiAkQxIgJEMCIEc2xwZyIEZmFpbCIDcGNwIgphbUFzc2V0RGNtIgpwckFzc2V0RGNtIgVhbUFtdCIFcHJBbXQiC2FtdEFzQW10WDE4IgpwckFzQW10WDE4IgpjYWxjUHJpY2VzIgVscEFtdCIDY2ZnIghhbXRBc0RjbSIHcHJBc0RjbSIIcHJpY2VYMTgiCGxwQW10WDE4Ig1scFBySW5BbUFzWDE4Ig1scFBySW5QckFzWDE4Ig9jYWxjdWxhdGVQcmljZXMiAXAiA2VnbyIGdHhJZDU4IgpwbXRBc3NldElkIghwbXRMcEFtdCILdXNlckFkZHJlc3MiBGxwSWQiBGFtSWQiBHBySWQiBWFtRGNtIgVwckRjbSIDc3RzIgdscEVtaXNzIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiCmxwRW1pc3NYMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIDZXBvIgdpbkFtQW10IgZpbkFtSWQiB2luUHJBbXQiBmluUHJJZCIGaXNFdmFsIgZlbWl0THAiCmlzT25lQXNzZXQiBnBtdEFtdCIFcG10SWQiB2FtSWRTdHIiB3BySWRTdHIiCWluQW1JZFN0ciIJaW5QcklkU3RyIgZhbXREY20iCHByaWNlRGNtIgRscEVtIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgFyIgtzbGlwcGFnZVgxOCIPc2xpcHBhZ2VSZWFsWDE4Ig1scEVtaXNzaW9uWDE4IgpwclZpYUFtWDE4IgphbVZpYVByWDE4IgxleHBlY3RlZEFtdHMiEWV4cEFtdEFzc2V0QW10WDE4IhNleHBQcmljZUFzc2V0QW10WDE4IgljYWxjTHBBbXQiDmNhbGNBbUFzc2V0UG10Ig5jYWxjUHJBc3NldFBtdCIMc2xpcHBhZ2VDYWxjIgllbWl0THBBbXQiBmFtRGlmZiIGcHJEaWZmIg0kdDAxNTUzMTE1ODc2Igp3cml0ZUFtQW10Igp3cml0ZVByQW10Igtjb21tb25TdGF0ZSIDbW9hIgVvcmRlciIHYW10QXNJZCIGcHJBc0lkIg9hY2NBbXRBc0JhbGFuY2UiDmFjY1ByQXNCYWxhbmNlIgpvckFtdEFzc2V0IgpvckFtdEFzU3RyIglvclByQXNzZXQiCW9yUHJBc1N0ciIKb3JkZXJQcmljZSIOY2FzdE9yZGVyUHJpY2UiEWlzT3JkZXJQcmljZVZhbGlkIgJjZyIBaSIDcG10IgJjcCIHYW1Bc1BtdCIHcHJBc1BtdCIBbSIBcyICcG0iAnBkIgJtbSICcGsiAWMiF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgJjbSIDaHBtIgNjcG0iBHNsaXAiCWF1dG9TdGFrZSIHZmFjdENmZyILc3Rha2luZ0NudHIiCHNsaXBDbnRyIgFlIglscEFzc2V0SWQiAmVsIgZsZWdhY3kiAnNhIgJzcCIIbHBUcm5zZnIiAnNzIgthbUFzc2V0UGFydCILcHJBc3NldFBhcnQiBW91dExwIgdnd3hDbnRyIgdwb29sQ2ZnIgVhZGRvbiINYWRkb25Db250cmFjdCIFY2hlY2siDSR0MDI0ODMyMjUyMTIiDGFtQmFsYW5jZU5vdyIMcHJCYWxhbmNlTm93Igx2aXJ0U3dhcEluQW0iDXZpcnRTd2FwT3V0UHIiDHZpcnRTd2FwSW5QciINdmlydFN3YXBPdXRBbSIGRDB2c0QxIgZlc3RQdXQiB2VzdGltTFAiCWxwQ2FsY1JlcyIHbWF4U2xwZyIJb3V0QW10QW10IgFiIgpleGNoUmVzdWx0Igdub3RVc2VkIglvdXRBbW91bnQiCm91dEFzc2V0SWQiCmVzdGltQW1BbXQiCmVzdGltUHJBbXQiDSR0MDMwMjQzMzA3MDAiCHRvdGFsR2V0IghmaW5hbFJl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", "chainId": 84, "height": 2108993, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AhpdeX63nZcQ9oxa2LhdeoFr9dcJChihb52csXkVGrwN Next: 4XugvuAbdQpNSEmY2u7GnJw3Z8KR3J63K5sujFEcevm6 Diff:
OldNewDifferences
217217 }
218218
219219
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+
220226 func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
221227 let cfg = gpc()
222228 let lpId = cfg[idxLPAsId]
328334 else calcLpAmt
329335 let amDiff = (inAmAmt - calcAmAssetPmt)
330336 let prDiff = (inPrAmt - calcPrAssetPmt)
331- let $t01531315658 = if (if (isOneAsset)
337+ let $t01553115876 = if (if (isOneAsset)
332338 then (pmtId == amIdStr)
333339 else false)
334340 then $Tuple2(pmtAmt, 0)
337343 else false)
338344 then $Tuple2(0, pmtAmt)
339345 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
340- let writeAmAmt = $t01531315658._1
341- let writePrAmt = $t01531315658._2
346+ let writeAmAmt = $t01553115876._1
347+ let writePrAmt = $t01553115876._2
342348 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))]
343349 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
344350 }
504510
505511
506512 @Callable(i)
507-func calculatePrices (amAmt,prAmt,lpAmt) = {
508- let p = calcPrices(amAmt, prAmt, lpAmt)
509- $Tuple2(nil, [f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)])
510- }
511-
512-
513-
514-@Callable(i)
515513 func put (slip,autoStake) = {
516514 let factCfg = gfc()
517515 let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
613611 else {
614612 let amBalance = getAccBalance(amId)
615613 let prBalance = getAccBalance(prId)
616- let $t02486025240 = if ((pmtAssetId == amId))
614+ let $t02483225212 = if ((pmtAssetId == amId))
617615 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
618616 else if ((pmtAssetId == prId))
619617 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
620618 else throw("wrong pmtAssetId")
621- let amBalanceNow = $t02486025240._1
622- let prBalanceNow = $t02486025240._2
623- let virtSwapInAm = $t02486025240._3
624- let virtSwapOutPr = $t02486025240._4
625- let virtSwapInPr = $t02486025240._5
626- let virtSwapOutAm = $t02486025240._6
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
627625 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
628626 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
629627 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
752750 let estimPrAmt = r._2
753751 let amBalance = getAccBalance(amId)
754752 let prBalance = getAccBalance(prId)
755- let $t03027130728 = if ((outAssetId == amId))
753+ let $t03024330700 = if ((outAssetId == amId))
756754 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
757755 else if ((outAssetId == prId))
758756 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
759757 else throw("wrong outAssetId")
760- let amBalanceNow = $t03027130728._1
761- let prBalanceNow = $t03027130728._2
762- let virtSwapInAm = $t03027130728._3
763- let virtSwapOutPr = $t03027130728._4
764- let virtSwapInPr = $t03027130728._5
765- let virtSwapOutAm = $t03027130728._6
766- let totalGet = $t03027130728._7
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
767765 if (if ((0 > virtSwapInAm))
768766 then true
769767 else (0 > virtSwapInPr))
777775 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
778776 if ((finalRes == finalRes))
779777 then {
780- let $t03143331537 = if ((outAssetId == amId))
778+ let $t03140531509 = if ((outAssetId == amId))
781779 then $Tuple2(toInt(finalRes._2), 0)
782780 else $Tuple2(0, toInt(finalRes._2))
783- let outAm = $t03143331537._1
784- let outPr = $t03143331537._2
781+ let outAm = $t03140531509._1
782+ let outPr = $t03140531509._2
785783 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
786784 let curPr = f1(curPrX18, scale8)
787785 let state = [ScriptTransfer(userAddress, (outAm + outPr), if ((outAssetId == "WAVES"))
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 lgotc (caller) = makeString(["%s%s__lastGetOneTknCall", caller], SEP)
106106
107107
108108 func lsotc (caller) = makeString(["%s%s__lastPutOneTknCall", caller], SEP)
109109
110110
111111 func fcfg () = "%s__factoryConfig"
112112
113113
114114 func mtpk () = "%s%s__matcher__publicKey"
115115
116116
117117 func pc (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
118118
119119
120120 func mba (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
121121
122122
123123 func aps () = "%s__shutdown"
124124
125125
126126 func toe (orV,sendrV,matchV) = throw(((((("Failed: ordValid=" + toString(orV)) + " sndrValid=") + toString(sendrV)) + " mtchrValid=") + toString(matchV)))
127127
128128
129129 func str (val) = match val {
130130 case valStr: String =>
131131 valStr
132132 case _ =>
133133 throw("fail cast to String")
134134 }
135135
136136
137137 func strf (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
138138
139139
140140 func intf (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
141141
142142
143143 let fca = addressFromStringValue(strf(this, fc()))
144144
145145 let A = strf(this, amp())
146146
147147 func igs () = valueOrElse(getBoolean(fca, aps()), false)
148148
149149
150150 func mp () = fromBase58String(strf(fca, mtpk()))
151151
152152
153153 func gpc () = {
154154 let amtAs = strf(this, aa())
155155 let priceAs = strf(this, pa())
156156 let iPriceAs = intf(fca, mba(priceAs))
157157 let iAmtAs = intf(fca, mba(amtAs))
158158 split(strf(fca, pc(toString(iAmtAs), toString(iPriceAs))), SEP)
159159 }
160160
161161
162162 func gfc () = split(strf(fca, fcfg()), SEP)
163163
164164
165165 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)
166166
167167
168168 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)
169169
170170
171171 func getAccBalance (assetId) = if ((assetId == "WAVES"))
172172 then wavesBalance(this).available
173173 else assetBalance(this, fromBase58String(assetId))
174174
175175
176176 func cpbi (prAmtX18,amAmtX18) = fraction(prAmtX18, scale18, amAmtX18)
177177
178178
179179 func vad (A1,A2,slippage) = {
180180 let diff = fraction((A1 - A2), scale8BigInt, A2)
181181 let pass = ((slippage - abs(diff)) > zeroBigInt)
182182 if (!(pass))
183183 then throw(("Big slpg: " + toString(diff)))
184184 else $Tuple2(pass, min([A1, A2]))
185185 }
186186
187187
188188 func vd (D1,D0,slpg) = {
189189 let diff = fraction(D0, scale8BigInt, D1)
190190 let fail = (slpg > diff)
191191 if (if (fail)
192192 then true
193193 else (D0 > D1))
194194 then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
195195 else fail
196196 }
197197
198198
199199 func pcp (amAssetDcm,prAssetDcm,amAmt,prAmt) = {
200200 let amtAsAmtX18 = t1(amAmt, amAssetDcm)
201201 let prAsAmtX18 = t1(prAmt, prAssetDcm)
202202 cpbi(prAsAmtX18, amtAsAmtX18)
203203 }
204204
205205
206206 func calcPrices (amAmt,prAmt,lpAmt) = {
207207 let cfg = gpc()
208208 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
209209 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
210210 let priceX18 = pcp(amtAsDcm, prAsDcm, amAmt, prAmt)
211211 let amAmtX18 = t1(amAmt, amtAsDcm)
212212 let prAmtX18 = t1(prAmt, prAsDcm)
213213 let lpAmtX18 = t1(lpAmt, scale8)
214214 let lpPrInAmAsX18 = cpbi(amAmtX18, lpAmtX18)
215215 let lpPrInPrAsX18 = cpbi(prAmtX18, lpAmtX18)
216216 [priceX18, lpPrInAmAsX18, lpPrInPrAsX18]
217217 }
218218
219219
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+
220226 func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
221227 let cfg = gpc()
222228 let lpId = cfg[idxLPAsId]
223229 let amId = cfg[idxAmAsId]
224230 let prId = cfg[idxPrAsId]
225231 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
226232 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
227233 let sts = cfg[idxPoolSt]
228234 let lpEmiss = valueOrErrorMessage(assetInfo(fromBase58String(lpId)), "Wrong LP id").quantity
229235 if ((lpId != pmtAssetId))
230236 then throw("Wrong pmt asset")
231237 else {
232238 let amBalance = getAccBalance(amId)
233239 let amBalanceX18 = t1(amBalance, amDcm)
234240 let prBalance = getAccBalance(prId)
235241 let prBalanceX18 = t1(prBalance, prDcm)
236242 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
237243 let curPrice = f1(curPriceX18, scale8)
238244 let pmtLpAmtX18 = t1(pmtLpAmt, scale8)
239245 let lpEmissX18 = t1(lpEmiss, scale8)
240246 let outAmAmtX18 = fraction(amBalanceX18, pmtLpAmtX18, lpEmissX18)
241247 let outPrAmtX18 = fraction(prBalanceX18, pmtLpAmtX18, lpEmissX18)
242248 let outAmAmt = f1(outAmAmtX18, amDcm)
243249 let outPrAmt = f1(outPrAmtX18, prDcm)
244250 let state = if ((txId58 == ""))
245251 then nil
246252 else [ScriptTransfer(userAddress, outAmAmt, if ((amId == "WAVES"))
247253 then unit
248254 else fromBase58String(amId)), ScriptTransfer(userAddress, outPrAmt, if ((prId == "WAVES"))
249255 then unit
250256 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)]
251257 $Tuple10(outAmAmt, outPrAmt, amId, prId, amBalance, prBalance, lpEmiss, curPriceX18, sts, state)
252258 }
253259 }
254260
255261
256262 func epo (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,userAddress,isEval,emitLp,isOneAsset,pmtAmt,pmtId) = {
257263 let cfg = gpc()
258264 let lpId = fromBase58String(cfg[idxLPAsId])
259265 let amIdStr = cfg[idxAmAsId]
260266 let prIdStr = cfg[idxPrAsId]
261267 let inAmIdStr = cfg[idxIAmtAsId]
262268 let inPrIdStr = cfg[idxIPriceAsId]
263269 let amtDcm = parseIntValue(cfg[idxAmtAsDcm])
264270 let priceDcm = parseIntValue(cfg[idxPriceAsDcm])
265271 let sts = cfg[idxPoolSt]
266272 let lpEm = valueOrErrorMessage(assetInfo(lpId), "Wr lp as").quantity
267273 let amBalance = if (isEval)
268274 then getAccBalance(amIdStr)
269275 else if (if (isOneAsset)
270276 then (pmtId == amIdStr)
271277 else false)
272278 then (getAccBalance(amIdStr) - pmtAmt)
273279 else if (isOneAsset)
274280 then getAccBalance(amIdStr)
275281 else (getAccBalance(amIdStr) - inAmAmt)
276282 let prBalance = if (isEval)
277283 then getAccBalance(prIdStr)
278284 else if (if (isOneAsset)
279285 then (pmtId == prIdStr)
280286 else false)
281287 then (getAccBalance(prIdStr) - pmtAmt)
282288 else if (isOneAsset)
283289 then getAccBalance(prIdStr)
284290 else (getAccBalance(prIdStr) - inPrAmt)
285291 let inAmAssetAmtX18 = t1(inAmAmt, amtDcm)
286292 let inPrAssetAmtX18 = t1(inPrAmt, priceDcm)
287293 let userPriceX18 = cpbi(inPrAssetAmtX18, inAmAssetAmtX18)
288294 let amBalanceX18 = t1(amBalance, amtDcm)
289295 let prBalanceX18 = t1(prBalance, priceDcm)
290296 let r = if ((lpEm == 0))
291297 then {
292298 let curPriceX18 = zeroBigInt
293299 let slippageX18 = zeroBigInt
294300 let lpAmtX18 = pow((inAmAssetAmtX18 * inPrAssetAmtX18), 0, toBigInt(5), 1, 0, DOWN)
295301 $Tuple5(f1(lpAmtX18, scale8), f1(inAmAssetAmtX18, amtDcm), f1(inPrAssetAmtX18, priceDcm), cpbi((prBalanceX18 + inPrAssetAmtX18), (amBalanceX18 + inAmAssetAmtX18)), slippageX18)
296302 }
297303 else {
298304 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
299305 let slippageRealX18 = fraction(abs((curPriceX18 - userPriceX18)), scale18, curPriceX18)
300306 let slippageX18 = t1(slippage, scale8)
301307 if (if ((curPriceX18 != zeroBigInt))
302308 then (slippageRealX18 > slippageX18)
303309 else false)
304310 then throw(((("Price slippage " + toString(slippageRealX18)) + " > ") + toString(slippageX18)))
305311 else {
306312 let lpEmissionX18 = t1(lpEm, scale8)
307313 let prViaAmX18 = fraction(inAmAssetAmtX18, curPriceX18, scale18)
308314 let amViaPrX18 = fraction(inPrAssetAmtX18, scale18, curPriceX18)
309315 let expectedAmts = if ((prViaAmX18 > inPrAssetAmtX18))
310316 then $Tuple2(amViaPrX18, inPrAssetAmtX18)
311317 else $Tuple2(inAmAssetAmtX18, prViaAmX18)
312318 let expAmtAssetAmtX18 = expectedAmts._1
313319 let expPriceAssetAmtX18 = expectedAmts._2
314320 let lpAmtX18 = fraction(lpEmissionX18, expPriceAssetAmtX18, prBalanceX18)
315321 $Tuple5(f1(lpAmtX18, scale8), f1(expAmtAssetAmtX18, amtDcm), f1(expPriceAssetAmtX18, priceDcm), curPriceX18, slippageX18)
316322 }
317323 }
318324 let calcLpAmt = r._1
319325 let calcAmAssetPmt = r._2
320326 let calcPrAssetPmt = r._3
321327 let curPrice = f1(r._4, scale8)
322328 let slippageCalc = f1(r._5, scale8)
323329 if ((0 >= calcLpAmt))
324330 then throw("LP <= 0")
325331 else {
326332 let emitLpAmt = if (!(emitLp))
327333 then 0
328334 else calcLpAmt
329335 let amDiff = (inAmAmt - calcAmAssetPmt)
330336 let prDiff = (inPrAmt - calcPrAssetPmt)
331- let $t01531315658 = if (if (isOneAsset)
337+ let $t01553115876 = if (if (isOneAsset)
332338 then (pmtId == amIdStr)
333339 else false)
334340 then $Tuple2(pmtAmt, 0)
335341 else if (if (isOneAsset)
336342 then (pmtId == prIdStr)
337343 else false)
338344 then $Tuple2(0, pmtAmt)
339345 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
340- let writeAmAmt = $t01531315658._1
341- let writePrAmt = $t01531315658._2
346+ let writeAmAmt = $t01553115876._1
347+ let writePrAmt = $t01553115876._2
342348 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))]
343349 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
344350 }
345351 }
346352
347353
348354 func moa (order) = {
349355 let cfg = gpc()
350356 let amtAsId = cfg[idxAmAsId]
351357 let prAsId = cfg[idxPrAsId]
352358 let sts = parseIntValue(cfg[idxPoolSt])
353359 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
354360 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
355361 let accAmtAsBalance = getAccBalance(amtAsId)
356362 let accPrAsBalance = getAccBalance(prAsId)
357363 let curPriceX18 = if ((order.orderType == Buy))
358364 then pcp(amtAsDcm, prAsDcm, (accAmtAsBalance + order.amount), accPrAsBalance)
359365 else pcp(amtAsDcm, prAsDcm, (accAmtAsBalance - order.amount), accPrAsBalance)
360366 let curPrice = f1(curPriceX18, scale8)
361367 if (if (if (igs())
362368 then true
363369 else (sts == PoolMatcherDis))
364370 then true
365371 else (sts == PoolShutdown))
366372 then throw("Admin blocked")
367373 else {
368374 let orAmtAsset = order.assetPair.amountAsset
369375 let orAmtAsStr = if ((orAmtAsset == unit))
370376 then "WAVES"
371377 else toBase58String(value(orAmtAsset))
372378 let orPrAsset = order.assetPair.priceAsset
373379 let orPrAsStr = if ((orPrAsset == unit))
374380 then "WAVES"
375381 else toBase58String(value(orPrAsset))
376382 if (if ((orAmtAsStr != amtAsId))
377383 then true
378384 else (orPrAsStr != prAsId))
379385 then throw("Wr assets")
380386 else {
381387 let orderPrice = order.price
382388 let priceDcm = fraction(scale8, prAsDcm, amtAsDcm)
383389 let castOrderPrice = ts(orderPrice, scale8, priceDcm)
384390 let isOrderPriceValid = if ((order.orderType == Buy))
385391 then (curPrice >= castOrderPrice)
386392 else (castOrderPrice >= curPrice)
387393 true
388394 }
389395 }
390396 }
391397
392398
393399 func cg (i) = if ((size(i.payments) != 1))
394400 then throw("1 pmnt exp")
395401 else {
396402 let pmt = value(i.payments[0])
397403 let pmtAssetId = value(pmt.assetId)
398404 let pmtAmt = pmt.amount
399405 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
400406 let outAmAmt = r._1
401407 let outPrAmt = r._2
402408 let sts = parseIntValue(r._9)
403409 let state = r._10
404410 if (if (igs())
405411 then true
406412 else (sts == PoolShutdown))
407413 then throw(("Admin blocked: " + toString(sts)))
408414 else $Tuple5(outAmAmt, outPrAmt, pmtAmt, pmtAssetId, state)
409415 }
410416
411417
412418 func cp (caller,txId,amAsPmt,prAsPmt,slippage,emitLp,isOneAsset,pmtAmt,pmtId) = {
413419 let r = epo(txId, slippage, value(amAsPmt).amount, value(amAsPmt).assetId, value(prAsPmt).amount, value(prAsPmt).assetId, caller, false, emitLp, isOneAsset, pmtAmt, pmtId)
414420 let sts = parseIntValue(r._8)
415421 if (if (if (igs())
416422 then true
417423 else (sts == PoolPutDis))
418424 then true
419425 else (sts == PoolShutdown))
420426 then throw(("Blocked:" + toString(sts)))
421427 else r
422428 }
423429
424430
425431 func m () = match getString(mpk()) {
426432 case s: String =>
427433 fromBase58String(s)
428434 case _: Unit =>
429435 unit
430436 case _ =>
431437 throw("Match error")
432438 }
433439
434440
435441 func pm () = match getString(pmpk()) {
436442 case s: String =>
437443 fromBase58String(s)
438444 case _: Unit =>
439445 unit
440446 case _ =>
441447 throw("Match error")
442448 }
443449
444450
445451 let pd = throw("Permission denied")
446452
447453 func mm (i) = match m() {
448454 case pk: ByteVector =>
449455 if ((i.callerPublicKey == pk))
450456 then true
451457 else pd
452458 case _: Unit =>
453459 if ((i.caller == this))
454460 then true
455461 else pd
456462 case _ =>
457463 throw("Match error")
458464 }
459465
460466
461467 @Callable(i)
462468 func constructor (fc) = {
463469 let c = mm(i)
464470 if ((c == c))
465471 then [StringEntry(fc(), fc)]
466472 else throw("Strict value is not equal to itself.")
467473 }
468474
469475
470476
471477 @Callable(i)
472478 func setManager (pendingManagerPublicKey) = {
473479 let c = mm(i)
474480 if ((c == c))
475481 then {
476482 let cm = fromBase58String(pendingManagerPublicKey)
477483 if ((cm == cm))
478484 then [StringEntry(pmpk(), pendingManagerPublicKey)]
479485 else throw("Strict value is not equal to itself.")
480486 }
481487 else throw("Strict value is not equal to itself.")
482488 }
483489
484490
485491
486492 @Callable(i)
487493 func confirmManager () = {
488494 let p = pm()
489495 let hpm = if (isDefined(p))
490496 then true
491497 else throw("No pending manager")
492498 if ((hpm == hpm))
493499 then {
494500 let cpm = if ((i.callerPublicKey == value(p)))
495501 then true
496502 else throw("You are not pending manager")
497503 if ((cpm == cpm))
498504 then [StringEntry(mpk(), toBase58String(value(p))), DeleteEntry(pmpk())]
499505 else throw("Strict value is not equal to itself.")
500506 }
501507 else throw("Strict value is not equal to itself.")
502508 }
503509
504510
505511
506512 @Callable(i)
507-func calculatePrices (amAmt,prAmt,lpAmt) = {
508- let p = calcPrices(amAmt, prAmt, lpAmt)
509- $Tuple2(nil, [f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)])
510- }
511-
512-
513-
514-@Callable(i)
515513 func put (slip,autoStake) = {
516514 let factCfg = gfc()
517515 let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
518516 let slipCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactSlippCntr]), "Wr sl addr")
519517 if ((0 > slip))
520518 then throw("Wrong slippage")
521519 else if ((size(i.payments) != 2))
522520 then throw("2 pmnts expd")
523521 else {
524522 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, "")
525523 let emitLpAmt = e._2
526524 let lpAssetId = e._7
527525 let state = e._9
528526 let amDiff = e._10
529527 let prDiff = e._11
530528 let amId = e._12
531529 let prId = e._13
532530 let r = invoke(fca, "emit", [emitLpAmt], nil)
533531 if ((r == r))
534532 then {
535533 let el = match r {
536534 case legacy: Address =>
537535 invoke(legacy, "emit", [emitLpAmt], nil)
538536 case _ =>
539537 unit
540538 }
541539 if ((el == el))
542540 then {
543541 let sa = if ((amDiff > 0))
544542 then invoke(slipCntr, "put", nil, [AttachedPayment(amId, amDiff)])
545543 else nil
546544 if ((sa == sa))
547545 then {
548546 let sp = if ((prDiff > 0))
549547 then invoke(slipCntr, "put", nil, [AttachedPayment(prId, prDiff)])
550548 else nil
551549 if ((sp == sp))
552550 then {
553551 let lpTrnsfr = if (autoStake)
554552 then {
555553 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
556554 if ((ss == ss))
557555 then nil
558556 else throw("Strict value is not equal to itself.")
559557 }
560558 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
561559 (state ++ lpTrnsfr)
562560 }
563561 else throw("Strict value is not equal to itself.")
564562 }
565563 else throw("Strict value is not equal to itself.")
566564 }
567565 else throw("Strict value is not equal to itself.")
568566 }
569567 else throw("Strict value is not equal to itself.")
570568 }
571569 }
572570
573571
574572
575573 @Callable(i)
576574 func putOneTkn (amAssetPart,prAssetPart,outLp,slippage,autoStake) = {
577575 let cfg = gfc()
578576 let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
579577 let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
580578 let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
581579 let poolCfg = gpc()
582580 let amId = poolCfg[idxAmAsId]
583581 let prId = poolCfg[idxPrAsId]
584582 let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
585583 let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
586584 let addon = valueOrElse(getString(this, ada()), "")
587585 let userAddress = if ((addon == toString(i.caller)))
588586 then i.originCaller
589587 else i.caller
590588 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
591589 let check = reentrantInvoke(addonContract, "ensureCanPutOneTkn", [toString(userAddress)], nil)
592590 if ((check == check))
593591 then if (if (if (if ((0 >= slippage))
594592 then true
595593 else (0 >= amAssetPart))
596594 then true
597595 else (0 >= prAssetPart))
598596 then true
599597 else (0 >= outLp))
600598 then throw("Wrong params")
601599 else if ((size(i.payments) != 1))
602600 then throw("1 pmnt expd")
603601 else {
604602 let pmt = value(i.payments[0])
605603 let pmtAssetId = toBase58String(value(pmt.assetId))
606604 let pmtAmt = pmt.amount
607605 if (if (if ((amAssetPart > pmtAmt))
608606 then true
609607 else (prAssetPart > pmtAmt))
610608 then true
611609 else (10000000 > pmtAmt))
612610 then throw("Wrong pmt amt")
613611 else {
614612 let amBalance = getAccBalance(amId)
615613 let prBalance = getAccBalance(prId)
616- let $t02486025240 = if ((pmtAssetId == amId))
614+ let $t02483225212 = if ((pmtAssetId == amId))
617615 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
618616 else if ((pmtAssetId == prId))
619617 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
620618 else throw("wrong pmtAssetId")
621- let amBalanceNow = $t02486025240._1
622- let prBalanceNow = $t02486025240._2
623- let virtSwapInAm = $t02486025240._3
624- let virtSwapOutPr = $t02486025240._4
625- let virtSwapInPr = $t02486025240._5
626- let virtSwapOutAm = $t02486025240._6
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
627625 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
628626 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
629627 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
630628 if ((D0vsD1 == D0vsD1))
631629 then {
632630 let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
633631 let estimLP = estPut._2
634632 let lpAssetId = estPut._7
635633 let state = estPut._9
636634 let amDiff = estPut._10
637635 let prDiff = estPut._11
638636 let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
639637 let emitLpAmt = toInt(lpCalcRes._2)
640638 let e = invoke(fca, "emit", [emitLpAmt], nil)
641639 if ((e == e))
642640 then {
643641 let el = match e {
644642 case legacy: Address =>
645643 invoke(legacy, "emit", [emitLpAmt], nil)
646644 case _ =>
647645 unit
648646 }
649647 if ((el == el))
650648 then {
651649 let sa = if ((amDiff > 0))
652650 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
653651 else nil
654652 if ((sa == sa))
655653 then {
656654 let sp = if ((prDiff > 0))
657655 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
658656 else nil
659657 if ((sp == sp))
660658 then {
661659 let lpTrnsfr = if (autoStake)
662660 then {
663661 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
664662 if ((ss == ss))
665663 then nil
666664 else throw("Strict value is not equal to itself.")
667665 }
668666 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
669667 (state ++ lpTrnsfr)
670668 }
671669 else throw("Strict value is not equal to itself.")
672670 }
673671 else throw("Strict value is not equal to itself.")
674672 }
675673 else throw("Strict value is not equal to itself.")
676674 }
677675 else throw("Strict value is not equal to itself.")
678676 }
679677 else throw("Strict value is not equal to itself.")
680678 }
681679 }
682680 else throw("Strict value is not equal to itself.")
683681 }
684682
685683
686684
687685 @Callable(i)
688686 func putForFree (maxSlpg) = if ((0 > maxSlpg))
689687 then throw("Wrong slpg")
690688 else if ((size(i.payments) != 2))
691689 then throw("2 pmnts expd")
692690 else {
693691 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, "")
694692 estPut._9
695693 }
696694
697695
698696
699697 @Callable(i)
700698 func get () = {
701699 let r = cg(i)
702700 let outAmtAmt = r._1
703701 let outPrAmt = r._2
704702 let pmtAmt = r._3
705703 let pmtAssetId = r._4
706704 let state = r._5
707705 let b = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
708706 if ((b == b))
709707 then state
710708 else throw("Strict value is not equal to itself.")
711709 }
712710
713711
714712
715713 @Callable(i)
716714 func getOneTkn (exchResult,notUsed,outAmount,outAssetId,slippage) = if ((size(i.payments) != 1))
717715 then throw("1 pmnt expd")
718716 else {
719717 let cfg = gpc()
720718 let lpId = cfg[idxLPAsId]
721719 let amId = cfg[idxAmAsId]
722720 let prId = cfg[idxPrAsId]
723721 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
724722 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
725723 let sts = cfg[idxPoolSt]
726724 let factCfg = gfc()
727725 let gwxCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactGwxRewCntr]), "Wr sl addr")
728726 let pmt = value(i.payments[0])
729727 let addon = valueOrElse(getString(this, ada()), "")
730728 let userAddress = if ((addon == toString(i.caller)))
731729 then i.originCaller
732730 else i.caller
733731 let txId58 = toBase58String(i.transactionId)
734732 let pmtAssetId = value(pmt.assetId)
735733 let pmtAmt = pmt.amount
736734 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
737735 let check = reentrantInvoke(addonContract, "ensureCanGetOneTkn", [toString(userAddress)], nil)
738736 if ((check == check))
739737 then if ((1000000000 > pmtAmt))
740738 then throw("Min pmt 10 LP")
741739 else if (if (if ((0 > slippage))
742740 then true
743741 else (0 > exchResult))
744742 then true
745743 else (0 > outAmount))
746744 then throw("Wrong params")
747745 else if ((lpId != toBase58String(pmtAssetId)))
748746 then throw("Wrong LP")
749747 else {
750748 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
751749 let estimAmAmt = r._1
752750 let estimPrAmt = r._2
753751 let amBalance = getAccBalance(amId)
754752 let prBalance = getAccBalance(prId)
755- let $t03027130728 = if ((outAssetId == amId))
753+ let $t03024330700 = if ((outAssetId == amId))
756754 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
757755 else if ((outAssetId == prId))
758756 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
759757 else throw("wrong outAssetId")
760- let amBalanceNow = $t03027130728._1
761- let prBalanceNow = $t03027130728._2
762- let virtSwapInAm = $t03027130728._3
763- let virtSwapOutPr = $t03027130728._4
764- let virtSwapInPr = $t03027130728._5
765- let virtSwapOutAm = $t03027130728._6
766- let totalGet = $t03027130728._7
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
767765 if (if ((0 > virtSwapInAm))
768766 then true
769767 else (0 > virtSwapInPr))
770768 then throw("Wrong calc")
771769 else {
772770 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
773771 let D1 = invoke(gwxCntr, "calcD", [toString(((amBalanceNow - virtSwapInAm) + virtSwapOutAm)), toString(((prBalanceNow + virtSwapOutPr) - virtSwapInPr)), A, Amult, Dconv], nil)
774772 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
775773 if ((D0vsD1 == D0vsD1))
776774 then {
777775 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
778776 if ((finalRes == finalRes))
779777 then {
780- let $t03143331537 = if ((outAssetId == amId))
778+ let $t03140531509 = if ((outAssetId == amId))
781779 then $Tuple2(toInt(finalRes._2), 0)
782780 else $Tuple2(0, toInt(finalRes._2))
783- let outAm = $t03143331537._1
784- let outPr = $t03143331537._2
781+ let outAm = $t03140531509._1
782+ let outPr = $t03140531509._2
785783 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
786784 let curPr = f1(curPrX18, scale8)
787785 let state = [ScriptTransfer(userAddress, (outAm + outPr), if ((outAssetId == "WAVES"))
788786 then unit
789787 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)]
790788 if ((state == state))
791789 then {
792790 let burn = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
793791 if ((burn == burn))
794792 then state
795793 else throw("Strict value is not equal to itself.")
796794 }
797795 else throw("Strict value is not equal to itself.")
798796 }
799797 else throw("Strict value is not equal to itself.")
800798 }
801799 else throw("Strict value is not equal to itself.")
802800 }
803801 }
804802 else throw("Strict value is not equal to itself.")
805803 }
806804
807805
808806
809807 @Callable(i)
810808 func getNoLess (noLessThenAmtAsset,noLessThenPriceAsset) = {
811809 let r = cg(i)
812810 let outAmAmt = r._1
813811 let outPrAmt = r._2
814812 let pmtAmt = r._3
815813 let pmtAssetId = r._4
816814 let state = r._5
817815 if ((noLessThenAmtAsset > outAmAmt))
818816 then throw(((("Failed: " + toString(outAmAmt)) + " < ") + toString(noLessThenAmtAsset)))
819817 else if ((noLessThenPriceAsset > outPrAmt))
820818 then throw(((("Failed: " + toString(outPrAmt)) + " < ") + toString(noLessThenPriceAsset)))
821819 else {
822820 let burnLPAssetOnFactory = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
823821 if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
824822 then state
825823 else throw("Strict value is not equal to itself.")
826824 }
827825 }
828826
829827
830828
831829 @Callable(i)
832830 func unstakeAndGet (amount) = {
833831 let checkPayments = if ((size(i.payments) != 0))
834832 then throw("No pmnts expd")
835833 else true
836834 if ((checkPayments == checkPayments))
837835 then {
838836 let cfg = gpc()
839837 let factoryCfg = gfc()
840838 let lpAssetId = fromBase58String(cfg[idxLPAsId])
841839 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
842840 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
843841 if ((unstakeInv == unstakeInv))
844842 then {
845843 let r = ego(toBase58String(i.transactionId), toBase58String(lpAssetId), amount, i.caller)
846844 let sts = parseIntValue(r._9)
847845 let state = r._10
848846 let v = if (if (igs())
849847 then true
850848 else (sts == PoolShutdown))
851849 then throw(("Blocked: " + toString(sts)))
852850 else true
853851 if ((v == v))
854852 then {
855853 let burnA = invoke(fca, "burn", [amount], [AttachedPayment(lpAssetId, amount)])
856854 if ((burnA == burnA))
857855 then state
858856 else throw("Strict value is not equal to itself.")
859857 }
860858 else throw("Strict value is not equal to itself.")
861859 }
862860 else throw("Strict value is not equal to itself.")
863861 }
864862 else throw("Strict value is not equal to itself.")
865863 }
866864
867865
868866
869867 @Callable(i)
870868 func activate (amtAsStr,prAsStr) = if ((toString(i.caller) != toString(fca)))
871869 then throw("denied")
872870 else $Tuple2([StringEntry(aa(), amtAsStr), StringEntry(pa(), prAsStr)], "success")
873871
874872
875873
876874 @Callable(i)
877875 func setS (k,v) = if ((toString(i.caller) != strf(this, ada())))
878876 then pd
879877 else [StringEntry(k, v)]
880878
881879
882880
883881 @Callable(i)
884882 func setI (k,v) = if ((toString(i.caller) != strf(this, ada())))
885883 then pd
886884 else [IntegerEntry(k, v)]
887885
888886
889887
890888 @Callable(i)
891889 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, gpc())
892890
893891
894892
895893 @Callable(i)
896894 func getAccBalanceWrapperREADONLY (assetId) = $Tuple2(nil, getAccBalance(assetId))
897895
898896
899897
900898 @Callable(i)
901899 func calcPricesWrapperREADONLY (amAmt,prAmt,lpAmt) = {
902900 let pr = calcPrices(amAmt, prAmt, lpAmt)
903901 $Tuple2(nil, [toString(pr[0]), toString(pr[1]), toString(pr[2])])
904902 }
905903
906904
907905
908906 @Callable(i)
909907 func fromX18WrapperREADONLY (val,resScaleMult) = $Tuple2(nil, f1(parseBigIntValue(val), resScaleMult))
910908
911909
912910
913911 @Callable(i)
914912 func toX18WrapperREADONLY (origVal,origScaleMult) = $Tuple2(nil, toString(t1(origVal, origScaleMult)))
915913
916914
917915
918916 @Callable(i)
919917 func calcPriceBigIntWrapperREADONLY (prAmtX18,amAmtX18) = $Tuple2(nil, toString(cpbi(parseBigIntValue(prAmtX18), parseBigIntValue(amAmtX18))))
920918
921919
922920
923921 @Callable(i)
924922 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, ""))
925923
926924
927925
928926 @Callable(i)
929927 func estimateGetOperationWrapperREADONLY (txId58,pmtAsId,pmtLpAmt,usrAddr) = {
930928 let r = ego(txId58, pmtAsId, pmtLpAmt, addressFromStringValue(usrAddr))
931929 $Tuple2(nil, $Tuple10(r._1, r._2, r._3, r._4, r._5, r._6, r._7, toString(r._8), r._9, r._10))
932930 }
933931
934932
935933 @Verifier(tx)
936934 func verify () = match tx {
937935 case order: Order =>
938936 let mtchPub = mp()
939937 let orV = moa(order)
940938 let sndrV = sigVerify(order.bodyBytes, order.proofs[0], order.senderPublicKey)
941939 let mtchV = sigVerify(order.bodyBytes, order.proofs[1], mtchPub)
942940 if (if (if (orV)
943941 then sndrV
944942 else false)
945943 then mtchV
946944 else false)
947945 then true
948946 else toe(orV, sndrV, mtchV)
949947 case _ =>
950948 let targetPublicKey = match m() {
951949 case pk: ByteVector =>
952950 pk
953951 case _: Unit =>
954952 tx.senderPublicKey
955953 case _ =>
956954 throw("Match error")
957955 }
958956 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
959957 }
960958

github/deemru/w8io/c3f4982 
104.80 ms