tx · CgtzWFv12qm9ueuBCTX82nVYVcM57V3Djr7fviLC1qAR

3PCxF4JryswYYp9mpUtE725wjTgvpBmp3M9:  -0.00900000 Waves

2024.03.26 11:49 [4100711] smart account 3PCxF4JryswYYp9mpUtE725wjTgvpBmp3M9 > SELF 0.00000000 Waves

{ "type": 13, "id": "CgtzWFv12qm9ueuBCTX82nVYVcM57V3Djr7fviLC1qAR", "fee": 900000, "feeAssetId": null, "timestamp": 1711442992147, "version": 2, "chainId": 87, "sender": "3PCxF4JryswYYp9mpUtE725wjTgvpBmp3M9", "senderPublicKey": "ABaPDrNzForWeg3KKG9KFKPWxuihEJxK9fjZ9nDfvE26", "proofs": [ "2cVEHhtXbCFem2K87H3wttSbzsZ1YoYCzTp7y6jMr9t2TNfTEKwcEzg1njoFHd4ZN24XMbQP2Co9ctJLA3Wa3MSK" ], "script": "base64:BgIaCAISAwoBBBIDCgEEEgMKAQESBQoDCAEIEgAZAAdpbnZva2VyCQEHQWRkcmVzcwEBGgFXGIkbJG0v4kSlsrku0GQjUC4p33Iw2jJZAAhVU0RUZGFwcAkBB0FkZHJlc3MBARoBV/vUnCdwV8wz3/ojSSJAuO9JsGyMCfRFeQAIVVNEQ2RhcHAJAQdBZGRyZXNzAQEaAVfPpo3ezb7Njd2/69fniUZAvbnmA3k/GHIACnplcm9CaWdJbnQJALYCAQAAAARiaWcwCQC2AgEAAAAEYmlnMQkAtgIBAAEABGJpZzIJALYCAQACAARiaWczCQC2AgEAAwAEYmlnNAkAtgIBAAQAC3dhdmVzU3RyaW5nAgVXQVZFUwAFQW11bHQCAzEwMAAVa2V5U2VsZWN0b3JJc1NodXRkb3duAhRzZWxlY3Rvcl9pc19zaHV0ZG93bgAEYW1JZAIsM2F5SDNQaFdNa2hGc3lTc1VWY0M4QnZGZjFReXhHQjVCWnVUUHlWdG1QNHYABHBySWQCLEc1V1dXenpWc1dSeXpHZjMyeG9qYm5mcDdnWGJXcmdxSlQ4UmNWV0VmTG1DAAFBAgQyMDAwAANmZWUAAQAIZmVlU2NhbGUAkE4AAmQ2AMCEPQEPYXNzZXRJZFRvU3RyaW5nAQVpbnB1dAMJAAACBQVpbnB1dAUEdW5pdAULd2F2ZXNTdHJpbmcJANgEAQkBBXZhbHVlAQUFaW5wdXQBCWFic0JpZ0ludAEDdmFsAwkAvwICBQp6ZXJvQmlnSW50BQN2YWwJAL4CAQUDdmFsBQN2YWwBDWdldEFjY0JhbGFuY2UBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAUEYW1JZAkAZAIJAPAHAgUEdGhpcwkA2QQBBQdhc3NldElkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQhVU0RDZGFwcAkArAICAglVU0VSX0xQX18JAKUIAQUEdGhpcwkAZAIJAPAHAgUEdGhpcwkA2QQBBQdhc3NldElkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQhVU0RUZGFwcAkArAICAglVU0VSX0xQX18JAKUIAQUEdGhpcwEMcGFyc2VBc3NldElkAQVpbnB1dAMJAAACBQVpbnB1dAULd2F2ZXNTdHJpbmcFBHVuaXQJANkEAQUFaW5wdXQBBGdldEQBAnhwBAN4cDAJAJEDAgUCeHAAAAQDeHAxCQCRAwIFAnhwAAEEAXMJALcCAgUDeHAwBQN4cDEDCQAAAgUBcwUEYmlnMAUEYmlnMAQBYQkBDXBhcnNlSW50VmFsdWUBBQFBBANhbm4JAGgCBQFhAAIEAXAJALwCAwUDeHAwBQN4cDEFBGJpZzEEC3hwMF94cDFfbl9uCQC8AgMFAXAFBGJpZzQFBGJpZzEEBWFubl9zCQC8AgMJALYCAQUDYW5uBQFzBQRiaWcxBAVhbm5fMQkAtgIBCQBlAgUDYW5uAAEKAQljYWxjRE5leHQBAWQEAmRkCQC8AgMFAWQFAWQFBGJpZzEEA2RkZAkAvAIDBQJkZAUBZAUEYmlnMQQCZHAJALwCAwUDZGRkBQRiaWcxBQt4cDBfeHAxX25fbgkAvAIDCQC3AgIFBWFubl9zCQC8AgMFAmRwBQRiaWcyBQRiaWcxBQFkCQC3AgIJALwCAwUFYW5uXzEFAWQFBGJpZzEJALwCAwUEYmlnMwUCZHAFBGJpZzEKAQRjYWxjAgNhY2MBaQMIBQNhY2MCXzIFA2FjYwQBZAgFA2FjYwJfMQQFZE5leHQJAQljYWxjRE5leHQBBQFkBAhkRGlmZlJhdwkAuAICBQVkTmV4dAkBBXZhbHVlAQUBZAQFZERpZmYDCQC/AgIFBGJpZzAFCGREaWZmUmF3CQC+AgEFCGREaWZmUmF3BQhkRGlmZlJhdwMJAMACAgUEYmlnMQUFZERpZmYJAJQKAgUFZE5leHQGCQCUCgIFBWROZXh0BwQDYXJyCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwkAzAgCABAFA25pbAQLJHQwMjU2MTI2MDkKAAIkbAUDYXJyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQFzBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEY2FsYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTcJAQUkZjBf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bHkBaQEQc2h1dGRvd25TZWxlY3RvcgEIc2h1dGRvd24DCQAAAggFAWkGY2FsbGVyBQR0aGlzCQDMCAIJAQxCb29sZWFuRW50cnkCBRVrZXlTZWxlY3RvcklzU2h1dGRvd24FCHNodXRkb3duBQNuaWwJAAIBAgphZG1pbiBvbmx5AWkBBHN3YXABDGFtb3VudE91dE1pbgMDCQAAAgkBCmlzU2h1dGRvd24ABgkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFXjh3mUco4I87DkcPEVovVg9NviFb/Nt0LBwkAAgECFGNvbnRyYWN0IGlzIHNodXRkb3duBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQIYW1vdW50SW4JAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BA1mZWVQb29sQW1vdW50CQBrAwUIYW1vdW50SW4FA2ZlZQUIZmVlU2NhbGUEDWNsZWFuQW1vdW50SW4JAGUCBQhhbW91bnRJbgUNZmVlUG9vbEFtb3VudAQHYXNzZXRJbgkBD2Fzc2V0SWRUb1N0cmluZwEIBQNwbXQHYXNzZXRJZAQJaXNSZXZlcnNlAwkAAAIFB2Fzc2V0SW4FBGFtSWQHBgQIQXNzZXRPdXQDCQAAAgUHYXNzZXRJbgUEYW1JZAUEcHJJZAUEYW1JZAQLJHQwNTY2OTYwNDkDCQAAAgUJaXNSZXZlcnNlBwQIYXNzZXRPdXQFBHBySWQEE3Bvb2xBbW91bnRJbkJhbGFuY2UJALcCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBGFtSWQJALYCAQUNY2xlYW5BbW91bnRJbgkAlAoCBQhhc3NldE91dAUTcG9vbEFtb3VudEluQmFsYW5jZQQIYXNzZXRPdXQFBGFtSWQEE3Bvb2xBbW91bnRJbkJhbGFuY2UJALcCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQJALYCAQUNY2xlYW5BbW91bnRJbgkAlAoCBQhhc3NldE91dAUTcG9vbEFtb3VudEluQmFsYW5jZQQIYXNzZXRPdXQIBQskdDA1NjY5NjA0OQJfMQQTcG9vbEFtb3VudEluQmFsYW5jZQgFCyR0MDU2Njk2MDQ5Al8yBAJ4cAMJAAACBQlpc1JldmVyc2UHCQDMCAIJALgCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBGFtSWQJALYCAQgJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAMwIAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQFA25pbAkAzAgCCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAkAzAgCCQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRwcklkCQC2AgEICQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNuaWwEAUQJAQRnZXREAQUCeHAEAXkJAQRnZXRZAwUJaXNSZXZlcnNlBQFECQC2AgEAAAQCZHkJALgCAgkAuAICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUIQXNzZXRPdXQFAXkJALYCAQABBAt0b3RhbEdldFJhdwkAlgMBCQDMCAIAAAkAzAgCCQCgAwEFAmR5BQNuaWwECGNoZWNrTWluAwkAZwIFC3RvdGFsR2V0UmF3BQxhbW91bnRPdXRNaW4GCQACAQIsRXhjaGFuZ2UgcmVzdWx0IGlzIGZld2VyIGNvaW5zIHRoYW4gZXhwZWN0ZWQDCQAAAgUIY2hlY2tNaW4FCGNoZWNrTWluBAVuZXdYcAMJAAACBQlpc1JldmVyc2UHCQDMCAIJALcCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBGFtSWQJALYCAQUNZmVlUG9vbEFtb3VudAkAzAgCCQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRwcklkBQJkeQUDbmlsCQDMCAIJALgCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBGFtSWQFAmR5CQDMCAIJALcCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQJALYCAQUNZmVlUG9vbEFtb3VudAUDbmlsBARuZXdECQEEZ2V0RAEFBW5ld1hwBAZjaGVja0QDCQDAAgIFBG5ld0QFAUQGCQACAQIUbmV3IEQgaXMgZmV3ZXIgZXJyb3IDCQAAAgUGY2hlY2tEBQZjaGVja0QEB3Vuc3Rha2UDCQAAAgUIQXNzZXRPdXQFBGFtSWQJAPwHBAUIVVNEQ2RhcHACB3Vuc3Rha2UJAMwIAgULdG90YWxHZXRSYXcFA25pbAUDbmlsCQD8BwQFCFVTRFRkYXBwAgd1bnN0YWtlCQDMCAIFC3RvdGFsR2V0UmF3BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBAVzdGFrZQMJAAACBQhBc3NldE91dAUEYW1JZAkA/AcEBQhVU0RUZGFwcAIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQRwcklkCQDwBwIFBHRoaXMJANkEAQUEcHJJZAUDbmlsCQD8BwQFCFVTRENkYXBwAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEFBGFtSWQJAPAHAgUEdGhpcwkA2QQBBQRhbUlkBQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBAhzZWxlY3RvcgMJAAACCQCbCAIFBHRoaXMFFWtleVNlbGVjdG9ySXNTaHV0ZG93bgYFBHVuaXQJAPwHBAUHaW52b2tlcgIIc2VsZWN0b3IFA25pbAUDbmlsAwkAAAIFCHNlbGVjdG9yBQhzZWxlY3RvcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC3RvdGFsR2V0UmF3CQEMcGFyc2VBc3NldElkAQUIYXNzZXRPdXQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhyZWFkU3dhcAMHQXNzZXRJbghBbW91bnRJbghBc3NldE91dAMDCQAAAgkBCmlzU2h1dGRvd24ABgkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFXjh3mUco4I87DkcPEVovVg9NviFb/Nt0LBwkAAgECFGNvbnRyYWN0IGlzIHNodXRkb3duBAhhbW91bnRJbgUIQW1vdW50SW4EDWZlZVBvb2xBbW91bnQJAGsDBQhhbW91bnRJbgUDZmVlBQhmZWVTY2FsZQQNY2xlYW5BbW91bnRJbgkAZQIFCGFtb3VudEluBQ1mZWVQb29sQW1vdW50BAdhc3NldEluBQdBc3NldEluBAlpc1JldmVyc2UDCQAAAgUHYXNzZXRJbgUEYW1JZAcGBAskdDA4MDIzODQwMwMJAAACBQlpc1JldmVyc2UHBAhhc3NldE91dAUEcHJJZAQTcG9vbEFtb3VudEluQmFsYW5jZQkAtwICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAkAtgIBBQ1jbGVhbkFtb3VudEluCQCUCgIFCGFzc2V0T3V0BRNwb29sQW1vdW50SW5CYWxhbmNlBAhhc3NldE91dAUEYW1JZAQTcG9vbEFtb3VudEluQmFsYW5jZQkAtwICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEcHJJZAkAtgIBBQ1jbGVhbkFtb3VudEluCQCUCgIFCGFzc2V0T3V0BRNwb29sQW1vdW50SW5CYWxhbmNlBAhhc3NldE91dAgFCyR0MDgwMjM4NDAzAl8xBBNwb29sQW1vdW50SW5CYWxhbmNlCAULJHQwODAyMzg0MDMCXzIEAnhwAwkAAAIFCWlzUmV2ZXJzZQcJAMwIAgkAuAICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAkAtgIBCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAzAgCCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEcHJJZAUDbmlsCQDMCAIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRhbUlkCQDMCAIJALgCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQJALYCAQgJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA25pbAQBRAkBBGdldEQBBQJ4cAQBeQkBBGdldFkDBQlpc1JldmVyc2UFAUQJALYCAQAABAJkeQkAuAICCQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQhBc3NldE91dAUBeQkAtgIBAAEEC3RvdGFsR2V0UmF3CQCWAwEJAMwIAgAACQDMCAIJAKADAQUCZHkFA25pbAQFbmV3WHADCQAAAgUJaXNSZXZlcnNlBwkAzAgCCQC3AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRhbUlkCQC2AgEFDWZlZVBvb2xBbW91bnQJAMwIAgkAuAICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEcHJJZAUCZHkFA25pbAkAzAgCCQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRhbUlkBQJkeQkAzAgCCQC3AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRwcklkCQC2AgEFDWZlZVBvb2xBbW91bnQFA25pbAQEbmV3RAkBBGdldEQBBQVuZXdYcAQGY2hlY2tEAwkAwAICBQRuZXdEBQFEBgkAAgECFG5ldyBEIGlzIGZld2VyIGVycm9yAwkAAAIFBmNoZWNrRAUGY2hlY2tECQDMCAIJAQtTdHJpbmdFbnRyeQICEGFzc2V0IGlkIHBheW1lbnQFB0Fzc2V0SW4JAMwIAgkBDEludGVnZXJFbnRyeQICC2Ftb3VudCBwYWlkBQhBbW91bnRJbgkAzAgCCQEMSW50ZWdlckVudHJ5AgIkYW1vdW50IHBhaWQgcm91bmRlZCB3aXRob3V0IGRlY2ltYWxzCQBpAgUIQW1vdW50SW4FAmQ2CQDMCAIJAQtTdHJpbmdFbnRyeQICE2Fzc2V0IGlkIHRvIHJlY2VpdmUFCEFzc2V0T3V0CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhFhbW91bnQgdG8gcmVjZWl2ZQULdG90YWxHZXRSYXcJAMwIAgkBDEludGVnZXJFbnRyeQICKmFtb3VudCB0byByZWNlaXZlIHJvdW5kZWQgd2l0aG91dCBkZWNpbWFscwkAaQIFC3RvdGFsR2V0UmF3BQJkNgkAzAgCCQEMSW50ZWdlckVudHJ5AgIFcHJpY2UJAGsDBQJkNgUIQW1vdW50SW4FC3RvdGFsR2V0UmF3BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMYmFsYW5jZV9pbmZvAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIEVVNEQwkAaQIJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAUCZDYJAMwIAgkBDEludGVnZXJFbnRyeQICBFVTRFQJAGkCCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQFAmQ2CQDMCAIJAQxJbnRlZ2VyRW50cnkCAglVU0QgdG90YWwJAGkCCQBkAgkBDWdldEFjY0JhbGFuY2UBBQRhbUlkCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQFAmQ2BQNuaWwA5q6qEw==", "height": 4100711, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HBUbQKk3fMkUsAK3pkCboEQbZPBw3UiRDvEqbN3kuTmo Next: EZCjkza62bbi7pa81tMviK9DDB2DfRuH8atoTkKRq3J6 Diff:
OldNewDifferences
188188
189189
190190 @Callable(i)
191-func swap (amountOutMin,AssetOut) = if (if ((isShutdown() == true))
191+func swap (amountOutMin) = if (if ((isShutdown() == true))
192192 then (i.caller != Address(base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk'))
193193 else false)
194194 then throw("contract is shutdown")
201201 let isReverse = if ((assetIn == amId))
202202 then false
203203 else true
204- let $t056286008 = if ((isReverse == false))
204+ let AssetOut = if ((assetIn == amId))
205+ then prId
206+ else amId
207+ let $t056696049 = if ((isReverse == false))
205208 then {
206209 let assetOut = prId
207210 let poolAmountInBalance = (toBigInt(getAccBalance(amId)) + toBigInt(cleanAmountIn))
212215 let poolAmountInBalance = (toBigInt(getAccBalance(prId)) + toBigInt(cleanAmountIn))
213216 $Tuple2(assetOut, poolAmountInBalance)
214217 }
215- let assetOut = $t056286008._1
216- let poolAmountInBalance = $t056286008._2
218+ let assetOut = $t056696049._1
219+ let poolAmountInBalance = $t056696049._2
217220 let xp = if ((isReverse == false))
218221 then [(toBigInt(getAccBalance(amId)) - toBigInt(value(i.payments[0]).amount)), toBigInt(getAccBalance(prId))]
219222 else [toBigInt(getAccBalance(amId)), (toBigInt(getAccBalance(prId)) - toBigInt(value(i.payments[0]).amount))]
276279 let isReverse = if ((assetIn == amId))
277280 then false
278281 else true
279- let $t079828362 = if ((isReverse == false))
282+ let $t080238403 = if ((isReverse == false))
280283 then {
281284 let assetOut = prId
282285 let poolAmountInBalance = (toBigInt(getAccBalance(amId)) + toBigInt(cleanAmountIn))
287290 let poolAmountInBalance = (toBigInt(getAccBalance(prId)) + toBigInt(cleanAmountIn))
288291 $Tuple2(assetOut, poolAmountInBalance)
289292 }
290- let assetOut = $t079828362._1
291- let poolAmountInBalance = $t079828362._2
293+ let assetOut = $t080238403._1
294+ let poolAmountInBalance = $t080238403._2
292295 let xp = if ((isReverse == false))
293296 then [(toBigInt(getAccBalance(amId)) - toBigInt(value(i.payments[0]).amount)), toBigInt(getAccBalance(prId))]
294297 else [toBigInt(getAccBalance(amId)), (toBigInt(getAccBalance(prId)) - toBigInt(value(i.payments[0]).amount))]
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let invoker = Address(base58'3P4AdC9J6MzTEi2LL9xgQN8EimMnbk4d6Nt')
55
66 let USDTdapp = Address(base58'3PQtT2o7g8HmcZLGodx4L7YDe7ngb26wjYk')
77
88 let USDCdapp = Address(base58'3PLrr8LpfYjUadnEQ1ov61uMWHdMopUCNAm')
99
1010 let zeroBigInt = toBigInt(0)
1111
1212 let big0 = toBigInt(0)
1313
1414 let big1 = toBigInt(1)
1515
1616 let big2 = toBigInt(2)
1717
1818 let big3 = toBigInt(3)
1919
2020 let big4 = toBigInt(4)
2121
2222 let wavesString = "WAVES"
2323
2424 let Amult = "100"
2525
2626 let keySelectorIsShutdown = "selector_is_shutdown"
2727
2828 let amId = "3ayH3PhWMkhFsySsUVcC8BvFf1QyxGB5BZuTPyVtmP4v"
2929
3030 let prId = "G5WWWzzVsWRyzGf32xojbnfp7gXbWrgqJT8RcVWEfLmC"
3131
3232 let A = "2000"
3333
3434 let fee = 1
3535
3636 let feeScale = 10000
3737
3838 let d6 = 1000000
3939
4040 func assetIdToString (input) = if ((input == unit))
4141 then wavesString
4242 else toBase58String(value(input))
4343
4444
4545 func absBigInt (val) = if ((zeroBigInt > val))
4646 then -(val)
4747 else val
4848
4949
5050 func getAccBalance (assetId) = if ((assetId == amId))
5151 then (assetBalance(this, fromBase58String(assetId)) + getIntegerValue(USDCdapp, ("USER_LP__" + toString(this))))
5252 else (assetBalance(this, fromBase58String(assetId)) + getIntegerValue(USDTdapp, ("USER_LP__" + toString(this))))
5353
5454
5555 func parseAssetId (input) = if ((input == wavesString))
5656 then unit
5757 else fromBase58String(input)
5858
5959
6060 func getD (xp) = {
6161 let xp0 = xp[0]
6262 let xp1 = xp[1]
6363 let s = (xp0 + xp1)
6464 if ((s == big0))
6565 then big0
6666 else {
6767 let a = parseIntValue(A)
6868 let ann = (a * 2)
6969 let p = fraction(xp0, xp1, big1)
7070 let xp0_xp1_n_n = fraction(p, big4, big1)
7171 let ann_s = fraction(toBigInt(ann), s, big1)
7272 let ann_1 = toBigInt((ann - 1))
7373 func calcDNext (d) = {
7474 let dd = fraction(d, d, big1)
7575 let ddd = fraction(dd, d, big1)
7676 let dp = fraction(ddd, big1, xp0_xp1_n_n)
7777 fraction((ann_s + fraction(dp, big2, big1)), d, (fraction(ann_1, d, big1) + fraction(big3, dp, big1)))
7878 }
7979
8080 func calc (acc,i) = if (acc._2)
8181 then acc
8282 else {
8383 let d = acc._1
8484 let dNext = calcDNext(d)
8585 let dDiffRaw = (dNext - value(d))
8686 let dDiff = if ((big0 > dDiffRaw))
8787 then -(dDiffRaw)
8888 else dDiffRaw
8989 if ((big1 >= dDiff))
9090 then $Tuple2(dNext, true)
9191 else $Tuple2(dNext, false)
9292 }
9393
9494 let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
9595 let $t025612609 = {
9696 let $l = arr
9797 let $s = size($l)
9898 let $acc0 = $Tuple2(s, false)
9999 func $f0_1 ($a,$i) = if (($i >= $s))
100100 then $a
101101 else calc($a, $l[$i])
102102
103103 func $f0_2 ($a,$i) = if (($i >= $s))
104104 then $a
105105 else throw("List size exceeds 17")
106106
107107 $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)
108108 }
109109 let d = $t025612609._1
110110 let found = $t025612609._2
111111 if (found)
112112 then d
113113 else throw(("D calculation error, D = " + toString(d)))
114114 }
115115 }
116116
117117
118118 func getY (isReverse,D,poolAmountInBalance) = {
119119 let n = big2
120120 let aPrecision = parseBigIntValue(Amult)
121121 let a = (parseBigIntValue(A) * aPrecision)
122122 let xp = if ((isReverse == false))
123123 then [(toBigInt(getAccBalance(amId)) + poolAmountInBalance), toBigInt(getAccBalance(prId))]
124124 else [(toBigInt(getAccBalance(prId)) + poolAmountInBalance), toBigInt(getAccBalance(amId))]
125125 let x = xp[0]
126126 let s = x
127127 let ann = (a * n)
128128 let c = (((((D * D) / (x * n)) * D) * aPrecision) / (ann * n))
129129 let b = ((s + ((D * aPrecision) / ann)) - D)
130130 func calc (acc,cur) = {
131131 let $t042074227 = acc
132132 let y = $t042074227._1
133133 let found = $t042074227._2
134134 if ((found != unit))
135135 then acc
136136 else {
137137 let yNext = (((y * y) + c) / ((big2 * y) + b))
138138 let yDiff = absBigInt((yNext - value(y)))
139139 if ((big1 >= yDiff))
140140 then $Tuple2(yNext, cur)
141141 else $Tuple2(yNext, unit)
142142 }
143143 }
144144
145145 let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
146146 let $t045584605 = {
147147 let $l = arr
148148 let $s = size($l)
149149 let $acc0 = $Tuple2(D, unit)
150150 func $f0_1 ($a,$i) = if (($i >= $s))
151151 then $a
152152 else calc($a, $l[$i])
153153
154154 func $f0_2 ($a,$i) = if (($i >= $s))
155155 then $a
156156 else throw("List size exceeds 15")
157157
158158 $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)
159159 }
160160 let y = $t045584605._1
161161 let found = $t045584605._2
162162 if ((found != unit))
163163 then y
164164 else throw(("Y calculation error, Y = " + toString(y)))
165165 }
166166
167167
168168 func isShutdown () = match getBoolean(this, "is_shutdown") {
169169 case x: Boolean =>
170170 x
171171 case _ =>
172172 false
173173 }
174174
175175
176176 @Callable(i)
177177 func shutdown (shutdown) = if ((i.caller == this))
178178 then [BooleanEntry("is_shutdown", shutdown)]
179179 else throw("admin only")
180180
181181
182182
183183 @Callable(i)
184184 func shutdownSelector (shutdown) = if ((i.caller == this))
185185 then [BooleanEntry(keySelectorIsShutdown, shutdown)]
186186 else throw("admin only")
187187
188188
189189
190190 @Callable(i)
191-func swap (amountOutMin,AssetOut) = if (if ((isShutdown() == true))
191+func swap (amountOutMin) = if (if ((isShutdown() == true))
192192 then (i.caller != Address(base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk'))
193193 else false)
194194 then throw("contract is shutdown")
195195 else {
196196 let pmt = value(i.payments[0])
197197 let amountIn = value(i.payments[0].amount)
198198 let feePoolAmount = fraction(amountIn, fee, feeScale)
199199 let cleanAmountIn = (amountIn - feePoolAmount)
200200 let assetIn = assetIdToString(pmt.assetId)
201201 let isReverse = if ((assetIn == amId))
202202 then false
203203 else true
204- let $t056286008 = if ((isReverse == false))
204+ let AssetOut = if ((assetIn == amId))
205+ then prId
206+ else amId
207+ let $t056696049 = if ((isReverse == false))
205208 then {
206209 let assetOut = prId
207210 let poolAmountInBalance = (toBigInt(getAccBalance(amId)) + toBigInt(cleanAmountIn))
208211 $Tuple2(assetOut, poolAmountInBalance)
209212 }
210213 else {
211214 let assetOut = amId
212215 let poolAmountInBalance = (toBigInt(getAccBalance(prId)) + toBigInt(cleanAmountIn))
213216 $Tuple2(assetOut, poolAmountInBalance)
214217 }
215- let assetOut = $t056286008._1
216- let poolAmountInBalance = $t056286008._2
218+ let assetOut = $t056696049._1
219+ let poolAmountInBalance = $t056696049._2
217220 let xp = if ((isReverse == false))
218221 then [(toBigInt(getAccBalance(amId)) - toBigInt(value(i.payments[0]).amount)), toBigInt(getAccBalance(prId))]
219222 else [toBigInt(getAccBalance(amId)), (toBigInt(getAccBalance(prId)) - toBigInt(value(i.payments[0]).amount))]
220223 let D = getD(xp)
221224 let y = getY(isReverse, D, toBigInt(0))
222225 let dy = ((toBigInt(getAccBalance(AssetOut)) - y) - toBigInt(1))
223226 let totalGetRaw = max([0, toInt(dy)])
224227 let checkMin = if ((totalGetRaw >= amountOutMin))
225228 then true
226229 else throw("Exchange result is fewer coins than expected")
227230 if ((checkMin == checkMin))
228231 then {
229232 let newXp = if ((isReverse == false))
230233 then [(toBigInt(getAccBalance(amId)) + toBigInt(feePoolAmount)), (toBigInt(getAccBalance(prId)) - dy)]
231234 else [(toBigInt(getAccBalance(amId)) - dy), (toBigInt(getAccBalance(prId)) + toBigInt(feePoolAmount))]
232235 let newD = getD(newXp)
233236 let checkD = if ((newD >= D))
234237 then true
235238 else throw("new D is fewer error")
236239 if ((checkD == checkD))
237240 then {
238241 let unstake = if ((AssetOut == amId))
239242 then invoke(USDCdapp, "unstake", [totalGetRaw], nil)
240243 else invoke(USDTdapp, "unstake", [totalGetRaw], nil)
241244 if ((unstake == unstake))
242245 then {
243246 let stake = if ((AssetOut == amId))
244247 then invoke(USDTdapp, "stake", nil, [AttachedPayment(fromBase58String(prId), assetBalance(this, fromBase58String(prId)))])
245248 else invoke(USDCdapp, "stake", nil, [AttachedPayment(fromBase58String(amId), assetBalance(this, fromBase58String(amId)))])
246249 if ((stake == stake))
247250 then {
248251 let selector = if ((getBoolean(this, keySelectorIsShutdown) == true))
249252 then unit
250253 else invoke(invoker, "selector", nil, nil)
251254 if ((selector == selector))
252255 then [ScriptTransfer(i.caller, totalGetRaw, parseAssetId(assetOut))]
253256 else throw("Strict value is not equal to itself.")
254257 }
255258 else throw("Strict value is not equal to itself.")
256259 }
257260 else throw("Strict value is not equal to itself.")
258261 }
259262 else throw("Strict value is not equal to itself.")
260263 }
261264 else throw("Strict value is not equal to itself.")
262265 }
263266
264267
265268
266269 @Callable(i)
267270 func readSwap (AssetIn,AmountIn,AssetOut) = if (if ((isShutdown() == true))
268271 then (i.caller != Address(base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk'))
269272 else false)
270273 then throw("contract is shutdown")
271274 else {
272275 let amountIn = AmountIn
273276 let feePoolAmount = fraction(amountIn, fee, feeScale)
274277 let cleanAmountIn = (amountIn - feePoolAmount)
275278 let assetIn = AssetIn
276279 let isReverse = if ((assetIn == amId))
277280 then false
278281 else true
279- let $t079828362 = if ((isReverse == false))
282+ let $t080238403 = if ((isReverse == false))
280283 then {
281284 let assetOut = prId
282285 let poolAmountInBalance = (toBigInt(getAccBalance(amId)) + toBigInt(cleanAmountIn))
283286 $Tuple2(assetOut, poolAmountInBalance)
284287 }
285288 else {
286289 let assetOut = amId
287290 let poolAmountInBalance = (toBigInt(getAccBalance(prId)) + toBigInt(cleanAmountIn))
288291 $Tuple2(assetOut, poolAmountInBalance)
289292 }
290- let assetOut = $t079828362._1
291- let poolAmountInBalance = $t079828362._2
293+ let assetOut = $t080238403._1
294+ let poolAmountInBalance = $t080238403._2
292295 let xp = if ((isReverse == false))
293296 then [(toBigInt(getAccBalance(amId)) - toBigInt(value(i.payments[0]).amount)), toBigInt(getAccBalance(prId))]
294297 else [toBigInt(getAccBalance(amId)), (toBigInt(getAccBalance(prId)) - toBigInt(value(i.payments[0]).amount))]
295298 let D = getD(xp)
296299 let y = getY(isReverse, D, toBigInt(0))
297300 let dy = ((toBigInt(getAccBalance(AssetOut)) - y) - toBigInt(1))
298301 let totalGetRaw = max([0, toInt(dy)])
299302 let newXp = if ((isReverse == false))
300303 then [(toBigInt(getAccBalance(amId)) + toBigInt(feePoolAmount)), (toBigInt(getAccBalance(prId)) - dy)]
301304 else [(toBigInt(getAccBalance(amId)) - dy), (toBigInt(getAccBalance(prId)) + toBigInt(feePoolAmount))]
302305 let newD = getD(newXp)
303306 let checkD = if ((newD >= D))
304307 then true
305308 else throw("new D is fewer error")
306309 if ((checkD == checkD))
307310 then [StringEntry("asset id payment", AssetIn), IntegerEntry("amount paid", AmountIn), IntegerEntry("amount paid rounded without decimals", (AmountIn / d6)), StringEntry("asset id to receive", AssetOut), IntegerEntry("amount to receive", totalGetRaw), IntegerEntry("amount to receive rounded without decimals", (totalGetRaw / d6)), IntegerEntry("price", fraction(d6, AmountIn, totalGetRaw))]
308311 else throw("Strict value is not equal to itself.")
309312 }
310313
311314
312315
313316 @Callable(i)
314317 func balance_info () = [IntegerEntry("USDC", (getAccBalance(amId) / d6)), IntegerEntry("USDT", (getAccBalance(prId) / d6)), IntegerEntry("USD total", ((getAccBalance(amId) + getAccBalance(prId)) / d6))]
315318
316319

github/deemru/w8io/3ef1775 
41.07 ms