tx · 54CZLDCgVHrgGpa5uHB5BXC5Geb1HYrXtQt8SMbTpDNx

3Mz51suw3H98TBYJHSra1k2uSYQMv2vUkzt:  -0.03600000 Waves

2022.06.06 23:39 [2084983] smart account 3Mz51suw3H98TBYJHSra1k2uSYQMv2vUkzt > SELF 0.00000000 Waves

{ "type": 13, "id": "54CZLDCgVHrgGpa5uHB5BXC5Geb1HYrXtQt8SMbTpDNx", "fee": 3600000, "feeAssetId": null, "timestamp": 1654548013875, "version": 1, "sender": "3Mz51suw3H98TBYJHSra1k2uSYQMv2vUkzt", "senderPublicKey": "8RPibCyjGbPr7troJPW7WTXkrbynj8HwkrckopSZoYVn", "proofs": [ "5ixDHjBmc8GTLwwezvpcsfsAyDMdCefTXGGoEGABXpanedXfykS7f62SqjzrqM6GfdwPTZ4MTKhAi9Y3QRG8fN8w" ], "script": "base64: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CgJibhIKcHJBc3NldERjbRoLCgJibxIFYW1BbXQaCwoCYnASBXByQW10GhEKAmJxEgthbXRBc0FtdFgxOBoQCgJichIKcHJBc0FtdFgxOBoQCgJicxIKY2FsY1ByaWNlcxoLCgJidBIFbHBBbXQaCQoCYnUSA2NmZxoOCgJidhIIYW10QXNEY20aDQoCYncSB3ByQXNEY20aDgoCYngSCHByaWNlWDE4Gg4KAmJ5EghscEFtdFgxOBoTCgJiehINbHBQckluQW1Bc1gxOBoMCgFjEgdzY2FsZTE4GhAKAmNBEgpwclZpYUFtWDE4GhAKAmNCEgphbVZpYVByWDE4GhIKAmNDEgxleHBlY3RlZEFtdHMaFwoCY0QSEWV4cEFtdEFzc2V0QW10WDE4GhkKAmNFEhNleHBQcmljZUFzc2V0QW10WDE4Gg8KAmNGEgljYWxjTHBBbXQaFAoCY0cSDmNhbGNBbUFzc2V0UG10GhQKAmNIEg5jYWxjUHJBc3NldFBtdBoSCgJjSRIMc2xpcHBhZ2VDYWxjGg8KAmNKEgllbWl0THBBbXQaDAoCY0sSBmFtRGlmZhoMCgJjTBIGcHJEaWZmGhMKAmNNEg0kdDAxNTUzMTE1ODc2GhAKAmNOEgp3cml0ZUFtQW10GhAKAmNPEgp3cml0ZVByQW10GhEKAmNQEgtjb21tb25TdGF0ZRoJCgJjURIDbW9hGgsKAmNSEgVvcmRlchoNCgJjUxIHYW10QXNJZBoMCgJjVBIGcHJBc0lkGhUKAmNVEg9hY2NBbXRBc0JhbGFuY2UaFAoCY1YSDmFjY1ByQXNCYWxhbmNlGhAKAmNXEgpvckFtdEFzc2V0GhAKAmNYEgpvckFtdEFzU3RyGg8KAmNZEglvclByQXNzZXQaDwoCY1oSCW9yUHJBc1N0choOCgJjYRIIb3V0UHJBbXQaCwoCY2ISBXN0YXRlGgkKAmNjEgNlcG8aDQoCY2QSB2luQW1BbXQaDAoCY2USBmluQW1JZBoNCgJjZhIHaW5QckFtdBoMCgJjZxIGaW5QcklkGgwKAmNoEgZpc0V2YWwaDAoCY2kSBmVtaXRMcBoQCgJjahIKaXNPbmVBc3NldBoMCgJjaxIGcG10QW10GgsKAmNsEgVwbXRJZBoNCgJjbRIHYW1JZFN0choNCgJjbhIHcHJJZFN0choP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", "chainId": 84, "height": 2084983, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: C484A7DPDaRJEqhvW9bet9MHSAxLUuTSKtfFxbhqqU2d Next: 62d83Zvmpq7eF9FjcGYKqtzQkVeTziJzH9mqowoE4Zuk Diff:
OldNewDifferences
187187
188188 func vd (D1,D0,slpg) = {
189189 let diff = fraction(D0, scale8BigInt, D1)
190- if ((diff == diff))
191- then {
192- let error = throw("after diff error")
193- if ((error == error))
194- then {
195- let fail = (slpg > diff)
196- if (if (fail)
197- then true
198- else (D0 > D1))
199- then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
200- else fail
201- }
202- else throw("Strict value is not equal to itself.")
203- }
204- else throw("Strict value is not equal to itself.")
190+ let fail = (slpg > diff)
191+ if (if (fail)
192+ then true
193+ else (D0 > D1))
194+ then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
195+ else fail
205196 }
206197
207198
343334 else calcLpAmt
344335 let amDiff = (inAmAmt - calcAmAssetPmt)
345336 let prDiff = (inPrAmt - calcPrAssetPmt)
346- let $t01557815923 = if (if (isOneAsset)
337+ let $t01553115876 = if (if (isOneAsset)
347338 then (pmtId == amIdStr)
348339 else false)
349340 then $Tuple2(pmtAmt, 0)
352343 else false)
353344 then $Tuple2(0, pmtAmt)
354345 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
355- let writeAmAmt = $t01557815923._1
356- let writePrAmt = $t01557815923._2
346+ let writeAmAmt = $t01553115876._1
347+ let writePrAmt = $t01553115876._2
357348 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))]
358349 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
359350 }
595586 then i.originCaller
596587 else i.caller
597588 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
598- let check = reentrantInvoke(addonContract, "ensureCanPutOneTkn", [toString(userAddress)], nil)
589+ let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
599590 if ((check == check))
600- then {
601- let afterCheckError = throw("after check")
602- if ((afterCheckError == afterCheckError))
603- then if (if (if (if ((0 >= slippage))
604- then true
605- else (0 >= amAssetPart))
606- then true
607- else (0 >= prAssetPart))
608- then true
609- else (0 >= outLp))
610- then throw("Wrong params")
611- else if ((size(i.payments) != 1))
612- then throw("1 pmnt expd")
591+ then if (if (if (if ((0 >= slippage))
592+ then true
593+ else (0 >= amAssetPart))
594+ then true
595+ else (0 >= prAssetPart))
596+ then true
597+ else (0 >= outLp))
598+ then throw("Wrong params")
599+ else if ((size(i.payments) != 1))
600+ then throw("1 pmnt expd")
601+ else {
602+ let pmt = value(i.payments[0])
603+ let pmtAssetId = toBase58String(value(pmt.assetId))
604+ let pmtAmt = pmt.amount
605+ if (if (if ((amAssetPart > pmtAmt))
606+ then true
607+ else (prAssetPart > pmtAmt))
608+ then true
609+ else (10000000 > pmtAmt))
610+ then throw("Wrong pmt amt")
613611 else {
614- let pmt = value(i.payments[0])
615- let pmtAssetId = toBase58String(value(pmt.assetId))
616- let pmtAmt = pmt.amount
617- if (if (if ((amAssetPart > pmtAmt))
618- then true
619- else (prAssetPart > pmtAmt))
620- then true
621- else (10000000 > pmtAmt))
622- then throw("Wrong pmt amt")
623- else {
624- let amBalance = getAccBalance(amId)
625- let prBalance = getAccBalance(prId)
626- let $t02493025310 = if ((pmtAssetId == amId))
627- then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
628- else if ((pmtAssetId == prId))
629- then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
630- else throw("wrong pmtAssetId")
631- let amBalanceNow = $t02493025310._1
632- let prBalanceNow = $t02493025310._2
633- let virtSwapInAm = $t02493025310._3
634- let virtSwapOutPr = $t02493025310._4
635- let virtSwapInPr = $t02493025310._5
636- let virtSwapOutAm = $t02493025310._6
637- let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
638- let errorAfterD0 = throw("error after D0")
639- if ((errorAfterD0 == errorAfterD0))
612+ let amBalance = getAccBalance(amId)
613+ let prBalance = getAccBalance(prId)
614+ let $t02483725217 = if ((pmtAssetId == amId))
615+ then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
616+ else if ((pmtAssetId == prId))
617+ then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
618+ else throw("wrong pmtAssetId")
619+ let amBalanceNow = $t02483725217._1
620+ let prBalanceNow = $t02483725217._2
621+ let virtSwapInAm = $t02483725217._3
622+ let virtSwapOutPr = $t02483725217._4
623+ let virtSwapInPr = $t02483725217._5
624+ let virtSwapOutAm = $t02483725217._6
625+ let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
626+ let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
627+ let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
628+ if ((D0vsD1 == D0vsD1))
629+ then {
630+ let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
631+ let estimLP = estPut._2
632+ let lpAssetId = estPut._7
633+ let state = estPut._9
634+ let amDiff = estPut._10
635+ let prDiff = estPut._11
636+ let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
637+ let emitLpAmt = toInt(lpCalcRes._2)
638+ let e = invoke(fca, "emit", [emitLpAmt], nil)
639+ if ((e == e))
640640 then {
641- let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
642- let error1 = throw("error after D1")
643- if ((error1 == error1))
641+ let el = match e {
642+ case legacy: Address =>
643+ invoke(legacy, "emit", [emitLpAmt], nil)
644+ case _ =>
645+ unit
646+ }
647+ if ((el == el))
644648 then {
645- let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
646- if ((D0vsD1 == D0vsD1))
649+ let sa = if ((amDiff > 0))
650+ then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
651+ else nil
652+ if ((sa == sa))
647653 then {
648- let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
649- let estimLP = estPut._2
650- let lpAssetId = estPut._7
651- let state = estPut._9
652- let amDiff = estPut._10
653- let prDiff = estPut._11
654- let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
655- let emitLpAmt = toInt(lpCalcRes._2)
656- let e = invoke(fca, "emit", [emitLpAmt], nil)
657- if ((e == e))
654+ let sp = if ((prDiff > 0))
655+ then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
656+ else nil
657+ if ((sp == sp))
658658 then {
659- let el = match e {
660- case legacy: Address =>
661- invoke(legacy, "emit", [emitLpAmt], nil)
662- case _ =>
663- unit
664- }
665- if ((el == el))
659+ let lpTrnsfr = if (autoStake)
666660 then {
667- let sa = if ((amDiff > 0))
668- then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
669- else nil
670- if ((sa == sa))
671- then {
672- let sp = if ((prDiff > 0))
673- then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
674- else nil
675- if ((sp == sp))
676- then {
677- let lpTrnsfr = if (autoStake)
678- then {
679- let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
680- if ((ss == ss))
681- then nil
682- else throw("Strict value is not equal to itself.")
683- }
684- else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
685- (state ++ lpTrnsfr)
686- }
687- else throw("Strict value is not equal to itself.")
688- }
661+ let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
662+ if ((ss == ss))
663+ then nil
689664 else throw("Strict value is not equal to itself.")
690665 }
691- else throw("Strict value is not equal to itself.")
666+ else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
667+ (state ++ lpTrnsfr)
692668 }
693669 else throw("Strict value is not equal to itself.")
694670 }
698674 }
699675 else throw("Strict value is not equal to itself.")
700676 }
677+ else throw("Strict value is not equal to itself.")
701678 }
702- else throw("Strict value is not equal to itself.")
703- }
679+ }
704680 else throw("Strict value is not equal to itself.")
705681 }
706682
756732 let pmtAssetId = value(pmt.assetId)
757733 let pmtAmt = pmt.amount
758734 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
759- let check = reentrantInvoke(addonContract, "ensureCanGetOneTkn", [toString(userAddress)], nil)
735+ let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
760736 if ((check == check))
761737 then if ((1000000000 > pmtAmt))
762738 then throw("Min pmt 10 LP")
774750 let estimPrAmt = r._2
775751 let amBalance = getAccBalance(amId)
776752 let prBalance = getAccBalance(prId)
777- let $t03043930896 = if ((outAssetId == amId))
753+ let $t03025330710 = if ((outAssetId == amId))
778754 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
779755 else if ((outAssetId == prId))
780756 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
781757 else throw("wrong outAssetId")
782- let amBalanceNow = $t03043930896._1
783- let prBalanceNow = $t03043930896._2
784- let virtSwapInAm = $t03043930896._3
785- let virtSwapOutPr = $t03043930896._4
786- let virtSwapInPr = $t03043930896._5
787- let virtSwapOutAm = $t03043930896._6
788- let totalGet = $t03043930896._7
758+ let amBalanceNow = $t03025330710._1
759+ let prBalanceNow = $t03025330710._2
760+ let virtSwapInAm = $t03025330710._3
761+ let virtSwapOutPr = $t03025330710._4
762+ let virtSwapInPr = $t03025330710._5
763+ let virtSwapOutAm = $t03025330710._6
764+ let totalGet = $t03025330710._7
789765 if (if ((0 > virtSwapInAm))
790766 then true
791767 else (0 > virtSwapInPr))
799775 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
800776 if ((finalRes == finalRes))
801777 then {
802- let $t03160131705 = if ((outAssetId == amId))
778+ let $t03141531519 = if ((outAssetId == amId))
803779 then $Tuple2(toInt(finalRes._2), 0)
804780 else $Tuple2(0, toInt(finalRes._2))
805- let outAm = $t03160131705._1
806- let outPr = $t03160131705._2
781+ let outAm = $t03141531519._1
782+ let outPr = $t03141531519._2
807783 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
808784 let curPr = f1(curPrX18, scale8)
809785 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)
190- if ((diff == diff))
191- then {
192- let error = throw("after diff error")
193- if ((error == error))
194- then {
195- let fail = (slpg > diff)
196- if (if (fail)
197- then true
198- else (D0 > D1))
199- then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
200- else fail
201- }
202- else throw("Strict value is not equal to itself.")
203- }
204- else throw("Strict value is not equal to itself.")
190+ let fail = (slpg > diff)
191+ if (if (fail)
192+ then true
193+ else (D0 > D1))
194+ then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
195+ else fail
205196 }
206197
207198
208199 func pcp (amAssetDcm,prAssetDcm,amAmt,prAmt) = {
209200 let amtAsAmtX18 = t1(amAmt, amAssetDcm)
210201 let prAsAmtX18 = t1(prAmt, prAssetDcm)
211202 cpbi(prAsAmtX18, amtAsAmtX18)
212203 }
213204
214205
215206 func calcPrices (amAmt,prAmt,lpAmt) = {
216207 let cfg = gpc()
217208 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
218209 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
219210 let priceX18 = pcp(amtAsDcm, prAsDcm, amAmt, prAmt)
220211 let amAmtX18 = t1(amAmt, amtAsDcm)
221212 let prAmtX18 = t1(prAmt, prAsDcm)
222213 let lpAmtX18 = t1(lpAmt, scale8)
223214 let lpPrInAmAsX18 = cpbi(amAmtX18, lpAmtX18)
224215 let lpPrInPrAsX18 = cpbi(prAmtX18, lpAmtX18)
225216 [priceX18, lpPrInAmAsX18, lpPrInPrAsX18]
226217 }
227218
228219
229220 func calculatePrices (amAmt,prAmt,lpAmt) = {
230221 let p = calcPrices(amAmt, prAmt, lpAmt)
231222 [f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)]
232223 }
233224
234225
235226 func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
236227 let cfg = gpc()
237228 let lpId = cfg[idxLPAsId]
238229 let amId = cfg[idxAmAsId]
239230 let prId = cfg[idxPrAsId]
240231 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
241232 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
242233 let sts = cfg[idxPoolSt]
243234 let lpEmiss = valueOrErrorMessage(assetInfo(fromBase58String(lpId)), "Wrong LP id").quantity
244235 if ((lpId != pmtAssetId))
245236 then throw("Wrong pmt asset")
246237 else {
247238 let amBalance = getAccBalance(amId)
248239 let amBalanceX18 = t1(amBalance, amDcm)
249240 let prBalance = getAccBalance(prId)
250241 let prBalanceX18 = t1(prBalance, prDcm)
251242 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
252243 let curPrice = f1(curPriceX18, scale8)
253244 let pmtLpAmtX18 = t1(pmtLpAmt, scale8)
254245 let lpEmissX18 = t1(lpEmiss, scale8)
255246 let outAmAmtX18 = fraction(amBalanceX18, pmtLpAmtX18, lpEmissX18)
256247 let outPrAmtX18 = fraction(prBalanceX18, pmtLpAmtX18, lpEmissX18)
257248 let outAmAmt = f1(outAmAmtX18, amDcm)
258249 let outPrAmt = f1(outPrAmtX18, prDcm)
259250 let state = if ((txId58 == ""))
260251 then nil
261252 else [ScriptTransfer(userAddress, outAmAmt, if ((amId == "WAVES"))
262253 then unit
263254 else fromBase58String(amId)), ScriptTransfer(userAddress, outPrAmt, if ((prId == "WAVES"))
264255 then unit
265256 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)]
266257 $Tuple10(outAmAmt, outPrAmt, amId, prId, amBalance, prBalance, lpEmiss, curPriceX18, sts, state)
267258 }
268259 }
269260
270261
271262 func epo (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,userAddress,isEval,emitLp,isOneAsset,pmtAmt,pmtId) = {
272263 let cfg = gpc()
273264 let lpId = fromBase58String(cfg[idxLPAsId])
274265 let amIdStr = cfg[idxAmAsId]
275266 let prIdStr = cfg[idxPrAsId]
276267 let inAmIdStr = cfg[idxIAmtAsId]
277268 let inPrIdStr = cfg[idxIPriceAsId]
278269 let amtDcm = parseIntValue(cfg[idxAmtAsDcm])
279270 let priceDcm = parseIntValue(cfg[idxPriceAsDcm])
280271 let sts = cfg[idxPoolSt]
281272 let lpEm = valueOrErrorMessage(assetInfo(lpId), "Wr lp as").quantity
282273 let amBalance = if (isEval)
283274 then getAccBalance(amIdStr)
284275 else if (if (isOneAsset)
285276 then (pmtId == amIdStr)
286277 else false)
287278 then (getAccBalance(amIdStr) - pmtAmt)
288279 else if (isOneAsset)
289280 then getAccBalance(amIdStr)
290281 else (getAccBalance(amIdStr) - inAmAmt)
291282 let prBalance = if (isEval)
292283 then getAccBalance(prIdStr)
293284 else if (if (isOneAsset)
294285 then (pmtId == prIdStr)
295286 else false)
296287 then (getAccBalance(prIdStr) - pmtAmt)
297288 else if (isOneAsset)
298289 then getAccBalance(prIdStr)
299290 else (getAccBalance(prIdStr) - inPrAmt)
300291 let inAmAssetAmtX18 = t1(inAmAmt, amtDcm)
301292 let inPrAssetAmtX18 = t1(inPrAmt, priceDcm)
302293 let userPriceX18 = cpbi(inPrAssetAmtX18, inAmAssetAmtX18)
303294 let amBalanceX18 = t1(amBalance, amtDcm)
304295 let prBalanceX18 = t1(prBalance, priceDcm)
305296 let r = if ((lpEm == 0))
306297 then {
307298 let curPriceX18 = zeroBigInt
308299 let slippageX18 = zeroBigInt
309300 let lpAmtX18 = pow((inAmAssetAmtX18 * inPrAssetAmtX18), 0, toBigInt(5), 1, 0, DOWN)
310301 $Tuple5(f1(lpAmtX18, scale8), f1(inAmAssetAmtX18, amtDcm), f1(inPrAssetAmtX18, priceDcm), cpbi((prBalanceX18 + inPrAssetAmtX18), (amBalanceX18 + inAmAssetAmtX18)), slippageX18)
311302 }
312303 else {
313304 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
314305 let slippageRealX18 = fraction(abs((curPriceX18 - userPriceX18)), scale18, curPriceX18)
315306 let slippageX18 = t1(slippage, scale8)
316307 if (if ((curPriceX18 != zeroBigInt))
317308 then (slippageRealX18 > slippageX18)
318309 else false)
319310 then throw(((("Price slippage " + toString(slippageRealX18)) + " > ") + toString(slippageX18)))
320311 else {
321312 let lpEmissionX18 = t1(lpEm, scale8)
322313 let prViaAmX18 = fraction(inAmAssetAmtX18, curPriceX18, scale18)
323314 let amViaPrX18 = fraction(inPrAssetAmtX18, scale18, curPriceX18)
324315 let expectedAmts = if ((prViaAmX18 > inPrAssetAmtX18))
325316 then $Tuple2(amViaPrX18, inPrAssetAmtX18)
326317 else $Tuple2(inAmAssetAmtX18, prViaAmX18)
327318 let expAmtAssetAmtX18 = expectedAmts._1
328319 let expPriceAssetAmtX18 = expectedAmts._2
329320 let lpAmtX18 = fraction(lpEmissionX18, expPriceAssetAmtX18, prBalanceX18)
330321 $Tuple5(f1(lpAmtX18, scale8), f1(expAmtAssetAmtX18, amtDcm), f1(expPriceAssetAmtX18, priceDcm), curPriceX18, slippageX18)
331322 }
332323 }
333324 let calcLpAmt = r._1
334325 let calcAmAssetPmt = r._2
335326 let calcPrAssetPmt = r._3
336327 let curPrice = f1(r._4, scale8)
337328 let slippageCalc = f1(r._5, scale8)
338329 if ((0 >= calcLpAmt))
339330 then throw("LP <= 0")
340331 else {
341332 let emitLpAmt = if (!(emitLp))
342333 then 0
343334 else calcLpAmt
344335 let amDiff = (inAmAmt - calcAmAssetPmt)
345336 let prDiff = (inPrAmt - calcPrAssetPmt)
346- let $t01557815923 = if (if (isOneAsset)
337+ let $t01553115876 = if (if (isOneAsset)
347338 then (pmtId == amIdStr)
348339 else false)
349340 then $Tuple2(pmtAmt, 0)
350341 else if (if (isOneAsset)
351342 then (pmtId == prIdStr)
352343 else false)
353344 then $Tuple2(0, pmtAmt)
354345 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
355- let writeAmAmt = $t01557815923._1
356- let writePrAmt = $t01557815923._2
346+ let writeAmAmt = $t01553115876._1
347+ let writePrAmt = $t01553115876._2
357348 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))]
358349 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
359350 }
360351 }
361352
362353
363354 func moa (order) = {
364355 let cfg = gpc()
365356 let amtAsId = cfg[idxAmAsId]
366357 let prAsId = cfg[idxPrAsId]
367358 let sts = parseIntValue(cfg[idxPoolSt])
368359 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
369360 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
370361 let accAmtAsBalance = getAccBalance(amtAsId)
371362 let accPrAsBalance = getAccBalance(prAsId)
372363 let curPriceX18 = if ((order.orderType == Buy))
373364 then pcp(amtAsDcm, prAsDcm, (accAmtAsBalance + order.amount), accPrAsBalance)
374365 else pcp(amtAsDcm, prAsDcm, (accAmtAsBalance - order.amount), accPrAsBalance)
375366 let curPrice = f1(curPriceX18, scale8)
376367 if (if (if (igs())
377368 then true
378369 else (sts == PoolMatcherDis))
379370 then true
380371 else (sts == PoolShutdown))
381372 then throw("Admin blocked")
382373 else {
383374 let orAmtAsset = order.assetPair.amountAsset
384375 let orAmtAsStr = if ((orAmtAsset == unit))
385376 then "WAVES"
386377 else toBase58String(value(orAmtAsset))
387378 let orPrAsset = order.assetPair.priceAsset
388379 let orPrAsStr = if ((orPrAsset == unit))
389380 then "WAVES"
390381 else toBase58String(value(orPrAsset))
391382 if (if ((orAmtAsStr != amtAsId))
392383 then true
393384 else (orPrAsStr != prAsId))
394385 then throw("Wr assets")
395386 else {
396387 let orderPrice = order.price
397388 let priceDcm = fraction(scale8, prAsDcm, amtAsDcm)
398389 let castOrderPrice = ts(orderPrice, scale8, priceDcm)
399390 let isOrderPriceValid = if ((order.orderType == Buy))
400391 then (curPrice >= castOrderPrice)
401392 else (castOrderPrice >= curPrice)
402393 true
403394 }
404395 }
405396 }
406397
407398
408399 func cg (i) = if ((size(i.payments) != 1))
409400 then throw("1 pmnt exp")
410401 else {
411402 let pmt = value(i.payments[0])
412403 let pmtAssetId = value(pmt.assetId)
413404 let pmtAmt = pmt.amount
414405 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
415406 let outAmAmt = r._1
416407 let outPrAmt = r._2
417408 let sts = parseIntValue(r._9)
418409 let state = r._10
419410 if (if (igs())
420411 then true
421412 else (sts == PoolShutdown))
422413 then throw(("Admin blocked: " + toString(sts)))
423414 else $Tuple5(outAmAmt, outPrAmt, pmtAmt, pmtAssetId, state)
424415 }
425416
426417
427418 func cp (caller,txId,amAsPmt,prAsPmt,slippage,emitLp,isOneAsset,pmtAmt,pmtId) = {
428419 let r = epo(txId, slippage, value(amAsPmt).amount, value(amAsPmt).assetId, value(prAsPmt).amount, value(prAsPmt).assetId, caller, false, emitLp, isOneAsset, pmtAmt, pmtId)
429420 let sts = parseIntValue(r._8)
430421 if (if (if (igs())
431422 then true
432423 else (sts == PoolPutDis))
433424 then true
434425 else (sts == PoolShutdown))
435426 then throw(("Blocked:" + toString(sts)))
436427 else r
437428 }
438429
439430
440431 func m () = match getString(mpk()) {
441432 case s: String =>
442433 fromBase58String(s)
443434 case _: Unit =>
444435 unit
445436 case _ =>
446437 throw("Match error")
447438 }
448439
449440
450441 func pm () = match getString(pmpk()) {
451442 case s: String =>
452443 fromBase58String(s)
453444 case _: Unit =>
454445 unit
455446 case _ =>
456447 throw("Match error")
457448 }
458449
459450
460451 let pd = throw("Permission denied")
461452
462453 func mm (i) = match m() {
463454 case pk: ByteVector =>
464455 if ((i.callerPublicKey == pk))
465456 then true
466457 else pd
467458 case _: Unit =>
468459 if ((i.caller == this))
469460 then true
470461 else pd
471462 case _ =>
472463 throw("Match error")
473464 }
474465
475466
476467 @Callable(i)
477468 func constructor (fc) = {
478469 let c = mm(i)
479470 if ((c == c))
480471 then [StringEntry(fc(), fc)]
481472 else throw("Strict value is not equal to itself.")
482473 }
483474
484475
485476
486477 @Callable(i)
487478 func setManager (pendingManagerPublicKey) = {
488479 let c = mm(i)
489480 if ((c == c))
490481 then {
491482 let cm = fromBase58String(pendingManagerPublicKey)
492483 if ((cm == cm))
493484 then [StringEntry(pmpk(), pendingManagerPublicKey)]
494485 else throw("Strict value is not equal to itself.")
495486 }
496487 else throw("Strict value is not equal to itself.")
497488 }
498489
499490
500491
501492 @Callable(i)
502493 func confirmManager () = {
503494 let p = pm()
504495 let hpm = if (isDefined(p))
505496 then true
506497 else throw("No pending manager")
507498 if ((hpm == hpm))
508499 then {
509500 let cpm = if ((i.callerPublicKey == value(p)))
510501 then true
511502 else throw("You are not pending manager")
512503 if ((cpm == cpm))
513504 then [StringEntry(mpk(), toBase58String(value(p))), DeleteEntry(pmpk())]
514505 else throw("Strict value is not equal to itself.")
515506 }
516507 else throw("Strict value is not equal to itself.")
517508 }
518509
519510
520511
521512 @Callable(i)
522513 func put (slip,autoStake) = {
523514 let factCfg = gfc()
524515 let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
525516 let slipCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactSlippCntr]), "Wr sl addr")
526517 if ((0 > slip))
527518 then throw("Wrong slippage")
528519 else if ((size(i.payments) != 2))
529520 then throw("2 pmnts expd")
530521 else {
531522 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, "")
532523 let emitLpAmt = e._2
533524 let lpAssetId = e._7
534525 let state = e._9
535526 let amDiff = e._10
536527 let prDiff = e._11
537528 let amId = e._12
538529 let prId = e._13
539530 let r = invoke(fca, "emit", [emitLpAmt], nil)
540531 if ((r == r))
541532 then {
542533 let el = match r {
543534 case legacy: Address =>
544535 invoke(legacy, "emit", [emitLpAmt], nil)
545536 case _ =>
546537 unit
547538 }
548539 if ((el == el))
549540 then {
550541 let sa = if ((amDiff > 0))
551542 then invoke(slipCntr, "put", nil, [AttachedPayment(amId, amDiff)])
552543 else nil
553544 if ((sa == sa))
554545 then {
555546 let sp = if ((prDiff > 0))
556547 then invoke(slipCntr, "put", nil, [AttachedPayment(prId, prDiff)])
557548 else nil
558549 if ((sp == sp))
559550 then {
560551 let lpTrnsfr = if (autoStake)
561552 then {
562553 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
563554 if ((ss == ss))
564555 then nil
565556 else throw("Strict value is not equal to itself.")
566557 }
567558 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
568559 (state ++ lpTrnsfr)
569560 }
570561 else throw("Strict value is not equal to itself.")
571562 }
572563 else throw("Strict value is not equal to itself.")
573564 }
574565 else throw("Strict value is not equal to itself.")
575566 }
576567 else throw("Strict value is not equal to itself.")
577568 }
578569 }
579570
580571
581572
582573 @Callable(i)
583574 func putOneTkn (amAssetPart,prAssetPart,outLp,slippage,autoStake) = {
584575 let cfg = gfc()
585576 let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
586577 let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
587578 let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
588579 let poolCfg = gpc()
589580 let amId = poolCfg[idxAmAsId]
590581 let prId = poolCfg[idxPrAsId]
591582 let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
592583 let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
593584 let addon = valueOrElse(getString(this, ada()), "")
594585 let userAddress = if ((addon == toString(i.caller)))
595586 then i.originCaller
596587 else i.caller
597588 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
598- let check = reentrantInvoke(addonContract, "ensureCanPutOneTkn", [toString(userAddress)], nil)
589+ let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
599590 if ((check == check))
600- then {
601- let afterCheckError = throw("after check")
602- if ((afterCheckError == afterCheckError))
603- then if (if (if (if ((0 >= slippage))
604- then true
605- else (0 >= amAssetPart))
606- then true
607- else (0 >= prAssetPart))
608- then true
609- else (0 >= outLp))
610- then throw("Wrong params")
611- else if ((size(i.payments) != 1))
612- then throw("1 pmnt expd")
591+ then if (if (if (if ((0 >= slippage))
592+ then true
593+ else (0 >= amAssetPart))
594+ then true
595+ else (0 >= prAssetPart))
596+ then true
597+ else (0 >= outLp))
598+ then throw("Wrong params")
599+ else if ((size(i.payments) != 1))
600+ then throw("1 pmnt expd")
601+ else {
602+ let pmt = value(i.payments[0])
603+ let pmtAssetId = toBase58String(value(pmt.assetId))
604+ let pmtAmt = pmt.amount
605+ if (if (if ((amAssetPart > pmtAmt))
606+ then true
607+ else (prAssetPart > pmtAmt))
608+ then true
609+ else (10000000 > pmtAmt))
610+ then throw("Wrong pmt amt")
613611 else {
614- let pmt = value(i.payments[0])
615- let pmtAssetId = toBase58String(value(pmt.assetId))
616- let pmtAmt = pmt.amount
617- if (if (if ((amAssetPart > pmtAmt))
618- then true
619- else (prAssetPart > pmtAmt))
620- then true
621- else (10000000 > pmtAmt))
622- then throw("Wrong pmt amt")
623- else {
624- let amBalance = getAccBalance(amId)
625- let prBalance = getAccBalance(prId)
626- let $t02493025310 = if ((pmtAssetId == amId))
627- then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
628- else if ((pmtAssetId == prId))
629- then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
630- else throw("wrong pmtAssetId")
631- let amBalanceNow = $t02493025310._1
632- let prBalanceNow = $t02493025310._2
633- let virtSwapInAm = $t02493025310._3
634- let virtSwapOutPr = $t02493025310._4
635- let virtSwapInPr = $t02493025310._5
636- let virtSwapOutAm = $t02493025310._6
637- let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
638- let errorAfterD0 = throw("error after D0")
639- if ((errorAfterD0 == errorAfterD0))
612+ let amBalance = getAccBalance(amId)
613+ let prBalance = getAccBalance(prId)
614+ let $t02483725217 = if ((pmtAssetId == amId))
615+ then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
616+ else if ((pmtAssetId == prId))
617+ then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
618+ else throw("wrong pmtAssetId")
619+ let amBalanceNow = $t02483725217._1
620+ let prBalanceNow = $t02483725217._2
621+ let virtSwapInAm = $t02483725217._3
622+ let virtSwapOutPr = $t02483725217._4
623+ let virtSwapInPr = $t02483725217._5
624+ let virtSwapOutAm = $t02483725217._6
625+ let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
626+ let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
627+ let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
628+ if ((D0vsD1 == D0vsD1))
629+ then {
630+ let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
631+ let estimLP = estPut._2
632+ let lpAssetId = estPut._7
633+ let state = estPut._9
634+ let amDiff = estPut._10
635+ let prDiff = estPut._11
636+ let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
637+ let emitLpAmt = toInt(lpCalcRes._2)
638+ let e = invoke(fca, "emit", [emitLpAmt], nil)
639+ if ((e == e))
640640 then {
641- let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
642- let error1 = throw("error after D1")
643- if ((error1 == error1))
641+ let el = match e {
642+ case legacy: Address =>
643+ invoke(legacy, "emit", [emitLpAmt], nil)
644+ case _ =>
645+ unit
646+ }
647+ if ((el == el))
644648 then {
645- let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
646- if ((D0vsD1 == D0vsD1))
649+ let sa = if ((amDiff > 0))
650+ then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
651+ else nil
652+ if ((sa == sa))
647653 then {
648- let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
649- let estimLP = estPut._2
650- let lpAssetId = estPut._7
651- let state = estPut._9
652- let amDiff = estPut._10
653- let prDiff = estPut._11
654- let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
655- let emitLpAmt = toInt(lpCalcRes._2)
656- let e = invoke(fca, "emit", [emitLpAmt], nil)
657- if ((e == e))
654+ let sp = if ((prDiff > 0))
655+ then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
656+ else nil
657+ if ((sp == sp))
658658 then {
659- let el = match e {
660- case legacy: Address =>
661- invoke(legacy, "emit", [emitLpAmt], nil)
662- case _ =>
663- unit
664- }
665- if ((el == el))
659+ let lpTrnsfr = if (autoStake)
666660 then {
667- let sa = if ((amDiff > 0))
668- then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
669- else nil
670- if ((sa == sa))
671- then {
672- let sp = if ((prDiff > 0))
673- then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
674- else nil
675- if ((sp == sp))
676- then {
677- let lpTrnsfr = if (autoStake)
678- then {
679- let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
680- if ((ss == ss))
681- then nil
682- else throw("Strict value is not equal to itself.")
683- }
684- else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
685- (state ++ lpTrnsfr)
686- }
687- else throw("Strict value is not equal to itself.")
688- }
661+ let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
662+ if ((ss == ss))
663+ then nil
689664 else throw("Strict value is not equal to itself.")
690665 }
691- else throw("Strict value is not equal to itself.")
666+ else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
667+ (state ++ lpTrnsfr)
692668 }
693669 else throw("Strict value is not equal to itself.")
694670 }
695671 else throw("Strict value is not equal to itself.")
696672 }
697673 else throw("Strict value is not equal to itself.")
698674 }
699675 else throw("Strict value is not equal to itself.")
700676 }
677+ else throw("Strict value is not equal to itself.")
701678 }
702- else throw("Strict value is not equal to itself.")
703- }
679+ }
704680 else throw("Strict value is not equal to itself.")
705681 }
706682
707683
708684
709685 @Callable(i)
710686 func putForFree (maxSlpg) = if ((0 > maxSlpg))
711687 then throw("Wrong slpg")
712688 else if ((size(i.payments) != 2))
713689 then throw("2 pmnts expd")
714690 else {
715691 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, "")
716692 estPut._9
717693 }
718694
719695
720696
721697 @Callable(i)
722698 func get () = {
723699 let r = cg(i)
724700 let outAmtAmt = r._1
725701 let outPrAmt = r._2
726702 let pmtAmt = r._3
727703 let pmtAssetId = r._4
728704 let state = r._5
729705 let b = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
730706 if ((b == b))
731707 then state
732708 else throw("Strict value is not equal to itself.")
733709 }
734710
735711
736712
737713 @Callable(i)
738714 func getOneTkn (exchResult,notUsed,outAmount,outAssetId,slippage) = if ((size(i.payments) != 1))
739715 then throw("1 pmnt expd")
740716 else {
741717 let cfg = gpc()
742718 let lpId = cfg[idxLPAsId]
743719 let amId = cfg[idxAmAsId]
744720 let prId = cfg[idxPrAsId]
745721 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
746722 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
747723 let sts = cfg[idxPoolSt]
748724 let factCfg = gfc()
749725 let gwxCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactGwxRewCntr]), "Wr sl addr")
750726 let pmt = value(i.payments[0])
751727 let addon = valueOrElse(getString(this, ada()), "")
752728 let userAddress = if ((addon == toString(i.caller)))
753729 then i.originCaller
754730 else i.caller
755731 let txId58 = toBase58String(i.transactionId)
756732 let pmtAssetId = value(pmt.assetId)
757733 let pmtAmt = pmt.amount
758734 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
759- let check = reentrantInvoke(addonContract, "ensureCanGetOneTkn", [toString(userAddress)], nil)
735+ let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
760736 if ((check == check))
761737 then if ((1000000000 > pmtAmt))
762738 then throw("Min pmt 10 LP")
763739 else if (if (if ((0 > slippage))
764740 then true
765741 else (0 > exchResult))
766742 then true
767743 else (0 > outAmount))
768744 then throw("Wrong params")
769745 else if ((lpId != toBase58String(pmtAssetId)))
770746 then throw("Wrong LP")
771747 else {
772748 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
773749 let estimAmAmt = r._1
774750 let estimPrAmt = r._2
775751 let amBalance = getAccBalance(amId)
776752 let prBalance = getAccBalance(prId)
777- let $t03043930896 = if ((outAssetId == amId))
753+ let $t03025330710 = if ((outAssetId == amId))
778754 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
779755 else if ((outAssetId == prId))
780756 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
781757 else throw("wrong outAssetId")
782- let amBalanceNow = $t03043930896._1
783- let prBalanceNow = $t03043930896._2
784- let virtSwapInAm = $t03043930896._3
785- let virtSwapOutPr = $t03043930896._4
786- let virtSwapInPr = $t03043930896._5
787- let virtSwapOutAm = $t03043930896._6
788- let totalGet = $t03043930896._7
758+ let amBalanceNow = $t03025330710._1
759+ let prBalanceNow = $t03025330710._2
760+ let virtSwapInAm = $t03025330710._3
761+ let virtSwapOutPr = $t03025330710._4
762+ let virtSwapInPr = $t03025330710._5
763+ let virtSwapOutAm = $t03025330710._6
764+ let totalGet = $t03025330710._7
789765 if (if ((0 > virtSwapInAm))
790766 then true
791767 else (0 > virtSwapInPr))
792768 then throw("Wrong calc")
793769 else {
794770 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
795771 let D1 = invoke(gwxCntr, "calcD", [toString(((amBalanceNow - virtSwapInAm) + virtSwapOutAm)), toString(((prBalanceNow + virtSwapOutPr) - virtSwapInPr)), A, Amult, Dconv], nil)
796772 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
797773 if ((D0vsD1 == D0vsD1))
798774 then {
799775 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
800776 if ((finalRes == finalRes))
801777 then {
802- let $t03160131705 = if ((outAssetId == amId))
778+ let $t03141531519 = if ((outAssetId == amId))
803779 then $Tuple2(toInt(finalRes._2), 0)
804780 else $Tuple2(0, toInt(finalRes._2))
805- let outAm = $t03160131705._1
806- let outPr = $t03160131705._2
781+ let outAm = $t03141531519._1
782+ let outPr = $t03141531519._2
807783 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
808784 let curPr = f1(curPrX18, scale8)
809785 let state = [ScriptTransfer(userAddress, (outAm + outPr), if ((outAssetId == "WAVES"))
810786 then unit
811787 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)]
812788 if ((state == state))
813789 then {
814790 let burn = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
815791 if ((burn == burn))
816792 then state
817793 else throw("Strict value is not equal to itself.")
818794 }
819795 else throw("Strict value is not equal to itself.")
820796 }
821797 else throw("Strict value is not equal to itself.")
822798 }
823799 else throw("Strict value is not equal to itself.")
824800 }
825801 }
826802 else throw("Strict value is not equal to itself.")
827803 }
828804
829805
830806
831807 @Callable(i)
832808 func getNoLess (noLessThenAmtAsset,noLessThenPriceAsset) = {
833809 let r = cg(i)
834810 let outAmAmt = r._1
835811 let outPrAmt = r._2
836812 let pmtAmt = r._3
837813 let pmtAssetId = r._4
838814 let state = r._5
839815 if ((noLessThenAmtAsset > outAmAmt))
840816 then throw(((("Failed: " + toString(outAmAmt)) + " < ") + toString(noLessThenAmtAsset)))
841817 else if ((noLessThenPriceAsset > outPrAmt))
842818 then throw(((("Failed: " + toString(outPrAmt)) + " < ") + toString(noLessThenPriceAsset)))
843819 else {
844820 let burnLPAssetOnFactory = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
845821 if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
846822 then state
847823 else throw("Strict value is not equal to itself.")
848824 }
849825 }
850826
851827
852828
853829 @Callable(i)
854830 func unstakeAndGet (amount) = {
855831 let checkPayments = if ((size(i.payments) != 0))
856832 then throw("No pmnts expd")
857833 else true
858834 if ((checkPayments == checkPayments))
859835 then {
860836 let cfg = gpc()
861837 let factoryCfg = gfc()
862838 let lpAssetId = fromBase58String(cfg[idxLPAsId])
863839 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
864840 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
865841 if ((unstakeInv == unstakeInv))
866842 then {
867843 let r = ego(toBase58String(i.transactionId), toBase58String(lpAssetId), amount, i.caller)
868844 let sts = parseIntValue(r._9)
869845 let state = r._10
870846 let v = if (if (igs())
871847 then true
872848 else (sts == PoolShutdown))
873849 then throw(("Blocked: " + toString(sts)))
874850 else true
875851 if ((v == v))
876852 then {
877853 let burnA = invoke(fca, "burn", [amount], [AttachedPayment(lpAssetId, amount)])
878854 if ((burnA == burnA))
879855 then state
880856 else throw("Strict value is not equal to itself.")
881857 }
882858 else throw("Strict value is not equal to itself.")
883859 }
884860 else throw("Strict value is not equal to itself.")
885861 }
886862 else throw("Strict value is not equal to itself.")
887863 }
888864
889865
890866
891867 @Callable(i)
892868 func activate (amtAsStr,prAsStr) = if ((toString(i.caller) != toString(fca)))
893869 then throw("denied")
894870 else $Tuple2([StringEntry(aa(), amtAsStr), StringEntry(pa(), prAsStr)], "success")
895871
896872
897873
898874 @Callable(i)
899875 func setS (k,v) = if ((toString(i.caller) != strf(this, ada())))
900876 then pd
901877 else [StringEntry(k, v)]
902878
903879
904880
905881 @Callable(i)
906882 func setI (k,v) = if ((toString(i.caller) != strf(this, ada())))
907883 then pd
908884 else [IntegerEntry(k, v)]
909885
910886
911887
912888 @Callable(i)
913889 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, gpc())
914890
915891
916892
917893 @Callable(i)
918894 func getAccBalanceWrapperREADONLY (assetId) = $Tuple2(nil, getAccBalance(assetId))
919895
920896
921897
922898 @Callable(i)
923899 func calcPricesWrapperREADONLY (amAmt,prAmt,lpAmt) = {
924900 let pr = calcPrices(amAmt, prAmt, lpAmt)
925901 $Tuple2(nil, [toString(pr[0]), toString(pr[1]), toString(pr[2])])
926902 }
927903
928904
929905
930906 @Callable(i)
931907 func fromX18WrapperREADONLY (val,resScaleMult) = $Tuple2(nil, f1(parseBigIntValue(val), resScaleMult))
932908
933909
934910
935911 @Callable(i)
936912 func toX18WrapperREADONLY (origVal,origScaleMult) = $Tuple2(nil, toString(t1(origVal, origScaleMult)))
937913
938914
939915
940916 @Callable(i)
941917 func calcPriceBigIntWrapperREADONLY (prAmtX18,amAmtX18) = $Tuple2(nil, toString(cpbi(parseBigIntValue(prAmtX18), parseBigIntValue(amAmtX18))))
942918
943919
944920
945921 @Callable(i)
946922 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, ""))
947923
948924
949925
950926 @Callable(i)
951927 func estimateGetOperationWrapperREADONLY (txId58,pmtAsId,pmtLpAmt,usrAddr) = {
952928 let r = ego(txId58, pmtAsId, pmtLpAmt, addressFromStringValue(usrAddr))
953929 $Tuple2(nil, $Tuple10(r._1, r._2, r._3, r._4, r._5, r._6, r._7, toString(r._8), r._9, r._10))
954930 }
955931
956932
957933 @Verifier(tx)
958934 func verify () = match tx {
959935 case order: Order =>
960936 let mtchPub = mp()
961937 let orV = moa(order)
962938 let sndrV = sigVerify(order.bodyBytes, order.proofs[0], order.senderPublicKey)
963939 let mtchV = sigVerify(order.bodyBytes, order.proofs[1], mtchPub)
964940 if (if (if (orV)
965941 then sndrV
966942 else false)
967943 then mtchV
968944 else false)
969945 then true
970946 else toe(orV, sndrV, mtchV)
971947 case _ =>
972948 let targetPublicKey = match m() {
973949 case pk: ByteVector =>
974950 pk
975951 case _: Unit =>
976952 tx.senderPublicKey
977953 case _ =>
978954 throw("Match error")
979955 }
980956 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
981957 }
982958

github/deemru/w8io/026f985 
110.83 ms