tx · 72Hs1NpYaw1SWWGZ4abUCAmzucGW92cW9xr1Hdy3iu4K

3MqiRWqn5ydiR6pifTkFAVV7VytvQhUQu2Y:  -0.03200000 Waves

2022.07.10 19:26 [2133856] smart account 3MqiRWqn5ydiR6pifTkFAVV7VytvQhUQu2Y > SELF 0.00000000 Waves

{ "type": 13, "id": "72Hs1NpYaw1SWWGZ4abUCAmzucGW92cW9xr1Hdy3iu4K", "fee": 3200000, "feeAssetId": null, "timestamp": 1657470470810, "version": 2, "chainId": 84, "sender": "3MqiRWqn5ydiR6pifTkFAVV7VytvQhUQu2Y", "senderPublicKey": "8Db2fkjUaCD7S1KCFdkXNKq3V3npNgxQuUMpf7YYSWiF", "proofs": [ "5WXBmLT9Poe9T1cAVJRMAsjJp3193aM9Umzg3P5NPGkP58iCWPod8DCq4ZgqpFqVLZWxc3D8TKQVYYkaMMCw9BTv" ], "script": "base64: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c3RyaW5nQXNzZXQCAAAABVdBVkVTBwMFAAAAB2FjV2F2ZXMGCQAAAgAAAAECAAAANFRoZSBzbWFydCBjb250cmFjdCBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBXYXZlcy4DCQAAAAAAAAIFAAAABmFzc2V0UwkAAlkAAAABBQAAAAtzdHJpbmdBc3NldAYHAQAAAA50b3RhbEFzc2V0UG9vbAAAAAIAAAADa2V5AAAAB2Fzc2V0THAEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAEAAAANAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAACQAAAAtNYWluQXNzZXRJZAAAAAtVc2RuQXNzZXRJZAAAAAtVc2R0QXNzZXRJZAAAAAtVc2RjQXNzZXRJZAAAAAtOZ25uQXNzZXRJZAAAAAtFdXJuQXNzZXRJZAAAABJwZXJjZW50YWdlUmF0ZVN3YXAAAAARYmxvY2tEaXN0cmlidXRpb24AAAALYWNjZXB0V2F2ZXMDAwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMGCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgkBAAAAEWFkbWluVmVyaWZpY2F0aW9uAAAAAAQAAAAPa2V5UG9vbFVzZG5Vc2R0CQEAAAACa3AAAAACBQAAAAtVc2RuQXNzZXRJZAUAAAALVXNkdEFzc2V0SWQEAAAAD2tleVBvb2xVc2RuVXNkYwkBAAAAAmtwAAAAAgUAAAALVXNkbkFzc2V0SWQFAAAAC1VzZGNBc3NldElkBAAAAA9rZXlQb29sVXNkbk5nbm4JAQAAAAJrcAAAAAIFAAAAC1VzZG5Bc3NldElkBQAAAAtOZ25uQXNzZXRJZAQAAAAQa2V5UG9vbFVzZG5XYXZlcwkBAAAAAmtwAAAAAgUAAAALVXNkbkFzc2V0SWQFAAAABXdhdmVzBAAAABRrZXlQb29sVXNkbk1haW5Bc3NldAkBAAAAAmtwAAAAAgUAAAALVXNkbkFzc2V0SWQFAAAAC01haW5Bc3NldElkBAAAAA9rZXlQb29sVXNkbkV1cm4JAQAAAAJrcAAAAAIFAAAAC1VzZG5Bc3NldElkBQAAAAtFdXJuQXNzZXRJZAQAAAAPa2V5UG9vbFVzZGNVc2R0CQEAAAACa3AAAAACBQAAAAtVc2RjQXNzZXRJZAUAAAALVXNkdEFzc2V0SWQEAAAAD2tleVBvb2xVc2RjTmdubgkBAAAAAmtwAAAAAgUAAAALVXNkY0Fzc2V0SWQFAAAAC05nbm5Bc3NldElkBAAAABBrZXlQb29sVXNkY1dhdmVzCQEAAAACa3AAAAACBQAAAAtVc2RjQXNzZXRJZAUAAAAFd2F2ZXMEAAAAFGtleVBvb2xVc2RjTWFpbkFzc2V0CQEAAAACa3AAAAACBQAAAAtVc2RjQXNzZXRJZAUAAAALTWFpbkFzc2V0SWQEAAAAD2tleVBvb2xVc2RjRXVybgkBAAAAAmtwAAAAAgUAAAALVXNkY0Fzc2V0SWQFAAAAC0V1cm5Bc3NldElkBAAAAA9rZXlQb29sVXNkdE5nbm4JAQAAAAJrcAAAAAIFAAAAC1VzZHRBc3NldElkBQAAAAtOZ25uQXNzZXRJZAQAAAAQa2V5UG9vbFVzZHRXYXZlcwkBAAAAAmtwAAAAAgUAAAALVXNkdEFzc2V0SWQFAAAABXdhdmVzBAAAABRrZXlQb29sVXNkdE1haW5Bc3NldAkBAAAAAmtwAAAAAgUAAAALVXNkdEFzc2V0SWQFAAAAC01haW5Bc3NldElkBAAAAA9rZXlQb29sVXNkdEV1cm4JAQAAAAJrcAAAAAIFAAAAC1VzZHRBc3NldElkBQAAAAtFdXJuQXNzZXRJZAQAAAAQa2V5UG9vbE5nbm5XYXZlcwkBAAAAAmtwAAAAAgUAAAALTmdubkFzc2V0SWQFAAAABXdhdmVzBAAAABRrZXlQb29sTmdubk1haW5Bc3NldAkBAAAAAmtwAAAAAgUAAAALTmdubkFzc2V0SWQFAAAAC01haW5Bc3NldElkBAAAAA9rZXlQb29sTmdubkV1cm4JAQAAAAJrcAAAAAIFAAAAC05nbm5Bc3NldElkBQAAAAtFdXJuQXNzZXRJZAQAAAAQa2V5UG9vbE1haW5XYXZlcwkBAAAAAmtwAAAAAgUAAAALTWFpbkFzc2V0SWQFAAAABXdhdmVzBAAAAA9rZXlQb29sTWFpbkV1cm4JAQAAAAJrcAAAAAIFAAAA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QW1vdW50QmxvY2tBc3NldAAAAAEFAAAACWxwQXNzZXRJZAUAAAAGQW1vdW50BQAAAANuaWwJAAACAAAAAQIAAAAsV2l0aGRyYXdhbCBhbW91bnQgbG93ZXIgdGhhbiBhc3NldCBscCBhbW91bnQJAAACAAAAAQIAAAA5UmVxdWlyZXMgYW4gbHAgYXNzZXQgYXMgcGF5bWVudCB0byByZW1vdmUgbG9ja2VkIGFtb3VudHMuCQAAAgAAAAECAAAASEFtb3VudCB0byBiZSB3aXRoZHJhd24gZ3JlYXRlciB0aGFuIHRoZSBhbW91bnQgYXZhaWxhYmxlIGZvciB3aXRoZHJhd2FsLgkAAAIAAAABAgAAACtZb3UgaGF2ZSBubyBsb2NrZWQgdmFsdWVzIOKAi+KAi2luIHRoZSBwb29sCQAAAgAAAAECAAAAEUludmFsaWQgUG9vbCBLZXkuCQAAAgAAAAECAAAAGUludmFsaWQgQXNzZXQxIG9yIEFzc2V0MiEJAAACAAAAAQIAAAAgQXNzZXQxIGNhbm5vdCBiZSBlcXVhbCB0byBBc3NldDIJAAACAAAAAQIAAAApbGlxdWlkaXR5IGlzIGN1cnJlbnRseSB1bmRlciBtYWludGVuYW5jZS4JAAACAAAAAQIAAAAkZEFwcCBpcyBjdXJyZW50bHkgdW5kZXIgbWFpbnRlbmFuY2UuAAAAAWkBAAAABHN3YXAAAAACAAAABkFzc2V0MQAAAAZBc3NldDIEAAAACmN1cnJlbnRLZXkJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAHYWNXYXZlcwkBAAAAEUBleHRyTmF0aXZlKDEwNTEpAAAAAgUAAAAEdGhpcwUAAAAGYVdhdmVzBAAAAAVwb3dlcgkBAAAAEUBleHRyTmF0aXZlKDEwNTEpAAAAAgUAAAAEdGhpcwUAAAACYWMEAAAADHN3YXBBY3RpdmF0ZQkBAAAAEUBleHRyTmF0aXZlKDEwNTEpAAAAAgUAAAAEdGhpcwUAAAAGc3dhcEFjBAAAAAdwb29sS2V5CQEAAAACa3AAAAACBQAAAAZBc3NldDEFAAAABkFzc2V0MgQAAAADa2V5CQEAAAAKdmFsaWRQb29sSwAAAAEFAAAAB3Bvb2xLZXkEAAAABmFzc2V0MQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAEVVNETgkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAAAR1c2RuBAAAAARVU0RDCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMFAAAABHVzZGMEAAAABFVTRFQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAAEdXNkdAQAAAAETkdOTgkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAAARuZ25uBAAAAAlNYWluQXNzZXQJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAAEbWFpbgQAAAAERVVSTgkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAAARldXJuBAAAAAt0b3RhbEFzc2V0MQkBAAAADnRvdGFsQXNzZXRQb29sAAAAAgkAASwAAAACCQABLAAAAAIJAQAAAAJrcAAAAAIFAAAABkFzc2V0MQUAAAAGQXNzZXQyAgAAAAFfBQAAAAZBc3NldDEHBAAAAAt0b3RhbEFzc2V0MgkBAAAADnRvdGFsQXNzZXRQb29sAAAAAgkAASwAAAACCQABLAAAAAIJAQAAAAJrcAAAAAIFAAAABkFzc2V0MQUAAAAGQXNzZXQyAgAAAAFfBQAAAAZBc3NldDIHBAAAABFmZWVSYXRlUGVyY2VudHVhbAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAHcmF0ZUZlZQMFAAAABXBvd2VyAwkBAAAAASEAAAABBQAAAAxzd2FwQWN0aXZhdGUDAwkBAAAAASEAAAABCQAAAAAAAAIFAAAABkFzc2V0MQUAAAAGQXNzZXQyAwkBAAAADXZhbGlkYXRlQXNzZXQAAAADBQAAAAZhc3NldDEFAAAABkFzc2V0MQUAAAAHYWNXYXZlcwYJAQAAAA12YWxpZGF0ZUFzc2V0AAAAAwUAAAAGYXNzZXQxBQAAAAZBc3NldDIFAAAAB2FjV2F2ZXMHAwMDAwMDAwkAAAAAAAACBQAAAAZhc3NldDEFAAAABFVTRE4GCQAAAAAAAAIFAAAABmFzc2V0MQUAAAAEVVNEQwYJAAAAAAAAAgUAAAAGYXNzZXQxBQAAAARVU0RUBgkAAAAAAAACBQAAAAZhc3NldDEFAAAABE5HTk4GCQAAAAAAAAIFAAAABmFzc2V0MQUAAAAJTWFpbkFzc2V0BgkAAAAAAAACBQAAAAZhc3NldDEFAAAABEVVUk4GCQAAAAAAAAIFAAAABmFzc2V0MQUAAAAFV0FWRVMDCQEAAAACIT0AAAACBQAAAANrZXkHAwkAAAAAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAdhc3NldElkBQAAAAlNYWluQXNzZXQDCQAAAAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAABmFtb3VudAAAAAAAAAST4AMDCQAAZgAAAAIFAAAAC3RvdGFsQXNzZXQxAAAAAAAAAAACBgkAAGYAAAACBQAAAAt0b3RhbEFzc2V0MgAAAAAAAAAAAgQAAAAKdmFsdWVBc3NldAMJAQAAAAEhAAAAAQkAAAAAAAACBQAAAAZhc3NldDEJAAJZAAAAAQUAAAAGQXNzZXQxCQAAaQAAAAIFAAAAC3RvdGFsQXNzZXQxBQAAAAt0b3RhbEFzc2V0MgkAAGkAAAACBQAAAAt0b3RhbEFzc2V0MgUAAAALdG90YWxBc3NldDEEAAAACG5ld1ZhbHVlCQAAZQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAkAAGkAAAACCQAAaAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAUAAAARZmVlUmF0ZVBlcmNlbnR1YWwJAABoAAAAAgAAAAAAAAAAZAUAAAACRDgEAAAACXNlbmRWYWx1ZQkAAGgAAAACBQAAAAhuZXdWYWx1ZQUAAAAKdmFsdWVBc3NldAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMFAAAACXNlbmRWYWx1ZQMJAAAAAAAAAgUAAAAGYXNzZXQxCQACWQAAAAEFAAAABkFzc2V0MgMJAAAAAAAAAgUAAAAGQXNzZXQyBQAAAAV3YXZlcwUAAAAFV0FWRVMJAAJZAAAAAQUAAAAGQXNzZXQxAwkAAAAAAAACBQAAAAZBc3NldDEFAAAABXdhdmVzBQAAAAVXQVZFUwkAAlkAAAABBQAAAAZBc3NldDIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAABkFzc2V0MgkAAGUAAAACCQEAAAATZ2V0QW1vdW50QmxvY2tBc3NldAAAAAEFAAAABkFzc2V0MgUAAAAJc2VuZFZhbHVlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkBAAAAAmtwAAAAAgUAAAAGQXNzZXQxBQAAAAZBc3NldDICAAAAAV8FAAAABkFzc2V0MgkAAGUAAAACCQEAAAAGYXNzZXRQAAAAAgkBAAAAAmtwAAAAAgUAAAAGQXNzZXQxBQAAAAZBc3NldDIFAAAABkFzc2V0MgUAAAAJc2VuZFZhbHVlBQAAAANuaWwJAAACAAAAAQIAAAAWUG9vbCBoYXMgbm8gbGlxdWlkaXR5LgkAAAIAAAABAgAAADVTd2FwIGRlbmllZCEgMC4wMDMgQXhBaSBpcyByZXF1aXJlZCBmb3IgdGhlIHN3YXAgZmVlLgkAAAIAAAABAgAAABJJbnZhbGlkIHJhdGUgYXNzZXQJAAACAAAAAQIAAAARSW52YWxpZCBTd2FwIEtleS4JAAACAAAAAQIAAAAZSW52YWxpZCBBc3NldDEgb3IgQXNzZXQyIQkAAAIAAAABAgAAACBBc3NldDEgY2Fubm90IGJlIGVxdWFsIHRvIEFzc2V0MgkAAAIAAAABAgAAACRTd2FwIGlzIGN1cnJlbnRseSB1bmRlciBtYWludGVuYW5jZS4JAAACAAAAAQIAAAAkZEFwcCBpcyBjdXJyZW50bHkgdW5kZXIgbWFpbnRlbmFuY2UuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABU9yZGVyBAAAAAVvcmRlcgUAAAAHJG1hdGNoMAYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAE0V4Y2hhbmdlVHJhbnNhY3Rpb24EAAAAAWUFAAAAByRtYXRjaDAGCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleXkaA30=", "height": 2133856, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FonzReX1X3C9J3ZkJUTRxaXJ9aNAQ2SwgdkJryrMRNWB Next: none Diff:
OldNewDifferences
405405 then 0
406406 else totalAssetPool(lpAssetId, true)
407407 let priceLp = if ((totalLp > 2))
408- then ((totalAsset1Pool + totalAsset2Pool) / totalLp)
409- else ((i.payments[0].amount + i.payments[1].amount) / 1)
408+ then (((i.payments[0].amount + i.payments[1].amount) * D8) / ((totalAsset1Pool + totalAsset2Pool) / totalLp))
409+ else (((i.payments[0].amount + i.payments[1].amount) * D8) / ((i.payments[0].amount + i.payments[1].amount) / 1))
410410 if (power)
411411 then if (!(poolActivate))
412412 then if (if (if (!((asset1 == asset2)))
452452 let currentAmountAsset2 = poolAA(currentKey, kp(Asset1, Asset2), Asset2)
453453 let asset1pool = assetP(kp(Asset1, Asset2), Asset1)
454454 let asset2pool = assetP(kp(Asset1, Asset2), Asset2)
455- let receiveLp = (((i.payments[0].amount + i.payments[1].amount) * D8) / priceLp)
455+ let receiveLp = priceLp
456456 let newcurrentAmountAsset1 = (currentAmountAsset1 + i.payments[0].amount)
457457 let newcurrentAmountAsset2 = (currentAmountAsset2 + i.payments[1].amount)
458458 let newcurrentAmount = (currentAmount + receiveLp)
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 func getAddressIfValid (address) = toString(valueOrErrorMessage(addressFromString(address), (("Can't parse " + address) + " as address")))
2525
2626
2727 func getAssetIfValid (assetId) = toBase58String(valueOrErrorMessage(value(assetInfo(fromBase58String(assetId))).id, (("Asset Id: " + assetId) + " is invalid.")))
2828
2929
3030 func getAmountBlockAsset (assetId) = match getInteger(this, assetId) {
3131 case i: Int =>
3232 i
3333 case _ =>
3434 0
3535 }
3636
3737
3838 func getAssetName (assetId) = match assetInfo(assetId) {
3939 case asset: Asset =>
4040 asset.name
4141 case _ =>
4242 throw("Can't find asset")
4343 }
4444
4545
4646 let ac = "activate"
4747
4848 let poolAc = "activate_pools"
4949
5050 let swapAc = "activate_swap"
5151
5252 let liquidityAc = "activate_liquidity"
5353
5454 let bcD = "block_distribuition"
5555
5656 let total_locked = "Total_Tokens_Locked_"
5757
5858 let usdn = "usdn_asset"
5959
6060 let usdt = "usdt_asset"
6161
6262 let usdc = "usdc_asset"
6363
6464 let ngnn = "ngnn_asset"
6565
6666 let eurn = "eurn_asset"
6767
6868 let waves = "WAVES"
6969
7070 let aWaves = "accept_waves"
7171
7272 let WAVES = unit
7373
7474 func kp (asset1,asset2) = (((aa1 + asset1) + "_") + asset2)
7575
7676
7777 func validPoolK (key) = match getInteger(this, key) {
7878 case i: Int =>
7979 i
8080 case _ =>
8181 false
8282 }
8383
8484
8585 func kpAddress (address,key) = match getInteger(this, ((key + "_") + address)) {
8686 case t: Int =>
8787 t
8888 case _ =>
8989 0
9090 }
9191
9292
9393 func poolAA (address,key,asset) = match getInteger(this, ((((address + "_") + key) + "_") + asset)) {
9494 case a: Int =>
9595 a
9696 case _ =>
9797 0
9898 }
9999
100100
101101 func assetP (key,asset) = match getInteger(this, ((key + "_") + asset)) {
102102 case a: Int =>
103103 a
104104 case _ =>
105105 1
106106 }
107107
108108
109109 func pkey (Asset1,Asset2,address) = (((deposit_height + kp(Asset1, Asset2)) + "_") + address)
110110
111111
112112 func lpBlocked (address,key) = match getInteger(this, ((("STAKE_LP_" + address) + "_") + key)) {
113113 case a: Int =>
114114 a
115115 case _ =>
116116 0
117117 }
118118
119119
120120 func adminVerification () = match getString(this, "admin") {
121121 case t: String =>
122122 Address(fromBase58String(t))
123123 case _ =>
124124 this
125125 }
126126
127127
128128 func validateAsset (assetS,stringAsset,acWaves) = if (if ((assetS == WAVES))
129129 then (stringAsset == "WAVES")
130130 else false)
131131 then if (acWaves)
132132 then true
133133 else throw("The smart contract does not currently support Waves.")
134134 else if ((assetS == fromBase58String(stringAsset)))
135135 then true
136136 else false
137137
138138
139139 func totalAssetPool (key,assetLp) = match getInteger(this, key) {
140140 case a: Int =>
141141 a
142142 case _ =>
143143 1
144144 }
145145
146146
147147 @Callable(i)
148148 func constructor (MainAssetId,UsdnAssetId,UsdtAssetId,UsdcAssetId,NgnnAssetId,EurnAssetId,percentageRateSwap,blockDistribution,acceptWaves) = if (if ((i.caller == this))
149149 then true
150150 else (i.caller == adminVerification()))
151151 then {
152152 let keyPoolUsdnUsdt = kp(UsdnAssetId, UsdtAssetId)
153153 let keyPoolUsdnUsdc = kp(UsdnAssetId, UsdcAssetId)
154154 let keyPoolUsdnNgnn = kp(UsdnAssetId, NgnnAssetId)
155155 let keyPoolUsdnWaves = kp(UsdnAssetId, waves)
156156 let keyPoolUsdnMainAsset = kp(UsdnAssetId, MainAssetId)
157157 let keyPoolUsdnEurn = kp(UsdnAssetId, EurnAssetId)
158158 let keyPoolUsdcUsdt = kp(UsdcAssetId, UsdtAssetId)
159159 let keyPoolUsdcNgnn = kp(UsdcAssetId, NgnnAssetId)
160160 let keyPoolUsdcWaves = kp(UsdcAssetId, waves)
161161 let keyPoolUsdcMainAsset = kp(UsdcAssetId, MainAssetId)
162162 let keyPoolUsdcEurn = kp(UsdcAssetId, EurnAssetId)
163163 let keyPoolUsdtNgnn = kp(UsdtAssetId, NgnnAssetId)
164164 let keyPoolUsdtWaves = kp(UsdtAssetId, waves)
165165 let keyPoolUsdtMainAsset = kp(UsdtAssetId, MainAssetId)
166166 let keyPoolUsdtEurn = kp(UsdtAssetId, EurnAssetId)
167167 let keyPoolNgnnWaves = kp(NgnnAssetId, waves)
168168 let keyPoolNgnnMainAsset = kp(NgnnAssetId, MainAssetId)
169169 let keyPoolNgnnEurn = kp(NgnnAssetId, EurnAssetId)
170170 let keyPoolMainWaves = kp(MainAssetId, waves)
171171 let keyPoolMainEurn = kp(MainAssetId, EurnAssetId)
172172 let keyPoolEurnWaves = kp(EurnAssetId, waves)
173173 [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), StringEntry(eurn, EurnAssetId)]
174174 }
175175 else throw("Only the Admin itself can invoke this function")
176176
177177
178178
179179 @Callable(i)
180180 func activate (v) = if (if ((i.caller == this))
181181 then true
182182 else (i.caller == adminVerification()))
183183 then [BooleanEntry(ac, v)]
184184 else throw("Only the Admin itself can invoke this function")
185185
186186
187187
188188 @Callable(i)
189189 func maintenance (pools,swap,stake) = if (if ((i.caller == this))
190190 then true
191191 else (i.caller == adminVerification()))
192192 then [BooleanEntry(poolAc, pools), BooleanEntry(swapAc, swap), BooleanEntry(liquidityAc, stake)]
193193 else throw("Only the Admin itself can invoke this function")
194194
195195
196196
197197 @Callable(i)
198198 func percentualRateFeeSwapEdit (rate) = if (if ((i.caller == this))
199199 then true
200200 else (i.caller == adminVerification()))
201201 then [IntegerEntry(rateFee, rate)]
202202 else throw("Only the Admin itself can invoke this function")
203203
204204
205205
206206 @Callable(i)
207207 func acceptWaves (activate) = if (if ((i.caller == this))
208208 then true
209209 else (i.caller == adminVerification()))
210210 then [BooleanEntry(aWaves, activate)]
211211 else throw("Only the Admin itself can invoke this function")
212212
213213
214214
215215 @Callable(i)
216216 func blockDistribution (newValue) = if (if ((i.caller == this))
217217 then true
218218 else (i.caller == adminVerification()))
219219 then [IntegerEntry(bcD, newValue)]
220220 else throw("Only the Admin itself can invoke this function")
221221
222222
223223
224224 @Callable(i)
225225 func addAdmin (address) = if (if ((i.caller == this))
226226 then true
227227 else (i.caller == adminVerification()))
228228 then [StringEntry("admin", address)]
229229 else throw("Only the Admin itself can invoke this function")
230230
231231
232232
233233 @Callable(i)
234234 func lpAssetCreateForPairPool (asset1,asset2,Name,customName) = {
235235 let nameAsset1 = if ((asset1 == waves))
236236 then waves
237237 else getAssetName(fromBase58String(asset1))
238238 let nameAsset2 = if ((asset2 == waves))
239239 then waves
240240 else getAssetName(fromBase58String(asset2))
241241 let name = if (customName)
242242 then Name
243243 else ((nameAsset1 + "_") + nameAsset2)
244244 let key = validPoolK(kp(asset1, asset2))
245245 if (if ((i.caller == this))
246246 then true
247247 else (i.caller == adminVerification()))
248248 then if ((key != false))
249249 then {
250250 let assetLpCreate = Issue(name, ((("LP asset for pool liquidity in AxAi Swap pair " + asset1) + "_") + asset2), 1, 8, true)
251251 let idAssetLp = calculateAssetId(assetLpCreate)
252252 [StringEntry((l + kp(asset1, asset2)), toBase58String(idAssetLp)), assetLpCreate]
253253 }
254254 else throw("Invalid Pool Key. Try inverting the assets")
255255 else throw("Only the Admin itself can invoke this function")
256256 }
257257
258258
259259
260260 @Callable(i)
261261 func deposit (pool,Asset1,Asset2) = {
262262 let power = getBooleanValue(this, ac)
263263 let liquidityPower = getBooleanValue(this, liquidityAc)
264264 let MainAsset = getStringValue(this, main)
265265 let lpAssetId = if (pool)
266266 then getStringValue(this, (l + kp(Asset1, Asset2)))
267267 else MainAsset
268268 if (power)
269269 then if (!(liquidityPower))
270270 then if ((i.payments[0].assetId != fromBase58String(lpAssetId)))
271271 then throw((("Invalid asset! Kindly Deposit Only " + MainAsset) + " or valid asset lp"))
272272 else if (!(pool))
273273 then {
274274 let currentKey = toBase58String(i.caller.bytes)
275275 let currentAmount = match getInteger(this, currentKey) {
276276 case a: Int =>
277277 a
278278 case _ =>
279279 0
280280 }
281281 let newAmount = (currentAmount + i.payments[0].amount)
282282 let useramount = IntegerEntry(currentKey, newAmount)
283283 let userdepositheight = IntegerEntry((deposit_height + currentKey), height)
284284 let previouslockbalance = match getInteger(this, "Total_Tokens_Locked:") {
285285 case a: Int =>
286286 a
287287 case _ =>
288288 0
289289 }
290290 let totaltoken = (previouslockbalance + i.payments[0].amount)
291291 let TLV = IntegerEntry("Total_Tokens_Locked:", totaltoken)
292292 [useramount, userdepositheight, TLV]
293293 }
294294 else {
295295 let poolKey = kp(Asset1, Asset2)
296296 let key = validPoolK(poolKey)
297297 if ((key != false))
298298 then {
299299 let currentKey = toBase58String(i.caller.bytes)
300300 let currentAmount = match getInteger(this, ((("STAKE_LP_" + currentKey) + "_") + poolKey)) {
301301 case a: Int =>
302302 a
303303 case _ =>
304304 0
305305 }
306306 let newAmount = (currentAmount + i.payments[0].amount)
307307 let useramount = IntegerEntry(((("STAKE_LP_" + currentKey) + "_") + poolKey), newAmount)
308308 let userdepositheight = IntegerEntry(((((deposit_height + "_") + currentKey) + "_") + poolKey), height)
309309 let previouslockbalance = match getInteger(this, ("Total_Tokens_LP_Locked_" + poolKey)) {
310310 case a: Int =>
311311 a
312312 case _ =>
313313 0
314314 }
315315 let totaltoken = (previouslockbalance + i.payments[0].amount)
316316 let TLV = IntegerEntry(("Total_Tokens_LP_Locked_" + poolKey), totaltoken)
317317 [useramount, userdepositheight, TLV]
318318 }
319319 else throw("Invalid Pool key.")
320320 }
321321 else throw("liquidity is currently under maintenance.")
322322 else throw("dApp is currently under maintenance.")
323323 }
324324
325325
326326
327327 @Callable(i)
328328 func remove (pool,Asset1,Asset2,amount) = {
329329 let power = getBooleanValue(this, ac)
330330 let liquidityPower = getBooleanValue(this, liquidityAc)
331331 let pmt = i.payments[0]
332332 let MainAsset = fromBase58String(getStringValue(this, main))
333333 if (power)
334334 then if (!(liquidityPower))
335335 then {
336336 let currentKey = toBase58String(i.caller.bytes)
337337 let currentAmount = match if (pool)
338338 then getIntegerValue(this, ((("STAKE_LP_" + currentKey) + "_") + kp(Asset1, Asset2)))
339339 else getIntegerValue(this, currentKey) {
340340 case a: Int =>
341341 a
342342 case _ =>
343343 0
344344 }
345345 let swapheightkeyname = if (pool)
346346 then ((((deposit_height + "_") + currentKey) + "_") + kp(Asset1, Asset2))
347347 else (deposit_height + currentKey)
348348 let previouslockbalance = if (pool)
349349 then getIntegerValue(this, ("Total_Tokens_LP_Locked_" + kp(Asset1, Asset2)))
350350 else getIntegerValue(this, "Total_Tokens_Locked:")
351351 let totaltoken = (previouslockbalance - amount)
352352 let diff = (height - getIntegerValue(this, swapheightkeyname))
353353 let bcd = getIntegerValue(this, bcD)
354354 let reward = ((diff * bcd) * D8)
355355 let feeCalc = (reward / (previouslockbalance / amount))
356356 if ((0 > amount))
357357 then throw(if (pool)
358358 then (((("Can't withdraw negative " + Asset1) + "/") + Asset2) + " amount")
359359 else "Can't withdraw negative AxAi amount")
360360 else {
361361 let newAmount = (currentAmount - amount)
362362 if ((0 > newAmount))
363363 then throw(if (pool)
364364 then (((("Not enough Asset Lp " + Asset1) + "/") + Asset2) + " balance")
365365 else "Not enough AxAi balance")
366366 else [IntegerEntry(if (pool)
367367 then ((("STAKE_LP_" + currentKey) + "_") + kp(Asset1, Asset2))
368368 else currentKey, newAmount), IntegerEntry(if (pool)
369369 then ("Total_Tokens_LP_Locked_" + kp(Asset1, Asset2))
370370 else "Total_Tokens_Locked:", totaltoken), ScriptTransfer(i.caller, amount, if (pool)
371371 then fromBase58String(getStringValue(this, (l + kp(Asset1, Asset2))))
372372 else MainAsset), ScriptTransfer(i.caller, feeCalc, MainAsset)]
373373 }
374374 }
375375 else throw("liquidity is currently under maintenance.")
376376 else throw("dApp is currently under maintenance.")
377377 }
378378
379379
380380
381381 @Callable(i)
382382 func addLiquidity (Asset1,Asset2) = {
383383 let power = getBooleanValue(this, ac)
384384 let poolActivate = getBooleanValue(this, poolAc)
385385 let acWaves = getBooleanValue(this, aWaves)
386386 let key = validPoolK(kp(Asset1, Asset2))
387387 let asset1 = i.payments[0].assetId
388388 let asset2 = i.payments[1].assetId
389389 let USDN = fromBase58String(getStringValue(this, usdn))
390390 let USDC = fromBase58String(getStringValue(this, usdc))
391391 let USDT = fromBase58String(getStringValue(this, usdt))
392392 let NGNN = fromBase58String(getStringValue(this, ngnn))
393393 let EURN = fromBase58String(getStringValue(this, eurn))
394394 let MainAsset = fromBase58String(getStringValue(this, main))
395395 let lpAssetId = getStringValue(this, (l + kp(Asset1, Asset2)))
396396 let totalAsset1Pool = totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset1), false)
397397 let totalAsset2Pool = totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset2), false)
398398 let asset1Pool = if ((2 > totalAsset1Pool))
399399 then (i.payments[0].amount / i.payments[1].amount)
400400 else (totalAsset1Pool / totalAsset2Pool)
401401 let asset2Pool = if ((2 > totalAsset2Pool))
402402 then (i.payments[1].amount / i.payments[0].amount)
403403 else (totalAsset2Pool / totalAsset1Pool)
404404 let totalLp = if ((totalAssetPool(lpAssetId, true) == 1))
405405 then 0
406406 else totalAssetPool(lpAssetId, true)
407407 let priceLp = if ((totalLp > 2))
408- then ((totalAsset1Pool + totalAsset2Pool) / totalLp)
409- else ((i.payments[0].amount + i.payments[1].amount) / 1)
408+ then (((i.payments[0].amount + i.payments[1].amount) * D8) / ((totalAsset1Pool + totalAsset2Pool) / totalLp))
409+ else (((i.payments[0].amount + i.payments[1].amount) * D8) / ((i.payments[0].amount + i.payments[1].amount) / 1))
410410 if (power)
411411 then if (!(poolActivate))
412412 then if (if (if (!((asset1 == asset2)))
413413 then validateAsset(asset1, Asset1, acWaves)
414414 else false)
415415 then validateAsset(asset2, Asset2, acWaves)
416416 else false)
417417 then if (if (if (if (if (if (if (if ((asset1 == USDN))
418418 then true
419419 else (asset1 == USDC))
420420 then true
421421 else (asset1 == USDT))
422422 then true
423423 else (asset1 == NGNN))
424424 then true
425425 else (asset1 == MainAsset))
426426 then true
427427 else (asset1 == WAVES))
428428 then true
429429 else (asset1 == EURN))
430430 then if (if (if (if (if (if ((asset2 == USDN))
431431 then true
432432 else (asset2 == USDC))
433433 then true
434434 else (asset2 == USDT))
435435 then true
436436 else (asset2 == NGNN))
437437 then true
438438 else (asset2 == MainAsset))
439439 then true
440440 else (asset2 == WAVES))
441441 then true
442442 else (asset2 == EURN)
443443 else false)
444444 then if ((key != false))
445445 then if (if ((asset1Pool == (i.payments[0].amount / i.payments[1].amount)))
446446 then (asset2Pool == (i.payments[1].amount / i.payments[0].amount))
447447 else false)
448448 then {
449449 let currentKey = toBase58String(i.caller.bytes)
450450 let currentAmount = kpAddress(currentKey, kp(Asset1, Asset2))
451451 let currentAmountAsset1 = poolAA(currentKey, kp(Asset1, Asset2), Asset1)
452452 let currentAmountAsset2 = poolAA(currentKey, kp(Asset1, Asset2), Asset2)
453453 let asset1pool = assetP(kp(Asset1, Asset2), Asset1)
454454 let asset2pool = assetP(kp(Asset1, Asset2), Asset2)
455- let receiveLp = (((i.payments[0].amount + i.payments[1].amount) * D8) / priceLp)
455+ let receiveLp = priceLp
456456 let newcurrentAmountAsset1 = (currentAmountAsset1 + i.payments[0].amount)
457457 let newcurrentAmountAsset2 = (currentAmountAsset2 + i.payments[1].amount)
458458 let newcurrentAmount = (currentAmount + receiveLp)
459459 let newasset1pool = (asset1pool + i.payments[0].amount)
460460 let newasset2pool = (asset2pool + i.payments[1].amount)
461461 [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))]
462462 }
463463 else throw("Payment of invalid 1/1 amounts to the Pool. ")
464464 else throw("Invalid Pool Key.")
465465 else throw("Invalid Asset1 or Asset2!")
466466 else throw("Asset1 cannot be equal to Asset2")
467467 else throw("liquidity is currently under maintenance.")
468468 else throw("dApp is currently under maintenance.")
469469 }
470470
471471
472472
473473 @Callable(i)
474474 func removeLiquidity (Asset1,Asset2,Amount) = {
475475 let currentKey = toBase58String(i.caller.bytes)
476476 let power = getBooleanValue(this, ac)
477477 let poolActivate = getBooleanValue(this, poolAc)
478478 let acWaves = getBooleanValue(this, aWaves)
479479 let poolKey = kp(Asset1, Asset2)
480480 let key = validPoolK(poolKey)
481481 let asset1 = if ((Asset1 == waves))
482482 then if (acWaves)
483483 then WAVES
484484 else throw("The smart contract does not currently support Waves.")
485485 else fromBase58String(Asset1)
486486 let asset2 = if ((Asset2 == waves))
487487 then if (acWaves)
488488 then WAVES
489489 else throw("The smart contract does not currently support Waves.")
490490 else fromBase58String(Asset2)
491491 let USDN = fromBase58String(getStringValue(this, usdn))
492492 let USDC = fromBase58String(getStringValue(this, usdc))
493493 let USDT = fromBase58String(getStringValue(this, usdt))
494494 let NGNN = fromBase58String(getStringValue(this, ngnn))
495495 let MainAsset = fromBase58String(getStringValue(this, main))
496496 let EURN = fromBase58String(getStringValue(this, eurn))
497497 let lpAssetId = getStringValue(this, (l + kp(Asset1, Asset2)))
498498 let currentAmount = kpAddress(currentKey, kp(Asset1, Asset2))
499499 let amountLpBlocked = lpBlocked(currentKey, poolKey)
500500 let totalLP = getIntegerValue(this, lpAssetId)
501501 let totalAsset1Pool = totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset1), false)
502502 let totalAsset2Pool = totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset2), false)
503503 if (power)
504504 then if (!(poolActivate))
505505 then if (!((Asset1 == Asset2)))
506506 then if (if (if (if (if (if (if (if ((asset1 == USDN))
507507 then true
508508 else (asset1 == USDC))
509509 then true
510510 else (asset1 == USDT))
511511 then true
512512 else (asset1 == NGNN))
513513 then true
514514 else (asset1 == MainAsset))
515515 then true
516516 else (asset1 == WAVES))
517517 then true
518518 else (asset1 == EURN))
519519 then if (if (if (if (if (if ((asset2 == USDN))
520520 then true
521521 else (asset2 == USDC))
522522 then true
523523 else (asset2 == USDT))
524524 then true
525525 else (asset2 == NGNN))
526526 then true
527527 else (asset2 == MainAsset))
528528 then true
529529 else (asset2 == WAVES))
530530 then true
531531 else (asset2 == EURN)
532532 else false)
533533 then if ((key != false))
534534 then if (!((currentAmount == 0)))
535535 then if (((currentAmount - amountLpBlocked) >= Amount))
536536 then {
537537 let calcLP = (Amount / totalLP)
538538 let receiveAsset1 = (calcLP * totalAsset1Pool)
539539 let receiveAsset2 = (calcLP * totalAsset2Pool)
540540 let asset1pool = assetP(kp(Asset1, Asset2), Asset1)
541541 let asset2pool = assetP(kp(Asset1, Asset2), Asset2)
542542 let currentAmountAsset1 = poolAA(currentKey, kp(Asset1, Asset2), Asset1)
543543 let currentAmountAsset2 = poolAA(currentKey, kp(Asset1, Asset2), Asset2)
544544 let newcurrentAmountAsset1 = (currentAmountAsset1 - receiveAsset1)
545545 let newcurrentAmountAsset2 = (currentAmountAsset2 - receiveAsset2)
546546 let newcurrentAmount = (currentAmount - Amount)
547547 let newasset1pool = (asset1pool - receiveAsset1)
548548 let newasset2pool = (asset2pool - receiveAsset2)
549549 if ((i.payments[0].assetId == fromBase58String(lpAssetId)))
550550 then if ((Amount == i.payments[0].amount))
551551 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))]
552552 else throw("Withdrawal amount lower than asset lp amount")
553553 else throw("Requires an lp asset as payment to remove locked amounts.")
554554 }
555555 else throw("Amount to be withdrawn greater than the amount available for withdrawal.")
556556 else throw("You have no locked values ​​in the pool")
557557 else throw("Invalid Pool Key.")
558558 else throw("Invalid Asset1 or Asset2!")
559559 else throw("Asset1 cannot be equal to Asset2")
560560 else throw("liquidity is currently under maintenance.")
561561 else throw("dApp is currently under maintenance.")
562562 }
563563
564564
565565
566566 @Callable(i)
567567 func swap (Asset1,Asset2) = {
568568 let currentKey = toBase58String(i.caller.bytes)
569569 let acWaves = getBooleanValue(this, aWaves)
570570 let power = getBooleanValue(this, ac)
571571 let swapActivate = getBooleanValue(this, swapAc)
572572 let poolKey = kp(Asset1, Asset2)
573573 let key = validPoolK(poolKey)
574574 let asset1 = i.payments[0].assetId
575575 let USDN = fromBase58String(getStringValue(this, usdn))
576576 let USDC = fromBase58String(getStringValue(this, usdc))
577577 let USDT = fromBase58String(getStringValue(this, usdt))
578578 let NGNN = fromBase58String(getStringValue(this, ngnn))
579579 let MainAsset = fromBase58String(getStringValue(this, main))
580580 let EURN = fromBase58String(getStringValue(this, eurn))
581581 let totalAsset1 = totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset1), false)
582582 let totalAsset2 = totalAssetPool(((kp(Asset1, Asset2) + "_") + Asset2), false)
583583 let feeRatePercentual = getIntegerValue(this, rateFee)
584584 if (power)
585585 then if (!(swapActivate))
586586 then if (if (!((Asset1 == Asset2)))
587587 then if (validateAsset(asset1, Asset1, acWaves))
588588 then true
589589 else validateAsset(asset1, Asset2, acWaves)
590590 else false)
591591 then if (if (if (if (if (if (if ((asset1 == USDN))
592592 then true
593593 else (asset1 == USDC))
594594 then true
595595 else (asset1 == USDT))
596596 then true
597597 else (asset1 == NGNN))
598598 then true
599599 else (asset1 == MainAsset))
600600 then true
601601 else (asset1 == EURN))
602602 then true
603603 else (asset1 == WAVES))
604604 then if ((key != false))
605605 then if ((i.payments[1].assetId == MainAsset))
606606 then if ((i.payments[1].amount == 300000))
607607 then if (if ((totalAsset1 > 2))
608608 then true
609609 else (totalAsset2 > 2))
610610 then {
611611 let valueAsset = if (!((asset1 == fromBase58String(Asset1))))
612612 then (totalAsset1 / totalAsset2)
613613 else (totalAsset2 / totalAsset1)
614614 let newValue = (i.payments[0].amount - ((i.payments[0].amount * feeRatePercentual) / (100 * D8)))
615615 let sendValue = (newValue * valueAsset)
616616 [ScriptTransfer(Address(i.caller.bytes), sendValue, if ((asset1 == fromBase58String(Asset2)))
617617 then if ((Asset2 == waves))
618618 then WAVES
619619 else fromBase58String(Asset1)
620620 else if ((Asset1 == waves))
621621 then WAVES
622622 else fromBase58String(Asset2)), IntegerEntry(Asset2, (getAmountBlockAsset(Asset2) - sendValue)), IntegerEntry(((kp(Asset1, Asset2) + "_") + Asset2), (assetP(kp(Asset1, Asset2), Asset2) - sendValue))]
623623 }
624624 else throw("Pool has no liquidity.")
625625 else throw("Swap denied! 0.003 AxAi is required for the swap fee.")
626626 else throw("Invalid rate asset")
627627 else throw("Invalid Swap Key.")
628628 else throw("Invalid Asset1 or Asset2!")
629629 else throw("Asset1 cannot be equal to Asset2")
630630 else throw("Swap is currently under maintenance.")
631631 else throw("dApp is currently under maintenance.")
632632 }
633633
634634
635635 @Verifier(tx)
636636 func verify () = match tx {
637637 case order: Order =>
638638 true
639639 case e: ExchangeTransaction =>
640640 true
641641 case _ =>
642642 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
643643 }
644644

github/deemru/w8io/169f3d6 
71.06 ms