tx · DwVnqjKXBNPHTJvTozvqeUEf5fbtDUkzWG1PGF45iReo

3N8pVPvAfr79Ysbb4MEwi2Ks7d6LKUXG1iU:  -0.03500000 Waves

2022.07.18 06:26 [2144645] smart account 3N8pVPvAfr79Ysbb4MEwi2Ks7d6LKUXG1iU > SELF 0.00000000 Waves

{ "type": 13, "id": "DwVnqjKXBNPHTJvTozvqeUEf5fbtDUkzWG1PGF45iReo", "fee": 3500000, "feeAssetId": null, "timestamp": 1658114827269, "version": 2, "chainId": 84, "sender": "3N8pVPvAfr79Ysbb4MEwi2Ks7d6LKUXG1iU", "senderPublicKey": "GDio3pYFUMSWQ3yen7TJP79nTPaGuPbxjKixvKLuYS8E", "proofs": [ "3ukpBHmdJ13hSc6LH4ecDFReSs4ZA65o2T6R5HjheYNr1RyXvAhVGupK2zUkrD6QzSfKxHJnzWa6Smonq2p8aBgM" ], "script": "base64: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CQEAAAACa3AAAAACBQAAAAtVc2RuQXNzZXRJZAUAAAALTmdubkFzc2V0SWQEAAAAEGtleVBvb2xVc2RuV2F2ZXMJAQAAAAJrcAAAAAIFAAAAC1VzZG5Bc3NldElkBQAAAAV3YXZlcwQAAAAUa2V5UG9vbFVzZG5NYWluQXNzZXQJAQAAAAJrcAAAAAIFAAAAC1VzZG5Bc3NldElkBQAAAAtNYWluQXNzZXRJZAQAAAAPa2V5UG9vbFVzZG5FdXJuCQEAAAACa3AAAAACBQAAAAtVc2RuQXNzZXRJZAUAAAALRXVybkFzc2V0SWQEAAAAD2tleVBvb2xVc2RjVXNkdAkBAAAAAmtwAAAAAgUAAAALVXNkY0Fzc2V0SWQFAAAAC1VzZHRBc3NldElkBAAAAA9rZXlQb29sVXNkY05nbm4JAQAAAAJrcAAAAAIFAAAAC1VzZGNBc3NldElkBQAAAAtOZ25uQXNzZXRJZAQAAAAQa2V5UG9vbFVzZGNXYXZlcwkBAAAAAmtwAAAAAgUAAAALVXNkY0Fzc2V0SWQFAAAABXdhdmVzBAAAABRrZXlQb29sVXNkY01haW5Bc3NldAkBAAAAAmtwAAAAAgUAAAALVXNkY0Fzc2V0SWQFAAAAC01haW5Bc3NldElkBAAAAA9rZXlQb29sVXNkY0V1cm4JAQAAAAJrcAAAAAIFAAAAC1VzZGNBc3NldElkBQAAAAtFdXJuQXNzZXRJZAQAAAAPa2V5UG9vbFVzZHROZ25uCQEAAAACa3AAAAACBQAAAAtVc2R0QXNzZXRJZAUAAAALTmdubkFzc2V0SWQEAAAAFGtleVBvb2xVc2R0TWFpbkFzc2V0CQEAAAACa3AAAAACBQAAAAtVc2R0QXNzZXRJZAUAAAALTWFpbkFzc2V0SWQEAAAAD2tleVBvb2xVc2R0RXVybgkBAAAAAmtwAAAAAgUAAAALVXNkdEFzc2V0SWQFAAAAC0V1cm5Bc3NldElkBAAAABBrZXlQb29sTmdubldhdmVzCQEAAAACa3AAAAACBQAAAAtOZ25uQXNzZXRJZAUAAAAFd2F2ZXMEAAAAFGtleVBvb2xOZ25uTWFpbkFzc2V0CQEAAAACa3AAAAACBQAAAAtOZ25uQXNzZXRJZAUAAAALTWFpbkFzc2V0SWQEAAAAD2tleVBvb2xOZ25uRXVy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cGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CQABNgAAAAEFAAAAAkQ4CQABNgAAAAEFAAAAB3RvdGFsTFAJAAE2AAAAAQUAAAAPdG90YWxBc3NldDJQb29sCQABNgAAAAEFAAAAAkQ4AAAAAAAAAAABBAAAAAphc3NldDFwb29sCQEAAAAGYXNzZXRQAAAAAgkBAAAAAmtwAAAAAgUAAAAGQXNzZXQxBQAAAAZBc3NldDIFAAAABkFzc2V0MQQAAAAKYXNzZXQycG9vbAkBAAAABmFzc2V0UAAAAAIJAQAAAAJrcAAAAAIFAAAABkFzc2V0MQUAAAAGQXNzZXQyBQAAAAZBc3NldDIEAAAAE2N1cnJlbnRBbW91bnRBc3NldDEJAQAAAAZwb29sQUEAAAADBQAAAApjdXJyZW50S2V5CQEAAAACa3AAAAACBQAAAAZBc3NldDEFAAAABkFzc2V0MgUAAAAGQXNzZXQxBAAAABNjdXJyZW50QW1vdW50QXNzZXQyCQEAAAAGcG9vbEFBAAAAAwUAAAAKY3VycmVudEtleQkBAAAAAmtwAAAAAgUAAAAGQXNzZXQxBQAAAAZBc3NldDIFAAAABkFzc2V0MgQAAAAWbmV3Y3VycmVudEFtb3VudEFzc2V0MQkAAGUAAAACBQAAABNjdXJyZW50QW1vdW50QXNzZXQxBQAAAA1yZWNlaXZlQXNzZXQxBAAAABZuZXdjdXJyZW50QW1vdW50QXNzZXQyCQAAZQAAAAIFAAAAE2N1cnJlbnRBbW91bnRBc3NldDIFAAAADXJlY2VpdmVBc3NldDIEAAAAEG5ld2N1cnJlbnRBbW91bnQJAABlAAAAAgUAAAANY3VycmVudEFtb3VudAUAAAAGQW1vdW50BAAAAA1uZXdhc3NldDFwb29sCQAAZQAAAAIFAAAACmFzc2V0MXBvb2wFAAAADXJlY2VpdmVBc3NldDEEAAAADW5ld2Fzc2V0MnBvb2wJAABlAAAAAgUAAAAKYXNzZXQycG9vbAUAAAANcmVjZWl2ZUFzc2V0MgMJAAAAAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAkAAlkAAAABBQAAAAlscEFzc2V0SWQDCQAAAAAAAAIFAAAABkFtb3VudAgJAAGR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", "height": 2144645, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6REZtpv6ks3u8XXQeZWLSWjsEVhNT3sSLQCXCsXNK6NK Next: DMJuWYxqhpSBtCaBb2us1XSCntHRvhZoaB1QFwaaZGqM Diff:
OldNewDifferences
416416 let totalLp = totalAssetPool(lpAssetId, true)
417417 let priceLpAsset = ((totalAsset1Pool + totalAsset2Pool) / totalLp)
418418 let quantityAsset2 = (i.payments[0].amount * (totalAsset2Pool / totalAsset1Pool))
419- let Validate = if ((i.payments[1].amount == quantityAsset2))
419+ let rateTop = (i.payments[1].amount + ((i.payments[1].amount * 2) / 100))
420+ let rateBottom = (i.payments[1].amount - ((i.payments[1].amount * 2) / 100))
421+ let Validate = if (if (if ((i.payments[1].amount == quantityAsset2))
422+ then true
423+ else (rateTop > i.payments[1].amount))
424+ then true
425+ else (i.payments[1].amount > rateBottom))
420426 then true
421427 else false
422428 if (power)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let main = "main_asset"
55
66 let l = "lp_asset_"
77
88 let aa1 = "pool__"
99
1010 let sa = "STAKING_AMOUNT_"
1111
1212 let la = "LEASE_AMOUNT_"
1313
1414 let ix = "ID_"
1515
1616 let rateFee = "percentage_rate_fee"
1717
1818 let deposit_height = "Deposit_Height_Of_"
1919
2020 let D8 = 100000000
2121
2222 let D6 = 1000000
2323
2424 let D10 = 10000000000
2525
2626 func getAddressIfValid (address) = toString(valueOrErrorMessage(addressFromString(address), (("Can't parse " + address) + " as address")))
2727
2828
2929 func getAssetIfValid (assetId) = toBase58String(valueOrErrorMessage(value(assetInfo(fromBase58String(assetId))).id, (("Asset Id: " + assetId) + " is invalid.")))
3030
3131
3232 func getAmountBlockAsset (assetId) = match getInteger(this, assetId) {
3333 case i: Int =>
3434 i
3535 case _ =>
3636 0
3737 }
3838
3939
4040 func getAssetName (assetId) = match assetInfo(assetId) {
4141 case asset: Asset =>
4242 asset.name
4343 case _ =>
4444 throw("Can't find asset")
4545 }
4646
4747
4848 let ac = "activate"
4949
5050 let poolAc = "activate_pools"
5151
5252 let swapAc = "activate_swap"
5353
5454 let liquidityAc = "activate_liquidity"
5555
5656 let bcD = "block_distribuition"
5757
5858 let total_locked = "Total_Tokens_Locked_"
5959
6060 let usdn = "usdn_asset"
6161
6262 let usdt = "usdt_asset"
6363
6464 let usdc = "usdc_asset"
6565
6666 let ngnn = "ngnn_asset"
6767
6868 let eurn = "eurn_asset"
6969
7070 let waves = "WAVES"
7171
7272 let aWaves = "accept_waves"
7373
7474 let WAVES = unit
7575
7676 func kp (asset1,asset2) = (((aa1 + asset1) + "_") + asset2)
7777
7878
7979 func validPoolK (key) = match getInteger(this, key) {
8080 case i: Int =>
8181 i
8282 case _ =>
8383 false
8484 }
8585
8686
8787 func kpAddress (address,key) = match getInteger(this, ((key + "_") + address)) {
8888 case t: Int =>
8989 t
9090 case _ =>
9191 0
9292 }
9393
9494
9595 func poolAA (address,key,asset) = match getInteger(this, ((((address + "_") + key) + "_") + asset)) {
9696 case a: Int =>
9797 a
9898 case _ =>
9999 0
100100 }
101101
102102
103103 func assetP (key,asset) = match getInteger(this, ((key + "_") + asset)) {
104104 case a: Int =>
105105 a
106106 case _ =>
107107 1
108108 }
109109
110110
111111 func pkey (Asset1,Asset2,address) = (((deposit_height + kp(Asset1, Asset2)) + "_") + address)
112112
113113
114114 func lpBlocked (address,key) = match getInteger(this, ((("STAKE_LP_" + address) + "_") + key)) {
115115 case a: Int =>
116116 a
117117 case _ =>
118118 0
119119 }
120120
121121
122122 func adminVerification () = match getString(this, "admin") {
123123 case t: String =>
124124 Address(fromBase58String(t))
125125 case _ =>
126126 this
127127 }
128128
129129
130130 func validateAsset (assetS,stringAsset,acWaves) = if (if ((assetS == WAVES))
131131 then (stringAsset == "WAVES")
132132 else false)
133133 then if (acWaves)
134134 then true
135135 else throw("The smart contract does not currently support Waves.")
136136 else if ((assetS == fromBase58String(stringAsset)))
137137 then true
138138 else false
139139
140140
141141 func totalAssetPool (key,assetLp) = match getInteger(this, key) {
142142 case a: Int =>
143143 a
144144 case _ =>
145145 if (assetLp)
146146 then (1 * D8)
147147 else 1
148148 }
149149
150150
151151 @Callable(i)
152152 func constructor (MainAssetId,UsdnAssetId,UsdtAssetId,UsdcAssetId,NgnnAssetId,EurnAssetId,percentageRateSwap,blockDistribution,acceptWaves) = {
153153 let keyPoolUsdtWaves = kp(UsdtAssetId, waves)
154154 if (if ((i.caller == this))
155155 then true
156156 else (i.caller == adminVerification()))
157157 then if ((valueOrElse(getInteger(this, keyPoolUsdtWaves), 0) == 0))
158158 then {
159159 let keyPoolUsdnUsdt = kp(UsdnAssetId, UsdtAssetId)
160160 let keyPoolUsdnUsdc = kp(UsdnAssetId, UsdcAssetId)
161161 let keyPoolUsdnNgnn = kp(UsdnAssetId, NgnnAssetId)
162162 let keyPoolUsdnWaves = kp(UsdnAssetId, waves)
163163 let keyPoolUsdnMainAsset = kp(UsdnAssetId, MainAssetId)
164164 let keyPoolUsdnEurn = kp(UsdnAssetId, EurnAssetId)
165165 let keyPoolUsdcUsdt = kp(UsdcAssetId, UsdtAssetId)
166166 let keyPoolUsdcNgnn = kp(UsdcAssetId, NgnnAssetId)
167167 let keyPoolUsdcWaves = kp(UsdcAssetId, waves)
168168 let keyPoolUsdcMainAsset = kp(UsdcAssetId, MainAssetId)
169169 let keyPoolUsdcEurn = kp(UsdcAssetId, EurnAssetId)
170170 let keyPoolUsdtNgnn = kp(UsdtAssetId, NgnnAssetId)
171171 let keyPoolUsdtMainAsset = kp(UsdtAssetId, MainAssetId)
172172 let keyPoolUsdtEurn = kp(UsdtAssetId, EurnAssetId)
173173 let keyPoolNgnnWaves = kp(NgnnAssetId, waves)
174174 let keyPoolNgnnMainAsset = kp(NgnnAssetId, MainAssetId)
175175 let keyPoolNgnnEurn = kp(NgnnAssetId, EurnAssetId)
176176 let keyPoolMainWaves = kp(MainAssetId, waves)
177177 let keyPoolMainEurn = kp(MainAssetId, EurnAssetId)
178178 let keyPoolEurnWaves = kp(EurnAssetId, waves)
179179 [StringEntry(main, MainAssetId), StringEntry(usdn, UsdnAssetId), StringEntry(usdc, UsdcAssetId), StringEntry(usdt, UsdtAssetId), StringEntry(ngnn, NgnnAssetId), BooleanEntry(aWaves, acceptWaves), IntegerEntry(rateFee, percentageRateSwap), BooleanEntry(ac, true), BooleanEntry(swapAc, false), BooleanEntry(poolAc, false), BooleanEntry(liquidityAc, false), IntegerEntry(bcD, blockDistribution), IntegerEntry(keyPoolUsdnUsdt, 1), IntegerEntry(keyPoolUsdnWaves, 1), IntegerEntry(keyPoolUsdnUsdc, 1), IntegerEntry(keyPoolUsdnNgnn, 1), IntegerEntry(keyPoolUsdnMainAsset, 1), IntegerEntry(keyPoolUsdcUsdt, 1), IntegerEntry(keyPoolUsdcNgnn, 1), IntegerEntry(keyPoolUsdcWaves, 1), IntegerEntry(keyPoolUsdtMainAsset, 1), IntegerEntry(keyPoolUsdtNgnn, 1), IntegerEntry(keyPoolUsdtWaves, 1), IntegerEntry(keyPoolNgnnWaves, 1), IntegerEntry(keyPoolNgnnMainAsset, 1), IntegerEntry(keyPoolMainWaves, 1), IntegerEntry(keyPoolEurnWaves, 1), IntegerEntry(keyPoolMainEurn, 1), IntegerEntry(keyPoolNgnnEurn, 1), IntegerEntry(keyPoolUsdcEurn, 1), IntegerEntry(keyPoolUsdnEurn, 1), IntegerEntry(keyPoolUsdtEurn, 1), IntegerEntry(keyPoolUsdcMainAsset, 1), StringEntry(eurn, EurnAssetId)]
180180 }
181181 else throw("Smart Contract has been started")
182182 else throw("Only the Admin itself can invoke this function")
183183 }
184184
185185
186186
187187 @Callable(i)
188188 func activate (v) = if (if ((i.caller == this))
189189 then true
190190 else (i.caller == adminVerification()))
191191 then [BooleanEntry(ac, v)]
192192 else throw("Only the Admin itself can invoke this function")
193193
194194
195195
196196 @Callable(i)
197197 func maintenance (pools,swap,stake) = if (if ((i.caller == this))
198198 then true
199199 else (i.caller == adminVerification()))
200200 then [BooleanEntry(poolAc, pools), BooleanEntry(swapAc, swap), BooleanEntry(liquidityAc, stake)]
201201 else throw("Only the Admin itself can invoke this function")
202202
203203
204204
205205 @Callable(i)
206206 func percentualRateFeeSwapEdit (rate) = if (if ((i.caller == this))
207207 then true
208208 else (i.caller == adminVerification()))
209209 then [IntegerEntry(rateFee, rate)]
210210 else throw("Only the Admin itself can invoke this function")
211211
212212
213213
214214 @Callable(i)
215215 func acceptWaves (activate) = if (if ((i.caller == this))
216216 then true
217217 else (i.caller == adminVerification()))
218218 then [BooleanEntry(aWaves, activate)]
219219 else throw("Only the Admin itself can invoke this function")
220220
221221
222222
223223 @Callable(i)
224224 func blockDistribution (newValue) = if (if ((i.caller == this))
225225 then true
226226 else (i.caller == adminVerification()))
227227 then [IntegerEntry(bcD, newValue)]
228228 else throw("Only the Admin itself can invoke this function")
229229
230230
231231
232232 @Callable(i)
233233 func addAdmin (address) = if (if ((i.caller == this))
234234 then true
235235 else (i.caller == adminVerification()))
236236 then [StringEntry("admin", address)]
237237 else throw("Only the Admin itself can invoke this function")
238238
239239
240240
241241 @Callable(i)
242242 func lpAssetCreateForPairPool (asset1,asset2,Name,customName) = {
243243 let nameAsset1 = if ((asset1 == waves))
244244 then waves
245245 else getAssetName(fromBase58String(asset1))
246246 let nameAsset2 = if ((asset2 == waves))
247247 then waves
248248 else getAssetName(fromBase58String(asset2))
249249 let name = if (customName)
250250 then Name
251251 else ((nameAsset1 + "_") + nameAsset2)
252252 let key = validPoolK(kp(asset1, asset2))
253253 if (if ((i.caller == this))
254254 then true
255255 else (i.caller == adminVerification()))
256256 then if ((key != false))
257257 then {
258258 let assetLpCreate = Issue(name, ((("LP asset for pool liquidity in AxAi Swap pair " + asset1) + "_") + asset2), (1 * D8), 8, true)
259259 let idAssetLp = calculateAssetId(assetLpCreate)
260260 [StringEntry((l + kp(asset1, asset2)), toBase58String(idAssetLp)), assetLpCreate]
261261 }
262262 else throw("Invalid Pool Key. Try inverting the assets")
263263 else throw("Only the Admin itself can invoke this function")
264264 }
265265
266266
267267
268268 @Callable(i)
269269 func deposit (pool,Asset1,Asset2) = {
270270 let power = getBooleanValue(this, ac)
271271 let liquidityPower = getBooleanValue(this, liquidityAc)
272272 let MainAsset = getStringValue(this, main)
273273 let lpAssetId = if (pool)
274274 then getStringValue(this, (l + kp(Asset1, Asset2)))
275275 else MainAsset
276276 if (power)
277277 then if (!(liquidityPower))
278278 then if ((i.payments[0].assetId != fromBase58String(lpAssetId)))
279279 then throw((("Invalid asset! Kindly Deposit Only " + MainAsset) + " or valid asset lp"))
280280 else if (!(pool))
281281 then {
282282 let currentKey = toBase58String(i.caller.bytes)
283283 let currentAmount = match getInteger(this, currentKey) {
284284 case a: Int =>
285285 a
286286 case _ =>
287287 0
288288 }
289289 let h = if ((currentAmount == 0))
290290 then height
291291 else valueOrElse(getIntegerValue(this, (deposit_height + currentKey)), height)
292292 let newAmount = (currentAmount + i.payments[0].amount)
293293 let useramount = IntegerEntry(currentKey, newAmount)
294294 let userdepositheight = IntegerEntry((deposit_height + currentKey), h)
295295 let previouslockbalance = match getInteger(this, "Total_Tokens_Locked:") {
296296 case a: Int =>
297297 a
298298 case _ =>
299299 0
300300 }
301301 let totaltoken = (previouslockbalance + i.payments[0].amount)
302302 let TLV = IntegerEntry("Total_Tokens_Locked:", totaltoken)
303303 [useramount, userdepositheight, TLV]
304304 }
305305 else {
306306 let poolKey = kp(Asset1, Asset2)
307307 let key = validPoolK(poolKey)
308308 if ((key != false))
309309 then {
310310 let currentKey = toBase58String(i.caller.bytes)
311311 let currentAmount = match getInteger(this, ((("STAKE_LP_" + currentKey) + "_") + poolKey)) {
312312 case a: Int =>
313313 a
314314 case _ =>
315315 0
316316 }
317317 let h = if ((currentAmount == 0))
318318 then height
319319 else valueOrElse(getIntegerValue(this, ((((deposit_height + "_") + currentKey) + "_") + poolKey)), height)
320320 let newAmount = (currentAmount + i.payments[0].amount)
321321 let useramount = IntegerEntry(((("STAKE_LP_" + currentKey) + "_") + poolKey), newAmount)
322322 let userdepositheight = IntegerEntry(((((deposit_height + "_") + currentKey) + "_") + poolKey), height)
323323 let previouslockbalance = match getInteger(this, ("Total_Tokens_LP_Locked_" + poolKey)) {
324324 case a: Int =>
325325 a
326326 case _ =>
327327 0
328328 }
329329 let totaltoken = (previouslockbalance + i.payments[0].amount)
330330 let TLV = IntegerEntry(("Total_Tokens_LP_Locked_" + poolKey), totaltoken)
331331 [useramount, userdepositheight, TLV]
332332 }
333333 else throw("Invalid Pool key.")
334334 }
335335 else throw("liquidity is currently under maintenance.")
336336 else throw("dApp is currently under maintenance.")
337337 }
338338
339339
340340
341341 @Callable(i)
342342 func remove (pool,Asset1,Asset2,amount) = {
343343 let power = getBooleanValue(this, ac)
344344 let liquidityPower = getBooleanValue(this, liquidityAc)
345345 let pmt = i.payments[0]
346346 let MainAsset = fromBase58String(getStringValue(this, main))
347347 if (power)
348348 then if (!(liquidityPower))
349349 then {
350350 let currentKey = toBase58String(i.caller.bytes)
351351 let currentAmount = match if (pool)
352352 then getIntegerValue(this, ((("STAKE_LP_" + currentKey) + "_") + kp(Asset1, Asset2)))
353353 else getIntegerValue(this, currentKey) {
354354 case a: Int =>
355355 a
356356 case _ =>
357357 0
358358 }
359359 let swapheightkeyname = if (pool)
360360 then ((((deposit_height + "_") + currentKey) + "_") + kp(Asset1, Asset2))
361361 else (deposit_height + currentKey)
362362 let previouslockbalance = if (pool)
363363 then getIntegerValue(this, ("Total_Tokens_LP_Locked_" + kp(Asset1, Asset2)))
364364 else getIntegerValue(this, "Total_Tokens_Locked:")
365365 let totaltoken = (previouslockbalance - amount)
366366 let diff = (height - getIntegerValue(this, swapheightkeyname))
367367 let bcd = getIntegerValue(this, bcD)
368368 let reward = ((diff * bcd) * D8)
369369 let feeCalc = (reward / (previouslockbalance / amount))
370370 if ((0 > amount))
371371 then throw(if (pool)
372372 then (((("Can't withdraw negative " + Asset1) + "/") + Asset2) + " amount")
373373 else "Can't withdraw negative AxAi amount")
374374 else {
375375 let newAmount = (currentAmount - amount)
376376 if ((0 > newAmount))
377377 then throw(if (pool)
378378 then (((("Not enough Asset Lp " + Asset1) + "/") + Asset2) + " balance")
379379 else "Not enough AxAi balance")
380380 else [IntegerEntry(if (pool)
381381 then ((("STAKE_LP_" + currentKey) + "_") + kp(Asset1, Asset2))
382382 else currentKey, newAmount), IntegerEntry(if (pool)
383383 then ("Total_Tokens_LP_Locked_" + kp(Asset1, Asset2))
384384 else "Total_Tokens_Locked:", totaltoken), ScriptTransfer(i.caller, amount, if (pool)
385385 then fromBase58String(getStringValue(this, (l + kp(Asset1, Asset2))))
386386 else MainAsset), ScriptTransfer(i.caller, feeCalc, MainAsset)]
387387 }
388388 }
389389 else throw("liquidity is currently under maintenance.")
390390 else throw("dApp is currently under maintenance.")
391391 }
392392
393393
394394
395395 @Callable(i)
396396 func addLiquidity (Asset1,Asset2) = {
397397 let power = getBooleanValue(this, ac)
398398 let poolActivate = getBooleanValue(this, poolAc)
399399 let acWaves = getBooleanValue(this, aWaves)
400400 let key = validPoolK(kp(Asset1, Asset2))
401401 let asset1 = i.payments[0].assetId
402402 let asset2 = i.payments[1].assetId
403403 let USDN = fromBase58String(getStringValue(this, usdn))
404404 let USDC = fromBase58String(getStringValue(this, usdc))
405405 let USDT = fromBase58String(getStringValue(this, usdt))
406406 let NGNN = fromBase58String(getStringValue(this, ngnn))
407407 let EURN = fromBase58String(getStringValue(this, eurn))
408408 let MainAsset = fromBase58String(getStringValue(this, main))
409409 let lpAssetId = getStringValue(this, (l + kp(Asset1, Asset2)))
410410 let totalAsset1Pool = if ((2 > totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset1), false)))
411411 then i.payments[0].amount
412412 else totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset1), false)
413413 let totalAsset2Pool = if ((2 > totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset1), false)))
414414 then i.payments[1].amount
415415 else totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset2), false)
416416 let totalLp = totalAssetPool(lpAssetId, true)
417417 let priceLpAsset = ((totalAsset1Pool + totalAsset2Pool) / totalLp)
418418 let quantityAsset2 = (i.payments[0].amount * (totalAsset2Pool / totalAsset1Pool))
419- let Validate = if ((i.payments[1].amount == quantityAsset2))
419+ let rateTop = (i.payments[1].amount + ((i.payments[1].amount * 2) / 100))
420+ let rateBottom = (i.payments[1].amount - ((i.payments[1].amount * 2) / 100))
421+ let Validate = if (if (if ((i.payments[1].amount == quantityAsset2))
422+ then true
423+ else (rateTop > i.payments[1].amount))
424+ then true
425+ else (i.payments[1].amount > rateBottom))
420426 then true
421427 else false
422428 if (power)
423429 then if (!(poolActivate))
424430 then if (if (if (!((asset1 == asset2)))
425431 then validateAsset(asset1, Asset1, acWaves)
426432 else false)
427433 then validateAsset(asset2, Asset2, acWaves)
428434 else false)
429435 then if (if (if (if (if (if (if (if ((asset1 == USDN))
430436 then true
431437 else (asset1 == USDC))
432438 then true
433439 else (asset1 == USDT))
434440 then true
435441 else (asset1 == NGNN))
436442 then true
437443 else (asset1 == MainAsset))
438444 then true
439445 else (asset1 == WAVES))
440446 then true
441447 else (asset1 == EURN))
442448 then if (if (if (if (if (if ((asset2 == USDN))
443449 then true
444450 else (asset2 == USDC))
445451 then true
446452 else (asset2 == USDT))
447453 then true
448454 else (asset2 == NGNN))
449455 then true
450456 else (asset2 == MainAsset))
451457 then true
452458 else (asset2 == WAVES))
453459 then true
454460 else (asset2 == EURN)
455461 else false)
456462 then if ((key != false))
457463 then if (Validate)
458464 then {
459465 let currentKey = toBase58String(i.caller.bytes)
460466 let currentAmount = kpAddress(currentKey, kp(Asset1, Asset2))
461467 let currentAmountAsset1 = poolAA(currentKey, kp(Asset1, Asset2), Asset1)
462468 let currentAmountAsset2 = poolAA(currentKey, kp(Asset1, Asset2), Asset2)
463469 let asset1pool = assetP(kp(Asset1, Asset2), Asset1)
464470 let asset2pool = assetP(kp(Asset1, Asset2), Asset2)
465471 let receiveLp = if ((totalAsset1Pool == i.payments[0].amount))
466472 then (1 * D8)
467473 else ((i.payments[0].amount + i.payments[1].amount) / ((totalAsset1Pool + totalAsset2Pool) / totalLp))
468474 let newcurrentAmountAsset1 = (currentAmountAsset1 + i.payments[0].amount)
469475 let newcurrentAmountAsset2 = (currentAmountAsset2 + i.payments[1].amount)
470476 let newcurrentAmount = (currentAmount + receiveLp)
471477 let newasset1pool = (asset1pool + i.payments[0].amount)
472478 let newasset2pool = (asset2pool + i.payments[1].amount)
473479 [Reissue(fromBase58String(lpAssetId), receiveLp, true), ScriptTransfer(Address(i.caller.bytes), receiveLp, fromBase58String(lpAssetId)), IntegerEntry(pkey(Asset1, Asset2, currentKey), height), IntegerEntry(((((currentKey + "_") + kp(Asset1, Asset2)) + "_") + Asset1), newcurrentAmountAsset1), IntegerEntry(((((currentKey + "_") + kp(Asset1, Asset2)) + "_") + Asset2), newcurrentAmountAsset2), IntegerEntry(((kp(Asset1, Asset2) + "_") + currentKey), newcurrentAmount), IntegerEntry(((kp(Asset1, Asset2) + "_") + Asset1), newasset1pool), IntegerEntry(((kp(Asset1, Asset2) + "_") + Asset2), newasset2pool), IntegerEntry(Asset1, (getAmountBlockAsset(Asset1) + i.payments[0].amount)), IntegerEntry(Asset2, (getAmountBlockAsset(Asset2) + i.payments[1].amount)), IntegerEntry(lpAssetId, (getAmountBlockAsset(lpAssetId) + receiveLp))]
474480 }
475481 else throw(((((("Payment of invalid 1/1 amounts to the Pool. Try Asset2: {value:" + toString((i.payments[0].amount * (totalAsset2Pool / totalAsset1Pool)))) + "} Received: ") + toString(i.payments[1].amount)) + " Validate: ") + toString(Validate)))
476482 else throw("Invalid Pool Key.")
477483 else throw("Invalid Asset1 or Asset2!")
478484 else throw("Asset1 cannot be equal to Asset2")
479485 else throw("liquidity is currently under maintenance.")
480486 else throw("dApp is currently under maintenance.")
481487 }
482488
483489
484490
485491 @Callable(i)
486492 func removeLiquidity (Asset1,Asset2,Amount) = {
487493 let currentKey = toBase58String(i.caller.bytes)
488494 let power = getBooleanValue(this, ac)
489495 let poolActivate = getBooleanValue(this, poolAc)
490496 let acWaves = getBooleanValue(this, aWaves)
491497 let poolKey = kp(Asset1, Asset2)
492498 let key = validPoolK(poolKey)
493499 let asset1 = if ((Asset1 == waves))
494500 then if (acWaves)
495501 then WAVES
496502 else throw("The smart contract does not currently support Waves.")
497503 else fromBase58String(Asset1)
498504 let asset2 = if ((Asset2 == waves))
499505 then if (acWaves)
500506 then WAVES
501507 else throw("The smart contract does not currently support Waves.")
502508 else fromBase58String(Asset2)
503509 let USDN = fromBase58String(getStringValue(this, usdn))
504510 let USDC = fromBase58String(getStringValue(this, usdc))
505511 let USDT = fromBase58String(getStringValue(this, usdt))
506512 let NGNN = fromBase58String(getStringValue(this, ngnn))
507513 let MainAsset = fromBase58String(getStringValue(this, main))
508514 let EURN = fromBase58String(getStringValue(this, eurn))
509515 let lpAssetId = getStringValue(this, (l + kp(Asset1, Asset2)))
510516 let currentAmount = kpAddress(currentKey, kp(Asset1, Asset2))
511517 let amountLpBlocked = lpBlocked(currentKey, poolKey)
512518 let totalLP = totalAssetPool(lpAssetId, true)
513519 let totalAsset1Pool = totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset1), false)
514520 let totalAsset2Pool = totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset2), false)
515521 if (power)
516522 then if (!(poolActivate))
517523 then if (!((Asset1 == Asset2)))
518524 then if (if (if (if (if (if (if (if ((asset1 == USDN))
519525 then true
520526 else (asset1 == USDC))
521527 then true
522528 else (asset1 == USDT))
523529 then true
524530 else (asset1 == NGNN))
525531 then true
526532 else (asset1 == MainAsset))
527533 then true
528534 else (asset1 == WAVES))
529535 then true
530536 else (asset1 == EURN))
531537 then if (if (if (if (if (if ((asset2 == USDN))
532538 then true
533539 else (asset2 == USDC))
534540 then true
535541 else (asset2 == USDT))
536542 then true
537543 else (asset2 == NGNN))
538544 then true
539545 else (asset2 == MainAsset))
540546 then true
541547 else (asset2 == WAVES))
542548 then true
543549 else (asset2 == EURN)
544550 else false)
545551 then if ((key != false))
546552 then if (!((currentAmount == 0)))
547553 then if (((currentAmount - amountLpBlocked) >= Amount))
548554 then if (if ((totalAsset1Pool > 2))
549555 then true
550556 else (totalAsset2Pool > 2))
551557 then {
552558 let receiveAsset1 = (toInt(((fraction(toBigInt(i.payments[0].amount), toBigInt(D8), toBigInt(totalLP)) * toBigInt(totalAsset1Pool)) / toBigInt(D8))) - 1)
553559 let receiveAsset2 = (toInt(((fraction(toBigInt(i.payments[0].amount), toBigInt(D8), toBigInt(totalLP)) * toBigInt(totalAsset2Pool)) / toBigInt(D8))) - 1)
554560 let asset1pool = assetP(kp(Asset1, Asset2), Asset1)
555561 let asset2pool = assetP(kp(Asset1, Asset2), Asset2)
556562 let currentAmountAsset1 = poolAA(currentKey, kp(Asset1, Asset2), Asset1)
557563 let currentAmountAsset2 = poolAA(currentKey, kp(Asset1, Asset2), Asset2)
558564 let newcurrentAmountAsset1 = (currentAmountAsset1 - receiveAsset1)
559565 let newcurrentAmountAsset2 = (currentAmountAsset2 - receiveAsset2)
560566 let newcurrentAmount = (currentAmount - Amount)
561567 let newasset1pool = (asset1pool - receiveAsset1)
562568 let newasset2pool = (asset2pool - receiveAsset2)
563569 if ((i.payments[0].assetId == fromBase58String(lpAssetId)))
564570 then if ((Amount == i.payments[0].amount))
565571 then [Burn(fromBase58String(lpAssetId), Amount), ScriptTransfer(Address(i.caller.bytes), receiveAsset1, asset1), ScriptTransfer(Address(i.caller.bytes), receiveAsset2, asset2), IntegerEntry(pkey(Asset1, Asset2, currentKey), height), IntegerEntry(((((currentKey + "_") + kp(Asset1, Asset2)) + "_") + Asset1), newcurrentAmountAsset1), IntegerEntry(((((currentKey + "_") + kp(Asset1, Asset2)) + "_") + Asset2), newcurrentAmountAsset2), IntegerEntry(((kp(Asset1, Asset2) + "_") + currentKey), newcurrentAmount), IntegerEntry(((kp(Asset1, Asset2) + "_") + Asset1), newasset1pool), IntegerEntry(((kp(Asset1, Asset2) + "_") + Asset2), newasset2pool), IntegerEntry(Asset1, (getAmountBlockAsset(Asset1) - receiveAsset1)), IntegerEntry(Asset2, (getAmountBlockAsset(Asset2) - receiveAsset2)), IntegerEntry(lpAssetId, (getAmountBlockAsset(lpAssetId) - Amount))]
566572 else throw(("Withdrawal amount lower than asset lp amount. Your Lp amount available: " + toString(Amount)))
567573 else throw("Requires an lp asset as payment to remove locked amounts.")
568574 }
569575 else throw("Pool has no liquidity.")
570576 else throw(("Amount to be withdrawn greater than the amount available for withdrawal. Available: " + toString(Amount)))
571577 else throw("You have no locked values ​​in the pool")
572578 else throw("Invalid Pool Key.")
573579 else throw("Invalid Asset1 or Asset2!")
574580 else throw("Asset1 cannot be equal to Asset2")
575581 else throw("liquidity is currently under maintenance.")
576582 else throw("dApp is currently under maintenance.")
577583 }
578584
579585
580586
581587 @Callable(i)
582588 func swap (Asset1,Asset2) = {
583589 let currentKey = toBase58String(i.caller.bytes)
584590 let acWaves = getBooleanValue(this, aWaves)
585591 let power = getBooleanValue(this, ac)
586592 let swapActivate = getBooleanValue(this, swapAc)
587593 let poolKey = kp(Asset1, Asset2)
588594 let key = validPoolK(poolKey)
589595 let asset1 = i.payments[0].assetId
590596 let USDN = fromBase58String(getStringValue(this, usdn))
591597 let USDC = fromBase58String(getStringValue(this, usdc))
592598 let USDT = fromBase58String(getStringValue(this, usdt))
593599 let NGNN = fromBase58String(getStringValue(this, ngnn))
594600 let MainAsset = fromBase58String(getStringValue(this, main))
595601 let EURN = fromBase58String(getStringValue(this, eurn))
596602 let lpAssetId = getStringValue(this, (l + kp(Asset1, Asset2)))
597603 let totalAsset1 = totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset1), false)
598604 let totalAsset2 = totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset2), false)
599605 let feeRatePercentual = getIntegerValue(this, rateFee)
600606 let prAsset1 = (toBigInt(i.payments[0].amount) * fraction(toBigInt(D8), toBigInt(totalAsset2), toBigInt(totalAsset1)))
601607 let priceAsset1 = toInt(((prAsset1 - ((prAsset1 / toBigInt(feeRatePercentual)) * toBigInt(100))) / toBigInt(D8)))
602608 let prAsset2 = (toBigInt(i.payments[0].amount) * fraction(toBigInt(D8), toBigInt(totalAsset1), toBigInt(totalAsset2)))
603609 let priceAsset2 = toInt(((prAsset2 - ((prAsset2 / toBigInt(feeRatePercentual)) * toBigInt(100))) / toBigInt(D8)))
604610 let sendValue = if (if ((asset1 == unit))
605611 then (Asset1 == waves)
606612 else false)
607613 then priceAsset1
608614 else if ((asset1 == fromBase58String(Asset1)))
609615 then priceAsset1
610616 else priceAsset2
611617 let assetUpdatePay = if ((asset1 == unit))
612618 then waves
613619 else if ((asset1 == fromBase58String(Asset1)))
614620 then Asset1
615621 else Asset2
616622 let assetUpdateSwap = if ((asset1 == unit))
617623 then waves
618624 else if ((asset1 == fromBase58String(Asset1)))
619625 then Asset2
620626 else Asset1
621627 let assetSendSwap = if ((asset1 == unit))
622628 then WAVES
623629 else if ((asset1 == fromBase58String(Asset1)))
624630 then fromBase58String(Asset2)
625631 else fromBase58String(Asset1)
626632 if (power)
627633 then if (!(swapActivate))
628634 then if (if (!((Asset1 == Asset2)))
629635 then if (validateAsset(asset1, Asset1, acWaves))
630636 then true
631637 else validateAsset(asset1, Asset2, acWaves)
632638 else false)
633639 then if (if (if (if (if (if (if ((asset1 == USDN))
634640 then true
635641 else (asset1 == USDC))
636642 then true
637643 else (asset1 == USDT))
638644 then true
639645 else (asset1 == NGNN))
640646 then true
641647 else (asset1 == MainAsset))
642648 then true
643649 else (asset1 == EURN))
644650 then true
645651 else (asset1 == WAVES))
646652 then if ((key != false))
647653 then if ((i.payments[1].assetId == MainAsset))
648654 then if ((i.payments[1].amount == 300000))
649655 then if (if ((totalAsset1 > 2))
650656 then true
651657 else (totalAsset2 > 2))
652658 then [ScriptTransfer(Address(i.caller.bytes), sendValue, assetSendSwap), IntegerEntry(assetUpdateSwap, (getAmountBlockAsset(assetUpdateSwap) - sendValue)), IntegerEntry(((kp(Asset1, Asset2) + "_") + assetUpdateSwap), (assetP(kp(Asset1, Asset2), assetUpdateSwap) - sendValue)), IntegerEntry(((kp(Asset1, Asset2) + "_") + assetUpdatePay), (assetP(kp(Asset1, Asset2), assetUpdatePay) + i.payments[0].amount)), IntegerEntry(assetUpdatePay, (getAmountBlockAsset(assetUpdatePay) + i.payments[0].amount)), IntegerEntry(toBase58String(MainAsset), (getAmountBlockAsset(toBase58String(MainAsset)) + i.payments[1].amount))]
653659 else throw("Pool has no liquidity.")
654660 else throw("Swap denied! 0.003 AxAi is required for the swap fee.")
655661 else throw("Invalid rate asset")
656662 else throw("Invalid Swap Key.")
657663 else throw("Invalid Asset1 or Asset2!")
658664 else throw("Asset1 cannot be equal to Asset2")
659665 else throw("Swap is currently under maintenance.")
660666 else throw("dApp is currently under maintenance.")
661667 }
662668
663669
664670 @Verifier(tx)
665671 func verify () = match tx {
666672 case order: Order =>
667673 true
668674 case e: ExchangeTransaction =>
669675 true
670676 case tt: TransferTransaction =>
671677 (tt.recipient == Address(fromBase58String(getStringValue(this, "admin"))))
672678 case _ =>
673679 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
674680 }
675681

github/deemru/w8io/169f3d6 
79.89 ms