tx · AyHCrwrYpyWWAK8r8rpjfkgQvbJeRuAbYHzJVXJaJtto

3MzKSdTH2jFbypLsoNfrH7QgkzSbx3EYwCA:  -0.03400000 Waves

2022.06.07 13:14 [2085813] smart account 3MzKSdTH2jFbypLsoNfrH7QgkzSbx3EYwCA > SELF 0.00000000 Waves

{ "type": 13, "id": "AyHCrwrYpyWWAK8r8rpjfkgQvbJeRuAbYHzJVXJaJtto", "fee": 3400000, "feeAssetId": null, "timestamp": 1654596905963, "version": 1, "sender": "3MzKSdTH2jFbypLsoNfrH7QgkzSbx3EYwCA", "senderPublicKey": "35yd3qw1gxKDxKwGAykHN9fANbXNWwseaUwbWDj24o3x", "proofs": [ "MU3xJxXfcwKpVrmtDCNpeD7gViTZpuhW7XKPcMHqvM16Gc1x7y9wPAkDioanb63Z9PaUrQEP18Vj3HKqV1PY1DH" ], "script": "base64:AAIFAAAAAAAAC6sIAhIECgIICBIDCgEIEgASBAoCAQQSBwoFAQEBAQQSAwoBARIAEgcKBQEBAQgBEgQKAgEBEgMKAQESBAoCCAgSBAoCCAgSBAoCCAESABIDCgEIEgUKAwEBARIECgIIARIECgIBARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCCIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiCW9uZUJpZ0ludCIKc2xpcHBhZ2U0RCIFQW11bHQiBURjb252IgNTRVAiBUVNUFRZIgpQb29sQWN0aXZlIgpQb29sUHV0RGlzIg5Qb29sTWF0Y2hlckRpcyIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyIJaWR4UG9vbFN0IglpZHhMUEFzSWQiCWlkeEFtQXNJZCIJaWR4UHJBc0lkIgtpZHhBbXRBc0RjbSINaWR4UHJpY2VBc0RjbSILaWR4SUFtdEFzSWQiDWlkeElQcmljZUFzSWQiD2lkeEZhY3RTdGFrQ250ciIQaWR4RmFjdFNsaXBwQ250ciIRaWR4RmFjdEd3eFJld0NudHIiBWRlbGF5IgJ0MSIHb3JpZ1ZhbCINb3JpZ1NjYWxlTXVsdCICZjEiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0IgJ0cyIDYW10IghyZXNTY2FsZSIIY3VyU2NhbGUiA2FicyICZmMiA21wayIEcG1wayICcGwiAnBoIgFoIgF0IgNwYXUiAnVhIgR0eElkIgNnYXUiAmFhIgJwYSIDYW1wIgNhZGEiB2xnb3BvdGMiBmNhbGxlciIEZmNmZyIEbXRwayICcGMiBmlBbXRBcyIFaVByQXMiA21iYSIFYkFTdHIiA2FwcyIDdG9lIgNvclYiBnNlbmRyViIGbWF0Y2hWIgNzdHIiByRtYXRjaDAiBnZhbFN0ciIEc3RyZiIEYWRkciIDa2V5IgRpbnRmIgNmY2EiAUEiA2lncyICbXAiA2dwYyIFYW10QXMiB3ByaWNlQXMiCGlQcmljZUFzIgNnZmMiEWRhdGFQdXRBY3Rpb25JbmZvIg1pbkFtdEFzc2V0QW10Ig9pblByaWNlQXNzZXRBbXQiCG91dExwQW10IgVwcmljZSIKc2xpcEJ5VXNlciIMc2xpcHBhZ2VSZWFsIgh0eEhlaWdodCILdHhUaW1lc3RhbXAiDHNsaXBhZ2VBbUFtdCIMc2xpcGFnZVByQW10IhFkYXRhR2V0QWN0aW9uSW5mbyIOb3V0QW10QXNzZXRBbXQiEG91dFByaWNlQXNzZXRBbXQiB2luTHBBbXQiDWdldEFjY0JhbGFuY2UiB2Fzc2V0SWQiBGNwYmkiCHByQW10WDE4IghhbUFtdFgxOCIDdmFkIgJBMSICQTIiCHNsaXBwYWdlIgRkaWZmIgRwYXNzIgJ2ZCICRDEiAkQwIgRzbHBnIgRmYWlsIgNwY3AiCmFtQXNzZXREY20iCnByQXNzZXREY20iBWFtQW10IgVwckFtdCILYW10QXNBbXRYMTgiCnByQXNBbXRYMTgiCmNhbGNQcmljZXMiBWxwQW10IgNjZmciCGFtdEFzRGNtIgdwckFzRGNtIghwcmljZVgxOCIIbHBBbXRYMTgiDWxwUHJJbkFtQXNYMTgiDWxwUHJJblByQXNYMTgiD2NhbGN1bGF0ZVByaWNlcyIBcCIDZWdvIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10Igt1c2VyQWRkcmVzcyIEbHBJZCIEYW1JZCIEcHJJZCIFYW1EY20iBXByRGNtIgNzdHMiB2xwRW1pc3MiCWFtQmFsYW5jZSIMYW1CYWxhbmNlWDE4IglwckJhbGFuY2UiDHByQmFsYW5jZVgxOCILY3VyUHJpY2VYMTgiCGN1clByaWNlIgtwbXRMcEFtdFgxOCIKbHBFbWlzc1gxOCILb3V0QW1BbXRYMTgiC291dFByQW10WDE4IghvdXRBbUFtdCIIb3V0UHJBbXQiBXN0YXRlIgNlcG8iB2luQW1BbXQiBmluQW1JZCIHaW5QckFtdCIGaW5QcklkIgZpc0V2YWwiBmVtaXRMcCIKaXNPbmVBc3NldCIGcG10QW10IgVwbXRJZCIHYW1JZFN0ciIHcHJJZFN0ciIJaW5BbUlkU3RyIglpblBySWRTdHIiBmFtdERjbSIIcHJpY2VEY20iBGxwRW0iD2luQW1Bc3NldEFtdFgxOCIPaW5QckFzc2V0QW10WDE4Igx1c2VyUHJpY2VYMTgiAXIiC3NsaXBwYWdlWDE4Ig9zbGlwcGFnZVJlYWxYMTgiDWxwRW1pc3Npb25YMTgiCnByVmlhQW1YMTgiCmFtVmlhUHJYMTgiDGV4cGVjdGVkQW10cyIRZXhwQW10QXNzZXRBbXRYMTgiE2V4cFByaWNlQXNzZXRBbXRYMTgiCWNhbGNMcEFtdCIOY2FsY0FtQXNzZXRQbXQiDmNhbGNQckFzc2V0UG10IgxzbGlwcGFnZUNhbGMiCWVtaXRMcEFtdCIGYW1EaWZmIgZwckRpZmYiDSR0MDE1NDM5MTU3ODQiCndyaXRlQW1BbXQiCndyaXRlUHJBbXQiC2NvbW1vblN0YXRlIgNtb2EiBW9yZGVyIgdhbXRBc0lkIgZwckFzSWQiD2FjY0FtdEFzQmFsYW5jZSIOYWNjUHJBc0JhbGFuY2UiCm9yQW10QXNzZXQiCm9yQW10QXNTdHIiCW9yUHJBc3NldCIJb3JQckFzU3RyIgpvcmRlclByaWNlIg5jYXN0T3JkZXJQcmljZSIRaXNPcmRlclByaWNlVmFsaWQiAmNnIgFpIgNwbXQiAmNwIgdhbUFzUG10IgdwckFzUG10IgFtIgFzIgJwbSICcGQiAm1tIgJwayIBYyIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiAmNtIgNocG0iA2NwbSIEc2xpcCIJYXV0b1N0YWtlIgdmYWN0Q2ZnIgtzdGFraW5nQ250ciIIc2xpcENudHIiAWUiCWxwQXNzZXRJZCICZWwiBmxlZ2FjeSICc2EiAnNwIghscFRybnNmciICc3MiC2FtQXNzZXRQYXJ0IgtwckFzc2V0UGFydCIFb3V0THAiB2d3eENudHIiB3Bvb2xDZmciBWFkZG9uIg1hZGRvbkNvbnRyYWN0IgVjaGVjayINJHQwMjQ4MDQyNTE4NCIMYW1CYWxhbmNlTm93IgxwckJhbGFuY2VOb3ciDHZpcnRTd2FwSW5BbSINdmlydFN3YXBPdXRQciIMdmlydFN3YXBJblByIg12aXJ0U3dhcE91dEFtIgZEMHZzRDEiBmVzdFB1dCIHZXN0aW1MUCIJbHBDYWxjUmVzIgdtYXhTbHBnIglvdXRBbXRBbXQiAWIiCmV4Y2hSZXN1bHQiB25vdFVzZWQiCW91dEFtb3VudCIKb3V0QXNzZXRJZCIKZXN0aW1BbUFtdCIKZXN0aW1QckFtdCINJHQwMzAyMjAzMDY3NyIIdG90YWxHZXQiCGZpbmFsUmVzIg0k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", "chainId": 84, "height": 2085813, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 718NwZSBE4TM3hKnappszqtZDJCbrHBR6MYrwBJX9pGv Next: 8fgv3p4ue3XVfBfyN7EQycHFvG1ufDCTcx2JCEicpHGx Diff:
OldNewDifferences
102102 func ada () = "%s__addonAddr"
103103
104104
105-func lgotc (caller) = makeString(["%s%s__lastGetOneTknCall", caller], SEP)
106-
107-
108-func lsotc (caller) = makeString(["%s%s__lastPutOneTknCall", caller], SEP)
105+func lgopotc (caller) = makeString(["%s%s__lastGetOrPutOneTknCall", caller], SEP)
109106
110107
111108 func fcfg () = "%s__factoryConfig"
334331 else calcLpAmt
335332 let amDiff = (inAmAmt - calcAmAssetPmt)
336333 let prDiff = (inPrAmt - calcPrAssetPmt)
337- let $t01553115876 = if (if (isOneAsset)
334+ let $t01543915784 = if (if (isOneAsset)
338335 then (pmtId == amIdStr)
339336 else false)
340337 then $Tuple2(pmtAmt, 0)
343340 else false)
344341 then $Tuple2(0, pmtAmt)
345342 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
346- let writeAmAmt = $t01553115876._1
347- let writePrAmt = $t01553115876._2
343+ let writeAmAmt = $t01543915784._1
344+ let writePrAmt = $t01543915784._2
348345 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))]
349346 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
350347 }
465462
466463
467464 @Callable(i)
468-func constructor (fc) = {
465+func constructor (fc,ada) = {
469466 let c = mm(i)
470467 if ((c == c))
471- then [StringEntry(fc(), fc)]
468+ then [StringEntry(fc(), fc), StringEntry(ada(), ada)]
472469 else throw("Strict value is not equal to itself.")
473470 }
474471
586583 then i.originCaller
587584 else i.caller
588585 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
589- let check = reentrantInvoke(addonContract, "ensureCanPutOneTkn", [toString(userAddress)], nil)
586+ let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
590587 if ((check == check))
591588 then if (if (if (if ((0 >= slippage))
592589 then true
611608 else {
612609 let amBalance = getAccBalance(amId)
613610 let prBalance = getAccBalance(prId)
614- let $t02483225212 = if ((pmtAssetId == amId))
611+ let $t02480425184 = if ((pmtAssetId == amId))
615612 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
616613 else if ((pmtAssetId == prId))
617614 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
618615 else throw("wrong pmtAssetId")
619- let amBalanceNow = $t02483225212._1
620- let prBalanceNow = $t02483225212._2
621- let virtSwapInAm = $t02483225212._3
622- let virtSwapOutPr = $t02483225212._4
623- let virtSwapInPr = $t02483225212._5
624- let virtSwapOutAm = $t02483225212._6
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
625622 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
626623 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
627624 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
732729 let pmtAssetId = value(pmt.assetId)
733730 let pmtAmt = pmt.amount
734731 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
735- let check = reentrantInvoke(addonContract, "ensureCanGetOneTkn", [toString(userAddress)], nil)
732+ let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
736733 if ((check == check))
737734 then if ((1000000000 > pmtAmt))
738735 then throw("Min pmt 10 LP")
750747 let estimPrAmt = r._2
751748 let amBalance = getAccBalance(amId)
752749 let prBalance = getAccBalance(prId)
753- let $t03024330700 = if ((outAssetId == amId))
750+ let $t03022030677 = if ((outAssetId == amId))
754751 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
755752 else if ((outAssetId == prId))
756753 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
757754 else throw("wrong outAssetId")
758- let amBalanceNow = $t03024330700._1
759- let prBalanceNow = $t03024330700._2
760- let virtSwapInAm = $t03024330700._3
761- let virtSwapOutPr = $t03024330700._4
762- let virtSwapInPr = $t03024330700._5
763- let virtSwapOutAm = $t03024330700._6
764- let totalGet = $t03024330700._7
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
765762 if (if ((0 > virtSwapInAm))
766763 then true
767764 else (0 > virtSwapInPr))
775772 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
776773 if ((finalRes == finalRes))
777774 then {
778- let $t03140531509 = if ((outAssetId == amId))
775+ let $t03138231486 = if ((outAssetId == amId))
779776 then $Tuple2(toInt(finalRes._2), 0)
780777 else $Tuple2(0, toInt(finalRes._2))
781- let outAm = $t03140531509._1
782- let outPr = $t03140531509._2
778+ let outAm = $t03138231486._1
779+ let outPr = $t03138231486._2
783780 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
784781 let curPr = f1(curPrX18, scale8)
785782 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
105-func lgotc (caller) = makeString(["%s%s__lastGetOneTknCall", caller], SEP)
106-
107-
108-func lsotc (caller) = makeString(["%s%s__lastPutOneTknCall", caller], SEP)
105+func lgopotc (caller) = makeString(["%s%s__lastGetOrPutOneTknCall", caller], SEP)
109106
110107
111108 func fcfg () = "%s__factoryConfig"
112109
113110
114111 func mtpk () = "%s%s__matcher__publicKey"
115112
116113
117114 func pc (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
118115
119116
120117 func mba (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
121118
122119
123120 func aps () = "%s__shutdown"
124121
125122
126123 func toe (orV,sendrV,matchV) = throw(((((("Failed: ordValid=" + toString(orV)) + " sndrValid=") + toString(sendrV)) + " mtchrValid=") + toString(matchV)))
127124
128125
129126 func str (val) = match val {
130127 case valStr: String =>
131128 valStr
132129 case _ =>
133130 throw("fail cast to String")
134131 }
135132
136133
137134 func strf (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
138135
139136
140137 func intf (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
141138
142139
143140 let fca = addressFromStringValue(strf(this, fc()))
144141
145142 let A = strf(this, amp())
146143
147144 func igs () = valueOrElse(getBoolean(fca, aps()), false)
148145
149146
150147 func mp () = fromBase58String(strf(fca, mtpk()))
151148
152149
153150 func gpc () = {
154151 let amtAs = strf(this, aa())
155152 let priceAs = strf(this, pa())
156153 let iPriceAs = intf(fca, mba(priceAs))
157154 let iAmtAs = intf(fca, mba(amtAs))
158155 split(strf(fca, pc(toString(iAmtAs), toString(iPriceAs))), SEP)
159156 }
160157
161158
162159 func gfc () = split(strf(fca, fcfg()), SEP)
163160
164161
165162 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)
166163
167164
168165 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)
169166
170167
171168 func getAccBalance (assetId) = if ((assetId == "WAVES"))
172169 then wavesBalance(this).available
173170 else assetBalance(this, fromBase58String(assetId))
174171
175172
176173 func cpbi (prAmtX18,amAmtX18) = fraction(prAmtX18, scale18, amAmtX18)
177174
178175
179176 func vad (A1,A2,slippage) = {
180177 let diff = fraction((A1 - A2), scale8BigInt, A2)
181178 let pass = ((slippage - abs(diff)) > zeroBigInt)
182179 if (!(pass))
183180 then throw(("Big slpg: " + toString(diff)))
184181 else $Tuple2(pass, min([A1, A2]))
185182 }
186183
187184
188185 func vd (D1,D0,slpg) = {
189186 let diff = fraction(D0, scale8BigInt, D1)
190187 let fail = (slpg > diff)
191188 if (if (fail)
192189 then true
193190 else (D0 > D1))
194191 then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
195192 else fail
196193 }
197194
198195
199196 func pcp (amAssetDcm,prAssetDcm,amAmt,prAmt) = {
200197 let amtAsAmtX18 = t1(amAmt, amAssetDcm)
201198 let prAsAmtX18 = t1(prAmt, prAssetDcm)
202199 cpbi(prAsAmtX18, amtAsAmtX18)
203200 }
204201
205202
206203 func calcPrices (amAmt,prAmt,lpAmt) = {
207204 let cfg = gpc()
208205 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
209206 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
210207 let priceX18 = pcp(amtAsDcm, prAsDcm, amAmt, prAmt)
211208 let amAmtX18 = t1(amAmt, amtAsDcm)
212209 let prAmtX18 = t1(prAmt, prAsDcm)
213210 let lpAmtX18 = t1(lpAmt, scale8)
214211 let lpPrInAmAsX18 = cpbi(amAmtX18, lpAmtX18)
215212 let lpPrInPrAsX18 = cpbi(prAmtX18, lpAmtX18)
216213 [priceX18, lpPrInAmAsX18, lpPrInPrAsX18]
217214 }
218215
219216
220217 func calculatePrices (amAmt,prAmt,lpAmt) = {
221218 let p = calcPrices(amAmt, prAmt, lpAmt)
222219 [f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)]
223220 }
224221
225222
226223 func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
227224 let cfg = gpc()
228225 let lpId = cfg[idxLPAsId]
229226 let amId = cfg[idxAmAsId]
230227 let prId = cfg[idxPrAsId]
231228 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
232229 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
233230 let sts = cfg[idxPoolSt]
234231 let lpEmiss = valueOrErrorMessage(assetInfo(fromBase58String(lpId)), "Wrong LP id").quantity
235232 if ((lpId != pmtAssetId))
236233 then throw("Wrong pmt asset")
237234 else {
238235 let amBalance = getAccBalance(amId)
239236 let amBalanceX18 = t1(amBalance, amDcm)
240237 let prBalance = getAccBalance(prId)
241238 let prBalanceX18 = t1(prBalance, prDcm)
242239 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
243240 let curPrice = f1(curPriceX18, scale8)
244241 let pmtLpAmtX18 = t1(pmtLpAmt, scale8)
245242 let lpEmissX18 = t1(lpEmiss, scale8)
246243 let outAmAmtX18 = fraction(amBalanceX18, pmtLpAmtX18, lpEmissX18)
247244 let outPrAmtX18 = fraction(prBalanceX18, pmtLpAmtX18, lpEmissX18)
248245 let outAmAmt = f1(outAmAmtX18, amDcm)
249246 let outPrAmt = f1(outPrAmtX18, prDcm)
250247 let state = if ((txId58 == ""))
251248 then nil
252249 else [ScriptTransfer(userAddress, outAmAmt, if ((amId == "WAVES"))
253250 then unit
254251 else fromBase58String(amId)), ScriptTransfer(userAddress, outPrAmt, if ((prId == "WAVES"))
255252 then unit
256253 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)]
257254 $Tuple10(outAmAmt, outPrAmt, amId, prId, amBalance, prBalance, lpEmiss, curPriceX18, sts, state)
258255 }
259256 }
260257
261258
262259 func epo (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,userAddress,isEval,emitLp,isOneAsset,pmtAmt,pmtId) = {
263260 let cfg = gpc()
264261 let lpId = fromBase58String(cfg[idxLPAsId])
265262 let amIdStr = cfg[idxAmAsId]
266263 let prIdStr = cfg[idxPrAsId]
267264 let inAmIdStr = cfg[idxIAmtAsId]
268265 let inPrIdStr = cfg[idxIPriceAsId]
269266 let amtDcm = parseIntValue(cfg[idxAmtAsDcm])
270267 let priceDcm = parseIntValue(cfg[idxPriceAsDcm])
271268 let sts = cfg[idxPoolSt]
272269 let lpEm = valueOrErrorMessage(assetInfo(lpId), "Wr lp as").quantity
273270 let amBalance = if (isEval)
274271 then getAccBalance(amIdStr)
275272 else if (if (isOneAsset)
276273 then (pmtId == amIdStr)
277274 else false)
278275 then (getAccBalance(amIdStr) - pmtAmt)
279276 else if (isOneAsset)
280277 then getAccBalance(amIdStr)
281278 else (getAccBalance(amIdStr) - inAmAmt)
282279 let prBalance = if (isEval)
283280 then getAccBalance(prIdStr)
284281 else if (if (isOneAsset)
285282 then (pmtId == prIdStr)
286283 else false)
287284 then (getAccBalance(prIdStr) - pmtAmt)
288285 else if (isOneAsset)
289286 then getAccBalance(prIdStr)
290287 else (getAccBalance(prIdStr) - inPrAmt)
291288 let inAmAssetAmtX18 = t1(inAmAmt, amtDcm)
292289 let inPrAssetAmtX18 = t1(inPrAmt, priceDcm)
293290 let userPriceX18 = cpbi(inPrAssetAmtX18, inAmAssetAmtX18)
294291 let amBalanceX18 = t1(amBalance, amtDcm)
295292 let prBalanceX18 = t1(prBalance, priceDcm)
296293 let r = if ((lpEm == 0))
297294 then {
298295 let curPriceX18 = zeroBigInt
299296 let slippageX18 = zeroBigInt
300297 let lpAmtX18 = pow((inAmAssetAmtX18 * inPrAssetAmtX18), 0, toBigInt(5), 1, 0, DOWN)
301298 $Tuple5(f1(lpAmtX18, scale8), f1(inAmAssetAmtX18, amtDcm), f1(inPrAssetAmtX18, priceDcm), cpbi((prBalanceX18 + inPrAssetAmtX18), (amBalanceX18 + inAmAssetAmtX18)), slippageX18)
302299 }
303300 else {
304301 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
305302 let slippageRealX18 = fraction(abs((curPriceX18 - userPriceX18)), scale18, curPriceX18)
306303 let slippageX18 = t1(slippage, scale8)
307304 if (if ((curPriceX18 != zeroBigInt))
308305 then (slippageRealX18 > slippageX18)
309306 else false)
310307 then throw(((("Price slippage " + toString(slippageRealX18)) + " > ") + toString(slippageX18)))
311308 else {
312309 let lpEmissionX18 = t1(lpEm, scale8)
313310 let prViaAmX18 = fraction(inAmAssetAmtX18, curPriceX18, scale18)
314311 let amViaPrX18 = fraction(inPrAssetAmtX18, scale18, curPriceX18)
315312 let expectedAmts = if ((prViaAmX18 > inPrAssetAmtX18))
316313 then $Tuple2(amViaPrX18, inPrAssetAmtX18)
317314 else $Tuple2(inAmAssetAmtX18, prViaAmX18)
318315 let expAmtAssetAmtX18 = expectedAmts._1
319316 let expPriceAssetAmtX18 = expectedAmts._2
320317 let lpAmtX18 = fraction(lpEmissionX18, expPriceAssetAmtX18, prBalanceX18)
321318 $Tuple5(f1(lpAmtX18, scale8), f1(expAmtAssetAmtX18, amtDcm), f1(expPriceAssetAmtX18, priceDcm), curPriceX18, slippageX18)
322319 }
323320 }
324321 let calcLpAmt = r._1
325322 let calcAmAssetPmt = r._2
326323 let calcPrAssetPmt = r._3
327324 let curPrice = f1(r._4, scale8)
328325 let slippageCalc = f1(r._5, scale8)
329326 if ((0 >= calcLpAmt))
330327 then throw("LP <= 0")
331328 else {
332329 let emitLpAmt = if (!(emitLp))
333330 then 0
334331 else calcLpAmt
335332 let amDiff = (inAmAmt - calcAmAssetPmt)
336333 let prDiff = (inPrAmt - calcPrAssetPmt)
337- let $t01553115876 = if (if (isOneAsset)
334+ let $t01543915784 = if (if (isOneAsset)
338335 then (pmtId == amIdStr)
339336 else false)
340337 then $Tuple2(pmtAmt, 0)
341338 else if (if (isOneAsset)
342339 then (pmtId == prIdStr)
343340 else false)
344341 then $Tuple2(0, pmtAmt)
345342 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
346- let writeAmAmt = $t01553115876._1
347- let writePrAmt = $t01553115876._2
343+ let writeAmAmt = $t01543915784._1
344+ let writePrAmt = $t01543915784._2
348345 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))]
349346 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
350347 }
351348 }
352349
353350
354351 func moa (order) = {
355352 let cfg = gpc()
356353 let amtAsId = cfg[idxAmAsId]
357354 let prAsId = cfg[idxPrAsId]
358355 let sts = parseIntValue(cfg[idxPoolSt])
359356 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
360357 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
361358 let accAmtAsBalance = getAccBalance(amtAsId)
362359 let accPrAsBalance = getAccBalance(prAsId)
363360 let curPriceX18 = if ((order.orderType == Buy))
364361 then pcp(amtAsDcm, prAsDcm, (accAmtAsBalance + order.amount), accPrAsBalance)
365362 else pcp(amtAsDcm, prAsDcm, (accAmtAsBalance - order.amount), accPrAsBalance)
366363 let curPrice = f1(curPriceX18, scale8)
367364 if (if (if (igs())
368365 then true
369366 else (sts == PoolMatcherDis))
370367 then true
371368 else (sts == PoolShutdown))
372369 then throw("Admin blocked")
373370 else {
374371 let orAmtAsset = order.assetPair.amountAsset
375372 let orAmtAsStr = if ((orAmtAsset == unit))
376373 then "WAVES"
377374 else toBase58String(value(orAmtAsset))
378375 let orPrAsset = order.assetPair.priceAsset
379376 let orPrAsStr = if ((orPrAsset == unit))
380377 then "WAVES"
381378 else toBase58String(value(orPrAsset))
382379 if (if ((orAmtAsStr != amtAsId))
383380 then true
384381 else (orPrAsStr != prAsId))
385382 then throw("Wr assets")
386383 else {
387384 let orderPrice = order.price
388385 let priceDcm = fraction(scale8, prAsDcm, amtAsDcm)
389386 let castOrderPrice = ts(orderPrice, scale8, priceDcm)
390387 let isOrderPriceValid = if ((order.orderType == Buy))
391388 then (curPrice >= castOrderPrice)
392389 else (castOrderPrice >= curPrice)
393390 true
394391 }
395392 }
396393 }
397394
398395
399396 func cg (i) = if ((size(i.payments) != 1))
400397 then throw("1 pmnt exp")
401398 else {
402399 let pmt = value(i.payments[0])
403400 let pmtAssetId = value(pmt.assetId)
404401 let pmtAmt = pmt.amount
405402 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
406403 let outAmAmt = r._1
407404 let outPrAmt = r._2
408405 let sts = parseIntValue(r._9)
409406 let state = r._10
410407 if (if (igs())
411408 then true
412409 else (sts == PoolShutdown))
413410 then throw(("Admin blocked: " + toString(sts)))
414411 else $Tuple5(outAmAmt, outPrAmt, pmtAmt, pmtAssetId, state)
415412 }
416413
417414
418415 func cp (caller,txId,amAsPmt,prAsPmt,slippage,emitLp,isOneAsset,pmtAmt,pmtId) = {
419416 let r = epo(txId, slippage, value(amAsPmt).amount, value(amAsPmt).assetId, value(prAsPmt).amount, value(prAsPmt).assetId, caller, false, emitLp, isOneAsset, pmtAmt, pmtId)
420417 let sts = parseIntValue(r._8)
421418 if (if (if (igs())
422419 then true
423420 else (sts == PoolPutDis))
424421 then true
425422 else (sts == PoolShutdown))
426423 then throw(("Blocked:" + toString(sts)))
427424 else r
428425 }
429426
430427
431428 func m () = match getString(mpk()) {
432429 case s: String =>
433430 fromBase58String(s)
434431 case _: Unit =>
435432 unit
436433 case _ =>
437434 throw("Match error")
438435 }
439436
440437
441438 func pm () = match getString(pmpk()) {
442439 case s: String =>
443440 fromBase58String(s)
444441 case _: Unit =>
445442 unit
446443 case _ =>
447444 throw("Match error")
448445 }
449446
450447
451448 let pd = throw("Permission denied")
452449
453450 func mm (i) = match m() {
454451 case pk: ByteVector =>
455452 if ((i.callerPublicKey == pk))
456453 then true
457454 else pd
458455 case _: Unit =>
459456 if ((i.caller == this))
460457 then true
461458 else pd
462459 case _ =>
463460 throw("Match error")
464461 }
465462
466463
467464 @Callable(i)
468-func constructor (fc) = {
465+func constructor (fc,ada) = {
469466 let c = mm(i)
470467 if ((c == c))
471- then [StringEntry(fc(), fc)]
468+ then [StringEntry(fc(), fc), StringEntry(ada(), ada)]
472469 else throw("Strict value is not equal to itself.")
473470 }
474471
475472
476473
477474 @Callable(i)
478475 func setManager (pendingManagerPublicKey) = {
479476 let c = mm(i)
480477 if ((c == c))
481478 then {
482479 let cm = fromBase58String(pendingManagerPublicKey)
483480 if ((cm == cm))
484481 then [StringEntry(pmpk(), pendingManagerPublicKey)]
485482 else throw("Strict value is not equal to itself.")
486483 }
487484 else throw("Strict value is not equal to itself.")
488485 }
489486
490487
491488
492489 @Callable(i)
493490 func confirmManager () = {
494491 let p = pm()
495492 let hpm = if (isDefined(p))
496493 then true
497494 else throw("No pending manager")
498495 if ((hpm == hpm))
499496 then {
500497 let cpm = if ((i.callerPublicKey == value(p)))
501498 then true
502499 else throw("You are not pending manager")
503500 if ((cpm == cpm))
504501 then [StringEntry(mpk(), toBase58String(value(p))), DeleteEntry(pmpk())]
505502 else throw("Strict value is not equal to itself.")
506503 }
507504 else throw("Strict value is not equal to itself.")
508505 }
509506
510507
511508
512509 @Callable(i)
513510 func put (slip,autoStake) = {
514511 let factCfg = gfc()
515512 let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
516513 let slipCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactSlippCntr]), "Wr sl addr")
517514 if ((0 > slip))
518515 then throw("Wrong slippage")
519516 else if ((size(i.payments) != 2))
520517 then throw("2 pmnts expd")
521518 else {
522519 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, "")
523520 let emitLpAmt = e._2
524521 let lpAssetId = e._7
525522 let state = e._9
526523 let amDiff = e._10
527524 let prDiff = e._11
528525 let amId = e._12
529526 let prId = e._13
530527 let r = invoke(fca, "emit", [emitLpAmt], nil)
531528 if ((r == r))
532529 then {
533530 let el = match r {
534531 case legacy: Address =>
535532 invoke(legacy, "emit", [emitLpAmt], nil)
536533 case _ =>
537534 unit
538535 }
539536 if ((el == el))
540537 then {
541538 let sa = if ((amDiff > 0))
542539 then invoke(slipCntr, "put", nil, [AttachedPayment(amId, amDiff)])
543540 else nil
544541 if ((sa == sa))
545542 then {
546543 let sp = if ((prDiff > 0))
547544 then invoke(slipCntr, "put", nil, [AttachedPayment(prId, prDiff)])
548545 else nil
549546 if ((sp == sp))
550547 then {
551548 let lpTrnsfr = if (autoStake)
552549 then {
553550 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
554551 if ((ss == ss))
555552 then nil
556553 else throw("Strict value is not equal to itself.")
557554 }
558555 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
559556 (state ++ lpTrnsfr)
560557 }
561558 else throw("Strict value is not equal to itself.")
562559 }
563560 else throw("Strict value is not equal to itself.")
564561 }
565562 else throw("Strict value is not equal to itself.")
566563 }
567564 else throw("Strict value is not equal to itself.")
568565 }
569566 }
570567
571568
572569
573570 @Callable(i)
574571 func putOneTkn (amAssetPart,prAssetPart,outLp,slippage,autoStake) = {
575572 let cfg = gfc()
576573 let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
577574 let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
578575 let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
579576 let poolCfg = gpc()
580577 let amId = poolCfg[idxAmAsId]
581578 let prId = poolCfg[idxPrAsId]
582579 let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
583580 let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
584581 let addon = valueOrElse(getString(this, ada()), "")
585582 let userAddress = if ((addon == toString(i.caller)))
586583 then i.originCaller
587584 else i.caller
588585 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
589- let check = reentrantInvoke(addonContract, "ensureCanPutOneTkn", [toString(userAddress)], nil)
586+ let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
590587 if ((check == check))
591588 then if (if (if (if ((0 >= slippage))
592589 then true
593590 else (0 >= amAssetPart))
594591 then true
595592 else (0 >= prAssetPart))
596593 then true
597594 else (0 >= outLp))
598595 then throw("Wrong params")
599596 else if ((size(i.payments) != 1))
600597 then throw("1 pmnt expd")
601598 else {
602599 let pmt = value(i.payments[0])
603600 let pmtAssetId = toBase58String(value(pmt.assetId))
604601 let pmtAmt = pmt.amount
605602 if (if (if ((amAssetPart > pmtAmt))
606603 then true
607604 else (prAssetPart > pmtAmt))
608605 then true
609606 else (10000000 > pmtAmt))
610607 then throw("Wrong pmt amt")
611608 else {
612609 let amBalance = getAccBalance(amId)
613610 let prBalance = getAccBalance(prId)
614- let $t02483225212 = if ((pmtAssetId == amId))
611+ let $t02480425184 = if ((pmtAssetId == amId))
615612 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
616613 else if ((pmtAssetId == prId))
617614 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
618615 else throw("wrong pmtAssetId")
619- let amBalanceNow = $t02483225212._1
620- let prBalanceNow = $t02483225212._2
621- let virtSwapInAm = $t02483225212._3
622- let virtSwapOutPr = $t02483225212._4
623- let virtSwapInPr = $t02483225212._5
624- let virtSwapOutAm = $t02483225212._6
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
625622 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
626623 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
627624 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
628625 if ((D0vsD1 == D0vsD1))
629626 then {
630627 let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
631628 let estimLP = estPut._2
632629 let lpAssetId = estPut._7
633630 let state = estPut._9
634631 let amDiff = estPut._10
635632 let prDiff = estPut._11
636633 let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
637634 let emitLpAmt = toInt(lpCalcRes._2)
638635 let e = invoke(fca, "emit", [emitLpAmt], nil)
639636 if ((e == e))
640637 then {
641638 let el = match e {
642639 case legacy: Address =>
643640 invoke(legacy, "emit", [emitLpAmt], nil)
644641 case _ =>
645642 unit
646643 }
647644 if ((el == el))
648645 then {
649646 let sa = if ((amDiff > 0))
650647 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
651648 else nil
652649 if ((sa == sa))
653650 then {
654651 let sp = if ((prDiff > 0))
655652 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
656653 else nil
657654 if ((sp == sp))
658655 then {
659656 let lpTrnsfr = if (autoStake)
660657 then {
661658 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
662659 if ((ss == ss))
663660 then nil
664661 else throw("Strict value is not equal to itself.")
665662 }
666663 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
667664 (state ++ lpTrnsfr)
668665 }
669666 else throw("Strict value is not equal to itself.")
670667 }
671668 else throw("Strict value is not equal to itself.")
672669 }
673670 else throw("Strict value is not equal to itself.")
674671 }
675672 else throw("Strict value is not equal to itself.")
676673 }
677674 else throw("Strict value is not equal to itself.")
678675 }
679676 }
680677 else throw("Strict value is not equal to itself.")
681678 }
682679
683680
684681
685682 @Callable(i)
686683 func putForFree (maxSlpg) = if ((0 > maxSlpg))
687684 then throw("Wrong slpg")
688685 else if ((size(i.payments) != 2))
689686 then throw("2 pmnts expd")
690687 else {
691688 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, "")
692689 estPut._9
693690 }
694691
695692
696693
697694 @Callable(i)
698695 func get () = {
699696 let r = cg(i)
700697 let outAmtAmt = r._1
701698 let outPrAmt = r._2
702699 let pmtAmt = r._3
703700 let pmtAssetId = r._4
704701 let state = r._5
705702 let b = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
706703 if ((b == b))
707704 then state
708705 else throw("Strict value is not equal to itself.")
709706 }
710707
711708
712709
713710 @Callable(i)
714711 func getOneTkn (exchResult,notUsed,outAmount,outAssetId,slippage) = if ((size(i.payments) != 1))
715712 then throw("1 pmnt expd")
716713 else {
717714 let cfg = gpc()
718715 let lpId = cfg[idxLPAsId]
719716 let amId = cfg[idxAmAsId]
720717 let prId = cfg[idxPrAsId]
721718 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
722719 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
723720 let sts = cfg[idxPoolSt]
724721 let factCfg = gfc()
725722 let gwxCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactGwxRewCntr]), "Wr sl addr")
726723 let pmt = value(i.payments[0])
727724 let addon = valueOrElse(getString(this, ada()), "")
728725 let userAddress = if ((addon == toString(i.caller)))
729726 then i.originCaller
730727 else i.caller
731728 let txId58 = toBase58String(i.transactionId)
732729 let pmtAssetId = value(pmt.assetId)
733730 let pmtAmt = pmt.amount
734731 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
735- let check = reentrantInvoke(addonContract, "ensureCanGetOneTkn", [toString(userAddress)], nil)
732+ let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
736733 if ((check == check))
737734 then if ((1000000000 > pmtAmt))
738735 then throw("Min pmt 10 LP")
739736 else if (if (if ((0 > slippage))
740737 then true
741738 else (0 > exchResult))
742739 then true
743740 else (0 > outAmount))
744741 then throw("Wrong params")
745742 else if ((lpId != toBase58String(pmtAssetId)))
746743 then throw("Wrong LP")
747744 else {
748745 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
749746 let estimAmAmt = r._1
750747 let estimPrAmt = r._2
751748 let amBalance = getAccBalance(amId)
752749 let prBalance = getAccBalance(prId)
753- let $t03024330700 = if ((outAssetId == amId))
750+ let $t03022030677 = if ((outAssetId == amId))
754751 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
755752 else if ((outAssetId == prId))
756753 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
757754 else throw("wrong outAssetId")
758- let amBalanceNow = $t03024330700._1
759- let prBalanceNow = $t03024330700._2
760- let virtSwapInAm = $t03024330700._3
761- let virtSwapOutPr = $t03024330700._4
762- let virtSwapInPr = $t03024330700._5
763- let virtSwapOutAm = $t03024330700._6
764- let totalGet = $t03024330700._7
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
765762 if (if ((0 > virtSwapInAm))
766763 then true
767764 else (0 > virtSwapInPr))
768765 then throw("Wrong calc")
769766 else {
770767 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
771768 let D1 = invoke(gwxCntr, "calcD", [toString(((amBalanceNow - virtSwapInAm) + virtSwapOutAm)), toString(((prBalanceNow + virtSwapOutPr) - virtSwapInPr)), A, Amult, Dconv], nil)
772769 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
773770 if ((D0vsD1 == D0vsD1))
774771 then {
775772 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
776773 if ((finalRes == finalRes))
777774 then {
778- let $t03140531509 = if ((outAssetId == amId))
775+ let $t03138231486 = if ((outAssetId == amId))
779776 then $Tuple2(toInt(finalRes._2), 0)
780777 else $Tuple2(0, toInt(finalRes._2))
781- let outAm = $t03140531509._1
782- let outPr = $t03140531509._2
778+ let outAm = $t03138231486._1
779+ let outPr = $t03138231486._2
783780 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
784781 let curPr = f1(curPrX18, scale8)
785782 let state = [ScriptTransfer(userAddress, (outAm + outPr), if ((outAssetId == "WAVES"))
786783 then unit
787784 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)]
788785 if ((state == state))
789786 then {
790787 let burn = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
791788 if ((burn == burn))
792789 then state
793790 else throw("Strict value is not equal to itself.")
794791 }
795792 else throw("Strict value is not equal to itself.")
796793 }
797794 else throw("Strict value is not equal to itself.")
798795 }
799796 else throw("Strict value is not equal to itself.")
800797 }
801798 }
802799 else throw("Strict value is not equal to itself.")
803800 }
804801
805802
806803
807804 @Callable(i)
808805 func getNoLess (noLessThenAmtAsset,noLessThenPriceAsset) = {
809806 let r = cg(i)
810807 let outAmAmt = r._1
811808 let outPrAmt = r._2
812809 let pmtAmt = r._3
813810 let pmtAssetId = r._4
814811 let state = r._5
815812 if ((noLessThenAmtAsset > outAmAmt))
816813 then throw(((("Failed: " + toString(outAmAmt)) + " < ") + toString(noLessThenAmtAsset)))
817814 else if ((noLessThenPriceAsset > outPrAmt))
818815 then throw(((("Failed: " + toString(outPrAmt)) + " < ") + toString(noLessThenPriceAsset)))
819816 else {
820817 let burnLPAssetOnFactory = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
821818 if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
822819 then state
823820 else throw("Strict value is not equal to itself.")
824821 }
825822 }
826823
827824
828825
829826 @Callable(i)
830827 func unstakeAndGet (amount) = {
831828 let checkPayments = if ((size(i.payments) != 0))
832829 then throw("No pmnts expd")
833830 else true
834831 if ((checkPayments == checkPayments))
835832 then {
836833 let cfg = gpc()
837834 let factoryCfg = gfc()
838835 let lpAssetId = fromBase58String(cfg[idxLPAsId])
839836 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
840837 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
841838 if ((unstakeInv == unstakeInv))
842839 then {
843840 let r = ego(toBase58String(i.transactionId), toBase58String(lpAssetId), amount, i.caller)
844841 let sts = parseIntValue(r._9)
845842 let state = r._10
846843 let v = if (if (igs())
847844 then true
848845 else (sts == PoolShutdown))
849846 then throw(("Blocked: " + toString(sts)))
850847 else true
851848 if ((v == v))
852849 then {
853850 let burnA = invoke(fca, "burn", [amount], [AttachedPayment(lpAssetId, amount)])
854851 if ((burnA == burnA))
855852 then state
856853 else throw("Strict value is not equal to itself.")
857854 }
858855 else throw("Strict value is not equal to itself.")
859856 }
860857 else throw("Strict value is not equal to itself.")
861858 }
862859 else throw("Strict value is not equal to itself.")
863860 }
864861
865862
866863
867864 @Callable(i)
868865 func activate (amtAsStr,prAsStr) = if ((toString(i.caller) != toString(fca)))
869866 then throw("denied")
870867 else $Tuple2([StringEntry(aa(), amtAsStr), StringEntry(pa(), prAsStr)], "success")
871868
872869
873870
874871 @Callable(i)
875872 func setS (k,v) = if ((toString(i.caller) != strf(this, ada())))
876873 then pd
877874 else [StringEntry(k, v)]
878875
879876
880877
881878 @Callable(i)
882879 func setI (k,v) = if ((toString(i.caller) != strf(this, ada())))
883880 then pd
884881 else [IntegerEntry(k, v)]
885882
886883
887884
888885 @Callable(i)
889886 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, gpc())
890887
891888
892889
893890 @Callable(i)
894891 func getAccBalanceWrapperREADONLY (assetId) = $Tuple2(nil, getAccBalance(assetId))
895892
896893
897894
898895 @Callable(i)
899896 func calcPricesWrapperREADONLY (amAmt,prAmt,lpAmt) = {
900897 let pr = calcPrices(amAmt, prAmt, lpAmt)
901898 $Tuple2(nil, [toString(pr[0]), toString(pr[1]), toString(pr[2])])
902899 }
903900
904901
905902
906903 @Callable(i)
907904 func fromX18WrapperREADONLY (val,resScaleMult) = $Tuple2(nil, f1(parseBigIntValue(val), resScaleMult))
908905
909906
910907
911908 @Callable(i)
912909 func toX18WrapperREADONLY (origVal,origScaleMult) = $Tuple2(nil, toString(t1(origVal, origScaleMult)))
913910
914911
915912
916913 @Callable(i)
917914 func calcPriceBigIntWrapperREADONLY (prAmtX18,amAmtX18) = $Tuple2(nil, toString(cpbi(parseBigIntValue(prAmtX18), parseBigIntValue(amAmtX18))))
918915
919916
920917
921918 @Callable(i)
922919 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, ""))
923920
924921
925922
926923 @Callable(i)
927924 func estimateGetOperationWrapperREADONLY (txId58,pmtAsId,pmtLpAmt,usrAddr) = {
928925 let r = ego(txId58, pmtAsId, pmtLpAmt, addressFromStringValue(usrAddr))
929926 $Tuple2(nil, $Tuple10(r._1, r._2, r._3, r._4, r._5, r._6, r._7, toString(r._8), r._9, r._10))
930927 }
931928
932929
933930 @Verifier(tx)
934931 func verify () = match tx {
935932 case order: Order =>
936933 let mtchPub = mp()
937934 let orV = moa(order)
938935 let sndrV = sigVerify(order.bodyBytes, order.proofs[0], order.senderPublicKey)
939936 let mtchV = sigVerify(order.bodyBytes, order.proofs[1], mtchPub)
940937 if (if (if (orV)
941938 then sndrV
942939 else false)
943940 then mtchV
944941 else false)
945942 then true
946943 else toe(orV, sndrV, mtchV)
947944 case _ =>
948945 let targetPublicKey = match m() {
949946 case pk: ByteVector =>
950947 pk
951948 case _: Unit =>
952949 tx.senderPublicKey
953950 case _ =>
954951 throw("Match error")
955952 }
956953 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
957954 }
958955

github/deemru/w8io/169f3d6 
122.64 ms