tx · AhpdeX63nZcQ9oxa2LhdeoFr9dcJChihb52csXkVGrwN

3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT:  -0.03400000 Waves

2022.06.23 13:10 [2108921] smart account 3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT > SELF 0.00000000 Waves

{ "type": 13, "id": "AhpdeX63nZcQ9oxa2LhdeoFr9dcJChihb52csXkVGrwN", "fee": 3400000, "feeAssetId": null, "timestamp": 1655979068597, "version": 1, "sender": "3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT", "senderPublicKey": "D1BL65meykxFZTCuq7jq9HSGLLnWvQamQPUNrguW5w39", "proofs": [ "D3C5mwLpPogRB3Jik8JAab5H7MNatXQhm6AJwSdNRvoDdrHniZwbMoho2bZ4erznzEuBPd9f2stau8Cc5DF92SR" ], "script": "base64:AAIFAAAAAAAAC6UIAhIDCgEIEgMKAQgSABIFCgMBAQESBAoCAQQSBwoFAQEBAQQSAwoBARIAEgcKBQEBAQgBEgQKAgEBEgMKAQESBAoCCAgSBAoCCAgSBAoCCAESABIDCgEIEgUKAwEBARIECgIIARIECgIBARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCCIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiCW9uZUJpZ0ludCIKc2xpcHBhZ2U0RCIFQW11bHQiBURjb252IgNTRVAiBUVNUFRZIgpQb29sQWN0aXZlIgpQb29sUHV0RGlzIg5Qb29sTWF0Y2hlckRpcyIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyIJaWR4UG9vbFN0IglpZHhMUEFzSWQiCWlkeEFtQXNJZCIJaWR4UHJBc0lkIgtpZHhBbXRBc0RjbSINaWR4UHJpY2VBc0RjbSILaWR4SUFtdEFzSWQiDWlkeElQcmljZUFzSWQiD2lkeEZhY3RTdGFrQ250ciIQaWR4RmFjdFNsaXBwQ250ciIRaWR4RmFjdEd3eFJld0NudHIiBWRlbGF5IgJ0MSIHb3JpZ1ZhbCINb3JpZ1NjYWxlTXVsdCICZjEiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0IgJ0cyIDYW10IghyZXNTY2FsZSIIY3VyU2NhbGUiA2FicyICZmMiA21wayIEcG1wayICcGwiAnBoIgFoIgF0IgNwYXUiAnVhIgR0eElkIgNnYXUiAmFhIgJwYSIDYW1wIgNhZGEiBWxnb3RjIgZjYWxsZXIiBWxzb3RjIgRmY2ZnIgRtdHBrIgJwYyIGaUFtdEFzIgVpUHJBcyIDbWJhIgViQVN0ciIDYXBzIgN0b2UiA29yViIGc2VuZHJWIgZtYXRjaFYiA3N0ciIHJG1hdGNoMCIGdmFsU3RyIgRzdHJmIgRhZGRyIgNrZXkiBGludGYiA2ZjYSIBQSIDaWdzIgJtcCIDZ3BjIgVhbXRBcyIHcHJpY2VBcyIIaVByaWNlQXMiA2dmYyIRZGF0YVB1dEFjdGlvbkluZm8iDWluQW10QXNzZXRBbXQiD2luUHJpY2VBc3NldEFtdCIIb3V0THBBbXQiBXByaWNlIgpzbGlwQnlVc2VyIgxzbGlwcGFnZVJlYWwiCHR4SGVpZ2h0Igt0eFRpbWVzdGFtcCIMc2xpcGFnZUFtQW10IgxzbGlwYWdlUHJBbXQiEWRhdGFHZXRBY3Rpb25JbmZvIg5vdXRBbXRBc3NldEFtdCIQb3V0UHJpY2VBc3NldEFtdCIHaW5McEFtdCINZ2V0QWNjQmFsYW5jZSIHYXNzZXRJZCIEY3BiaSIIcHJBbXRYMTgiCGFtQW10WDE4IgN2YWQiAkExIgJBMiIIc2xpcHBhZ2UiBGRpZmYiBHBhc3MiAnZkIgJEMSICRDAiBHNscGciBGZhaWwiA3BjcCIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10IgthbXRBc0FtdFgxOCIKcHJBc0FtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiA2NmZyIIYW10QXNEY20iB3ByQXNEY20iCHByaWNlWDE4IghscEFtdFgxOCINbHBQckluQW1Bc1gxOCINbHBQckluUHJBc1gxOCIDZWdvIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10Igt1c2VyQWRkcmVzcyIEbHBJZCIEYW1JZCIEcHJJZCIFYW1EY20iBXByRGNtIgNzdHMiB2xwRW1pc3MiCWFtQmFsYW5jZSIMYW1CYWxhbmNlWDE4IglwckJhbGFuY2UiDHByQmFsYW5jZVgxOCILY3VyUHJpY2VYMTgiCGN1clByaWNlIgtwbXRMcEFtdFgxOCIKbHBFbWlzc1gxOCILb3V0QW1BbXRYMTgiC291dFByQW10WDE4IghvdXRBbUFtdCIIb3V0UHJBbXQiBXN0YXRlIgNlcG8iB2luQW1BbXQiBmluQW1JZCIHaW5QckFtdCIGaW5QcklkIgZpc0V2YWwiBmVtaXRMcCIKaXNPbmVBc3NldCIGcG10QW10IgVwbXRJZCIHYW1JZFN0ciIHcHJJZFN0ciIJaW5BbUlkU3RyIglpblBySWRTdHIiBmFtdERjbSIIcHJpY2VEY20iBGxwRW0iD2luQW1Bc3NldEFtdFgxOCIPaW5QckFzc2V0QW10WDE4Igx1c2VyUHJpY2VYMTgiAXIiC3NsaXBwYWdlWDE4Ig9zbGlwcGFnZVJlYWxYMTgiDWxwRW1pc3Npb25YMTgiCnByVmlhQW1YMTgiCmFtVmlhUHJYMTgiDGV4cGVjdGVkQW10cyIRZXhwQW10QXNzZXRBbXRYMTgiE2V4cFByaWNlQXNzZXRBbXRYMTgiCWNhbGNMcEFtdCIOY2FsY0FtQXNzZXRQbXQiDmNhbGNQckFzc2V0UG10IgxzbGlwcGFnZUNhbGMiCWVtaXRMcEFtdCIGYW1EaWZmIgZwckRpZmYiDSR0MDE1MzEzMTU2NTgiCndyaXRlQW1BbXQiCndyaXRlUHJBbXQiC2NvbW1vblN0YXRlIgNtb2EiBW9yZGVyIgdhbXRBc0lkIgZwckFzSWQiD2FjY0FtdEFzQmFsYW5jZSIOYWNjUHJBc0JhbGFuY2UiCm9yQW10QXNzZXQiCm9yQW10QXNTdHIiCW9yUHJBc3NldCIJb3JQckFzU3RyIgpvcmRlclByaWNlIg5jYXN0T3JkZXJQcmljZSIRaXNPcmRlclByaWNlVmFsaWQiAmNnIgFpIgNwbXQiAmNwIgdhbUFzUG10IgdwckFzUG10IgFtIgFzIgJwbSICcGQiAm1tIgJwayIBYyIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiAmNtIgFwIgNocG0iA2NwbSIEc2xpcCIJYXV0b1N0YWtlIgdmYWN0Q2ZnIgtzdGFraW5nQ250ciIIc2xpcENudHIiAWUiCWxwQXNzZXRJZCICZWwiBmxlZ2FjeSICc2EiAnNwIghscFRybnNmciICc3MiC2FtQXNzZXRQYXJ0IgtwckFzc2V0UGFydCIFb3V0THAiB2d3eENudHIiB3Bvb2xDZmciBWFkZG9uIg1hZGRvbkNvbnRyYWN0IgVjaGVjayINJHQwMjQ4NjAyNTI0MCIMYW1CYWxhbmNlTm93IgxwckJhbGFuY2VOb3ciDHZpcnRTd2FwSW5BbSINdmlydFN3YXBPdXRQciIMdmlydFN3YXBJblByIg12aXJ0U3dhcE91dEFtIgZEMHZzRDEiBmVzdFB1dCIHZXN0aW1MUCIJbHBDYWxjUmVzIgdtYXhTbHBnIglvdXRBbXRBbXQiAWIiCmV4Y2hSZXN1bHQiB25vdFVzZWQiCW91dEFtb3VudCIKb3V0QXNzZXRJZCIKZXN0aW1BbUFtdCIKZXN0aW1QckFtdCINJHQwMzAyNzEzMDcyOCIIdG90YWxHZXQiCGZpbmFsUmVzIg0kdDAzMTQz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", "chainId": 84, "height": 2108921, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DdytppXBMUFkvc27FqsyFW3g7HBiztDwCyDy9bQP6fDj Next: 5vJHZ5p5QbT6r68taJLerTxi6CQ8MRfYh12vy3EyF7Lm Diff:
OldNewDifferences
613613 else {
614614 let amBalance = getAccBalance(amId)
615615 let prBalance = getAccBalance(prId)
616- let $t02485925239 = if ((pmtAssetId == amId))
616+ let $t02486025240 = if ((pmtAssetId == amId))
617617 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
618618 else if ((pmtAssetId == prId))
619619 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
620620 else throw("wrong pmtAssetId")
621- let amBalanceNow = $t02485925239._1
622- let prBalanceNow = $t02485925239._2
623- let virtSwapInAm = $t02485925239._3
624- let virtSwapOutPr = $t02485925239._4
625- let virtSwapInPr = $t02485925239._5
626- let virtSwapOutAm = $t02485925239._6
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
627627 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
628628 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
629629 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
752752 let estimPrAmt = r._2
753753 let amBalance = getAccBalance(amId)
754754 let prBalance = getAccBalance(prId)
755- let $t03027030727 = if ((outAssetId == amId))
755+ let $t03027130728 = if ((outAssetId == amId))
756756 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
757757 else if ((outAssetId == prId))
758758 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
759759 else throw("wrong outAssetId")
760- let amBalanceNow = $t03027030727._1
761- let prBalanceNow = $t03027030727._2
762- let virtSwapInAm = $t03027030727._3
763- let virtSwapOutPr = $t03027030727._4
764- let virtSwapInPr = $t03027030727._5
765- let virtSwapOutAm = $t03027030727._6
766- let totalGet = $t03027030727._7
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
767767 if (if ((0 > virtSwapInAm))
768768 then true
769769 else (0 > virtSwapInPr))
777777 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
778778 if ((finalRes == finalRes))
779779 then {
780- let $t03143231536 = if ((outAssetId == amId))
780+ let $t03143331537 = if ((outAssetId == amId))
781781 then $Tuple2(toInt(finalRes._2), 0)
782782 else $Tuple2(0, toInt(finalRes._2))
783- let outAm = $t03143231536._1
784- let outPr = $t03143231536._2
783+ let outAm = $t03143331537._1
784+ let outPr = $t03143331537._2
785785 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
786786 let curPr = f1(curPrX18, scale8)
787787 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
220220 func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
221221 let cfg = gpc()
222222 let lpId = cfg[idxLPAsId]
223223 let amId = cfg[idxAmAsId]
224224 let prId = cfg[idxPrAsId]
225225 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
226226 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
227227 let sts = cfg[idxPoolSt]
228228 let lpEmiss = valueOrErrorMessage(assetInfo(fromBase58String(lpId)), "Wrong LP id").quantity
229229 if ((lpId != pmtAssetId))
230230 then throw("Wrong pmt asset")
231231 else {
232232 let amBalance = getAccBalance(amId)
233233 let amBalanceX18 = t1(amBalance, amDcm)
234234 let prBalance = getAccBalance(prId)
235235 let prBalanceX18 = t1(prBalance, prDcm)
236236 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
237237 let curPrice = f1(curPriceX18, scale8)
238238 let pmtLpAmtX18 = t1(pmtLpAmt, scale8)
239239 let lpEmissX18 = t1(lpEmiss, scale8)
240240 let outAmAmtX18 = fraction(amBalanceX18, pmtLpAmtX18, lpEmissX18)
241241 let outPrAmtX18 = fraction(prBalanceX18, pmtLpAmtX18, lpEmissX18)
242242 let outAmAmt = f1(outAmAmtX18, amDcm)
243243 let outPrAmt = f1(outPrAmtX18, prDcm)
244244 let state = if ((txId58 == ""))
245245 then nil
246246 else [ScriptTransfer(userAddress, outAmAmt, if ((amId == "WAVES"))
247247 then unit
248248 else fromBase58String(amId)), ScriptTransfer(userAddress, outPrAmt, if ((prId == "WAVES"))
249249 then unit
250250 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)]
251251 $Tuple10(outAmAmt, outPrAmt, amId, prId, amBalance, prBalance, lpEmiss, curPriceX18, sts, state)
252252 }
253253 }
254254
255255
256256 func epo (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,userAddress,isEval,emitLp,isOneAsset,pmtAmt,pmtId) = {
257257 let cfg = gpc()
258258 let lpId = fromBase58String(cfg[idxLPAsId])
259259 let amIdStr = cfg[idxAmAsId]
260260 let prIdStr = cfg[idxPrAsId]
261261 let inAmIdStr = cfg[idxIAmtAsId]
262262 let inPrIdStr = cfg[idxIPriceAsId]
263263 let amtDcm = parseIntValue(cfg[idxAmtAsDcm])
264264 let priceDcm = parseIntValue(cfg[idxPriceAsDcm])
265265 let sts = cfg[idxPoolSt]
266266 let lpEm = valueOrErrorMessage(assetInfo(lpId), "Wr lp as").quantity
267267 let amBalance = if (isEval)
268268 then getAccBalance(amIdStr)
269269 else if (if (isOneAsset)
270270 then (pmtId == amIdStr)
271271 else false)
272272 then (getAccBalance(amIdStr) - pmtAmt)
273273 else if (isOneAsset)
274274 then getAccBalance(amIdStr)
275275 else (getAccBalance(amIdStr) - inAmAmt)
276276 let prBalance = if (isEval)
277277 then getAccBalance(prIdStr)
278278 else if (if (isOneAsset)
279279 then (pmtId == prIdStr)
280280 else false)
281281 then (getAccBalance(prIdStr) - pmtAmt)
282282 else if (isOneAsset)
283283 then getAccBalance(prIdStr)
284284 else (getAccBalance(prIdStr) - inPrAmt)
285285 let inAmAssetAmtX18 = t1(inAmAmt, amtDcm)
286286 let inPrAssetAmtX18 = t1(inPrAmt, priceDcm)
287287 let userPriceX18 = cpbi(inPrAssetAmtX18, inAmAssetAmtX18)
288288 let amBalanceX18 = t1(amBalance, amtDcm)
289289 let prBalanceX18 = t1(prBalance, priceDcm)
290290 let r = if ((lpEm == 0))
291291 then {
292292 let curPriceX18 = zeroBigInt
293293 let slippageX18 = zeroBigInt
294294 let lpAmtX18 = pow((inAmAssetAmtX18 * inPrAssetAmtX18), 0, toBigInt(5), 1, 0, DOWN)
295295 $Tuple5(f1(lpAmtX18, scale8), f1(inAmAssetAmtX18, amtDcm), f1(inPrAssetAmtX18, priceDcm), cpbi((prBalanceX18 + inPrAssetAmtX18), (amBalanceX18 + inAmAssetAmtX18)), slippageX18)
296296 }
297297 else {
298298 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
299299 let slippageRealX18 = fraction(abs((curPriceX18 - userPriceX18)), scale18, curPriceX18)
300300 let slippageX18 = t1(slippage, scale8)
301301 if (if ((curPriceX18 != zeroBigInt))
302302 then (slippageRealX18 > slippageX18)
303303 else false)
304304 then throw(((("Price slippage " + toString(slippageRealX18)) + " > ") + toString(slippageX18)))
305305 else {
306306 let lpEmissionX18 = t1(lpEm, scale8)
307307 let prViaAmX18 = fraction(inAmAssetAmtX18, curPriceX18, scale18)
308308 let amViaPrX18 = fraction(inPrAssetAmtX18, scale18, curPriceX18)
309309 let expectedAmts = if ((prViaAmX18 > inPrAssetAmtX18))
310310 then $Tuple2(amViaPrX18, inPrAssetAmtX18)
311311 else $Tuple2(inAmAssetAmtX18, prViaAmX18)
312312 let expAmtAssetAmtX18 = expectedAmts._1
313313 let expPriceAssetAmtX18 = expectedAmts._2
314314 let lpAmtX18 = fraction(lpEmissionX18, expPriceAssetAmtX18, prBalanceX18)
315315 $Tuple5(f1(lpAmtX18, scale8), f1(expAmtAssetAmtX18, amtDcm), f1(expPriceAssetAmtX18, priceDcm), curPriceX18, slippageX18)
316316 }
317317 }
318318 let calcLpAmt = r._1
319319 let calcAmAssetPmt = r._2
320320 let calcPrAssetPmt = r._3
321321 let curPrice = f1(r._4, scale8)
322322 let slippageCalc = f1(r._5, scale8)
323323 if ((0 >= calcLpAmt))
324324 then throw("LP <= 0")
325325 else {
326326 let emitLpAmt = if (!(emitLp))
327327 then 0
328328 else calcLpAmt
329329 let amDiff = (inAmAmt - calcAmAssetPmt)
330330 let prDiff = (inPrAmt - calcPrAssetPmt)
331331 let $t01531315658 = if (if (isOneAsset)
332332 then (pmtId == amIdStr)
333333 else false)
334334 then $Tuple2(pmtAmt, 0)
335335 else if (if (isOneAsset)
336336 then (pmtId == prIdStr)
337337 else false)
338338 then $Tuple2(0, pmtAmt)
339339 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
340340 let writeAmAmt = $t01531315658._1
341341 let writePrAmt = $t01531315658._2
342342 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))]
343343 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
344344 }
345345 }
346346
347347
348348 func moa (order) = {
349349 let cfg = gpc()
350350 let amtAsId = cfg[idxAmAsId]
351351 let prAsId = cfg[idxPrAsId]
352352 let sts = parseIntValue(cfg[idxPoolSt])
353353 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
354354 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
355355 let accAmtAsBalance = getAccBalance(amtAsId)
356356 let accPrAsBalance = getAccBalance(prAsId)
357357 let curPriceX18 = if ((order.orderType == Buy))
358358 then pcp(amtAsDcm, prAsDcm, (accAmtAsBalance + order.amount), accPrAsBalance)
359359 else pcp(amtAsDcm, prAsDcm, (accAmtAsBalance - order.amount), accPrAsBalance)
360360 let curPrice = f1(curPriceX18, scale8)
361361 if (if (if (igs())
362362 then true
363363 else (sts == PoolMatcherDis))
364364 then true
365365 else (sts == PoolShutdown))
366366 then throw("Admin blocked")
367367 else {
368368 let orAmtAsset = order.assetPair.amountAsset
369369 let orAmtAsStr = if ((orAmtAsset == unit))
370370 then "WAVES"
371371 else toBase58String(value(orAmtAsset))
372372 let orPrAsset = order.assetPair.priceAsset
373373 let orPrAsStr = if ((orPrAsset == unit))
374374 then "WAVES"
375375 else toBase58String(value(orPrAsset))
376376 if (if ((orAmtAsStr != amtAsId))
377377 then true
378378 else (orPrAsStr != prAsId))
379379 then throw("Wr assets")
380380 else {
381381 let orderPrice = order.price
382382 let priceDcm = fraction(scale8, prAsDcm, amtAsDcm)
383383 let castOrderPrice = ts(orderPrice, scale8, priceDcm)
384384 let isOrderPriceValid = if ((order.orderType == Buy))
385385 then (curPrice >= castOrderPrice)
386386 else (castOrderPrice >= curPrice)
387387 true
388388 }
389389 }
390390 }
391391
392392
393393 func cg (i) = if ((size(i.payments) != 1))
394394 then throw("1 pmnt exp")
395395 else {
396396 let pmt = value(i.payments[0])
397397 let pmtAssetId = value(pmt.assetId)
398398 let pmtAmt = pmt.amount
399399 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
400400 let outAmAmt = r._1
401401 let outPrAmt = r._2
402402 let sts = parseIntValue(r._9)
403403 let state = r._10
404404 if (if (igs())
405405 then true
406406 else (sts == PoolShutdown))
407407 then throw(("Admin blocked: " + toString(sts)))
408408 else $Tuple5(outAmAmt, outPrAmt, pmtAmt, pmtAssetId, state)
409409 }
410410
411411
412412 func cp (caller,txId,amAsPmt,prAsPmt,slippage,emitLp,isOneAsset,pmtAmt,pmtId) = {
413413 let r = epo(txId, slippage, value(amAsPmt).amount, value(amAsPmt).assetId, value(prAsPmt).amount, value(prAsPmt).assetId, caller, false, emitLp, isOneAsset, pmtAmt, pmtId)
414414 let sts = parseIntValue(r._8)
415415 if (if (if (igs())
416416 then true
417417 else (sts == PoolPutDis))
418418 then true
419419 else (sts == PoolShutdown))
420420 then throw(("Blocked:" + toString(sts)))
421421 else r
422422 }
423423
424424
425425 func m () = match getString(mpk()) {
426426 case s: String =>
427427 fromBase58String(s)
428428 case _: Unit =>
429429 unit
430430 case _ =>
431431 throw("Match error")
432432 }
433433
434434
435435 func pm () = match getString(pmpk()) {
436436 case s: String =>
437437 fromBase58String(s)
438438 case _: Unit =>
439439 unit
440440 case _ =>
441441 throw("Match error")
442442 }
443443
444444
445445 let pd = throw("Permission denied")
446446
447447 func mm (i) = match m() {
448448 case pk: ByteVector =>
449449 if ((i.callerPublicKey == pk))
450450 then true
451451 else pd
452452 case _: Unit =>
453453 if ((i.caller == this))
454454 then true
455455 else pd
456456 case _ =>
457457 throw("Match error")
458458 }
459459
460460
461461 @Callable(i)
462462 func constructor (fc) = {
463463 let c = mm(i)
464464 if ((c == c))
465465 then [StringEntry(fc(), fc)]
466466 else throw("Strict value is not equal to itself.")
467467 }
468468
469469
470470
471471 @Callable(i)
472472 func setManager (pendingManagerPublicKey) = {
473473 let c = mm(i)
474474 if ((c == c))
475475 then {
476476 let cm = fromBase58String(pendingManagerPublicKey)
477477 if ((cm == cm))
478478 then [StringEntry(pmpk(), pendingManagerPublicKey)]
479479 else throw("Strict value is not equal to itself.")
480480 }
481481 else throw("Strict value is not equal to itself.")
482482 }
483483
484484
485485
486486 @Callable(i)
487487 func confirmManager () = {
488488 let p = pm()
489489 let hpm = if (isDefined(p))
490490 then true
491491 else throw("No pending manager")
492492 if ((hpm == hpm))
493493 then {
494494 let cpm = if ((i.callerPublicKey == value(p)))
495495 then true
496496 else throw("You are not pending manager")
497497 if ((cpm == cpm))
498498 then [StringEntry(mpk(), toBase58String(value(p))), DeleteEntry(pmpk())]
499499 else throw("Strict value is not equal to itself.")
500500 }
501501 else throw("Strict value is not equal to itself.")
502502 }
503503
504504
505505
506506 @Callable(i)
507507 func calculatePrices (amAmt,prAmt,lpAmt) = {
508508 let p = calcPrices(amAmt, prAmt, lpAmt)
509509 $Tuple2(nil, [f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)])
510510 }
511511
512512
513513
514514 @Callable(i)
515515 func put (slip,autoStake) = {
516516 let factCfg = gfc()
517517 let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
518518 let slipCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactSlippCntr]), "Wr sl addr")
519519 if ((0 > slip))
520520 then throw("Wrong slippage")
521521 else if ((size(i.payments) != 2))
522522 then throw("2 pmnts expd")
523523 else {
524524 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, "")
525525 let emitLpAmt = e._2
526526 let lpAssetId = e._7
527527 let state = e._9
528528 let amDiff = e._10
529529 let prDiff = e._11
530530 let amId = e._12
531531 let prId = e._13
532532 let r = invoke(fca, "emit", [emitLpAmt], nil)
533533 if ((r == r))
534534 then {
535535 let el = match r {
536536 case legacy: Address =>
537537 invoke(legacy, "emit", [emitLpAmt], nil)
538538 case _ =>
539539 unit
540540 }
541541 if ((el == el))
542542 then {
543543 let sa = if ((amDiff > 0))
544544 then invoke(slipCntr, "put", nil, [AttachedPayment(amId, amDiff)])
545545 else nil
546546 if ((sa == sa))
547547 then {
548548 let sp = if ((prDiff > 0))
549549 then invoke(slipCntr, "put", nil, [AttachedPayment(prId, prDiff)])
550550 else nil
551551 if ((sp == sp))
552552 then {
553553 let lpTrnsfr = if (autoStake)
554554 then {
555555 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
556556 if ((ss == ss))
557557 then nil
558558 else throw("Strict value is not equal to itself.")
559559 }
560560 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
561561 (state ++ lpTrnsfr)
562562 }
563563 else throw("Strict value is not equal to itself.")
564564 }
565565 else throw("Strict value is not equal to itself.")
566566 }
567567 else throw("Strict value is not equal to itself.")
568568 }
569569 else throw("Strict value is not equal to itself.")
570570 }
571571 }
572572
573573
574574
575575 @Callable(i)
576576 func putOneTkn (amAssetPart,prAssetPart,outLp,slippage,autoStake) = {
577577 let cfg = gfc()
578578 let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
579579 let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
580580 let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
581581 let poolCfg = gpc()
582582 let amId = poolCfg[idxAmAsId]
583583 let prId = poolCfg[idxPrAsId]
584584 let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
585585 let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
586586 let addon = valueOrElse(getString(this, ada()), "")
587587 let userAddress = if ((addon == toString(i.caller)))
588588 then i.originCaller
589589 else i.caller
590590 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
591591 let check = reentrantInvoke(addonContract, "ensureCanPutOneTkn", [toString(userAddress)], nil)
592592 if ((check == check))
593593 then if (if (if (if ((0 >= slippage))
594594 then true
595595 else (0 >= amAssetPart))
596596 then true
597597 else (0 >= prAssetPart))
598598 then true
599599 else (0 >= outLp))
600600 then throw("Wrong params")
601601 else if ((size(i.payments) != 1))
602602 then throw("1 pmnt expd")
603603 else {
604604 let pmt = value(i.payments[0])
605605 let pmtAssetId = toBase58String(value(pmt.assetId))
606606 let pmtAmt = pmt.amount
607607 if (if (if ((amAssetPart > pmtAmt))
608608 then true
609609 else (prAssetPart > pmtAmt))
610610 then true
611611 else (10000000 > pmtAmt))
612612 then throw("Wrong pmt amt")
613613 else {
614614 let amBalance = getAccBalance(amId)
615615 let prBalance = getAccBalance(prId)
616- let $t02485925239 = if ((pmtAssetId == amId))
616+ let $t02486025240 = if ((pmtAssetId == amId))
617617 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
618618 else if ((pmtAssetId == prId))
619619 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
620620 else throw("wrong pmtAssetId")
621- let amBalanceNow = $t02485925239._1
622- let prBalanceNow = $t02485925239._2
623- let virtSwapInAm = $t02485925239._3
624- let virtSwapOutPr = $t02485925239._4
625- let virtSwapInPr = $t02485925239._5
626- let virtSwapOutAm = $t02485925239._6
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
627627 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
628628 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
629629 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
630630 if ((D0vsD1 == D0vsD1))
631631 then {
632632 let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
633633 let estimLP = estPut._2
634634 let lpAssetId = estPut._7
635635 let state = estPut._9
636636 let amDiff = estPut._10
637637 let prDiff = estPut._11
638638 let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
639639 let emitLpAmt = toInt(lpCalcRes._2)
640640 let e = invoke(fca, "emit", [emitLpAmt], nil)
641641 if ((e == e))
642642 then {
643643 let el = match e {
644644 case legacy: Address =>
645645 invoke(legacy, "emit", [emitLpAmt], nil)
646646 case _ =>
647647 unit
648648 }
649649 if ((el == el))
650650 then {
651651 let sa = if ((amDiff > 0))
652652 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
653653 else nil
654654 if ((sa == sa))
655655 then {
656656 let sp = if ((prDiff > 0))
657657 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
658658 else nil
659659 if ((sp == sp))
660660 then {
661661 let lpTrnsfr = if (autoStake)
662662 then {
663663 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
664664 if ((ss == ss))
665665 then nil
666666 else throw("Strict value is not equal to itself.")
667667 }
668668 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
669669 (state ++ lpTrnsfr)
670670 }
671671 else throw("Strict value is not equal to itself.")
672672 }
673673 else throw("Strict value is not equal to itself.")
674674 }
675675 else throw("Strict value is not equal to itself.")
676676 }
677677 else throw("Strict value is not equal to itself.")
678678 }
679679 else throw("Strict value is not equal to itself.")
680680 }
681681 }
682682 else throw("Strict value is not equal to itself.")
683683 }
684684
685685
686686
687687 @Callable(i)
688688 func putForFree (maxSlpg) = if ((0 > maxSlpg))
689689 then throw("Wrong slpg")
690690 else if ((size(i.payments) != 2))
691691 then throw("2 pmnts expd")
692692 else {
693693 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, "")
694694 estPut._9
695695 }
696696
697697
698698
699699 @Callable(i)
700700 func get () = {
701701 let r = cg(i)
702702 let outAmtAmt = r._1
703703 let outPrAmt = r._2
704704 let pmtAmt = r._3
705705 let pmtAssetId = r._4
706706 let state = r._5
707707 let b = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
708708 if ((b == b))
709709 then state
710710 else throw("Strict value is not equal to itself.")
711711 }
712712
713713
714714
715715 @Callable(i)
716716 func getOneTkn (exchResult,notUsed,outAmount,outAssetId,slippage) = if ((size(i.payments) != 1))
717717 then throw("1 pmnt expd")
718718 else {
719719 let cfg = gpc()
720720 let lpId = cfg[idxLPAsId]
721721 let amId = cfg[idxAmAsId]
722722 let prId = cfg[idxPrAsId]
723723 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
724724 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
725725 let sts = cfg[idxPoolSt]
726726 let factCfg = gfc()
727727 let gwxCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactGwxRewCntr]), "Wr sl addr")
728728 let pmt = value(i.payments[0])
729729 let addon = valueOrElse(getString(this, ada()), "")
730730 let userAddress = if ((addon == toString(i.caller)))
731731 then i.originCaller
732732 else i.caller
733733 let txId58 = toBase58String(i.transactionId)
734734 let pmtAssetId = value(pmt.assetId)
735735 let pmtAmt = pmt.amount
736736 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
737737 let check = reentrantInvoke(addonContract, "ensureCanGetOneTkn", [toString(userAddress)], nil)
738738 if ((check == check))
739739 then if ((1000000000 > pmtAmt))
740740 then throw("Min pmt 10 LP")
741741 else if (if (if ((0 > slippage))
742742 then true
743743 else (0 > exchResult))
744744 then true
745745 else (0 > outAmount))
746746 then throw("Wrong params")
747747 else if ((lpId != toBase58String(pmtAssetId)))
748748 then throw("Wrong LP")
749749 else {
750750 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
751751 let estimAmAmt = r._1
752752 let estimPrAmt = r._2
753753 let amBalance = getAccBalance(amId)
754754 let prBalance = getAccBalance(prId)
755- let $t03027030727 = if ((outAssetId == amId))
755+ let $t03027130728 = if ((outAssetId == amId))
756756 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
757757 else if ((outAssetId == prId))
758758 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
759759 else throw("wrong outAssetId")
760- let amBalanceNow = $t03027030727._1
761- let prBalanceNow = $t03027030727._2
762- let virtSwapInAm = $t03027030727._3
763- let virtSwapOutPr = $t03027030727._4
764- let virtSwapInPr = $t03027030727._5
765- let virtSwapOutAm = $t03027030727._6
766- let totalGet = $t03027030727._7
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
767767 if (if ((0 > virtSwapInAm))
768768 then true
769769 else (0 > virtSwapInPr))
770770 then throw("Wrong calc")
771771 else {
772772 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
773773 let D1 = invoke(gwxCntr, "calcD", [toString(((amBalanceNow - virtSwapInAm) + virtSwapOutAm)), toString(((prBalanceNow + virtSwapOutPr) - virtSwapInPr)), A, Amult, Dconv], nil)
774774 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
775775 if ((D0vsD1 == D0vsD1))
776776 then {
777777 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
778778 if ((finalRes == finalRes))
779779 then {
780- let $t03143231536 = if ((outAssetId == amId))
780+ let $t03143331537 = if ((outAssetId == amId))
781781 then $Tuple2(toInt(finalRes._2), 0)
782782 else $Tuple2(0, toInt(finalRes._2))
783- let outAm = $t03143231536._1
784- let outPr = $t03143231536._2
783+ let outAm = $t03143331537._1
784+ let outPr = $t03143331537._2
785785 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
786786 let curPr = f1(curPrX18, scale8)
787787 let state = [ScriptTransfer(userAddress, (outAm + outPr), if ((outAssetId == "WAVES"))
788788 then unit
789789 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)]
790790 if ((state == state))
791791 then {
792792 let burn = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
793793 if ((burn == burn))
794794 then state
795795 else throw("Strict value is not equal to itself.")
796796 }
797797 else throw("Strict value is not equal to itself.")
798798 }
799799 else throw("Strict value is not equal to itself.")
800800 }
801801 else throw("Strict value is not equal to itself.")
802802 }
803803 }
804804 else throw("Strict value is not equal to itself.")
805805 }
806806
807807
808808
809809 @Callable(i)
810810 func getNoLess (noLessThenAmtAsset,noLessThenPriceAsset) = {
811811 let r = cg(i)
812812 let outAmAmt = r._1
813813 let outPrAmt = r._2
814814 let pmtAmt = r._3
815815 let pmtAssetId = r._4
816816 let state = r._5
817817 if ((noLessThenAmtAsset > outAmAmt))
818818 then throw(((("Failed: " + toString(outAmAmt)) + " < ") + toString(noLessThenAmtAsset)))
819819 else if ((noLessThenPriceAsset > outPrAmt))
820820 then throw(((("Failed: " + toString(outPrAmt)) + " < ") + toString(noLessThenPriceAsset)))
821821 else {
822822 let burnLPAssetOnFactory = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
823823 if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
824824 then state
825825 else throw("Strict value is not equal to itself.")
826826 }
827827 }
828828
829829
830830
831831 @Callable(i)
832832 func unstakeAndGet (amount) = {
833833 let checkPayments = if ((size(i.payments) != 0))
834834 then throw("No pmnts expd")
835835 else true
836836 if ((checkPayments == checkPayments))
837837 then {
838838 let cfg = gpc()
839839 let factoryCfg = gfc()
840840 let lpAssetId = fromBase58String(cfg[idxLPAsId])
841841 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
842842 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
843843 if ((unstakeInv == unstakeInv))
844844 then {
845845 let r = ego(toBase58String(i.transactionId), toBase58String(lpAssetId), amount, i.caller)
846846 let sts = parseIntValue(r._9)
847847 let state = r._10
848848 let v = if (if (igs())
849849 then true
850850 else (sts == PoolShutdown))
851851 then throw(("Blocked: " + toString(sts)))
852852 else true
853853 if ((v == v))
854854 then {
855855 let burnA = invoke(fca, "burn", [amount], [AttachedPayment(lpAssetId, amount)])
856856 if ((burnA == burnA))
857857 then state
858858 else throw("Strict value is not equal to itself.")
859859 }
860860 else throw("Strict value is not equal to itself.")
861861 }
862862 else throw("Strict value is not equal to itself.")
863863 }
864864 else throw("Strict value is not equal to itself.")
865865 }
866866
867867
868868
869869 @Callable(i)
870870 func activate (amtAsStr,prAsStr) = if ((toString(i.caller) != toString(fca)))
871871 then throw("denied")
872872 else $Tuple2([StringEntry(aa(), amtAsStr), StringEntry(pa(), prAsStr)], "success")
873873
874874
875875
876876 @Callable(i)
877877 func setS (k,v) = if ((toString(i.caller) != strf(this, ada())))
878878 then pd
879879 else [StringEntry(k, v)]
880880
881881
882882
883883 @Callable(i)
884884 func setI (k,v) = if ((toString(i.caller) != strf(this, ada())))
885885 then pd
886886 else [IntegerEntry(k, v)]
887887
888888
889889
890890 @Callable(i)
891891 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, gpc())
892892
893893
894894
895895 @Callable(i)
896896 func getAccBalanceWrapperREADONLY (assetId) = $Tuple2(nil, getAccBalance(assetId))
897897
898898
899899
900900 @Callable(i)
901901 func calcPricesWrapperREADONLY (amAmt,prAmt,lpAmt) = {
902902 let pr = calcPrices(amAmt, prAmt, lpAmt)
903903 $Tuple2(nil, [toString(pr[0]), toString(pr[1]), toString(pr[2])])
904904 }
905905
906906
907907
908908 @Callable(i)
909909 func fromX18WrapperREADONLY (val,resScaleMult) = $Tuple2(nil, f1(parseBigIntValue(val), resScaleMult))
910910
911911
912912
913913 @Callable(i)
914914 func toX18WrapperREADONLY (origVal,origScaleMult) = $Tuple2(nil, toString(t1(origVal, origScaleMult)))
915915
916916
917917
918918 @Callable(i)
919919 func calcPriceBigIntWrapperREADONLY (prAmtX18,amAmtX18) = $Tuple2(nil, toString(cpbi(parseBigIntValue(prAmtX18), parseBigIntValue(amAmtX18))))
920920
921921
922922
923923 @Callable(i)
924924 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, ""))
925925
926926
927927
928928 @Callable(i)
929929 func estimateGetOperationWrapperREADONLY (txId58,pmtAsId,pmtLpAmt,usrAddr) = {
930930 let r = ego(txId58, pmtAsId, pmtLpAmt, addressFromStringValue(usrAddr))
931931 $Tuple2(nil, $Tuple10(r._1, r._2, r._3, r._4, r._5, r._6, r._7, toString(r._8), r._9, r._10))
932932 }
933933
934934
935935 @Verifier(tx)
936936 func verify () = match tx {
937937 case order: Order =>
938938 let mtchPub = mp()
939939 let orV = moa(order)
940940 let sndrV = sigVerify(order.bodyBytes, order.proofs[0], order.senderPublicKey)
941941 let mtchV = sigVerify(order.bodyBytes, order.proofs[1], mtchPub)
942942 if (if (if (orV)
943943 then sndrV
944944 else false)
945945 then mtchV
946946 else false)
947947 then true
948948 else toe(orV, sndrV, mtchV)
949949 case _ =>
950950 let targetPublicKey = match m() {
951951 case pk: ByteVector =>
952952 pk
953953 case _: Unit =>
954954 tx.senderPublicKey
955955 case _ =>
956956 throw("Match error")
957957 }
958958 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
959959 }
960960

github/deemru/w8io/3ef1775 
356.33 ms