tx · 9j1ghPjBCFsKoXa3JjvYedpSwtpP8613jYLuZKyP3CiW

3Mz51suw3H98TBYJHSra1k2uSYQMv2vUkzt:  -0.03500000 Waves

2022.06.07 00:27 [2085030] smart account 3Mz51suw3H98TBYJHSra1k2uSYQMv2vUkzt > SELF 0.00000000 Waves

{ "type": 13, "id": "9j1ghPjBCFsKoXa3JjvYedpSwtpP8613jYLuZKyP3CiW", "fee": 3500000, "feeAssetId": null, "timestamp": 1654550855667, "version": 1, "sender": "3Mz51suw3H98TBYJHSra1k2uSYQMv2vUkzt", "senderPublicKey": "8RPibCyjGbPr7troJPW7WTXkrbynj8HwkrckopSZoYVn", "proofs": [ "5dq1eQi6X8gp5Jd1CRRFicYoSV89oUC4cNHGtg8sNw7WeGLG9i3aWUXUekdv3eNPpVzfkUbvSPPmMS91dsGib4bf" ], "script": "base64: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dERjbRoQCgJibhIKcHJBc3NldERjbRoLCgJibxIFYW1BbXQaCwoCYnASBXByQW10GhEKAmJxEgthbXRBc0FtdFgxOBoQCgJichIKcHJBc0FtdFgxOBoQCgJicxIKY2FsY1ByaWNlcxoLCgJidBIFbHBBbXQaCQoCYnUSA2NmZxoOCgJidhIIYW10QXNEY20aDQoCYncSB3ByQXNEY20aDgoCYngSCHByaWNlWDE4Gg4KAmJ5EghscEFtdFgxOBoTCgJiehINbHBQckluQW1Bc1gxOBoMCgFjEgdzY2FsZTE4GhAKAmNBEgpwclZpYUFtWDE4GhAKAmNCEgphbVZpYVByWDE4GhIKAmNDEgxleHBlY3RlZEFtdHMaFwoCY0QSEWV4cEFtdEFzc2V0QW10WDE4GhkKAmNFEhNleHBQcmljZUFzc2V0QW10WDE4Gg8KAmNGEgljYWxjTHBBbXQaFAoCY0cSDmNhbGNBbUFzc2V0UG10GhQKAmNIEg5jYWxjUHJBc3NldFBtdBoSCgJjSRIMc2xpcHBhZ2VDYWxjGg8KAmNKEgllbWl0THBBbXQaDAoCY0sSBmFtRGlmZhoMCgJjTBIGcHJEaWZmGhMKAmNNEg0kdDAxNTUyMzE1ODY4GhAKAmNOEgp3cml0ZUFtQW10GhAKAmNPEgp3cml0ZVByQW10GhEKAmNQEgtjb21tb25TdGF0ZRoJCgJjURIDbW9hGgsKAmNSEgVvcmRlchoNCgJjUxIHYW10QXNJZBoMCgJjVBIGcHJBc0lkGhUKAmNVEg9hY2NBbXRBc0JhbGFuY2UaFAoCY1YSDmFjY1ByQXNCYWxhbmNlGhAKAmNXEgpvckFtdEFzc2V0GhAKAmNYEgpvckFtdEFzU3RyGg8KAmNZEglvclByQXNzZXQaDwoCY1oSCW9yUHJBc1N0choOCgJjYRIIb3V0UHJBbXQaCwoCY2ISBXN0YXRlGgkKAmNjEgNlcG8aDQoCY2QSB2luQW1BbXQaDAoCY2USBmluQW1JZBoNCgJjZhIHaW5QckFtdBoMCgJjZxIGaW5QcklkGgwKAmNoEgZpc0V2YWwaDAoCY2kSBmVtaXRMcBoQCgJjahIKaXNPbmVBc3NldBoMCgJjaxIGcG10QW10GgsKAmNsEgVwbXRJZBoNCgJjbRIHYW1JZFN0choNCgJjbhIHcHJJ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", "chainId": 84, "height": 2085030, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BJne8kocP47x41nqrRo4xrzLzNKsrqKRcvmFfEDgJmwk Next: none Diff:
OldNewDifferences
186186 let updatedD1 = if ((D1 == zeroBigInt))
187187 then oneBigInt
188188 else D1
189- let error = ("D1: " + throw(toString(D1)))
190- if ((error == error))
191- then {
192- let diff = fraction(D0, scale8BigInt, D1)
193- let fail = (slpg > diff)
194- if (if (fail)
195- then true
196- else (D0 > D1))
197- then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
198- else fail
199- }
200- else throw("Strict value is not equal to itself.")
189+ let diff = fraction(D0, scale8BigInt, updatedD1)
190+ let fail = (slpg > diff)
191+ if (if (fail)
192+ then true
193+ else (D0 > D1))
194+ then throw(((((((toString(D0) + " ") + toString(updatedD1)) + " ") + toString(diff)) + " ") + toString(slpg)))
195+ else fail
201196 }
202197
203198
339334 else calcLpAmt
340335 let amDiff = (inAmAmt - calcAmAssetPmt)
341336 let prDiff = (inPrAmt - calcPrAssetPmt)
342- let $t01556815913 = if (if (isOneAsset)
337+ let $t01552315868 = if (if (isOneAsset)
343338 then (pmtId == amIdStr)
344339 else false)
345340 then $Tuple2(pmtAmt, 0)
348343 else false)
349344 then $Tuple2(0, pmtAmt)
350345 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
351- let writeAmAmt = $t01556815913._1
352- let writePrAmt = $t01556815913._2
346+ let writeAmAmt = $t01552315868._1
347+ let writePrAmt = $t01552315868._2
353348 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))]
354349 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
355350 }
616611 else {
617612 let amBalance = getAccBalance(amId)
618613 let prBalance = getAccBalance(prId)
619- let $t02487425254 = if ((pmtAssetId == amId))
614+ let $t02482925209 = if ((pmtAssetId == amId))
620615 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
621616 else if ((pmtAssetId == prId))
622617 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
623618 else throw("wrong pmtAssetId")
624- let amBalanceNow = $t02487425254._1
625- let prBalanceNow = $t02487425254._2
626- let virtSwapInAm = $t02487425254._3
627- let virtSwapOutPr = $t02487425254._4
628- let virtSwapInPr = $t02487425254._5
629- let virtSwapOutAm = $t02487425254._6
619+ let amBalanceNow = $t02482925209._1
620+ let prBalanceNow = $t02482925209._2
621+ let virtSwapInAm = $t02482925209._3
622+ let virtSwapOutPr = $t02482925209._4
623+ let virtSwapInPr = $t02482925209._5
624+ let virtSwapOutAm = $t02482925209._6
630625 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
631626 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
632627 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
755750 let estimPrAmt = r._2
756751 let amBalance = getAccBalance(amId)
757752 let prBalance = getAccBalance(prId)
758- let $t03029030747 = if ((outAssetId == amId))
753+ let $t03024530702 = if ((outAssetId == amId))
759754 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
760755 else if ((outAssetId == prId))
761756 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
762757 else throw("wrong outAssetId")
763- let amBalanceNow = $t03029030747._1
764- let prBalanceNow = $t03029030747._2
765- let virtSwapInAm = $t03029030747._3
766- let virtSwapOutPr = $t03029030747._4
767- let virtSwapInPr = $t03029030747._5
768- let virtSwapOutAm = $t03029030747._6
769- let totalGet = $t03029030747._7
758+ let amBalanceNow = $t03024530702._1
759+ let prBalanceNow = $t03024530702._2
760+ let virtSwapInAm = $t03024530702._3
761+ let virtSwapOutPr = $t03024530702._4
762+ let virtSwapInPr = $t03024530702._5
763+ let virtSwapOutAm = $t03024530702._6
764+ let totalGet = $t03024530702._7
770765 if (if ((0 > virtSwapInAm))
771766 then true
772767 else (0 > virtSwapInPr))
780775 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
781776 if ((finalRes == finalRes))
782777 then {
783- let $t03145231556 = if ((outAssetId == amId))
778+ let $t03140731511 = if ((outAssetId == amId))
784779 then $Tuple2(toInt(finalRes._2), 0)
785780 else $Tuple2(0, toInt(finalRes._2))
786- let outAm = $t03145231556._1
787- let outPr = $t03145231556._2
781+ let outAm = $t03140731511._1
782+ let outPr = $t03140731511._2
788783 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
789784 let curPr = f1(curPrX18, scale8)
790785 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 lgopotc (caller) = makeString(["%s%s__lastGetOrPutOneTknCall", caller], SEP)
106106
107107
108108 func fcfg () = "%s__factoryConfig"
109109
110110
111111 func mtpk () = "%s%s__matcher__publicKey"
112112
113113
114114 func pc (iAmtAs,iPrAs) = (((("%d%d%s__" + iAmtAs) + "__") + iPrAs) + "__config")
115115
116116
117117 func mba (bAStr) = ("%s%s%s__mappings__baseAsset2internalId__" + bAStr)
118118
119119
120120 func aps () = "%s__shutdown"
121121
122122
123123 func toe (orV,sendrV,matchV) = throw(((((("Failed: ordValid=" + toString(orV)) + " sndrValid=") + toString(sendrV)) + " mtchrValid=") + toString(matchV)))
124124
125125
126126 func str (val) = match val {
127127 case valStr: String =>
128128 valStr
129129 case _ =>
130130 throw("fail cast to String")
131131 }
132132
133133
134134 func strf (addr,key) = valueOrErrorMessage(getString(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
135135
136136
137137 func intf (addr,key) = valueOrErrorMessage(getInteger(addr, key), makeString(["mandatory ", toString(addr), ".", key, " not defined"], ""))
138138
139139
140140 let fca = addressFromStringValue(strf(this, fc()))
141141
142142 let A = strf(this, amp())
143143
144144 func igs () = valueOrElse(getBoolean(fca, aps()), false)
145145
146146
147147 func mp () = fromBase58String(strf(fca, mtpk()))
148148
149149
150150 func gpc () = {
151151 let amtAs = strf(this, aa())
152152 let priceAs = strf(this, pa())
153153 let iPriceAs = intf(fca, mba(priceAs))
154154 let iAmtAs = intf(fca, mba(amtAs))
155155 split(strf(fca, pc(toString(iAmtAs), toString(iPriceAs))), SEP)
156156 }
157157
158158
159159 func gfc () = split(strf(fca, fcfg()), SEP)
160160
161161
162162 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)
163163
164164
165165 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)
166166
167167
168168 func getAccBalance (assetId) = if ((assetId == "WAVES"))
169169 then wavesBalance(this).available
170170 else assetBalance(this, fromBase58String(assetId))
171171
172172
173173 func cpbi (prAmtX18,amAmtX18) = fraction(prAmtX18, scale18, amAmtX18)
174174
175175
176176 func vad (A1,A2,slippage) = {
177177 let diff = fraction((A1 - A2), scale8BigInt, A2)
178178 let pass = ((slippage - abs(diff)) > zeroBigInt)
179179 if (!(pass))
180180 then throw(("Big slpg: " + toString(diff)))
181181 else $Tuple2(pass, min([A1, A2]))
182182 }
183183
184184
185185 func vd (D1,D0,slpg) = {
186186 let updatedD1 = if ((D1 == zeroBigInt))
187187 then oneBigInt
188188 else D1
189- let error = ("D1: " + throw(toString(D1)))
190- if ((error == error))
191- then {
192- let diff = fraction(D0, scale8BigInt, D1)
193- let fail = (slpg > diff)
194- if (if (fail)
195- then true
196- else (D0 > D1))
197- then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
198- else fail
199- }
200- else throw("Strict value is not equal to itself.")
189+ let diff = fraction(D0, scale8BigInt, updatedD1)
190+ let fail = (slpg > diff)
191+ if (if (fail)
192+ then true
193+ else (D0 > D1))
194+ then throw(((((((toString(D0) + " ") + toString(updatedD1)) + " ") + toString(diff)) + " ") + toString(slpg)))
195+ else fail
201196 }
202197
203198
204199 func pcp (amAssetDcm,prAssetDcm,amAmt,prAmt) = {
205200 let amtAsAmtX18 = t1(amAmt, amAssetDcm)
206201 let prAsAmtX18 = t1(prAmt, prAssetDcm)
207202 cpbi(prAsAmtX18, amtAsAmtX18)
208203 }
209204
210205
211206 func calcPrices (amAmt,prAmt,lpAmt) = {
212207 let cfg = gpc()
213208 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
214209 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
215210 let priceX18 = pcp(amtAsDcm, prAsDcm, amAmt, prAmt)
216211 let amAmtX18 = t1(amAmt, amtAsDcm)
217212 let prAmtX18 = t1(prAmt, prAsDcm)
218213 let lpAmtX18 = t1(lpAmt, scale8)
219214 let lpPrInAmAsX18 = cpbi(amAmtX18, lpAmtX18)
220215 let lpPrInPrAsX18 = cpbi(prAmtX18, lpAmtX18)
221216 [priceX18, lpPrInAmAsX18, lpPrInPrAsX18]
222217 }
223218
224219
225220 func calculatePrices (amAmt,prAmt,lpAmt) = {
226221 let p = calcPrices(amAmt, prAmt, lpAmt)
227222 [f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)]
228223 }
229224
230225
231226 func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
232227 let cfg = gpc()
233228 let lpId = cfg[idxLPAsId]
234229 let amId = cfg[idxAmAsId]
235230 let prId = cfg[idxPrAsId]
236231 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
237232 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
238233 let sts = cfg[idxPoolSt]
239234 let lpEmiss = valueOrErrorMessage(assetInfo(fromBase58String(lpId)), "Wrong LP id").quantity
240235 if ((lpId != pmtAssetId))
241236 then throw("Wrong pmt asset")
242237 else {
243238 let amBalance = getAccBalance(amId)
244239 let amBalanceX18 = t1(amBalance, amDcm)
245240 let prBalance = getAccBalance(prId)
246241 let prBalanceX18 = t1(prBalance, prDcm)
247242 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
248243 let curPrice = f1(curPriceX18, scale8)
249244 let pmtLpAmtX18 = t1(pmtLpAmt, scale8)
250245 let lpEmissX18 = t1(lpEmiss, scale8)
251246 let outAmAmtX18 = fraction(amBalanceX18, pmtLpAmtX18, lpEmissX18)
252247 let outPrAmtX18 = fraction(prBalanceX18, pmtLpAmtX18, lpEmissX18)
253248 let outAmAmt = f1(outAmAmtX18, amDcm)
254249 let outPrAmt = f1(outPrAmtX18, prDcm)
255250 let state = if ((txId58 == ""))
256251 then nil
257252 else [ScriptTransfer(userAddress, outAmAmt, if ((amId == "WAVES"))
258253 then unit
259254 else fromBase58String(amId)), ScriptTransfer(userAddress, outPrAmt, if ((prId == "WAVES"))
260255 then unit
261256 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)]
262257 $Tuple10(outAmAmt, outPrAmt, amId, prId, amBalance, prBalance, lpEmiss, curPriceX18, sts, state)
263258 }
264259 }
265260
266261
267262 func epo (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,userAddress,isEval,emitLp,isOneAsset,pmtAmt,pmtId) = {
268263 let cfg = gpc()
269264 let lpId = fromBase58String(cfg[idxLPAsId])
270265 let amIdStr = cfg[idxAmAsId]
271266 let prIdStr = cfg[idxPrAsId]
272267 let inAmIdStr = cfg[idxIAmtAsId]
273268 let inPrIdStr = cfg[idxIPriceAsId]
274269 let amtDcm = parseIntValue(cfg[idxAmtAsDcm])
275270 let priceDcm = parseIntValue(cfg[idxPriceAsDcm])
276271 let sts = cfg[idxPoolSt]
277272 let lpEm = valueOrErrorMessage(assetInfo(lpId), "Wr lp as").quantity
278273 let amBalance = if (isEval)
279274 then getAccBalance(amIdStr)
280275 else if (if (isOneAsset)
281276 then (pmtId == amIdStr)
282277 else false)
283278 then (getAccBalance(amIdStr) - pmtAmt)
284279 else if (isOneAsset)
285280 then getAccBalance(amIdStr)
286281 else (getAccBalance(amIdStr) - inAmAmt)
287282 let prBalance = if (isEval)
288283 then getAccBalance(prIdStr)
289284 else if (if (isOneAsset)
290285 then (pmtId == prIdStr)
291286 else false)
292287 then (getAccBalance(prIdStr) - pmtAmt)
293288 else if (isOneAsset)
294289 then getAccBalance(prIdStr)
295290 else (getAccBalance(prIdStr) - inPrAmt)
296291 let inAmAssetAmtX18 = t1(inAmAmt, amtDcm)
297292 let inPrAssetAmtX18 = t1(inPrAmt, priceDcm)
298293 let userPriceX18 = cpbi(inPrAssetAmtX18, inAmAssetAmtX18)
299294 let amBalanceX18 = t1(amBalance, amtDcm)
300295 let prBalanceX18 = t1(prBalance, priceDcm)
301296 let r = if ((lpEm == 0))
302297 then {
303298 let curPriceX18 = zeroBigInt
304299 let slippageX18 = zeroBigInt
305300 let lpAmtX18 = pow((inAmAssetAmtX18 * inPrAssetAmtX18), 0, toBigInt(5), 1, 0, DOWN)
306301 $Tuple5(f1(lpAmtX18, scale8), f1(inAmAssetAmtX18, amtDcm), f1(inPrAssetAmtX18, priceDcm), cpbi((prBalanceX18 + inPrAssetAmtX18), (amBalanceX18 + inAmAssetAmtX18)), slippageX18)
307302 }
308303 else {
309304 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
310305 let slippageRealX18 = fraction(abs((curPriceX18 - userPriceX18)), scale18, curPriceX18)
311306 let slippageX18 = t1(slippage, scale8)
312307 if (if ((curPriceX18 != zeroBigInt))
313308 then (slippageRealX18 > slippageX18)
314309 else false)
315310 then throw(((("Price slippage " + toString(slippageRealX18)) + " > ") + toString(slippageX18)))
316311 else {
317312 let lpEmissionX18 = t1(lpEm, scale8)
318313 let prViaAmX18 = fraction(inAmAssetAmtX18, curPriceX18, scale18)
319314 let amViaPrX18 = fraction(inPrAssetAmtX18, scale18, curPriceX18)
320315 let expectedAmts = if ((prViaAmX18 > inPrAssetAmtX18))
321316 then $Tuple2(amViaPrX18, inPrAssetAmtX18)
322317 else $Tuple2(inAmAssetAmtX18, prViaAmX18)
323318 let expAmtAssetAmtX18 = expectedAmts._1
324319 let expPriceAssetAmtX18 = expectedAmts._2
325320 let lpAmtX18 = fraction(lpEmissionX18, expPriceAssetAmtX18, prBalanceX18)
326321 $Tuple5(f1(lpAmtX18, scale8), f1(expAmtAssetAmtX18, amtDcm), f1(expPriceAssetAmtX18, priceDcm), curPriceX18, slippageX18)
327322 }
328323 }
329324 let calcLpAmt = r._1
330325 let calcAmAssetPmt = r._2
331326 let calcPrAssetPmt = r._3
332327 let curPrice = f1(r._4, scale8)
333328 let slippageCalc = f1(r._5, scale8)
334329 if ((0 >= calcLpAmt))
335330 then throw("LP <= 0")
336331 else {
337332 let emitLpAmt = if (!(emitLp))
338333 then 0
339334 else calcLpAmt
340335 let amDiff = (inAmAmt - calcAmAssetPmt)
341336 let prDiff = (inPrAmt - calcPrAssetPmt)
342- let $t01556815913 = if (if (isOneAsset)
337+ let $t01552315868 = if (if (isOneAsset)
343338 then (pmtId == amIdStr)
344339 else false)
345340 then $Tuple2(pmtAmt, 0)
346341 else if (if (isOneAsset)
347342 then (pmtId == prIdStr)
348343 else false)
349344 then $Tuple2(0, pmtAmt)
350345 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
351- let writeAmAmt = $t01556815913._1
352- let writePrAmt = $t01556815913._2
346+ let writeAmAmt = $t01552315868._1
347+ let writePrAmt = $t01552315868._2
353348 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))]
354349 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
355350 }
356351 }
357352
358353
359354 func moa (order) = {
360355 let cfg = gpc()
361356 let amtAsId = cfg[idxAmAsId]
362357 let prAsId = cfg[idxPrAsId]
363358 let sts = parseIntValue(cfg[idxPoolSt])
364359 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
365360 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
366361 let accAmtAsBalance = getAccBalance(amtAsId)
367362 let accPrAsBalance = getAccBalance(prAsId)
368363 let curPriceX18 = if ((order.orderType == Buy))
369364 then pcp(amtAsDcm, prAsDcm, (accAmtAsBalance + order.amount), accPrAsBalance)
370365 else pcp(amtAsDcm, prAsDcm, (accAmtAsBalance - order.amount), accPrAsBalance)
371366 let curPrice = f1(curPriceX18, scale8)
372367 if (if (if (igs())
373368 then true
374369 else (sts == PoolMatcherDis))
375370 then true
376371 else (sts == PoolShutdown))
377372 then throw("Admin blocked")
378373 else {
379374 let orAmtAsset = order.assetPair.amountAsset
380375 let orAmtAsStr = if ((orAmtAsset == unit))
381376 then "WAVES"
382377 else toBase58String(value(orAmtAsset))
383378 let orPrAsset = order.assetPair.priceAsset
384379 let orPrAsStr = if ((orPrAsset == unit))
385380 then "WAVES"
386381 else toBase58String(value(orPrAsset))
387382 if (if ((orAmtAsStr != amtAsId))
388383 then true
389384 else (orPrAsStr != prAsId))
390385 then throw("Wr assets")
391386 else {
392387 let orderPrice = order.price
393388 let priceDcm = fraction(scale8, prAsDcm, amtAsDcm)
394389 let castOrderPrice = ts(orderPrice, scale8, priceDcm)
395390 let isOrderPriceValid = if ((order.orderType == Buy))
396391 then (curPrice >= castOrderPrice)
397392 else (castOrderPrice >= curPrice)
398393 true
399394 }
400395 }
401396 }
402397
403398
404399 func cg (i) = if ((size(i.payments) != 1))
405400 then throw("1 pmnt exp")
406401 else {
407402 let pmt = value(i.payments[0])
408403 let pmtAssetId = value(pmt.assetId)
409404 let pmtAmt = pmt.amount
410405 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
411406 let outAmAmt = r._1
412407 let outPrAmt = r._2
413408 let sts = parseIntValue(r._9)
414409 let state = r._10
415410 if (if (igs())
416411 then true
417412 else (sts == PoolShutdown))
418413 then throw(("Admin blocked: " + toString(sts)))
419414 else $Tuple5(outAmAmt, outPrAmt, pmtAmt, pmtAssetId, state)
420415 }
421416
422417
423418 func cp (caller,txId,amAsPmt,prAsPmt,slippage,emitLp,isOneAsset,pmtAmt,pmtId) = {
424419 let r = epo(txId, slippage, value(amAsPmt).amount, value(amAsPmt).assetId, value(prAsPmt).amount, value(prAsPmt).assetId, caller, false, emitLp, isOneAsset, pmtAmt, pmtId)
425420 let sts = parseIntValue(r._8)
426421 if (if (if (igs())
427422 then true
428423 else (sts == PoolPutDis))
429424 then true
430425 else (sts == PoolShutdown))
431426 then throw(("Blocked:" + toString(sts)))
432427 else r
433428 }
434429
435430
436431 func m () = match getString(mpk()) {
437432 case s: String =>
438433 fromBase58String(s)
439434 case _: Unit =>
440435 unit
441436 case _ =>
442437 throw("Match error")
443438 }
444439
445440
446441 func pm () = match getString(pmpk()) {
447442 case s: String =>
448443 fromBase58String(s)
449444 case _: Unit =>
450445 unit
451446 case _ =>
452447 throw("Match error")
453448 }
454449
455450
456451 let pd = throw("Permission denied")
457452
458453 func mm (i) = match m() {
459454 case pk: ByteVector =>
460455 if ((i.callerPublicKey == pk))
461456 then true
462457 else pd
463458 case _: Unit =>
464459 if ((i.caller == this))
465460 then true
466461 else pd
467462 case _ =>
468463 throw("Match error")
469464 }
470465
471466
472467 @Callable(i)
473468 func constructor (fc) = {
474469 let c = mm(i)
475470 if ((c == c))
476471 then [StringEntry(fc(), fc)]
477472 else throw("Strict value is not equal to itself.")
478473 }
479474
480475
481476
482477 @Callable(i)
483478 func setManager (pendingManagerPublicKey) = {
484479 let c = mm(i)
485480 if ((c == c))
486481 then {
487482 let cm = fromBase58String(pendingManagerPublicKey)
488483 if ((cm == cm))
489484 then [StringEntry(pmpk(), pendingManagerPublicKey)]
490485 else throw("Strict value is not equal to itself.")
491486 }
492487 else throw("Strict value is not equal to itself.")
493488 }
494489
495490
496491
497492 @Callable(i)
498493 func confirmManager () = {
499494 let p = pm()
500495 let hpm = if (isDefined(p))
501496 then true
502497 else throw("No pending manager")
503498 if ((hpm == hpm))
504499 then {
505500 let cpm = if ((i.callerPublicKey == value(p)))
506501 then true
507502 else throw("You are not pending manager")
508503 if ((cpm == cpm))
509504 then [StringEntry(mpk(), toBase58String(value(p))), DeleteEntry(pmpk())]
510505 else throw("Strict value is not equal to itself.")
511506 }
512507 else throw("Strict value is not equal to itself.")
513508 }
514509
515510
516511
517512 @Callable(i)
518513 func put (slip,autoStake) = {
519514 let factCfg = gfc()
520515 let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
521516 let slipCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactSlippCntr]), "Wr sl addr")
522517 if ((0 > slip))
523518 then throw("Wrong slippage")
524519 else if ((size(i.payments) != 2))
525520 then throw("2 pmnts expd")
526521 else {
527522 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, "")
528523 let emitLpAmt = e._2
529524 let lpAssetId = e._7
530525 let state = e._9
531526 let amDiff = e._10
532527 let prDiff = e._11
533528 let amId = e._12
534529 let prId = e._13
535530 let r = invoke(fca, "emit", [emitLpAmt], nil)
536531 if ((r == r))
537532 then {
538533 let el = match r {
539534 case legacy: Address =>
540535 invoke(legacy, "emit", [emitLpAmt], nil)
541536 case _ =>
542537 unit
543538 }
544539 if ((el == el))
545540 then {
546541 let sa = if ((amDiff > 0))
547542 then invoke(slipCntr, "put", nil, [AttachedPayment(amId, amDiff)])
548543 else nil
549544 if ((sa == sa))
550545 then {
551546 let sp = if ((prDiff > 0))
552547 then invoke(slipCntr, "put", nil, [AttachedPayment(prId, prDiff)])
553548 else nil
554549 if ((sp == sp))
555550 then {
556551 let lpTrnsfr = if (autoStake)
557552 then {
558553 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
559554 if ((ss == ss))
560555 then nil
561556 else throw("Strict value is not equal to itself.")
562557 }
563558 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
564559 (state ++ lpTrnsfr)
565560 }
566561 else throw("Strict value is not equal to itself.")
567562 }
568563 else throw("Strict value is not equal to itself.")
569564 }
570565 else throw("Strict value is not equal to itself.")
571566 }
572567 else throw("Strict value is not equal to itself.")
573568 }
574569 }
575570
576571
577572
578573 @Callable(i)
579574 func putOneTkn (amAssetPart,prAssetPart,outLp,slippage,autoStake) = {
580575 let cfg = gfc()
581576 let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
582577 let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
583578 let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
584579 let poolCfg = gpc()
585580 let amId = poolCfg[idxAmAsId]
586581 let prId = poolCfg[idxPrAsId]
587582 let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
588583 let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
589584 let addon = valueOrElse(getString(this, ada()), "")
590585 let userAddress = if ((addon == toString(i.caller)))
591586 then i.originCaller
592587 else i.caller
593588 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
594589 let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
595590 if ((check == check))
596591 then if (if (if (if ((0 >= slippage))
597592 then true
598593 else (0 >= amAssetPart))
599594 then true
600595 else (0 >= prAssetPart))
601596 then true
602597 else (0 >= outLp))
603598 then throw("Wrong params")
604599 else if ((size(i.payments) != 1))
605600 then throw("1 pmnt expd")
606601 else {
607602 let pmt = value(i.payments[0])
608603 let pmtAssetId = toBase58String(value(pmt.assetId))
609604 let pmtAmt = pmt.amount
610605 if (if (if ((amAssetPart > pmtAmt))
611606 then true
612607 else (prAssetPart > pmtAmt))
613608 then true
614609 else (10000000 > pmtAmt))
615610 then throw("Wrong pmt amt")
616611 else {
617612 let amBalance = getAccBalance(amId)
618613 let prBalance = getAccBalance(prId)
619- let $t02487425254 = if ((pmtAssetId == amId))
614+ let $t02482925209 = if ((pmtAssetId == amId))
620615 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
621616 else if ((pmtAssetId == prId))
622617 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
623618 else throw("wrong pmtAssetId")
624- let amBalanceNow = $t02487425254._1
625- let prBalanceNow = $t02487425254._2
626- let virtSwapInAm = $t02487425254._3
627- let virtSwapOutPr = $t02487425254._4
628- let virtSwapInPr = $t02487425254._5
629- let virtSwapOutAm = $t02487425254._6
619+ let amBalanceNow = $t02482925209._1
620+ let prBalanceNow = $t02482925209._2
621+ let virtSwapInAm = $t02482925209._3
622+ let virtSwapOutPr = $t02482925209._4
623+ let virtSwapInPr = $t02482925209._5
624+ let virtSwapOutAm = $t02482925209._6
630625 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
631626 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
632627 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
633628 if ((D0vsD1 == D0vsD1))
634629 then {
635630 let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
636631 let estimLP = estPut._2
637632 let lpAssetId = estPut._7
638633 let state = estPut._9
639634 let amDiff = estPut._10
640635 let prDiff = estPut._11
641636 let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
642637 let emitLpAmt = toInt(lpCalcRes._2)
643638 let e = invoke(fca, "emit", [emitLpAmt], nil)
644639 if ((e == e))
645640 then {
646641 let el = match e {
647642 case legacy: Address =>
648643 invoke(legacy, "emit", [emitLpAmt], nil)
649644 case _ =>
650645 unit
651646 }
652647 if ((el == el))
653648 then {
654649 let sa = if ((amDiff > 0))
655650 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
656651 else nil
657652 if ((sa == sa))
658653 then {
659654 let sp = if ((prDiff > 0))
660655 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
661656 else nil
662657 if ((sp == sp))
663658 then {
664659 let lpTrnsfr = if (autoStake)
665660 then {
666661 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
667662 if ((ss == ss))
668663 then nil
669664 else throw("Strict value is not equal to itself.")
670665 }
671666 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
672667 (state ++ lpTrnsfr)
673668 }
674669 else throw("Strict value is not equal to itself.")
675670 }
676671 else throw("Strict value is not equal to itself.")
677672 }
678673 else throw("Strict value is not equal to itself.")
679674 }
680675 else throw("Strict value is not equal to itself.")
681676 }
682677 else throw("Strict value is not equal to itself.")
683678 }
684679 }
685680 else throw("Strict value is not equal to itself.")
686681 }
687682
688683
689684
690685 @Callable(i)
691686 func putForFree (maxSlpg) = if ((0 > maxSlpg))
692687 then throw("Wrong slpg")
693688 else if ((size(i.payments) != 2))
694689 then throw("2 pmnts expd")
695690 else {
696691 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, "")
697692 estPut._9
698693 }
699694
700695
701696
702697 @Callable(i)
703698 func get () = {
704699 let r = cg(i)
705700 let outAmtAmt = r._1
706701 let outPrAmt = r._2
707702 let pmtAmt = r._3
708703 let pmtAssetId = r._4
709704 let state = r._5
710705 let b = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
711706 if ((b == b))
712707 then state
713708 else throw("Strict value is not equal to itself.")
714709 }
715710
716711
717712
718713 @Callable(i)
719714 func getOneTkn (exchResult,notUsed,outAmount,outAssetId,slippage) = if ((size(i.payments) != 1))
720715 then throw("1 pmnt expd")
721716 else {
722717 let cfg = gpc()
723718 let lpId = cfg[idxLPAsId]
724719 let amId = cfg[idxAmAsId]
725720 let prId = cfg[idxPrAsId]
726721 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
727722 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
728723 let sts = cfg[idxPoolSt]
729724 let factCfg = gfc()
730725 let gwxCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactGwxRewCntr]), "Wr sl addr")
731726 let pmt = value(i.payments[0])
732727 let addon = valueOrElse(getString(this, ada()), "")
733728 let userAddress = if ((addon == toString(i.caller)))
734729 then i.originCaller
735730 else i.caller
736731 let txId58 = toBase58String(i.transactionId)
737732 let pmtAssetId = value(pmt.assetId)
738733 let pmtAmt = pmt.amount
739734 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
740735 let check = reentrantInvoke(addonContract, "ensureCanGetOrPutOneTkn", [toString(userAddress)], nil)
741736 if ((check == check))
742737 then if ((1000000000 > pmtAmt))
743738 then throw("Min pmt 10 LP")
744739 else if (if (if ((0 > slippage))
745740 then true
746741 else (0 > exchResult))
747742 then true
748743 else (0 > outAmount))
749744 then throw("Wrong params")
750745 else if ((lpId != toBase58String(pmtAssetId)))
751746 then throw("Wrong LP")
752747 else {
753748 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
754749 let estimAmAmt = r._1
755750 let estimPrAmt = r._2
756751 let amBalance = getAccBalance(amId)
757752 let prBalance = getAccBalance(prId)
758- let $t03029030747 = if ((outAssetId == amId))
753+ let $t03024530702 = if ((outAssetId == amId))
759754 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
760755 else if ((outAssetId == prId))
761756 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
762757 else throw("wrong outAssetId")
763- let amBalanceNow = $t03029030747._1
764- let prBalanceNow = $t03029030747._2
765- let virtSwapInAm = $t03029030747._3
766- let virtSwapOutPr = $t03029030747._4
767- let virtSwapInPr = $t03029030747._5
768- let virtSwapOutAm = $t03029030747._6
769- let totalGet = $t03029030747._7
758+ let amBalanceNow = $t03024530702._1
759+ let prBalanceNow = $t03024530702._2
760+ let virtSwapInAm = $t03024530702._3
761+ let virtSwapOutPr = $t03024530702._4
762+ let virtSwapInPr = $t03024530702._5
763+ let virtSwapOutAm = $t03024530702._6
764+ let totalGet = $t03024530702._7
770765 if (if ((0 > virtSwapInAm))
771766 then true
772767 else (0 > virtSwapInPr))
773768 then throw("Wrong calc")
774769 else {
775770 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
776771 let D1 = invoke(gwxCntr, "calcD", [toString(((amBalanceNow - virtSwapInAm) + virtSwapOutAm)), toString(((prBalanceNow + virtSwapOutPr) - virtSwapInPr)), A, Amult, Dconv], nil)
777772 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
778773 if ((D0vsD1 == D0vsD1))
779774 then {
780775 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
781776 if ((finalRes == finalRes))
782777 then {
783- let $t03145231556 = if ((outAssetId == amId))
778+ let $t03140731511 = if ((outAssetId == amId))
784779 then $Tuple2(toInt(finalRes._2), 0)
785780 else $Tuple2(0, toInt(finalRes._2))
786- let outAm = $t03145231556._1
787- let outPr = $t03145231556._2
781+ let outAm = $t03140731511._1
782+ let outPr = $t03140731511._2
788783 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
789784 let curPr = f1(curPrX18, scale8)
790785 let state = [ScriptTransfer(userAddress, (outAm + outPr), if ((outAssetId == "WAVES"))
791786 then unit
792787 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)]
793788 if ((state == state))
794789 then {
795790 let burn = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
796791 if ((burn == burn))
797792 then state
798793 else throw("Strict value is not equal to itself.")
799794 }
800795 else throw("Strict value is not equal to itself.")
801796 }
802797 else throw("Strict value is not equal to itself.")
803798 }
804799 else throw("Strict value is not equal to itself.")
805800 }
806801 }
807802 else throw("Strict value is not equal to itself.")
808803 }
809804
810805
811806
812807 @Callable(i)
813808 func getNoLess (noLessThenAmtAsset,noLessThenPriceAsset) = {
814809 let r = cg(i)
815810 let outAmAmt = r._1
816811 let outPrAmt = r._2
817812 let pmtAmt = r._3
818813 let pmtAssetId = r._4
819814 let state = r._5
820815 if ((noLessThenAmtAsset > outAmAmt))
821816 then throw(((("Failed: " + toString(outAmAmt)) + " < ") + toString(noLessThenAmtAsset)))
822817 else if ((noLessThenPriceAsset > outPrAmt))
823818 then throw(((("Failed: " + toString(outPrAmt)) + " < ") + toString(noLessThenPriceAsset)))
824819 else {
825820 let burnLPAssetOnFactory = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
826821 if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
827822 then state
828823 else throw("Strict value is not equal to itself.")
829824 }
830825 }
831826
832827
833828
834829 @Callable(i)
835830 func unstakeAndGet (amount) = {
836831 let checkPayments = if ((size(i.payments) != 0))
837832 then throw("No pmnts expd")
838833 else true
839834 if ((checkPayments == checkPayments))
840835 then {
841836 let cfg = gpc()
842837 let factoryCfg = gfc()
843838 let lpAssetId = fromBase58String(cfg[idxLPAsId])
844839 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
845840 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
846841 if ((unstakeInv == unstakeInv))
847842 then {
848843 let r = ego(toBase58String(i.transactionId), toBase58String(lpAssetId), amount, i.caller)
849844 let sts = parseIntValue(r._9)
850845 let state = r._10
851846 let v = if (if (igs())
852847 then true
853848 else (sts == PoolShutdown))
854849 then throw(("Blocked: " + toString(sts)))
855850 else true
856851 if ((v == v))
857852 then {
858853 let burnA = invoke(fca, "burn", [amount], [AttachedPayment(lpAssetId, amount)])
859854 if ((burnA == burnA))
860855 then state
861856 else throw("Strict value is not equal to itself.")
862857 }
863858 else throw("Strict value is not equal to itself.")
864859 }
865860 else throw("Strict value is not equal to itself.")
866861 }
867862 else throw("Strict value is not equal to itself.")
868863 }
869864
870865
871866
872867 @Callable(i)
873868 func activate (amtAsStr,prAsStr) = if ((toString(i.caller) != toString(fca)))
874869 then throw("denied")
875870 else $Tuple2([StringEntry(aa(), amtAsStr), StringEntry(pa(), prAsStr)], "success")
876871
877872
878873
879874 @Callable(i)
880875 func setS (k,v) = if ((toString(i.caller) != strf(this, ada())))
881876 then pd
882877 else [StringEntry(k, v)]
883878
884879
885880
886881 @Callable(i)
887882 func setI (k,v) = if ((toString(i.caller) != strf(this, ada())))
888883 then pd
889884 else [IntegerEntry(k, v)]
890885
891886
892887
893888 @Callable(i)
894889 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, gpc())
895890
896891
897892
898893 @Callable(i)
899894 func getAccBalanceWrapperREADONLY (assetId) = $Tuple2(nil, getAccBalance(assetId))
900895
901896
902897
903898 @Callable(i)
904899 func calcPricesWrapperREADONLY (amAmt,prAmt,lpAmt) = {
905900 let pr = calcPrices(amAmt, prAmt, lpAmt)
906901 $Tuple2(nil, [toString(pr[0]), toString(pr[1]), toString(pr[2])])
907902 }
908903
909904
910905
911906 @Callable(i)
912907 func fromX18WrapperREADONLY (val,resScaleMult) = $Tuple2(nil, f1(parseBigIntValue(val), resScaleMult))
913908
914909
915910
916911 @Callable(i)
917912 func toX18WrapperREADONLY (origVal,origScaleMult) = $Tuple2(nil, toString(t1(origVal, origScaleMult)))
918913
919914
920915
921916 @Callable(i)
922917 func calcPriceBigIntWrapperREADONLY (prAmtX18,amAmtX18) = $Tuple2(nil, toString(cpbi(parseBigIntValue(prAmtX18), parseBigIntValue(amAmtX18))))
923918
924919
925920
926921 @Callable(i)
927922 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, ""))
928923
929924
930925
931926 @Callable(i)
932927 func estimateGetOperationWrapperREADONLY (txId58,pmtAsId,pmtLpAmt,usrAddr) = {
933928 let r = ego(txId58, pmtAsId, pmtLpAmt, addressFromStringValue(usrAddr))
934929 $Tuple2(nil, $Tuple10(r._1, r._2, r._3, r._4, r._5, r._6, r._7, toString(r._8), r._9, r._10))
935930 }
936931
937932
938933 @Verifier(tx)
939934 func verify () = match tx {
940935 case order: Order =>
941936 let mtchPub = mp()
942937 let orV = moa(order)
943938 let sndrV = sigVerify(order.bodyBytes, order.proofs[0], order.senderPublicKey)
944939 let mtchV = sigVerify(order.bodyBytes, order.proofs[1], mtchPub)
945940 if (if (if (orV)
946941 then sndrV
947942 else false)
948943 then mtchV
949944 else false)
950945 then true
951946 else toe(orV, sndrV, mtchV)
952947 case _ =>
953948 let targetPublicKey = match m() {
954949 case pk: ByteVector =>
955950 pk
956951 case _: Unit =>
957952 tx.senderPublicKey
958953 case _ =>
959954 throw("Match error")
960955 }
961956 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
962957 }
963958

github/deemru/w8io/169f3d6 
117.11 ms