tx · MzDi5999xzkVALWbbdhnWiVSmPaKbLPfPaPjpp7RUrv

3P4AdC9J6MzTEi2LL9xgQN8EimMnbk4d6Nt:  -0.01100000 Waves

2024.03.15 09:50 [4084625] smart account 3P4AdC9J6MzTEi2LL9xgQN8EimMnbk4d6Nt > SELF 0.00000000 Waves

{ "type": 13, "id": "MzDi5999xzkVALWbbdhnWiVSmPaKbLPfPaPjpp7RUrv", "fee": 1100000, "feeAssetId": null, "timestamp": 1710485421257, "version": 2, "chainId": 87, "sender": "3P4AdC9J6MzTEi2LL9xgQN8EimMnbk4d6Nt", "senderPublicKey": "33BMe2b9KpjJyCQXAKa3DKHqSBjB7q2mEJoiP17cRLAN", "proofs": [ "4NgjLZyq8NpDJo27PuF5d4ezfzCMSdGMXxCVmiXxwjwKGGLSrwwwBP6KtThABgiANfZm7kTS6KYB2iFFb3RzKQiV" ], "script": "base64:BgIpCAISAwoBBBIFCgMICAESBAoCCAESBQoDCAECEgASABIGCgQIAQgBEgAZAAN4dG4BILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRAAd2dnh0bmxwASBsrfjgz4rhcUcNCnloAXRiOOvvbXnzzY2ztsZHwrhpBwAGc3dvcFNDCQEHQWRkcmVzcwEBGgFXq6Cdjrv8dok/NU7xvbFLKgOXWEUfx4rzAAZzd29wTFAJAQdBZGRyZXNzAQEaAVc4DeZLRuf+UBcj/qBUTcgH5R4tWRCTmkoAB3Byb2plY3QJAQdBZGRyZXNzAQEaAVdwbDRmhirDATU6QoAL3cOQY/2jW4AAS60AB2tleVh0blMCFFhUTiBzdGFydGluZyBiYWxhbmNlAAlrZXlXYXZlc1MCFldBVkVTIHN0YXJ0aW5nIGJhbGFuY2UBDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDnRyeUdldEludGVnZXIyAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDHRyeUdldFN0cmluZwEDa2V5BAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAEOZ2V0QXNzZXRTdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAgVXQVZFUwENZ2V0QXNzZXRCeXRlcwEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwUEdW5pdAkA2QQBBQphc3NldElkU3RyARNhZGRBc3NldEJ5dGVzVG9MaXN0AgVhY2N1bQRpdGVtCQDOCAIFBWFjY3VtCQDMCAIJAQ1nZXRBc3NldEJ5dGVzAQUEaXRlbQUDbmlsARRhZGRBc3NldFdlaWdodFRvTGlzdAIFYWNjdW0EaXRlbQkAzggCBQVhY2N1bQkAzAgCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgdzdGF0aWNfCQEOZ2V0QXNzZXRTdHJpbmcBBQRpdGVtAgdfd2VpZ2h0BQNuaWwACGFzc2V0SWRzCgACJGwJALUJAgkBDHRyeUdldFN0cmluZwECD3N0YXRpY190b2tlbklkcwIBLAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQETYWRkQXNzZXRCeXRlc1RvTGlzdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgANQXNzZXRzV2VpZ2h0cwoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEUYWRkQXNzZXRXZWlnaHRUb0xpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoAA0ZlZQkBDXRyeUdldEludGVnZXIBAgpzdGF0aWNfZmVlAAZTY2FsZTgAgMLXLwAIRmVlU2NhbGUAkE4BEmNhbGN1bGF0ZU91dEFtb3VudAUIQW1vdW50SW4HYXNzZXRJbghhc3NldE91dAlCYWxhbmNlSW4KQmFsYW5jZU91dAQHSW5kZXhJbgkBBXZhbHVlAQkAzwgCBQhhc3NldElkcwUHYXNzZXRJbgQISW5kZXhPdXQJAQV2YWx1ZQEJAM8IAgUIYXNzZXRJZHMFCGFzc2V0T3V0AwkAAAIFB0luZGV4SW4FCEluZGV4T3V0BQhBbW91bnRJbgkAbgQFCkJhbGFuY2VPdXQJAGUCCQBoAgUGU2NhbGU4BQZTY2FsZTgJAKADAQkAdgYJAL0CBAkAtgIBBQlCYWxhbmNlSW4JALYCAQkAaAIFBlNjYWxlOAUGU2NhbGU4CQC2AgEJAGQCBQlCYWxhbmNlSW4FCEFtb3VudEluBQZIQUxGVVAAEAkAtgIBCQBrAwkAkQMCBQ1Bc3NldHNXZWlnaHRzBQdJbmRleEluAJBOCQCRAwIFDUFzc2V0c1dlaWdodHMFCEluZGV4T3V0AAQAEAUHQ0VJTElORwkAaAIFBlNjYWxlOAUGU2NhbGU4BQRET1dOAAt3YXZlc0luU3dvcAkAawMJAQ50cnlHZXRJbnRlZ2VyMgIFBnN3b3BTQwIPQV9hc3NldF9iYWxhbmNlCQEOdHJ5R2V0SW50ZWdlcjICBQZzd29wTFAJAKwCAgkArAICAiQzUEhhTmdvbUJrcnZFTDJRbnVKYXJRVkphNzF3anc5cWlxR18JAKUIAQUEdGhpcwIUX3NoYXJlX3Rva2Vuc19sb2NrZWQJAQ50cnlHZXRJbnRlZ2VyMgIFBnN3b3BTQwISc2hhcmVfYXNzZXRfc3VwcGx5AAl4dG5JblN3b3AJAGsDCQEOdHJ5R2V0SW50ZWdlcjICBQZzd29wU0MCD0JfYXNzZXRfYmFsYW5jZQkBDnRyeUdldEludGVnZXIyAgUGc3dvcExQCQCsAgIJAKwCAgIkM1BIYU5nb21Ca3J2RUwyUW51SmFyUVZKYTcxd2p3OXFpcUdfCQClCAEFBHRoaXMCFF9zaGFyZV90b2tlbnNfbG9ja2VkCQEOdHJ5R2V0SW50ZWdlcjICBQZzd29wU0MCEnNoYXJlX2Fzc2V0X3N1cHBseQEPZ2V0VG9rZW5CYWxhbmNlAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAXQFByRtYXRjaDAJAGQCCQDwBwIFBHRoaXMFAXQDCQAAAgUHYXNzZXRJZAUDeHRuBQl4dG5JblN3b3AAAAkAZAIICQDvBwEFBHRoaXMHcmVndWxhcgULd2F2ZXNJblN3b3ABA3N1bQIFYWNjdW0BbgkAZAIFBWFjY3VtCQENcGFyc2VJbnRWYWx1ZQEFAW4BCmlzU2h1dGRvd24ABAckbWF0Y2gwCQCbCAIFBHRoaXMCC2lzX3NodXRkb3duAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAXgFByRtYXRjaDAFAXgHCAFpAQhzaHV0ZG93bgEIc2h1dGRvd24DCQAAAggFAWkGY2FsbGVyBQR0aGlzCQDMCAIJAQxCb29sZWFuRW50cnkCAgtpc19zaHV0ZG93bgUIc2h1dGRvd24FA25pbAkAAgECCmFkbWluIG9ubHkBaQEFc2V0dXADC2Fzc2V0SWRzU3RyD2Fzc2V0V2VpZ2h0c1N0cgNmZWUDCQEKaXNTaHV0ZG93bgAJAAIBAhNjb250cmFjdCBpcyBvbiBzdG9wAwkBAiE9AgUEdGhpcwgFAWkGY2FsbGVyCQACAQIKYWRtaW4gb25seQMDCQBmAgUDZmVlAPQDBgkAZgIAAQUDZmVlCQACAQItZmVlIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA1MDAgKDAuMDEtNSUpBAJzYgkA/AcEBQR0aGlzAgxzdGFydEJhbGFuY2UFA25pbAUDbmlsAwkAAAIFAnNiBQJzYgQNYXNzZXRJZHNTdHJMaQkAtQkCBQthc3NldElkc1N0cgIBLAQKYXNzZXRJZHNMaQoAAiRsBQ1hc3NldElkc1N0ckxpCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGY0XzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARNhZGRBc3NldEJ5dGVzVG9MaXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGY0XzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmNF8yAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgkBBSRmNF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBBFhc3NldFdlaWdodHNTdHJMaQkAtQkCBQ9hc3NldFdlaWdodHNTdHICASwED2Fzc2V0V2VpZ2h0c1N1bQoAAiRsBRFhc3NldFdlaWdodHNTdHJMaQoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmNV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDc3VtAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGY1XzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmNV8yAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgkBBSRmNV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKCgETYWRkVG9rZW5EYXRhRW50cmllcwIFYWNjdW0IYXNzZXROdW0DCQBnAgUIYXNzZXROdW0JAJADAQUKYXNzZXRJZHNMaQUFYWNjdW0EDWFzc2V0RGVjaW1hbHMEByRtYXRjaDAJAJEDAgUKYXNzZXRJZHNMaQUIYXNzZXROdW0DCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBeAUHJG1hdGNoMAgJAQV2YWx1ZQEJAOwHAQUBeAhkZWNpbWFscwAICQDOCAIFBWFjY3VtCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIHc3RhdGljXwkAkQMCBQ1hc3NldElkc1N0ckxpBQhhc3NldE51bQIGX3NjYWxlCQBsBgAKAAAFDWFzc2V0RGVjaW1hbHMAAAAABQRET1dOCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIHc3RhdGljXwkAkQMCBQ1hc3NldElkc1N0ckxpBQhhc3NldE51bQIJX2RlY2ltYWxzBQ1hc3NldERlY2ltYWxzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIHc3RhdGljXwkAkQMCBQ1hc3NldElkc1N0ckxpBQhhc3NldE51bQIHX3dlaWdodAkBBXZhbHVlAQkAtgkBCQCRAwIFEWFzc2V0V2VpZ2h0c1N0ckxpBQhhc3NldE51bQkAzAgCCQEMQm9vbGVhbkVudHJ5AgILaXNfc2h1dGRvd24GBQNuaWwDCQECIT0CBQ9hc3NldFdlaWdodHNTdW0AkE4JAAIBAitzdW0gb2YgdG9rZW4gd2VpZ2h0cyBtdXN0IGJlIGVxdWFsIHRvIDEwMDAwCQDOCAIKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmNl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQETYWRkVG9rZW5EYXRhRW50cmllcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmNl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjZfMgIJAQUkZjZfMQIJAQUkZjZfMQIJAQUkZjZfMQIJAQUkZjZfMQIJAQUkZjZfMQIJAQUkZjZfMQIJAQUkZjZfMQIJAQUkZjZfMQIJAQUkZjZfMQIJAQUkZjZfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAzAgCCQELU3RyaW5nRW50cnkCAg9zdGF0aWNfdG9rZW5JZHMFC2Fzc2V0SWRzU3RyCQDMCAIJAQtTdHJpbmdFbnRyeQICE3N0YXRpY190b2tlbldlaWdodHMFD2Fzc2V0V2VpZ2h0c1N0cgkAzAgCCQEMSW50ZWdlckVudHJ5AgITc3RhdGljX3Rva2Vuc0Ftb3VudAkAkAMBBQphc3NldElkc0xpCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgpzdGF0aWNfZmVlBQNmZWUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQRzd2FwAghhc3NldE91dAdtaW5pbXVtAwMJAAACCQEKaXNTaHV0ZG93bgAGCQECIT0CCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQEaAVeOHeZRyjgjzsORw8RWi9WD02+IVv823QsHCQACAQIUY29udHJhY3QgaXMgc2h1dGRvd24EA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECIXBsZWFzZSBhdHRhY2ggZXhhY3RseSBvbmUgcGF5bWVudAQIQW1vdW50SW4JAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdBc3NldEluCAUDcG10B2Fzc2V0SWQECEFzc2V0T3V0CQENZ2V0QXNzZXRCeXRlcwEFCGFzc2V0T3V0BA5Bc3NldEluQmFsYW5jZQkBD2dldFRva2VuQmFsYW5jZQEFB0Fzc2V0SW4ED0Fzc2V0T3V0QmFsYW5jZQkBD2dldFRva2VuQmFsYW5jZQEFCEFzc2V0T3V0BAtmZWVBbW91bnRJbgkAawMFCEFtb3VudEluBQNGZWUFCEZlZVNjYWxlBA1jbGVhbkFtb3VudEluCQBlAgUIQW1vdW50SW4FC2ZlZUFtb3VudEluBAlBbW91bnRPdXQJARJjYWxjdWxhdGVPdXRBbW91bnQFBQ1jbGVhbkFtb3VudEluBQdBc3NldEluBQhBc3NldE91dAUOQXNzZXRJbkJhbGFuY2UFD0Fzc2V0T3V0QmFsYW5jZQQYc2hhcmVBbW91bnRXaXRoZHJhd1dhdmVzAwkAZgIAAAkAZQIFCUFtb3VudE91dAgJAO8HAQUEdGhpcwdyZWd1bGFyAAAJAG4ECQBlAgUJQW1vdW50T3V0CAkA7wcBBQR0aGlzB3JlZ3VsYXIAAQkAawMJAQ50cnlHZXRJbnRlZ2VyMgIFBnN3b3BTQwIPQV9hc3NldF9iYWxhbmNlAAEJAQ50cnlHZXRJbnRlZ2VyMgIFBnN3b3BTQwISc2hhcmVfYXNzZXRfc3VwcGx5BQdDRUlMSU5HBAN1d3MDAwkAAAIFCEFzc2V0T3V0BQR1bml0CQBmAgUYc2hhcmVBbW91bnRXaXRoZHJhd1dhdmVzAAAHCQD8BwQFBnN3b3BTQwIMY2FsbEZ1bmN0aW9uCQDMCAICCHdpdGhkcmF3CQDMCAIJAMwIAgkApAMBBRhzaGFyZUFtb3VudFdpdGhkcmF3V2F2ZXMFA25pbAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUDdXdzBQN1d3MEFnNoYXJlQW1vdW50V2l0aGRyYXdYdG4DCQBmAgAACQBlAgUJQW1vdW50T3V0CQDwBwIFBHRoaXMFA3h0bgAACQBuBAkAZQIFCUFtb3VudE91dAkA8AcCBQR0aGlzBQN4dG4AAQkAawMJAQ50cnlHZXRJbnRlZ2VyMgIFBnN3b3BTQwIPQl9hc3NldF9iYWxhbmNlAAEJAQ50cnlHZXRJbnRlZ2VyMgIFBnN3b3BTQwISc2hhcmVfYXNzZXRfc3VwcGx5BQdDRUlMSU5HBAN1eHMDAwkAAAIFCEFzc2V0T3V0BQN4dG4JAGYCBRZzaGFyZUFtb3VudFdpdGhkcmF3WHRuAAAHCQD8BwQFBnN3b3BTQwIMY2FsbEZ1bmN0aW9uCQDMCAICCHdpdGhkcmF3CQDMCAIJAMwIAgkApAMBBRZzaGFyZUFtb3VudFdpdGhkcmF3WHRuBQNuaWwFA25pbAUDbmlsBQR1bml0AwkAAAIFA3V4cwUDdXhzAwkAZgIFB21pbmltdW0FCUFtb3VudE91dAkAAgECJ2Ftb3VudCB0byByZWNlaXZlIGlzIGxvd2VyIHRoYW4gbWluaW11bQMJAAACBQhBc3NldE91dAUHQXNzZXRJbgkAAgECGHRoaXMgc3dhcCBpcyBub3QgYWxsb3dlZAMJAGYCAAAJAGUCBQ9Bc3NldE91dEJhbGFuY2UFCUFtb3VudE91dAkAAgECE3N3YXAgc21hbGxlciBhbW91bnQEBGludnQJAPwHBAUEdGhpcwILdHJhbnNmZXJPdXQJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUJQW1vdW50T3V0CQDMCAIFCEFzc2V0T3V0BQNuaWwFA25pbAMJAAACBQRpbnZ0BQRpbnZ0BARzd3hzAwMDCQBmAgkA8AcCBQR0aGlzBQN4dG4AAAkAZgIICQDvBwEFBHRoaXMJYXZhaWxhYmxlAAAHCQAAAgkAZAIFGHNoYXJlQW1vdW50V2l0aGRyYXdXYXZlcwUWc2hhcmVBbW91bnRXaXRoZHJhd1h0bgAABwkA/AcEBQZzd29wU0MCDGNhbGxGdW5jdGlvbgkAzAgCAhZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zCQDMCAIJAMwIAgIEdHJ1ZQkAzAgCAgEwBQNuaWwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFA3h0bgkA8AcCBQR0aGlzBQN4dG4FA25pbAUEdW5pdAMJAAACBQRzd3hzBQRzd3hzBANpbnYJAPwHBAUHcHJvamVjdAIIc2VsZWN0b3IFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELdHJhbnNmZXJPdXQDB2FkZHJlc3MJQW1vdW50T3V0CEFzc2V0T3V0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MFCUFtb3VudE91dAUIQXNzZXRPdXQFA25pbAFpAQxzdGFydEJhbGFuY2UAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5V2F2ZXNTCQEPZ2V0VG9rZW5CYWxhbmNlAQUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUHa2V5WHRuUwkBD2dldFRva2VuQmFsYW5jZQEFA3h0bgUDbmlsAWkBFGN1cnJlbnRCYWxhbmNlUHJvZml0AAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIJAMwIAgkBDEludGVnZXJFbnRyeQICFVdBVkVTIGN1cnJlbnQgYmFsYW5jZQkBD2dldFRva2VuQmFsYW5jZQEFBHVuaXQJAMwIAgkBDEludGVnZXJFbnRyeQICE1hUTiBjdXJyZW50IGJhbGFuY2UJAQ9nZXRUb2tlbkJhbGFuY2UBBQN4dG4JAMwIAgkBDEludGVnZXJFbnRyeQICDFdBVkVTIHByb2ZpdAkAZQIJAQ9nZXRUb2tlbkJhbGFuY2UBBQR1bml0CQENdHJ5R2V0SW50ZWdlcgEFCWtleVdhdmVzUwkAzAgCCQEMSW50ZWdlckVudHJ5AgIKWFROIHByb2ZpdAkAZQIJAQ9nZXRUb2tlbkJhbGFuY2UBBQN4dG4JAQ10cnlHZXRJbnRlZ2VyAQUHa2V5WHRuUwUDbmlsAWkBCHJlYWRTd2FwBAhhc3NldE91dAdtaW5pbXVtB2Fzc2V0SW4IYW1vdW50SW4DAwkAAAIJAQppc1NodXRkb3duAAYJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBV44d5lHKOCPOw5HDxFaL1YPTb4hW/zbdCwcJAAIBAhRjb250cmFjdCBpcyBzaHV0ZG93bgQHQXNzZXRJbgkBDWdldEFzc2V0Qnl0ZXMBBQdhc3NldEluBAhBc3NldE91dAkBDWdldEFzc2V0Qnl0ZXMBBQhhc3NldE91dAQOQXNzZXRJbkJhbGFuY2UJAQ9nZXRUb2tlbkJhbGFuY2UBBQdBc3NldEluBA9Bc3NldE91dEJhbGFuY2UJAQ9nZXRUb2tlbkJhbGFuY2UBBQhBc3NldE91dAQLZmVlQW1vdW50SW4JAGsDBQhhbW91bnRJbgUDRmVlBQhGZWVTY2FsZQQNY2xlYW5BbW91bnRJbgkAZQIFCGFtb3VudEluBQtmZWVBbW91bnRJbgQJQW1vdW50T3V0CQESY2FsY3VsYXRlT3V0QW1vdW50BQUNY2xlYW5BbW91bnRJbgUHQXNzZXRJbgUIQXNzZXRPdXQFDkFzc2V0SW5CYWxhbmNlBQ9Bc3NldE91dEJhbGFuY2UEGHNoYXJlQW1vdW50V2l0aGRyYXdXYXZlcwMJAGYCAAAJAGUCBQlBbW91bnRPdXQICQDvBwEFBHRoaXMHcmVndWxhcgAACQBuBAkAZQIFCUFtb3VudE91dAgJAO8HAQUEdGhpcwdyZWd1bGFyAAEJAGsDCQEOdHJ5R2V0SW50ZWdlcjICBQZzd29wU0MCD0FfYXNzZXRfYmFsYW5jZQABCQEOdHJ5R2V0SW50ZWdlcjICBQZzd29wU0MCEnNoYXJlX2Fzc2V0X3N1cHBseQUHQ0VJTElORwQWc2hhcmVBbW91bnRXaXRoZHJhd1h0bgMJAGYCAAAJAGUCBQlBbW91bnRPdXQJAPAHAgUEdGhpcwUDeHRuAAAJAG4ECQBlAgUJQW1vdW50T3V0CQDwBwIFBHRoaXMFA3h0bgABCQBrAwkBDnRyeUdldEludGVnZXIyAgUGc3dvcFNDAg9CX2Fzc2V0X2JhbGFuY2UAAQkBDnRyeUdldEludGVnZXIyAgUGc3dvcFNDAhJzaGFyZV9hc3NldF9zdXBwbHkFB0NFSUxJTkcJAMwIAgkBDEludGVnZXJFbnRyeQICEGFzc2V0IGluIGJhbGFuY2UFDkFzc2V0SW5CYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhFhc3NldCBvdXQgYmFsYW5jZQUPQXNzZXRPdXRCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1mZWUgYW1vdW50IGluBQtmZWVBbW91bnRJbgkAzAgCCQEMSW50ZWdlckVudHJ5AgIPY2xlYW4gYW1vdW50IGluBQ1jbGVhbkFtb3VudEluCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgphbW91bnQgb3V0BQlBbW91bnRPdXQJAMwIAgkBDEludGVnZXJFbnRyeQICG3NoYXJlIGFtb3VudCB3aXRoZHJhdyB3YXZlcwUYc2hhcmVBbW91bnRXaXRoZHJhd1dhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhlzaGFyZSBhbW91bnQgd2l0aGRyYXcgeHRuBRZzaGFyZUFtb3VudFdpdGhkcmF3WHRuCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg13YXZlcyBpbiBzd29wBQt3YXZlc0luU3dvcAkAzAgCCQEMSW50ZWdlckVudHJ5AgILeHRuIGluIHN3b3AFCXh0bkluU3dvcAUDbmlsAWkBB2ludm9rZXIABARpbnYxCQD8BwQJAQdBZGRyZXNzAQEaAVdiez/9Emfien+2V1eDM+9RrnjLQ5J8O00CCHdpdGhkcmF3BQNuaWwFA25pbAMJAAACBQRpbnYxBQRpbnYxBARpbnYyAwkAZgIJAPAHAgkBB0FkZHJlc3MBARoBV2J7P/0SZ+J6f7ZXV4Mz71GueMtDknw7TQUHdnZ4dG5scAAyCQD8BwQJAQdBZGRyZXNzAQEaAVdgzsbyEfjWrsMVMLpYXP8XkcH50MCqY8cCCHdpdGhkcmF3BQNuaWwFA25pbAkA/AcECQEHQWRkcmVzcwEBGgFXYns//RJn4np/tldXgzPvUa54y0OSfDtNAg1pbXBvcnRWVlhUTkxQBQNuaWwFA25pbAMJAAACBQRpbnYyBQRpbnYyBARpbnYzCQD8BwQJAQdBZGRyZXNzAQEaAVfpZiEq0gbg3BaK6whal9SfnWKjf/fCWkwCCHdpdGhkcmF3BQNuaWwFA25pbAMJAAACBQRpbnYzBQRpbnYzBARpbnY0CQD8BwQJAQdBZGRyZXNzAQEaAVepCoCmfeUiMo5IaWo4+2VW7bIvnuaxss0CCHdpdGhkcmF3BQNuaWwFA25pbAMJAAACBQRpbnY0BQRpbnY0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ABPzyOg==", "height": 4084625, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: miBcbFZ9Uqp5DLnGoPQZkA5vBc8R63rf74xDtcQdaKo Next: 9LVybYtop5ysiP1k1DE895Ahc7G2VarZ3ndpgEbopM8n Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let d8 = 100000000
5-
64 let xtn = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
75
86 let vvxtnlp = base58'8KEtor9aSsSj38MknyAE7k1uRThHY9prAXgiE4D7WpyL'
260258 let invt = invoke(this, "transferOut", [toString(i.caller), AmountOut, AssetOut], nil)
261259 if ((invt == invt))
262260 then {
263- let swxs = if (if (if ((assetBalance(this, xtn) > d8))
264- then (wavesBalance(this).available > d8)
261+ let swxs = if (if (if ((assetBalance(this, xtn) > 0))
262+ then (wavesBalance(this).available > 0)
265263 else false)
266264 then ((shareAmountWithdrawWaves + shareAmountWithdrawXtn) == 0)
267265 else false)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let d8 = 100000000
5-
64 let xtn = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
75
86 let vvxtnlp = base58'8KEtor9aSsSj38MknyAE7k1uRThHY9prAXgiE4D7WpyL'
97
108 let swopSC = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG')
119
1210 let swopLP = Address(base58'3P73HDkPqG15nLXevjCbmXtazHYTZbpPoPw')
1311
1412 let project = Address(base58'3PCBL2vbjAVFbiCwmGsPmT6QdATutQnM8ov')
1513
1614 let keyXtnS = "XTN starting balance"
1715
1816 let keyWavesS = "WAVES starting balance"
1917
2018 func tryGetInteger (key) = match getInteger(this, key) {
2119 case b: Int =>
2220 b
2321 case _ =>
2422 0
2523 }
2624
2725
2826 func tryGetInteger2 (address,key) = match getInteger(address, key) {
2927 case b: Int =>
3028 b
3129 case _ =>
3230 0
3331 }
3432
3533
3634 func tryGetString (key) = match getString(this, key) {
3735 case b: String =>
3836 b
3937 case _ =>
4038 ""
4139 }
4240
4341
4442 func getAssetString (assetId) = match assetId {
4543 case b: ByteVector =>
4644 toBase58String(b)
4745 case _ =>
4846 "WAVES"
4947 }
5048
5149
5250 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
5351 then unit
5452 else fromBase58String(assetIdStr)
5553
5654
5755 func addAssetBytesToList (accum,item) = (accum ++ [getAssetBytes(item)])
5856
5957
6058 func addAssetWeightToList (accum,item) = (accum ++ [tryGetInteger((("static_" + getAssetString(item)) + "_weight"))])
6159
6260
6361 let assetIds = {
6462 let $l = split(tryGetString("static_tokenIds"), ",")
6563 let $s = size($l)
6664 let $acc0 = nil
6765 func $f0_1 ($a,$i) = if (($i >= $s))
6866 then $a
6967 else addAssetBytesToList($a, $l[$i])
7068
7169 func $f0_2 ($a,$i) = if (($i >= $s))
7270 then $a
7371 else throw("List size exceeds 10")
7472
7573 $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)
7674 }
7775
7876 let AssetsWeights = {
7977 let $l = assetIds
8078 let $s = size($l)
8179 let $acc0 = nil
8280 func $f1_1 ($a,$i) = if (($i >= $s))
8381 then $a
8482 else addAssetWeightToList($a, $l[$i])
8583
8684 func $f1_2 ($a,$i) = if (($i >= $s))
8785 then $a
8886 else throw("List size exceeds 10")
8987
9088 $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)
9189 }
9290
9391 let Fee = tryGetInteger("static_fee")
9492
9593 let Scale8 = 100000000
9694
9795 let FeeScale = 10000
9896
9997 func calculateOutAmount (AmountIn,assetIn,assetOut,BalanceIn,BalanceOut) = {
10098 let IndexIn = value(indexOf(assetIds, assetIn))
10199 let IndexOut = value(indexOf(assetIds, assetOut))
102100 if ((IndexIn == IndexOut))
103101 then AmountIn
104102 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)
105103 }
106104
107105
108106 let wavesInSwop = fraction(tryGetInteger2(swopSC, "A_asset_balance"), tryGetInteger2(swopLP, (("3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG_" + toString(this)) + "_share_tokens_locked")), tryGetInteger2(swopSC, "share_asset_supply"))
109107
110108 let xtnInSwop = fraction(tryGetInteger2(swopSC, "B_asset_balance"), tryGetInteger2(swopLP, (("3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG_" + toString(this)) + "_share_tokens_locked")), tryGetInteger2(swopSC, "share_asset_supply"))
111109
112110 func getTokenBalance (assetId) = match assetId {
113111 case t: ByteVector =>
114112 (assetBalance(this, t) + (if ((assetId == xtn))
115113 then xtnInSwop
116114 else 0))
117115 case _ =>
118116 (wavesBalance(this).regular + wavesInSwop)
119117 }
120118
121119
122120 func sum (accum,n) = (accum + parseIntValue(n))
123121
124122
125123 func isShutdown () = match getBoolean(this, "is_shutdown") {
126124 case x: Boolean =>
127125 x
128126 case _ =>
129127 false
130128 }
131129
132130
133131 @Callable(i)
134132 func shutdown (shutdown) = if ((i.caller == this))
135133 then [BooleanEntry("is_shutdown", shutdown)]
136134 else throw("admin only")
137135
138136
139137
140138 @Callable(i)
141139 func setup (assetIdsStr,assetWeightsStr,fee) = if (isShutdown())
142140 then throw("contract is on stop")
143141 else if ((this != i.caller))
144142 then throw("admin only")
145143 else if (if ((fee > 500))
146144 then true
147145 else (1 > fee))
148146 then throw("fee value must be between 1 and 500 (0.01-5%)")
149147 else {
150148 let sb = invoke(this, "startBalance", nil, nil)
151149 if ((sb == sb))
152150 then {
153151 let assetIdsStrLi = split(assetIdsStr, ",")
154152 let assetIdsLi = {
155153 let $l = assetIdsStrLi
156154 let $s = size($l)
157155 let $acc0 = nil
158156 func $f4_1 ($a,$i) = if (($i >= $s))
159157 then $a
160158 else addAssetBytesToList($a, $l[$i])
161159
162160 func $f4_2 ($a,$i) = if (($i >= $s))
163161 then $a
164162 else throw("List size exceeds 10")
165163
166164 $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)
167165 }
168166 let assetWeightsStrLi = split(assetWeightsStr, ",")
169167 let assetWeightsSum = {
170168 let $l = assetWeightsStrLi
171169 let $s = size($l)
172170 let $acc0 = 0
173171 func $f5_1 ($a,$i) = if (($i >= $s))
174172 then $a
175173 else sum($a, $l[$i])
176174
177175 func $f5_2 ($a,$i) = if (($i >= $s))
178176 then $a
179177 else throw("List size exceeds 10")
180178
181179 $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)
182180 }
183181 func addTokenDataEntries (accum,assetNum) = if ((assetNum >= size(assetIdsLi)))
184182 then accum
185183 else {
186184 let assetDecimals = match assetIdsLi[assetNum] {
187185 case x: ByteVector =>
188186 value(assetInfo(x)).decimals
189187 case _ =>
190188 8
191189 }
192190 (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]))), BooleanEntry("is_shutdown", true)])
193191 }
194192
195193 if ((assetWeightsSum != 10000))
196194 then throw("sum of token weights must be equal to 10000")
197195 else ({
198196 let $l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
199197 let $s = size($l)
200198 let $acc0 = nil
201199 func $f6_1 ($a,$i) = if (($i >= $s))
202200 then $a
203201 else addTokenDataEntries($a, $l[$i])
204202
205203 func $f6_2 ($a,$i) = if (($i >= $s))
206204 then $a
207205 else throw("List size exceeds 10")
208206
209207 $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)
210208 } ++ [StringEntry("static_tokenIds", assetIdsStr), StringEntry("static_tokenWeights", assetWeightsStr), IntegerEntry("static_tokensAmount", size(assetIdsLi)), IntegerEntry("static_fee", fee)])
211209 }
212210 else throw("Strict value is not equal to itself.")
213211 }
214212
215213
216214
217215 @Callable(i)
218216 func swap (assetOut,minimum) = if (if ((isShutdown() == true))
219217 then (i.caller != Address(base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk'))
220218 else false)
221219 then throw("contract is shutdown")
222220 else {
223221 let pmt = if ((size(i.payments) == 1))
224222 then value(i.payments[0])
225223 else throw("please attach exactly one payment")
226224 let AmountIn = value(i.payments[0].amount)
227225 let AssetIn = pmt.assetId
228226 let AssetOut = getAssetBytes(assetOut)
229227 let AssetInBalance = getTokenBalance(AssetIn)
230228 let AssetOutBalance = getTokenBalance(AssetOut)
231229 let feeAmountIn = fraction(AmountIn, Fee, FeeScale)
232230 let cleanAmountIn = (AmountIn - feeAmountIn)
233231 let AmountOut = calculateOutAmount(cleanAmountIn, AssetIn, AssetOut, AssetInBalance, AssetOutBalance)
234232 let shareAmountWithdrawWaves = if ((0 > (AmountOut - wavesBalance(this).regular)))
235233 then 0
236234 else fraction((AmountOut - wavesBalance(this).regular), 1, fraction(tryGetInteger2(swopSC, "A_asset_balance"), 1, tryGetInteger2(swopSC, "share_asset_supply")), CEILING)
237235 let uws = if (if ((AssetOut == unit))
238236 then (shareAmountWithdrawWaves > 0)
239237 else false)
240238 then invoke(swopSC, "callFunction", ["withdraw", [toString(shareAmountWithdrawWaves)]], nil)
241239 else unit
242240 if ((uws == uws))
243241 then {
244242 let shareAmountWithdrawXtn = if ((0 > (AmountOut - assetBalance(this, xtn))))
245243 then 0
246244 else fraction((AmountOut - assetBalance(this, xtn)), 1, fraction(tryGetInteger2(swopSC, "B_asset_balance"), 1, tryGetInteger2(swopSC, "share_asset_supply")), CEILING)
247245 let uxs = if (if ((AssetOut == xtn))
248246 then (shareAmountWithdrawXtn > 0)
249247 else false)
250248 then invoke(swopSC, "callFunction", ["withdraw", [toString(shareAmountWithdrawXtn)]], nil)
251249 else unit
252250 if ((uxs == uxs))
253251 then if ((minimum > AmountOut))
254252 then throw("amount to receive is lower than minimum")
255253 else if ((AssetOut == AssetIn))
256254 then throw("this swap is not allowed")
257255 else if ((0 > (AssetOutBalance - AmountOut)))
258256 then throw("swap smaller amount")
259257 else {
260258 let invt = invoke(this, "transferOut", [toString(i.caller), AmountOut, AssetOut], nil)
261259 if ((invt == invt))
262260 then {
263- let swxs = if (if (if ((assetBalance(this, xtn) > d8))
264- then (wavesBalance(this).available > d8)
261+ let swxs = if (if (if ((assetBalance(this, xtn) > 0))
262+ then (wavesBalance(this).available > 0)
265263 else false)
266264 then ((shareAmountWithdrawWaves + shareAmountWithdrawXtn) == 0)
267265 else false)
268266 then invoke(swopSC, "callFunction", ["replenishWithTwoTokens", ["true", "0"]], [AttachedPayment(unit, wavesBalance(this).available), AttachedPayment(xtn, assetBalance(this, xtn))])
269267 else unit
270268 if ((swxs == swxs))
271269 then {
272270 let inv = invoke(project, "selector", nil, nil)
273271 if ((inv == inv))
274272 then nil
275273 else throw("Strict value is not equal to itself.")
276274 }
277275 else throw("Strict value is not equal to itself.")
278276 }
279277 else throw("Strict value is not equal to itself.")
280278 }
281279 else throw("Strict value is not equal to itself.")
282280 }
283281 else throw("Strict value is not equal to itself.")
284282 }
285283
286284
287285
288286 @Callable(i)
289287 func transferOut (address,AmountOut,AssetOut) = [ScriptTransfer(addressFromStringValue(address), AmountOut, AssetOut)]
290288
291289
292290
293291 @Callable(i)
294292 func startBalance () = if ((i.caller != this))
295293 then throw("access only by project owner")
296294 else [IntegerEntry(keyWavesS, getTokenBalance(unit)), IntegerEntry(keyXtnS, getTokenBalance(xtn))]
297295
298296
299297
300298 @Callable(i)
301299 func currentBalanceProfit () = if ((i.caller != this))
302300 then throw("access only by project owner")
303301 else [IntegerEntry("WAVES current balance", getTokenBalance(unit)), IntegerEntry("XTN current balance", getTokenBalance(xtn)), IntegerEntry("WAVES profit", (getTokenBalance(unit) - tryGetInteger(keyWavesS))), IntegerEntry("XTN profit", (getTokenBalance(xtn) - tryGetInteger(keyXtnS)))]
304302
305303
306304
307305 @Callable(i)
308306 func readSwap (assetOut,minimum,assetIn,amountIn) = if (if ((isShutdown() == true))
309307 then (i.caller != Address(base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk'))
310308 else false)
311309 then throw("contract is shutdown")
312310 else {
313311 let AssetIn = getAssetBytes(assetIn)
314312 let AssetOut = getAssetBytes(assetOut)
315313 let AssetInBalance = getTokenBalance(AssetIn)
316314 let AssetOutBalance = getTokenBalance(AssetOut)
317315 let feeAmountIn = fraction(amountIn, Fee, FeeScale)
318316 let cleanAmountIn = (amountIn - feeAmountIn)
319317 let AmountOut = calculateOutAmount(cleanAmountIn, AssetIn, AssetOut, AssetInBalance, AssetOutBalance)
320318 let shareAmountWithdrawWaves = if ((0 > (AmountOut - wavesBalance(this).regular)))
321319 then 0
322320 else fraction((AmountOut - wavesBalance(this).regular), 1, fraction(tryGetInteger2(swopSC, "A_asset_balance"), 1, tryGetInteger2(swopSC, "share_asset_supply")), CEILING)
323321 let shareAmountWithdrawXtn = if ((0 > (AmountOut - assetBalance(this, xtn))))
324322 then 0
325323 else fraction((AmountOut - assetBalance(this, xtn)), 1, fraction(tryGetInteger2(swopSC, "B_asset_balance"), 1, tryGetInteger2(swopSC, "share_asset_supply")), CEILING)
326324 [IntegerEntry("asset in balance", AssetInBalance), IntegerEntry("asset out balance", AssetOutBalance), IntegerEntry("fee amount in", feeAmountIn), IntegerEntry("clean amount in", cleanAmountIn), IntegerEntry("amount out", AmountOut), IntegerEntry("share amount withdraw waves", shareAmountWithdrawWaves), IntegerEntry("share amount withdraw xtn", shareAmountWithdrawXtn), IntegerEntry("waves in swop", wavesInSwop), IntegerEntry("xtn in swop", xtnInSwop)]
327325 }
328326
329327
330328
331329 @Callable(i)
332330 func invoker () = {
333331 let inv1 = invoke(Address(base58'3PAucbbumdUXmhzcR421zGiayphEdo2tRoz'), "withdraw", nil, nil)
334332 if ((inv1 == inv1))
335333 then {
336334 let inv2 = if ((assetBalance(Address(base58'3PAucbbumdUXmhzcR421zGiayphEdo2tRoz'), vvxtnlp) > 50))
337335 then invoke(Address(base58'3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr'), "withdraw", nil, nil)
338336 else invoke(Address(base58'3PAucbbumdUXmhzcR421zGiayphEdo2tRoz'), "importVVXTNLP", nil, nil)
339337 if ((inv2 == inv2))
340338 then {
341339 let inv3 = invoke(Address(base58'3PPCzX2doZ7agBNuGSKqjrbdXgGEtE7CpQ3'), "withdraw", nil, nil)
342340 if ((inv3 == inv3))
343341 then {
344342 let inv4 = invoke(Address(base58'3PHLhWPrs1mrpM1ZDUv1VmUnZRwchADJELc'), "withdraw", nil, nil)
345343 if ((inv4 == inv4))
346344 then nil
347345 else throw("Strict value is not equal to itself.")
348346 }
349347 else throw("Strict value is not equal to itself.")
350348 }
351349 else throw("Strict value is not equal to itself.")
352350 }
353351 else throw("Strict value is not equal to itself.")
354352 }
355353
356354

github/deemru/w8io/873ac7e 
70.82 ms