tx · DfS5X1ZUT62VWu5bsu4c1xEhgGx1DPydF9UTwWwJoR2t

3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT:  -0.03500000 Waves

2022.05.30 14:52 [2074361] smart account 3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT > SELF 0.00000000 Waves

{ "type": 13, "id": "DfS5X1ZUT62VWu5bsu4c1xEhgGx1DPydF9UTwWwJoR2t", "fee": 3500000, "feeAssetId": null, "timestamp": 1653911575995, "version": 1, "sender": "3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT", "senderPublicKey": "D1BL65meykxFZTCuq7jq9HSGLLnWvQamQPUNrguW5w39", "proofs": [ "3VVNdFtcki7rffnKjD2c74UNRyzL4MdKcPfkoYLEzXqzb5nx5Ueh13uEEszZPdq7S4pc18d5kS1cVVfMNaTHuLZ4" ], "script": "base64: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CgJibhIKcHJBc3NldERjbRoLCgJibxIFYW1BbXQaCwoCYnASBXByQW10GhEKAmJxEgthbXRBc0FtdFgxOBoQCgJichIKcHJBc0FtdFgxOBoQCgJicxIKY2FsY1ByaWNlcxoLCgJidBIFbHBBbXQaCQoCYnUSA2NmZxoOCgJidhIIYW10QXNEY20aDQoCYncSB3ByQXNEY20aDgoCYngSCHByaWNlWDE4Gg4KAmJ5EghscEFtdFgxOBoTCgJiehINbHBQckluQW1Bc1gxOBoMCgFjEgdzY2FsZTE4GhAKAmNBEgpwclZpYUFtWDE4GhAKAmNCEgphbVZpYVByWDE4GhIKAmNDEgxleHBlY3RlZEFtdHMaFwoCY0QSEWV4cEFtdEFzc2V0QW10WDE4GhkKAmNFEhNleHBQcmljZUFzc2V0QW10WDE4Gg8KAmNGEgljYWxjTHBBbXQaFAoCY0cSDmNhbGNBbUFzc2V0UG10GhQKAmNIEg5jYWxjUHJBc3NldFBtdBoSCgJjSRIMc2xpcHBhZ2VDYWxjGg8KAmNKEgllbWl0THBBbXQaDAoCY0sSBmFtRGlmZhoMCgJjTBIGcHJEaWZmGhMKAmNNEg0kdDAxNTUzMTE1ODc2GhAKAmNOEgp3cml0ZUFtQW10GhAKAmNPEgp3cml0ZVByQW10GhEKAmNQEgtjb21tb25TdGF0ZRoJCgJjURIDbW9hGgsKAmNSEgVvcmRlchoNCgJjUxIHYW10QXNJZBoMCgJjVBIGcHJBc0lkGhUKAmNVEg9hY2NBbXRBc0JhbGFuY2UaFAoCY1YSDmFjY1ByQXNCYWxhbmNlGhAKAmNXEgpvckFtdEFzc2V0GhAKAmNYEgpvckFtdEFzU3RyGg8KAmNZEglvclByQXNzZXQaDwoCY1oSCW9yUHJBc1N0choOCgJjYRIIb3V0UHJBbXQaCwoCY2ISBXN0YXRlGgkKAmNjEgNlcG8aDQoCY2QSB2luQW1BbXQaDAoCY2USBmluQW1JZBoNCgJjZhIHaW5QckFtdBoMCgJjZxIGaW5QcklkGgwKAmNoEgZpc0V2YWwaDAoCY2kSBmVtaXRMcBoQCgJjahIKaXNPbmVBc3NldBoMCgJjaxIGcG10QW10GgsKAmNsEgVwbXRJZBoNCgJjbRIHYW1JZFN0choNCgJjbhIHcHJJZFN0choP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", "chainId": 84, "height": 2074361, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3emVKdpfFzUY8dTCBGeFm6cECuaQ4MnmvQXz8qEyxLTU Next: 3fGpt3SEWtq77zbSETGFPkfZXpXUq9JwXH9CHL6T1Vkx 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 let fail = (slpg > diff)
191191 if (if (fail)
192192 then true
193193 else (D0 > D1))
194194 then throw(((((((toString(D0) + " ") + toString(D1)) + " ") + toString(diff)) + " ") + toString(slpg)))
195195 else fail
196196 }
197197
198198
199199 func pcp (amAssetDcm,prAssetDcm,amAmt,prAmt) = {
200200 let amtAsAmtX18 = t1(amAmt, amAssetDcm)
201201 let prAsAmtX18 = t1(prAmt, prAssetDcm)
202202 cpbi(prAsAmtX18, amtAsAmtX18)
203203 }
204204
205205
206206 func calcPrices (amAmt,prAmt,lpAmt) = {
207207 let cfg = gpc()
208208 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
209209 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
210210 let priceX18 = pcp(amtAsDcm, prAsDcm, amAmt, prAmt)
211211 let amAmtX18 = t1(amAmt, amtAsDcm)
212212 let prAmtX18 = t1(prAmt, prAsDcm)
213213 let lpAmtX18 = t1(lpAmt, scale8)
214214 let lpPrInAmAsX18 = cpbi(amAmtX18, lpAmtX18)
215215 let lpPrInPrAsX18 = cpbi(prAmtX18, lpAmtX18)
216216 [priceX18, lpPrInAmAsX18, lpPrInPrAsX18]
217217 }
218218
219219
220220 func calculatePrices (amAmt,prAmt,lpAmt) = {
221221 let p = calcPrices(amAmt, prAmt, lpAmt)
222222 [f1(p[0], scale8), f1(p[1], scale8), f1(p[2], scale8)]
223223 }
224224
225225
226226 func ego (txId58,pmtAssetId,pmtLpAmt,userAddress) = {
227227 let cfg = gpc()
228228 let lpId = cfg[idxLPAsId]
229229 let amId = cfg[idxAmAsId]
230230 let prId = cfg[idxPrAsId]
231231 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
232232 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
233233 let sts = cfg[idxPoolSt]
234234 let lpEmiss = valueOrErrorMessage(assetInfo(fromBase58String(lpId)), "Wrong LP id").quantity
235235 if ((lpId != pmtAssetId))
236236 then throw("Wrong pmt asset")
237237 else {
238238 let amBalance = getAccBalance(amId)
239239 let amBalanceX18 = t1(amBalance, amDcm)
240240 let prBalance = getAccBalance(prId)
241241 let prBalanceX18 = t1(prBalance, prDcm)
242242 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
243243 let curPrice = f1(curPriceX18, scale8)
244244 let pmtLpAmtX18 = t1(pmtLpAmt, scale8)
245245 let lpEmissX18 = t1(lpEmiss, scale8)
246246 let outAmAmtX18 = fraction(amBalanceX18, pmtLpAmtX18, lpEmissX18)
247247 let outPrAmtX18 = fraction(prBalanceX18, pmtLpAmtX18, lpEmissX18)
248248 let outAmAmt = f1(outAmAmtX18, amDcm)
249249 let outPrAmt = f1(outPrAmtX18, prDcm)
250250 let state = if ((txId58 == ""))
251251 then nil
252252 else [ScriptTransfer(userAddress, outAmAmt, if ((amId == "WAVES"))
253253 then unit
254254 else fromBase58String(amId)), ScriptTransfer(userAddress, outPrAmt, if ((prId == "WAVES"))
255255 then unit
256256 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)]
257257 $Tuple10(outAmAmt, outPrAmt, amId, prId, amBalance, prBalance, lpEmiss, curPriceX18, sts, state)
258258 }
259259 }
260260
261261
262262 func epo (txId58,slippage,inAmAmt,inAmId,inPrAmt,inPrId,userAddress,isEval,emitLp,isOneAsset,pmtAmt,pmtId) = {
263263 let cfg = gpc()
264264 let lpId = fromBase58String(cfg[idxLPAsId])
265265 let amIdStr = cfg[idxAmAsId]
266266 let prIdStr = cfg[idxPrAsId]
267267 let inAmIdStr = cfg[idxIAmtAsId]
268268 let inPrIdStr = cfg[idxIPriceAsId]
269269 let amtDcm = parseIntValue(cfg[idxAmtAsDcm])
270270 let priceDcm = parseIntValue(cfg[idxPriceAsDcm])
271271 let sts = cfg[idxPoolSt]
272272 let lpEm = valueOrErrorMessage(assetInfo(lpId), "Wr lp as").quantity
273273 let amBalance = if (isEval)
274274 then getAccBalance(amIdStr)
275275 else if (if (isOneAsset)
276276 then (pmtId == amIdStr)
277277 else false)
278278 then (getAccBalance(amIdStr) - pmtAmt)
279279 else if (isOneAsset)
280280 then getAccBalance(amIdStr)
281281 else (getAccBalance(amIdStr) - inAmAmt)
282282 let prBalance = if (isEval)
283283 then getAccBalance(prIdStr)
284284 else if (if (isOneAsset)
285285 then (pmtId == prIdStr)
286286 else false)
287287 then (getAccBalance(prIdStr) - pmtAmt)
288288 else if (isOneAsset)
289289 then getAccBalance(prIdStr)
290290 else (getAccBalance(prIdStr) - inPrAmt)
291291 let inAmAssetAmtX18 = t1(inAmAmt, amtDcm)
292292 let inPrAssetAmtX18 = t1(inPrAmt, priceDcm)
293293 let userPriceX18 = cpbi(inPrAssetAmtX18, inAmAssetAmtX18)
294294 let amBalanceX18 = t1(amBalance, amtDcm)
295295 let prBalanceX18 = t1(prBalance, priceDcm)
296296 let r = if ((lpEm == 0))
297297 then {
298298 let curPriceX18 = zeroBigInt
299299 let slippageX18 = zeroBigInt
300300 let lpAmtX18 = pow((inAmAssetAmtX18 * inPrAssetAmtX18), 0, toBigInt(5), 1, 0, DOWN)
301301 $Tuple5(f1(lpAmtX18, scale8), f1(inAmAssetAmtX18, amtDcm), f1(inPrAssetAmtX18, priceDcm), cpbi((prBalanceX18 + inPrAssetAmtX18), (amBalanceX18 + inAmAssetAmtX18)), slippageX18)
302302 }
303303 else {
304304 let curPriceX18 = cpbi(prBalanceX18, amBalanceX18)
305305 let slippageRealX18 = fraction(abs((curPriceX18 - userPriceX18)), scale18, curPriceX18)
306306 let slippageX18 = t1(slippage, scale8)
307307 if (if ((curPriceX18 != zeroBigInt))
308308 then (slippageRealX18 > slippageX18)
309309 else false)
310310 then throw(((("Price slippage " + toString(slippageRealX18)) + " > ") + toString(slippageX18)))
311311 else {
312312 let lpEmissionX18 = t1(lpEm, scale8)
313313 let prViaAmX18 = fraction(inAmAssetAmtX18, curPriceX18, scale18)
314314 let amViaPrX18 = fraction(inPrAssetAmtX18, scale18, curPriceX18)
315315 let expectedAmts = if ((prViaAmX18 > inPrAssetAmtX18))
316316 then $Tuple2(amViaPrX18, inPrAssetAmtX18)
317317 else $Tuple2(inAmAssetAmtX18, prViaAmX18)
318318 let expAmtAssetAmtX18 = expectedAmts._1
319319 let expPriceAssetAmtX18 = expectedAmts._2
320320 let lpAmtX18 = fraction(lpEmissionX18, expPriceAssetAmtX18, prBalanceX18)
321321 $Tuple5(f1(lpAmtX18, scale8), f1(expAmtAssetAmtX18, amtDcm), f1(expPriceAssetAmtX18, priceDcm), curPriceX18, slippageX18)
322322 }
323323 }
324324 let calcLpAmt = r._1
325325 let calcAmAssetPmt = r._2
326326 let calcPrAssetPmt = r._3
327327 let curPrice = f1(r._4, scale8)
328328 let slippageCalc = f1(r._5, scale8)
329329 if ((0 >= calcLpAmt))
330330 then throw("LP <= 0")
331331 else {
332332 let emitLpAmt = if (!(emitLp))
333333 then 0
334334 else calcLpAmt
335335 let amDiff = (inAmAmt - calcAmAssetPmt)
336336 let prDiff = (inPrAmt - calcPrAssetPmt)
337337 let $t01553115876 = if (if (isOneAsset)
338338 then (pmtId == amIdStr)
339339 else false)
340340 then $Tuple2(pmtAmt, 0)
341341 else if (if (isOneAsset)
342342 then (pmtId == prIdStr)
343343 else false)
344344 then $Tuple2(0, pmtAmt)
345345 else $Tuple2(calcAmAssetPmt, calcPrAssetPmt)
346346 let writeAmAmt = $t01553115876._1
347347 let writePrAmt = $t01553115876._2
348348 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))]
349349 $Tuple13(calcLpAmt, emitLpAmt, curPrice, amBalance, prBalance, lpEm, lpId, sts, commonState, amDiff, prDiff, inAmId, inPrId)
350350 }
351351 }
352352
353353
354354 func moa (order) = {
355355 let cfg = gpc()
356356 let amtAsId = cfg[idxAmAsId]
357357 let prAsId = cfg[idxPrAsId]
358358 let sts = parseIntValue(cfg[idxPoolSt])
359359 let amtAsDcm = parseIntValue(cfg[idxAmtAsDcm])
360360 let prAsDcm = parseIntValue(cfg[idxPriceAsDcm])
361361 let accAmtAsBalance = getAccBalance(amtAsId)
362362 let accPrAsBalance = getAccBalance(prAsId)
363363 let curPriceX18 = if ((order.orderType == Buy))
364364 then pcp(amtAsDcm, prAsDcm, (accAmtAsBalance + order.amount), accPrAsBalance)
365365 else pcp(amtAsDcm, prAsDcm, (accAmtAsBalance - order.amount), accPrAsBalance)
366366 let curPrice = f1(curPriceX18, scale8)
367367 if (if (if (igs())
368368 then true
369369 else (sts == PoolMatcherDis))
370370 then true
371371 else (sts == PoolShutdown))
372372 then throw("Admin blocked")
373373 else {
374374 let orAmtAsset = order.assetPair.amountAsset
375375 let orAmtAsStr = if ((orAmtAsset == unit))
376376 then "WAVES"
377377 else toBase58String(value(orAmtAsset))
378378 let orPrAsset = order.assetPair.priceAsset
379379 let orPrAsStr = if ((orPrAsset == unit))
380380 then "WAVES"
381381 else toBase58String(value(orPrAsset))
382382 if (if ((orAmtAsStr != amtAsId))
383383 then true
384384 else (orPrAsStr != prAsId))
385385 then throw("Wr assets")
386386 else {
387387 let orderPrice = order.price
388388 let priceDcm = fraction(scale8, prAsDcm, amtAsDcm)
389389 let castOrderPrice = ts(orderPrice, scale8, priceDcm)
390390 let isOrderPriceValid = if ((order.orderType == Buy))
391391 then (curPrice >= castOrderPrice)
392392 else (castOrderPrice >= curPrice)
393393 true
394394 }
395395 }
396396 }
397397
398398
399399 func cg (i) = if ((size(i.payments) != 1))
400400 then throw("1 pmnt exp")
401401 else {
402402 let pmt = value(i.payments[0])
403403 let pmtAssetId = value(pmt.assetId)
404404 let pmtAmt = pmt.amount
405405 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
406406 let outAmAmt = r._1
407407 let outPrAmt = r._2
408408 let sts = parseIntValue(r._9)
409409 let state = r._10
410410 if (if (igs())
411411 then true
412412 else (sts == PoolShutdown))
413413 then throw(("Admin blocked: " + toString(sts)))
414414 else $Tuple5(outAmAmt, outPrAmt, pmtAmt, pmtAssetId, state)
415415 }
416416
417417
418418 func cp (caller,txId,amAsPmt,prAsPmt,slippage,emitLp,isOneAsset,pmtAmt,pmtId) = {
419419 let r = epo(txId, slippage, value(amAsPmt).amount, value(amAsPmt).assetId, value(prAsPmt).amount, value(prAsPmt).assetId, caller, false, emitLp, isOneAsset, pmtAmt, pmtId)
420420 let sts = parseIntValue(r._8)
421421 if (if (if (igs())
422422 then true
423423 else (sts == PoolPutDis))
424424 then true
425425 else (sts == PoolShutdown))
426426 then throw(("Blocked:" + toString(sts)))
427427 else r
428428 }
429429
430430
431431 func m () = match getString(mpk()) {
432432 case s: String =>
433433 fromBase58String(s)
434434 case _: Unit =>
435435 unit
436436 case _ =>
437437 throw("Match error")
438438 }
439439
440440
441441 func pm () = match getString(pmpk()) {
442442 case s: String =>
443443 fromBase58String(s)
444444 case _: Unit =>
445445 unit
446446 case _ =>
447447 throw("Match error")
448448 }
449449
450450
451451 let pd = throw("Permission denied not addon")
452452
453453 func mm (i) = match m() {
454454 case pk: ByteVector =>
455455 if ((i.callerPublicKey == pk))
456456 then true
457457 else pd
458458 case _: Unit =>
459459 if ((i.caller == this))
460460 then true
461461 else pd
462462 case _ =>
463463 throw("Match error")
464464 }
465465
466466
467467 @Callable(i)
468468 func constructor (fc) = {
469469 let c = mm(i)
470470 if ((c == c))
471471 then [StringEntry(fc(), fc)]
472472 else throw("Strict value is not equal to itself.")
473473 }
474474
475475
476476
477477 @Callable(i)
478478 func setManager (pendingManagerPublicKey) = {
479479 let c = mm(i)
480480 if ((c == c))
481481 then {
482482 let cm = fromBase58String(pendingManagerPublicKey)
483483 if ((cm == cm))
484484 then [StringEntry(pmpk(), pendingManagerPublicKey)]
485485 else throw("Strict value is not equal to itself.")
486486 }
487487 else throw("Strict value is not equal to itself.")
488488 }
489489
490490
491491
492492 @Callable(i)
493493 func confirmManager () = {
494494 let p = pm()
495495 let hpm = if (isDefined(p))
496496 then true
497497 else throw("No pending manager")
498498 if ((hpm == hpm))
499499 then {
500500 let cpm = if ((i.callerPublicKey == value(p)))
501501 then true
502502 else throw("You are not pending manager")
503503 if ((cpm == cpm))
504504 then [StringEntry(mpk(), toBase58String(value(p))), DeleteEntry(pmpk())]
505505 else throw("Strict value is not equal to itself.")
506506 }
507507 else throw("Strict value is not equal to itself.")
508508 }
509509
510510
511511
512512 @Callable(i)
513513 func put (slip,autoStake) = {
514514 let factCfg = gfc()
515515 let stakingCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactStakCntr]), "Wr st addr")
516516 let slipCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactSlippCntr]), "Wr sl addr")
517517 if ((0 > slip))
518518 then throw("Wrong slippage")
519519 else if ((size(i.payments) != 2))
520520 then throw("2 pmnts expd")
521521 else {
522522 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, "")
523523 let emitLpAmt = e._2
524524 let lpAssetId = e._7
525525 let state = e._9
526526 let amDiff = e._10
527527 let prDiff = e._11
528528 let amId = e._12
529529 let prId = e._13
530530 let r = invoke(fca, "emit", [emitLpAmt], nil)
531531 if ((r == r))
532532 then {
533533 let el = match r {
534534 case legacy: Address =>
535535 invoke(legacy, "emit", [emitLpAmt], nil)
536536 case _ =>
537537 unit
538538 }
539539 if ((el == el))
540540 then {
541541 let sa = if ((amDiff > 0))
542542 then invoke(slipCntr, "put", nil, [AttachedPayment(amId, amDiff)])
543543 else nil
544544 if ((sa == sa))
545545 then {
546546 let sp = if ((prDiff > 0))
547547 then invoke(slipCntr, "put", nil, [AttachedPayment(prId, prDiff)])
548548 else nil
549549 if ((sp == sp))
550550 then {
551551 let lpTrnsfr = if (autoStake)
552552 then {
553553 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
554554 if ((ss == ss))
555555 then nil
556556 else throw("Strict value is not equal to itself.")
557557 }
558558 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
559559 (state ++ lpTrnsfr)
560560 }
561561 else throw("Strict value is not equal to itself.")
562562 }
563563 else throw("Strict value is not equal to itself.")
564564 }
565565 else throw("Strict value is not equal to itself.")
566566 }
567567 else throw("Strict value is not equal to itself.")
568568 }
569569 }
570570
571571
572572
573573 @Callable(i)
574574 func putOneTkn (amAssetPart,prAssetPart,outLp,slippage,autoStake) = {
575575 let cfg = gfc()
576576 let stakingCntr = valueOrErrorMessage(addressFromString(cfg[idxFactStakCntr]), "Wr st addr")
577577 let slipCntr = valueOrErrorMessage(addressFromString(cfg[idxFactSlippCntr]), "Wr sl addr")
578578 let gwxCntr = valueOrErrorMessage(addressFromString(cfg[idxFactGwxRewCntr]), "Wr gwx addr")
579579 let poolCfg = gpc()
580580 let amId = poolCfg[idxAmAsId]
581581 let prId = poolCfg[idxPrAsId]
582582 let amDcm = parseIntValue(poolCfg[idxAmtAsDcm])
583583 let prDcm = parseIntValue(poolCfg[idxPriceAsDcm])
584584 let addon = valueOrElse(getString(this, ada()), "")
585585 let userAddress = if ((addon == toString(i.caller)))
586586 then i.originCaller
587587 else i.caller
588588 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
589589 let check = reentrantInvoke(addonContract, "ensureCanPutOneTkn", [toString(userAddress)], nil)
590590 if ((check == check))
591591 then {
592592 let check2 = throw("check after ensure")
593593 if ((check2 == check2))
594594 then if (if (if (if ((0 >= slippage))
595595 then true
596596 else (0 >= amAssetPart))
597597 then true
598598 else (0 >= prAssetPart))
599599 then true
600600 else (0 >= outLp))
601601 then throw("Wrong params")
602602 else if ((size(i.payments) != 1))
603603 then throw("1 pmnt expd")
604604 else {
605605 let pmt = value(i.payments[0])
606606 let pmtAssetId = toBase58String(value(pmt.assetId))
607607 let pmtAmt = pmt.amount
608608 if (if (if ((amAssetPart > pmtAmt))
609609 then true
610610 else (prAssetPart > pmtAmt))
611611 then true
612612 else (10000000 > pmtAmt))
613613 then throw("Wrong pmt amt")
614614 else {
615615 let amBalance = getAccBalance(amId)
616616 let prBalance = getAccBalance(prId)
617617 let $t02489125271 = if ((pmtAssetId == amId))
618618 then $Tuple6((amBalance - pmtAmt), prBalance, (pmtAmt - amAssetPart), prAssetPart, 0, 0)
619619 else if ((pmtAssetId == prId))
620620 then $Tuple6(amBalance, (prBalance - pmtAmt), 0, 0, (pmtAmt - prAssetPart), amAssetPart)
621621 else throw("wrong pmtAssetId")
622622 let amBalanceNow = $t02489125271._1
623623 let prBalanceNow = $t02489125271._2
624624 let virtSwapInAm = $t02489125271._3
625625 let virtSwapOutPr = $t02489125271._4
626626 let virtSwapInPr = $t02489125271._5
627627 let virtSwapOutAm = $t02489125271._6
628628 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
629629 let D1 = invoke(gwxCntr, "calcD", [toString(toBigInt(((amBalanceNow + virtSwapInAm) - virtSwapOutAm))), toString(toBigInt(((prBalanceNow + virtSwapInPr) - virtSwapOutPr))), A, Amult, Dconv], nil)
630630 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
631631 if ((D0vsD1 == D0vsD1))
632632 then {
633633 let estPut = cp(toString(i.caller), toBase58String(i.transactionId), AttachedPayment(fromBase58String(amId), amAssetPart), AttachedPayment(fromBase58String(prId), prAssetPart), slippage, true, true, pmtAmt, pmtAssetId)
634634 let estimLP = estPut._2
635635 let lpAssetId = estPut._7
636636 let state = estPut._9
637637 let amDiff = estPut._10
638638 let prDiff = estPut._11
639639 let lpCalcRes = vad(toBigInt(estimLP), toBigInt(outLp), toBigInt(slippage))
640640 let emitLpAmt = toInt(lpCalcRes._2)
641641 let e = invoke(fca, "emit", [emitLpAmt], nil)
642642 if ((e == e))
643643 then {
644644 let el = match e {
645645 case legacy: Address =>
646646 invoke(legacy, "emit", [emitLpAmt], nil)
647647 case _ =>
648648 unit
649649 }
650650 if ((el == el))
651651 then {
652652 let sa = if ((amDiff > 0))
653653 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(amId), amDiff)])
654654 else nil
655655 if ((sa == sa))
656656 then {
657657 let sp = if ((prDiff > 0))
658658 then invoke(slipCntr, "put", nil, [AttachedPayment(fromBase58String(prId), prDiff)])
659659 else nil
660660 if ((sp == sp))
661661 then {
662662 let lpTrnsfr = if (autoStake)
663663 then {
664664 let ss = invoke(stakingCntr, "stake", nil, [AttachedPayment(lpAssetId, emitLpAmt)])
665665 if ((ss == ss))
666666 then nil
667667 else throw("Strict value is not equal to itself.")
668668 }
669669 else [ScriptTransfer(i.caller, emitLpAmt, lpAssetId)]
670670 (state ++ lpTrnsfr)
671671 }
672672 else throw("Strict value is not equal to itself.")
673673 }
674674 else throw("Strict value is not equal to itself.")
675675 }
676676 else throw("Strict value is not equal to itself.")
677677 }
678678 else throw("Strict value is not equal to itself.")
679679 }
680680 else throw("Strict value is not equal to itself.")
681681 }
682682 }
683683 else throw("Strict value is not equal to itself.")
684684 }
685685 else throw("Strict value is not equal to itself.")
686686 }
687687
688688
689689
690690 @Callable(i)
691691 func putForFree (maxSlpg) = if ((0 > maxSlpg))
692692 then throw("Wrong slpg")
693693 else if ((size(i.payments) != 2))
694694 then throw("2 pmnts expd")
695695 else {
696696 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, "")
697697 estPut._9
698698 }
699699
700700
701701
702702 @Callable(i)
703703 func get () = {
704704 let r = cg(i)
705705 let outAmtAmt = r._1
706706 let outPrAmt = r._2
707707 let pmtAmt = r._3
708708 let pmtAssetId = r._4
709709 let state = r._5
710710 let b = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
711711 if ((b == b))
712712 then state
713713 else throw("Strict value is not equal to itself.")
714714 }
715715
716716
717717
718718 @Callable(i)
719719 func getOneTkn (exchResult,notUsed,outAmount,outAssetId,slippage) = if ((size(i.payments) != 1))
720720 then throw("1 pmnt expd")
721721 else {
722722 let cfg = gpc()
723723 let lpId = cfg[idxLPAsId]
724724 let amId = cfg[idxAmAsId]
725725 let prId = cfg[idxPrAsId]
726726 let amDcm = parseIntValue(cfg[idxAmtAsDcm])
727727 let prDcm = parseIntValue(cfg[idxPriceAsDcm])
728728 let sts = cfg[idxPoolSt]
729729 let factCfg = gfc()
730730 let gwxCntr = valueOrErrorMessage(addressFromString(factCfg[idxFactGwxRewCntr]), "Wr sl addr")
731731 let pmt = value(i.payments[0])
732732 let addon = valueOrElse(getString(this, ada()), "")
733733 let userAddress = if ((addon == toString(i.caller)))
734734 then i.originCaller
735735 else i.caller
736736 let txId58 = toBase58String(i.transactionId)
737737 let pmtAssetId = value(pmt.assetId)
738738 let pmtAmt = pmt.amount
739739 let addonContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ada()), "no addons")), "addon address in not valid")
740740 let check = reentrantInvoke(addonContract, "ensureCanGetOneTkn", [toString(userAddress)], nil)
741741 if ((check == check))
742742 then if ((1000000000 > pmtAmt))
743743 then throw("Min pmt 10 LP")
744744 else if (if (if ((0 > slippage))
745745 then true
746746 else (0 > exchResult))
747747 then true
748748 else (0 > outAmount))
749749 then throw("Wrong params")
750750 else if ((lpId != toBase58String(pmtAssetId)))
751751 then throw("Wrong LP")
752752 else {
753753 let r = ego(toBase58String(i.transactionId), toBase58String(pmtAssetId), pmtAmt, i.caller)
754754 let estimAmAmt = r._1
755755 let estimPrAmt = r._2
756756 let amBalance = getAccBalance(amId)
757757 let prBalance = getAccBalance(prId)
758758 let $t03030230759 = if ((outAssetId == amId))
759759 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), exchResult, estimPrAmt, 0, 0, (estimAmAmt + exchResult))
760760 else if ((outAssetId == prId))
761761 then $Tuple7((amBalance - estimAmAmt), (prBalance - estimPrAmt), 0, 0, exchResult, estimAmAmt, (estimPrAmt + exchResult))
762762 else throw("wrong outAssetId")
763763 let amBalanceNow = $t03030230759._1
764764 let prBalanceNow = $t03030230759._2
765765 let virtSwapInAm = $t03030230759._3
766766 let virtSwapOutPr = $t03030230759._4
767767 let virtSwapInPr = $t03030230759._5
768768 let virtSwapOutAm = $t03030230759._6
769769 let totalGet = $t03030230759._7
770770 if (if ((0 > virtSwapInAm))
771771 then true
772772 else (0 > virtSwapInPr))
773773 then throw("Wrong calc")
774774 else {
775775 let D0 = invoke(gwxCntr, "calcD", [toString(amBalanceNow), toString(prBalanceNow), A, Amult, Dconv], nil)
776776 let D1 = invoke(gwxCntr, "calcD", [toString(((amBalanceNow - virtSwapInAm) + virtSwapOutAm)), toString(((prBalanceNow + virtSwapOutPr) - virtSwapInPr)), A, Amult, Dconv], nil)
777777 let D0vsD1 = vd(parseBigIntValue(str(D1)), parseBigIntValue(str(D0)), slippage4D)
778778 if ((D0vsD1 == D0vsD1))
779779 then {
780780 let finalRes = vad(toBigInt(totalGet), toBigInt(outAmount), toBigInt(slippage))
781781 if ((finalRes == finalRes))
782782 then {
783783 let $t03146431568 = if ((outAssetId == amId))
784784 then $Tuple2(toInt(finalRes._2), 0)
785785 else $Tuple2(0, toInt(finalRes._2))
786786 let outAm = $t03146431568._1
787787 let outPr = $t03146431568._2
788788 let curPrX18 = cpbi(t1(prBalance, prDcm), t1(amBalance, amDcm))
789789 let curPr = f1(curPrX18, scale8)
790790 let state = [ScriptTransfer(userAddress, (outAm + outPr), if ((outAssetId == "WAVES"))
791791 then unit
792792 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)]
793793 if ((state == state))
794794 then {
795795 let burn = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
796796 if ((burn == burn))
797797 then state
798798 else throw("Strict value is not equal to itself.")
799799 }
800800 else throw("Strict value is not equal to itself.")
801801 }
802802 else throw("Strict value is not equal to itself.")
803803 }
804804 else throw("Strict value is not equal to itself.")
805805 }
806806 }
807807 else throw("Strict value is not equal to itself.")
808808 }
809809
810810
811811
812812 @Callable(i)
813813 func getNoLess (noLessThenAmtAsset,noLessThenPriceAsset) = {
814814 let r = cg(i)
815815 let outAmAmt = r._1
816816 let outPrAmt = r._2
817817 let pmtAmt = r._3
818818 let pmtAssetId = r._4
819819 let state = r._5
820820 if ((noLessThenAmtAsset > outAmAmt))
821821 then throw(((("Failed: " + toString(outAmAmt)) + " < ") + toString(noLessThenAmtAsset)))
822822 else if ((noLessThenPriceAsset > outPrAmt))
823823 then throw(((("Failed: " + toString(outPrAmt)) + " < ") + toString(noLessThenPriceAsset)))
824824 else {
825825 let burnLPAssetOnFactory = invoke(fca, "burn", [pmtAmt], [AttachedPayment(pmtAssetId, pmtAmt)])
826826 if ((burnLPAssetOnFactory == burnLPAssetOnFactory))
827827 then state
828828 else throw("Strict value is not equal to itself.")
829829 }
830830 }
831831
832832
833833
834834 @Callable(i)
835835 func unstakeAndGet (amount) = {
836836 let checkPayments = if ((size(i.payments) != 0))
837837 then throw("No pmnts expd")
838838 else true
839839 if ((checkPayments == checkPayments))
840840 then {
841841 let cfg = gpc()
842842 let factoryCfg = gfc()
843843 let lpAssetId = fromBase58String(cfg[idxLPAsId])
844844 let staking = valueOrErrorMessage(addressFromString(factoryCfg[idxFactStakCntr]), "Wr st addr")
845845 let unstakeInv = invoke(staking, "unstake", [toBase58String(lpAssetId), amount], nil)
846846 if ((unstakeInv == unstakeInv))
847847 then {
848848 let r = ego(toBase58String(i.transactionId), toBase58String(lpAssetId), amount, i.caller)
849849 let sts = parseIntValue(r._9)
850850 let state = r._10
851851 let v = if (if (igs())
852852 then true
853853 else (sts == PoolShutdown))
854854 then throw(("Blocked: " + toString(sts)))
855855 else true
856856 if ((v == v))
857857 then {
858858 let burnA = invoke(fca, "burn", [amount], [AttachedPayment(lpAssetId, amount)])
859859 if ((burnA == burnA))
860860 then state
861861 else throw("Strict value is not equal to itself.")
862862 }
863863 else throw("Strict value is not equal to itself.")
864864 }
865865 else throw("Strict value is not equal to itself.")
866866 }
867867 else throw("Strict value is not equal to itself.")
868868 }
869869
870870
871871
872872 @Callable(i)
873873 func activate (amtAsStr,prAsStr) = if ((toString(i.caller) != toString(fca)))
874874 then throw("denied")
875875 else $Tuple2([StringEntry(aa(), amtAsStr), StringEntry(pa(), prAsStr)], "success")
876876
877877
878878
879879 @Callable(i)
880880 func setS (k,v) = if ((toString(i.caller) != strf(this, ada())))
881881 then pd
882882 else [StringEntry(k, v)]
883883
884884
885885
886886 @Callable(i)
887887 func setI (k,v) = if ((toString(i.caller) != strf(this, ada())))
888888 then pd
889889 else [IntegerEntry(k, v)]
890890
891891
892892
893893 @Callable(i)
894894 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, gpc())
895895
896896
897897
898898 @Callable(i)
899899 func getAccBalanceWrapperREADONLY (assetId) = $Tuple2(nil, getAccBalance(assetId))
900900
901901
902902
903903 @Callable(i)
904904 func calcPricesWrapperREADONLY (amAmt,prAmt,lpAmt) = {
905905 let pr = calcPrices(amAmt, prAmt, lpAmt)
906906 $Tuple2(nil, [toString(pr[0]), toString(pr[1]), toString(pr[2])])
907907 }
908908
909909
910910
911911 @Callable(i)
912912 func fromX18WrapperREADONLY (val,resScaleMult) = $Tuple2(nil, f1(parseBigIntValue(val), resScaleMult))
913913
914914
915915
916916 @Callable(i)
917917 func toX18WrapperREADONLY (origVal,origScaleMult) = $Tuple2(nil, toString(t1(origVal, origScaleMult)))
918918
919919
920920
921921 @Callable(i)
922922 func calcPriceBigIntWrapperREADONLY (prAmtX18,amAmtX18) = $Tuple2(nil, toString(cpbi(parseBigIntValue(prAmtX18), parseBigIntValue(amAmtX18))))
923923
924924
925925
926926 @Callable(i)
927927 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, ""))
928928
929929
930930
931931 @Callable(i)
932932 func estimateGetOperationWrapperREADONLY (txId58,pmtAsId,pmtLpAmt,usrAddr) = {
933933 let r = ego(txId58, pmtAsId, pmtLpAmt, addressFromStringValue(usrAddr))
934934 $Tuple2(nil, $Tuple10(r._1, r._2, r._3, r._4, r._5, r._6, r._7, toString(r._8), r._9, r._10))
935935 }
936936
937937
938938 @Verifier(tx)
939939 func verify () = match tx {
940940 case order: Order =>
941941 let mtchPub = mp()
942942 let orV = moa(order)
943943 let sndrV = sigVerify(order.bodyBytes, order.proofs[0], order.senderPublicKey)
944944 let mtchV = sigVerify(order.bodyBytes, order.proofs[1], mtchPub)
945945 if (if (if (orV)
946946 then sndrV
947947 else false)
948948 then mtchV
949949 else false)
950950 then true
951951 else toe(orV, sndrV, mtchV)
952952 case _ =>
953953 let targetPublicKey = match m() {
954954 case pk: ByteVector =>
955955 pk
956956 case _: Unit =>
957957 tx.senderPublicKey
958958 case _ =>
959959 throw("Match error")
960960 }
961961 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
962962 }
963963

github/deemru/w8io/c3f4982 
75.40 ms