tx · 9DRZPFsZ7GfcZvAzBQoLRTk3Q3YHDf6Zs4dSiYu6o5dw 3P4AdC9J6MzTEi2LL9xgQN8EimMnbk4d6Nt: -0.00700000 Waves 2024.03.26 11:36 [4100698] smart account 3P4AdC9J6MzTEi2LL9xgQN8EimMnbk4d6Nt > SELF 0.00000000 Waves
{ "type": 13, "id": "9DRZPFsZ7GfcZvAzBQoLRTk3Q3YHDf6Zs4dSiYu6o5dw", "fee": 700000, "feeAssetId": null, "timestamp": 1711442182840, "version": 2, "chainId": 87, "sender": "3P4AdC9J6MzTEi2LL9xgQN8EimMnbk4d6Nt", "senderPublicKey": "33BMe2b9KpjJyCQXAKa3DKHqSBjB7q2mEJoiP17cRLAN", "proofs": [ "2ruBAXmXUKVmJQ5SS9LmstzHHNWNMyXr8muf27uPJBxCUeEeQrP1xWJXkBBJjY7LxvJieEHYgcCwUh6w9VDT2qxE" ], "script": "base64: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ss0CCHdpdGhkcmF3BQNuaWwFA25pbAMJAAACBQRpbnY0BQRpbnY0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIc2VsZWN0b3IAAwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkBAiE9AggFAWkGY2FsbGVyBQpzdGFibGVzd2FwBwkAAgECCW5vIGFjY2VzcwQFaW52MDADCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAAACQD8BwQFCHByb2plY3RCAg9idXJuWFROYW5kQ2xhaW0FA25pbAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5SW52b2tlTmV4dAABBQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAABCQD8BwQFCHByb2plY3RCAg5TVVJGYW5kVlZYVE5MUAUDbmlsBQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rZXlJbnZva2VOZXh0AwkAZwIFEWJ1cm54dG53YXZlc3ByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQhwcm9qZWN0QgIPQVRIIGluIHdhdmVsZXRzAAoAFAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQACgkA/AcEBQhwcm9qZWN0QgILYnVybkJVUk5YVE4FA25pbAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQACgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5SW52b2tlTmV4dAALBQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAALCQD8BwQFCHByb2plY3RCAgVncm93MQUDbmlsBQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAALCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rZXlJbnZva2VOZXh0AAwFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0AAwJAPwHBAUIcHJvamVjdEICBWdyb3cyBQNuaWwFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0AAwJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleUludm9rZU5leHQADQUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQADQkA/AcEBQhwcm9qZWN0QgIFZ3JvdzMFA25pbAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQADQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5SW52b2tlTmV4dAAOBQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAAOCQD8BwQFCHByb2plY3RCAgVncm93NAUDbmlsBQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAAOCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rZXlJbnZva2VOZXh0AA8FA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0AA8JAPwHBAUIcHJvamVjdEICBWdyb3c1BQNuaWwFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0AA8JAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleUludm9rZU5leHQAEAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAEAkA/AcEBQhwcm9qZWN0QgIFZ3JvdzYFA25pbAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAEAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5SW52b2tlTmV4dAAeBQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAAUCQD8BwQFCHByb2plY3RCAgRwdW1wBQNuaWwFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0ABQJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleUludm9rZU5leHQAHgUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAHgkA/AcEBQhwcm9qZWN0QgIFUFpiYmIFA25pbAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAHgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5SW52b2tlTmV4dAAfBQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAAfCQD8BwQFCHByb2plY3RCAghjbGFpbUJCQgUDbmlsBQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAAfCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rZXlJbnZva2VOZXh0ACAFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0ACAJAPwHBAUIcHJvamVjdEICCGJ1cm5TVVJGBQNuaWwFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0ACAJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleUludm9rZU5leHQAIQUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAIQkA/AcEBQhwcm9qZWN0QgILcHV6emxlUFpiYmIFA25pbAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAIQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5SW52b2tlTmV4dAAoBQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAAiCQD8BwQFCHByb2plY3RCAgpzdGFrZVBaYmJiBQNuaWwFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0ACIJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleUludm9rZU5leHQAIwUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAKAkA/AcEBQhwcm9qZWN0QgIGZEVudHJ5BQNuaWwFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0ACgJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleUludm9rZU5leHQAMgUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAMgkA/AcEBQdyZXdhcmRzAgxjbGFpbVJld2FyZHMFA25pbAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAMgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5SW52b2tlTmV4dAAzBQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAAzCQD8BwQFB3Jld2FyZHMCDnNoaWxsZXJSZXdhcmRzBQNuaWwFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0ADMJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleUludm9rZU5leHQANAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQANAkA/AcEBQdyZXdhcmRzAgxhZG1pblJld2FyZHMFA25pbAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQANAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5SW52b2tlTmV4dAA8BQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAA8CQD8BwQFBmJvdW50eQISdXBkYXRlQmFsYW5jZUVudHJ5BQNuaWwFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0ADwJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleUludm9rZU5leHQAPQUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAPQkA/AcEBQZib3VudHkCBWNsYWltBQNuaWwFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0AD0JAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleUludm9rZU5leHQAPgUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAPgkA/AcEBQZib3VudHkCBHN3YXAFA25pbAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAPgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5SW52b2tlTmV4dAA/BQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dAA/CQD8BwQFBmJvdW50eQIPdG90YWxCYWxhbmNlQWxsBQNuaWwFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0AD8JAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleUludm9rZU5leHQAQAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAQAkA/AcEBQZib3VudHkCCnBheVJld2FyZHMFA25pbAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQAQAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5SW52b2tlTmV4dABGBQNuaWwDCQAAAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa2V5SW52b2tlTmV4dABGCQD8BwQFCFVTRENkYXBwAgljbGFpbUFsbCAJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAACCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rZXlJbnZva2VOZXh0AEYJAPwHBAUIVVNEVGRhcHACCWNsYWltQWxsIAkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtleUludm9rZU5leHQARgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5SW52b2tlTmV4dAAABQNuaWwFBHVuaXQDCQAAAgUFaW52MDAFBWludjAwBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELY2hhbmdlRW50cnkBCkludm9rZU5leHQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rZXlJbnZva2VOZXh0BQpJbnZva2VOZXh0BQNuaWwADsrOpA==", "height": 4100698, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: svqG5bkjW2fiqCx7VqUZftKrb3SLcs2GmCBrCgi2fQJ Next: 4ZHp9CBbVZH7xRhC8AwCGsRzfgLQYiZYT3kwSf8o8ffK Diff:
Old | New | Differences | |
---|---|---|---|
11 | 11 | ||
12 | 12 | let bounty = Address(base58'3PJXxPS9FxZsSLyP9gA47dSLwMinoFyfYFC') | |
13 | 13 | ||
14 | + | let stableswap = Address(base58'3PCxF4JryswYYp9mpUtE725wjTgvpBmp3M9') | |
15 | + | ||
16 | + | let USDTdapp = Address(base58'3PQtT2o7g8HmcZLGodx4L7YDe7ngb26wjYk') | |
17 | + | ||
18 | + | let USDCdapp = Address(base58'3PLrr8LpfYjUadnEQ1ov61uMWHdMopUCNAm') | |
19 | + | ||
14 | 20 | let vvxtnlp = base58'8KEtor9aSsSj38MknyAE7k1uRThHY9prAXgiE4D7WpyL' | |
15 | 21 | ||
16 | 22 | let swaves = base58'YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7' | |
17 | 23 | ||
18 | 24 | let burnxtnId = base58'3SjxA2YLdfF9fTRbzLm9xFn27C6MW34W1YsdJ6Axefns' | |
19 | - | ||
20 | - | let USDTdapp = Address(base58'3PQtT2o7g8HmcZLGodx4L7YDe7ngb26wjYk') | |
21 | - | ||
22 | - | let USDCdapp = Address(base58'3PLrr8LpfYjUadnEQ1ov61uMWHdMopUCNAm') | |
23 | - | ||
24 | - | let zeroBigInt = toBigInt(0) | |
25 | - | ||
26 | - | let big0 = toBigInt(0) | |
27 | - | ||
28 | - | let big1 = toBigInt(1) | |
29 | - | ||
30 | - | let big2 = toBigInt(2) | |
31 | - | ||
32 | - | let big3 = toBigInt(3) | |
33 | - | ||
34 | - | let big4 = toBigInt(4) | |
35 | - | ||
36 | - | let wavesString = "WAVES" | |
37 | - | ||
38 | - | let Amult = "100" | |
39 | - | ||
40 | - | func assetIdToString (input) = if ((input == unit)) | |
41 | - | then wavesString | |
42 | - | else toBase58String(value(input)) | |
43 | - | ||
44 | - | ||
45 | - | func absBigInt (val) = if ((zeroBigInt > val)) | |
46 | - | then -(val) | |
47 | - | else val | |
48 | - | ||
49 | - | ||
50 | - | let amId = "3ayH3PhWMkhFsySsUVcC8BvFf1QyxGB5BZuTPyVtmP4v" | |
51 | - | ||
52 | - | let prId = "G5WWWzzVsWRyzGf32xojbnfp7gXbWrgqJT8RcVWEfLmC" | |
53 | - | ||
54 | - | let A = "2000" | |
55 | - | ||
56 | - | let fee = 1 | |
57 | - | ||
58 | - | let feeScale = 10000 | |
59 | - | ||
60 | - | func getAccBalance (assetId) = if ((assetId == amId)) | |
61 | - | then (assetBalance(this, fromBase58String(assetId)) + getIntegerValue(USDCdapp, ("USER_LP__" + toString(this)))) | |
62 | - | else (assetBalance(this, fromBase58String(assetId)) + getIntegerValue(USDTdapp, ("USER_LP__" + toString(this)))) | |
63 | - | ||
64 | - | ||
65 | - | func parseAssetId (input) = if ((input == wavesString)) | |
66 | - | then unit | |
67 | - | else fromBase58String(input) | |
68 | - | ||
69 | - | ||
70 | - | func getD (xp) = { | |
71 | - | let xp0 = xp[0] | |
72 | - | let xp1 = xp[1] | |
73 | - | let s = (xp0 + xp1) | |
74 | - | if ((s == big0)) | |
75 | - | then big0 | |
76 | - | else { | |
77 | - | let a = parseIntValue(A) | |
78 | - | let ann = (a * 2) | |
79 | - | let p = fraction(xp0, xp1, big1) | |
80 | - | let xp0_xp1_n_n = fraction(p, big4, big1) | |
81 | - | let ann_s = fraction(toBigInt(ann), s, big1) | |
82 | - | let ann_1 = toBigInt((ann - 1)) | |
83 | - | func calcDNext (d) = { | |
84 | - | let dd = fraction(d, d, big1) | |
85 | - | let ddd = fraction(dd, d, big1) | |
86 | - | let dp = fraction(ddd, big1, xp0_xp1_n_n) | |
87 | - | fraction((ann_s + fraction(dp, big2, big1)), d, (fraction(ann_1, d, big1) + fraction(big3, dp, big1))) | |
88 | - | } | |
89 | - | ||
90 | - | func calc (acc,i) = if (acc._2) | |
91 | - | then acc | |
92 | - | else { | |
93 | - | let d = acc._1 | |
94 | - | let dNext = calcDNext(d) | |
95 | - | let dDiffRaw = (dNext - value(d)) | |
96 | - | let dDiff = if ((big0 > dDiffRaw)) | |
97 | - | then -(dDiffRaw) | |
98 | - | else dDiffRaw | |
99 | - | if ((big1 >= dDiff)) | |
100 | - | then $Tuple2(dNext, true) | |
101 | - | else $Tuple2(dNext, false) | |
102 | - | } | |
103 | - | ||
104 | - | let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] | |
105 | - | let $t034793527 = { | |
106 | - | let $l = arr | |
107 | - | let $s = size($l) | |
108 | - | let $acc0 = $Tuple2(s, false) | |
109 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
110 | - | then $a | |
111 | - | else calc($a, $l[$i]) | |
112 | - | ||
113 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
114 | - | then $a | |
115 | - | else throw("List size exceeds 17") | |
116 | - | ||
117 | - | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17) | |
118 | - | } | |
119 | - | let d = $t034793527._1 | |
120 | - | let found = $t034793527._2 | |
121 | - | if (found) | |
122 | - | then d | |
123 | - | else throw(("D calculation error, D = " + toString(d))) | |
124 | - | } | |
125 | - | } | |
126 | - | ||
127 | - | ||
128 | - | func getY (isReverse,D,poolAmountInBalance) = { | |
129 | - | let n = big2 | |
130 | - | let aPrecision = parseBigIntValue(Amult) | |
131 | - | let a = (parseBigIntValue(A) * aPrecision) | |
132 | - | let xp = if ((isReverse == false)) | |
133 | - | then [(toBigInt(getAccBalance(amId)) + poolAmountInBalance), toBigInt(getAccBalance(prId))] | |
134 | - | else [(toBigInt(getAccBalance(prId)) + poolAmountInBalance), toBigInt(getAccBalance(amId))] | |
135 | - | let x = xp[0] | |
136 | - | let s = x | |
137 | - | let ann = (a * n) | |
138 | - | let c = (((((D * D) / (x * n)) * D) * aPrecision) / (ann * n)) | |
139 | - | let b = ((s + ((D * aPrecision) / ann)) - D) | |
140 | - | func calc (acc,cur) = { | |
141 | - | let $t051255145 = acc | |
142 | - | let y = $t051255145._1 | |
143 | - | let found = $t051255145._2 | |
144 | - | if ((found != unit)) | |
145 | - | then acc | |
146 | - | else { | |
147 | - | let yNext = (((y * y) + c) / ((big2 * y) + b)) | |
148 | - | let yDiff = absBigInt((yNext - value(y))) | |
149 | - | if ((big1 >= yDiff)) | |
150 | - | then $Tuple2(yNext, cur) | |
151 | - | else $Tuple2(yNext, unit) | |
152 | - | } | |
153 | - | } | |
154 | - | ||
155 | - | let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] | |
156 | - | let $t054765523 = { | |
157 | - | let $l = arr | |
158 | - | let $s = size($l) | |
159 | - | let $acc0 = $Tuple2(D, unit) | |
160 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
161 | - | then $a | |
162 | - | else calc($a, $l[$i]) | |
163 | - | ||
164 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
165 | - | then $a | |
166 | - | else throw("List size exceeds 15") | |
167 | - | ||
168 | - | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
169 | - | } | |
170 | - | let y = $t054765523._1 | |
171 | - | let found = $t054765523._2 | |
172 | - | if ((found != unit)) | |
173 | - | then y | |
174 | - | else throw(("Y calculation error, Y = " + toString(y))) | |
175 | - | } | |
176 | - | ||
177 | 25 | ||
178 | 26 | let SWAVES_stake = Address(base58'3PDPzZVLhN1EuzGy4xAxjjTVkawKDLEaHiV') | |
179 | 27 | ||
213 | 61 | ||
214 | 62 | let burnxtnwavesprice = fraction(d8, wavesInWX, burnxtnInWX) | |
215 | 63 | ||
216 | - | func isShutdown () = match getBoolean(this, "is_shutdown") { | |
217 | - | case x: Boolean => | |
218 | - | x | |
219 | - | case _ => | |
220 | - | false | |
221 | - | } | |
222 | - | ||
223 | - | ||
224 | - | @Callable(i) | |
225 | - | func shutdown (shutdown) = if ((i.caller == this)) | |
226 | - | then [BooleanEntry("is_shutdown", shutdown)] | |
227 | - | else throw("admin only") | |
228 | - | ||
229 | - | ||
230 | - | ||
231 | - | @Callable(i) | |
232 | - | func swap (amountOutMin,AssetOut) = if (if ((isShutdown() == true)) | |
233 | - | then (i.caller != Address(base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk')) | |
234 | - | else false) | |
235 | - | then throw("contract is shutdown") | |
236 | - | else { | |
237 | - | let pmt = value(i.payments[0]) | |
238 | - | let amountIn = value(i.payments[0].amount) | |
239 | - | let feePoolAmount = fraction(amountIn, fee, feeScale) | |
240 | - | let cleanAmountIn = (amountIn - feePoolAmount) | |
241 | - | let assetIn = assetIdToString(pmt.assetId) | |
242 | - | let isReverse = if ((assetIn == amId)) | |
243 | - | then false | |
244 | - | else true | |
245 | - | let $t075647944 = if ((isReverse == false)) | |
246 | - | then { | |
247 | - | let assetOut = prId | |
248 | - | let poolAmountInBalance = (toBigInt(getAccBalance(amId)) + toBigInt(cleanAmountIn)) | |
249 | - | $Tuple2(assetOut, poolAmountInBalance) | |
250 | - | } | |
251 | - | else { | |
252 | - | let assetOut = amId | |
253 | - | let poolAmountInBalance = (toBigInt(getAccBalance(prId)) + toBigInt(cleanAmountIn)) | |
254 | - | $Tuple2(assetOut, poolAmountInBalance) | |
255 | - | } | |
256 | - | let assetOut = $t075647944._1 | |
257 | - | let poolAmountInBalance = $t075647944._2 | |
258 | - | let xp = if ((isReverse == false)) | |
259 | - | then [(toBigInt(getAccBalance(amId)) - toBigInt(value(i.payments[0]).amount)), toBigInt(getAccBalance(prId))] | |
260 | - | else [toBigInt(getAccBalance(amId)), (toBigInt(getAccBalance(prId)) - toBigInt(value(i.payments[0]).amount))] | |
261 | - | let D = getD(xp) | |
262 | - | let y = getY(isReverse, D, toBigInt(0)) | |
263 | - | let dy = ((toBigInt(getAccBalance(AssetOut)) - y) - toBigInt(1)) | |
264 | - | let totalGetRaw = max([0, toInt(dy)]) | |
265 | - | let checkMin = if ((totalGetRaw >= amountOutMin)) | |
266 | - | then true | |
267 | - | else throw("Exchange result is fewer coins than expected") | |
268 | - | if ((checkMin == checkMin)) | |
269 | - | then { | |
270 | - | let newXp = if ((isReverse == false)) | |
271 | - | then [(toBigInt(getAccBalance(amId)) + toBigInt(feePoolAmount)), (toBigInt(getAccBalance(prId)) - dy)] | |
272 | - | else [(toBigInt(getAccBalance(amId)) - dy), (toBigInt(getAccBalance(prId)) + toBigInt(feePoolAmount))] | |
273 | - | let newD = getD(newXp) | |
274 | - | let checkD = if ((newD >= D)) | |
275 | - | then true | |
276 | - | else throw("new D is fewer error") | |
277 | - | if ((checkD == checkD)) | |
278 | - | then { | |
279 | - | let unstake = if ((AssetOut == amId)) | |
280 | - | then invoke(USDCdapp, "unstake", [totalGetRaw], nil) | |
281 | - | else invoke(USDTdapp, "unstake", [totalGetRaw], nil) | |
282 | - | if ((unstake == unstake)) | |
283 | - | then { | |
284 | - | let stake = if ((AssetOut == amId)) | |
285 | - | then invoke(USDTdapp, "stake", nil, [AttachedPayment(fromBase58String(prId), assetBalance(this, fromBase58String(prId)))]) | |
286 | - | else invoke(USDCdapp, "stake", nil, [AttachedPayment(fromBase58String(amId), assetBalance(this, fromBase58String(amId)))]) | |
287 | - | if ((stake == stake)) | |
288 | - | then { | |
289 | - | let selector = invoke(this, "selector", nil, nil) | |
290 | - | if ((selector == selector)) | |
291 | - | then [ScriptTransfer(i.caller, totalGetRaw, parseAssetId(assetOut))] | |
292 | - | else throw("Strict value is not equal to itself.") | |
293 | - | } | |
294 | - | else throw("Strict value is not equal to itself.") | |
295 | - | } | |
296 | - | else throw("Strict value is not equal to itself.") | |
297 | - | } | |
298 | - | else throw("Strict value is not equal to itself.") | |
299 | - | } | |
300 | - | else throw("Strict value is not equal to itself.") | |
301 | - | } | |
302 | - | ||
303 | - | ||
304 | - | ||
305 | 64 | @Callable(i) | |
306 | 65 | func invoker () = { | |
307 | 66 | let inv1 = invoke(Address(base58'3PAucbbumdUXmhzcR421zGiayphEdo2tRoz'), "withdraw", nil, nil) | |
330 | 89 | ||
331 | 90 | ||
332 | 91 | @Callable(i) | |
333 | - | func selector () = if ((i.caller != this)) | |
92 | + | func selector () = if (if ((i.caller != this)) | |
93 | + | then (i.caller != stableswap) | |
94 | + | else false) | |
334 | 95 | then throw("no access") | |
335 | 96 | else { | |
336 | 97 | let inv00 = if ((getIntegerValue(this, keyInvokeNext) == 0)) | |
340 | 101 | else if ((getIntegerValue(this, keyInvokeNext) == 1)) | |
341 | 102 | then invoke(projectB, "SURFandVVXTNLP", nil, nil) | |
342 | 103 | else if ((getIntegerValue(this, keyInvokeNext) == 1)) | |
343 | - | then [IntegerEntry(keyInvokeNext, if ((burnxtnwavesprice >= getIntegerValue( | |
104 | + | then [IntegerEntry(keyInvokeNext, if ((burnxtnwavesprice >= getIntegerValue(projectB, "ATH in wavelets"))) | |
344 | 105 | then 10 | |
345 | 106 | else 20)] | |
346 | 107 | else if ((getIntegerValue(this, keyInvokeNext) == 10)) | |
386 | 147 | else if ((getIntegerValue(this, keyInvokeNext) == 32)) | |
387 | 148 | then invoke(projectB, "burnSURF", nil, nil) | |
388 | 149 | else if ((getIntegerValue(this, keyInvokeNext) == 32)) | |
389 | - | then [IntegerEntry(keyInvokeNext, | |
150 | + | then [IntegerEntry(keyInvokeNext, 33)] | |
390 | 151 | else if ((getIntegerValue(this, keyInvokeNext) == 33)) | |
391 | 152 | then invoke(projectB, "puzzlePZbbb", nil, nil) | |
392 | 153 | else if ((getIntegerValue(this, keyInvokeNext) == 33)) | |
393 | - | then [IntegerEntry(keyInvokeNext, | |
154 | + | then [IntegerEntry(keyInvokeNext, 40)] | |
394 | 155 | else if ((getIntegerValue(this, keyInvokeNext) == 34)) | |
395 | 156 | then invoke(projectB, "stakePZbbb", nil, nil) | |
396 | 157 | else if ((getIntegerValue(this, keyInvokeNext) == 34)) | |
431 | 192 | then invoke(bounty, "payRewards", nil, nil) | |
432 | 193 | else if ((getIntegerValue(this, keyInvokeNext) == 64)) | |
433 | 194 | then [IntegerEntry(keyInvokeNext, 70)] | |
434 | - | else unit | |
195 | + | else if ((getIntegerValue(this, keyInvokeNext) == 70)) | |
196 | + | then invoke(USDCdapp, "claimAll ", [toString(this)], nil) | |
197 | + | else if ((getIntegerValue(this, keyInvokeNext) == 70)) | |
198 | + | then invoke(USDTdapp, "claimAll ", [toString(this)], nil) | |
199 | + | else if ((getIntegerValue(this, keyInvokeNext) == 70)) | |
200 | + | then [IntegerEntry(keyInvokeNext, 0)] | |
201 | + | else unit | |
435 | 202 | if ((inv00 == inv00)) | |
436 | 203 | then nil | |
437 | 204 | else throw("Strict value is not equal to itself.") | |
438 | 205 | } | |
439 | - | ||
440 | - | ||
441 | - | ||
442 | - | @Callable(i) | |
443 | - | func balance_info () = [IntegerEntry("USDC", getAccBalance(amId)), IntegerEntry("USDT", getAccBalance(prId)), IntegerEntry("USD total", (getAccBalance(amId) + getAccBalance(prId)))] | |
444 | 206 | ||
445 | 207 | ||
446 | 208 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let keyInvokeNext = "invoke next" | |
5 | 5 | ||
6 | 6 | let d8 = 100000000 | |
7 | 7 | ||
8 | 8 | let projectB = Address(base58'3PCBL2vbjAVFbiCwmGsPmT6QdATutQnM8ov') | |
9 | 9 | ||
10 | 10 | let rewards = Address(base58'3P6H24XKLyRX8RKwyA5ARsChE6WhjDcVBiZ') | |
11 | 11 | ||
12 | 12 | let bounty = Address(base58'3PJXxPS9FxZsSLyP9gA47dSLwMinoFyfYFC') | |
13 | 13 | ||
14 | + | let stableswap = Address(base58'3PCxF4JryswYYp9mpUtE725wjTgvpBmp3M9') | |
15 | + | ||
16 | + | let USDTdapp = Address(base58'3PQtT2o7g8HmcZLGodx4L7YDe7ngb26wjYk') | |
17 | + | ||
18 | + | let USDCdapp = Address(base58'3PLrr8LpfYjUadnEQ1ov61uMWHdMopUCNAm') | |
19 | + | ||
14 | 20 | let vvxtnlp = base58'8KEtor9aSsSj38MknyAE7k1uRThHY9prAXgiE4D7WpyL' | |
15 | 21 | ||
16 | 22 | let swaves = base58'YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7' | |
17 | 23 | ||
18 | 24 | let burnxtnId = base58'3SjxA2YLdfF9fTRbzLm9xFn27C6MW34W1YsdJ6Axefns' | |
19 | - | ||
20 | - | let USDTdapp = Address(base58'3PQtT2o7g8HmcZLGodx4L7YDe7ngb26wjYk') | |
21 | - | ||
22 | - | let USDCdapp = Address(base58'3PLrr8LpfYjUadnEQ1ov61uMWHdMopUCNAm') | |
23 | - | ||
24 | - | let zeroBigInt = toBigInt(0) | |
25 | - | ||
26 | - | let big0 = toBigInt(0) | |
27 | - | ||
28 | - | let big1 = toBigInt(1) | |
29 | - | ||
30 | - | let big2 = toBigInt(2) | |
31 | - | ||
32 | - | let big3 = toBigInt(3) | |
33 | - | ||
34 | - | let big4 = toBigInt(4) | |
35 | - | ||
36 | - | let wavesString = "WAVES" | |
37 | - | ||
38 | - | let Amult = "100" | |
39 | - | ||
40 | - | func assetIdToString (input) = if ((input == unit)) | |
41 | - | then wavesString | |
42 | - | else toBase58String(value(input)) | |
43 | - | ||
44 | - | ||
45 | - | func absBigInt (val) = if ((zeroBigInt > val)) | |
46 | - | then -(val) | |
47 | - | else val | |
48 | - | ||
49 | - | ||
50 | - | let amId = "3ayH3PhWMkhFsySsUVcC8BvFf1QyxGB5BZuTPyVtmP4v" | |
51 | - | ||
52 | - | let prId = "G5WWWzzVsWRyzGf32xojbnfp7gXbWrgqJT8RcVWEfLmC" | |
53 | - | ||
54 | - | let A = "2000" | |
55 | - | ||
56 | - | let fee = 1 | |
57 | - | ||
58 | - | let feeScale = 10000 | |
59 | - | ||
60 | - | func getAccBalance (assetId) = if ((assetId == amId)) | |
61 | - | then (assetBalance(this, fromBase58String(assetId)) + getIntegerValue(USDCdapp, ("USER_LP__" + toString(this)))) | |
62 | - | else (assetBalance(this, fromBase58String(assetId)) + getIntegerValue(USDTdapp, ("USER_LP__" + toString(this)))) | |
63 | - | ||
64 | - | ||
65 | - | func parseAssetId (input) = if ((input == wavesString)) | |
66 | - | then unit | |
67 | - | else fromBase58String(input) | |
68 | - | ||
69 | - | ||
70 | - | func getD (xp) = { | |
71 | - | let xp0 = xp[0] | |
72 | - | let xp1 = xp[1] | |
73 | - | let s = (xp0 + xp1) | |
74 | - | if ((s == big0)) | |
75 | - | then big0 | |
76 | - | else { | |
77 | - | let a = parseIntValue(A) | |
78 | - | let ann = (a * 2) | |
79 | - | let p = fraction(xp0, xp1, big1) | |
80 | - | let xp0_xp1_n_n = fraction(p, big4, big1) | |
81 | - | let ann_s = fraction(toBigInt(ann), s, big1) | |
82 | - | let ann_1 = toBigInt((ann - 1)) | |
83 | - | func calcDNext (d) = { | |
84 | - | let dd = fraction(d, d, big1) | |
85 | - | let ddd = fraction(dd, d, big1) | |
86 | - | let dp = fraction(ddd, big1, xp0_xp1_n_n) | |
87 | - | fraction((ann_s + fraction(dp, big2, big1)), d, (fraction(ann_1, d, big1) + fraction(big3, dp, big1))) | |
88 | - | } | |
89 | - | ||
90 | - | func calc (acc,i) = if (acc._2) | |
91 | - | then acc | |
92 | - | else { | |
93 | - | let d = acc._1 | |
94 | - | let dNext = calcDNext(d) | |
95 | - | let dDiffRaw = (dNext - value(d)) | |
96 | - | let dDiff = if ((big0 > dDiffRaw)) | |
97 | - | then -(dDiffRaw) | |
98 | - | else dDiffRaw | |
99 | - | if ((big1 >= dDiff)) | |
100 | - | then $Tuple2(dNext, true) | |
101 | - | else $Tuple2(dNext, false) | |
102 | - | } | |
103 | - | ||
104 | - | let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] | |
105 | - | let $t034793527 = { | |
106 | - | let $l = arr | |
107 | - | let $s = size($l) | |
108 | - | let $acc0 = $Tuple2(s, false) | |
109 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
110 | - | then $a | |
111 | - | else calc($a, $l[$i]) | |
112 | - | ||
113 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
114 | - | then $a | |
115 | - | else throw("List size exceeds 17") | |
116 | - | ||
117 | - | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17) | |
118 | - | } | |
119 | - | let d = $t034793527._1 | |
120 | - | let found = $t034793527._2 | |
121 | - | if (found) | |
122 | - | then d | |
123 | - | else throw(("D calculation error, D = " + toString(d))) | |
124 | - | } | |
125 | - | } | |
126 | - | ||
127 | - | ||
128 | - | func getY (isReverse,D,poolAmountInBalance) = { | |
129 | - | let n = big2 | |
130 | - | let aPrecision = parseBigIntValue(Amult) | |
131 | - | let a = (parseBigIntValue(A) * aPrecision) | |
132 | - | let xp = if ((isReverse == false)) | |
133 | - | then [(toBigInt(getAccBalance(amId)) + poolAmountInBalance), toBigInt(getAccBalance(prId))] | |
134 | - | else [(toBigInt(getAccBalance(prId)) + poolAmountInBalance), toBigInt(getAccBalance(amId))] | |
135 | - | let x = xp[0] | |
136 | - | let s = x | |
137 | - | let ann = (a * n) | |
138 | - | let c = (((((D * D) / (x * n)) * D) * aPrecision) / (ann * n)) | |
139 | - | let b = ((s + ((D * aPrecision) / ann)) - D) | |
140 | - | func calc (acc,cur) = { | |
141 | - | let $t051255145 = acc | |
142 | - | let y = $t051255145._1 | |
143 | - | let found = $t051255145._2 | |
144 | - | if ((found != unit)) | |
145 | - | then acc | |
146 | - | else { | |
147 | - | let yNext = (((y * y) + c) / ((big2 * y) + b)) | |
148 | - | let yDiff = absBigInt((yNext - value(y))) | |
149 | - | if ((big1 >= yDiff)) | |
150 | - | then $Tuple2(yNext, cur) | |
151 | - | else $Tuple2(yNext, unit) | |
152 | - | } | |
153 | - | } | |
154 | - | ||
155 | - | let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] | |
156 | - | let $t054765523 = { | |
157 | - | let $l = arr | |
158 | - | let $s = size($l) | |
159 | - | let $acc0 = $Tuple2(D, unit) | |
160 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
161 | - | then $a | |
162 | - | else calc($a, $l[$i]) | |
163 | - | ||
164 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
165 | - | then $a | |
166 | - | else throw("List size exceeds 15") | |
167 | - | ||
168 | - | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
169 | - | } | |
170 | - | let y = $t054765523._1 | |
171 | - | let found = $t054765523._2 | |
172 | - | if ((found != unit)) | |
173 | - | then y | |
174 | - | else throw(("Y calculation error, Y = " + toString(y))) | |
175 | - | } | |
176 | - | ||
177 | 25 | ||
178 | 26 | let SWAVES_stake = Address(base58'3PDPzZVLhN1EuzGy4xAxjjTVkawKDLEaHiV') | |
179 | 27 | ||
180 | 28 | func _loadInt (key_,default_) = match getInteger(SWAVES_stake, key_) { | |
181 | 29 | case a: Int => | |
182 | 30 | a | |
183 | 31 | case _ => | |
184 | 32 | default_ | |
185 | 33 | } | |
186 | 34 | ||
187 | 35 | ||
188 | 36 | func _loadBigInt (key_,default_) = match getBinary(SWAVES_stake, key_) { | |
189 | 37 | case a: ByteVector => | |
190 | 38 | toBigInt(a) | |
191 | 39 | case _ => | |
192 | 40 | default_ | |
193 | 41 | } | |
194 | 42 | ||
195 | 43 | ||
196 | 44 | let WX_BURNXTN_WAVES = Address(base58'3P5vwLbXddLWpsRspftMxLuzfsjk3dLT3n5') | |
197 | 45 | ||
198 | 46 | let lastRate = _loadBigInt("LAST_RATE", toBigInt(1000000000000)) | |
199 | 47 | ||
200 | 48 | let currentRate = _loadBigInt("CURRENT_RATE", toBigInt(0)) | |
201 | 49 | ||
202 | 50 | let lastHeight = _loadInt("LAST_HEIGHT", 0) | |
203 | 51 | ||
204 | 52 | let targetHeight = min([_loadInt("TARGET_HEIGHT", 0), height]) | |
205 | 53 | ||
206 | 54 | let lastRateUpdated = (lastRate + (currentRate * toBigInt((targetHeight - lastHeight)))) | |
207 | 55 | ||
208 | 56 | let baseAmount = toInt(fraction(toBigInt(assetBalance(WX_BURNXTN_WAVES, swaves)), lastRateUpdated, toBigInt(1000000000000), FLOOR)) | |
209 | 57 | ||
210 | 58 | let wavesInWX = (wavesBalance(WX_BURNXTN_WAVES).regular + baseAmount) | |
211 | 59 | ||
212 | 60 | let burnxtnInWX = assetBalance(WX_BURNXTN_WAVES, burnxtnId) | |
213 | 61 | ||
214 | 62 | let burnxtnwavesprice = fraction(d8, wavesInWX, burnxtnInWX) | |
215 | 63 | ||
216 | - | func isShutdown () = match getBoolean(this, "is_shutdown") { | |
217 | - | case x: Boolean => | |
218 | - | x | |
219 | - | case _ => | |
220 | - | false | |
221 | - | } | |
222 | - | ||
223 | - | ||
224 | - | @Callable(i) | |
225 | - | func shutdown (shutdown) = if ((i.caller == this)) | |
226 | - | then [BooleanEntry("is_shutdown", shutdown)] | |
227 | - | else throw("admin only") | |
228 | - | ||
229 | - | ||
230 | - | ||
231 | - | @Callable(i) | |
232 | - | func swap (amountOutMin,AssetOut) = if (if ((isShutdown() == true)) | |
233 | - | then (i.caller != Address(base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk')) | |
234 | - | else false) | |
235 | - | then throw("contract is shutdown") | |
236 | - | else { | |
237 | - | let pmt = value(i.payments[0]) | |
238 | - | let amountIn = value(i.payments[0].amount) | |
239 | - | let feePoolAmount = fraction(amountIn, fee, feeScale) | |
240 | - | let cleanAmountIn = (amountIn - feePoolAmount) | |
241 | - | let assetIn = assetIdToString(pmt.assetId) | |
242 | - | let isReverse = if ((assetIn == amId)) | |
243 | - | then false | |
244 | - | else true | |
245 | - | let $t075647944 = if ((isReverse == false)) | |
246 | - | then { | |
247 | - | let assetOut = prId | |
248 | - | let poolAmountInBalance = (toBigInt(getAccBalance(amId)) + toBigInt(cleanAmountIn)) | |
249 | - | $Tuple2(assetOut, poolAmountInBalance) | |
250 | - | } | |
251 | - | else { | |
252 | - | let assetOut = amId | |
253 | - | let poolAmountInBalance = (toBigInt(getAccBalance(prId)) + toBigInt(cleanAmountIn)) | |
254 | - | $Tuple2(assetOut, poolAmountInBalance) | |
255 | - | } | |
256 | - | let assetOut = $t075647944._1 | |
257 | - | let poolAmountInBalance = $t075647944._2 | |
258 | - | let xp = if ((isReverse == false)) | |
259 | - | then [(toBigInt(getAccBalance(amId)) - toBigInt(value(i.payments[0]).amount)), toBigInt(getAccBalance(prId))] | |
260 | - | else [toBigInt(getAccBalance(amId)), (toBigInt(getAccBalance(prId)) - toBigInt(value(i.payments[0]).amount))] | |
261 | - | let D = getD(xp) | |
262 | - | let y = getY(isReverse, D, toBigInt(0)) | |
263 | - | let dy = ((toBigInt(getAccBalance(AssetOut)) - y) - toBigInt(1)) | |
264 | - | let totalGetRaw = max([0, toInt(dy)]) | |
265 | - | let checkMin = if ((totalGetRaw >= amountOutMin)) | |
266 | - | then true | |
267 | - | else throw("Exchange result is fewer coins than expected") | |
268 | - | if ((checkMin == checkMin)) | |
269 | - | then { | |
270 | - | let newXp = if ((isReverse == false)) | |
271 | - | then [(toBigInt(getAccBalance(amId)) + toBigInt(feePoolAmount)), (toBigInt(getAccBalance(prId)) - dy)] | |
272 | - | else [(toBigInt(getAccBalance(amId)) - dy), (toBigInt(getAccBalance(prId)) + toBigInt(feePoolAmount))] | |
273 | - | let newD = getD(newXp) | |
274 | - | let checkD = if ((newD >= D)) | |
275 | - | then true | |
276 | - | else throw("new D is fewer error") | |
277 | - | if ((checkD == checkD)) | |
278 | - | then { | |
279 | - | let unstake = if ((AssetOut == amId)) | |
280 | - | then invoke(USDCdapp, "unstake", [totalGetRaw], nil) | |
281 | - | else invoke(USDTdapp, "unstake", [totalGetRaw], nil) | |
282 | - | if ((unstake == unstake)) | |
283 | - | then { | |
284 | - | let stake = if ((AssetOut == amId)) | |
285 | - | then invoke(USDTdapp, "stake", nil, [AttachedPayment(fromBase58String(prId), assetBalance(this, fromBase58String(prId)))]) | |
286 | - | else invoke(USDCdapp, "stake", nil, [AttachedPayment(fromBase58String(amId), assetBalance(this, fromBase58String(amId)))]) | |
287 | - | if ((stake == stake)) | |
288 | - | then { | |
289 | - | let selector = invoke(this, "selector", nil, nil) | |
290 | - | if ((selector == selector)) | |
291 | - | then [ScriptTransfer(i.caller, totalGetRaw, parseAssetId(assetOut))] | |
292 | - | else throw("Strict value is not equal to itself.") | |
293 | - | } | |
294 | - | else throw("Strict value is not equal to itself.") | |
295 | - | } | |
296 | - | else throw("Strict value is not equal to itself.") | |
297 | - | } | |
298 | - | else throw("Strict value is not equal to itself.") | |
299 | - | } | |
300 | - | else throw("Strict value is not equal to itself.") | |
301 | - | } | |
302 | - | ||
303 | - | ||
304 | - | ||
305 | 64 | @Callable(i) | |
306 | 65 | func invoker () = { | |
307 | 66 | let inv1 = invoke(Address(base58'3PAucbbumdUXmhzcR421zGiayphEdo2tRoz'), "withdraw", nil, nil) | |
308 | 67 | if ((inv1 == inv1)) | |
309 | 68 | then { | |
310 | 69 | let inv2 = if ((50 > assetBalance(Address(base58'3PAucbbumdUXmhzcR421zGiayphEdo2tRoz'), vvxtnlp))) | |
311 | 70 | then invoke(Address(base58'3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr'), "withdraw", nil, nil) | |
312 | 71 | else invoke(Address(base58'3PAucbbumdUXmhzcR421zGiayphEdo2tRoz'), "importVVXTNLP", nil, nil) | |
313 | 72 | if ((inv2 == inv2)) | |
314 | 73 | then { | |
315 | 74 | let inv3 = invoke(Address(base58'3PPCzX2doZ7agBNuGSKqjrbdXgGEtE7CpQ3'), "withdraw", nil, nil) | |
316 | 75 | if ((inv3 == inv3)) | |
317 | 76 | then { | |
318 | 77 | let inv4 = invoke(Address(base58'3PHLhWPrs1mrpM1ZDUv1VmUnZRwchADJELc'), "withdraw", nil, nil) | |
319 | 78 | if ((inv4 == inv4)) | |
320 | 79 | then nil | |
321 | 80 | else throw("Strict value is not equal to itself.") | |
322 | 81 | } | |
323 | 82 | else throw("Strict value is not equal to itself.") | |
324 | 83 | } | |
325 | 84 | else throw("Strict value is not equal to itself.") | |
326 | 85 | } | |
327 | 86 | else throw("Strict value is not equal to itself.") | |
328 | 87 | } | |
329 | 88 | ||
330 | 89 | ||
331 | 90 | ||
332 | 91 | @Callable(i) | |
333 | - | func selector () = if ((i.caller != this)) | |
92 | + | func selector () = if (if ((i.caller != this)) | |
93 | + | then (i.caller != stableswap) | |
94 | + | else false) | |
334 | 95 | then throw("no access") | |
335 | 96 | else { | |
336 | 97 | let inv00 = if ((getIntegerValue(this, keyInvokeNext) == 0)) | |
337 | 98 | then invoke(projectB, "burnXTNandClaim", nil, nil) | |
338 | 99 | else if ((getIntegerValue(this, keyInvokeNext) == 0)) | |
339 | 100 | then [IntegerEntry(keyInvokeNext, 1)] | |
340 | 101 | else if ((getIntegerValue(this, keyInvokeNext) == 1)) | |
341 | 102 | then invoke(projectB, "SURFandVVXTNLP", nil, nil) | |
342 | 103 | else if ((getIntegerValue(this, keyInvokeNext) == 1)) | |
343 | - | then [IntegerEntry(keyInvokeNext, if ((burnxtnwavesprice >= getIntegerValue( | |
104 | + | then [IntegerEntry(keyInvokeNext, if ((burnxtnwavesprice >= getIntegerValue(projectB, "ATH in wavelets"))) | |
344 | 105 | then 10 | |
345 | 106 | else 20)] | |
346 | 107 | else if ((getIntegerValue(this, keyInvokeNext) == 10)) | |
347 | 108 | then invoke(projectB, "burnBURNXTN", nil, nil) | |
348 | 109 | else if ((getIntegerValue(this, keyInvokeNext) == 10)) | |
349 | 110 | then [IntegerEntry(keyInvokeNext, 11)] | |
350 | 111 | else if ((getIntegerValue(this, keyInvokeNext) == 11)) | |
351 | 112 | then invoke(projectB, "grow1", nil, nil) | |
352 | 113 | else if ((getIntegerValue(this, keyInvokeNext) == 11)) | |
353 | 114 | then [IntegerEntry(keyInvokeNext, 12)] | |
354 | 115 | else if ((getIntegerValue(this, keyInvokeNext) == 12)) | |
355 | 116 | then invoke(projectB, "grow2", nil, nil) | |
356 | 117 | else if ((getIntegerValue(this, keyInvokeNext) == 12)) | |
357 | 118 | then [IntegerEntry(keyInvokeNext, 13)] | |
358 | 119 | else if ((getIntegerValue(this, keyInvokeNext) == 13)) | |
359 | 120 | then invoke(projectB, "grow3", nil, nil) | |
360 | 121 | else if ((getIntegerValue(this, keyInvokeNext) == 13)) | |
361 | 122 | then [IntegerEntry(keyInvokeNext, 14)] | |
362 | 123 | else if ((getIntegerValue(this, keyInvokeNext) == 14)) | |
363 | 124 | then invoke(projectB, "grow4", nil, nil) | |
364 | 125 | else if ((getIntegerValue(this, keyInvokeNext) == 14)) | |
365 | 126 | then [IntegerEntry(keyInvokeNext, 15)] | |
366 | 127 | else if ((getIntegerValue(this, keyInvokeNext) == 15)) | |
367 | 128 | then invoke(projectB, "grow5", nil, nil) | |
368 | 129 | else if ((getIntegerValue(this, keyInvokeNext) == 15)) | |
369 | 130 | then [IntegerEntry(keyInvokeNext, 16)] | |
370 | 131 | else if ((getIntegerValue(this, keyInvokeNext) == 16)) | |
371 | 132 | then invoke(projectB, "grow6", nil, nil) | |
372 | 133 | else if ((getIntegerValue(this, keyInvokeNext) == 16)) | |
373 | 134 | then [IntegerEntry(keyInvokeNext, 30)] | |
374 | 135 | else if ((getIntegerValue(this, keyInvokeNext) == 20)) | |
375 | 136 | then invoke(projectB, "pump", nil, nil) | |
376 | 137 | else if ((getIntegerValue(this, keyInvokeNext) == 20)) | |
377 | 138 | then [IntegerEntry(keyInvokeNext, 30)] | |
378 | 139 | else if ((getIntegerValue(this, keyInvokeNext) == 30)) | |
379 | 140 | then invoke(projectB, "PZbbb", nil, nil) | |
380 | 141 | else if ((getIntegerValue(this, keyInvokeNext) == 30)) | |
381 | 142 | then [IntegerEntry(keyInvokeNext, 31)] | |
382 | 143 | else if ((getIntegerValue(this, keyInvokeNext) == 31)) | |
383 | 144 | then invoke(projectB, "claimBBB", nil, nil) | |
384 | 145 | else if ((getIntegerValue(this, keyInvokeNext) == 31)) | |
385 | 146 | then [IntegerEntry(keyInvokeNext, 32)] | |
386 | 147 | else if ((getIntegerValue(this, keyInvokeNext) == 32)) | |
387 | 148 | then invoke(projectB, "burnSURF", nil, nil) | |
388 | 149 | else if ((getIntegerValue(this, keyInvokeNext) == 32)) | |
389 | - | then [IntegerEntry(keyInvokeNext, | |
150 | + | then [IntegerEntry(keyInvokeNext, 33)] | |
390 | 151 | else if ((getIntegerValue(this, keyInvokeNext) == 33)) | |
391 | 152 | then invoke(projectB, "puzzlePZbbb", nil, nil) | |
392 | 153 | else if ((getIntegerValue(this, keyInvokeNext) == 33)) | |
393 | - | then [IntegerEntry(keyInvokeNext, | |
154 | + | then [IntegerEntry(keyInvokeNext, 40)] | |
394 | 155 | else if ((getIntegerValue(this, keyInvokeNext) == 34)) | |
395 | 156 | then invoke(projectB, "stakePZbbb", nil, nil) | |
396 | 157 | else if ((getIntegerValue(this, keyInvokeNext) == 34)) | |
397 | 158 | then [IntegerEntry(keyInvokeNext, 35)] | |
398 | 159 | else if ((getIntegerValue(this, keyInvokeNext) == 40)) | |
399 | 160 | then invoke(projectB, "dEntry", nil, nil) | |
400 | 161 | else if ((getIntegerValue(this, keyInvokeNext) == 40)) | |
401 | 162 | then [IntegerEntry(keyInvokeNext, 50)] | |
402 | 163 | else if ((getIntegerValue(this, keyInvokeNext) == 50)) | |
403 | 164 | then invoke(rewards, "claimRewards", nil, nil) | |
404 | 165 | else if ((getIntegerValue(this, keyInvokeNext) == 50)) | |
405 | 166 | then [IntegerEntry(keyInvokeNext, 51)] | |
406 | 167 | else if ((getIntegerValue(this, keyInvokeNext) == 51)) | |
407 | 168 | then invoke(rewards, "shillerRewards", nil, nil) | |
408 | 169 | else if ((getIntegerValue(this, keyInvokeNext) == 51)) | |
409 | 170 | then [IntegerEntry(keyInvokeNext, 52)] | |
410 | 171 | else if ((getIntegerValue(this, keyInvokeNext) == 52)) | |
411 | 172 | then invoke(rewards, "adminRewards", nil, nil) | |
412 | 173 | else if ((getIntegerValue(this, keyInvokeNext) == 52)) | |
413 | 174 | then [IntegerEntry(keyInvokeNext, 60)] | |
414 | 175 | else if ((getIntegerValue(this, keyInvokeNext) == 60)) | |
415 | 176 | then invoke(bounty, "updateBalanceEntry", nil, nil) | |
416 | 177 | else if ((getIntegerValue(this, keyInvokeNext) == 60)) | |
417 | 178 | then [IntegerEntry(keyInvokeNext, 61)] | |
418 | 179 | else if ((getIntegerValue(this, keyInvokeNext) == 61)) | |
419 | 180 | then invoke(bounty, "claim", nil, nil) | |
420 | 181 | else if ((getIntegerValue(this, keyInvokeNext) == 61)) | |
421 | 182 | then [IntegerEntry(keyInvokeNext, 62)] | |
422 | 183 | else if ((getIntegerValue(this, keyInvokeNext) == 62)) | |
423 | 184 | then invoke(bounty, "swap", nil, nil) | |
424 | 185 | else if ((getIntegerValue(this, keyInvokeNext) == 62)) | |
425 | 186 | then [IntegerEntry(keyInvokeNext, 63)] | |
426 | 187 | else if ((getIntegerValue(this, keyInvokeNext) == 63)) | |
427 | 188 | then invoke(bounty, "totalBalanceAll", nil, nil) | |
428 | 189 | else if ((getIntegerValue(this, keyInvokeNext) == 63)) | |
429 | 190 | then [IntegerEntry(keyInvokeNext, 64)] | |
430 | 191 | else if ((getIntegerValue(this, keyInvokeNext) == 64)) | |
431 | 192 | then invoke(bounty, "payRewards", nil, nil) | |
432 | 193 | else if ((getIntegerValue(this, keyInvokeNext) == 64)) | |
433 | 194 | then [IntegerEntry(keyInvokeNext, 70)] | |
434 | - | else unit | |
195 | + | else if ((getIntegerValue(this, keyInvokeNext) == 70)) | |
196 | + | then invoke(USDCdapp, "claimAll ", [toString(this)], nil) | |
197 | + | else if ((getIntegerValue(this, keyInvokeNext) == 70)) | |
198 | + | then invoke(USDTdapp, "claimAll ", [toString(this)], nil) | |
199 | + | else if ((getIntegerValue(this, keyInvokeNext) == 70)) | |
200 | + | then [IntegerEntry(keyInvokeNext, 0)] | |
201 | + | else unit | |
435 | 202 | if ((inv00 == inv00)) | |
436 | 203 | then nil | |
437 | 204 | else throw("Strict value is not equal to itself.") | |
438 | 205 | } | |
439 | - | ||
440 | - | ||
441 | - | ||
442 | - | @Callable(i) | |
443 | - | func balance_info () = [IntegerEntry("USDC", getAccBalance(amId)), IntegerEntry("USDT", getAccBalance(prId)), IntegerEntry("USD total", (getAccBalance(amId) + getAccBalance(prId)))] | |
444 | 206 | ||
445 | 207 | ||
446 | 208 | ||
447 | 209 | @Callable(i) | |
448 | 210 | func changeEntry (InvokeNext) = if ((i.caller != this)) | |
449 | 211 | then throw("access only by project owner") | |
450 | 212 | else [IntegerEntry(keyInvokeNext, InvokeNext)] | |
451 | 213 | ||
452 | 214 |
github/deemru/w8io/3ef1775 70.82 ms ◑