tx · AVWXDfVQ5gV91vi1HDxDwwLcnW4eTDoHGL7LjAfRqUwk

3P6QCup9ZgsBg8LLzk7dCa8MnCZBCLYQoXP:  -0.01100000 Waves

2024.02.24 10:02 [4055792] smart account 3P6QCup9ZgsBg8LLzk7dCa8MnCZBCLYQoXP > SELF 0.00000000 Waves

{ "type": 13, "id": "AVWXDfVQ5gV91vi1HDxDwwLcnW4eTDoHGL7LjAfRqUwk", "fee": 1100000, "feeAssetId": null, "timestamp": 1708758222070, "version": 2, "chainId": 87, "sender": "3P6QCup9ZgsBg8LLzk7dCa8MnCZBCLYQoXP", "senderPublicKey": "Gz4W9Y9UMEEZzMBu6GHyXY7BRsLXdbzFDwRPak18TW7u", "proofs": [ "2EbxopnBzjCr2kj76kmmBmXPk8fnkWbSQMbVNc3vvUTBS85u8HqUm93BRC1WUBiDcV5maKAc2vQhxp9mDToMKSPr" ], "script": "base64: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MV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgADRmVlCQENdHJ5R2V0SW50ZWdlcgECCnN0YXRpY19mZWUABlNjYWxlOACAwtcvAAhGZWVTY2FsZQCQTgESY2FsY3VsYXRlT3V0QW1vdW50BQhBbW91bnRJbgdhc3NldEluCGFzc2V0T3V0CUJhbGFuY2VJbgpCYWxhbmNlT3V0BAdJbmRleEluCQEFdmFsdWUBCQDPCAIFCGFzc2V0SWRzBQdhc3NldEluBAhJbmRleE91dAkBBXZhbHVlAQkAzwgCBQhhc3NldElkcwUIYXNzZXRPdXQDCQAAAgUHSW5kZXhJbgUISW5kZXhPdXQFCEFtb3VudEluCQBuBAUKQmFsYW5jZU91dAkAZQIJAGgCBQZTY2FsZTgFBlNjYWxlOAkAoAMBCQB2BgkAvQIECQC2AgEFCUJhbGFuY2VJbgkAtgIBCQBoAgUGU2NhbGU4BQZTY2FsZTgJALYCAQkAZAIFCUJhbGFuY2VJbgUIQW1vdW50SW4FBkhBTEZVUAAQCQC2AgEJAGsDCQCRAwIFDUFzc2V0c1dlaWdodHMFB0luZGV4SW4AkE4JAJEDAgUNQXNzZXRzV2VpZ2h0cwUISW5kZXhPdXQABAAQBQdDRUlMSU5HCQBoAgUGU2NhbGU4BQZTY2FsZTgFBERPV04BDmNhbGN1bGF0ZVNSYXRlAAQPc3Rha2luZ0VtaXNzaW9uBAckbWF0Y2gwCQD8BwQJAQdBZGRyZXNzAQEaAVcR/V5nkS5nnRcHEFUPDfNTvyVUcY73eO4CF2dldFN0YWtpbmdCbG9ja0VtaXNzaW9uCQDMCAIHBQNuaWwFA25pbAMJAAECBQckbWF0Y2gwAgNJbnQEAmluBQckbWF0Y2gwBQJpbgkAAgECCmJhZCBpbnZva2UDCQAAAgUPc3Rha2luZ0VtaXNzaW9uBQ9zdGFraW5nRW1pc3Npb24EDmxhc3RDaGVja1NSYXRlCQEOdHJ5R2V0SW50ZWdlcjICBQdwbHV0b1NDAhVnbG9iYWxfbGFzdENoZWNrU1JhdGUEDHNQbHV0b0Ftb3VudAkBDnRyeUdldEludGVnZXIyAgUHcGx1dG9TQwINZ2xvYmFsX3NQbHV0bwQPbGFzdENoZWNrSGVpZ2h0CQEOdHJ5R2V0SW50ZWdlcjICBQdwbHV0b1NDAhtnbG9iYWxfbGFzdENoZWNrU1JhdGVIZWlnaHQEBmJsb2NrcwkAZQIFBmhlaWdodAUPbGFzdENoZWNrSGVpZ2h0AwkAAAIFDHNQbHV0b0Ftb3VudAAABQZTY2FsZTgJAGQCCQEOdHJ5R2V0SW50ZWdlcjICBQdwbHV0b1NDAhVnbG9iYWxfbGFzdENoZWNrU1JhdGUJAGsDCQBoAgUGYmxvY2tzBQZTY2FsZTgFD3N0YWtpbmdFbWlzc2lvbgUMc1BsdXRvQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARVjYWxjdWxhdGVTdGFrZWRBbW91bnQABAZhbW91bnQJAQ50cnlHZXRJbnRlZ2VyMgIFB3BsdXRvU0MJAKwCAgkApQgBBQR0aGlzAgdfc1BsdXRvCQBrAwUGYW1vdW50CQEOY2FsY3VsYXRlU1JhdGUABQZTY2FsZTgADHB1enpsZVN0YWtlZAkBDnRyeUdldEludGVnZXIyAgUNcHV6emxlU3Rha2luZwkArAICCQClCAEFBHRoaXMCB19zdGFrZWQAC3dhdmVzSW5Td29wCQBrAwkBDnRyeUdldEludGVnZXIyAgUGc3dvcFNDAg9BX2Fzc2V0X2JhbGFuY2UJAQ50cnlHZXRJbnRlZ2VyMgIFBnN3b3BTQwkArAICCQCsAgICJDNQSGFOZ29tQmtydkVMMlFudUphclFWSmE3MXdqdzlxaXFHXwkApQgBBQR0aGlzAhRfc2hhcmVfdG9rZW5zX2xvY2tlZAkBDnRyeUdldEludGVnZXIyAgUGc3dvcFNDAhJzaGFyZV9hc3NldF9zdXBwbHkACXh0bkluU3dvcAkAawMJAQ50cnlHZXRJbnRlZ2VyMgIFBnN3b3BTQwIPQl9hc3NldF9iYWxhbmNlCQEOdHJ5R2V0SW50ZWdlcjICBQZzd29wU0MJAKwCAgkArAICAiQzUEhhTmdvbUJrcnZFTDJRbnVKYXJRVkphNzF3anc5cWlxR18JAKUIAQUEdGhpcwIUX3NoYXJlX3Rva2Vuc19sb2NrZWQJAQ50cnlHZXRJbnRlZ2VyMgIFBnN3b3BTQwISc2hhcmVfYXNzZXRfc3VwcGx5AQ9nZXRUb2tlbkJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBdAUHJG1hdGNoMAkAZAIJAPAHAgUEdGhpcwUBdAMJAAACBQdhc3NldElkBQVwbHV0bwkBFWNhbGN1bGF0ZVN0YWtlZEFtb3VudAAJAGQCAAADCQAAAgUHYXNzZXRJZAUGcHV6emxlBQxwdXp6bGVTdGFrZWQJAGQCAAADCQAAAgUHYXNzZXRJZAUDeHRuBQl4dG5JblN3b3AAAAkAZAIICQDvBwEFBHRoaXMHcmVndWxhcgULd2F2ZXNJblN3b3ABA3N1bQIFYWNjdW0BbgkAZAIFBWFjY3VtCQENcGFyc2VJbnRWYWx1ZQEFAW4BCmlzU2h1dGRvd24ABAckbWF0Y2gwCQCbCAIFBHRoaXMCC2lzX3NodXRkb3duAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAXgFByRtYXRjaDAFAXgHBQFpAQhzaHV0ZG93bgEIc2h1dGRvd24DCQAAAggFAWkGY2FsbGVyBQR0aGlzCQDMCAIJAQxCb29sZWFuRW50cnkCAgtpc19zaHV0ZG93bgUIc2h1dGRvd24FA25pbAkAAgECCmFkbWluIG9ubHkBaQEHcHJlSW5pdAMLYXNzZXRJZHNTdHIPYXNzZXRXZWlnaHRzU3RyA2ZlZQMJAQppc1NodXRkb3duAAkAAgECE2NvbnRyYWN0IGlzIG9uIHN0b3ADCQECIT0CBQR0aGlzCAUBaQZjYWxsZXIJAAIBAgphZG1pbiBvbmx5AwMJAGYCBQNmZWUA9AMGCQBmAgABBQNmZWUJAAIBAi1mZWUgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDUwMCAoMC4wMS01JSkEAnNiCQD8BwQFBHRoaXMCDHN0YXJ0QmFsYW5jZQUDbmlsBQNuaWwDCQAAAgUCc2IFAnNiBA1hc3NldElkc1N0ckxpCQC1CQIF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dHJ5AgITc3RhdGljX3Rva2Vuc0Ftb3VudAkAkAMBBQphc3NldElkc0xpCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgpzdGF0aWNfZmVlBQNmZWUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQRzd2FwAghhc3NldE91dAdtaW5pbXVtAwMJAAACCQEKaXNTaHV0ZG93bgAGCQECIT0CCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQEaAVfpZiEq0gbg3BaK6whal9SfnWKjf/fCWkwHCQACAQIUY29udHJhY3QgaXMgc2h1dGRvd24EA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECIXBsZWFzZSBhdHRhY2ggZXhhY3RseSBvbmUgcGF5bWVudAQIQW1vdW50SW4JAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdBc3NldEluCAUDcG10B2Fzc2V0SWQECEFzc2V0T3V0CQENZ2V0QXNzZXRCeXRlcwEFCGFzc2V0T3V0BA5Bc3NldEluQmFsYW5jZQkBD2dldFRva2VuQmFsYW5jZQEFB0Fzc2V0SW4ED0Fzc2V0T3V0QmFsYW5jZQkBD2dldFRva2VuQmFsYW5jZQEFCEFzc2V0T3V0BAtmZWVBbW91bnRJbgkAawMFCEFtb3VudEluBQNGZWUFCEZlZVNjYWxlBA1jbGVhbkFtb3VudEluCQBlAgUIQW1vdW50SW4FC2ZlZUFtb3VudEluBAlBbW91bnRPdXQJARJjYWxjdWxhdGVPdXRBbW91bnQFBQ1jbGVhbkFtb3VudEluBQdBc3NldEluBQhBc3NldE91dAUOQXNzZXRJbkJhbGFuY2UFD0Fzc2V0T3V0QmFsYW5jZQQDdXBsAwkAAAIFCEFzc2V0T3V0BQVwbHV0bwkA/AcEBQdwbHV0b1NDAgd1bnN0YWtlCQDMCAIFCUFtb3VudE91dAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUDdXBsBQN1cGwEA3NwbAMJAAACBQdBc3NldEluBQVwbHV0bwkA/AcEBQdwbHV0b1NDAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQVwbHV0bwUIQW1vdW50SW4FA25pbAUEdW5pdAMJAAACBQNzcGwFA3NwbAQDY3B1AwkAAAIFCEFzc2V0T3V0BQZwdXp6bGUJAPwHBAUNcHV6emxlU3Rha2luZwILY2xhaW1SZXdhcmQFA25pbAUDbmlsBQR1bml0AwkAAAIFA2NwdQUDY3B1BAN1cHUDCQAAAgUIQXNzZXRPdXQFBnB1enpsZQkA/AcEBQ1wdXp6bGVTdGFraW5nAgd1blN0YWtlCQDMCAIJAGUCBQlBbW91bnRPdXQJAPAHAgUEdGhpcwUGcHV6emxlBQNuaWwFA25pbAUEdW5pdAMJAAACBQN1cHUFA3VwdQQDc3B1AwkAAAIFB0Fzc2V0SW4FBnB1enpsZQkA/AcEBQ1wdXp6bGVTdGFraW5nAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQZwdXp6bGUJAPAHAgUEdGhpcwUGcHV6emxlBQNuaWwFBHVuaXQDCQAAAgUDc3B1BQNzcHUEGHNoYXJlQW1vdW50V2l0aGRyYXdXYXZlcwkAbgQJAGUCBQlBbW91bnRPdXQICQDvBwEFBHRoaXMHcmVndWxhcgABCQBrAwkBDnRyeUdldEludGVnZXIyAgUGc3dvcFNDAg9BX2Fzc2V0X2JhbGFuY2UAAQkBDnRyeUdldEludGVnZXIyAgUGc3dvcFNDAhJzaGFyZV9hc3NldF9zdXBwbHkFB0NFSUxJTkcEA3V3cwMJAAACBQhBc3NldE91dAUFd2F2ZXMJAPwHBAUGc3dvcFNDAgxjYWxsRnVuY3Rpb24JAMwIAgIId2l0aGRyYXcJAMwIAgkAzAgCCQCkAwEFGHNoYXJlQW1vdW50V2l0aGRyYXdXYXZlcwUDbmlsBQNuaWwFA25pbAUEdW5pdAMJAAACBQN1d3MFA3V3cwQWc2hhcmVBbW91bnRXaXRoZHJhd1h0bgkAbgQJAGUCBQlBbW91bnRPdXQJAPAHAgUEdGhpcwUDeHRuAAEJAGsDCQEOdHJ5R2V0SW50ZWdlcjICBQZzd29wU0MCD0JfYXNzZXRfYmFsYW5jZQABCQEOdHJ5R2V0SW50ZWdlcjICBQZzd29wU0MCEnNoYXJlX2Fzc2V0X3N1cHBseQUHQ0VJTElORwQDdXhzAwkAAAIFCEFzc2V0T3V0BQN4dG4JAPwHBAUGc3dvcFNDAgxjYWxsRnVuY3Rpb24JAMwIAgIId2l0aGRyYXcJAMwIAgkAzAgCCQCkAwEFFnNoYXJlQW1vdW50V2l0aGRyYXdYdG4FA25pbAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUDdXhzBQN1eHMEBHN3eHMDAwMDCQECIT0CBQhBc3NldE91dAUDeHRuCQECIT0CBQhBc3NldE91dAUFd2F2ZXMHCQBmAgkBD2dldFRva2VuQmFsYW5jZQEFA3h0bgAABwkAZgIJAQ9nZXRUb2tlbkJhbGFuY2UBBQV3YXZlcwAABwkA/AcEBQZzd29wU0MCDGNhbGxGdW5jdGlvbgkAzAgCAhZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zCQDMCAICBHRydWUJAMwIAgIBMAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0CAkA7wcBBQR0aGlzB3JlZ3VsYXIJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFA3h0bgkA8AcCBQR0aGlzBQN4dG4FA25pbAUEdW5pdAMJAAACBQRzd3hzBQRzd3hzAwkAZgIFB21pbmltdW0FCUFtb3VudE91dAkAAgECJ2Ftb3VudCB0byByZWNlaXZlIGlzIGxvd2VyIHRoYW4gbWluaW11bQMJAAACBQhBc3NldE91dAUHQXNzZXRJbgkAAgECGHRoaXMgc3dhcCBpcyBub3QgYWxsb3dlZAMJAGYCAAAJAGUCBQ9Bc3NldE91dEJhbGFuY2UFCUFtb3VudE91dAkAAgECE3N3YXAgc21hbGxlciBhbW91bnQDCQEKaXNTaHV0ZG93bgAJAAIBAhNjb250cmFjdCBpcyBvbiBzdG9wCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUJQW1vdW50T3V0BQhBc3NldE91dAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHN0YXJ0QmFsYW5jZQADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtrZXlCdXJueHRuUwkBD2dldFRva2VuQmFsYW5jZQEFB2J1cm54dG4JAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVBsdXRvUwkBD2dldFRva2VuQmFsYW5jZQEFBXBsdXRvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprZXlQdXp6bGVTCQEPZ2V0VG9rZW5CYWxhbmNlAQUGcHV6emxlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlXYXZlc1MJAQ9nZXRUb2tlbkJhbGFuY2UBBQR1bml0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rZXlXaGlybHBvb2xTCQEPZ2V0VG9rZW5CYWxhbmNlAQUJd2hpcmxwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhrZXlSb21lUwkBD2dldFRva2VuQmFsYW5jZQEFBHJvbWUJAMwIAgkBDEludGVnZXJFbnRyeQIFB2tleVh0blMJAQ9nZXRUb2tlbkJhbGFuY2UBBQN4dG4FA25pbAFpARRjdXJyZW50QmFsYW5jZVByb2ZpdAADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhhCVVJOLVhUTiBjdXJyZW50IGJhbGFuY2UJAQ9nZXRUb2tlbkJhbGFuY2UBBQdidXJueHRuCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhVQTFVUTyBjdXJyZW50IGJhbGFuY2UJAQ9nZXRUb2tlbkJhbGFuY2UBBQVwbHV0bwkAzAgCCQEMSW50ZWdlckVudHJ5AgIWUFVaWkxFIGN1cnJlbnQgYmFsYW5jZQkBD2dldFRva2VuQmFsYW5jZQEFBnB1enpsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIVV0FWRVMgY3VycmVudCBiYWxhbmNlCQEPZ2V0VG9rZW5CYWxhbmNlAQUFd2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICGVdISVJMUE9PTCBjdXJyZW50IGJhbGFuY2UJAQ9nZXRUb2tlbkJhbGFuY2UBBQl3aGlybHBvb2wJAMwIAgkBDEludGVnZXJFbnRyeQICFFJPTUUgY3VycmVudCBiYWxhbmNlCQEPZ2V0VG9rZW5CYWxhbmNlAQUEcm9tZQkAzAgCCQEMSW50ZWdlckVudHJ5AgITWFROIGN1cnJlbnQgYmFsYW5jZQkBD2dldFRva2VuQmFsYW5jZQEFA3h0bgkAzAgCCQEMSW50ZWdlckVudHJ5AgIPQlVSTi1YVE4gcHJvZml0CQBlAgkBD2dldFRva2VuQmFsYW5jZQEFB2J1cm54dG4JAQ10cnlHZXRJbnRlZ2VyAQULa2V5QnVybnh0blMJAMwIAgkBDEludGVnZXJFbnRyeQICDFBMVVRPIHByb2ZpdAkAZQIJAQ9nZXRUb2tlbkJhbGFuY2UBBQVwbHV0bwkBDXRyeUdldEludGVnZXIBBQlrZXlQbHV0b1MJAMwIAgkBDEludGVnZXJFbnRyeQICDVBVWlpMRSBwcm9maXQJAGUCCQEPZ2V0VG9rZW5CYWxhbmNlAQUGcHV6emxlCQENdHJ5R2V0SW50ZWdlcgEFCmtleVB1enpsZVMJAMwIAgkBDEludGVnZXJFbnRyeQICC1dBVkVTIHByb2Z0CQBlAgkBD2dldFRva2VuQmFsYW5jZQEFBXdhdmVzCQENdHJ5R2V0SW50ZWdlcgEFCWtleVdhdmVzUwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQV0hJUkxQT09MIHByb2ZpdAkAZQIJAQ9nZXRUb2tlbkJhbGFuY2UBBQl3aGlybHBvb2wJAQ10cnlHZXRJbnRlZ2VyAQUNa2V5V2hpcmxwb29sUwkAzAgCCQEMSW50ZWdlckVudHJ5AgILUk9NRSBwcm9maXQJAGUCCQEPZ2V0VG9rZW5CYWxhbmNlAQUEcm9tZQkBDXRyeUdldEludGVnZXIBBQhrZXlSb21lUwkAzAgCCQEMSW50ZWdlckVudHJ5AgIKWFROIHByb2Z0aQkAZQIJAQ9nZXRUb2tlbkJhbGFuY2UBBQN4dG4JAQ10cnlHZXRJbnRlZ2VyAQUHa2V5WHRuUwUDbmlsACfF7D0=", "height": 4055792, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8tMoQ6kL9aCdunJ5ppyTqDeVL4wfRQZGjdLKXmbzmD5d Next: Am6Lqm7vECUUwGZVXSHZsW9aZ79xuiUWq6s1VLJL3zXb Diff:
OldNewDifferences
196196 else if (if ((fee > 500))
197197 then true
198198 else (1 > fee))
199- then throw("fee value must be between 50 and 500 (0.5-5%)")
199+ then throw("fee value must be between 1 and 500 (0.01-5%)")
200200 else {
201- let assetIdsStrLi = split(assetIdsStr, ",")
202- let assetIdsLi = {
203- let $l = assetIdsStrLi
204- let $s = size($l)
205- let $acc0 = nil
206- func $f4_1 ($a,$i) = if (($i >= $s))
207- then $a
208- else addAssetBytesToList($a, $l[$i])
201+ let sb = invoke(this, "startBalance", nil, nil)
202+ if ((sb == sb))
203+ then {
204+ let assetIdsStrLi = split(assetIdsStr, ",")
205+ let assetIdsLi = {
206+ let $l = assetIdsStrLi
207+ let $s = size($l)
208+ let $acc0 = nil
209+ func $f4_1 ($a,$i) = if (($i >= $s))
210+ then $a
211+ else addAssetBytesToList($a, $l[$i])
209212
210- func $f4_2 ($a,$i) = if (($i >= $s))
211- then $a
212- else throw("List size exceeds 10")
213+ func $f4_2 ($a,$i) = if (($i >= $s))
214+ then $a
215+ else throw("List size exceeds 10")
213216
214- $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)
215- }
216- let assetWeightsStrLi = split(assetWeightsStr, ",")
217- let assetWeightsSum = {
218- let $l = assetWeightsStrLi
219- let $s = size($l)
220- let $acc0 = 0
221- func $f5_1 ($a,$i) = if (($i >= $s))
222- then $a
223- else sum($a, $l[$i])
217+ $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+ }
219+ let assetWeightsStrLi = split(assetWeightsStr, ",")
220+ let assetWeightsSum = {
221+ let $l = assetWeightsStrLi
222+ let $s = size($l)
223+ let $acc0 = 0
224+ func $f5_1 ($a,$i) = if (($i >= $s))
225+ then $a
226+ else sum($a, $l[$i])
224227
225- func $f5_2 ($a,$i) = if (($i >= $s))
226- then $a
227- else throw("List size exceeds 10")
228+ func $f5_2 ($a,$i) = if (($i >= $s))
229+ then $a
230+ else throw("List size exceeds 10")
228231
229- $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)
230- }
231- func addTokenDataEntries (accum,assetNum) = if ((assetNum >= size(assetIdsLi)))
232- then accum
233- else {
234- let assetDecimals = match assetIdsLi[assetNum] {
235- case x: ByteVector =>
236- value(assetInfo(x)).decimals
237- case _ =>
238- 8
232+ $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+ }
234+ func addTokenDataEntries (accum,assetNum) = if ((assetNum >= size(assetIdsLi)))
235+ then accum
236+ else {
237+ let assetDecimals = match assetIdsLi[assetNum] {
238+ case x: ByteVector =>
239+ value(assetInfo(x)).decimals
240+ case _ =>
241+ 8
242+ }
243+ (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+ }
245+
246+ if ((assetWeightsSum != 10000))
247+ then throw("sum of token weights must be equal to 10000")
248+ else ({
249+ let $l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
250+ let $s = size($l)
251+ let $acc0 = nil
252+ func $f6_1 ($a,$i) = if (($i >= $s))
253+ then $a
254+ else addTokenDataEntries($a, $l[$i])
255+
256+ func $f6_2 ($a,$i) = if (($i >= $s))
257+ then $a
258+ else throw("List size exceeds 10")
259+
260+ $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+ } ++ [StringEntry("static_tokenIds", assetIdsStr), StringEntry("static_tokenWeights", assetWeightsStr), IntegerEntry("static_tokensAmount", size(assetIdsLi)), IntegerEntry("static_fee", fee)])
239262 }
240- (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])))])
241- }
242-
243- if ((assetWeightsSum != 10000))
244- then throw("sum of token weights must be equal to 10000")
245- else ({
246- let $l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
247- let $s = size($l)
248- let $acc0 = nil
249- func $f6_1 ($a,$i) = if (($i >= $s))
250- then $a
251- else addTokenDataEntries($a, $l[$i])
252-
253- func $f6_2 ($a,$i) = if (($i >= $s))
254- then $a
255- else throw("List size exceeds 10")
256-
257- $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)
258- } ++ [StringEntry("static_tokenIds", assetIdsStr), StringEntry("static_tokenWeights", assetWeightsStr), IntegerEntry("static_tokensAmount", size(assetIdsLi)), IntegerEntry("static_fee", fee)])
263+ else throw("Strict value is not equal to itself.")
259264 }
260265
261266
355360 @Callable(i)
356361 func startBalance () = if ((i.caller != this))
357362 then throw("access only by project owner")
358- else [IntegerEntry(keyBurnxtnS, getTokenBalance(burnxtn)), IntegerEntry(keyPlutoS, getTokenBalance(pluto)), IntegerEntry(keyPuzzleS, getTokenBalance(puzzle)), IntegerEntry(keyWavesS, getTokenBalance(waves)), IntegerEntry(keyWhirlpoolS, getTokenBalance(whirlpool)), IntegerEntry(keyRomeS, getTokenBalance(rome)), IntegerEntry(keyXtnS, getTokenBalance(xtn))]
363+ 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))]
359364
360365
361366
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let pluto = base58'Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5'
55
66 let xtn = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
77
88 let puzzle = base58'HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS'
99
1010 let waves = base58'WAVES'
1111
1212 let burnxtn = base58'3SjxA2YLdfF9fTRbzLm9xFn27C6MW34W1YsdJ6Axefns'
1313
1414 let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi'
1515
1616 let rome = base58'AP4Cb5xLYGH6ZigHreCZHoXpQTWDkPsG2BHqfDUx6taJ'
1717
1818 let plutoSC = Address(base58'3P7dGTVZp8VLDYy3XEaUQbiqfi9cMK1Ly5q')
1919
2020 let swopSC = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG')
2121
2222 let puzzleStaking = Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS')
2323
2424 let keyPlutoS = "PLUTO starting balance"
2525
2626 let keyXtnS = "XTN starting balance"
2727
2828 let keyPuzzleS = "PUZZLE starting balance"
2929
3030 let keyWavesS = "WAVES starting balance"
3131
3232 let keyBurnxtnS = "BURN-XTN starting balance"
3333
3434 let keyWhirlpoolS = "WHIRLPOOL starting balance"
3535
3636 let keyRomeS = "ROME starting balance"
3737
3838 func tryGetInteger (key) = match getInteger(this, key) {
3939 case b: Int =>
4040 b
4141 case _ =>
4242 0
4343 }
4444
4545
4646 func tryGetInteger2 (address,key) = match getInteger(address, key) {
4747 case b: Int =>
4848 b
4949 case _ =>
5050 0
5151 }
5252
5353
5454 func tryGetString (key) = match getString(this, key) {
5555 case b: String =>
5656 b
5757 case _ =>
5858 ""
5959 }
6060
6161
6262 func getAssetString (assetId) = match assetId {
6363 case b: ByteVector =>
6464 toBase58String(b)
6565 case _ =>
6666 "WAVES"
6767 }
6868
6969
7070 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
7171 then unit
7272 else fromBase58String(assetIdStr)
7373
7474
7575 func addAssetBytesToList (accum,item) = (accum ++ [getAssetBytes(item)])
7676
7777
7878 func addAssetWeightToList (accum,item) = (accum ++ [tryGetInteger((("static_" + getAssetString(item)) + "_weight"))])
7979
8080
8181 let assetIds = {
8282 let $l = split(tryGetString("static_tokenIds"), ",")
8383 let $s = size($l)
8484 let $acc0 = nil
8585 func $f0_1 ($a,$i) = if (($i >= $s))
8686 then $a
8787 else addAssetBytesToList($a, $l[$i])
8888
8989 func $f0_2 ($a,$i) = if (($i >= $s))
9090 then $a
9191 else throw("List size exceeds 10")
9292
9393 $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)
9494 }
9595
9696 let AssetsWeights = {
9797 let $l = assetIds
9898 let $s = size($l)
9999 let $acc0 = nil
100100 func $f1_1 ($a,$i) = if (($i >= $s))
101101 then $a
102102 else addAssetWeightToList($a, $l[$i])
103103
104104 func $f1_2 ($a,$i) = if (($i >= $s))
105105 then $a
106106 else throw("List size exceeds 10")
107107
108108 $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)
109109 }
110110
111111 let Fee = tryGetInteger("static_fee")
112112
113113 let Scale8 = 100000000
114114
115115 let FeeScale = 10000
116116
117117 func calculateOutAmount (AmountIn,assetIn,assetOut,BalanceIn,BalanceOut) = {
118118 let IndexIn = value(indexOf(assetIds, assetIn))
119119 let IndexOut = value(indexOf(assetIds, assetOut))
120120 if ((IndexIn == IndexOut))
121121 then AmountIn
122122 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)
123123 }
124124
125125
126126 func calculateSRate () = {
127127 let stakingEmission = match invoke(Address(base58'3P3a1jssxc2CGdyC7SGbTJc9ZvTjZ5jBMLZ'), "getStakingBlockEmission", [false], nil) {
128128 case in: Int =>
129129 in
130130 case _ =>
131131 throw("bad invoke")
132132 }
133133 if ((stakingEmission == stakingEmission))
134134 then {
135135 let lastCheckSRate = tryGetInteger2(plutoSC, "global_lastCheckSRate")
136136 let sPlutoAmount = tryGetInteger2(plutoSC, "global_sPluto")
137137 let lastCheckHeight = tryGetInteger2(plutoSC, "global_lastCheckSRateHeight")
138138 let blocks = (height - lastCheckHeight)
139139 if ((sPlutoAmount == 0))
140140 then Scale8
141141 else (tryGetInteger2(plutoSC, "global_lastCheckSRate") + fraction((blocks * Scale8), stakingEmission, sPlutoAmount))
142142 }
143143 else throw("Strict value is not equal to itself.")
144144 }
145145
146146
147147 func calculateStakedAmount () = {
148148 let amount = tryGetInteger2(plutoSC, (toString(this) + "_sPluto"))
149149 fraction(amount, calculateSRate(), Scale8)
150150 }
151151
152152
153153 let puzzleStaked = tryGetInteger2(puzzleStaking, (toString(this) + "_staked"))
154154
155155 let wavesInSwop = fraction(tryGetInteger2(swopSC, "A_asset_balance"), tryGetInteger2(swopSC, (("3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG_" + toString(this)) + "_share_tokens_locked")), tryGetInteger2(swopSC, "share_asset_supply"))
156156
157157 let xtnInSwop = fraction(tryGetInteger2(swopSC, "B_asset_balance"), tryGetInteger2(swopSC, (("3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG_" + toString(this)) + "_share_tokens_locked")), tryGetInteger2(swopSC, "share_asset_supply"))
158158
159159 func getTokenBalance (assetId) = match assetId {
160160 case t: ByteVector =>
161161 (assetBalance(this, t) + (if ((assetId == pluto))
162162 then calculateStakedAmount()
163163 else (0 + (if ((assetId == puzzle))
164164 then puzzleStaked
165165 else (0 + (if ((assetId == xtn))
166166 then xtnInSwop
167167 else 0))))))
168168 case _ =>
169169 (wavesBalance(this).regular + wavesInSwop)
170170 }
171171
172172
173173 func sum (accum,n) = (accum + parseIntValue(n))
174174
175175
176176 func isShutdown () = match getBoolean(this, "is_shutdown") {
177177 case x: Boolean =>
178178 x
179179 case _ =>
180180 false
181181 }
182182
183183
184184 @Callable(i)
185185 func shutdown (shutdown) = if ((i.caller == this))
186186 then [BooleanEntry("is_shutdown", shutdown)]
187187 else throw("admin only")
188188
189189
190190
191191 @Callable(i)
192192 func preInit (assetIdsStr,assetWeightsStr,fee) = if (isShutdown())
193193 then throw("contract is on stop")
194194 else if ((this != i.caller))
195195 then throw("admin only")
196196 else if (if ((fee > 500))
197197 then true
198198 else (1 > fee))
199- then throw("fee value must be between 50 and 500 (0.5-5%)")
199+ then throw("fee value must be between 1 and 500 (0.01-5%)")
200200 else {
201- let assetIdsStrLi = split(assetIdsStr, ",")
202- let assetIdsLi = {
203- let $l = assetIdsStrLi
204- let $s = size($l)
205- let $acc0 = nil
206- func $f4_1 ($a,$i) = if (($i >= $s))
207- then $a
208- else addAssetBytesToList($a, $l[$i])
201+ let sb = invoke(this, "startBalance", nil, nil)
202+ if ((sb == sb))
203+ then {
204+ let assetIdsStrLi = split(assetIdsStr, ",")
205+ let assetIdsLi = {
206+ let $l = assetIdsStrLi
207+ let $s = size($l)
208+ let $acc0 = nil
209+ func $f4_1 ($a,$i) = if (($i >= $s))
210+ then $a
211+ else addAssetBytesToList($a, $l[$i])
209212
210- func $f4_2 ($a,$i) = if (($i >= $s))
211- then $a
212- else throw("List size exceeds 10")
213+ func $f4_2 ($a,$i) = if (($i >= $s))
214+ then $a
215+ else throw("List size exceeds 10")
213216
214- $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)
215- }
216- let assetWeightsStrLi = split(assetWeightsStr, ",")
217- let assetWeightsSum = {
218- let $l = assetWeightsStrLi
219- let $s = size($l)
220- let $acc0 = 0
221- func $f5_1 ($a,$i) = if (($i >= $s))
222- then $a
223- else sum($a, $l[$i])
217+ $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+ }
219+ let assetWeightsStrLi = split(assetWeightsStr, ",")
220+ let assetWeightsSum = {
221+ let $l = assetWeightsStrLi
222+ let $s = size($l)
223+ let $acc0 = 0
224+ func $f5_1 ($a,$i) = if (($i >= $s))
225+ then $a
226+ else sum($a, $l[$i])
224227
225- func $f5_2 ($a,$i) = if (($i >= $s))
226- then $a
227- else throw("List size exceeds 10")
228+ func $f5_2 ($a,$i) = if (($i >= $s))
229+ then $a
230+ else throw("List size exceeds 10")
228231
229- $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)
230- }
231- func addTokenDataEntries (accum,assetNum) = if ((assetNum >= size(assetIdsLi)))
232- then accum
233- else {
234- let assetDecimals = match assetIdsLi[assetNum] {
235- case x: ByteVector =>
236- value(assetInfo(x)).decimals
237- case _ =>
238- 8
232+ $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+ }
234+ func addTokenDataEntries (accum,assetNum) = if ((assetNum >= size(assetIdsLi)))
235+ then accum
236+ else {
237+ let assetDecimals = match assetIdsLi[assetNum] {
238+ case x: ByteVector =>
239+ value(assetInfo(x)).decimals
240+ case _ =>
241+ 8
242+ }
243+ (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+ }
245+
246+ if ((assetWeightsSum != 10000))
247+ then throw("sum of token weights must be equal to 10000")
248+ else ({
249+ let $l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
250+ let $s = size($l)
251+ let $acc0 = nil
252+ func $f6_1 ($a,$i) = if (($i >= $s))
253+ then $a
254+ else addTokenDataEntries($a, $l[$i])
255+
256+ func $f6_2 ($a,$i) = if (($i >= $s))
257+ then $a
258+ else throw("List size exceeds 10")
259+
260+ $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+ } ++ [StringEntry("static_tokenIds", assetIdsStr), StringEntry("static_tokenWeights", assetWeightsStr), IntegerEntry("static_tokensAmount", size(assetIdsLi)), IntegerEntry("static_fee", fee)])
239262 }
240- (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])))])
241- }
242-
243- if ((assetWeightsSum != 10000))
244- then throw("sum of token weights must be equal to 10000")
245- else ({
246- let $l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
247- let $s = size($l)
248- let $acc0 = nil
249- func $f6_1 ($a,$i) = if (($i >= $s))
250- then $a
251- else addTokenDataEntries($a, $l[$i])
252-
253- func $f6_2 ($a,$i) = if (($i >= $s))
254- then $a
255- else throw("List size exceeds 10")
256-
257- $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)
258- } ++ [StringEntry("static_tokenIds", assetIdsStr), StringEntry("static_tokenWeights", assetWeightsStr), IntegerEntry("static_tokensAmount", size(assetIdsLi)), IntegerEntry("static_fee", fee)])
263+ else throw("Strict value is not equal to itself.")
259264 }
260265
261266
262267
263268 @Callable(i)
264269 func swap (assetOut,minimum) = if (if ((isShutdown() == true))
265270 then (i.caller != Address(base58'3PPCzX2doZ7agBNuGSKqjrbdXgGEtE7CpQ3'))
266271 else false)
267272 then throw("contract is shutdown")
268273 else {
269274 let pmt = if ((size(i.payments) == 1))
270275 then value(i.payments[0])
271276 else throw("please attach exactly one payment")
272277 let AmountIn = value(i.payments[0].amount)
273278 let AssetIn = pmt.assetId
274279 let AssetOut = getAssetBytes(assetOut)
275280 let AssetInBalance = getTokenBalance(AssetIn)
276281 let AssetOutBalance = getTokenBalance(AssetOut)
277282 let feeAmountIn = fraction(AmountIn, Fee, FeeScale)
278283 let cleanAmountIn = (AmountIn - feeAmountIn)
279284 let AmountOut = calculateOutAmount(cleanAmountIn, AssetIn, AssetOut, AssetInBalance, AssetOutBalance)
280285 let upl = if ((AssetOut == pluto))
281286 then invoke(plutoSC, "unstake", [AmountOut], nil)
282287 else unit
283288 if ((upl == upl))
284289 then {
285290 let spl = if ((AssetIn == pluto))
286291 then invoke(plutoSC, "stake", nil, [AttachedPayment(pluto, AmountIn)])
287292 else unit
288293 if ((spl == spl))
289294 then {
290295 let cpu = if ((AssetOut == puzzle))
291296 then invoke(puzzleStaking, "claimReward", nil, nil)
292297 else unit
293298 if ((cpu == cpu))
294299 then {
295300 let upu = if ((AssetOut == puzzle))
296301 then invoke(puzzleStaking, "unStake", [(AmountOut - assetBalance(this, puzzle))], nil)
297302 else unit
298303 if ((upu == upu))
299304 then {
300305 let spu = if ((AssetIn == puzzle))
301306 then invoke(puzzleStaking, "stake", nil, [AttachedPayment(puzzle, assetBalance(this, puzzle))])
302307 else unit
303308 if ((spu == spu))
304309 then {
305310 let shareAmountWithdrawWaves = fraction((AmountOut - wavesBalance(this).regular), 1, fraction(tryGetInteger2(swopSC, "A_asset_balance"), 1, tryGetInteger2(swopSC, "share_asset_supply")), CEILING)
306311 let uws = if ((AssetOut == waves))
307312 then invoke(swopSC, "callFunction", ["withdraw", [toString(shareAmountWithdrawWaves)]], nil)
308313 else unit
309314 if ((uws == uws))
310315 then {
311316 let shareAmountWithdrawXtn = fraction((AmountOut - assetBalance(this, xtn)), 1, fraction(tryGetInteger2(swopSC, "B_asset_balance"), 1, tryGetInteger2(swopSC, "share_asset_supply")), CEILING)
312317 let uxs = if ((AssetOut == xtn))
313318 then invoke(swopSC, "callFunction", ["withdraw", [toString(shareAmountWithdrawXtn)]], nil)
314319 else unit
315320 if ((uxs == uxs))
316321 then {
317322 let swxs = if (if (if (if ((AssetOut != xtn))
318323 then (AssetOut != waves)
319324 else false)
320325 then (getTokenBalance(xtn) > 0)
321326 else false)
322327 then (getTokenBalance(waves) > 0)
323328 else false)
324329 then invoke(swopSC, "callFunction", ["replenishWithTwoTokens", "true", "0"], [AttachedPayment(unit, wavesBalance(this).regular), AttachedPayment(xtn, assetBalance(this, xtn))])
325330 else unit
326331 if ((swxs == swxs))
327332 then if ((minimum > AmountOut))
328333 then throw("amount to receive is lower than minimum")
329334 else if ((AssetOut == AssetIn))
330335 then throw("this swap is not allowed")
331336 else if ((0 > (AssetOutBalance - AmountOut)))
332337 then throw("swap smaller amount")
333338 else if (isShutdown())
334339 then throw("contract is on stop")
335340 else [ScriptTransfer(i.caller, AmountOut, AssetOut)]
336341 else throw("Strict value is not equal to itself.")
337342 }
338343 else throw("Strict value is not equal to itself.")
339344 }
340345 else throw("Strict value is not equal to itself.")
341346 }
342347 else throw("Strict value is not equal to itself.")
343348 }
344349 else throw("Strict value is not equal to itself.")
345350 }
346351 else throw("Strict value is not equal to itself.")
347352 }
348353 else throw("Strict value is not equal to itself.")
349354 }
350355 else throw("Strict value is not equal to itself.")
351356 }
352357
353358
354359
355360 @Callable(i)
356361 func startBalance () = if ((i.caller != this))
357362 then throw("access only by project owner")
358- else [IntegerEntry(keyBurnxtnS, getTokenBalance(burnxtn)), IntegerEntry(keyPlutoS, getTokenBalance(pluto)), IntegerEntry(keyPuzzleS, getTokenBalance(puzzle)), IntegerEntry(keyWavesS, getTokenBalance(waves)), IntegerEntry(keyWhirlpoolS, getTokenBalance(whirlpool)), IntegerEntry(keyRomeS, getTokenBalance(rome)), IntegerEntry(keyXtnS, getTokenBalance(xtn))]
363+ 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))]
359364
360365
361366
362367 @Callable(i)
363368 func currentBalanceProfit () = if ((i.caller != this))
364369 then throw("access only by project owner")
365370 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)))]
366371
367372

github/deemru/w8io/3ef1775 
71.30 ms