tx · 58coyhUerTgN6oknFtZsWA1RybVwhozFSRrwWsPfxSw8

3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT:  -0.03900000 Waves

2022.08.29 12:54 [2205594] smart account 3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT > SELF 0.00000000 Waves

{ "type": 13, "id": "58coyhUerTgN6oknFtZsWA1RybVwhozFSRrwWsPfxSw8", "fee": 3900000, "feeAssetId": null, "timestamp": 1661766850714, "version": 2, "chainId": 84, "sender": "3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT", "senderPublicKey": "D1BL65meykxFZTCuq7jq9HSGLLnWvQamQPUNrguW5w39", "proofs": [ "219Z5JrfyqcC11LCDNwu1W2XhgH9oswz6qq91ACUFs6S3AcVZvPCmcwPQ2pCVjVVgjbeojs1G7RhAu7eCDJ7wbi8" ], "script": "base64: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CWlkeFBvb2xTdAQAAAAEbHBFbQgJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAA+wAAAABBQAAAARscElkAgAAAAhXciBscCBhcwAAAAhxdWFudGl0eQQAAAAJYW1CYWxhbmNlAwUAAAAGaXNFdmFsCQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAAB2FtSWRTdHIDAwUAAAAKaXNPbmVBc3NldAkAAAAAAAACBQAAAAVwbXRJZAUAAAAHYW1JZFN0cgcJAABlAAAAAgkBAAAADWdldEFjY0JhbGFuY2UAAAABBQAAAAdhbUlkU3RyBQAAAAZwbXRBbXQDBQAAAAppc09uZUFzc2V0CQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAAB2FtSWRTdHIJAABlAAAAAgkBAAAADWdldEFjY0JhbGFuY2UAAAABBQAAAAdhbUlkU3RyBQAAAAdpbkFtQW10BAAAAAlwckJhbGFuY2UDBQAAAAZpc0V2YWwJAQAAAA1nZXRBY2NCYWxhbmNlAAAAAQUAAAAHcHJJZFN0cgMDBQAAAAppc09uZUFzc2V0CQAAAAAAAAIFAAAABXBtdElkBQAAAAdwcklkU3RyBwkAAGUAAAACCQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAAB3BySWRTdHIFAAAABnBtdEFtdAMFAAAACmlzT25lQXNzZXQJAQAAAA1nZXRBY2NCYWxhbmNlAAAAAQUAAAAHcHJJZFN0cgkAAGUAAAACCQEAAAANZ2V0QWNjQmFsYW5jZQAAAAEFAAAAB3BySWRTdHIFAAAAB2luUHJBbXQEAAAAD2luQW1Bc3NldEFtdFgxOAkBAAAAAnQxAAAAAgUAAAAHaW5BbUFtdAUAAAAGYW10RGNtBAAAAA9pblByQXNzZXRBbXRYMTgJAQAAAAJ0MQAAAAIFAAAAB2luUHJBbXQFAAAACHByaWNlRGNtBAAAAAx1c2VyUHJpY2VYMTgJAQAAAARjcGJpAAAAAgUAAAAPaW5QckFzc2V0QW10WDE4BQAAAA9pbkFtQXNzZXRBbXRYMTgEAAAADGFtQmFsYW5jZVgxOAkBAAAAAnQxAAAAAgUAAAAJYW1CYWxhbmNlBQAAAAZhbXREY20EAAAADHByQmFsYW5jZVgxOAkBAAAAAnQxAAAAAgUAAAAJcHJCYWxhbmNlBQAAAAhwcmljZURjbQQAAAABcgMJAAAAAAAAAgUAAAAEbHBFbQAAAAAAAAAAAAQAAAALY3VyUHJpY2VYMTgFAAAACnplcm9CaWdJbnQEAAAAC3NsaXBwYWdlWDE4BQAAAAp6ZXJvQmlnSW50BAAAAAhscEFtdFgxOAkAAHYAAAAGCQABOQAAAAIFAAAAD2luQW1Bc3NldEFtdFgxOAUAAAAPaW5QckFzc2V0QW10WDE4AAAAAAAAAAAACQABNgAAAAEAAAAAAAAAAAUAAAAAAAAAAAEAAAAAAAAAAAAFAAAABERPV04JAAUXAAAABQkBAAAAAmYxAAAAAgUAAAAIbHBBbXRYMTgFAAAABnNjYWxlOAkBAAAAAmYxAAAAAgUAAAAPaW5BbUFzc2V0QW10WDE4BQAAAAZhbXREY20JAQAAAAJmMQAAAAIFAAAAD2luUHJBc3NldEFtdFgxOAUAAAAIcHJpY2VEY20JAQAAAARjcGJpAAAAAgkAATcAAAACBQAAAAxwckJhbGFuY2VYMTgFAAAAD2luUHJBc3NldEFtdFgxOAkAATcAAAACBQAAAAxhbUJhbGFuY2VYMTgFAAAAD2luQW1Bc3NldEFtdFgxOAUAAAALc2xpcHBhZ2VYMTgEAAAAC2N1clByaWNlWDE4CQEAAAAEY3BiaQAAAAIFAAAADHByQmFsYW5jZVgxOAUAAAAMYW1CYWxhbmNlWDE4BAAAAA9zbGlwcGFnZVJlYWxYMTgJAAE8AAAAAwkBAAAAA2FicwAAAAEJAAE4AAAAAgUAAAALY3VyUHJpY2VYMTgFAAAADHVzZXJQcmljZVgxOAUAAAAHc2NhbGUxOAUAAAALY3VyUHJpY2VYMTgEAAAAC3NsaXBwYWdlWDE4CQEAAAACdDEAAAACBQAAAAhzbGlwcGFnZQUAAAAGc2NhbGU4AwMJAQAAAAIhPQAAAAIFAAAAC2N1clByaWNlWDE4BQAAAAp6ZXJvQmlnSW50CQABPwAAAAIFAAAAD3NsaXBwYWdlUmVhbFgxOAUAAAALc2xpcHBhZ2VYMTgHCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAD1ByaWNlIHNsaXBwYWdlIAkAAaYAAAABBQAAAA9zbGlwcGFnZVJlYWxYMTgCAAAAAyA+IAkAAaYAAAABBQAAAAtzbGlwcGFnZVgxOAQAAAANbHBFbWlzc2lvblgxOAkBAAAAAnQxAAAAAgUAAAAEbHBFbQUAAAAGc2NhbGU4BAAAAApwclZpYUFtWDE4CQABPAAAAAMFAAAAD2luQW1Bc3NldEFtdFgxOAUAAAALY3VyUHJpY2VYMTgFAAAAB3NjYWxlMTgEAAAACmFtVmlhUHJYMTgJAAE8AAAAAwUAAAAPaW5QckFzc2V0QW10WDE4BQAAAAdzY2FsZTE4BQAAAAtjdXJQcmljZVgxOAQAAAAMZXhwZWN0ZWRBbXRzAwkAAT8AAAACBQAAAApwclZpYUFtWDE4BQAAAA9pblByQXNzZXRBbXRYMTgJAAUUAAAAAgUAAAAKYW1WaWFQclgxOAUAAAAPaW5QckFzc2V0QW10WDE4CQAFFAAAAAIFAAAAD2luQW1Bc3NldEFtdFgxOAUAAAAKcHJWaWFBbVgxOAQAAAARZXhwQW10QXNzZXRBbXRYMTgIBQAAAAxleHBlY3RlZEFtdHMAAAACXzEEAAAAE2V4cFByaWNlQXNzZXRBbXRYMTgIBQAAAAxleHBlY3RlZEFtdHMAAAACXzIEAAAACGxwQW10WDE4CQABPAAAAAMFAAAADWxwRW1pc3Npb25YMTgFAAAAE2V4cFByaWNlQXNzZXRBbXRYMTgFAAAADHByQmFsYW5jZVgxOAkABRcAAAAFCQEAAAACZjEAAAACBQAAAAhscEFtdFgxOAUAAAAGc2NhbGU4CQEAAAACZjEAAAACBQAAABFleHBBbXRBc3NldEFtdFgxOAUAAAAGYW10RGNtCQEAAAACZjEAAAACBQAAABNleHBQcmljZUFzc2V0QW10WDE4BQAAAAhwcmljZURjbQUAAAALY3VyUHJpY2VYMTgFAAAAC3NsaXBwYWdlWDE4BAAAAAljYWxjTHBBbXQIBQAAAAFyAAAAAl8xBAAAAA5jYWxjQW1Bc3NldFBtdAgFAAAAAXIAAAACXzIEAAAADmNhbGNQckFzc2V0UG10CAUAAAABcgAAAAJfMwQAAAAIY3VyUHJpY2UJAQAAAAJmMQAAAAIIBQAAAAFyAAAAAl80BQAAAAZzY2FsZTgEAAAADHNsaXBwYWdlQ2FsYwkBAAAAAmYxAAAAAggFAAAAAXIAAAACXzUFAAAABnNjYWxlOAMJAABn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Z2V0QWNjQmFsYW5jZQAAAAEFAAAABGFtSWQEAAAACXByQmFsYW5jZQkBAAAADWdldEFjY0JhbGFuY2UAAAABBQAAAARwcklkBAAAAA0kdDAyNDY5MTI1MjY3AwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAARhbUlkAwMJAABmAAAAAgUAAAAGcG10QW10BQAAAAlhbUJhbGFuY2UGCQAAZgAAAAIFAAAAC2FtQXNzZXRQYXJ0BQAAAAZwbXRBbXQJAAACAAAAAQIAAAAWaW52YWxpZCBwYXltZW50IGFtb3VudAkABRgAAAAGCQAAZQAAAAIFAAAACWFtQmFsYW5jZQUAAAAGcG10QW10BQAAAAlwckJhbGFuY2UJAABlAAAAAgUAAAAGcG10QW10BQAAAAthbUFzc2V0UGFydAUAAAALcHJBc3NldFBhcnQAAAAAAAAAAAAAAAAAAAAAAAADCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAABHBySWQDAwkAAGYAAAACBQAAAAZwbXRBbXQFAAAACXByQmFsYW5jZQYJAABmAAAAAgUAAAALcHJBc3NldFBhcnQFAAAABnBtdEFtdAkAAAIAAAABAgAAABZpbnZhbGlkIHBheW1lbnQgYW1vdW50CQAFGAAAAAYFAAAACWFtQmFsYW5jZQkAAGUAAAACBQAAAAlwckJhbGFuY2UFAAAABnBtdEFtdAAAAAAAAAAAAAAAAAAAAAAAAAkAAGUAAAACBQAAAAZwbXRBbXQFAAAAC3ByQXNzZXRQYXJ0BQAAAAthbUFzc2V0UGFydAkAAAIAAAABAgAAABB3cm9uZyBwbXRBc3NldElkBAAAAAxhbUJhbGFuY2VOb3cIBQAAAA0kdDAyNDY5MTI1MjY3AAAAAl8xBAAAAAxwckJhbGFuY2VOb3cIBQAAAA0kdDAyNDY5MTI1MjY3AAAAAl8yBAAAAAx2aXJ0U3dhcEluQW0IBQAAAA0kdDAyNDY5MTI1MjY3AAAAAl8zBAAAAA12aXJ0U3dhcE91dFByCAUAAAANJHQwMjQ2OTEyNTI2NwAAAAJfNAQAAAAMdmlydFN3YXBJblByCAUAAAANJHQwMjQ2OTEyNTI2NwAAAAJfNQQAAAANdmlydFN3YXBPdXRBbQgFAAAADSR0MDI0NjkxMjUyNjcAAAACXzYE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", "height": 2205594, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: JBV71toHJEb23vP5QsKY4nUgVRWNayKebyeB9cE6wDkE Next: 2ZcMt7cwgMM14AL65mfXEuTRnvj4PrjaLMXSMNDHKsiM Diff:
OldNewDifferences
610610 let $t02447924531 = takeFee(paymentAmountRaw)
611611 let pmtAmt = $t02447924531._1
612612 let feeAmount = $t02447924531._2
613- if ((10000000 > pmtAmt))
613+ if ((10000000 > paymentAmountRaw))
614614 then throw("Wrong pmt amt")
615615 else {
616616 let amBalance = getAccBalance(amId)
617617 let prBalance = getAccBalance(prId)
618- let $t02468125257 = if ((pmtAssetId == amId))
618+ let $t02469125267 = if ((pmtAssetId == amId))
619619 then if (if ((pmtAmt > amBalance))
620620 then true
621621 else (amAssetPart > pmtAmt))
628628 then throw("invalid payment amount")
629629 else $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
630630 else throw("wrong pmtAssetId")
631- let amBalanceNow = $t02468125257._1
632- let prBalanceNow = $t02468125257._2
633- let virtSwapInAm = $t02468125257._3
634- let virtSwapOutPr = $t02468125257._4
635- let virtSwapInPr = $t02468125257._5
636- let virtSwapOutAm = $t02468125257._6
631+ let amBalanceNow = $t02469125267._1
632+ let prBalanceNow = $t02469125267._2
633+ let virtSwapInAm = $t02469125267._3
634+ let virtSwapOutPr = $t02469125267._4
635+ let virtSwapInPr = $t02469125267._5
636+ let virtSwapOutAm = $t02469125267._6
637637 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
638638 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
639639 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
761761 let estimPrAmt = r._2
762762 let amBalance = getAccBalance(amId)
763763 let prBalance = getAccBalance(prId)
764- let $t03019530652 = if ((outAssetId == amId))
764+ let $t03020530665 = if ((outAssetId == amId))
765765 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
766766 else if ((outAssetId == prId))
767767 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
768768 else throw("wrong outAssetId")
769- let amBalanceNow = $t03019530652._1
770- let prBalanceNow = $t03019530652._2
771- let virtSwapInAm = $t03019530652._3
772- let virtSwapOutPr = $t03019530652._4
773- let virtSwapInPr = $t03019530652._5
774- let virtSwapOutAm = $t03019530652._6
775- let totalGet = $t03019530652._7
769+ let amBalanceNow = $t03020530665._1
770+ let prBalanceNow = $t03020530665._2
771+ let virtSwapInAm = $t03020530665._3
772+ let virtSwapOutPr = $t03020530665._4
773+ let virtSwapInPr = $t03020530665._5
774+ let virtSwapOutAm = $t03020530665._6
775+ let totalGetRaw = $t03020530665._7
776776 if (if ((0 > virtSwapInAm))
777777 then true
778778 else (0 > virtSwapInPr))
783783 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
784784 if ((D0vsD1 == D0vsD1))
785785 then {
786+ let totalGet = takeFee(totalGetRaw)._1
786787 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
787788 if ((finalRes == finalRes))
788789 then {
789- let $t03135731461 = if ((outAssetId == amId))
790+ let $t03141231516 = if ((outAssetId == amId))
790791 then $Tuple2(toInt(finalRes._2), 0)
791792 else $Tuple2(0, toInt(finalRes._2))
792- let outAm = $t03135731461._1
793- let outPr = $t03135731461._2
794- let totalAmountRaw = (outAm + outPr)
795- let $t03150131556 = takeFee(totalAmountRaw)
796- let totalAmount = $t03150131556._1
797- let feeAmount = $t03150131556._2
793+ let outAm = $t03141231516._1
794+ let outPr = $t03141231516._2
795+ let totalAmount = (outAm + outPr)
796+ let feeAmount = (totalGetRaw - totalGet)
798797 let outAssetIdOrWaves = if ((outAssetId == "WAVES"))
799798 then unit
800799 else fromBase58String(outAssetId)
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 thousand = 1000
1111
1212 let zeroBigInt = toBigInt(0)
1313
1414 let oneBigInt = toBigInt(1)
1515
1616 let slippage4D = toBigInt((scale8 - ((scale8 * 1) / scale8)))
1717
1818 let Amult = "100"
1919
2020 let Dconv = "1"
2121
2222 let SEP = "__"
2323
2424 let EMPTY = ""
2525
2626 let PoolActive = 1
2727
2828 let PoolPutDis = 2
2929
3030 let PoolMatcherDis = 3
3131
3232 let PoolShutdown = 4
3333
3434 let idxPoolAddress = 1
3535
3636 let idxPoolSt = 2
3737
3838 let idxLPAsId = 3
3939
4040 let idxAmAsId = 4
4141
4242 let idxPrAsId = 5
4343
4444 let idxAmtAsDcm = 6
4545
4646 let idxPriceAsDcm = 7
4747
4848 let idxIAmtAsId = 8
4949
5050 let idxIPriceAsId = 9
5151
5252 let idxFactStakCntr = 1
5353
5454 let idxFactSlippCntr = 7
5555
5656 let idxFactGwxRewCntr = 10
5757
5858 let feePermilleDefault = 0
5959
6060 func t1 (origVal,origScaleMult) = fraction(toBigInt(origVal), scale18, toBigInt(origScaleMult))
6161
6262
6363 func f1 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), scale18))
6464
6565
6666 func ts (amt,resScale,curScale) = fraction(amt, resScale, curScale)
6767
6868
6969 func abs (val) = if ((zeroBigInt > val))
7070 then -(val)
7171 else val
7272
7373
7474 func fc () = "%s__factoryContract"
7575
7676
7777 func mpk () = "%s__managerPublicKey"
7878
7979
8080 func pmpk () = "%s__pendingManagerPublicKey"
8181
8282
8383 func pl () = "%s%s__price__last"
8484
8585
8686 func ph (h,t) = makeString(["%s%s%d%d__price__history", toString(h), toString(t)], SEP)
8787
8888
8989 func pau (ua,txId) = ((("%s%s%s__P__" + ua) + "__") + txId)
9090
9191
9292 func gau (ua,txId) = ((("%s%s%s__G__" + ua) + "__") + txId)
9393
9494
9595 func aa () = "%s__amountAsset"
9696
9797
9898 func pa () = "%s__priceAsset"
9999
100100
101101 func amp () = "%s__amp"
102102
103103
104104 func ada () = "%s__addonAddr"
105105
106106
107107 let keyFeePermille = "%s__feePermille"
108108
109109 let feePermille = valueOrElse(getInteger(this, keyFeePermille), feePermilleDefault)
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 let matcherAddress = addressFromPublicKey(mp())
154154
155155 func gpc () = {
156156 let amtAs = strf(this, aa())
157157 let priceAs = strf(this, pa())
158158 let iPriceAs = intf(fca, mba(priceAs))
159159 let iAmtAs = intf(fca, mba(amtAs))
160160 split(strf(fca, pc(toString(iAmtAs), toString(iPriceAs))), SEP)
161161 }
162162
163163
164164 func gfc () = split(strf(fca, fcfg()), SEP)
165165
166166
167167 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)
168168
169169
170170 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)
171171
172172
173173 func getAccBalance (assetId) = if ((assetId == "WAVES"))
174174 then wavesBalance(this).available
175175 else assetBalance(this, fromBase58String(assetId))
176176
177177
178178 func cpbi (prAmtX18,amAmtX18) = fraction(prAmtX18, scale18, amAmtX18)
179179
180180
181181 func vad (A1,A2,slippage) = {
182182 let diff = fraction((A1 - A2), scale8BigInt, A2)
183183 let pass = ((slippage - abs(diff)) > zeroBigInt)
184184 if (!(pass))
185185 then throw(("Big slpg: " + toString(diff)))
186186 else $Tuple2(pass, min([A1, A2]))
187187 }
188188
189189
190190 func vd (D1,D0,slpg) = {
191191 let diff = fraction(D0, scale8BigInt, D1)
192192 let fail = (slpg > diff)
193193 if (if (fail)
194194 then true
195195 else (D0 > D1))
196196 then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
197197 else fail
198198 }
199199
200200
201201 func pcp (amAssetDcm,prAssetDcm,amAmt,prAmt) = {
202202 let amtAsAmtX18 = t1(amAmt, amAssetDcm)
203203 let prAsAmtX18 = t1(prAmt, prAssetDcm)
204204 cpbi(prAsAmtX18, amtAsAmtX18)
205205 }
206206
207207
208208 func calcPrices (amAmt,prAmt,lpAmt) = {
209209 let cfg = gpc()
210210 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
211211 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
212212 let priceX18 = pcp(amtAsDcm, prAsDcm, amAmt, prAmt)
213213 let amAmtX18 = t1(amAmt, amtAsDcm)
214214 let prAmtX18 = t1(prAmt, prAsDcm)
215215 let lpAmtX18 = t1(lpAmt, scale8)
216216 let lpPrInAmAsX18 = cpbi(amAmtX18, lpAmtX18)
217217 let lpPrInPrAsX18 = cpbi(prAmtX18, lpAmtX18)
218218 [priceX18, lpPrInAmAsX18, lpPrInPrAsX18]
219219 }
220220
221221
222222 func calculatePrices (amAmt,prAmt,lpAmt) = {
223223 let p = calcPrices(amAmt, prAmt, lpAmt)
224224 [f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)]
225225 }
226226
227227
228228 func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
229229 let cfg = gpc()
230230 let lpId = cfg[idxLPAsId]
231231 let amId = cfg[idxAmAsId]
232232 let prId = cfg[idxPrAsId]
233233 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
234234 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
235235 let sts = cfg[idxPoolSt]
236236 let lpEmiss = valueOrErrorMessage(assetInfo(fromBase58String(lpId)), "Wrong LP id").quantity
237237 if ((lpId != pmtAssetId))
238238 then throw("Wrong pmt asset")
239239 else {
240240 let amBalance = getAccBalance(amId)
241241 let amBalanceX18 = t1(amBalance, amDcm)
242242 let prBalance = getAccBalance(prId)
243243 let prBalanceX18 = t1(prBalance, prDcm)
244244 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
245245 let curPrice = f1(curPriceX18, scale8)
246246 let pmtLpAmtX18 = t1(pmtLpAmt, scale8)
247247 let lpEmissX18 = t1(lpEmiss, scale8)
248248 let outAmAmtX18 = fraction(amBalanceX18, pmtLpAmtX18, lpEmissX18)
249249 let outPrAmtX18 = fraction(prBalanceX18, pmtLpAmtX18, lpEmissX18)
250250 let outAmAmt = f1(outAmAmtX18, amDcm)
251251 let outPrAmt = f1(outPrAmtX18, prDcm)
252252 let state = if ((txId58 == ""))
253253 then nil
254254 else [ScriptTransfer(userAddress, outAmAmt, if ((amId == "WAVES"))
255255 then unit
256256 else fromBase58String(amId)), ScriptTransfer(userAddress, outPrAmt, if ((prId == "WAVES"))
257257 then unit
258258 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)]
259259 $Tuple10(outAmAmt, outPrAmt, amId, prId, amBalance, prBalance, lpEmiss, curPriceX18, sts, state)
260260 }
261261 }
262262
263263
264264 func epo (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,userAddress,isEval,emitLp,isOneAsset,pmtAmt,pmtId) = {
265265 let cfg = gpc()
266266 let lpId = fromBase58String(cfg[idxLPAsId])
267267 let amIdStr = cfg[idxAmAsId]
268268 let prIdStr = cfg[idxPrAsId]
269269 let inAmIdStr = cfg[idxIAmtAsId]
270270 let inPrIdStr = cfg[idxIPriceAsId]
271271 let amtDcm = parseIntValue(cfg[idxAmtAsDcm])
272272 let priceDcm = parseIntValue(cfg[idxPriceAsDcm])
273273 let sts = cfg[idxPoolSt]
274274 let lpEm = valueOrErrorMessage(assetInfo(lpId), "Wr lp as").quantity
275275 let amBalance = if (isEval)
276276 then getAccBalance(amIdStr)
277277 else if (if (isOneAsset)
278278 then (pmtId == amIdStr)
279279 else false)
280280 then (getAccBalance(amIdStr) - pmtAmt)
281281 else if (isOneAsset)
282282 then getAccBalance(amIdStr)
283283 else (getAccBalance(amIdStr) - inAmAmt)
284284 let prBalance = if (isEval)
285285 then getAccBalance(prIdStr)
286286 else if (if (isOneAsset)
287287 then (pmtId == prIdStr)
288288 else false)
289289 then (getAccBalance(prIdStr) - pmtAmt)
290290 else if (isOneAsset)
291291 then getAccBalance(prIdStr)
292292 else (getAccBalance(prIdStr) - inPrAmt)
293293 let inAmAssetAmtX18 = t1(inAmAmt, amtDcm)
294294 let inPrAssetAmtX18 = t1(inPrAmt, priceDcm)
295295 let userPriceX18 = cpbi(inPrAssetAmtX18, inAmAssetAmtX18)
296296 let amBalanceX18 = t1(amBalance, amtDcm)
297297 let prBalanceX18 = t1(prBalance, priceDcm)
298298 let r = if ((lpEm == 0))
299299 then {
300300 let curPriceX18 = zeroBigInt
301301 let slippageX18 = zeroBigInt
302302 let lpAmtX18 = pow((inAmAssetAmtX18 * inPrAssetAmtX18), 0, toBigInt(5), 1, 0, DOWN)
303303 $Tuple5(f1(lpAmtX18, scale8), f1(inAmAssetAmtX18, amtDcm), f1(inPrAssetAmtX18, priceDcm), cpbi((prBalanceX18 + inPrAssetAmtX18), (amBalanceX18 + inAmAssetAmtX18)), slippageX18)
304304 }
305305 else {
306306 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
307307 let slippageRealX18 = fraction(abs((curPriceX18 - userPriceX18)), scale18, curPriceX18)
308308 let slippageX18 = t1(slippage, scale8)
309309 if (if ((curPriceX18 != zeroBigInt))
310310 then (slippageRealX18 > slippageX18)
311311 else false)
312312 then throw(((("Price slippage " + toString(slippageRealX18)) + " > ") + toString(slippageX18)))
313313 else {
314314 let lpEmissionX18 = t1(lpEm, scale8)
315315 let prViaAmX18 = fraction(inAmAssetAmtX18, curPriceX18, scale18)
316316 let amViaPrX18 = fraction(inPrAssetAmtX18, scale18, curPriceX18)
317317 let expectedAmts = if ((prViaAmX18 > inPrAssetAmtX18))
318318 then $Tuple2(amViaPrX18, inPrAssetAmtX18)
319319 else $Tuple2(inAmAssetAmtX18, prViaAmX18)
320320 let expAmtAssetAmtX18 = expectedAmts._1
321321 let expPriceAssetAmtX18 = expectedAmts._2
322322 let lpAmtX18 = fraction(lpEmissionX18, expPriceAssetAmtX18, prBalanceX18)
323323 $Tuple5(f1(lpAmtX18, scale8), f1(expAmtAssetAmtX18, amtDcm), f1(expPriceAssetAmtX18, priceDcm), curPriceX18, slippageX18)
324324 }
325325 }
326326 let calcLpAmt = r._1
327327 let calcAmAssetPmt = r._2
328328 let calcPrAssetPmt = r._3
329329 let curPrice = f1(r._4, scale8)
330330 let slippageCalc = f1(r._5, scale8)
331331 if ((0 >= calcLpAmt))
332332 then throw("LP <= 0")
333333 else {
334334 let emitLpAmt = if (!(emitLp))
335335 then 0
336336 else calcLpAmt
337337 let amDiff = (inAmAmt - calcAmAssetPmt)
338338 let prDiff = (inPrAmt - calcPrAssetPmt)
339339 let $t01551715862 = if (if (isOneAsset)
340340 then (pmtId == amIdStr)
341341 else false)
342342 then $Tuple2(pmtAmt, 0)
343343 else if (if (isOneAsset)
344344 then (pmtId == prIdStr)
345345 else false)
346346 then $Tuple2(0, pmtAmt)
347347 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
348348 let writeAmAmt = $t01551715862._1
349349 let writePrAmt = $t01551715862._2
350350 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))]
351351 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
352352 }
353353 }
354354
355355
356356 func moa (order) = {
357357 let cfg = gpc()
358358 let amtAsId = cfg[idxAmAsId]
359359 let prAsId = cfg[idxPrAsId]
360360 let sts = parseIntValue(cfg[idxPoolSt])
361361 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
362362 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
363363 let accAmtAsBalance = getAccBalance(amtAsId)
364364 let accPrAsBalance = getAccBalance(prAsId)
365365 let curPriceX18 = if ((order.orderType == Buy))
366366 then pcp(amtAsDcm, prAsDcm, (accAmtAsBalance + order.amount), accPrAsBalance)
367367 else pcp(amtAsDcm, prAsDcm, (accAmtAsBalance - order.amount), accPrAsBalance)
368368 let curPrice = f1(curPriceX18, scale8)
369369 if (if (if (igs())
370370 then true
371371 else (sts == PoolMatcherDis))
372372 then true
373373 else (sts == PoolShutdown))
374374 then throw("Admin blocked")
375375 else {
376376 let orAmtAsset = order.assetPair.amountAsset
377377 let orAmtAsStr = if ((orAmtAsset == unit))
378378 then "WAVES"
379379 else toBase58String(value(orAmtAsset))
380380 let orPrAsset = order.assetPair.priceAsset
381381 let orPrAsStr = if ((orPrAsset == unit))
382382 then "WAVES"
383383 else toBase58String(value(orPrAsset))
384384 if (if ((orAmtAsStr != amtAsId))
385385 then true
386386 else (orPrAsStr != prAsId))
387387 then throw("Wr assets")
388388 else {
389389 let orderPrice = order.price
390390 let priceDcm = fraction(scale8, prAsDcm, amtAsDcm)
391391 let castOrderPrice = ts(orderPrice, scale8, priceDcm)
392392 let isOrderPriceValid = if ((order.orderType == Buy))
393393 then (curPrice >= castOrderPrice)
394394 else (castOrderPrice >= curPrice)
395395 true
396396 }
397397 }
398398 }
399399
400400
401401 func cg (i) = if ((size(i.payments) != 1))
402402 then throw("1 pmnt exp")
403403 else {
404404 let pmt = value(i.payments[0])
405405 let pmtAssetId = value(pmt.assetId)
406406 let pmtAmt = pmt.amount
407407 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
408408 let outAmAmt = r._1
409409 let outPrAmt = r._2
410410 let sts = parseIntValue(r._9)
411411 let state = r._10
412412 if (if (igs())
413413 then true
414414 else (sts == PoolShutdown))
415415 then throw(("Admin blocked: " + toString(sts)))
416416 else $Tuple5(outAmAmt, outPrAmt, pmtAmt, pmtAssetId, state)
417417 }
418418
419419
420420 func cp (caller,txId,amAsPmt,prAsPmt,slippage,emitLp,isOneAsset,pmtAmt,pmtId) = {
421421 let r = epo(txId, slippage, value(amAsPmt).amount, value(amAsPmt).assetId, value(prAsPmt).amount, value(prAsPmt).assetId, caller, false, emitLp, isOneAsset, pmtAmt, pmtId)
422422 let sts = parseIntValue(r._8)
423423 if (if (if (igs())
424424 then true
425425 else (sts == PoolPutDis))
426426 then true
427427 else (sts == PoolShutdown))
428428 then throw(("Blocked:" + toString(sts)))
429429 else r
430430 }
431431
432432
433433 func takeFee (amount) = {
434434 let fee = fraction(amount, feePermille, thousand)
435435 $Tuple2((amount - fee), fee)
436436 }
437437
438438
439439 func m () = match getString(mpk()) {
440440 case s: String =>
441441 fromBase58String(s)
442442 case _: Unit =>
443443 unit
444444 case _ =>
445445 throw("Match error")
446446 }
447447
448448
449449 func pm () = match getString(pmpk()) {
450450 case s: String =>
451451 fromBase58String(s)
452452 case _: Unit =>
453453 unit
454454 case _ =>
455455 throw("Match error")
456456 }
457457
458458
459459 let pd = throw("Permission denied")
460460
461461 func mm (i) = match m() {
462462 case pk: ByteVector =>
463463 if ((i.callerPublicKey == pk))
464464 then true
465465 else pd
466466 case _: Unit =>
467467 if ((i.caller == this))
468468 then true
469469 else pd
470470 case _ =>
471471 throw("Match error")
472472 }
473473
474474
475475 @Callable(i)
476476 func constructor (fc) = {
477477 let c = mm(i)
478478 if ((c == c))
479479 then [StringEntry(fc(), fc)]
480480 else throw("Strict value is not equal to itself.")
481481 }
482482
483483
484484
485485 @Callable(i)
486486 func setManager (pendingManagerPublicKey) = {
487487 let c = mm(i)
488488 if ((c == c))
489489 then {
490490 let cm = fromBase58String(pendingManagerPublicKey)
491491 if ((cm == cm))
492492 then [StringEntry(pmpk(), pendingManagerPublicKey)]
493493 else throw("Strict value is not equal to itself.")
494494 }
495495 else throw("Strict value is not equal to itself.")
496496 }
497497
498498
499499
500500 @Callable(i)
501501 func confirmManager () = {
502502 let p = pm()
503503 let hpm = if (isDefined(p))
504504 then true
505505 else throw("No pending manager")
506506 if ((hpm == hpm))
507507 then {
508508 let cpm = if ((i.callerPublicKey == value(p)))
509509 then true
510510 else throw("You are not pending manager")
511511 if ((cpm == cpm))
512512 then [StringEntry(mpk(), toBase58String(value(p))), DeleteEntry(pmpk())]
513513 else throw("Strict value is not equal to itself.")
514514 }
515515 else throw("Strict value is not equal to itself.")
516516 }
517517
518518
519519
520520 @Callable(i)
521521 func put (slip,autoStake) = {
522522 let factCfg = gfc()
523523 let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
524524 let slipCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactSlippCntr]), "Wr sl addr")
525525 if ((0 > slip))
526526 then throw("Wrong slippage")
527527 else if ((size(i.payments) != 2))
528528 then throw("2 pmnts expd")
529529 else {
530530 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, "")
531531 let emitLpAmt = e._2
532532 let lpAssetId = e._7
533533 let state = e._9
534534 let amDiff = e._10
535535 let prDiff = e._11
536536 let amId = e._12
537537 let prId = e._13
538538 let r = invoke(fca, "emit", [emitLpAmt], nil)
539539 if ((r == r))
540540 then {
541541 let el = match r {
542542 case legacy: Address =>
543543 invoke(legacy, "emit", [emitLpAmt], nil)
544544 case _ =>
545545 unit
546546 }
547547 if ((el == el))
548548 then {
549549 let sa = if ((amDiff > 0))
550550 then invoke(slipCntr, "put", nil, [AttachedPayment(amId, amDiff)])
551551 else nil
552552 if ((sa == sa))
553553 then {
554554 let sp = if ((prDiff > 0))
555555 then invoke(slipCntr, "put", nil, [AttachedPayment(prId, prDiff)])
556556 else nil
557557 if ((sp == sp))
558558 then {
559559 let lpTrnsfr = if (autoStake)
560560 then {
561561 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
562562 if ((ss == ss))
563563 then nil
564564 else throw("Strict value is not equal to itself.")
565565 }
566566 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
567567 (state ++ lpTrnsfr)
568568 }
569569 else throw("Strict value is not equal to itself.")
570570 }
571571 else throw("Strict value is not equal to itself.")
572572 }
573573 else throw("Strict value is not equal to itself.")
574574 }
575575 else throw("Strict value is not equal to itself.")
576576 }
577577 }
578578
579579
580580
581581 @Callable(i)
582582 func putOneTkn (amAssetPart,prAssetPart,outLp,slippage,autoStake) = {
583583 let cfg = gfc()
584584 let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
585585 let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
586586 let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
587587 let poolCfg = gpc()
588588 let amId = poolCfg[idxAmAsId]
589589 let prId = poolCfg[idxPrAsId]
590590 let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
591591 let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
592592 let addon = valueOrElse(getString(this, ada()), "")
593593 let userAddress = if ((addon == toString(i.caller)))
594594 then i.originCaller
595595 else i.caller
596596 if (if (if (if ((0 >= slippage))
597597 then true
598598 else (0 >= amAssetPart))
599599 then true
600600 else (0 >= prAssetPart))
601601 then true
602602 else (0 >= outLp))
603603 then throw("Wrong params")
604604 else if ((size(i.payments) != 1))
605605 then throw("1 pmnt expd")
606606 else {
607607 let pmt = value(i.payments[0])
608608 let pmtAssetId = toBase58String(value(pmt.assetId))
609609 let paymentAmountRaw = pmt.amount
610610 let $t02447924531 = takeFee(paymentAmountRaw)
611611 let pmtAmt = $t02447924531._1
612612 let feeAmount = $t02447924531._2
613- if ((10000000 > pmtAmt))
613+ if ((10000000 > paymentAmountRaw))
614614 then throw("Wrong pmt amt")
615615 else {
616616 let amBalance = getAccBalance(amId)
617617 let prBalance = getAccBalance(prId)
618- let $t02468125257 = if ((pmtAssetId == amId))
618+ let $t02469125267 = if ((pmtAssetId == amId))
619619 then if (if ((pmtAmt > amBalance))
620620 then true
621621 else (amAssetPart > pmtAmt))
622622 then throw("invalid payment amount")
623623 else $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
624624 else if ((pmtAssetId == prId))
625625 then if (if ((pmtAmt > prBalance))
626626 then true
627627 else (prAssetPart > pmtAmt))
628628 then throw("invalid payment amount")
629629 else $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
630630 else throw("wrong pmtAssetId")
631- let amBalanceNow = $t02468125257._1
632- let prBalanceNow = $t02468125257._2
633- let virtSwapInAm = $t02468125257._3
634- let virtSwapOutPr = $t02468125257._4
635- let virtSwapInPr = $t02468125257._5
636- let virtSwapOutAm = $t02468125257._6
631+ let amBalanceNow = $t02469125267._1
632+ let prBalanceNow = $t02469125267._2
633+ let virtSwapInAm = $t02469125267._3
634+ let virtSwapOutPr = $t02469125267._4
635+ let virtSwapInPr = $t02469125267._5
636+ let virtSwapOutAm = $t02469125267._6
637637 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
638638 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
639639 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
640640 if ((D0vsD1 == D0vsD1))
641641 then {
642642 let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
643643 let estimLP = estPut._2
644644 let lpAssetId = estPut._7
645645 let state = estPut._9
646646 let amDiff = estPut._10
647647 let prDiff = estPut._11
648648 let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
649649 let emitLpAmt = toInt(lpCalcRes._2)
650650 let e = invoke(fca, "emit", [emitLpAmt], nil)
651651 if ((e == e))
652652 then {
653653 let el = match e {
654654 case legacy: Address =>
655655 invoke(legacy, "emit", [emitLpAmt], nil)
656656 case _ =>
657657 unit
658658 }
659659 if ((el == el))
660660 then {
661661 let sa = if ((amDiff > 0))
662662 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
663663 else nil
664664 if ((sa == sa))
665665 then {
666666 let sp = if ((prDiff > 0))
667667 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
668668 else nil
669669 if ((sp == sp))
670670 then {
671671 let lpTrnsfr = if (autoStake)
672672 then {
673673 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
674674 if ((ss == ss))
675675 then nil
676676 else throw("Strict value is not equal to itself.")
677677 }
678678 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
679679 let sendFeeToMatcher = if ((feeAmount > 0))
680680 then [ScriptTransfer(matcherAddress, feeAmount, fromBase58String(pmtAssetId))]
681681 else nil
682682 ((state ++ lpTrnsfr) ++ sendFeeToMatcher)
683683 }
684684 else throw("Strict value is not equal to itself.")
685685 }
686686 else throw("Strict value is not equal to itself.")
687687 }
688688 else throw("Strict value is not equal to itself.")
689689 }
690690 else throw("Strict value is not equal to itself.")
691691 }
692692 else throw("Strict value is not equal to itself.")
693693 }
694694 }
695695 }
696696
697697
698698
699699 @Callable(i)
700700 func putForFree (maxSlpg) = if ((0 > maxSlpg))
701701 then throw("Wrong slpg")
702702 else if ((size(i.payments) != 2))
703703 then throw("2 pmnts expd")
704704 else {
705705 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, "")
706706 estPut._9
707707 }
708708
709709
710710
711711 @Callable(i)
712712 func get () = {
713713 let r = cg(i)
714714 let outAmtAmt = r._1
715715 let outPrAmt = r._2
716716 let pmtAmt = r._3
717717 let pmtAssetId = r._4
718718 let state = r._5
719719 let b = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
720720 if ((b == b))
721721 then state
722722 else throw("Strict value is not equal to itself.")
723723 }
724724
725725
726726
727727 @Callable(i)
728728 func getOneTkn (exchResult,notUsed,outAmount,outAssetId,slippage) = if ((size(i.payments) != 1))
729729 then throw("1 pmnt expd")
730730 else {
731731 let cfg = gpc()
732732 let lpId = cfg[idxLPAsId]
733733 let amId = cfg[idxAmAsId]
734734 let prId = cfg[idxPrAsId]
735735 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
736736 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
737737 let sts = cfg[idxPoolSt]
738738 let factCfg = gfc()
739739 let gwxCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactGwxRewCntr]), "Wr sl addr")
740740 let pmt = value(i.payments[0])
741741 let addon = valueOrElse(getString(this, ada()), "")
742742 let userAddress = if ((addon == toString(i.caller)))
743743 then i.originCaller
744744 else i.caller
745745 let txId58 = toBase58String(i.transactionId)
746746 let pmtAssetId = value(pmt.assetId)
747747 let pmtAmt = pmt.amount
748748 if ((1000000000 > pmtAmt))
749749 then throw("Min pmt 10 LP")
750750 else if (if (if ((0 > slippage))
751751 then true
752752 else (0 > exchResult))
753753 then true
754754 else (0 > outAmount))
755755 then throw("Wrong params")
756756 else if ((lpId != toBase58String(pmtAssetId)))
757757 then throw("Wrong LP")
758758 else {
759759 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
760760 let estimAmAmt = r._1
761761 let estimPrAmt = r._2
762762 let amBalance = getAccBalance(amId)
763763 let prBalance = getAccBalance(prId)
764- let $t03019530652 = if ((outAssetId == amId))
764+ let $t03020530665 = if ((outAssetId == amId))
765765 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
766766 else if ((outAssetId == prId))
767767 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
768768 else throw("wrong outAssetId")
769- let amBalanceNow = $t03019530652._1
770- let prBalanceNow = $t03019530652._2
771- let virtSwapInAm = $t03019530652._3
772- let virtSwapOutPr = $t03019530652._4
773- let virtSwapInPr = $t03019530652._5
774- let virtSwapOutAm = $t03019530652._6
775- let totalGet = $t03019530652._7
769+ let amBalanceNow = $t03020530665._1
770+ let prBalanceNow = $t03020530665._2
771+ let virtSwapInAm = $t03020530665._3
772+ let virtSwapOutPr = $t03020530665._4
773+ let virtSwapInPr = $t03020530665._5
774+ let virtSwapOutAm = $t03020530665._6
775+ let totalGetRaw = $t03020530665._7
776776 if (if ((0 > virtSwapInAm))
777777 then true
778778 else (0 > virtSwapInPr))
779779 then throw("Wrong calc")
780780 else {
781781 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
782782 let D1 = invoke(gwxCntr, "calcD", [toString(((amBalanceNow - virtSwapInAm) + virtSwapOutAm)), toString(((prBalanceNow + virtSwapOutPr) - virtSwapInPr)), A, Amult, Dconv], nil)
783783 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
784784 if ((D0vsD1 == D0vsD1))
785785 then {
786+ let totalGet = takeFee(totalGetRaw)._1
786787 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
787788 if ((finalRes == finalRes))
788789 then {
789- let $t03135731461 = if ((outAssetId == amId))
790+ let $t03141231516 = if ((outAssetId == amId))
790791 then $Tuple2(toInt(finalRes._2), 0)
791792 else $Tuple2(0, toInt(finalRes._2))
792- let outAm = $t03135731461._1
793- let outPr = $t03135731461._2
794- let totalAmountRaw = (outAm + outPr)
795- let $t03150131556 = takeFee(totalAmountRaw)
796- let totalAmount = $t03150131556._1
797- let feeAmount = $t03150131556._2
793+ let outAm = $t03141231516._1
794+ let outPr = $t03141231516._2
795+ let totalAmount = (outAm + outPr)
796+ let feeAmount = (totalGetRaw - totalGet)
798797 let outAssetIdOrWaves = if ((outAssetId == "WAVES"))
799798 then unit
800799 else fromBase58String(outAssetId)
801800 let sendFeeToMatcher = if ((feeAmount > 0))
802801 then [ScriptTransfer(matcherAddress, feeAmount, outAssetIdOrWaves)]
803802 else nil
804803 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
805804 let curPr = f1(curPrX18, scale8)
806805 let state = [ScriptTransfer(userAddress, totalAmount, outAssetIdOrWaves), StringEntry(gau(toString(userAddress), txId58), dataGetActionInfo(outAm, outPr, pmtAmt, curPr, height, lastBlock.timestamp)), IntegerEntry(pl(), curPr), IntegerEntry(ph(height, lastBlock.timestamp), curPr)]
807806 if ((state == state))
808807 then {
809808 let burn = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
810809 if ((burn == burn))
811810 then (state ++ sendFeeToMatcher)
812811 else throw("Strict value is not equal to itself.")
813812 }
814813 else throw("Strict value is not equal to itself.")
815814 }
816815 else throw("Strict value is not equal to itself.")
817816 }
818817 else throw("Strict value is not equal to itself.")
819818 }
820819 }
821820 }
822821
823822
824823
825824 @Callable(i)
826825 func getNoLess (noLessThenAmtAsset,noLessThenPriceAsset) = {
827826 let r = cg(i)
828827 let outAmAmt = r._1
829828 let outPrAmt = r._2
830829 let pmtAmt = r._3
831830 let pmtAssetId = r._4
832831 let state = r._5
833832 if ((noLessThenAmtAsset > outAmAmt))
834833 then throw(((("Failed: " + toString(outAmAmt)) + " < ") + toString(noLessThenAmtAsset)))
835834 else if ((noLessThenPriceAsset > outPrAmt))
836835 then throw(((("Failed: " + toString(outPrAmt)) + " < ") + toString(noLessThenPriceAsset)))
837836 else {
838837 let burnLPAssetOnFactory = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
839838 if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
840839 then state
841840 else throw("Strict value is not equal to itself.")
842841 }
843842 }
844843
845844
846845
847846 @Callable(i)
848847 func unstakeAndGet (amount) = {
849848 let checkPayments = if ((size(i.payments) != 0))
850849 then throw("No pmnts expd")
851850 else true
852851 if ((checkPayments == checkPayments))
853852 then {
854853 let cfg = gpc()
855854 let factoryCfg = gfc()
856855 let lpAssetId = fromBase58String(cfg[idxLPAsId])
857856 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
858857 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
859858 if ((unstakeInv == unstakeInv))
860859 then {
861860 let r = ego(toBase58String(i.transactionId), toBase58String(lpAssetId), amount, i.caller)
862861 let sts = parseIntValue(r._9)
863862 let state = r._10
864863 let v = if (if (igs())
865864 then true
866865 else (sts == PoolShutdown))
867866 then throw(("Blocked: " + toString(sts)))
868867 else true
869868 if ((v == v))
870869 then {
871870 let burnA = invoke(fca, "burn", [amount], [AttachedPayment(lpAssetId, amount)])
872871 if ((burnA == burnA))
873872 then state
874873 else throw("Strict value is not equal to itself.")
875874 }
876875 else throw("Strict value is not equal to itself.")
877876 }
878877 else throw("Strict value is not equal to itself.")
879878 }
880879 else throw("Strict value is not equal to itself.")
881880 }
882881
883882
884883
885884 @Callable(i)
886885 func activate (amtAsStr,prAsStr) = if ((toString(i.caller) != toString(fca)))
887886 then throw("denied")
888887 else $Tuple2([StringEntry(aa(), amtAsStr), StringEntry(pa(), prAsStr)], "success")
889888
890889
891890
892891 @Callable(i)
893892 func setS (k,v) = if ((toString(i.caller) != strf(this, ada())))
894893 then pd
895894 else [StringEntry(k, v)]
896895
897896
898897
899898 @Callable(i)
900899 func setI (k,v) = if ((toString(i.caller) != strf(this, ada())))
901900 then pd
902901 else [IntegerEntry(k, v)]
903902
904903
905904
906905 @Callable(i)
907906 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, gpc())
908907
909908
910909
911910 @Callable(i)
912911 func getAccBalanceWrapperREADONLY (assetId) = $Tuple2(nil, getAccBalance(assetId))
913912
914913
915914
916915 @Callable(i)
917916 func calcPricesWrapperREADONLY (amAmt,prAmt,lpAmt) = {
918917 let pr = calcPrices(amAmt, prAmt, lpAmt)
919918 $Tuple2(nil, [toString(pr[0]), toString(pr[1]), toString(pr[2])])
920919 }
921920
922921
923922
924923 @Callable(i)
925924 func fromX18WrapperREADONLY (val,resScaleMult) = $Tuple2(nil, f1(parseBigIntValue(val), resScaleMult))
926925
927926
928927
929928 @Callable(i)
930929 func toX18WrapperREADONLY (origVal,origScaleMult) = $Tuple2(nil, toString(t1(origVal, origScaleMult)))
931930
932931
933932
934933 @Callable(i)
935934 func calcPriceBigIntWrapperREADONLY (prAmtX18,amAmtX18) = $Tuple2(nil, toString(cpbi(parseBigIntValue(prAmtX18), parseBigIntValue(amAmtX18))))
936935
937936
938937
939938 @Callable(i)
940939 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, ""))
941940
942941
943942
944943 @Callable(i)
945944 func estimateGetOperationWrapperREADONLY (txId58,pmtAsId,pmtLpAmt,usrAddr) = {
946945 let r = ego(txId58, pmtAsId, pmtLpAmt, addressFromStringValue(usrAddr))
947946 $Tuple2(nil, $Tuple10(r._1, r._2, r._3, r._4, r._5, r._6, r._7, toString(r._8), r._9, r._10))
948947 }
949948
950949
951950 @Verifier(tx)
952951 func verify () = match tx {
953952 case order: Order =>
954953 let mtchPub = mp()
955954 let orV = moa(order)
956955 let sndrV = sigVerify(order.bodyBytes, order.proofs[0], order.senderPublicKey)
957956 let mtchV = sigVerify(order.bodyBytes, order.proofs[1], mtchPub)
958957 if (if (if (orV)
959958 then sndrV
960959 else false)
961960 then mtchV
962961 else false)
963962 then true
964963 else toe(orV, sndrV, mtchV)
965964 case _ =>
966965 let targetPublicKey = match m() {
967966 case pk: ByteVector =>
968967 pk
969968 case _: Unit =>
970969 tx.senderPublicKey
971970 case _ =>
972971 throw("Match error")
973972 }
974973 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
975974 }
976975

github/deemru/w8io/169f3d6 
152.45 ms