tx · 8fgv3p4ue3XVfBfyN7EQycHFvG1ufDCTcx2JCEicpHGx

3MzKSdTH2jFbypLsoNfrH7QgkzSbx3EYwCA:  -0.03400000 Waves

2022.06.23 11:39 [2108828] smart account 3MzKSdTH2jFbypLsoNfrH7QgkzSbx3EYwCA > SELF 0.00000000 Waves

{ "type": 13, "id": "8fgv3p4ue3XVfBfyN7EQycHFvG1ufDCTcx2JCEicpHGx", "fee": 3400000, "feeAssetId": null, "timestamp": 1655973581199, "version": 1, "sender": "3MzKSdTH2jFbypLsoNfrH7QgkzSbx3EYwCA", "senderPublicKey": "35yd3qw1gxKDxKwGAykHN9fANbXNWwseaUwbWDj24o3x", "proofs": [ "s8Y3pfJBWY97j7LUuZURbxtptW9yckokHAswKbf1SMpnBMjCJRvTTxgd5zgBULcbWnhE453dSYkBzw7HLyT77JB" ], "script": "base64:AAIFAAAAAAAAC6EIAhIECgIICBIDCgEIEgASBQoDAQEBEgQKAgEEEgcKBQEBAQEEEgMKAQESABIHCgUBAQEIARIECgIBARIDCgEBEgQKAggIEgQKAggIEgQKAggBEgASAwoBCBIFCgMBAQESBAoCCAESBAoCAQESBAoCCAgSCwoJCAEBAgECCAQEEgYKBAgIAQgiBnNjYWxlOCIMc2NhbGU4QmlnSW50IgdzY2FsZTE4Igp6ZXJvQmlnSW50IglvbmVCaWdJbnQiCnNsaXBwYWdlNEQiBUFtdWx0IgVEY29udiIDU0VQIgVFTVBUWSIKUG9vbEFjdGl2ZSIKUG9vbFB1dERpcyIOUG9vbE1hdGNoZXJEaXMiDFBvb2xTaHV0ZG93biIOaWR4UG9vbEFkZHJlc3MiCWlkeFBvb2xTdCIJaWR4TFBBc0lkIglpZHhBbUFzSWQiCWlkeFByQXNJZCILaWR4QW10QXNEY20iDWlkeFByaWNlQXNEY20iC2lkeElBbXRBc0lkIg1pZHhJUHJpY2VBc0lkIg9pZHhGYWN0U3Rha0NudHIiEGlkeEZhY3RTbGlwcENudHIiEWlkeEZhY3RHd3hSZXdDbnRyIgVkZWxheSICdDEiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiAmYxIgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCICdHMiA2FtdCIIcmVzU2NhbGUiCGN1clNjYWxlIgNhYnMiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIBdCIDcGF1IgJ1YSIEdHhJZCIDZ2F1IgJhYSICcGEiA2FtcCIDYWRhIgdsZ29wb3RjIgZjYWxsZXIiBGZjZmciBG10cGsiAnBjIgZpQW10QXMiBWlQckFzIgNtYmEiBWJBU3RyIgNhcHMiA3RvZSIDb3JWIgZzZW5kclYiBm1hdGNoViIDc3RyIgckbWF0Y2gwIgZ2YWxTdHIiBHN0cmYiBGFkZHIiA2tleSIEaW50ZiIDZmNhIgFBIgNpZ3MiAm1wIgNncGMiBWFtdEFzIgdwcmljZUFzIghpUHJpY2VBcyIDZ2ZjIhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiCnNsaXBCeVVzZXIiDHNsaXBwYWdlUmVhbCIIdHhIZWlnaHQiC3R4VGltZXN0YW1wIgxzbGlwYWdlQW1BbXQiDHNsaXBhZ2VQckFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIgdhc3NldElkIgRjcGJpIghwckFtdFgxOCIIYW1BbXRYMTgiA3ZhZCICQTEiAkEyIghzbGlwcGFnZSIEZGlmZiIEcGFzcyICdmQiAkQxIgJEMCIEc2xwZyIEZmFpbCIDcGNwIgphbUFzc2V0RGNtIgpwckFzc2V0RGNtIgVhbUFtdCIFcHJBbXQiC2FtdEFzQW10WDE4IgpwckFzQW10WDE4IgpjYWxjUHJpY2VzIgVscEFtdCIDY2ZnIghhbXRBc0RjbSIHcHJBc0RjbSIIcHJpY2VYMTgiCGxwQW10WDE4Ig1scFBySW5BbUFzWDE4Ig1scFBySW5QckFzWDE4IgNlZ28iBnR4SWQ1OCIKcG10QXNzZXRJZCIIcG10THBBbXQiC3VzZXJBZGRyZXNzIgRscElkIgRhbUlkIgRwcklkIgVhbURjbSIFcHJEY20iA3N0cyIHbHBFbWlzcyIJYW1CYWxhbmNlIgxhbUJhbGFuY2VYMTgiCXByQmFsYW5jZSIMcHJCYWxhbmNlWDE4IgtjdXJQcmljZVgxOCIIY3VyUHJpY2UiC3BtdExwQW10WDE4IgpscEVtaXNzWDE4IgtvdXRBbUFtdFgxOCILb3V0UHJBbXRYMTgiCG91dEFtQW10IghvdXRQckFtdCIFc3RhdGUiA2VwbyIHaW5BbUFtdCIGaW5BbUlkIgdpblByQW10IgZpblBySWQiBmlzRXZhbCIGZW1pdExwIgppc09uZUFzc2V0IgZwbXRBbXQiBXBtdElkIgdhbUlkU3RyIgdwcklkU3RyIglpbkFtSWRTdHIiCWluUHJJZFN0ciIGYW10RGNtIghwcmljZURjbSIEbHBFbSIPaW5BbUFzc2V0QW10WDE4Ig9pblByQXNzZXRBbXRYMTgiDHVzZXJQcmljZVgxOCIBciILc2xpcHBhZ2VYMTgiD3NsaXBwYWdlUmVhbFgxOCINbHBFbWlzc2lvblgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiINJHQwMTUyMjExNTU2NiIKd3JpdGVBbUFtdCIKd3JpdGVQckFtdCILY29tbW9uU3RhdGUiA21vYSIFb3JkZXIiB2FtdEFzSWQiBnByQXNJZCIPYWNjQW10QXNCYWxhbmNlIg5hY2NQckFzQmFsYW5jZSIKb3JBbXRBc3NldCIKb3JBbXRBc1N0ciIJb3JQckFzc2V0IglvclByQXNTdHIiCm9yZGVyUHJpY2UiDmNhc3RPcmRlclByaWNlIhFpc09yZGVyUHJpY2VWYWxpZCICY2ciAWkiA3BtdCICY3AiB2FtQXNQbXQiB3ByQXNQbXQiAW0iAXMiAnBtIgJwZCICbW0iAnBrIgFjIhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSICY20iAXAiA2hwbSIDY3BtIgRzbGlwIglhdXRvU3Rha2UiB2ZhY3RDZmciC3N0YWtpbmdDbnRyIghzbGlwQ250ciIBZSIJbHBBc3NldElkIgJlbCIGbGVnYWN5IgJzYSICc3AiCGxwVHJuc2ZyIgJzcyILYW1Bc3NldFBhcnQiC3ByQXNzZXRQYXJ0IgVvdXRMcCIHZ3d4Q250ciIHcG9vbENmZyIFYWRkb24iDWFkZG9uQ29udHJhY3QiBWNoZWNrIg0kdDAyNDgzMTI1MjExIgxhbUJhbGFuY2VOb3ciDHByQmFsYW5jZU5vdyIMdmlydFN3YXBJbkFtIg12aXJ0U3dhcE91dFByIgx2aXJ0U3dhcEluUHIiDXZpcnRTd2FwT3V0QW0iBkQwdnNEMSIGZXN0UHV0Igdlc3RpbUxQIglscENhbGNSZXMiB21heFNscGciCW91dEFtdEFtdCIBYiIKZXhjaFJlc3VsdCIHbm90VXNlZCIJb3V0QW1vdW50IgpvdXRBc3NldElkIgplc3RpbUFtQW10Igplc3RpbVByQW10Ig0kdDAzMDI0NzMwNzA0Igh0b3RhbEdldCIIZmluYWxSZXMiDSR0MDMxNDA5MzE1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", "chainId": 84, "height": 2108828, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AyHCrwrYpyWWAK8r8rpjfkgQvbJeRuAbYHzJVXJaJtto Next: FUbTwJHePSWx8YjpMNmxJ9qssU5iFoeavXFwLgKDDePM Diff:
OldNewDifferences
214214 }
215215
216216
217-func calculatePrices (amAmt,prAmt,lpAmt) = {
218- let p = calcPrices(amAmt, prAmt, lpAmt)
219-[f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)]
220- }
221-
222-
223217 func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
224218 let cfg = gpc()
225219 let lpId = cfg[idxLPAsId]
331325 else calcLpAmt
332326 let amDiff = (inAmAmt - calcAmAssetPmt)
333327 let prDiff = (inPrAmt - calcPrAssetPmt)
334- let $t01543915784 = if (if (isOneAsset)
328+ let $t01522115566 = if (if (isOneAsset)
335329 then (pmtId == amIdStr)
336330 else false)
337331 then $Tuple2(pmtAmt, 0)
340334 else false)
341335 then $Tuple2(0, pmtAmt)
342336 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
343- let writeAmAmt = $t01543915784._1
344- let writePrAmt = $t01543915784._2
337+ let writeAmAmt = $t01522115566._1
338+ let writePrAmt = $t01522115566._2
345339 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))]
346340 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
347341 }
507501
508502
509503 @Callable(i)
504+func calculatePrices (amAmt,prAmt,lpAmt) = {
505+ let p = calcPrices(amAmt, prAmt, lpAmt)
506+ $Tuple2(nil, [f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)])
507+ }
508+
509+
510+
511+@Callable(i)
510512 func put (slip,autoStake) = {
511513 let factCfg = gfc()
512514 let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
608610 else {
609611 let amBalance = getAccBalance(amId)
610612 let prBalance = getAccBalance(prId)
611- let $t02480425184 = if ((pmtAssetId == amId))
613+ let $t02483125211 = if ((pmtAssetId == amId))
612614 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
613615 else if ((pmtAssetId == prId))
614616 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
615617 else throw("wrong pmtAssetId")
616- let amBalanceNow = $t02480425184._1
617- let prBalanceNow = $t02480425184._2
618- let virtSwapInAm = $t02480425184._3
619- let virtSwapOutPr = $t02480425184._4
620- let virtSwapInPr = $t02480425184._5
621- let virtSwapOutAm = $t02480425184._6
618+ let amBalanceNow = $t02483125211._1
619+ let prBalanceNow = $t02483125211._2
620+ let virtSwapInAm = $t02483125211._3
621+ let virtSwapOutPr = $t02483125211._4
622+ let virtSwapInPr = $t02483125211._5
623+ let virtSwapOutAm = $t02483125211._6
622624 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
623625 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
624626 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
747749 let estimPrAmt = r._2
748750 let amBalance = getAccBalance(amId)
749751 let prBalance = getAccBalance(prId)
750- let $t03022030677 = if ((outAssetId == amId))
752+ let $t03024730704 = if ((outAssetId == amId))
751753 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
752754 else if ((outAssetId == prId))
753755 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
754756 else throw("wrong outAssetId")
755- let amBalanceNow = $t03022030677._1
756- let prBalanceNow = $t03022030677._2
757- let virtSwapInAm = $t03022030677._3
758- let virtSwapOutPr = $t03022030677._4
759- let virtSwapInPr = $t03022030677._5
760- let virtSwapOutAm = $t03022030677._6
761- let totalGet = $t03022030677._7
757+ let amBalanceNow = $t03024730704._1
758+ let prBalanceNow = $t03024730704._2
759+ let virtSwapInAm = $t03024730704._3
760+ let virtSwapOutPr = $t03024730704._4
761+ let virtSwapInPr = $t03024730704._5
762+ let virtSwapOutAm = $t03024730704._6
763+ let totalGet = $t03024730704._7
762764 if (if ((0 > virtSwapInAm))
763765 then true
764766 else (0 > virtSwapInPr))
772774 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
773775 if ((finalRes == finalRes))
774776 then {
775- let $t03138231486 = if ((outAssetId == amId))
777+ let $t03140931513 = if ((outAssetId == amId))
776778 then $Tuple2(toInt(finalRes._2), 0)
777779 else $Tuple2(0, toInt(finalRes._2))
778- let outAm = $t03138231486._1
779- let outPr = $t03138231486._2
780+ let outAm = $t03140931513._1
781+ let outPr = $t03140931513._2
780782 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
781783 let curPr = f1(curPrX18, scale8)
782784 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 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
217-func calculatePrices (amAmt,prAmt,lpAmt) = {
218- let p = calcPrices(amAmt, prAmt, lpAmt)
219-[f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)]
220- }
221-
222-
223217 func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
224218 let cfg = gpc()
225219 let lpId = cfg[idxLPAsId]
226220 let amId = cfg[idxAmAsId]
227221 let prId = cfg[idxPrAsId]
228222 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
229223 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
230224 let sts = cfg[idxPoolSt]
231225 let lpEmiss = valueOrErrorMessage(assetInfo(fromBase58String(lpId)), "Wrong LP id").quantity
232226 if ((lpId != pmtAssetId))
233227 then throw("Wrong pmt asset")
234228 else {
235229 let amBalance = getAccBalance(amId)
236230 let amBalanceX18 = t1(amBalance, amDcm)
237231 let prBalance = getAccBalance(prId)
238232 let prBalanceX18 = t1(prBalance, prDcm)
239233 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
240234 let curPrice = f1(curPriceX18, scale8)
241235 let pmtLpAmtX18 = t1(pmtLpAmt, scale8)
242236 let lpEmissX18 = t1(lpEmiss, scale8)
243237 let outAmAmtX18 = fraction(amBalanceX18, pmtLpAmtX18, lpEmissX18)
244238 let outPrAmtX18 = fraction(prBalanceX18, pmtLpAmtX18, lpEmissX18)
245239 let outAmAmt = f1(outAmAmtX18, amDcm)
246240 let outPrAmt = f1(outPrAmtX18, prDcm)
247241 let state = if ((txId58 == ""))
248242 then nil
249243 else [ScriptTransfer(userAddress, outAmAmt, if ((amId == "WAVES"))
250244 then unit
251245 else fromBase58String(amId)), ScriptTransfer(userAddress, outPrAmt, if ((prId == "WAVES"))
252246 then unit
253247 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)]
254248 $Tuple10(outAmAmt, outPrAmt, amId, prId, amBalance, prBalance, lpEmiss, curPriceX18, sts, state)
255249 }
256250 }
257251
258252
259253 func epo (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,userAddress,isEval,emitLp,isOneAsset,pmtAmt,pmtId) = {
260254 let cfg = gpc()
261255 let lpId = fromBase58String(cfg[idxLPAsId])
262256 let amIdStr = cfg[idxAmAsId]
263257 let prIdStr = cfg[idxPrAsId]
264258 let inAmIdStr = cfg[idxIAmtAsId]
265259 let inPrIdStr = cfg[idxIPriceAsId]
266260 let amtDcm = parseIntValue(cfg[idxAmtAsDcm])
267261 let priceDcm = parseIntValue(cfg[idxPriceAsDcm])
268262 let sts = cfg[idxPoolSt]
269263 let lpEm = valueOrErrorMessage(assetInfo(lpId), "Wr lp as").quantity
270264 let amBalance = if (isEval)
271265 then getAccBalance(amIdStr)
272266 else if (if (isOneAsset)
273267 then (pmtId == amIdStr)
274268 else false)
275269 then (getAccBalance(amIdStr) - pmtAmt)
276270 else if (isOneAsset)
277271 then getAccBalance(amIdStr)
278272 else (getAccBalance(amIdStr) - inAmAmt)
279273 let prBalance = if (isEval)
280274 then getAccBalance(prIdStr)
281275 else if (if (isOneAsset)
282276 then (pmtId == prIdStr)
283277 else false)
284278 then (getAccBalance(prIdStr) - pmtAmt)
285279 else if (isOneAsset)
286280 then getAccBalance(prIdStr)
287281 else (getAccBalance(prIdStr) - inPrAmt)
288282 let inAmAssetAmtX18 = t1(inAmAmt, amtDcm)
289283 let inPrAssetAmtX18 = t1(inPrAmt, priceDcm)
290284 let userPriceX18 = cpbi(inPrAssetAmtX18, inAmAssetAmtX18)
291285 let amBalanceX18 = t1(amBalance, amtDcm)
292286 let prBalanceX18 = t1(prBalance, priceDcm)
293287 let r = if ((lpEm == 0))
294288 then {
295289 let curPriceX18 = zeroBigInt
296290 let slippageX18 = zeroBigInt
297291 let lpAmtX18 = pow((inAmAssetAmtX18 * inPrAssetAmtX18), 0, toBigInt(5), 1, 0, DOWN)
298292 $Tuple5(f1(lpAmtX18, scale8), f1(inAmAssetAmtX18, amtDcm), f1(inPrAssetAmtX18, priceDcm), cpbi((prBalanceX18 + inPrAssetAmtX18), (amBalanceX18 + inAmAssetAmtX18)), slippageX18)
299293 }
300294 else {
301295 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
302296 let slippageRealX18 = fraction(abs((curPriceX18 - userPriceX18)), scale18, curPriceX18)
303297 let slippageX18 = t1(slippage, scale8)
304298 if (if ((curPriceX18 != zeroBigInt))
305299 then (slippageRealX18 > slippageX18)
306300 else false)
307301 then throw(((("Price slippage " + toString(slippageRealX18)) + " > ") + toString(slippageX18)))
308302 else {
309303 let lpEmissionX18 = t1(lpEm, scale8)
310304 let prViaAmX18 = fraction(inAmAssetAmtX18, curPriceX18, scale18)
311305 let amViaPrX18 = fraction(inPrAssetAmtX18, scale18, curPriceX18)
312306 let expectedAmts = if ((prViaAmX18 > inPrAssetAmtX18))
313307 then $Tuple2(amViaPrX18, inPrAssetAmtX18)
314308 else $Tuple2(inAmAssetAmtX18, prViaAmX18)
315309 let expAmtAssetAmtX18 = expectedAmts._1
316310 let expPriceAssetAmtX18 = expectedAmts._2
317311 let lpAmtX18 = fraction(lpEmissionX18, expPriceAssetAmtX18, prBalanceX18)
318312 $Tuple5(f1(lpAmtX18, scale8), f1(expAmtAssetAmtX18, amtDcm), f1(expPriceAssetAmtX18, priceDcm), curPriceX18, slippageX18)
319313 }
320314 }
321315 let calcLpAmt = r._1
322316 let calcAmAssetPmt = r._2
323317 let calcPrAssetPmt = r._3
324318 let curPrice = f1(r._4, scale8)
325319 let slippageCalc = f1(r._5, scale8)
326320 if ((0 >= calcLpAmt))
327321 then throw("LP <= 0")
328322 else {
329323 let emitLpAmt = if (!(emitLp))
330324 then 0
331325 else calcLpAmt
332326 let amDiff = (inAmAmt - calcAmAssetPmt)
333327 let prDiff = (inPrAmt - calcPrAssetPmt)
334- let $t01543915784 = if (if (isOneAsset)
328+ let $t01522115566 = if (if (isOneAsset)
335329 then (pmtId == amIdStr)
336330 else false)
337331 then $Tuple2(pmtAmt, 0)
338332 else if (if (isOneAsset)
339333 then (pmtId == prIdStr)
340334 else false)
341335 then $Tuple2(0, pmtAmt)
342336 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
343- let writeAmAmt = $t01543915784._1
344- let writePrAmt = $t01543915784._2
337+ let writeAmAmt = $t01522115566._1
338+ let writePrAmt = $t01522115566._2
345339 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))]
346340 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
347341 }
348342 }
349343
350344
351345 func moa (order) = {
352346 let cfg = gpc()
353347 let amtAsId = cfg[idxAmAsId]
354348 let prAsId = cfg[idxPrAsId]
355349 let sts = parseIntValue(cfg[idxPoolSt])
356350 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
357351 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
358352 let accAmtAsBalance = getAccBalance(amtAsId)
359353 let accPrAsBalance = getAccBalance(prAsId)
360354 let curPriceX18 = if ((order.orderType == Buy))
361355 then pcp(amtAsDcm, prAsDcm, (accAmtAsBalance + order.amount), accPrAsBalance)
362356 else pcp(amtAsDcm, prAsDcm, (accAmtAsBalance - order.amount), accPrAsBalance)
363357 let curPrice = f1(curPriceX18, scale8)
364358 if (if (if (igs())
365359 then true
366360 else (sts == PoolMatcherDis))
367361 then true
368362 else (sts == PoolShutdown))
369363 then throw("Admin blocked")
370364 else {
371365 let orAmtAsset = order.assetPair.amountAsset
372366 let orAmtAsStr = if ((orAmtAsset == unit))
373367 then "WAVES"
374368 else toBase58String(value(orAmtAsset))
375369 let orPrAsset = order.assetPair.priceAsset
376370 let orPrAsStr = if ((orPrAsset == unit))
377371 then "WAVES"
378372 else toBase58String(value(orPrAsset))
379373 if (if ((orAmtAsStr != amtAsId))
380374 then true
381375 else (orPrAsStr != prAsId))
382376 then throw("Wr assets")
383377 else {
384378 let orderPrice = order.price
385379 let priceDcm = fraction(scale8, prAsDcm, amtAsDcm)
386380 let castOrderPrice = ts(orderPrice, scale8, priceDcm)
387381 let isOrderPriceValid = if ((order.orderType == Buy))
388382 then (curPrice >= castOrderPrice)
389383 else (castOrderPrice >= curPrice)
390384 true
391385 }
392386 }
393387 }
394388
395389
396390 func cg (i) = if ((size(i.payments) != 1))
397391 then throw("1 pmnt exp")
398392 else {
399393 let pmt = value(i.payments[0])
400394 let pmtAssetId = value(pmt.assetId)
401395 let pmtAmt = pmt.amount
402396 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
403397 let outAmAmt = r._1
404398 let outPrAmt = r._2
405399 let sts = parseIntValue(r._9)
406400 let state = r._10
407401 if (if (igs())
408402 then true
409403 else (sts == PoolShutdown))
410404 then throw(("Admin blocked: " + toString(sts)))
411405 else $Tuple5(outAmAmt, outPrAmt, pmtAmt, pmtAssetId, state)
412406 }
413407
414408
415409 func cp (caller,txId,amAsPmt,prAsPmt,slippage,emitLp,isOneAsset,pmtAmt,pmtId) = {
416410 let r = epo(txId, slippage, value(amAsPmt).amount, value(amAsPmt).assetId, value(prAsPmt).amount, value(prAsPmt).assetId, caller, false, emitLp, isOneAsset, pmtAmt, pmtId)
417411 let sts = parseIntValue(r._8)
418412 if (if (if (igs())
419413 then true
420414 else (sts == PoolPutDis))
421415 then true
422416 else (sts == PoolShutdown))
423417 then throw(("Blocked:" + toString(sts)))
424418 else r
425419 }
426420
427421
428422 func m () = match getString(mpk()) {
429423 case s: String =>
430424 fromBase58String(s)
431425 case _: Unit =>
432426 unit
433427 case _ =>
434428 throw("Match error")
435429 }
436430
437431
438432 func pm () = match getString(pmpk()) {
439433 case s: String =>
440434 fromBase58String(s)
441435 case _: Unit =>
442436 unit
443437 case _ =>
444438 throw("Match error")
445439 }
446440
447441
448442 let pd = throw("Permission denied")
449443
450444 func mm (i) = match m() {
451445 case pk: ByteVector =>
452446 if ((i.callerPublicKey == pk))
453447 then true
454448 else pd
455449 case _: Unit =>
456450 if ((i.caller == this))
457451 then true
458452 else pd
459453 case _ =>
460454 throw("Match error")
461455 }
462456
463457
464458 @Callable(i)
465459 func constructor (fc,ada) = {
466460 let c = mm(i)
467461 if ((c == c))
468462 then [StringEntry(fc(), fc), StringEntry(ada(), ada)]
469463 else throw("Strict value is not equal to itself.")
470464 }
471465
472466
473467
474468 @Callable(i)
475469 func setManager (pendingManagerPublicKey) = {
476470 let c = mm(i)
477471 if ((c == c))
478472 then {
479473 let cm = fromBase58String(pendingManagerPublicKey)
480474 if ((cm == cm))
481475 then [StringEntry(pmpk(), pendingManagerPublicKey)]
482476 else throw("Strict value is not equal to itself.")
483477 }
484478 else throw("Strict value is not equal to itself.")
485479 }
486480
487481
488482
489483 @Callable(i)
490484 func confirmManager () = {
491485 let p = pm()
492486 let hpm = if (isDefined(p))
493487 then true
494488 else throw("No pending manager")
495489 if ((hpm == hpm))
496490 then {
497491 let cpm = if ((i.callerPublicKey == value(p)))
498492 then true
499493 else throw("You are not pending manager")
500494 if ((cpm == cpm))
501495 then [StringEntry(mpk(), toBase58String(value(p))), DeleteEntry(pmpk())]
502496 else throw("Strict value is not equal to itself.")
503497 }
504498 else throw("Strict value is not equal to itself.")
505499 }
506500
507501
508502
509503 @Callable(i)
504+func calculatePrices (amAmt,prAmt,lpAmt) = {
505+ let p = calcPrices(amAmt, prAmt, lpAmt)
506+ $Tuple2(nil, [f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)])
507+ }
508+
509+
510+
511+@Callable(i)
510512 func put (slip,autoStake) = {
511513 let factCfg = gfc()
512514 let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
513515 let slipCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactSlippCntr]), "Wr sl addr")
514516 if ((0 > slip))
515517 then throw("Wrong slippage")
516518 else if ((size(i.payments) != 2))
517519 then throw("2 pmnts expd")
518520 else {
519521 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, "")
520522 let emitLpAmt = e._2
521523 let lpAssetId = e._7
522524 let state = e._9
523525 let amDiff = e._10
524526 let prDiff = e._11
525527 let amId = e._12
526528 let prId = e._13
527529 let r = invoke(fca, "emit", [emitLpAmt], nil)
528530 if ((r == r))
529531 then {
530532 let el = match r {
531533 case legacy: Address =>
532534 invoke(legacy, "emit", [emitLpAmt], nil)
533535 case _ =>
534536 unit
535537 }
536538 if ((el == el))
537539 then {
538540 let sa = if ((amDiff > 0))
539541 then invoke(slipCntr, "put", nil, [AttachedPayment(amId, amDiff)])
540542 else nil
541543 if ((sa == sa))
542544 then {
543545 let sp = if ((prDiff > 0))
544546 then invoke(slipCntr, "put", nil, [AttachedPayment(prId, prDiff)])
545547 else nil
546548 if ((sp == sp))
547549 then {
548550 let lpTrnsfr = if (autoStake)
549551 then {
550552 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
551553 if ((ss == ss))
552554 then nil
553555 else throw("Strict value is not equal to itself.")
554556 }
555557 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
556558 (state ++ lpTrnsfr)
557559 }
558560 else throw("Strict value is not equal to itself.")
559561 }
560562 else throw("Strict value is not equal to itself.")
561563 }
562564 else throw("Strict value is not equal to itself.")
563565 }
564566 else throw("Strict value is not equal to itself.")
565567 }
566568 }
567569
568570
569571
570572 @Callable(i)
571573 func putOneTkn (amAssetPart,prAssetPart,outLp,slippage,autoStake) = {
572574 let cfg = gfc()
573575 let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
574576 let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
575577 let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
576578 let poolCfg = gpc()
577579 let amId = poolCfg[idxAmAsId]
578580 let prId = poolCfg[idxPrAsId]
579581 let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
580582 let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
581583 let addon = valueOrElse(getString(this, ada()), "")
582584 let userAddress = if ((addon == toString(i.caller)))
583585 then i.originCaller
584586 else i.caller
585587 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
586588 let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
587589 if ((check == check))
588590 then if (if (if (if ((0 >= slippage))
589591 then true
590592 else (0 >= amAssetPart))
591593 then true
592594 else (0 >= prAssetPart))
593595 then true
594596 else (0 >= outLp))
595597 then throw("Wrong params")
596598 else if ((size(i.payments) != 1))
597599 then throw("1 pmnt expd")
598600 else {
599601 let pmt = value(i.payments[0])
600602 let pmtAssetId = toBase58String(value(pmt.assetId))
601603 let pmtAmt = pmt.amount
602604 if (if (if ((amAssetPart > pmtAmt))
603605 then true
604606 else (prAssetPart > pmtAmt))
605607 then true
606608 else (10000000 > pmtAmt))
607609 then throw("Wrong pmt amt")
608610 else {
609611 let amBalance = getAccBalance(amId)
610612 let prBalance = getAccBalance(prId)
611- let $t02480425184 = if ((pmtAssetId == amId))
613+ let $t02483125211 = if ((pmtAssetId == amId))
612614 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
613615 else if ((pmtAssetId == prId))
614616 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
615617 else throw("wrong pmtAssetId")
616- let amBalanceNow = $t02480425184._1
617- let prBalanceNow = $t02480425184._2
618- let virtSwapInAm = $t02480425184._3
619- let virtSwapOutPr = $t02480425184._4
620- let virtSwapInPr = $t02480425184._5
621- let virtSwapOutAm = $t02480425184._6
618+ let amBalanceNow = $t02483125211._1
619+ let prBalanceNow = $t02483125211._2
620+ let virtSwapInAm = $t02483125211._3
621+ let virtSwapOutPr = $t02483125211._4
622+ let virtSwapInPr = $t02483125211._5
623+ let virtSwapOutAm = $t02483125211._6
622624 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
623625 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
624626 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
625627 if ((D0vsD1 == D0vsD1))
626628 then {
627629 let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
628630 let estimLP = estPut._2
629631 let lpAssetId = estPut._7
630632 let state = estPut._9
631633 let amDiff = estPut._10
632634 let prDiff = estPut._11
633635 let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
634636 let emitLpAmt = toInt(lpCalcRes._2)
635637 let e = invoke(fca, "emit", [emitLpAmt], nil)
636638 if ((e == e))
637639 then {
638640 let el = match e {
639641 case legacy: Address =>
640642 invoke(legacy, "emit", [emitLpAmt], nil)
641643 case _ =>
642644 unit
643645 }
644646 if ((el == el))
645647 then {
646648 let sa = if ((amDiff > 0))
647649 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
648650 else nil
649651 if ((sa == sa))
650652 then {
651653 let sp = if ((prDiff > 0))
652654 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
653655 else nil
654656 if ((sp == sp))
655657 then {
656658 let lpTrnsfr = if (autoStake)
657659 then {
658660 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
659661 if ((ss == ss))
660662 then nil
661663 else throw("Strict value is not equal to itself.")
662664 }
663665 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
664666 (state ++ lpTrnsfr)
665667 }
666668 else throw("Strict value is not equal to itself.")
667669 }
668670 else throw("Strict value is not equal to itself.")
669671 }
670672 else throw("Strict value is not equal to itself.")
671673 }
672674 else throw("Strict value is not equal to itself.")
673675 }
674676 else throw("Strict value is not equal to itself.")
675677 }
676678 }
677679 else throw("Strict value is not equal to itself.")
678680 }
679681
680682
681683
682684 @Callable(i)
683685 func putForFree (maxSlpg) = if ((0 > maxSlpg))
684686 then throw("Wrong slpg")
685687 else if ((size(i.payments) != 2))
686688 then throw("2 pmnts expd")
687689 else {
688690 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, "")
689691 estPut._9
690692 }
691693
692694
693695
694696 @Callable(i)
695697 func get () = {
696698 let r = cg(i)
697699 let outAmtAmt = r._1
698700 let outPrAmt = r._2
699701 let pmtAmt = r._3
700702 let pmtAssetId = r._4
701703 let state = r._5
702704 let b = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
703705 if ((b == b))
704706 then state
705707 else throw("Strict value is not equal to itself.")
706708 }
707709
708710
709711
710712 @Callable(i)
711713 func getOneTkn (exchResult,notUsed,outAmount,outAssetId,slippage) = if ((size(i.payments) != 1))
712714 then throw("1 pmnt expd")
713715 else {
714716 let cfg = gpc()
715717 let lpId = cfg[idxLPAsId]
716718 let amId = cfg[idxAmAsId]
717719 let prId = cfg[idxPrAsId]
718720 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
719721 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
720722 let sts = cfg[idxPoolSt]
721723 let factCfg = gfc()
722724 let gwxCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactGwxRewCntr]), "Wr sl addr")
723725 let pmt = value(i.payments[0])
724726 let addon = valueOrElse(getString(this, ada()), "")
725727 let userAddress = if ((addon == toString(i.caller)))
726728 then i.originCaller
727729 else i.caller
728730 let txId58 = toBase58String(i.transactionId)
729731 let pmtAssetId = value(pmt.assetId)
730732 let pmtAmt = pmt.amount
731733 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
732734 let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
733735 if ((check == check))
734736 then if ((1000000000 > pmtAmt))
735737 then throw("Min pmt 10 LP")
736738 else if (if (if ((0 > slippage))
737739 then true
738740 else (0 > exchResult))
739741 then true
740742 else (0 > outAmount))
741743 then throw("Wrong params")
742744 else if ((lpId != toBase58String(pmtAssetId)))
743745 then throw("Wrong LP")
744746 else {
745747 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
746748 let estimAmAmt = r._1
747749 let estimPrAmt = r._2
748750 let amBalance = getAccBalance(amId)
749751 let prBalance = getAccBalance(prId)
750- let $t03022030677 = if ((outAssetId == amId))
752+ let $t03024730704 = if ((outAssetId == amId))
751753 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
752754 else if ((outAssetId == prId))
753755 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
754756 else throw("wrong outAssetId")
755- let amBalanceNow = $t03022030677._1
756- let prBalanceNow = $t03022030677._2
757- let virtSwapInAm = $t03022030677._3
758- let virtSwapOutPr = $t03022030677._4
759- let virtSwapInPr = $t03022030677._5
760- let virtSwapOutAm = $t03022030677._6
761- let totalGet = $t03022030677._7
757+ let amBalanceNow = $t03024730704._1
758+ let prBalanceNow = $t03024730704._2
759+ let virtSwapInAm = $t03024730704._3
760+ let virtSwapOutPr = $t03024730704._4
761+ let virtSwapInPr = $t03024730704._5
762+ let virtSwapOutAm = $t03024730704._6
763+ let totalGet = $t03024730704._7
762764 if (if ((0 > virtSwapInAm))
763765 then true
764766 else (0 > virtSwapInPr))
765767 then throw("Wrong calc")
766768 else {
767769 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
768770 let D1 = invoke(gwxCntr, "calcD", [toString(((amBalanceNow - virtSwapInAm) + virtSwapOutAm)), toString(((prBalanceNow + virtSwapOutPr) - virtSwapInPr)), A, Amult, Dconv], nil)
769771 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
770772 if ((D0vsD1 == D0vsD1))
771773 then {
772774 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
773775 if ((finalRes == finalRes))
774776 then {
775- let $t03138231486 = if ((outAssetId == amId))
777+ let $t03140931513 = if ((outAssetId == amId))
776778 then $Tuple2(toInt(finalRes._2), 0)
777779 else $Tuple2(0, toInt(finalRes._2))
778- let outAm = $t03138231486._1
779- let outPr = $t03138231486._2
780+ let outAm = $t03140931513._1
781+ let outPr = $t03140931513._2
780782 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
781783 let curPr = f1(curPrX18, scale8)
782784 let state = [ScriptTransfer(userAddress, (outAm + outPr), if ((outAssetId == "WAVES"))
783785 then unit
784786 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)]
785787 if ((state == state))
786788 then {
787789 let burn = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
788790 if ((burn == burn))
789791 then state
790792 else throw("Strict value is not equal to itself.")
791793 }
792794 else throw("Strict value is not equal to itself.")
793795 }
794796 else throw("Strict value is not equal to itself.")
795797 }
796798 else throw("Strict value is not equal to itself.")
797799 }
798800 }
799801 else throw("Strict value is not equal to itself.")
800802 }
801803
802804
803805
804806 @Callable(i)
805807 func getNoLess (noLessThenAmtAsset,noLessThenPriceAsset) = {
806808 let r = cg(i)
807809 let outAmAmt = r._1
808810 let outPrAmt = r._2
809811 let pmtAmt = r._3
810812 let pmtAssetId = r._4
811813 let state = r._5
812814 if ((noLessThenAmtAsset > outAmAmt))
813815 then throw(((("Failed: " + toString(outAmAmt)) + " < ") + toString(noLessThenAmtAsset)))
814816 else if ((noLessThenPriceAsset > outPrAmt))
815817 then throw(((("Failed: " + toString(outPrAmt)) + " < ") + toString(noLessThenPriceAsset)))
816818 else {
817819 let burnLPAssetOnFactory = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
818820 if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
819821 then state
820822 else throw("Strict value is not equal to itself.")
821823 }
822824 }
823825
824826
825827
826828 @Callable(i)
827829 func unstakeAndGet (amount) = {
828830 let checkPayments = if ((size(i.payments) != 0))
829831 then throw("No pmnts expd")
830832 else true
831833 if ((checkPayments == checkPayments))
832834 then {
833835 let cfg = gpc()
834836 let factoryCfg = gfc()
835837 let lpAssetId = fromBase58String(cfg[idxLPAsId])
836838 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
837839 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
838840 if ((unstakeInv == unstakeInv))
839841 then {
840842 let r = ego(toBase58String(i.transactionId), toBase58String(lpAssetId), amount, i.caller)
841843 let sts = parseIntValue(r._9)
842844 let state = r._10
843845 let v = if (if (igs())
844846 then true
845847 else (sts == PoolShutdown))
846848 then throw(("Blocked: " + toString(sts)))
847849 else true
848850 if ((v == v))
849851 then {
850852 let burnA = invoke(fca, "burn", [amount], [AttachedPayment(lpAssetId, amount)])
851853 if ((burnA == burnA))
852854 then state
853855 else throw("Strict value is not equal to itself.")
854856 }
855857 else throw("Strict value is not equal to itself.")
856858 }
857859 else throw("Strict value is not equal to itself.")
858860 }
859861 else throw("Strict value is not equal to itself.")
860862 }
861863
862864
863865
864866 @Callable(i)
865867 func activate (amtAsStr,prAsStr) = if ((toString(i.caller) != toString(fca)))
866868 then throw("denied")
867869 else $Tuple2([StringEntry(aa(), amtAsStr), StringEntry(pa(), prAsStr)], "success")
868870
869871
870872
871873 @Callable(i)
872874 func setS (k,v) = if ((toString(i.caller) != strf(this, ada())))
873875 then pd
874876 else [StringEntry(k, v)]
875877
876878
877879
878880 @Callable(i)
879881 func setI (k,v) = if ((toString(i.caller) != strf(this, ada())))
880882 then pd
881883 else [IntegerEntry(k, v)]
882884
883885
884886
885887 @Callable(i)
886888 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, gpc())
887889
888890
889891
890892 @Callable(i)
891893 func getAccBalanceWrapperREADONLY (assetId) = $Tuple2(nil, getAccBalance(assetId))
892894
893895
894896
895897 @Callable(i)
896898 func calcPricesWrapperREADONLY (amAmt,prAmt,lpAmt) = {
897899 let pr = calcPrices(amAmt, prAmt, lpAmt)
898900 $Tuple2(nil, [toString(pr[0]), toString(pr[1]), toString(pr[2])])
899901 }
900902
901903
902904
903905 @Callable(i)
904906 func fromX18WrapperREADONLY (val,resScaleMult) = $Tuple2(nil, f1(parseBigIntValue(val), resScaleMult))
905907
906908
907909
908910 @Callable(i)
909911 func toX18WrapperREADONLY (origVal,origScaleMult) = $Tuple2(nil, toString(t1(origVal, origScaleMult)))
910912
911913
912914
913915 @Callable(i)
914916 func calcPriceBigIntWrapperREADONLY (prAmtX18,amAmtX18) = $Tuple2(nil, toString(cpbi(parseBigIntValue(prAmtX18), parseBigIntValue(amAmtX18))))
915917
916918
917919
918920 @Callable(i)
919921 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, ""))
920922
921923
922924
923925 @Callable(i)
924926 func estimateGetOperationWrapperREADONLY (txId58,pmtAsId,pmtLpAmt,usrAddr) = {
925927 let r = ego(txId58, pmtAsId, pmtLpAmt, addressFromStringValue(usrAddr))
926928 $Tuple2(nil, $Tuple10(r._1, r._2, r._3, r._4, r._5, r._6, r._7, toString(r._8), r._9, r._10))
927929 }
928930
929931
930932 @Verifier(tx)
931933 func verify () = match tx {
932934 case order: Order =>
933935 let mtchPub = mp()
934936 let orV = moa(order)
935937 let sndrV = sigVerify(order.bodyBytes, order.proofs[0], order.senderPublicKey)
936938 let mtchV = sigVerify(order.bodyBytes, order.proofs[1], mtchPub)
937939 if (if (if (orV)
938940 then sndrV
939941 else false)
940942 then mtchV
941943 else false)
942944 then true
943945 else toe(orV, sndrV, mtchV)
944946 case _ =>
945947 let targetPublicKey = match m() {
946948 case pk: ByteVector =>
947949 pk
948950 case _: Unit =>
949951 tx.senderPublicKey
950952 case _ =>
951953 throw("Match error")
952954 }
953955 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
954956 }
955957

github/deemru/w8io/169f3d6 
121.13 ms