tx · DHbdVuv5kjFuionuQjZshovHCQtTP5RCgBZLmRm1ctET

3Mz51suw3H98TBYJHSra1k2uSYQMv2vUkzt:  -0.03600000 Waves

2022.06.06 23:15 [2084961] smart account 3Mz51suw3H98TBYJHSra1k2uSYQMv2vUkzt > SELF 0.00000000 Waves

{ "type": 13, "id": "DHbdVuv5kjFuionuQjZshovHCQtTP5RCgBZLmRm1ctET", "fee": 3600000, "feeAssetId": null, "timestamp": 1654546567596, "version": 1, "sender": "3Mz51suw3H98TBYJHSra1k2uSYQMv2vUkzt", "senderPublicKey": "8RPibCyjGbPr7troJPW7WTXkrbynj8HwkrckopSZoYVn", "proofs": [ "5CRdcfPRexMCThTHjugKFz9BGpGxRMt1Wq3rmCqrJkFHgvipBYLNMA6EfMh4hu5gPohCASGNA6hgS4AfG5eBmtSL" ], "script": "base64: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CgJibhIKYW1Bc3NldERjbRoQCgJibxIKcHJBc3NldERjbRoLCgJicBIFYW1BbXQaCwoCYnESBXByQW10GhEKAmJyEgthbXRBc0FtdFgxOBoQCgJicxIKcHJBc0FtdFgxOBoQCgJidBIKY2FsY1ByaWNlcxoLCgJidRIFbHBBbXQaCQoCYnYSA2NmZxoOCgJidxIIYW10QXNEY20aDQoCYngSB3ByQXNEY20aDgoCYnkSCHByaWNlWDE4Gg4KAmJ6EghscEFtdFgxOBoMCgFjEgdzY2FsZTE4GhMKAmNBEg1scEVtaXNzaW9uWDE4GhAKAmNCEgpwclZpYUFtWDE4GhAKAmNDEgphbVZpYVByWDE4GhIKAmNEEgxleHBlY3RlZEFtdHMaFwoCY0USEWV4cEFtdEFzc2V0QW10WDE4GhkKAmNGEhNleHBQcmljZUFzc2V0QW10WDE4Gg8KAmNHEgljYWxjTHBBbXQaFAoCY0gSDmNhbGNBbUFzc2V0UG10GhQKAmNJEg5jYWxjUHJBc3NldFBtdBoSCgJjShIMc2xpcHBhZ2VDYWxjGg8KAmNLEgllbWl0THBBbXQaDAoCY0wSBmFtRGlmZhoMCgJjTRIGcHJEaWZmGhMKAmNOEg0kdDAxNTU3ODE1OTIzGhAKAmNPEgp3cml0ZUFtQW10GhAKAmNQEgp3cml0ZVByQW10GhEKAmNREgtjb21tb25TdGF0ZRoJCgJjUhIDbW9hGgsKAmNTEgVvcmRlchoNCgJjVBIHYW10QXNJZBoMCgJjVRIGcHJBc0lkGhUKAmNWEg9hY2NBbXRBc0JhbGFuY2UaFAoCY1cSDmFjY1ByQXNCYWxhbmNlGhAKAmNYEgpvckFtdEFzc2V0GhAKAmNZEgpvckFtdEFzU3RyGg8KAmNaEglvclByQXNzZXQaDgoCY2ESCG91dEFtQW10Gg4KAmNiEghvdXRQckFtdBoLCgJjYxIFc3RhdGUaCQoCY2QSA2VwbxoNCgJjZRIHaW5BbUFtdBoMCgJjZhIGaW5BbUlkGg0KAmNnEgdpblByQW10GgwKAmNoEgZpblBySWQaDAoCY2kSBmlzRXZhbBoMCgJjahIGZW1pdExwGhAKAmNrEgppc09uZUFzc2V0GgwKAmNsEgZwbXRBbXQaCwoCY20SBXBtdElkGg0KAmNuEgdhbUlkU3Ry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", "chainId": 84, "height": 2084961, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8U99hSnxuM3YLJoSwMbbXQPpjNZjc2c69f5nZqLXcD8Q Next: 8dUGe3PkRHGm9tzTdxwnMD4NPzkQDCBarr66Buy8XqTo Diff:
OldNewDifferences
582582 @Callable(i)
583583 func putOneTkn (amAssetPart,prAssetPart,outLp,slippage,autoStake) = {
584584 let cfg = gfc()
585- let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
586- let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
587- let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
588- let poolCfg = gpc()
589- let amId = poolCfg[idxAmAsId]
590- let prId = poolCfg[idxPrAsId]
591- let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
592- let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
593- let addon = valueOrElse(getString(this, ada()), "")
594- let userAddress = if ((addon == toString(i.caller)))
595- then i.originCaller
596- else i.caller
597- let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
598- let check = reentrantInvoke(addonContract, "ensureCanPutOneTkn", [toString(userAddress)], nil)
599- if ((check == check))
585+ let error = throw("error 123")
586+ if ((error == error))
600587 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")
613- 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")
588+ let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
589+ let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
590+ let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
591+ let poolCfg = gpc()
592+ let amId = poolCfg[idxAmAsId]
593+ let prId = poolCfg[idxPrAsId]
594+ let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
595+ let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
596+ let addon = valueOrElse(getString(this, ada()), "")
597+ let userAddress = if ((addon == toString(i.caller)))
598+ then i.originCaller
599+ else i.caller
600+ let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
601+ let check = reentrantInvoke(addonContract, "ensureCanPutOneTkn", [toString(userAddress)], nil)
602+ if ((check == check))
603+ then {
604+ let afterCheckError = throw("after check")
605+ if ((afterCheckError == afterCheckError))
606+ then if (if (if (if ((0 >= slippage))
607+ then true
608+ else (0 >= amAssetPart))
609+ then true
610+ else (0 >= prAssetPart))
611+ then true
612+ else (0 >= outLp))
613+ then throw("Wrong params")
614+ else if ((size(i.payments) != 1))
615+ then throw("1 pmnt expd")
623616 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 error = throw("error after D0")
639- if ((error == error))
640- 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))
617+ let pmt = value(i.payments[0])
618+ let pmtAssetId = toBase58String(value(pmt.assetId))
619+ let pmtAmt = pmt.amount
620+ if (if (if ((amAssetPart > pmtAmt))
621+ then true
622+ else (prAssetPart > pmtAmt))
623+ then true
624+ else (10000000 > pmtAmt))
625+ then throw("Wrong pmt amt")
626+ else {
627+ let amBalance = getAccBalance(amId)
628+ let prBalance = getAccBalance(prId)
629+ let $t02496925349 = if ((pmtAssetId == amId))
630+ then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
631+ else if ((pmtAssetId == prId))
632+ then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
633+ else throw("wrong pmtAssetId")
634+ let amBalanceNow = $t02496925349._1
635+ let prBalanceNow = $t02496925349._2
636+ let virtSwapInAm = $t02496925349._3
637+ let virtSwapOutPr = $t02496925349._4
638+ let virtSwapInPr = $t02496925349._5
639+ let virtSwapOutAm = $t02496925349._6
640+ let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
641+ let errorAfterD0 = throw("error after D0")
642+ if ((errorAfterD0 == errorAfterD0))
644643 then {
645- let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
646- if ((D0vsD1 == D0vsD1))
644+ let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
645+ let error1 = throw("error after D1")
646+ if ((error1 == error1))
647647 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))
648+ let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
649+ if ((D0vsD1 == D0vsD1))
658650 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))
651+ let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
652+ let estimLP = estPut._2
653+ let lpAssetId = estPut._7
654+ let state = estPut._9
655+ let amDiff = estPut._10
656+ let prDiff = estPut._11
657+ let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
658+ let emitLpAmt = toInt(lpCalcRes._2)
659+ let e = invoke(fca, "emit", [emitLpAmt], nil)
660+ if ((e == e))
666661 then {
667- let sa = if ((amDiff > 0))
668- then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
669- else nil
670- if ((sa == sa))
662+ let el = match e {
663+ case legacy: Address =>
664+ invoke(legacy, "emit", [emitLpAmt], nil)
665+ case _ =>
666+ unit
667+ }
668+ if ((el == el))
671669 then {
672- let sp = if ((prDiff > 0))
673- then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
670+ let sa = if ((amDiff > 0))
671+ then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
674672 else nil
675- if ((sp == sp))
673+ if ((sa == sa))
676674 then {
677- let lpTrnsfr = if (autoStake)
675+ let sp = if ((prDiff > 0))
676+ then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
677+ else nil
678+ if ((sp == sp))
678679 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.")
680+ let lpTrnsfr = if (autoStake)
681+ then {
682+ let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
683+ if ((ss == ss))
684+ then nil
685+ else throw("Strict value is not equal to itself.")
686+ }
687+ else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
688+ (state ++ lpTrnsfr)
683689 }
684- else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
685- (state ++ lpTrnsfr)
690+ else throw("Strict value is not equal to itself.")
686691 }
687692 else throw("Strict value is not equal to itself.")
688693 }
696701 }
697702 else throw("Strict value is not equal to itself.")
698703 }
699- else throw("Strict value is not equal to itself.")
700704 }
701- }
705+ else throw("Strict value is not equal to itself.")
706+ }
702707 else throw("Strict value is not equal to itself.")
703708 }
704709 else throw("Strict value is not equal to itself.")
774779 let estimPrAmt = r._2
775780 let amBalance = getAccBalance(amId)
776781 let prBalance = getAccBalance(prId)
777- let $t03043230889 = if ((outAssetId == amId))
782+ let $t03047830935 = if ((outAssetId == amId))
778783 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
779784 else if ((outAssetId == prId))
780785 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
781786 else throw("wrong outAssetId")
782- let amBalanceNow = $t03043230889._1
783- let prBalanceNow = $t03043230889._2
784- let virtSwapInAm = $t03043230889._3
785- let virtSwapOutPr = $t03043230889._4
786- let virtSwapInPr = $t03043230889._5
787- let virtSwapOutAm = $t03043230889._6
788- let totalGet = $t03043230889._7
787+ let amBalanceNow = $t03047830935._1
788+ let prBalanceNow = $t03047830935._2
789+ let virtSwapInAm = $t03047830935._3
790+ let virtSwapOutPr = $t03047830935._4
791+ let virtSwapInPr = $t03047830935._5
792+ let virtSwapOutAm = $t03047830935._6
793+ let totalGet = $t03047830935._7
789794 if (if ((0 > virtSwapInAm))
790795 then true
791796 else (0 > virtSwapInPr))
799804 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
800805 if ((finalRes == finalRes))
801806 then {
802- let $t03159431698 = if ((outAssetId == amId))
807+ let $t03164031744 = if ((outAssetId == amId))
803808 then $Tuple2(toInt(finalRes._2), 0)
804809 else $Tuple2(0, toInt(finalRes._2))
805- let outAm = $t03159431698._1
806- let outPr = $t03159431698._2
810+ let outAm = $t03164031744._1
811+ let outPr = $t03164031744._2
807812 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
808813 let curPr = f1(curPrX18, scale8)
809814 let state = [ScriptTransfer(userAddress, (outAm + outPr), if ((outAssetId == "WAVES"))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let scale8 = 100000000
55
66 let scale8BigInt = toBigInt(100000000)
77
88 let scale18 = toBigInt(1000000000000000000)
99
1010 let zeroBigInt = toBigInt(0)
1111
1212 let oneBigInt = toBigInt(1)
1313
1414 let slippage4D = toBigInt((scale8 - ((scale8 * 1) / scale8)))
1515
1616 let Amult = "100"
1717
1818 let Dconv = "1"
1919
2020 let SEP = "__"
2121
2222 let EMPTY = ""
2323
2424 let PoolActive = 1
2525
2626 let PoolPutDis = 2
2727
2828 let PoolMatcherDis = 3
2929
3030 let PoolShutdown = 4
3131
3232 let idxPoolAddress = 1
3333
3434 let idxPoolSt = 2
3535
3636 let idxLPAsId = 3
3737
3838 let idxAmAsId = 4
3939
4040 let idxPrAsId = 5
4141
4242 let idxAmtAsDcm = 6
4343
4444 let idxPriceAsDcm = 7
4545
4646 let idxIAmtAsId = 8
4747
4848 let idxIPriceAsId = 9
4949
5050 let idxFactStakCntr = 1
5151
5252 let idxFactSlippCntr = 7
5353
5454 let idxFactGwxRewCntr = 10
5555
5656 let delay = "%s__delay"
5757
5858 func t1 (origVal,origScaleMult) = fraction(toBigInt(origVal), scale18, toBigInt(origScaleMult))
5959
6060
6161 func f1 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), scale18))
6262
6363
6464 func ts (amt,resScale,curScale) = fraction(amt, resScale, curScale)
6565
6666
6767 func abs (val) = if ((zeroBigInt > val))
6868 then -(val)
6969 else val
7070
7171
7272 func fc () = "%s__factoryContract"
7373
7474
7575 func mpk () = "%s__managerPublicKey"
7676
7777
7878 func pmpk () = "%s__pendingManagerPublicKey"
7979
8080
8181 func pl () = "%s%s__price__last"
8282
8383
8484 func ph (h,t) = makeString(["%s%s%d%d__price__history", toString(h), toString(t)], SEP)
8585
8686
8787 func pau (ua,txId) = ((("%s%s%s__P__" + ua) + "__") + txId)
8888
8989
9090 func gau (ua,txId) = ((("%s%s%s__G__" + ua) + "__") + txId)
9191
9292
9393 func aa () = "%s__amountAsset"
9494
9595
9696 func pa () = "%s__priceAsset"
9797
9898
9999 func amp () = "%s__amp"
100100
101101
102102 func ada () = "%s__addonAddr"
103103
104104
105105 func lgotc (caller) = makeString(["%s%s__lastGetOneTknCall", caller], SEP)
106106
107107
108108 func lsotc (caller) = makeString(["%s%s__lastPutOneTknCall", caller], SEP)
109109
110110
111111 func fcfg () = "%s__factoryConfig"
112112
113113
114114 func mtpk () = "%s%s__matcher__publicKey"
115115
116116
117117 func pc (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
118118
119119
120120 func mba (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
121121
122122
123123 func aps () = "%s__shutdown"
124124
125125
126126 func toe (orV,sendrV,matchV) = throw(((((("Failed: ordValid=" + toString(orV)) + " sndrValid=") + toString(sendrV)) + " mtchrValid=") + toString(matchV)))
127127
128128
129129 func str (val) = match val {
130130 case valStr: String =>
131131 valStr
132132 case _ =>
133133 throw("fail cast to String")
134134 }
135135
136136
137137 func strf (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
138138
139139
140140 func intf (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
141141
142142
143143 let fca = addressFromStringValue(strf(this, fc()))
144144
145145 let A = strf(this, amp())
146146
147147 func igs () = valueOrElse(getBoolean(fca, aps()), false)
148148
149149
150150 func mp () = fromBase58String(strf(fca, mtpk()))
151151
152152
153153 func gpc () = {
154154 let amtAs = strf(this, aa())
155155 let priceAs = strf(this, pa())
156156 let iPriceAs = intf(fca, mba(priceAs))
157157 let iAmtAs = intf(fca, mba(amtAs))
158158 split(strf(fca, pc(toString(iAmtAs), toString(iPriceAs))), SEP)
159159 }
160160
161161
162162 func gfc () = split(strf(fca, fcfg()), SEP)
163163
164164
165165 func dataPutActionInfo (inAmtAssetAmt,inPriceAssetAmt,outLpAmt,price,slipByUser,slippageReal,txHeight,txTimestamp,slipageAmAmt,slipagePrAmt) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(inAmtAssetAmt), toString(inPriceAssetAmt), toString(outLpAmt), toString(price), toString(slipByUser), toString(slippageReal), toString(txHeight), toString(txTimestamp), toString(slipageAmAmt), toString(slipagePrAmt)], SEP)
166166
167167
168168 func dataGetActionInfo (outAmtAssetAmt,outPriceAssetAmt,inLpAmt,price,txHeight,txTimestamp) = makeString(["%d%d%d%d%d%d", toString(outAmtAssetAmt), toString(outPriceAssetAmt), toString(inLpAmt), toString(price), toString(txHeight), toString(txTimestamp)], SEP)
169169
170170
171171 func getAccBalance (assetId) = if ((assetId == "WAVES"))
172172 then wavesBalance(this).available
173173 else assetBalance(this, fromBase58String(assetId))
174174
175175
176176 func cpbi (prAmtX18,amAmtX18) = fraction(prAmtX18, scale18, amAmtX18)
177177
178178
179179 func vad (A1,A2,slippage) = {
180180 let diff = fraction((A1 - A2), scale8BigInt, A2)
181181 let pass = ((slippage - abs(diff)) > zeroBigInt)
182182 if (!(pass))
183183 then throw(("Big slpg: " + toString(diff)))
184184 else $Tuple2(pass, min([A1, A2]))
185185 }
186186
187187
188188 func vd (D1,D0,slpg) = {
189189 let diff = fraction(D0, scale8BigInt, D1)
190190 if ((diff == diff))
191191 then {
192192 let error = throw("after diff error")
193193 if ((error == error))
194194 then {
195195 let fail = (slpg > diff)
196196 if (if (fail)
197197 then true
198198 else (D0 > D1))
199199 then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
200200 else fail
201201 }
202202 else throw("Strict value is not equal to itself.")
203203 }
204204 else throw("Strict value is not equal to itself.")
205205 }
206206
207207
208208 func pcp (amAssetDcm,prAssetDcm,amAmt,prAmt) = {
209209 let amtAsAmtX18 = t1(amAmt, amAssetDcm)
210210 let prAsAmtX18 = t1(prAmt, prAssetDcm)
211211 cpbi(prAsAmtX18, amtAsAmtX18)
212212 }
213213
214214
215215 func calcPrices (amAmt,prAmt,lpAmt) = {
216216 let cfg = gpc()
217217 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
218218 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
219219 let priceX18 = pcp(amtAsDcm, prAsDcm, amAmt, prAmt)
220220 let amAmtX18 = t1(amAmt, amtAsDcm)
221221 let prAmtX18 = t1(prAmt, prAsDcm)
222222 let lpAmtX18 = t1(lpAmt, scale8)
223223 let lpPrInAmAsX18 = cpbi(amAmtX18, lpAmtX18)
224224 let lpPrInPrAsX18 = cpbi(prAmtX18, lpAmtX18)
225225 [priceX18, lpPrInAmAsX18, lpPrInPrAsX18]
226226 }
227227
228228
229229 func calculatePrices (amAmt,prAmt,lpAmt) = {
230230 let p = calcPrices(amAmt, prAmt, lpAmt)
231231 [f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)]
232232 }
233233
234234
235235 func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
236236 let cfg = gpc()
237237 let lpId = cfg[idxLPAsId]
238238 let amId = cfg[idxAmAsId]
239239 let prId = cfg[idxPrAsId]
240240 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
241241 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
242242 let sts = cfg[idxPoolSt]
243243 let lpEmiss = valueOrErrorMessage(assetInfo(fromBase58String(lpId)), "Wrong LP id").quantity
244244 if ((lpId != pmtAssetId))
245245 then throw("Wrong pmt asset")
246246 else {
247247 let amBalance = getAccBalance(amId)
248248 let amBalanceX18 = t1(amBalance, amDcm)
249249 let prBalance = getAccBalance(prId)
250250 let prBalanceX18 = t1(prBalance, prDcm)
251251 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
252252 let curPrice = f1(curPriceX18, scale8)
253253 let pmtLpAmtX18 = t1(pmtLpAmt, scale8)
254254 let lpEmissX18 = t1(lpEmiss, scale8)
255255 let outAmAmtX18 = fraction(amBalanceX18, pmtLpAmtX18, lpEmissX18)
256256 let outPrAmtX18 = fraction(prBalanceX18, pmtLpAmtX18, lpEmissX18)
257257 let outAmAmt = f1(outAmAmtX18, amDcm)
258258 let outPrAmt = f1(outPrAmtX18, prDcm)
259259 let state = if ((txId58 == ""))
260260 then nil
261261 else [ScriptTransfer(userAddress, outAmAmt, if ((amId == "WAVES"))
262262 then unit
263263 else fromBase58String(amId)), ScriptTransfer(userAddress, outPrAmt, if ((prId == "WAVES"))
264264 then unit
265265 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)]
266266 $Tuple10(outAmAmt, outPrAmt, amId, prId, amBalance, prBalance, lpEmiss, curPriceX18, sts, state)
267267 }
268268 }
269269
270270
271271 func epo (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,userAddress,isEval,emitLp,isOneAsset,pmtAmt,pmtId) = {
272272 let cfg = gpc()
273273 let lpId = fromBase58String(cfg[idxLPAsId])
274274 let amIdStr = cfg[idxAmAsId]
275275 let prIdStr = cfg[idxPrAsId]
276276 let inAmIdStr = cfg[idxIAmtAsId]
277277 let inPrIdStr = cfg[idxIPriceAsId]
278278 let amtDcm = parseIntValue(cfg[idxAmtAsDcm])
279279 let priceDcm = parseIntValue(cfg[idxPriceAsDcm])
280280 let sts = cfg[idxPoolSt]
281281 let lpEm = valueOrErrorMessage(assetInfo(lpId), "Wr lp as").quantity
282282 let amBalance = if (isEval)
283283 then getAccBalance(amIdStr)
284284 else if (if (isOneAsset)
285285 then (pmtId == amIdStr)
286286 else false)
287287 then (getAccBalance(amIdStr) - pmtAmt)
288288 else if (isOneAsset)
289289 then getAccBalance(amIdStr)
290290 else (getAccBalance(amIdStr) - inAmAmt)
291291 let prBalance = if (isEval)
292292 then getAccBalance(prIdStr)
293293 else if (if (isOneAsset)
294294 then (pmtId == prIdStr)
295295 else false)
296296 then (getAccBalance(prIdStr) - pmtAmt)
297297 else if (isOneAsset)
298298 then getAccBalance(prIdStr)
299299 else (getAccBalance(prIdStr) - inPrAmt)
300300 let inAmAssetAmtX18 = t1(inAmAmt, amtDcm)
301301 let inPrAssetAmtX18 = t1(inPrAmt, priceDcm)
302302 let userPriceX18 = cpbi(inPrAssetAmtX18, inAmAssetAmtX18)
303303 let amBalanceX18 = t1(amBalance, amtDcm)
304304 let prBalanceX18 = t1(prBalance, priceDcm)
305305 let r = if ((lpEm == 0))
306306 then {
307307 let curPriceX18 = zeroBigInt
308308 let slippageX18 = zeroBigInt
309309 let lpAmtX18 = pow((inAmAssetAmtX18 * inPrAssetAmtX18), 0, toBigInt(5), 1, 0, DOWN)
310310 $Tuple5(f1(lpAmtX18, scale8), f1(inAmAssetAmtX18, amtDcm), f1(inPrAssetAmtX18, priceDcm), cpbi((prBalanceX18 + inPrAssetAmtX18), (amBalanceX18 + inAmAssetAmtX18)), slippageX18)
311311 }
312312 else {
313313 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
314314 let slippageRealX18 = fraction(abs((curPriceX18 - userPriceX18)), scale18, curPriceX18)
315315 let slippageX18 = t1(slippage, scale8)
316316 if (if ((curPriceX18 != zeroBigInt))
317317 then (slippageRealX18 > slippageX18)
318318 else false)
319319 then throw(((("Price slippage " + toString(slippageRealX18)) + " > ") + toString(slippageX18)))
320320 else {
321321 let lpEmissionX18 = t1(lpEm, scale8)
322322 let prViaAmX18 = fraction(inAmAssetAmtX18, curPriceX18, scale18)
323323 let amViaPrX18 = fraction(inPrAssetAmtX18, scale18, curPriceX18)
324324 let expectedAmts = if ((prViaAmX18 > inPrAssetAmtX18))
325325 then $Tuple2(amViaPrX18, inPrAssetAmtX18)
326326 else $Tuple2(inAmAssetAmtX18, prViaAmX18)
327327 let expAmtAssetAmtX18 = expectedAmts._1
328328 let expPriceAssetAmtX18 = expectedAmts._2
329329 let lpAmtX18 = fraction(lpEmissionX18, expPriceAssetAmtX18, prBalanceX18)
330330 $Tuple5(f1(lpAmtX18, scale8), f1(expAmtAssetAmtX18, amtDcm), f1(expPriceAssetAmtX18, priceDcm), curPriceX18, slippageX18)
331331 }
332332 }
333333 let calcLpAmt = r._1
334334 let calcAmAssetPmt = r._2
335335 let calcPrAssetPmt = r._3
336336 let curPrice = f1(r._4, scale8)
337337 let slippageCalc = f1(r._5, scale8)
338338 if ((0 >= calcLpAmt))
339339 then throw("LP <= 0")
340340 else {
341341 let emitLpAmt = if (!(emitLp))
342342 then 0
343343 else calcLpAmt
344344 let amDiff = (inAmAmt - calcAmAssetPmt)
345345 let prDiff = (inPrAmt - calcPrAssetPmt)
346346 let $t01557815923 = if (if (isOneAsset)
347347 then (pmtId == amIdStr)
348348 else false)
349349 then $Tuple2(pmtAmt, 0)
350350 else if (if (isOneAsset)
351351 then (pmtId == prIdStr)
352352 else false)
353353 then $Tuple2(0, pmtAmt)
354354 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
355355 let writeAmAmt = $t01557815923._1
356356 let writePrAmt = $t01557815923._2
357357 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))]
358358 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
359359 }
360360 }
361361
362362
363363 func moa (order) = {
364364 let cfg = gpc()
365365 let amtAsId = cfg[idxAmAsId]
366366 let prAsId = cfg[idxPrAsId]
367367 let sts = parseIntValue(cfg[idxPoolSt])
368368 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
369369 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
370370 let accAmtAsBalance = getAccBalance(amtAsId)
371371 let accPrAsBalance = getAccBalance(prAsId)
372372 let curPriceX18 = if ((order.orderType == Buy))
373373 then pcp(amtAsDcm, prAsDcm, (accAmtAsBalance + order.amount), accPrAsBalance)
374374 else pcp(amtAsDcm, prAsDcm, (accAmtAsBalance - order.amount), accPrAsBalance)
375375 let curPrice = f1(curPriceX18, scale8)
376376 if (if (if (igs())
377377 then true
378378 else (sts == PoolMatcherDis))
379379 then true
380380 else (sts == PoolShutdown))
381381 then throw("Admin blocked")
382382 else {
383383 let orAmtAsset = order.assetPair.amountAsset
384384 let orAmtAsStr = if ((orAmtAsset == unit))
385385 then "WAVES"
386386 else toBase58String(value(orAmtAsset))
387387 let orPrAsset = order.assetPair.priceAsset
388388 let orPrAsStr = if ((orPrAsset == unit))
389389 then "WAVES"
390390 else toBase58String(value(orPrAsset))
391391 if (if ((orAmtAsStr != amtAsId))
392392 then true
393393 else (orPrAsStr != prAsId))
394394 then throw("Wr assets")
395395 else {
396396 let orderPrice = order.price
397397 let priceDcm = fraction(scale8, prAsDcm, amtAsDcm)
398398 let castOrderPrice = ts(orderPrice, scale8, priceDcm)
399399 let isOrderPriceValid = if ((order.orderType == Buy))
400400 then (curPrice >= castOrderPrice)
401401 else (castOrderPrice >= curPrice)
402402 true
403403 }
404404 }
405405 }
406406
407407
408408 func cg (i) = if ((size(i.payments) != 1))
409409 then throw("1 pmnt exp")
410410 else {
411411 let pmt = value(i.payments[0])
412412 let pmtAssetId = value(pmt.assetId)
413413 let pmtAmt = pmt.amount
414414 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
415415 let outAmAmt = r._1
416416 let outPrAmt = r._2
417417 let sts = parseIntValue(r._9)
418418 let state = r._10
419419 if (if (igs())
420420 then true
421421 else (sts == PoolShutdown))
422422 then throw(("Admin blocked: " + toString(sts)))
423423 else $Tuple5(outAmAmt, outPrAmt, pmtAmt, pmtAssetId, state)
424424 }
425425
426426
427427 func cp (caller,txId,amAsPmt,prAsPmt,slippage,emitLp,isOneAsset,pmtAmt,pmtId) = {
428428 let r = epo(txId, slippage, value(amAsPmt).amount, value(amAsPmt).assetId, value(prAsPmt).amount, value(prAsPmt).assetId, caller, false, emitLp, isOneAsset, pmtAmt, pmtId)
429429 let sts = parseIntValue(r._8)
430430 if (if (if (igs())
431431 then true
432432 else (sts == PoolPutDis))
433433 then true
434434 else (sts == PoolShutdown))
435435 then throw(("Blocked:" + toString(sts)))
436436 else r
437437 }
438438
439439
440440 func m () = match getString(mpk()) {
441441 case s: String =>
442442 fromBase58String(s)
443443 case _: Unit =>
444444 unit
445445 case _ =>
446446 throw("Match error")
447447 }
448448
449449
450450 func pm () = match getString(pmpk()) {
451451 case s: String =>
452452 fromBase58String(s)
453453 case _: Unit =>
454454 unit
455455 case _ =>
456456 throw("Match error")
457457 }
458458
459459
460460 let pd = throw("Permission denied")
461461
462462 func mm (i) = match m() {
463463 case pk: ByteVector =>
464464 if ((i.callerPublicKey == pk))
465465 then true
466466 else pd
467467 case _: Unit =>
468468 if ((i.caller == this))
469469 then true
470470 else pd
471471 case _ =>
472472 throw("Match error")
473473 }
474474
475475
476476 @Callable(i)
477477 func constructor (fc) = {
478478 let c = mm(i)
479479 if ((c == c))
480480 then [StringEntry(fc(), fc)]
481481 else throw("Strict value is not equal to itself.")
482482 }
483483
484484
485485
486486 @Callable(i)
487487 func setManager (pendingManagerPublicKey) = {
488488 let c = mm(i)
489489 if ((c == c))
490490 then {
491491 let cm = fromBase58String(pendingManagerPublicKey)
492492 if ((cm == cm))
493493 then [StringEntry(pmpk(), pendingManagerPublicKey)]
494494 else throw("Strict value is not equal to itself.")
495495 }
496496 else throw("Strict value is not equal to itself.")
497497 }
498498
499499
500500
501501 @Callable(i)
502502 func confirmManager () = {
503503 let p = pm()
504504 let hpm = if (isDefined(p))
505505 then true
506506 else throw("No pending manager")
507507 if ((hpm == hpm))
508508 then {
509509 let cpm = if ((i.callerPublicKey == value(p)))
510510 then true
511511 else throw("You are not pending manager")
512512 if ((cpm == cpm))
513513 then [StringEntry(mpk(), toBase58String(value(p))), DeleteEntry(pmpk())]
514514 else throw("Strict value is not equal to itself.")
515515 }
516516 else throw("Strict value is not equal to itself.")
517517 }
518518
519519
520520
521521 @Callable(i)
522522 func put (slip,autoStake) = {
523523 let factCfg = gfc()
524524 let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
525525 let slipCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactSlippCntr]), "Wr sl addr")
526526 if ((0 > slip))
527527 then throw("Wrong slippage")
528528 else if ((size(i.payments) != 2))
529529 then throw("2 pmnts expd")
530530 else {
531531 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, "")
532532 let emitLpAmt = e._2
533533 let lpAssetId = e._7
534534 let state = e._9
535535 let amDiff = e._10
536536 let prDiff = e._11
537537 let amId = e._12
538538 let prId = e._13
539539 let r = invoke(fca, "emit", [emitLpAmt], nil)
540540 if ((r == r))
541541 then {
542542 let el = match r {
543543 case legacy: Address =>
544544 invoke(legacy, "emit", [emitLpAmt], nil)
545545 case _ =>
546546 unit
547547 }
548548 if ((el == el))
549549 then {
550550 let sa = if ((amDiff > 0))
551551 then invoke(slipCntr, "put", nil, [AttachedPayment(amId, amDiff)])
552552 else nil
553553 if ((sa == sa))
554554 then {
555555 let sp = if ((prDiff > 0))
556556 then invoke(slipCntr, "put", nil, [AttachedPayment(prId, prDiff)])
557557 else nil
558558 if ((sp == sp))
559559 then {
560560 let lpTrnsfr = if (autoStake)
561561 then {
562562 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
563563 if ((ss == ss))
564564 then nil
565565 else throw("Strict value is not equal to itself.")
566566 }
567567 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
568568 (state ++ lpTrnsfr)
569569 }
570570 else throw("Strict value is not equal to itself.")
571571 }
572572 else throw("Strict value is not equal to itself.")
573573 }
574574 else throw("Strict value is not equal to itself.")
575575 }
576576 else throw("Strict value is not equal to itself.")
577577 }
578578 }
579579
580580
581581
582582 @Callable(i)
583583 func putOneTkn (amAssetPart,prAssetPart,outLp,slippage,autoStake) = {
584584 let cfg = gfc()
585- let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
586- let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
587- let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
588- let poolCfg = gpc()
589- let amId = poolCfg[idxAmAsId]
590- let prId = poolCfg[idxPrAsId]
591- let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
592- let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
593- let addon = valueOrElse(getString(this, ada()), "")
594- let userAddress = if ((addon == toString(i.caller)))
595- then i.originCaller
596- else i.caller
597- let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
598- let check = reentrantInvoke(addonContract, "ensureCanPutOneTkn", [toString(userAddress)], nil)
599- if ((check == check))
585+ let error = throw("error 123")
586+ if ((error == error))
600587 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")
613- 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")
588+ let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
589+ let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
590+ let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
591+ let poolCfg = gpc()
592+ let amId = poolCfg[idxAmAsId]
593+ let prId = poolCfg[idxPrAsId]
594+ let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
595+ let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
596+ let addon = valueOrElse(getString(this, ada()), "")
597+ let userAddress = if ((addon == toString(i.caller)))
598+ then i.originCaller
599+ else i.caller
600+ let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
601+ let check = reentrantInvoke(addonContract, "ensureCanPutOneTkn", [toString(userAddress)], nil)
602+ if ((check == check))
603+ then {
604+ let afterCheckError = throw("after check")
605+ if ((afterCheckError == afterCheckError))
606+ then if (if (if (if ((0 >= slippage))
607+ then true
608+ else (0 >= amAssetPart))
609+ then true
610+ else (0 >= prAssetPart))
611+ then true
612+ else (0 >= outLp))
613+ then throw("Wrong params")
614+ else if ((size(i.payments) != 1))
615+ then throw("1 pmnt expd")
623616 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 error = throw("error after D0")
639- if ((error == error))
640- 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))
617+ let pmt = value(i.payments[0])
618+ let pmtAssetId = toBase58String(value(pmt.assetId))
619+ let pmtAmt = pmt.amount
620+ if (if (if ((amAssetPart > pmtAmt))
621+ then true
622+ else (prAssetPart > pmtAmt))
623+ then true
624+ else (10000000 > pmtAmt))
625+ then throw("Wrong pmt amt")
626+ else {
627+ let amBalance = getAccBalance(amId)
628+ let prBalance = getAccBalance(prId)
629+ let $t02496925349 = if ((pmtAssetId == amId))
630+ then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
631+ else if ((pmtAssetId == prId))
632+ then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
633+ else throw("wrong pmtAssetId")
634+ let amBalanceNow = $t02496925349._1
635+ let prBalanceNow = $t02496925349._2
636+ let virtSwapInAm = $t02496925349._3
637+ let virtSwapOutPr = $t02496925349._4
638+ let virtSwapInPr = $t02496925349._5
639+ let virtSwapOutAm = $t02496925349._6
640+ let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
641+ let errorAfterD0 = throw("error after D0")
642+ if ((errorAfterD0 == errorAfterD0))
644643 then {
645- let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
646- if ((D0vsD1 == D0vsD1))
644+ let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
645+ let error1 = throw("error after D1")
646+ if ((error1 == error1))
647647 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))
648+ let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
649+ if ((D0vsD1 == D0vsD1))
658650 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))
651+ let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
652+ let estimLP = estPut._2
653+ let lpAssetId = estPut._7
654+ let state = estPut._9
655+ let amDiff = estPut._10
656+ let prDiff = estPut._11
657+ let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
658+ let emitLpAmt = toInt(lpCalcRes._2)
659+ let e = invoke(fca, "emit", [emitLpAmt], nil)
660+ if ((e == e))
666661 then {
667- let sa = if ((amDiff > 0))
668- then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
669- else nil
670- if ((sa == sa))
662+ let el = match e {
663+ case legacy: Address =>
664+ invoke(legacy, "emit", [emitLpAmt], nil)
665+ case _ =>
666+ unit
667+ }
668+ if ((el == el))
671669 then {
672- let sp = if ((prDiff > 0))
673- then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
670+ let sa = if ((amDiff > 0))
671+ then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
674672 else nil
675- if ((sp == sp))
673+ if ((sa == sa))
676674 then {
677- let lpTrnsfr = if (autoStake)
675+ let sp = if ((prDiff > 0))
676+ then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
677+ else nil
678+ if ((sp == sp))
678679 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.")
680+ let lpTrnsfr = if (autoStake)
681+ then {
682+ let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
683+ if ((ss == ss))
684+ then nil
685+ else throw("Strict value is not equal to itself.")
686+ }
687+ else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
688+ (state ++ lpTrnsfr)
683689 }
684- else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
685- (state ++ lpTrnsfr)
690+ else throw("Strict value is not equal to itself.")
686691 }
687692 else throw("Strict value is not equal to itself.")
688693 }
689694 else throw("Strict value is not equal to itself.")
690695 }
691696 else throw("Strict value is not equal to itself.")
692697 }
693698 else throw("Strict value is not equal to itself.")
694699 }
695700 else throw("Strict value is not equal to itself.")
696701 }
697702 else throw("Strict value is not equal to itself.")
698703 }
699- else throw("Strict value is not equal to itself.")
700704 }
701- }
705+ else throw("Strict value is not equal to itself.")
706+ }
702707 else throw("Strict value is not equal to itself.")
703708 }
704709 else throw("Strict value is not equal to itself.")
705710 }
706711
707712
708713
709714 @Callable(i)
710715 func putForFree (maxSlpg) = if ((0 > maxSlpg))
711716 then throw("Wrong slpg")
712717 else if ((size(i.payments) != 2))
713718 then throw("2 pmnts expd")
714719 else {
715720 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, "")
716721 estPut._9
717722 }
718723
719724
720725
721726 @Callable(i)
722727 func get () = {
723728 let r = cg(i)
724729 let outAmtAmt = r._1
725730 let outPrAmt = r._2
726731 let pmtAmt = r._3
727732 let pmtAssetId = r._4
728733 let state = r._5
729734 let b = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
730735 if ((b == b))
731736 then state
732737 else throw("Strict value is not equal to itself.")
733738 }
734739
735740
736741
737742 @Callable(i)
738743 func getOneTkn (exchResult,notUsed,outAmount,outAssetId,slippage) = if ((size(i.payments) != 1))
739744 then throw("1 pmnt expd")
740745 else {
741746 let cfg = gpc()
742747 let lpId = cfg[idxLPAsId]
743748 let amId = cfg[idxAmAsId]
744749 let prId = cfg[idxPrAsId]
745750 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
746751 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
747752 let sts = cfg[idxPoolSt]
748753 let factCfg = gfc()
749754 let gwxCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactGwxRewCntr]), "Wr sl addr")
750755 let pmt = value(i.payments[0])
751756 let addon = valueOrElse(getString(this, ada()), "")
752757 let userAddress = if ((addon == toString(i.caller)))
753758 then i.originCaller
754759 else i.caller
755760 let txId58 = toBase58String(i.transactionId)
756761 let pmtAssetId = value(pmt.assetId)
757762 let pmtAmt = pmt.amount
758763 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
759764 let check = reentrantInvoke(addonContract, "ensureCanGetOneTkn", [toString(userAddress)], nil)
760765 if ((check == check))
761766 then if ((1000000000 > pmtAmt))
762767 then throw("Min pmt 10 LP")
763768 else if (if (if ((0 > slippage))
764769 then true
765770 else (0 > exchResult))
766771 then true
767772 else (0 > outAmount))
768773 then throw("Wrong params")
769774 else if ((lpId != toBase58String(pmtAssetId)))
770775 then throw("Wrong LP")
771776 else {
772777 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
773778 let estimAmAmt = r._1
774779 let estimPrAmt = r._2
775780 let amBalance = getAccBalance(amId)
776781 let prBalance = getAccBalance(prId)
777- let $t03043230889 = if ((outAssetId == amId))
782+ let $t03047830935 = if ((outAssetId == amId))
778783 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
779784 else if ((outAssetId == prId))
780785 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
781786 else throw("wrong outAssetId")
782- let amBalanceNow = $t03043230889._1
783- let prBalanceNow = $t03043230889._2
784- let virtSwapInAm = $t03043230889._3
785- let virtSwapOutPr = $t03043230889._4
786- let virtSwapInPr = $t03043230889._5
787- let virtSwapOutAm = $t03043230889._6
788- let totalGet = $t03043230889._7
787+ let amBalanceNow = $t03047830935._1
788+ let prBalanceNow = $t03047830935._2
789+ let virtSwapInAm = $t03047830935._3
790+ let virtSwapOutPr = $t03047830935._4
791+ let virtSwapInPr = $t03047830935._5
792+ let virtSwapOutAm = $t03047830935._6
793+ let totalGet = $t03047830935._7
789794 if (if ((0 > virtSwapInAm))
790795 then true
791796 else (0 > virtSwapInPr))
792797 then throw("Wrong calc")
793798 else {
794799 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
795800 let D1 = invoke(gwxCntr, "calcD", [toString(((amBalanceNow - virtSwapInAm) + virtSwapOutAm)), toString(((prBalanceNow + virtSwapOutPr) - virtSwapInPr)), A, Amult, Dconv], nil)
796801 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
797802 if ((D0vsD1 == D0vsD1))
798803 then {
799804 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
800805 if ((finalRes == finalRes))
801806 then {
802- let $t03159431698 = if ((outAssetId == amId))
807+ let $t03164031744 = if ((outAssetId == amId))
803808 then $Tuple2(toInt(finalRes._2), 0)
804809 else $Tuple2(0, toInt(finalRes._2))
805- let outAm = $t03159431698._1
806- let outPr = $t03159431698._2
810+ let outAm = $t03164031744._1
811+ let outPr = $t03164031744._2
807812 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
808813 let curPr = f1(curPrX18, scale8)
809814 let state = [ScriptTransfer(userAddress, (outAm + outPr), if ((outAssetId == "WAVES"))
810815 then unit
811816 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)]
812817 if ((state == state))
813818 then {
814819 let burn = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
815820 if ((burn == burn))
816821 then state
817822 else throw("Strict value is not equal to itself.")
818823 }
819824 else throw("Strict value is not equal to itself.")
820825 }
821826 else throw("Strict value is not equal to itself.")
822827 }
823828 else throw("Strict value is not equal to itself.")
824829 }
825830 }
826831 else throw("Strict value is not equal to itself.")
827832 }
828833
829834
830835
831836 @Callable(i)
832837 func getNoLess (noLessThenAmtAsset,noLessThenPriceAsset) = {
833838 let r = cg(i)
834839 let outAmAmt = r._1
835840 let outPrAmt = r._2
836841 let pmtAmt = r._3
837842 let pmtAssetId = r._4
838843 let state = r._5
839844 if ((noLessThenAmtAsset > outAmAmt))
840845 then throw(((("Failed: " + toString(outAmAmt)) + " < ") + toString(noLessThenAmtAsset)))
841846 else if ((noLessThenPriceAsset > outPrAmt))
842847 then throw(((("Failed: " + toString(outPrAmt)) + " < ") + toString(noLessThenPriceAsset)))
843848 else {
844849 let burnLPAssetOnFactory = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
845850 if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
846851 then state
847852 else throw("Strict value is not equal to itself.")
848853 }
849854 }
850855
851856
852857
853858 @Callable(i)
854859 func unstakeAndGet (amount) = {
855860 let checkPayments = if ((size(i.payments) != 0))
856861 then throw("No pmnts expd")
857862 else true
858863 if ((checkPayments == checkPayments))
859864 then {
860865 let cfg = gpc()
861866 let factoryCfg = gfc()
862867 let lpAssetId = fromBase58String(cfg[idxLPAsId])
863868 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
864869 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
865870 if ((unstakeInv == unstakeInv))
866871 then {
867872 let r = ego(toBase58String(i.transactionId), toBase58String(lpAssetId), amount, i.caller)
868873 let sts = parseIntValue(r._9)
869874 let state = r._10
870875 let v = if (if (igs())
871876 then true
872877 else (sts == PoolShutdown))
873878 then throw(("Blocked: " + toString(sts)))
874879 else true
875880 if ((v == v))
876881 then {
877882 let burnA = invoke(fca, "burn", [amount], [AttachedPayment(lpAssetId, amount)])
878883 if ((burnA == burnA))
879884 then state
880885 else throw("Strict value is not equal to itself.")
881886 }
882887 else throw("Strict value is not equal to itself.")
883888 }
884889 else throw("Strict value is not equal to itself.")
885890 }
886891 else throw("Strict value is not equal to itself.")
887892 }
888893
889894
890895
891896 @Callable(i)
892897 func activate (amtAsStr,prAsStr) = if ((toString(i.caller) != toString(fca)))
893898 then throw("denied")
894899 else $Tuple2([StringEntry(aa(), amtAsStr), StringEntry(pa(), prAsStr)], "success")
895900
896901
897902
898903 @Callable(i)
899904 func setS (k,v) = if ((toString(i.caller) != strf(this, ada())))
900905 then pd
901906 else [StringEntry(k, v)]
902907
903908
904909
905910 @Callable(i)
906911 func setI (k,v) = if ((toString(i.caller) != strf(this, ada())))
907912 then pd
908913 else [IntegerEntry(k, v)]
909914
910915
911916
912917 @Callable(i)
913918 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, gpc())
914919
915920
916921
917922 @Callable(i)
918923 func getAccBalanceWrapperREADONLY (assetId) = $Tuple2(nil, getAccBalance(assetId))
919924
920925
921926
922927 @Callable(i)
923928 func calcPricesWrapperREADONLY (amAmt,prAmt,lpAmt) = {
924929 let pr = calcPrices(amAmt, prAmt, lpAmt)
925930 $Tuple2(nil, [toString(pr[0]), toString(pr[1]), toString(pr[2])])
926931 }
927932
928933
929934
930935 @Callable(i)
931936 func fromX18WrapperREADONLY (val,resScaleMult) = $Tuple2(nil, f1(parseBigIntValue(val), resScaleMult))
932937
933938
934939
935940 @Callable(i)
936941 func toX18WrapperREADONLY (origVal,origScaleMult) = $Tuple2(nil, toString(t1(origVal, origScaleMult)))
937942
938943
939944
940945 @Callable(i)
941946 func calcPriceBigIntWrapperREADONLY (prAmtX18,amAmtX18) = $Tuple2(nil, toString(cpbi(parseBigIntValue(prAmtX18), parseBigIntValue(amAmtX18))))
942947
943948
944949
945950 @Callable(i)
946951 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, ""))
947952
948953
949954
950955 @Callable(i)
951956 func estimateGetOperationWrapperREADONLY (txId58,pmtAsId,pmtLpAmt,usrAddr) = {
952957 let r = ego(txId58, pmtAsId, pmtLpAmt, addressFromStringValue(usrAddr))
953958 $Tuple2(nil, $Tuple10(r._1, r._2, r._3, r._4, r._5, r._6, r._7, toString(r._8), r._9, r._10))
954959 }
955960
956961
957962 @Verifier(tx)
958963 func verify () = match tx {
959964 case order: Order =>
960965 let mtchPub = mp()
961966 let orV = moa(order)
962967 let sndrV = sigVerify(order.bodyBytes, order.proofs[0], order.senderPublicKey)
963968 let mtchV = sigVerify(order.bodyBytes, order.proofs[1], mtchPub)
964969 if (if (if (orV)
965970 then sndrV
966971 else false)
967972 then mtchV
968973 else false)
969974 then true
970975 else toe(orV, sndrV, mtchV)
971976 case _ =>
972977 let targetPublicKey = match m() {
973978 case pk: ByteVector =>
974979 pk
975980 case _: Unit =>
976981 tx.senderPublicKey
977982 case _ =>
978983 throw("Match error")
979984 }
980985 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
981986 }
982987

github/deemru/w8io/169f3d6 
111.09 ms