tx · Am6Lqm7vECUUwGZVXSHZsW9aZ79xuiUWq6s1VLJL3zXb 3P6QCup9ZgsBg8LLzk7dCa8MnCZBCLYQoXP: -0.01200000 Waves 2024.02.24 10:37 [4055824] smart account 3P6QCup9ZgsBg8LLzk7dCa8MnCZBCLYQoXP > SELF 0.00000000 Waves
{ "type": 13, "id": "Am6Lqm7vECUUwGZVXSHZsW9aZ79xuiUWq6s1VLJL3zXb", "fee": 1200000, "feeAssetId": null, "timestamp": 1708760351547, "version": 2, "chainId": 87, "sender": "3P6QCup9ZgsBg8LLzk7dCa8MnCZBCLYQoXP", "senderPublicKey": "Gz4W9Y9UMEEZzMBu6GHyXY7BRsLXdbzFDwRPak18TW7u", "proofs": [ "39EfQGycFULwTHyBQLKmkjJyWQRicYduZfBkzBDTwNzfHDFTSz9JYEQtraX5xfr7N7yzfAxPumzgYpj8zbVQPwmR" ], "script": "base64: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JGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAANGZWUJAQ10cnlHZXRJbnRlZ2VyAQIKc3RhdGljX2ZlZQAGU2NhbGU4AIDC1y8ACEZlZVNjYWxlAJBOARJjYWxjdWxhdGVPdXRBbW91bnQFCEFtb3VudEluB2Fzc2V0SW4IYXNzZXRPdXQJQmFsYW5jZUluCkJhbGFuY2VPdXQEB0luZGV4SW4JAQV2YWx1ZQEJAM8IAgUIYXNzZXRJZHMFB2Fzc2V0SW4ECEluZGV4T3V0CQEFdmFsdWUBCQDPCAIFCGFzc2V0SWRzBQhhc3NldE91dAMJAAACBQdJbmRleEluBQhJbmRleE91dAUIQW1vdW50SW4JAG4EBQpCYWxhbmNlT3V0CQBlAgkAaAIFBlNjYWxlOAUGU2NhbGU4CQCgAwEJAHYGCQC9AgQJALYCAQUJQmFsYW5jZUluCQC2AgEJAGgCBQZTY2FsZTgFBlNjYWxlOAkAtgIBCQBkAgUJQmFsYW5jZUluBQhBbW91bnRJbgUGSEFMRlVQABAJALYCAQkAawMJAJEDAgUNQXNzZXRzV2VpZ2h0cwUHSW5kZXhJbgCQTgkAkQMCBQ1Bc3NldHNXZWlnaHRzBQhJbmRleE91dAAEABAFB0NFSUxJTkcJAGgCBQZTY2FsZTgFBlNjYWxlOAUERE9XTgEOY2FsY3VsYXRlU1JhdGUABA9zdGFraW5nRW1pc3Npb24EByRtYXRjaDAJAPwHBAkBB0FkZHJlc3MBARoBVxH9XmeRLmedFwcQVQ8N81O/JVRxjvd47gIXZ2V0U3Rha2luZ0Jsb2NrRW1pc3Npb24JAMwIAgcFA25pbAUDbmlsAwkAAQIFByRtYXRjaDACA0ludAQCaW4FByRtYXRjaDAFAmluCQACAQIKYmFkIGludm9rZQMJAAACBQ9zdGFraW5nRW1pc3Npb24FD3N0YWtpbmdFbWlzc2lvbgQObGFzdENoZWNrU1JhdGUJAQ50cnlHZXRJbnRlZ2VyMgIFB3BsdXRvU0MCFWdsb2JhbF9sYXN0Q2hlY2tTUmF0ZQQMc1BsdXRvQW1vdW50CQEOdHJ5R2V0SW50ZWdlcjICBQdwbHV0b1NDAg1nbG9iYWxfc1BsdXRvBA9sYXN0Q2hlY2tIZWlnaHQJAQ50cnlHZXRJbnRlZ2VyMgIFB3BsdXRvU0MCG2dsb2JhbF9sYXN0Q2hlY2tTUmF0ZUhlaWdodAQGYmxvY2tzCQBlAgUGaGVpZ2h0BQ9sYXN0Q2hlY2tIZWlnaHQDCQAAAgUMc1BsdXRvQW1vdW50AAAFBlNjYWxlOAkAZAIJAQ50cnlHZXRJbnRlZ2VyMgIFB3BsdXRvU0MCFWdsb2JhbF9sYXN0Q2hlY2tTUmF0ZQkAawMJAGgCBQZibG9ja3MFBlNjYWxlOAUPc3Rha2luZ0VtaXNzaW9uBQxzUGx1dG9BbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BFWNhbGN1bGF0ZVN0YWtlZEFtb3VudAAEBmFtb3VudAkBDnRyeUdldEludGVnZXIyAgUHcGx1dG9TQwkArAICCQClCAEFBHRoaXMCB19zUGx1dG8JAGsDBQZhbW91bnQJAQ5jYWxjdWxhdGVTUmF0ZQAFBlNjYWxlOAAMcHV6emxlU3Rha2VkCQEOdHJ5R2V0SW50ZWdlcjICBQ1wdXp6bGVTdGFraW5nCQCsAgIJAKUIAQUEdGhpcwIHX3N0YWtlZAALd2F2ZXNJblN3b3AJAGsDCQEOdHJ5R2V0SW50ZWdlcjICBQZzd29wU0MCD0FfYXNzZXRfYmFsYW5jZQkBDnRyeUdldEludGVnZXIyAgUGc3dvcFNDCQCsAgIJAKwCAgIkM1BIYU5nb21Ca3J2RUwyUW51SmFyUVZKYTcxd2p3OXFpcUdfCQClCAEFBHRoaXMCFF9zaGFyZV90b2tlbnNfbG9ja2VkCQEOdHJ5R2V0SW50ZWdlcjICBQZzd29wU0MCEnNoYXJlX2Fzc2V0X3N1cHBseQABQQkBDnRyeUdldEludGVnZXIyAgUGc3dvcFNDAg9BX2Fzc2V0X2JhbGFuY2UAB215U2hhcmUJAQ50cnlHZXRJbnRlZ2VyMgIFBnN3b3BTQwkArAICCQCsAgICJDNQSGFOZ29tQmtydkVMMlFudUphclFWSmE3MXdqdzlxaXFHXwkApQgBBQR0aGlzAhRfc2hhcmVfdG9rZW5zX2xvY2tlZAAKdG90YWxTaGFyZQkBDnRyeUdldEludGVnZXIyAgUGc3dvcFNDAhJzaGFyZV9hc3NldF9zdXBwbHkAAUIJAQ50cnlHZXRJbnRlZ2VyMgIFBnN3b3BTQwIPQl9hc3NldF9iYWxhbmNlAAl4dG5JblN3b3AJAGsDCQEOdHJ5R2V0SW50ZWdlcjICBQZzd29wU0MCD0JfYXNzZXRfYmFsYW5jZQkBDnRyeUdldEludGVnZXIyAgUGc3dvcFNDCQCsAgIJAKwCAgIkM1BIYU5nb21Ca3J2RUwyUW51SmFyUVZKYTcxd2p3OXFpcUdfCQClCAEFBHRoaXMCFF9zaGFyZV90b2tlbnNfbG9ja2VkCQEOdHJ5R2V0SW50ZWdlcjICBQZzd29wU0MCEnNoYXJlX2Fzc2V0X3N1cHBseQEPZ2V0VG9rZW5CYWxhbmNlAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAXQFByRtYXRjaDAJAGQCCQDwBwIFBHRoaXMFAXQDCQAAAgUHYXNzZXRJZAUFcGx1dG8JARVjYWxjdWxhdGVTdGFrZWRBbW91bnQACQBkAgAAAwkAAAIFB2Fzc2V0SWQFBnB1enpsZQUMcHV6emxlU3Rha2VkCQBkAgAAAwkAAAIFB2Fzc2V0SWQFA3h0bgUJeHRuSW5Td29wAAAJAGQCCAkA7wcBBQR0aGlzB3JlZ3VsYXIFC3dhdmVzSW5Td29wAQNzdW0CBWFjY3VtAW4JAGQCBQVhY2N1bQkBDXBhcnNlSW50VmFsdWUBBQFuAQppc1NodXRkb3duAAQHJG1hdGNoMAkAmwgCBQR0aGlzAgtpc19zaHV0ZG93bgMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAF4BQckbWF0Y2gwBQF4BwYBaQEIc2h1dGRvd24BCHNodXRkb3duAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgILaXNfc2h1dGRvd24FCHNodXRkb3duBQNuaWwJAAIBAgphZG1pbiBvbmx5AWkBB3By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c2l6ZSBleGNlZWRzIDEwCQEFJGY2XzICCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECCQEFJGY2XzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoJAMwIAgkBC1N0cmluZ0VudHJ5AgIPc3RhdGljX3Rva2VuSWRzBQthc3NldElkc1N0cgkAzAgCCQELU3RyaW5nRW50cnkCAhNzdGF0aWNfdG9rZW5XZWlnaHRzBQ9hc3NldFdlaWdodHNTdHIJAMwIAgkBDEludGVnZXJFbnRyeQICE3N0YXRpY190b2tlbnNBbW91bnQJAJADAQUKYXNzZXRJZHNMaQkAzAgCCQEMSW50ZWdlckVudHJ5AgIKc3RhdGljX2ZlZQUDZmVlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEEc3dhcAIIYXNzZXRPdXQHbWluaW11bQMDCQAAAgkBCmlzU2h1dGRvd24ABgkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFX6WYhKtIG4NwWiusIWpfUn51io3/3wlpMBwkAAgECFGNvbnRyYWN0IGlzIHNodXRkb3duBANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAiFwbGVhc2UgYXR0YWNoIGV4YWN0bHkgb25lIHBheW1lbnQECEFtb3VudEluCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQHQXNzZXRJbggFA3BtdAdhc3NldElkBAhBc3NldE91dAkBDWdldEFzc2V0Qnl0ZXMBBQhhc3NldE91dAQOQXNzZXRJbkJhbGFuY2UJAQ9nZXRUb2tlbkJhbGFuY2UBBQdBc3NldEluBA9Bc3NldE91dEJhbGFuY2UJAQ9nZXRUb2tlbkJhbGFuY2UBBQhBc3NldE91dAQLZmVlQW1vdW50SW4JAGsDBQhBbW91bnRJbgUDRmVlBQhGZWVTY2FsZQQNY2xlYW5BbW91bnRJbgkAZQIFCEFtb3VudEluBQtmZWVBbW91bnRJbgQJQW1vdW50T3V0CQESY2FsY3VsYXRlT3V0QW1vdW50BQUNY2xlYW5BbW91bnRJbgUHQXNzZXRJbgUIQXNzZXRPdXQFDkFzc2V0SW5CYWxhbmNlBQ9Bc3NldE91dEJhbGFuY2UEA3VwbAMJAAACBQhBc3NldE91dAUFcGx1dG8JAPwHBAUHcGx1dG9TQwIHdW5zdGFrZQkAzAgCBQlBbW91bnRPdXQFA25pbAUDbmlsBQR1bml0AwkAAAIFA3VwbAUDdXBsBANzcGwDCQAAAgUHQXNzZXRJbgUFcGx1dG8JAPwHBAUHcGx1dG9TQwIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUFcGx1dG8FCEFtb3VudEluBQNuaWwFBHVuaXQDCQAAAgUDc3BsBQNzcGwEA2NwdQMJAAACBQhBc3NldE91dAUGcHV6emxlCQD8BwQFDXB1enpsZVN0YWtpbmcCC2NsYWltUmV3YXJkBQNuaWwFA25pbAUEdW5pdAMJAAACBQNjcHUFA2NwdQQDdXB1AwkAAAIFCEFzc2V0T3V0BQZwdXp6bGUJAPwHBAUNcHV6emxlU3Rha2luZwIHdW5TdGFrZQkAzAgCCQBlAgUJQW1vdW50T3V0CQDwBwIFBHRoaXMFBnB1enpsZQUDbmlsBQNuaWwFBHVuaXQDCQAAAgUDdXB1BQN1cHUEA3NwdQMJAAACBQdBc3NldEluBQZwdXp6bGUJAPwHBAUNcHV6emxlU3Rha2luZwIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUGcHV6emxlCQDwBwIFBHRoaXMFBnB1enpsZQUDbmlsBQR1bml0AwkAAAIFA3NwdQUDc3B1BBhzaGFyZUFtb3VudFdpdGhkcmF3V2F2ZXMJAG4ECQBlAgUJQW1vdW50T3V0CAkA7wcBBQR0aGlzB3JlZ3VsYXIAAQkAawMJAQ50cnlHZXRJbnRlZ2VyMgIFBnN3b3BTQwIPQV9hc3NldF9iYWxhbmNlAAEJAQ50cnlHZXRJbnRlZ2VyMgIFBnN3b3BTQwISc2hhcmVfYXNzZXRfc3VwcGx5BQdDRUlMSU5HBAN1d3MDCQAAAgUIQXNzZXRPdXQFBXdhdmVzCQD8BwQFBnN3b3BTQwIMY2FsbEZ1bmN0aW9uCQDMCAICCHdpdGhkcmF3CQDMCAIJAMwIAgkApAMBBRhzaGFyZUFtb3VudFdpdGhkcmF3V2F2ZXMFA25pbAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUDdXdzBQN1d3MEFnNoYXJlQW1vdW50V2l0aGRyYXdYdG4JAG4ECQBlAgUJQW1vdW50T3V0CQDwBwIFBHRoaXMFA3h0bgABCQBrAwkBDnRyeUdldEludGVnZXIyAgUGc3dvcFNDAg9CX2Fzc2V0X2JhbGFuY2UAAQkBDnRyeUdldEludGVnZXIyAgUGc3dvcFNDAhJzaGFyZV9hc3NldF9zdXBwbHkFB0NFSUxJTkcEA3V4cwMJAAACBQhBc3NldE91dAUDeHRuCQD8BwQFBnN3b3BTQwIMY2FsbEZ1bmN0aW9uCQDMCAICCHdpdGhkcmF3CQDMCAIJAMwIAgkApAMBBRZzaGFyZUFtb3VudFdpdGhkcmF3WHRuBQNuaWwFA25pbAUDbmlsBQR1bml0AwkAAAIFA3V4cwUDdXhzBARzd3hzAwMDAwkBAiE9AgUIQXNzZXRPdXQFA3h0bgkBAiE9AgUIQXNzZXRPdXQFBXdhdmVzBwkAZgIJAQ9nZXRUb2tlbkJhbGFuY2UBBQN4dG4AAAcJAGYCCQEPZ2V0VG9rZW5CYWxhbmNlAQUFd2F2ZXMAAAcJAPwHBAUGc3dvcFNDAgxjYWxsRnVuY3Rpb24JAMwIAgIWcmVwbGVuaXNoV2l0aFR3b1Rva2VucwkAzAgCAgR0cnVlCQDMCAICATAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAgJAO8HAQUEdGhpcwdyZWd1bGFyCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQN4dG4JAPAHAgUEdGhpcwUDeHRuBQNuaWwFBHVuaXQDCQAAAgUEc3d4cwUEc3d4cwMJAGYCBQdtaW5pbXVtBQlBbW91bnRPdXQJAAIBAidhbW91bnQgdG8gcmVjZWl2ZSBpcyBsb3dlciB0aGFuIG1pbmltdW0DCQAAAgUIQXNzZXRPdXQFB0Fzc2V0SW4JAAIBAhh0aGlzIHN3YXAgaXMgbm90IGFsbG93ZWQDCQBmAgAACQBlAgUPQXNzZXRPdXRCYWxhbmNlBQlBbW91bnRPdXQJAAIBAhNzd2FwIHNtYWxsZXIgYW1vdW50AwkBCmlzU2h1dGRvd24ACQACAQITY29udHJhY3QgaXMgb24gc3RvcAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCUFtb3VudE91dAUIQXNzZXRPdXQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxzdGFydEJhbGFuY2UAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgkAzAgCCQEMSW50ZWdlckVudHJ5AgULa2V5QnVybnh0blMJAQ9nZXRUb2tlbkJhbGFuY2UBBQdidXJueHRuCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlQbHV0b1MJAQ9nZXRUb2tlbkJhbGFuY2UBBQVwbHV0bwkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa2V5UHV6emxlUwkBD2dldFRva2VuQmFsYW5jZQEFBnB1enpsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5V2F2ZXNTCQEPZ2V0VG9rZW5CYWxhbmNlAQUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5V2hpcmxwb29sUwkBD2dldFRva2VuQmFsYW5jZQEFCXdoaXJscG9vbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUIa2V5Um9tZVMJAQ9nZXRUb2tlbkJhbGFuY2UBBQRyb21lCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQdrZXlYdG5TCQEPZ2V0VG9rZW5CYWxhbmNlAQUDeHRuBQNuaWwBaQEUY3VycmVudEJhbGFuY2VQcm9maXQAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgkAzAgCCQEMSW50ZWdlckVudHJ5AgIYQlVSTi1YVE4gY3VycmVudCBiYWxhbmNlCQEPZ2V0VG9rZW5CYWxhbmNlAQUHYnVybnh0bgkAzAgCCQEMSW50ZWdlckVudHJ5AgIVUExVVE8gY3VycmVudCBiYWxhbmNlCQEPZ2V0VG9rZW5CYWxhbmNlAQUFcGx1dG8JAMwIAgkBDEludGVnZXJFbnRyeQICFlBVWlpMRSBjdXJyZW50IGJhbGFuY2UJAQ9nZXRUb2tlbkJhbGFuY2UBBQZwdXp6bGUJAMwIAgkBDEludGVnZXJFbnRyeQICFVdBVkVTIGN1cnJlbnQgYmFsYW5jZQkBD2dldFRva2VuQmFsYW5jZQEFBXdhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhlXSElSTFBPT0wgY3VycmVudCBiYWxhbmNlCQEPZ2V0VG9rZW5CYWxhbmNlAQUJd2hpcmxwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhRST01FIGN1cnJlbnQgYmFsYW5jZQkBD2dldFRva2VuQmFsYW5jZQEFBHJvbWUJAMwIAgkBDEludGVnZXJFbnRyeQICE1hUTiBjdXJyZW50IGJhbGFuY2UJAQ9nZXRUb2tlbkJhbGFuY2UBBQN4dG4JAMwIAgkBDEludGVnZXJFbnRyeQICD0JVUk4tWFROIHByb2ZpdAkAZQIJAQ9nZXRUb2tlbkJhbGFuY2UBBQdidXJueHRuCQENdHJ5R2V0SW50ZWdlcgEFC2tleUJ1cm54dG5TCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgxQTFVUTyBwcm9maXQJAGUCCQEPZ2V0VG9rZW5CYWxhbmNlAQUFcGx1dG8JAQ10cnlHZXRJbnRlZ2VyAQUJa2V5UGx1dG9TCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1QVVpaTEUgcHJvZml0CQBlAgkBD2dldFRva2VuQmFsYW5jZQEFBnB1enpsZQkBDXRyeUdldEludGVnZXIBBQprZXlQdXp6bGVTCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgtXQVZFUyBwcm9mdAkAZQIJAQ9nZXRUb2tlbkJhbGFuY2UBBQV3YXZlcwkBDXRyeUdldEludGVnZXIBBQlrZXlXYXZlc1MJAMwIAgkBDEludGVnZXJFbnRyeQICEFdISVJMUE9PTCBwcm9maXQJAGUCCQEPZ2V0VG9rZW5CYWxhbmNlAQUJd2hpcmxwb29sCQENdHJ5R2V0SW50ZWdlcgEFDWtleVdoaXJscG9vbFMJAMwIAgkBDEludGVnZXJFbnRyeQICC1JPTUUgcHJvZml0CQBlAgkBD2dldFRva2VuQmFsYW5jZQEFBHJvbWUJAQ10cnlHZXRJbnRlZ2VyAQUIa2V5Um9tZVMJAMwIAgkBDEludGVnZXJFbnRyeQICClhUTiBwcm9mdGkJAGUCCQEPZ2V0VG9rZW5CYWxhbmNlAQUDeHRuCQENdHJ5R2V0SW50ZWdlcgEFB2tleVh0blMFA25pbAFpAQljaGVja1N3b3AACQDMCAIJAQxJbnRlZ2VyRW50cnkCAgFBBQFBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAghteSBzaGFyZQUHbXlTaGFyZQkAzAgCCQEMSW50ZWdlckVudHJ5AgILdG90YWwgc2hhcmUFCnRvdGFsU2hhcmUJAMwIAgkBDEludGVnZXJFbnRyeQICAUIFAUIFA25pbABAwHwo", "height": 4055824, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AVWXDfVQ5gV91vi1HDxDwwLcnW4eTDoHGL7LjAfRqUwk Next: J8tJqMFh7eymv9LzwN7tYwxa7R3r2FD1qKC4L2hwyL4m Diff:
Old | New | Differences | |
---|---|---|---|
153 | 153 | let puzzleStaked = tryGetInteger2(puzzleStaking, (toString(this) + "_staked")) | |
154 | 154 | ||
155 | 155 | let wavesInSwop = fraction(tryGetInteger2(swopSC, "A_asset_balance"), tryGetInteger2(swopSC, (("3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG_" + toString(this)) + "_share_tokens_locked")), tryGetInteger2(swopSC, "share_asset_supply")) | |
156 | + | ||
157 | + | let A = tryGetInteger2(swopSC, "A_asset_balance") | |
158 | + | ||
159 | + | let myShare = tryGetInteger2(swopSC, (("3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG_" + toString(this)) + "_share_tokens_locked")) | |
160 | + | ||
161 | + | let totalShare = tryGetInteger2(swopSC, "share_asset_supply") | |
162 | + | ||
163 | + | let B = tryGetInteger2(swopSC, "B_asset_balance") | |
156 | 164 | ||
157 | 165 | let xtnInSwop = fraction(tryGetInteger2(swopSC, "B_asset_balance"), tryGetInteger2(swopSC, (("3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG_" + toString(this)) + "_share_tokens_locked")), tryGetInteger2(swopSC, "share_asset_supply")) | |
158 | 166 | ||
370 | 378 | else [IntegerEntry("BURN-XTN current balance", getTokenBalance(burnxtn)), IntegerEntry("PLUTO current balance", getTokenBalance(pluto)), IntegerEntry("PUZZLE current balance", getTokenBalance(puzzle)), IntegerEntry("WAVES current balance", getTokenBalance(waves)), IntegerEntry("WHIRLPOOL current balance", getTokenBalance(whirlpool)), IntegerEntry("ROME current balance", getTokenBalance(rome)), IntegerEntry("XTN current balance", getTokenBalance(xtn)), IntegerEntry("BURN-XTN profit", (getTokenBalance(burnxtn) - tryGetInteger(keyBurnxtnS))), IntegerEntry("PLUTO profit", (getTokenBalance(pluto) - tryGetInteger(keyPlutoS))), IntegerEntry("PUZZLE profit", (getTokenBalance(puzzle) - tryGetInteger(keyPuzzleS))), IntegerEntry("WAVES proft", (getTokenBalance(waves) - tryGetInteger(keyWavesS))), IntegerEntry("WHIRLPOOL profit", (getTokenBalance(whirlpool) - tryGetInteger(keyWhirlpoolS))), IntegerEntry("ROME profit", (getTokenBalance(rome) - tryGetInteger(keyRomeS))), IntegerEntry("XTN profti", (getTokenBalance(xtn) - tryGetInteger(keyXtnS)))] | |
371 | 379 | ||
372 | 380 | ||
381 | + | ||
382 | + | @Callable(i) | |
383 | + | func checkSwop () = [IntegerEntry("A", A), IntegerEntry("my share", myShare), IntegerEntry("total share", totalShare), IntegerEntry("B", B)] | |
384 | + | ||
385 | + |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let pluto = base58'Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5' | |
5 | 5 | ||
6 | 6 | let xtn = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p' | |
7 | 7 | ||
8 | 8 | let puzzle = base58'HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS' | |
9 | 9 | ||
10 | 10 | let waves = base58'WAVES' | |
11 | 11 | ||
12 | 12 | let burnxtn = base58'3SjxA2YLdfF9fTRbzLm9xFn27C6MW34W1YsdJ6Axefns' | |
13 | 13 | ||
14 | 14 | let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi' | |
15 | 15 | ||
16 | 16 | let rome = base58'AP4Cb5xLYGH6ZigHreCZHoXpQTWDkPsG2BHqfDUx6taJ' | |
17 | 17 | ||
18 | 18 | let plutoSC = Address(base58'3P7dGTVZp8VLDYy3XEaUQbiqfi9cMK1Ly5q') | |
19 | 19 | ||
20 | 20 | let swopSC = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG') | |
21 | 21 | ||
22 | 22 | let puzzleStaking = Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS') | |
23 | 23 | ||
24 | 24 | let keyPlutoS = "PLUTO starting balance" | |
25 | 25 | ||
26 | 26 | let keyXtnS = "XTN starting balance" | |
27 | 27 | ||
28 | 28 | let keyPuzzleS = "PUZZLE starting balance" | |
29 | 29 | ||
30 | 30 | let keyWavesS = "WAVES starting balance" | |
31 | 31 | ||
32 | 32 | let keyBurnxtnS = "BURN-XTN starting balance" | |
33 | 33 | ||
34 | 34 | let keyWhirlpoolS = "WHIRLPOOL starting balance" | |
35 | 35 | ||
36 | 36 | let keyRomeS = "ROME starting balance" | |
37 | 37 | ||
38 | 38 | func tryGetInteger (key) = match getInteger(this, key) { | |
39 | 39 | case b: Int => | |
40 | 40 | b | |
41 | 41 | case _ => | |
42 | 42 | 0 | |
43 | 43 | } | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func tryGetInteger2 (address,key) = match getInteger(address, key) { | |
47 | 47 | case b: Int => | |
48 | 48 | b | |
49 | 49 | case _ => | |
50 | 50 | 0 | |
51 | 51 | } | |
52 | 52 | ||
53 | 53 | ||
54 | 54 | func tryGetString (key) = match getString(this, key) { | |
55 | 55 | case b: String => | |
56 | 56 | b | |
57 | 57 | case _ => | |
58 | 58 | "" | |
59 | 59 | } | |
60 | 60 | ||
61 | 61 | ||
62 | 62 | func getAssetString (assetId) = match assetId { | |
63 | 63 | case b: ByteVector => | |
64 | 64 | toBase58String(b) | |
65 | 65 | case _ => | |
66 | 66 | "WAVES" | |
67 | 67 | } | |
68 | 68 | ||
69 | 69 | ||
70 | 70 | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
71 | 71 | then unit | |
72 | 72 | else fromBase58String(assetIdStr) | |
73 | 73 | ||
74 | 74 | ||
75 | 75 | func addAssetBytesToList (accum,item) = (accum ++ [getAssetBytes(item)]) | |
76 | 76 | ||
77 | 77 | ||
78 | 78 | func addAssetWeightToList (accum,item) = (accum ++ [tryGetInteger((("static_" + getAssetString(item)) + "_weight"))]) | |
79 | 79 | ||
80 | 80 | ||
81 | 81 | let assetIds = { | |
82 | 82 | let $l = split(tryGetString("static_tokenIds"), ",") | |
83 | 83 | let $s = size($l) | |
84 | 84 | let $acc0 = nil | |
85 | 85 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
86 | 86 | then $a | |
87 | 87 | else addAssetBytesToList($a, $l[$i]) | |
88 | 88 | ||
89 | 89 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
90 | 90 | then $a | |
91 | 91 | else throw("List size exceeds 10") | |
92 | 92 | ||
93 | 93 | $f0_2($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) | |
94 | 94 | } | |
95 | 95 | ||
96 | 96 | let AssetsWeights = { | |
97 | 97 | let $l = assetIds | |
98 | 98 | let $s = size($l) | |
99 | 99 | let $acc0 = nil | |
100 | 100 | func $f1_1 ($a,$i) = if (($i >= $s)) | |
101 | 101 | then $a | |
102 | 102 | else addAssetWeightToList($a, $l[$i]) | |
103 | 103 | ||
104 | 104 | func $f1_2 ($a,$i) = if (($i >= $s)) | |
105 | 105 | then $a | |
106 | 106 | else throw("List size exceeds 10") | |
107 | 107 | ||
108 | 108 | $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
109 | 109 | } | |
110 | 110 | ||
111 | 111 | let Fee = tryGetInteger("static_fee") | |
112 | 112 | ||
113 | 113 | let Scale8 = 100000000 | |
114 | 114 | ||
115 | 115 | let FeeScale = 10000 | |
116 | 116 | ||
117 | 117 | func calculateOutAmount (AmountIn,assetIn,assetOut,BalanceIn,BalanceOut) = { | |
118 | 118 | let IndexIn = value(indexOf(assetIds, assetIn)) | |
119 | 119 | let IndexOut = value(indexOf(assetIds, assetOut)) | |
120 | 120 | if ((IndexIn == IndexOut)) | |
121 | 121 | then AmountIn | |
122 | 122 | else fraction(BalanceOut, ((Scale8 * Scale8) - toInt(pow(fraction(toBigInt(BalanceIn), toBigInt((Scale8 * Scale8)), toBigInt((BalanceIn + AmountIn)), HALFUP), 16, toBigInt(fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut])), 4, 16, CEILING))), (Scale8 * Scale8), DOWN) | |
123 | 123 | } | |
124 | 124 | ||
125 | 125 | ||
126 | 126 | func calculateSRate () = { | |
127 | 127 | let stakingEmission = match invoke(Address(base58'3P3a1jssxc2CGdyC7SGbTJc9ZvTjZ5jBMLZ'), "getStakingBlockEmission", [false], nil) { | |
128 | 128 | case in: Int => | |
129 | 129 | in | |
130 | 130 | case _ => | |
131 | 131 | throw("bad invoke") | |
132 | 132 | } | |
133 | 133 | if ((stakingEmission == stakingEmission)) | |
134 | 134 | then { | |
135 | 135 | let lastCheckSRate = tryGetInteger2(plutoSC, "global_lastCheckSRate") | |
136 | 136 | let sPlutoAmount = tryGetInteger2(plutoSC, "global_sPluto") | |
137 | 137 | let lastCheckHeight = tryGetInteger2(plutoSC, "global_lastCheckSRateHeight") | |
138 | 138 | let blocks = (height - lastCheckHeight) | |
139 | 139 | if ((sPlutoAmount == 0)) | |
140 | 140 | then Scale8 | |
141 | 141 | else (tryGetInteger2(plutoSC, "global_lastCheckSRate") + fraction((blocks * Scale8), stakingEmission, sPlutoAmount)) | |
142 | 142 | } | |
143 | 143 | else throw("Strict value is not equal to itself.") | |
144 | 144 | } | |
145 | 145 | ||
146 | 146 | ||
147 | 147 | func calculateStakedAmount () = { | |
148 | 148 | let amount = tryGetInteger2(plutoSC, (toString(this) + "_sPluto")) | |
149 | 149 | fraction(amount, calculateSRate(), Scale8) | |
150 | 150 | } | |
151 | 151 | ||
152 | 152 | ||
153 | 153 | let puzzleStaked = tryGetInteger2(puzzleStaking, (toString(this) + "_staked")) | |
154 | 154 | ||
155 | 155 | let wavesInSwop = fraction(tryGetInteger2(swopSC, "A_asset_balance"), tryGetInteger2(swopSC, (("3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG_" + toString(this)) + "_share_tokens_locked")), tryGetInteger2(swopSC, "share_asset_supply")) | |
156 | + | ||
157 | + | let A = tryGetInteger2(swopSC, "A_asset_balance") | |
158 | + | ||
159 | + | let myShare = tryGetInteger2(swopSC, (("3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG_" + toString(this)) + "_share_tokens_locked")) | |
160 | + | ||
161 | + | let totalShare = tryGetInteger2(swopSC, "share_asset_supply") | |
162 | + | ||
163 | + | let B = tryGetInteger2(swopSC, "B_asset_balance") | |
156 | 164 | ||
157 | 165 | let xtnInSwop = fraction(tryGetInteger2(swopSC, "B_asset_balance"), tryGetInteger2(swopSC, (("3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG_" + toString(this)) + "_share_tokens_locked")), tryGetInteger2(swopSC, "share_asset_supply")) | |
158 | 166 | ||
159 | 167 | func getTokenBalance (assetId) = match assetId { | |
160 | 168 | case t: ByteVector => | |
161 | 169 | (assetBalance(this, t) + (if ((assetId == pluto)) | |
162 | 170 | then calculateStakedAmount() | |
163 | 171 | else (0 + (if ((assetId == puzzle)) | |
164 | 172 | then puzzleStaked | |
165 | 173 | else (0 + (if ((assetId == xtn)) | |
166 | 174 | then xtnInSwop | |
167 | 175 | else 0)))))) | |
168 | 176 | case _ => | |
169 | 177 | (wavesBalance(this).regular + wavesInSwop) | |
170 | 178 | } | |
171 | 179 | ||
172 | 180 | ||
173 | 181 | func sum (accum,n) = (accum + parseIntValue(n)) | |
174 | 182 | ||
175 | 183 | ||
176 | 184 | func isShutdown () = match getBoolean(this, "is_shutdown") { | |
177 | 185 | case x: Boolean => | |
178 | 186 | x | |
179 | 187 | case _ => | |
180 | 188 | false | |
181 | 189 | } | |
182 | 190 | ||
183 | 191 | ||
184 | 192 | @Callable(i) | |
185 | 193 | func shutdown (shutdown) = if ((i.caller == this)) | |
186 | 194 | then [BooleanEntry("is_shutdown", shutdown)] | |
187 | 195 | else throw("admin only") | |
188 | 196 | ||
189 | 197 | ||
190 | 198 | ||
191 | 199 | @Callable(i) | |
192 | 200 | func preInit (assetIdsStr,assetWeightsStr,fee) = if (isShutdown()) | |
193 | 201 | then throw("contract is on stop") | |
194 | 202 | else if ((this != i.caller)) | |
195 | 203 | then throw("admin only") | |
196 | 204 | else if (if ((fee > 500)) | |
197 | 205 | then true | |
198 | 206 | else (1 > fee)) | |
199 | 207 | then throw("fee value must be between 1 and 500 (0.01-5%)") | |
200 | 208 | else { | |
201 | 209 | let sb = invoke(this, "startBalance", nil, nil) | |
202 | 210 | if ((sb == sb)) | |
203 | 211 | then { | |
204 | 212 | let assetIdsStrLi = split(assetIdsStr, ",") | |
205 | 213 | let assetIdsLi = { | |
206 | 214 | let $l = assetIdsStrLi | |
207 | 215 | let $s = size($l) | |
208 | 216 | let $acc0 = nil | |
209 | 217 | func $f4_1 ($a,$i) = if (($i >= $s)) | |
210 | 218 | then $a | |
211 | 219 | else addAssetBytesToList($a, $l[$i]) | |
212 | 220 | ||
213 | 221 | func $f4_2 ($a,$i) = if (($i >= $s)) | |
214 | 222 | then $a | |
215 | 223 | else throw("List size exceeds 10") | |
216 | 224 | ||
217 | 225 | $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
218 | 226 | } | |
219 | 227 | let assetWeightsStrLi = split(assetWeightsStr, ",") | |
220 | 228 | let assetWeightsSum = { | |
221 | 229 | let $l = assetWeightsStrLi | |
222 | 230 | let $s = size($l) | |
223 | 231 | let $acc0 = 0 | |
224 | 232 | func $f5_1 ($a,$i) = if (($i >= $s)) | |
225 | 233 | then $a | |
226 | 234 | else sum($a, $l[$i]) | |
227 | 235 | ||
228 | 236 | func $f5_2 ($a,$i) = if (($i >= $s)) | |
229 | 237 | then $a | |
230 | 238 | else throw("List size exceeds 10") | |
231 | 239 | ||
232 | 240 | $f5_2($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($f5_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
233 | 241 | } | |
234 | 242 | func addTokenDataEntries (accum,assetNum) = if ((assetNum >= size(assetIdsLi))) | |
235 | 243 | then accum | |
236 | 244 | else { | |
237 | 245 | let assetDecimals = match assetIdsLi[assetNum] { | |
238 | 246 | case x: ByteVector => | |
239 | 247 | value(assetInfo(x)).decimals | |
240 | 248 | case _ => | |
241 | 249 | 8 | |
242 | 250 | } | |
243 | 251 | (accum ++ [IntegerEntry((("static_" + assetIdsStrLi[assetNum]) + "_scale"), pow(10, 0, assetDecimals, 0, 0, DOWN)), IntegerEntry((("static_" + assetIdsStrLi[assetNum]) + "_decimals"), assetDecimals), IntegerEntry((("static_" + assetIdsStrLi[assetNum]) + "_weight"), value(parseInt(assetWeightsStrLi[assetNum])))]) | |
244 | 252 | } | |
245 | 253 | ||
246 | 254 | if ((assetWeightsSum != 10000)) | |
247 | 255 | then throw("sum of token weights must be equal to 10000") | |
248 | 256 | else ({ | |
249 | 257 | let $l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | |
250 | 258 | let $s = size($l) | |
251 | 259 | let $acc0 = nil | |
252 | 260 | func $f6_1 ($a,$i) = if (($i >= $s)) | |
253 | 261 | then $a | |
254 | 262 | else addTokenDataEntries($a, $l[$i]) | |
255 | 263 | ||
256 | 264 | func $f6_2 ($a,$i) = if (($i >= $s)) | |
257 | 265 | then $a | |
258 | 266 | else throw("List size exceeds 10") | |
259 | 267 | ||
260 | 268 | $f6_2($f6_1($f6_1($f6_1($f6_1($f6_1($f6_1($f6_1($f6_1($f6_1($f6_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
261 | 269 | } ++ [StringEntry("static_tokenIds", assetIdsStr), StringEntry("static_tokenWeights", assetWeightsStr), IntegerEntry("static_tokensAmount", size(assetIdsLi)), IntegerEntry("static_fee", fee)]) | |
262 | 270 | } | |
263 | 271 | else throw("Strict value is not equal to itself.") | |
264 | 272 | } | |
265 | 273 | ||
266 | 274 | ||
267 | 275 | ||
268 | 276 | @Callable(i) | |
269 | 277 | func swap (assetOut,minimum) = if (if ((isShutdown() == true)) | |
270 | 278 | then (i.caller != Address(base58'3PPCzX2doZ7agBNuGSKqjrbdXgGEtE7CpQ3')) | |
271 | 279 | else false) | |
272 | 280 | then throw("contract is shutdown") | |
273 | 281 | else { | |
274 | 282 | let pmt = if ((size(i.payments) == 1)) | |
275 | 283 | then value(i.payments[0]) | |
276 | 284 | else throw("please attach exactly one payment") | |
277 | 285 | let AmountIn = value(i.payments[0].amount) | |
278 | 286 | let AssetIn = pmt.assetId | |
279 | 287 | let AssetOut = getAssetBytes(assetOut) | |
280 | 288 | let AssetInBalance = getTokenBalance(AssetIn) | |
281 | 289 | let AssetOutBalance = getTokenBalance(AssetOut) | |
282 | 290 | let feeAmountIn = fraction(AmountIn, Fee, FeeScale) | |
283 | 291 | let cleanAmountIn = (AmountIn - feeAmountIn) | |
284 | 292 | let AmountOut = calculateOutAmount(cleanAmountIn, AssetIn, AssetOut, AssetInBalance, AssetOutBalance) | |
285 | 293 | let upl = if ((AssetOut == pluto)) | |
286 | 294 | then invoke(plutoSC, "unstake", [AmountOut], nil) | |
287 | 295 | else unit | |
288 | 296 | if ((upl == upl)) | |
289 | 297 | then { | |
290 | 298 | let spl = if ((AssetIn == pluto)) | |
291 | 299 | then invoke(plutoSC, "stake", nil, [AttachedPayment(pluto, AmountIn)]) | |
292 | 300 | else unit | |
293 | 301 | if ((spl == spl)) | |
294 | 302 | then { | |
295 | 303 | let cpu = if ((AssetOut == puzzle)) | |
296 | 304 | then invoke(puzzleStaking, "claimReward", nil, nil) | |
297 | 305 | else unit | |
298 | 306 | if ((cpu == cpu)) | |
299 | 307 | then { | |
300 | 308 | let upu = if ((AssetOut == puzzle)) | |
301 | 309 | then invoke(puzzleStaking, "unStake", [(AmountOut - assetBalance(this, puzzle))], nil) | |
302 | 310 | else unit | |
303 | 311 | if ((upu == upu)) | |
304 | 312 | then { | |
305 | 313 | let spu = if ((AssetIn == puzzle)) | |
306 | 314 | then invoke(puzzleStaking, "stake", nil, [AttachedPayment(puzzle, assetBalance(this, puzzle))]) | |
307 | 315 | else unit | |
308 | 316 | if ((spu == spu)) | |
309 | 317 | then { | |
310 | 318 | let shareAmountWithdrawWaves = fraction((AmountOut - wavesBalance(this).regular), 1, fraction(tryGetInteger2(swopSC, "A_asset_balance"), 1, tryGetInteger2(swopSC, "share_asset_supply")), CEILING) | |
311 | 319 | let uws = if ((AssetOut == waves)) | |
312 | 320 | then invoke(swopSC, "callFunction", ["withdraw", [toString(shareAmountWithdrawWaves)]], nil) | |
313 | 321 | else unit | |
314 | 322 | if ((uws == uws)) | |
315 | 323 | then { | |
316 | 324 | let shareAmountWithdrawXtn = fraction((AmountOut - assetBalance(this, xtn)), 1, fraction(tryGetInteger2(swopSC, "B_asset_balance"), 1, tryGetInteger2(swopSC, "share_asset_supply")), CEILING) | |
317 | 325 | let uxs = if ((AssetOut == xtn)) | |
318 | 326 | then invoke(swopSC, "callFunction", ["withdraw", [toString(shareAmountWithdrawXtn)]], nil) | |
319 | 327 | else unit | |
320 | 328 | if ((uxs == uxs)) | |
321 | 329 | then { | |
322 | 330 | let swxs = if (if (if (if ((AssetOut != xtn)) | |
323 | 331 | then (AssetOut != waves) | |
324 | 332 | else false) | |
325 | 333 | then (getTokenBalance(xtn) > 0) | |
326 | 334 | else false) | |
327 | 335 | then (getTokenBalance(waves) > 0) | |
328 | 336 | else false) | |
329 | 337 | then invoke(swopSC, "callFunction", ["replenishWithTwoTokens", "true", "0"], [AttachedPayment(unit, wavesBalance(this).regular), AttachedPayment(xtn, assetBalance(this, xtn))]) | |
330 | 338 | else unit | |
331 | 339 | if ((swxs == swxs)) | |
332 | 340 | then if ((minimum > AmountOut)) | |
333 | 341 | then throw("amount to receive is lower than minimum") | |
334 | 342 | else if ((AssetOut == AssetIn)) | |
335 | 343 | then throw("this swap is not allowed") | |
336 | 344 | else if ((0 > (AssetOutBalance - AmountOut))) | |
337 | 345 | then throw("swap smaller amount") | |
338 | 346 | else if (isShutdown()) | |
339 | 347 | then throw("contract is on stop") | |
340 | 348 | else [ScriptTransfer(i.caller, AmountOut, AssetOut)] | |
341 | 349 | else throw("Strict value is not equal to itself.") | |
342 | 350 | } | |
343 | 351 | else throw("Strict value is not equal to itself.") | |
344 | 352 | } | |
345 | 353 | else throw("Strict value is not equal to itself.") | |
346 | 354 | } | |
347 | 355 | else throw("Strict value is not equal to itself.") | |
348 | 356 | } | |
349 | 357 | else throw("Strict value is not equal to itself.") | |
350 | 358 | } | |
351 | 359 | else throw("Strict value is not equal to itself.") | |
352 | 360 | } | |
353 | 361 | else throw("Strict value is not equal to itself.") | |
354 | 362 | } | |
355 | 363 | else throw("Strict value is not equal to itself.") | |
356 | 364 | } | |
357 | 365 | ||
358 | 366 | ||
359 | 367 | ||
360 | 368 | @Callable(i) | |
361 | 369 | func startBalance () = if ((i.caller != this)) | |
362 | 370 | then throw("access only by project owner") | |
363 | 371 | else [IntegerEntry(keyBurnxtnS, getTokenBalance(burnxtn)), IntegerEntry(keyPlutoS, getTokenBalance(pluto)), IntegerEntry(keyPuzzleS, getTokenBalance(puzzle)), IntegerEntry(keyWavesS, getTokenBalance(unit)), IntegerEntry(keyWhirlpoolS, getTokenBalance(whirlpool)), IntegerEntry(keyRomeS, getTokenBalance(rome)), IntegerEntry(keyXtnS, getTokenBalance(xtn))] | |
364 | 372 | ||
365 | 373 | ||
366 | 374 | ||
367 | 375 | @Callable(i) | |
368 | 376 | func currentBalanceProfit () = if ((i.caller != this)) | |
369 | 377 | then throw("access only by project owner") | |
370 | 378 | else [IntegerEntry("BURN-XTN current balance", getTokenBalance(burnxtn)), IntegerEntry("PLUTO current balance", getTokenBalance(pluto)), IntegerEntry("PUZZLE current balance", getTokenBalance(puzzle)), IntegerEntry("WAVES current balance", getTokenBalance(waves)), IntegerEntry("WHIRLPOOL current balance", getTokenBalance(whirlpool)), IntegerEntry("ROME current balance", getTokenBalance(rome)), IntegerEntry("XTN current balance", getTokenBalance(xtn)), IntegerEntry("BURN-XTN profit", (getTokenBalance(burnxtn) - tryGetInteger(keyBurnxtnS))), IntegerEntry("PLUTO profit", (getTokenBalance(pluto) - tryGetInteger(keyPlutoS))), IntegerEntry("PUZZLE profit", (getTokenBalance(puzzle) - tryGetInteger(keyPuzzleS))), IntegerEntry("WAVES proft", (getTokenBalance(waves) - tryGetInteger(keyWavesS))), IntegerEntry("WHIRLPOOL profit", (getTokenBalance(whirlpool) - tryGetInteger(keyWhirlpoolS))), IntegerEntry("ROME profit", (getTokenBalance(rome) - tryGetInteger(keyRomeS))), IntegerEntry("XTN profti", (getTokenBalance(xtn) - tryGetInteger(keyXtnS)))] | |
371 | 379 | ||
372 | 380 | ||
381 | + | ||
382 | + | @Callable(i) | |
383 | + | func checkSwop () = [IntegerEntry("A", A), IntegerEntry("my share", myShare), IntegerEntry("total share", totalShare), IntegerEntry("B", B)] | |
384 | + | ||
385 | + |
github/deemru/w8io/3ef1775 45.33 ms ◑