tx · CaKDo4wPYe63FFW5TBzmubKcDEsiZxUdA3GGp7RTBg9v 3MyUDpTMG43mkmScfDKgG9gep4reUboH9YF: -0.01000000 Waves 2024.05.03 18:51 [3090138] smart account 3MyUDpTMG43mkmScfDKgG9gep4reUboH9YF > SELF 0.00000000 Waves
{ "type": 13, "id": "CaKDo4wPYe63FFW5TBzmubKcDEsiZxUdA3GGp7RTBg9v", "fee": 1000000, "feeAssetId": null, "timestamp": 1714751505045, "version": 2, "chainId": 84, "sender": "3MyUDpTMG43mkmScfDKgG9gep4reUboH9YF", "senderPublicKey": "5pPySirDYzGqBH24WnXUvbKDkDVA5qoNuUgCDvkKYJTT", "proofs": [ "2DVxzqAj7cVxiTa8tH754k875BVfBTpqmvzR6zK2xW4e76XmkNnuXeTo54tRGT1jB5XrjT2eozAgftU6M41gfHve" ], "script": "base64:BgIUCAISCAoGCAgICAEBEgYKBAgBCAEVAAdXYXZlc0lkAgVXQVZFUwAGSGVpZ2h0BQZoZWlnaHQAEENhbGxlckFkZHJlc3NLZXkCE3NldHVwX2NhbGxlckFkZHJlc3MAGlB1enpsZUFnZ3JlZ2F0b3JBZGRyZXNzS2V5Ah1zZXR1cF9wdXp6bGVBZ2dyZWdhdG9yQWRkcmVzcwAXUHV6emxlU3Rha2luZ0FkZHJlc3NLZXkCGnNldHVwX3B1enpsZVN0YWtpbmdBZGRyZXNzAAtQdXp6bGVJZEtleQIOc2V0dXBfcHV6emxlSWQAFEJ1eWJhY2tJdGVyYXRpb25zS2V5AhdzZXR1cF9idXliYWNrSXRlcmF0aW9ucwAPQnV5YmFja0RlbGF5S2V5AhJzZXR1cF9idXliYWNrRGVsYXkAFFRvdGFsQm91Z2h0UHV6emxlS2V5AhF0b3RhbEJvdWdodFB1enpsZQANQ2FsbGVyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUQQ2FsbGVyQWRkcmVzc0tleQAXUHV6emxlQWdncmVnYXRvckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFGlB1enpsZUFnZ3JlZ2F0b3JBZGRyZXNzS2V5ABRQdXp6bGVTdGFraW5nQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUXUHV6emxlU3Rha2luZ0FkZHJlc3NLZXkACFB1enpsZUlkCQERQGV4dHJOYXRpdmUoMTA1MikCBQR0aGlzBQtQdXp6bGVJZEtleQARQnV5YmFja0l0ZXJhdGlvbnMJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFFEJ1eWJhY2tJdGVyYXRpb25zS2V5AAxCdXliYWNrRGVsYXkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFD0J1eWJhY2tEZWxheUtleQASQnV5YmFja0Vwb2NoTGVuZ3RoCQBoAgURQnV5YmFja0l0ZXJhdGlvbnMFDEJ1eWJhY2tEZWxheQEYbWFrZUxhc3RCdXliYWNrSGVpZ2h0S2V5AQVhc3NldAkArAICAhJsYXN0QnV5YmFja0hlaWdodF8FBWFzc2V0ARNtYWtlQnV5YmFja0lucHV0S2V5AgVhc3NldAtlcG9jaEhlaWdodAkArAICCQCsAgIJAKwCAgINYnV5YmFja0lucHV0XwUFYXNzZXQCAV8JAKQDAQULZXBvY2hIZWlnaHQBDG1ha2VTdGF0c0tleQMBaQxidXliYWNrSW5wdXQFYXNzZXQJALkJAgkAzAgCAgVzdGF0cwkAzAgCCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJAMwIAgkApAMBBQZIZWlnaHQJAMwIAgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQCkAwEFDGJ1eWJhY2tJbnB1dAkAzAgCBQVhc3NldAUDbmlsAgFfARRnZXRMYXN0QnV5YmFja0hlaWdodAEFYXNzZXQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBGG1ha2VMYXN0QnV5YmFja0hlaWdodEtleQEFBWFzc2V0AAABD2dldEJ1eWJhY2tJbnB1dAIFYXNzZXQLZXBvY2hIZWlnaHQJAJoIAgUEdGhpcwkBE21ha2VCdXliYWNrSW5wdXRLZXkCBQVhc3NldAULZXBvY2hIZWlnaHQCAWkBBXNldHVwBg1jYWxsZXJBZGRyZXNzF3B1enpsZUFnZ3JlZ2F0b3JBZGRyZXNzFHB1enpsZVN0YWtpbmdBZGRyZXNzCHB1enpsZUlkEWJ1eWJhY2tJdGVyYXRpb25zDGJ1eWJhY2tEZWxheQMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBVPKK99Uqk+USTq6ausjKLTQZBlBcP3+vtwcJAAIBAgpPd25lciBvbmx5AwkAAAIJAKYIAQUNY2FsbGVyQWRkcmVzcwUEdW5pdAkAAgEJAKwCAgIXSW52YWxpZCBjYWxsZXJBZGRyZXNzOiAFDWNhbGxlckFkZHJlc3MDCQAAAgkApggBBRdwdXp6bGVBZ2dyZWdhdG9yQWRkcmVzcwUEdW5pdAkAAgEJAKwCAgIhSW52YWxpZCBwdXp6bGVBZ2dyZWdhdG9yQWRkcmVzczogBRdwdXp6bGVBZ2dyZWdhdG9yQWRkcmVzcwMJAAACCQCmCAEFFHB1enpsZVN0YWtpbmdBZGRyZXNzBQR1bml0CQACAQkArAICAh5JbnZhbGlkIHB1enpsZVN0YWtpbmdBZGRyZXNzOiAFFHB1enpsZVN0YWtpbmdBZGRyZXNzAwkAAAIJAOwHAQkA2QQBBQhwdXp6bGVJZAUEdW5pdAkAAgEJAKwCAgISVW5rbm93biBwdXp6bGVJZDogBQhwdXp6bGVJZAMJAGcCAAAFEWJ1eWJhY2tJdGVyYXRpb25zCQACAQkArAICAjVidXliYWNrSXRlcmF0aW9ucyBzaG91bGQgYmUgcG9zaXRpdmUsIGN1cnJlbnQgdmFsdWU6IAkApAMBBRFidXliYWNrSXRlcmF0aW9ucwMJAGcCAAAFDGJ1eWJhY2tEZWxheQkAAgEJAKwCAgIwYnV5YmFja0RlbGF5IHNob3VsZCBiZSBwb3NpdGl2ZSwgY3VycmVudCB2YWx1ZTogCQCkAwEFDGJ1eWJhY2tEZWxheQkAzAgCCQELU3RyaW5nRW50cnkCBRBDYWxsZXJBZGRyZXNzS2V5BQ1jYWxsZXJBZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIFGlB1enpsZUFnZ3JlZ2F0b3JBZGRyZXNzS2V5BRdwdXp6bGVBZ2dyZWdhdG9yQWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCBRdQdXp6bGVTdGFraW5nQWRkcmVzc0tleQUUcHV6emxlU3Rha2luZ0FkZHJlc3MJAMwIAgkBC0JpbmFyeUVudHJ5AgULUHV6emxlSWRLZXkJANkEAQUIcHV6emxlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFFEJ1eWJhY2tJdGVyYXRpb25zS2V5BRFidXliYWNrSXRlcmF0aW9ucwkAzAgCCQEMSW50ZWdlckVudHJ5AgUPQnV5YmFja0RlbGF5S2V5BQxidXliYWNrRGVsYXkFA25pbAFpARxidXliYWNrUHV6emxlQW5kVG9wVXBSZXdhcmRzBAVhc3NldAZhbW91bnQFcm91dGUMbWluVG9SZWNlaXZlAwkBAiE9AggFAWkGY2FsbGVyBQ1DYWxsZXJBZGRyZXNzCQACAQIQV2hpdGVsaXN0ZWQgb25seQQRbGFzdEJ1eWJhY2tIZWlnaHQJARRnZXRMYXN0QnV5YmFja0hlaWdodAEFBWFzc2V0AwkAZgIJAGQCBRFsYXN0QnV5YmFja0hlaWdodAUMQnV5YmFja0RlbGF5BQZIZWlnaHQJAAIBAgdOb3QgeWV0BAskdDAzMzYxMzYzMgMJAAACBQVhc3NldAUHV2F2ZXNJZAkAlAoCBQR1bml0CAkA7wcBBQR0aGlzCWF2YWlsYWJsZQQOY3VycmVudEFzc2V0SWQJANkEAQUFYXNzZXQEE2N1cnJlbnRBc3NldEJhbGFuY2UJAPAHAgUEdGhpcwUOY3VycmVudEFzc2V0SWQJAJQKAgUOY3VycmVudEFzc2V0SWQFE2N1cnJlbnRBc3NldEJhbGFuY2UEB2Fzc2V0SWQIBQskdDAzMzYxMzYzMgJfMQQHYmFsYW5jZQgFCyR0MDMzNjEzNjMyAl8yBAtlcG9jaEhlaWdodAkAaAIJAGkCBQZIZWlnaHQFEkJ1eWJhY2tFcG9jaExlbmd0aAUSQnV5YmFja0Vwb2NoTGVuZ3RoBBFlcG9jaEJ1eWJhY2tJbnB1dAkBC3ZhbHVlT3JFbHNlAgkBD2dldEJ1eWJhY2tJbnB1dAIFBWFzc2V0BQtlcG9jaEhlaWdodAkAaQIFB2JhbGFuY2UFEUJ1eWJhY2tJdGVyYXRpb25zAwMDCQBmAgUGYW1vdW50BQdiYWxhbmNlBgkAZwIAAAUGYW1vdW50BgkAZgIFBmFtb3VudAURZXBvY2hCdXliYWNrSW5wdXQJAAIBCQCsAgICEEludmFsaWQgYW1vdW50OiAJAKQDAQUGYW1vdW50BApzd2FwSW52b2tlCQD8BwQFF1B1enpsZUFnZ3JlZ2F0b3JBZGRyZXNzAhBzd2FwV2l0aFJlZmVycmFsCQDMCAIFBXJvdXRlCQDMCAIFDG1pblRvUmVjZWl2ZQkAzAgCAgpwdXp6bGVub2RlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQFBmFtb3VudAUDbmlsAwkAAAIFCnN3YXBJbnZva2UFCnN3YXBJbnZva2UEDGJvdWdodFB1enpsZQkA8AcCBQR0aGlzBQhQdXp6bGVJZAMJAGcCAAAFDGJvdWdodFB1enpsZQkAAgEJAKwCAgkArAICCQCsAgICHlB1enpsZSB3YXMgbm90IGJvdWdodCwgYXNzZXQ6IAUFYXNzZXQCCSwgcm91dGU6IAUFcm91dGUEC3RvcFVwSW52b2tlCQD8BwQFFFB1enpsZVN0YWtpbmdBZGRyZXNzAgt0b3BVcFJld2FyZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhQdXp6bGVJZAUMYm91Z2h0UHV6emxlBQNuaWwDCQAAAgULdG9wVXBJbnZva2UFC3RvcFVwSW52b2tlBBF0b3RhbEJvdWdodFB1enpsZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUUVG90YWxCb3VnaHRQdXp6bGVLZXkAAAUMYm91Z2h0UHV6emxlBAhzdGF0c0tleQkBDG1ha2VTdGF0c0tleQMFAWkFBmFtb3VudAUFYXNzZXQJAMwIAgkBDEludGVnZXJFbnRyeQIJARhtYWtlTGFzdEJ1eWJhY2tIZWlnaHRLZXkBBQVhc3NldAUGSGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETbWFrZUJ1eWJhY2tJbnB1dEtleQIFBWFzc2V0BQtlcG9jaEhlaWdodAURZXBvY2hCdXliYWNrSW5wdXQJAMwIAgkBDEludGVnZXJFbnRyeQIFCHN0YXRzS2V5BQxib3VnaHRQdXp6bGUJAMwIAgkBDEludGVnZXJFbnRyeQIFFFRvdGFsQm91Z2h0UHV6emxlS2V5BRF0b3RhbEJvdWdodFB1enpsZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleWgPfww=", "height": 3090138, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9DCFNnHQ5Tf696ysBjpiG25jpmQshBPFxYfymbqv3LyM Next: none Diff:
Old | New | Differences | |
---|---|---|---|
49 | 49 | ||
50 | 50 | ||
51 | 51 | @Callable(i) | |
52 | - | func setup (callerAddress,puzzleAggregatorAddress,puzzleStakingAddress,puzzleId,buybackIterations,buybackDelay) = if ((getBinary(PuzzleIdKey) != unit)) | |
53 | - | then throw("Can be called only once") | |
52 | + | func setup (callerAddress,puzzleAggregatorAddress,puzzleStakingAddress,puzzleId,buybackIterations,buybackDelay) = if (if ((i.caller != this)) | |
53 | + | then (i.caller != Address(base58'3NC2Xn1tUKEc7YxJS9oxdtY4x5NaQHhpH2e')) | |
54 | + | else false) | |
55 | + | then throw("Owner only") | |
54 | 56 | else if ((addressFromString(callerAddress) == unit)) | |
55 | 57 | then throw(("Invalid callerAddress: " + callerAddress)) | |
56 | 58 | else if ((addressFromString(puzzleAggregatorAddress) == unit)) | |
68 | 70 | ||
69 | 71 | ||
70 | 72 | @Callable(i) | |
71 | - | func buybackPuzzleAndTopUpRewards (asset,route,minToReceive) = if ((i.caller != CallerAddress)) | |
73 | + | func buybackPuzzleAndTopUpRewards (asset,amount,route,minToReceive) = if ((i.caller != CallerAddress)) | |
72 | 74 | then throw("Whitelisted only") | |
73 | 75 | else { | |
74 | 76 | let lastBuybackHeight = getLastBuybackHeight(asset) | |
75 | 77 | if (((lastBuybackHeight + BuybackDelay) > Height)) | |
76 | 78 | then throw("Not yet") | |
77 | 79 | else { | |
78 | - | let $ | |
80 | + | let $t033613632 = if ((asset == WavesId)) | |
79 | 81 | then $Tuple2(unit, wavesBalance(this).available) | |
80 | 82 | else { | |
81 | 83 | let currentAssetId = fromBase58String(asset) | |
82 | 84 | let currentAssetBalance = assetBalance(this, currentAssetId) | |
83 | 85 | $Tuple2(currentAssetId, currentAssetBalance) | |
84 | 86 | } | |
85 | - | let assetId = $ | |
86 | - | let balance = $ | |
87 | + | let assetId = $t033613632._1 | |
88 | + | let balance = $t033613632._2 | |
87 | 89 | let epochHeight = ((Height / BuybackEpochLength) * BuybackEpochLength) | |
88 | 90 | let epochBuybackInput = valueOrElse(getBuybackInput(asset, epochHeight), (balance / BuybackIterations)) | |
89 | - | let buybackInput = if ((epochBuybackInput > balance)) | |
90 | - | then balance | |
91 | - | else epochBuybackInput | |
92 | - | if ((0 >= buybackInput)) | |
93 | - | then throw(("Empty balance of " + asset)) | |
91 | + | if (if (if ((amount > balance)) | |
92 | + | then true | |
93 | + | else (0 >= amount)) | |
94 | + | then true | |
95 | + | else (amount > epochBuybackInput)) | |
96 | + | then throw(("Invalid amount: " + toString(amount))) | |
94 | 97 | else { | |
95 | - | let swapInvoke = invoke(PuzzleAggregatorAddress, "swapWithReferral", [route, minToReceive, "puzzlenode"], [AttachedPayment(assetId, | |
98 | + | let swapInvoke = invoke(PuzzleAggregatorAddress, "swapWithReferral", [route, minToReceive, "puzzlenode"], [AttachedPayment(assetId, amount)]) | |
96 | 99 | if ((swapInvoke == swapInvoke)) | |
97 | 100 | then { | |
98 | 101 | let boughtPuzzle = assetBalance(this, PuzzleId) | |
103 | 106 | if ((topUpInvoke == topUpInvoke)) | |
104 | 107 | then { | |
105 | 108 | let totalBoughtPuzzle = (valueOrElse(getInteger(this, TotalBoughtPuzzleKey), 0) + boughtPuzzle) | |
106 | - | let statsKey = makeStatsKey(i, | |
109 | + | let statsKey = makeStatsKey(i, amount, asset) | |
107 | 110 | [IntegerEntry(makeLastBuybackHeightKey(asset), Height), IntegerEntry(makeBuybackInputKey(asset, epochHeight), epochBuybackInput), IntegerEntry(statsKey, boughtPuzzle), IntegerEntry(TotalBoughtPuzzleKey, totalBoughtPuzzle)] | |
108 | 111 | } | |
109 | 112 | else throw("Strict value is not equal to itself.") |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let WavesId = "WAVES" | |
5 | 5 | ||
6 | 6 | let Height = height | |
7 | 7 | ||
8 | 8 | let CallerAddressKey = "setup_callerAddress" | |
9 | 9 | ||
10 | 10 | let PuzzleAggregatorAddressKey = "setup_puzzleAggregatorAddress" | |
11 | 11 | ||
12 | 12 | let PuzzleStakingAddressKey = "setup_puzzleStakingAddress" | |
13 | 13 | ||
14 | 14 | let PuzzleIdKey = "setup_puzzleId" | |
15 | 15 | ||
16 | 16 | let BuybackIterationsKey = "setup_buybackIterations" | |
17 | 17 | ||
18 | 18 | let BuybackDelayKey = "setup_buybackDelay" | |
19 | 19 | ||
20 | 20 | let TotalBoughtPuzzleKey = "totalBoughtPuzzle" | |
21 | 21 | ||
22 | 22 | let CallerAddress = addressFromStringValue(getStringValue(this, CallerAddressKey)) | |
23 | 23 | ||
24 | 24 | let PuzzleAggregatorAddress = addressFromStringValue(getStringValue(this, PuzzleAggregatorAddressKey)) | |
25 | 25 | ||
26 | 26 | let PuzzleStakingAddress = addressFromStringValue(getStringValue(this, PuzzleStakingAddressKey)) | |
27 | 27 | ||
28 | 28 | let PuzzleId = getBinaryValue(this, PuzzleIdKey) | |
29 | 29 | ||
30 | 30 | let BuybackIterations = getIntegerValue(this, BuybackIterationsKey) | |
31 | 31 | ||
32 | 32 | let BuybackDelay = getIntegerValue(this, BuybackDelayKey) | |
33 | 33 | ||
34 | 34 | let BuybackEpochLength = (BuybackIterations * BuybackDelay) | |
35 | 35 | ||
36 | 36 | func makeLastBuybackHeightKey (asset) = ("lastBuybackHeight_" + asset) | |
37 | 37 | ||
38 | 38 | ||
39 | 39 | func makeBuybackInputKey (asset,epochHeight) = ((("buybackInput_" + asset) + "_") + toString(epochHeight)) | |
40 | 40 | ||
41 | 41 | ||
42 | 42 | func makeStatsKey (i,buybackInput,asset) = makeString(["stats", toBase58String(i.transactionId), toString(Height), toString(lastBlock.timestamp), toString(buybackInput), asset], "_") | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | func getLastBuybackHeight (asset) = valueOrElse(getInteger(this, makeLastBuybackHeightKey(asset)), 0) | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | func getBuybackInput (asset,epochHeight) = getInteger(this, makeBuybackInputKey(asset, epochHeight)) | |
49 | 49 | ||
50 | 50 | ||
51 | 51 | @Callable(i) | |
52 | - | func setup (callerAddress,puzzleAggregatorAddress,puzzleStakingAddress,puzzleId,buybackIterations,buybackDelay) = if ((getBinary(PuzzleIdKey) != unit)) | |
53 | - | then throw("Can be called only once") | |
52 | + | func setup (callerAddress,puzzleAggregatorAddress,puzzleStakingAddress,puzzleId,buybackIterations,buybackDelay) = if (if ((i.caller != this)) | |
53 | + | then (i.caller != Address(base58'3NC2Xn1tUKEc7YxJS9oxdtY4x5NaQHhpH2e')) | |
54 | + | else false) | |
55 | + | then throw("Owner only") | |
54 | 56 | else if ((addressFromString(callerAddress) == unit)) | |
55 | 57 | then throw(("Invalid callerAddress: " + callerAddress)) | |
56 | 58 | else if ((addressFromString(puzzleAggregatorAddress) == unit)) | |
57 | 59 | then throw(("Invalid puzzleAggregatorAddress: " + puzzleAggregatorAddress)) | |
58 | 60 | else if ((addressFromString(puzzleStakingAddress) == unit)) | |
59 | 61 | then throw(("Invalid puzzleStakingAddress: " + puzzleStakingAddress)) | |
60 | 62 | else if ((assetInfo(fromBase58String(puzzleId)) == unit)) | |
61 | 63 | then throw(("Unknown puzzleId: " + puzzleId)) | |
62 | 64 | else if ((0 >= buybackIterations)) | |
63 | 65 | then throw(("buybackIterations should be positive, current value: " + toString(buybackIterations))) | |
64 | 66 | else if ((0 >= buybackDelay)) | |
65 | 67 | then throw(("buybackDelay should be positive, current value: " + toString(buybackDelay))) | |
66 | 68 | else [StringEntry(CallerAddressKey, callerAddress), StringEntry(PuzzleAggregatorAddressKey, puzzleAggregatorAddress), StringEntry(PuzzleStakingAddressKey, puzzleStakingAddress), BinaryEntry(PuzzleIdKey, fromBase58String(puzzleId)), IntegerEntry(BuybackIterationsKey, buybackIterations), IntegerEntry(BuybackDelayKey, buybackDelay)] | |
67 | 69 | ||
68 | 70 | ||
69 | 71 | ||
70 | 72 | @Callable(i) | |
71 | - | func buybackPuzzleAndTopUpRewards (asset,route,minToReceive) = if ((i.caller != CallerAddress)) | |
73 | + | func buybackPuzzleAndTopUpRewards (asset,amount,route,minToReceive) = if ((i.caller != CallerAddress)) | |
72 | 74 | then throw("Whitelisted only") | |
73 | 75 | else { | |
74 | 76 | let lastBuybackHeight = getLastBuybackHeight(asset) | |
75 | 77 | if (((lastBuybackHeight + BuybackDelay) > Height)) | |
76 | 78 | then throw("Not yet") | |
77 | 79 | else { | |
78 | - | let $ | |
80 | + | let $t033613632 = if ((asset == WavesId)) | |
79 | 81 | then $Tuple2(unit, wavesBalance(this).available) | |
80 | 82 | else { | |
81 | 83 | let currentAssetId = fromBase58String(asset) | |
82 | 84 | let currentAssetBalance = assetBalance(this, currentAssetId) | |
83 | 85 | $Tuple2(currentAssetId, currentAssetBalance) | |
84 | 86 | } | |
85 | - | let assetId = $ | |
86 | - | let balance = $ | |
87 | + | let assetId = $t033613632._1 | |
88 | + | let balance = $t033613632._2 | |
87 | 89 | let epochHeight = ((Height / BuybackEpochLength) * BuybackEpochLength) | |
88 | 90 | let epochBuybackInput = valueOrElse(getBuybackInput(asset, epochHeight), (balance / BuybackIterations)) | |
89 | - | let buybackInput = if ((epochBuybackInput > balance)) | |
90 | - | then balance | |
91 | - | else epochBuybackInput | |
92 | - | if ((0 >= buybackInput)) | |
93 | - | then throw(("Empty balance of " + asset)) | |
91 | + | if (if (if ((amount > balance)) | |
92 | + | then true | |
93 | + | else (0 >= amount)) | |
94 | + | then true | |
95 | + | else (amount > epochBuybackInput)) | |
96 | + | then throw(("Invalid amount: " + toString(amount))) | |
94 | 97 | else { | |
95 | - | let swapInvoke = invoke(PuzzleAggregatorAddress, "swapWithReferral", [route, minToReceive, "puzzlenode"], [AttachedPayment(assetId, | |
98 | + | let swapInvoke = invoke(PuzzleAggregatorAddress, "swapWithReferral", [route, minToReceive, "puzzlenode"], [AttachedPayment(assetId, amount)]) | |
96 | 99 | if ((swapInvoke == swapInvoke)) | |
97 | 100 | then { | |
98 | 101 | let boughtPuzzle = assetBalance(this, PuzzleId) | |
99 | 102 | if ((0 >= boughtPuzzle)) | |
100 | 103 | then throw(((("Puzzle was not bought, asset: " + asset) + ", route: ") + route)) | |
101 | 104 | else { | |
102 | 105 | let topUpInvoke = invoke(PuzzleStakingAddress, "topUpReward", nil, [AttachedPayment(PuzzleId, boughtPuzzle)]) | |
103 | 106 | if ((topUpInvoke == topUpInvoke)) | |
104 | 107 | then { | |
105 | 108 | let totalBoughtPuzzle = (valueOrElse(getInteger(this, TotalBoughtPuzzleKey), 0) + boughtPuzzle) | |
106 | - | let statsKey = makeStatsKey(i, | |
109 | + | let statsKey = makeStatsKey(i, amount, asset) | |
107 | 110 | [IntegerEntry(makeLastBuybackHeightKey(asset), Height), IntegerEntry(makeBuybackInputKey(asset, epochHeight), epochBuybackInput), IntegerEntry(statsKey, boughtPuzzle), IntegerEntry(TotalBoughtPuzzleKey, totalBoughtPuzzle)] | |
108 | 111 | } | |
109 | 112 | else throw("Strict value is not equal to itself.") | |
110 | 113 | } | |
111 | 114 | } | |
112 | 115 | else throw("Strict value is not equal to itself.") | |
113 | 116 | } | |
114 | 117 | } | |
115 | 118 | } | |
116 | 119 | ||
117 | 120 | ||
118 | 121 | @Verifier(tx) | |
119 | 122 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
120 | 123 |
github/deemru/w8io/169f3d6 39.15 ms ◑![]()