tx · 8pSbtrRzUogxJKgUvp8NdmZ9tTmmG6LUEc6TRxRUmKBJ

3Mz7SwMbR7D51FE2DwaoePuJHgStRHcoLvv:  -0.03500000 Waves

2022.06.03 17:49 [2080302] smart account 3Mz7SwMbR7D51FE2DwaoePuJHgStRHcoLvv > SELF 0.00000000 Waves

{ "type": 13, "id": "8pSbtrRzUogxJKgUvp8NdmZ9tTmmG6LUEc6TRxRUmKBJ", "fee": 3500000, "feeAssetId": null, "timestamp": 1654267810771, "version": 1, "sender": "3Mz7SwMbR7D51FE2DwaoePuJHgStRHcoLvv", "senderPublicKey": "6DX4qJ7kHNgP2jStPEtjj6Ji2yLxg6sLNeRZuickfze1", "proofs": [ "35R76SQjReiBzdPCJFge7XcTrf4qgGNvA67WaXgU8cFCiEeUuNTWcyjKnpDvVZ3smk4tjAWcnq2feymhd4rpyAHM" ], "script": "base64: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CgJibhIKYW1Bc3NldERjbRoQCgJibxIKcHJBc3NldERjbRoLCgJicBIFYW1BbXQaCwoCYnESBXByQW10GhEKAmJyEgthbXRBc0FtdFgxOBoQCgJicxIKcHJBc0FtdFgxOBoQCgJidBIKY2FsY1ByaWNlcxoLCgJidRIFbHBBbXQaCQoCYnYSA2NmZxoOCgJidxIIYW10QXNEY20aDQoCYngSB3ByQXNEY20aDgoCYnkSCHByaWNlWDE4Gg4KAmJ6EghscEFtdFgxOBoMCgFjEgdzY2FsZTE4GhMKAmNBEg1scEVtaXNzaW9uWDE4GhAKAmNCEgpwclZpYUFtWDE4GhAKAmNDEgphbVZpYVByWDE4GhIKAmNEEgxleHBlY3RlZEFtdHMaFwoCY0USEWV4cEFtdEFzc2V0QW10WDE4GhkKAmNGEhNleHBQcmljZUFzc2V0QW10WDE4Gg8KAmNHEgljYWxjTHBBbXQaFAoCY0gSDmNhbGNBbUFzc2V0UG10GhQKAmNJEg5jYWxjUHJBc3NldFBtdBoSCgJjShIMc2xpcHBhZ2VDYWxjGg8KAmNLEgllbWl0THBBbXQaDAoCY0wSBmFtRGlmZhoMCgJjTRIGcHJEaWZmGhMKAmNOEg0kdDAxNTU3NDE1OTE5GhAKAmNPEgp3cml0ZUFtQW10GhAKAmNQEgp3cml0ZVByQW10GhEKAmNREgtjb21tb25TdGF0ZRoJCgJjUhIDbW9hGgsKAmNTEgVvcmRlchoNCgJjVBIHYW10QXNJZBoMCgJjVRIGcHJBc0lkGhUKAmNWEg9hY2NBbXRBc0JhbGFuY2UaFAoCY1cSDmFjY1ByQXNCYWxhbmNlGhAKAmNYEgpvckFtdEFzc2V0GhAKAmNZEgpvckFtdEFzU3RyGg8KAmNaEglvclByQXNzZXQaDgoCY2ESCG91dEFtQW10Gg4KAmNiEghvdXRQckFtdBoLCgJjYxIFc3RhdGUaCQoCY2QSA2VwbxoNCgJjZRIHaW5BbUFtdBoMCgJjZhIGaW5BbUlkGg0KAmNnEgdpblByQW10GgwKAmNoEgZpblBySWQaDAoCY2kSBmlzRXZhbBoMCgJjahIGZW1pdExwGhAKAmNrEgppc09uZUFzc2V0GgwKAmNsEgZwbXRBbXQaCwoCY20SBXBtdElkGg0KAmNuEgdhbUlkU3Ry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", "chainId": 84, "height": 2080302, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9ZMAgdfNWW8KGvNVUZp9YwTmkbiShzuUviPFg3d61fQ5 Next: none Diff:
OldNewDifferences
186186
187187
188188 func vd (D1,D0,slpg) = {
189- let diff = fraction(D0, scale8BigInt, D1)
190- let fail = (slpg > diff)
191- if (if (fail)
192- then true
193- else (D0 > D1))
194- then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
195- else fail
189+ let error = throw("before fraction")
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.")
196201 }
197202
198203
334339 else calcLpAmt
335340 let amDiff = (inAmAmt - calcAmAssetPmt)
336341 let prDiff = (inPrAmt - calcPrAssetPmt)
337- let $t01553115876 = if (if (isOneAsset)
342+ let $t01557415919 = if (if (isOneAsset)
338343 then (pmtId == amIdStr)
339344 else false)
340345 then $Tuple2(pmtAmt, 0)
343348 else false)
344349 then $Tuple2(0, pmtAmt)
345350 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
346- let writeAmAmt = $t01553115876._1
347- let writePrAmt = $t01553115876._2
351+ let writeAmAmt = $t01557415919._1
352+ let writePrAmt = $t01557415919._2
348353 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))]
349354 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
350355 }
611616 else {
612617 let amBalance = getAccBalance(amId)
613618 let prBalance = getAccBalance(prId)
614- let $t02483225212 = if ((pmtAssetId == amId))
619+ let $t02487525255 = if ((pmtAssetId == amId))
615620 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
616621 else if ((pmtAssetId == prId))
617622 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
618623 else throw("wrong pmtAssetId")
619- let amBalanceNow = $t02483225212._1
620- let prBalanceNow = $t02483225212._2
621- let virtSwapInAm = $t02483225212._3
622- let virtSwapOutPr = $t02483225212._4
623- let virtSwapInPr = $t02483225212._5
624- let virtSwapOutAm = $t02483225212._6
624+ let amBalanceNow = $t02487525255._1
625+ let prBalanceNow = $t02487525255._2
626+ let virtSwapInAm = $t02487525255._3
627+ let virtSwapOutPr = $t02487525255._4
628+ let virtSwapInPr = $t02487525255._5
629+ let virtSwapOutAm = $t02487525255._6
625630 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
626631 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
627632 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
750755 let estimPrAmt = r._2
751756 let amBalance = getAccBalance(amId)
752757 let prBalance = getAccBalance(prId)
753- let $t03024330700 = if ((outAssetId == amId))
758+ let $t03028630743 = if ((outAssetId == amId))
754759 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
755760 else if ((outAssetId == prId))
756761 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
757762 else throw("wrong outAssetId")
758- let amBalanceNow = $t03024330700._1
759- let prBalanceNow = $t03024330700._2
760- let virtSwapInAm = $t03024330700._3
761- let virtSwapOutPr = $t03024330700._4
762- let virtSwapInPr = $t03024330700._5
763- let virtSwapOutAm = $t03024330700._6
764- let totalGet = $t03024330700._7
763+ let amBalanceNow = $t03028630743._1
764+ let prBalanceNow = $t03028630743._2
765+ let virtSwapInAm = $t03028630743._3
766+ let virtSwapOutPr = $t03028630743._4
767+ let virtSwapInPr = $t03028630743._5
768+ let virtSwapOutAm = $t03028630743._6
769+ let totalGet = $t03028630743._7
765770 if (if ((0 > virtSwapInAm))
766771 then true
767772 else (0 > virtSwapInPr))
775780 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
776781 if ((finalRes == finalRes))
777782 then {
778- let $t03140531509 = if ((outAssetId == amId))
783+ let $t03144831552 = if ((outAssetId == amId))
779784 then $Tuple2(toInt(finalRes._2), 0)
780785 else $Tuple2(0, toInt(finalRes._2))
781- let outAm = $t03140531509._1
782- let outPr = $t03140531509._2
786+ let outAm = $t03144831552._1
787+ let outPr = $t03144831552._2
783788 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
784789 let curPr = f1(curPrX18, scale8)
785790 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) = {
189- let diff = fraction(D0, scale8BigInt, D1)
190- let fail = (slpg > diff)
191- if (if (fail)
192- then true
193- else (D0 > D1))
194- then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
195- else fail
189+ let error = throw("before fraction")
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.")
196201 }
197202
198203
199204 func pcp (amAssetDcm,prAssetDcm,amAmt,prAmt) = {
200205 let amtAsAmtX18 = t1(amAmt, amAssetDcm)
201206 let prAsAmtX18 = t1(prAmt, prAssetDcm)
202207 cpbi(prAsAmtX18, amtAsAmtX18)
203208 }
204209
205210
206211 func calcPrices (amAmt,prAmt,lpAmt) = {
207212 let cfg = gpc()
208213 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
209214 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
210215 let priceX18 = pcp(amtAsDcm, prAsDcm, amAmt, prAmt)
211216 let amAmtX18 = t1(amAmt, amtAsDcm)
212217 let prAmtX18 = t1(prAmt, prAsDcm)
213218 let lpAmtX18 = t1(lpAmt, scale8)
214219 let lpPrInAmAsX18 = cpbi(amAmtX18, lpAmtX18)
215220 let lpPrInPrAsX18 = cpbi(prAmtX18, lpAmtX18)
216221 [priceX18, lpPrInAmAsX18, lpPrInPrAsX18]
217222 }
218223
219224
220225 func calculatePrices (amAmt,prAmt,lpAmt) = {
221226 let p = calcPrices(amAmt, prAmt, lpAmt)
222227 [f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)]
223228 }
224229
225230
226231 func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
227232 let cfg = gpc()
228233 let lpId = cfg[idxLPAsId]
229234 let amId = cfg[idxAmAsId]
230235 let prId = cfg[idxPrAsId]
231236 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
232237 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
233238 let sts = cfg[idxPoolSt]
234239 let lpEmiss = valueOrErrorMessage(assetInfo(fromBase58String(lpId)), "Wrong LP id").quantity
235240 if ((lpId != pmtAssetId))
236241 then throw("Wrong pmt asset")
237242 else {
238243 let amBalance = getAccBalance(amId)
239244 let amBalanceX18 = t1(amBalance, amDcm)
240245 let prBalance = getAccBalance(prId)
241246 let prBalanceX18 = t1(prBalance, prDcm)
242247 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
243248 let curPrice = f1(curPriceX18, scale8)
244249 let pmtLpAmtX18 = t1(pmtLpAmt, scale8)
245250 let lpEmissX18 = t1(lpEmiss, scale8)
246251 let outAmAmtX18 = fraction(amBalanceX18, pmtLpAmtX18, lpEmissX18)
247252 let outPrAmtX18 = fraction(prBalanceX18, pmtLpAmtX18, lpEmissX18)
248253 let outAmAmt = f1(outAmAmtX18, amDcm)
249254 let outPrAmt = f1(outPrAmtX18, prDcm)
250255 let state = if ((txId58 == ""))
251256 then nil
252257 else [ScriptTransfer(userAddress, outAmAmt, if ((amId == "WAVES"))
253258 then unit
254259 else fromBase58String(amId)), ScriptTransfer(userAddress, outPrAmt, if ((prId == "WAVES"))
255260 then unit
256261 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)]
257262 $Tuple10(outAmAmt, outPrAmt, amId, prId, amBalance, prBalance, lpEmiss, curPriceX18, sts, state)
258263 }
259264 }
260265
261266
262267 func epo (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,userAddress,isEval,emitLp,isOneAsset,pmtAmt,pmtId) = {
263268 let cfg = gpc()
264269 let lpId = fromBase58String(cfg[idxLPAsId])
265270 let amIdStr = cfg[idxAmAsId]
266271 let prIdStr = cfg[idxPrAsId]
267272 let inAmIdStr = cfg[idxIAmtAsId]
268273 let inPrIdStr = cfg[idxIPriceAsId]
269274 let amtDcm = parseIntValue(cfg[idxAmtAsDcm])
270275 let priceDcm = parseIntValue(cfg[idxPriceAsDcm])
271276 let sts = cfg[idxPoolSt]
272277 let lpEm = valueOrErrorMessage(assetInfo(lpId), "Wr lp as").quantity
273278 let amBalance = if (isEval)
274279 then getAccBalance(amIdStr)
275280 else if (if (isOneAsset)
276281 then (pmtId == amIdStr)
277282 else false)
278283 then (getAccBalance(amIdStr) - pmtAmt)
279284 else if (isOneAsset)
280285 then getAccBalance(amIdStr)
281286 else (getAccBalance(amIdStr) - inAmAmt)
282287 let prBalance = if (isEval)
283288 then getAccBalance(prIdStr)
284289 else if (if (isOneAsset)
285290 then (pmtId == prIdStr)
286291 else false)
287292 then (getAccBalance(prIdStr) - pmtAmt)
288293 else if (isOneAsset)
289294 then getAccBalance(prIdStr)
290295 else (getAccBalance(prIdStr) - inPrAmt)
291296 let inAmAssetAmtX18 = t1(inAmAmt, amtDcm)
292297 let inPrAssetAmtX18 = t1(inPrAmt, priceDcm)
293298 let userPriceX18 = cpbi(inPrAssetAmtX18, inAmAssetAmtX18)
294299 let amBalanceX18 = t1(amBalance, amtDcm)
295300 let prBalanceX18 = t1(prBalance, priceDcm)
296301 let r = if ((lpEm == 0))
297302 then {
298303 let curPriceX18 = zeroBigInt
299304 let slippageX18 = zeroBigInt
300305 let lpAmtX18 = pow((inAmAssetAmtX18 * inPrAssetAmtX18), 0, toBigInt(5), 1, 0, DOWN)
301306 $Tuple5(f1(lpAmtX18, scale8), f1(inAmAssetAmtX18, amtDcm), f1(inPrAssetAmtX18, priceDcm), cpbi((prBalanceX18 + inPrAssetAmtX18), (amBalanceX18 + inAmAssetAmtX18)), slippageX18)
302307 }
303308 else {
304309 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
305310 let slippageRealX18 = fraction(abs((curPriceX18 - userPriceX18)), scale18, curPriceX18)
306311 let slippageX18 = t1(slippage, scale8)
307312 if (if ((curPriceX18 != zeroBigInt))
308313 then (slippageRealX18 > slippageX18)
309314 else false)
310315 then throw(((("Price slippage " + toString(slippageRealX18)) + " > ") + toString(slippageX18)))
311316 else {
312317 let lpEmissionX18 = t1(lpEm, scale8)
313318 let prViaAmX18 = fraction(inAmAssetAmtX18, curPriceX18, scale18)
314319 let amViaPrX18 = fraction(inPrAssetAmtX18, scale18, curPriceX18)
315320 let expectedAmts = if ((prViaAmX18 > inPrAssetAmtX18))
316321 then $Tuple2(amViaPrX18, inPrAssetAmtX18)
317322 else $Tuple2(inAmAssetAmtX18, prViaAmX18)
318323 let expAmtAssetAmtX18 = expectedAmts._1
319324 let expPriceAssetAmtX18 = expectedAmts._2
320325 let lpAmtX18 = fraction(lpEmissionX18, expPriceAssetAmtX18, prBalanceX18)
321326 $Tuple5(f1(lpAmtX18, scale8), f1(expAmtAssetAmtX18, amtDcm), f1(expPriceAssetAmtX18, priceDcm), curPriceX18, slippageX18)
322327 }
323328 }
324329 let calcLpAmt = r._1
325330 let calcAmAssetPmt = r._2
326331 let calcPrAssetPmt = r._3
327332 let curPrice = f1(r._4, scale8)
328333 let slippageCalc = f1(r._5, scale8)
329334 if ((0 >= calcLpAmt))
330335 then throw("LP <= 0")
331336 else {
332337 let emitLpAmt = if (!(emitLp))
333338 then 0
334339 else calcLpAmt
335340 let amDiff = (inAmAmt - calcAmAssetPmt)
336341 let prDiff = (inPrAmt - calcPrAssetPmt)
337- let $t01553115876 = if (if (isOneAsset)
342+ let $t01557415919 = if (if (isOneAsset)
338343 then (pmtId == amIdStr)
339344 else false)
340345 then $Tuple2(pmtAmt, 0)
341346 else if (if (isOneAsset)
342347 then (pmtId == prIdStr)
343348 else false)
344349 then $Tuple2(0, pmtAmt)
345350 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
346- let writeAmAmt = $t01553115876._1
347- let writePrAmt = $t01553115876._2
351+ let writeAmAmt = $t01557415919._1
352+ let writePrAmt = $t01557415919._2
348353 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))]
349354 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
350355 }
351356 }
352357
353358
354359 func moa (order) = {
355360 let cfg = gpc()
356361 let amtAsId = cfg[idxAmAsId]
357362 let prAsId = cfg[idxPrAsId]
358363 let sts = parseIntValue(cfg[idxPoolSt])
359364 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
360365 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
361366 let accAmtAsBalance = getAccBalance(amtAsId)
362367 let accPrAsBalance = getAccBalance(prAsId)
363368 let curPriceX18 = if ((order.orderType == Buy))
364369 then pcp(amtAsDcm, prAsDcm, (accAmtAsBalance + order.amount), accPrAsBalance)
365370 else pcp(amtAsDcm, prAsDcm, (accAmtAsBalance - order.amount), accPrAsBalance)
366371 let curPrice = f1(curPriceX18, scale8)
367372 if (if (if (igs())
368373 then true
369374 else (sts == PoolMatcherDis))
370375 then true
371376 else (sts == PoolShutdown))
372377 then throw("Admin blocked")
373378 else {
374379 let orAmtAsset = order.assetPair.amountAsset
375380 let orAmtAsStr = if ((orAmtAsset == unit))
376381 then "WAVES"
377382 else toBase58String(value(orAmtAsset))
378383 let orPrAsset = order.assetPair.priceAsset
379384 let orPrAsStr = if ((orPrAsset == unit))
380385 then "WAVES"
381386 else toBase58String(value(orPrAsset))
382387 if (if ((orAmtAsStr != amtAsId))
383388 then true
384389 else (orPrAsStr != prAsId))
385390 then throw("Wr assets")
386391 else {
387392 let orderPrice = order.price
388393 let priceDcm = fraction(scale8, prAsDcm, amtAsDcm)
389394 let castOrderPrice = ts(orderPrice, scale8, priceDcm)
390395 let isOrderPriceValid = if ((order.orderType == Buy))
391396 then (curPrice >= castOrderPrice)
392397 else (castOrderPrice >= curPrice)
393398 true
394399 }
395400 }
396401 }
397402
398403
399404 func cg (i) = if ((size(i.payments) != 1))
400405 then throw("1 pmnt exp")
401406 else {
402407 let pmt = value(i.payments[0])
403408 let pmtAssetId = value(pmt.assetId)
404409 let pmtAmt = pmt.amount
405410 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
406411 let outAmAmt = r._1
407412 let outPrAmt = r._2
408413 let sts = parseIntValue(r._9)
409414 let state = r._10
410415 if (if (igs())
411416 then true
412417 else (sts == PoolShutdown))
413418 then throw(("Admin blocked: " + toString(sts)))
414419 else $Tuple5(outAmAmt, outPrAmt, pmtAmt, pmtAssetId, state)
415420 }
416421
417422
418423 func cp (caller,txId,amAsPmt,prAsPmt,slippage,emitLp,isOneAsset,pmtAmt,pmtId) = {
419424 let r = epo(txId, slippage, value(amAsPmt).amount, value(amAsPmt).assetId, value(prAsPmt).amount, value(prAsPmt).assetId, caller, false, emitLp, isOneAsset, pmtAmt, pmtId)
420425 let sts = parseIntValue(r._8)
421426 if (if (if (igs())
422427 then true
423428 else (sts == PoolPutDis))
424429 then true
425430 else (sts == PoolShutdown))
426431 then throw(("Blocked:" + toString(sts)))
427432 else r
428433 }
429434
430435
431436 func m () = match getString(mpk()) {
432437 case s: String =>
433438 fromBase58String(s)
434439 case _: Unit =>
435440 unit
436441 case _ =>
437442 throw("Match error")
438443 }
439444
440445
441446 func pm () = match getString(pmpk()) {
442447 case s: String =>
443448 fromBase58String(s)
444449 case _: Unit =>
445450 unit
446451 case _ =>
447452 throw("Match error")
448453 }
449454
450455
451456 let pd = throw("Permission denied")
452457
453458 func mm (i) = match m() {
454459 case pk: ByteVector =>
455460 if ((i.callerPublicKey == pk))
456461 then true
457462 else pd
458463 case _: Unit =>
459464 if ((i.caller == this))
460465 then true
461466 else pd
462467 case _ =>
463468 throw("Match error")
464469 }
465470
466471
467472 @Callable(i)
468473 func constructor (fc) = {
469474 let c = mm(i)
470475 if ((c == c))
471476 then [StringEntry(fc(), fc)]
472477 else throw("Strict value is not equal to itself.")
473478 }
474479
475480
476481
477482 @Callable(i)
478483 func setManager (pendingManagerPublicKey) = {
479484 let c = mm(i)
480485 if ((c == c))
481486 then {
482487 let cm = fromBase58String(pendingManagerPublicKey)
483488 if ((cm == cm))
484489 then [StringEntry(pmpk(), pendingManagerPublicKey)]
485490 else throw("Strict value is not equal to itself.")
486491 }
487492 else throw("Strict value is not equal to itself.")
488493 }
489494
490495
491496
492497 @Callable(i)
493498 func confirmManager () = {
494499 let p = pm()
495500 let hpm = if (isDefined(p))
496501 then true
497502 else throw("No pending manager")
498503 if ((hpm == hpm))
499504 then {
500505 let cpm = if ((i.callerPublicKey == value(p)))
501506 then true
502507 else throw("You are not pending manager")
503508 if ((cpm == cpm))
504509 then [StringEntry(mpk(), toBase58String(value(p))), DeleteEntry(pmpk())]
505510 else throw("Strict value is not equal to itself.")
506511 }
507512 else throw("Strict value is not equal to itself.")
508513 }
509514
510515
511516
512517 @Callable(i)
513518 func put (slip,autoStake) = {
514519 let factCfg = gfc()
515520 let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
516521 let slipCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactSlippCntr]), "Wr sl addr")
517522 if ((0 > slip))
518523 then throw("Wrong slippage")
519524 else if ((size(i.payments) != 2))
520525 then throw("2 pmnts expd")
521526 else {
522527 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, "")
523528 let emitLpAmt = e._2
524529 let lpAssetId = e._7
525530 let state = e._9
526531 let amDiff = e._10
527532 let prDiff = e._11
528533 let amId = e._12
529534 let prId = e._13
530535 let r = invoke(fca, "emit", [emitLpAmt], nil)
531536 if ((r == r))
532537 then {
533538 let el = match r {
534539 case legacy: Address =>
535540 invoke(legacy, "emit", [emitLpAmt], nil)
536541 case _ =>
537542 unit
538543 }
539544 if ((el == el))
540545 then {
541546 let sa = if ((amDiff > 0))
542547 then invoke(slipCntr, "put", nil, [AttachedPayment(amId, amDiff)])
543548 else nil
544549 if ((sa == sa))
545550 then {
546551 let sp = if ((prDiff > 0))
547552 then invoke(slipCntr, "put", nil, [AttachedPayment(prId, prDiff)])
548553 else nil
549554 if ((sp == sp))
550555 then {
551556 let lpTrnsfr = if (autoStake)
552557 then {
553558 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
554559 if ((ss == ss))
555560 then nil
556561 else throw("Strict value is not equal to itself.")
557562 }
558563 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
559564 (state ++ lpTrnsfr)
560565 }
561566 else throw("Strict value is not equal to itself.")
562567 }
563568 else throw("Strict value is not equal to itself.")
564569 }
565570 else throw("Strict value is not equal to itself.")
566571 }
567572 else throw("Strict value is not equal to itself.")
568573 }
569574 }
570575
571576
572577
573578 @Callable(i)
574579 func putOneTkn (amAssetPart,prAssetPart,outLp,slippage,autoStake) = {
575580 let cfg = gfc()
576581 let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
577582 let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
578583 let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
579584 let poolCfg = gpc()
580585 let amId = poolCfg[idxAmAsId]
581586 let prId = poolCfg[idxPrAsId]
582587 let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
583588 let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
584589 let addon = valueOrElse(getString(this, ada()), "")
585590 let userAddress = if ((addon == toString(i.caller)))
586591 then i.originCaller
587592 else i.caller
588593 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
589594 let check = reentrantInvoke(addonContract, "ensureCanPutOneTkn", [toString(userAddress)], nil)
590595 if ((check == check))
591596 then if (if (if (if ((0 >= slippage))
592597 then true
593598 else (0 >= amAssetPart))
594599 then true
595600 else (0 >= prAssetPart))
596601 then true
597602 else (0 >= outLp))
598603 then throw("Wrong params")
599604 else if ((size(i.payments) != 1))
600605 then throw("1 pmnt expd")
601606 else {
602607 let pmt = value(i.payments[0])
603608 let pmtAssetId = toBase58String(value(pmt.assetId))
604609 let pmtAmt = pmt.amount
605610 if (if (if ((amAssetPart > pmtAmt))
606611 then true
607612 else (prAssetPart > pmtAmt))
608613 then true
609614 else (10000000 > pmtAmt))
610615 then throw("Wrong pmt amt")
611616 else {
612617 let amBalance = getAccBalance(amId)
613618 let prBalance = getAccBalance(prId)
614- let $t02483225212 = if ((pmtAssetId == amId))
619+ let $t02487525255 = if ((pmtAssetId == amId))
615620 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
616621 else if ((pmtAssetId == prId))
617622 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
618623 else throw("wrong pmtAssetId")
619- let amBalanceNow = $t02483225212._1
620- let prBalanceNow = $t02483225212._2
621- let virtSwapInAm = $t02483225212._3
622- let virtSwapOutPr = $t02483225212._4
623- let virtSwapInPr = $t02483225212._5
624- let virtSwapOutAm = $t02483225212._6
624+ let amBalanceNow = $t02487525255._1
625+ let prBalanceNow = $t02487525255._2
626+ let virtSwapInAm = $t02487525255._3
627+ let virtSwapOutPr = $t02487525255._4
628+ let virtSwapInPr = $t02487525255._5
629+ let virtSwapOutAm = $t02487525255._6
625630 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
626631 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
627632 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
628633 if ((D0vsD1 == D0vsD1))
629634 then {
630635 let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
631636 let estimLP = estPut._2
632637 let lpAssetId = estPut._7
633638 let state = estPut._9
634639 let amDiff = estPut._10
635640 let prDiff = estPut._11
636641 let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
637642 let emitLpAmt = toInt(lpCalcRes._2)
638643 let e = invoke(fca, "emit", [emitLpAmt], nil)
639644 if ((e == e))
640645 then {
641646 let el = match e {
642647 case legacy: Address =>
643648 invoke(legacy, "emit", [emitLpAmt], nil)
644649 case _ =>
645650 unit
646651 }
647652 if ((el == el))
648653 then {
649654 let sa = if ((amDiff > 0))
650655 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
651656 else nil
652657 if ((sa == sa))
653658 then {
654659 let sp = if ((prDiff > 0))
655660 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
656661 else nil
657662 if ((sp == sp))
658663 then {
659664 let lpTrnsfr = if (autoStake)
660665 then {
661666 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
662667 if ((ss == ss))
663668 then nil
664669 else throw("Strict value is not equal to itself.")
665670 }
666671 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
667672 (state ++ lpTrnsfr)
668673 }
669674 else throw("Strict value is not equal to itself.")
670675 }
671676 else throw("Strict value is not equal to itself.")
672677 }
673678 else throw("Strict value is not equal to itself.")
674679 }
675680 else throw("Strict value is not equal to itself.")
676681 }
677682 else throw("Strict value is not equal to itself.")
678683 }
679684 }
680685 else throw("Strict value is not equal to itself.")
681686 }
682687
683688
684689
685690 @Callable(i)
686691 func putForFree (maxSlpg) = if ((0 > maxSlpg))
687692 then throw("Wrong slpg")
688693 else if ((size(i.payments) != 2))
689694 then throw("2 pmnts expd")
690695 else {
691696 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, "")
692697 estPut._9
693698 }
694699
695700
696701
697702 @Callable(i)
698703 func get () = {
699704 let r = cg(i)
700705 let outAmtAmt = r._1
701706 let outPrAmt = r._2
702707 let pmtAmt = r._3
703708 let pmtAssetId = r._4
704709 let state = r._5
705710 let b = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
706711 if ((b == b))
707712 then state
708713 else throw("Strict value is not equal to itself.")
709714 }
710715
711716
712717
713718 @Callable(i)
714719 func getOneTkn (exchResult,notUsed,outAmount,outAssetId,slippage) = if ((size(i.payments) != 1))
715720 then throw("1 pmnt expd")
716721 else {
717722 let cfg = gpc()
718723 let lpId = cfg[idxLPAsId]
719724 let amId = cfg[idxAmAsId]
720725 let prId = cfg[idxPrAsId]
721726 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
722727 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
723728 let sts = cfg[idxPoolSt]
724729 let factCfg = gfc()
725730 let gwxCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactGwxRewCntr]), "Wr sl addr")
726731 let pmt = value(i.payments[0])
727732 let addon = valueOrElse(getString(this, ada()), "")
728733 let userAddress = if ((addon == toString(i.caller)))
729734 then i.originCaller
730735 else i.caller
731736 let txId58 = toBase58String(i.transactionId)
732737 let pmtAssetId = value(pmt.assetId)
733738 let pmtAmt = pmt.amount
734739 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
735740 let check = reentrantInvoke(addonContract, "ensureCanGetOneTkn", [toString(userAddress)], nil)
736741 if ((check == check))
737742 then if ((1000000000 > pmtAmt))
738743 then throw("Min pmt 10 LP")
739744 else if (if (if ((0 > slippage))
740745 then true
741746 else (0 > exchResult))
742747 then true
743748 else (0 > outAmount))
744749 then throw("Wrong params")
745750 else if ((lpId != toBase58String(pmtAssetId)))
746751 then throw("Wrong LP")
747752 else {
748753 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
749754 let estimAmAmt = r._1
750755 let estimPrAmt = r._2
751756 let amBalance = getAccBalance(amId)
752757 let prBalance = getAccBalance(prId)
753- let $t03024330700 = if ((outAssetId == amId))
758+ let $t03028630743 = if ((outAssetId == amId))
754759 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
755760 else if ((outAssetId == prId))
756761 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
757762 else throw("wrong outAssetId")
758- let amBalanceNow = $t03024330700._1
759- let prBalanceNow = $t03024330700._2
760- let virtSwapInAm = $t03024330700._3
761- let virtSwapOutPr = $t03024330700._4
762- let virtSwapInPr = $t03024330700._5
763- let virtSwapOutAm = $t03024330700._6
764- let totalGet = $t03024330700._7
763+ let amBalanceNow = $t03028630743._1
764+ let prBalanceNow = $t03028630743._2
765+ let virtSwapInAm = $t03028630743._3
766+ let virtSwapOutPr = $t03028630743._4
767+ let virtSwapInPr = $t03028630743._5
768+ let virtSwapOutAm = $t03028630743._6
769+ let totalGet = $t03028630743._7
765770 if (if ((0 > virtSwapInAm))
766771 then true
767772 else (0 > virtSwapInPr))
768773 then throw("Wrong calc")
769774 else {
770775 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
771776 let D1 = invoke(gwxCntr, "calcD", [toString(((amBalanceNow - virtSwapInAm) + virtSwapOutAm)), toString(((prBalanceNow + virtSwapOutPr) - virtSwapInPr)), A, Amult, Dconv], nil)
772777 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
773778 if ((D0vsD1 == D0vsD1))
774779 then {
775780 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
776781 if ((finalRes == finalRes))
777782 then {
778- let $t03140531509 = if ((outAssetId == amId))
783+ let $t03144831552 = if ((outAssetId == amId))
779784 then $Tuple2(toInt(finalRes._2), 0)
780785 else $Tuple2(0, toInt(finalRes._2))
781- let outAm = $t03140531509._1
782- let outPr = $t03140531509._2
786+ let outAm = $t03144831552._1
787+ let outPr = $t03144831552._2
783788 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
784789 let curPr = f1(curPrX18, scale8)
785790 let state = [ScriptTransfer(userAddress, (outAm + outPr), if ((outAssetId == "WAVES"))
786791 then unit
787792 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)]
788793 if ((state == state))
789794 then {
790795 let burn = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
791796 if ((burn == burn))
792797 then state
793798 else throw("Strict value is not equal to itself.")
794799 }
795800 else throw("Strict value is not equal to itself.")
796801 }
797802 else throw("Strict value is not equal to itself.")
798803 }
799804 else throw("Strict value is not equal to itself.")
800805 }
801806 }
802807 else throw("Strict value is not equal to itself.")
803808 }
804809
805810
806811
807812 @Callable(i)
808813 func getNoLess (noLessThenAmtAsset,noLessThenPriceAsset) = {
809814 let r = cg(i)
810815 let outAmAmt = r._1
811816 let outPrAmt = r._2
812817 let pmtAmt = r._3
813818 let pmtAssetId = r._4
814819 let state = r._5
815820 if ((noLessThenAmtAsset > outAmAmt))
816821 then throw(((("Failed: " + toString(outAmAmt)) + " < ") + toString(noLessThenAmtAsset)))
817822 else if ((noLessThenPriceAsset > outPrAmt))
818823 then throw(((("Failed: " + toString(outPrAmt)) + " < ") + toString(noLessThenPriceAsset)))
819824 else {
820825 let burnLPAssetOnFactory = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
821826 if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
822827 then state
823828 else throw("Strict value is not equal to itself.")
824829 }
825830 }
826831
827832
828833
829834 @Callable(i)
830835 func unstakeAndGet (amount) = {
831836 let checkPayments = if ((size(i.payments) != 0))
832837 then throw("No pmnts expd")
833838 else true
834839 if ((checkPayments == checkPayments))
835840 then {
836841 let cfg = gpc()
837842 let factoryCfg = gfc()
838843 let lpAssetId = fromBase58String(cfg[idxLPAsId])
839844 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
840845 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
841846 if ((unstakeInv == unstakeInv))
842847 then {
843848 let r = ego(toBase58String(i.transactionId), toBase58String(lpAssetId), amount, i.caller)
844849 let sts = parseIntValue(r._9)
845850 let state = r._10
846851 let v = if (if (igs())
847852 then true
848853 else (sts == PoolShutdown))
849854 then throw(("Blocked: " + toString(sts)))
850855 else true
851856 if ((v == v))
852857 then {
853858 let burnA = invoke(fca, "burn", [amount], [AttachedPayment(lpAssetId, amount)])
854859 if ((burnA == burnA))
855860 then state
856861 else throw("Strict value is not equal to itself.")
857862 }
858863 else throw("Strict value is not equal to itself.")
859864 }
860865 else throw("Strict value is not equal to itself.")
861866 }
862867 else throw("Strict value is not equal to itself.")
863868 }
864869
865870
866871
867872 @Callable(i)
868873 func activate (amtAsStr,prAsStr) = if ((toString(i.caller) != toString(fca)))
869874 then throw("denied")
870875 else $Tuple2([StringEntry(aa(), amtAsStr), StringEntry(pa(), prAsStr)], "success")
871876
872877
873878
874879 @Callable(i)
875880 func setS (k,v) = if ((toString(i.caller) != strf(this, ada())))
876881 then pd
877882 else [StringEntry(k, v)]
878883
879884
880885
881886 @Callable(i)
882887 func setI (k,v) = if ((toString(i.caller) != strf(this, ada())))
883888 then pd
884889 else [IntegerEntry(k, v)]
885890
886891
887892
888893 @Callable(i)
889894 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, gpc())
890895
891896
892897
893898 @Callable(i)
894899 func getAccBalanceWrapperREADONLY (assetId) = $Tuple2(nil, getAccBalance(assetId))
895900
896901
897902
898903 @Callable(i)
899904 func calcPricesWrapperREADONLY (amAmt,prAmt,lpAmt) = {
900905 let pr = calcPrices(amAmt, prAmt, lpAmt)
901906 $Tuple2(nil, [toString(pr[0]), toString(pr[1]), toString(pr[2])])
902907 }
903908
904909
905910
906911 @Callable(i)
907912 func fromX18WrapperREADONLY (val,resScaleMult) = $Tuple2(nil, f1(parseBigIntValue(val), resScaleMult))
908913
909914
910915
911916 @Callable(i)
912917 func toX18WrapperREADONLY (origVal,origScaleMult) = $Tuple2(nil, toString(t1(origVal, origScaleMult)))
913918
914919
915920
916921 @Callable(i)
917922 func calcPriceBigIntWrapperREADONLY (prAmtX18,amAmtX18) = $Tuple2(nil, toString(cpbi(parseBigIntValue(prAmtX18), parseBigIntValue(amAmtX18))))
918923
919924
920925
921926 @Callable(i)
922927 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, ""))
923928
924929
925930
926931 @Callable(i)
927932 func estimateGetOperationWrapperREADONLY (txId58,pmtAsId,pmtLpAmt,usrAddr) = {
928933 let r = ego(txId58, pmtAsId, pmtLpAmt, addressFromStringValue(usrAddr))
929934 $Tuple2(nil, $Tuple10(r._1, r._2, r._3, r._4, r._5, r._6, r._7, toString(r._8), r._9, r._10))
930935 }
931936
932937
933938 @Verifier(tx)
934939 func verify () = match tx {
935940 case order: Order =>
936941 let mtchPub = mp()
937942 let orV = moa(order)
938943 let sndrV = sigVerify(order.bodyBytes, order.proofs[0], order.senderPublicKey)
939944 let mtchV = sigVerify(order.bodyBytes, order.proofs[1], mtchPub)
940945 if (if (if (orV)
941946 then sndrV
942947 else false)
943948 then mtchV
944949 else false)
945950 then true
946951 else toe(orV, sndrV, mtchV)
947952 case _ =>
948953 let targetPublicKey = match m() {
949954 case pk: ByteVector =>
950955 pk
951956 case _: Unit =>
952957 tx.senderPublicKey
953958 case _ =>
954959 throw("Match error")
955960 }
956961 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
957962 }
958963

github/deemru/w8io/873ac7e 
144.11 ms