tx · FXWD8v91aHkQkTVqQ1eYtRydoDc9t9JwkU9CTrQFKEA7 3Msp7W9rHyHkvvKBKU3rB44SqqcDALMbgbg: -0.01300000 Waves 2024.04.28 20:56 [3083031] smart account 3Msp7W9rHyHkvvKBKU3rB44SqqcDALMbgbg > SELF 0.00000000 Waves
{ "type": 13, "id": "FXWD8v91aHkQkTVqQ1eYtRydoDc9t9JwkU9CTrQFKEA7", "fee": 1300000, "feeAssetId": null, "timestamp": 1714327023294, "version": 1, "sender": "3Msp7W9rHyHkvvKBKU3rB44SqqcDALMbgbg", "senderPublicKey": "C8dozAo9f9TPEGLW4t5E5NfuxkWSVXXxYRJhknRi5yUr", "proofs": [ "62t4Ymz3WipoUvX512furyhQjfqQjwdWKpAisPF3NxZDXKXuFXcdwXhxktK7WXMfNSp2LTcQW8mPLNhqQuGiTeSq" ], "script": "base64:BgIjCAISAwoBCBIECgIBCBIDCgEIEgQKAggIEgMKAQgSBAoCAQgFAQppc1NodXRkb3duAAQHJG1hdGNoMAkAmwgCCQEHQWRkcmVzcwEBGgFUNKD0xK6a5LXYfAuBqgjYdN35DKCOUkY1Agtpc19zaHV0ZG93bgMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAF4BQckbWF0Y2gwBQF4BwENZ2V0QXNzZXRCeXRlcwEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwUEdW5pdAkA2QQBBQphc3NldElkU3RyAQ5nZXRBc3NldFN0cmluZwEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEJAQV2YWx1ZQEFB2Fzc2V0SWQCBVdBVkVTAQ9nZXRUb2tlbkJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBdAUHJG1hdGNoMAkA8AcCBQR0aGlzBQF0CAkA7wcBBQR0aGlzCWF2YWlsYWJsZQETYWRkQXNzZXRCeXRlc1RvTGlzdAIFYWNjdW0EaXRlbQkAzggCBQVhY2N1bQkAzAgCCQENZ2V0QXNzZXRCeXRlcwEFBGl0ZW0FA25pbAYBaQEhZ2VuZXJhdGVJbmRleFdpdGhPbmVUb2tlbkFuZFN0YWtlAQ5tYWluQWRkcmVzc1N0cgQHdG9rZW5JZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtiYXNlQXNzZXRJZAUHdG9rZW5JZAQLbWFpbkFkZHJlc3MJAQdBZGRyZXNzAQkA2QQBBQ5tYWluQWRkcmVzc1N0cgQIYXNzZXRJZHMKAAIkbAkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQttYWluQWRkcmVzcwIPc3RhdGljX3Rva2VuSWRzAgEsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARNhZGRBc3NldEJ5dGVzVG9MaXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBBFzZWNvbmRhcnlBc3NldElkcwkA0QgCBQhhc3NldElkcwkBBXZhbHVlAQkAzwgCBQhhc3NldElkcwUHdG9rZW5JZAQLcG9vbEluZGV4SWQJARFAZXh0ck5hdGl2ZSgxMDUyKQIFC21haW5BZGRyZXNzAhNnbG9iYWxfcG9vbFRva2VuX2lkBAZhbW91bnQJAGkCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudACQTgoBB2hhbmRsZXICBWFjY3VtB2Fzc2V0SWQECmFzc2V0SWRTdHIJAQ5nZXRBc3NldFN0cmluZwEFB2Fzc2V0SWQEC2Fzc2V0V2VpZ2h0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQttYWluQWRkcmVzcwkArAICCQCsAgICB3N0YXRpY18FCmFzc2V0SWRTdHICB193ZWlnaHQEAmluBAckbWF0Y2gwCQD9BwQFC21haW5BZGRyZXNzAgRzd2FwCQDMCAIJAQ5nZXRBc3NldFN0cmluZwEFB2Fzc2V0SWQJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC2Jhc2VBc3NldElkCQBoAgUGYW1vdW50BQthc3NldFdlaWdodAUDbmlsAwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAAAAwkAAAIFAmluBQJpbgkAzggCBQVhY2N1bQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUCaW4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQPYmFzZUFzc2V0V2VpZ2h0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQttYWluQWRkcmVzcwkArAICCQCsAgICB3N0YXRpY18JAQ5nZXRBc3NldFN0cmluZwEFC2Jhc2VBc3NldElkAgdfd2VpZ2h0BA9leGNoYW5nZUludm9rZXMKAAIkbAURc2Vjb25kYXJ5QXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQtiYXNlQXNzZXRJZAkAaAIFBmFtb3VudAUPYmFzZUFzc2V0V2VpZ2h0BQNuaWwKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2hhbmRsZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDkJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkDCQAAAgUPZXhjaGFuZ2VJbnZva2VzBQ9leGNoYW5nZUludm9rZXMEDVBJc3N1ZWRBbW91bnQEByRtYXRjaDAJAP0HBAULbWFpbkFkZHJlc3MCDWdlbmVyYXRlSW5kZXgJAMwIAgcFA25pbAUPZXhjaGFuZ2VJbnZva2VzAwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAAAAwkAAAIFDVBJc3N1ZWRBbW91bnQFDVBJc3N1ZWRBbW91bnQEC3N0YWtlSW52b2tlCQD9BwQFC21haW5BZGRyZXNzAgpzdGFrZUluZGV4BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3Bvb2xJbmRleElkBQ1QSXNzdWVkQW1vdW50BQNuaWwDCQAAAgULc3Rha2VJbnZva2UFC3N0YWtlSW52b2tlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEfdW5zdGFrZUluZGV4QW5kUmVkZWVtQXNPbmVUb2tlbgILaW5kZXhBbW91bnQObWFpbkFkZHJlc3NTdHIEC21haW5BZGRyZXNzCQEHQWRkcmVzcwEJANkEAQUObWFpbkFkZHJlc3NTdHIECGFzc2V0SWRzCgACJGwJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgULbWFpbkFkZHJlc3MCD3N0YXRpY190b2tlbklkcwIBLAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQETYWRkQXNzZXRCeXRlc1RvTGlzdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQLYmFzZUFzc2V0SWQJAQ1nZXRBc3NldEJ5dGVzAQkBEUBleHRyTmF0aXZlKDEwNTMpAgULbWFpbkFkZHJlc3MCEnN0YXRpY19iYXNlVG9rZW5JZAQRc2Vjb25kYXJ5QXNzZXRJZHMJANEIAgUIYXNzZXRJZHMJAQV2YWx1ZQEJAM8IAgUIYXNzZXRJZHMFC2Jhc2VBc3NldElkBAtwb29sSW5kZXhJZAkBEUBleHRyTmF0aXZlKDEwNTIpAgULbWFpbkFkZHJlc3MCE2dsb2JhbF9wb29sVG9rZW5faWQKAQxmb2xkSGFuZGxlcjECBWFjY3VtB2Fzc2V0SWQJAM4IAgUFYWNjdW0JAMwIAgkBD2dldFRva2VuQmFsYW5jZQEFB2Fzc2V0SWQFA25pbAQOYmFsYW5jZXNCZWZvcmUKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGZvbGRIYW5kbGVyMQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgMJAAACBQ5iYWxhbmNlc0JlZm9yZQUOYmFsYW5jZXNCZWZvcmUED2Jhc2VBc3NldEJlZm9yZQkBD2dldFRva2VuQmFsYW5jZQEFC2Jhc2VBc3NldElkAwkAAAIFD2Jhc2VBc3NldEJlZm9yZQUPYmFzZUFzc2V0QmVmb3JlBA11bnN0YWtlSW52b2tlCQD9BwQFC21haW5BZGRyZXNzAhV1bnN0YWtlQW5kUmVkZWVtSW5kZXgJAMwIAgULaW5kZXhBbW91bnQFA25pbAUDbmlsAwkAAAIFDXVuc3Rha2VJbnZva2UFDXVuc3Rha2VJbnZva2UEDWJhbGFuY2VzQWZ0ZXIKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGZvbGRIYW5kbGVyMQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgMJAAACBQ1iYWxhbmNlc0FmdGVyBQ1iYWxhbmNlc0FmdGVyBA5iYXNlQXNzZXRBZnRlcgkBD2dldFRva2VuQmFsYW5jZQEFC2Jhc2VBc3NldElkAwkAAAIFDmJhc2VBc3NldEFmdGVyBQ5iYXNlQXNzZXRBZnRlcgoBDGZvbGRIYW5kbGVyMgIFYWNjdW0HYXNzZXRJZAQIYXNzZXROdW0JAQV2YWx1ZQEJAM8IAgUIYXNzZXRJZHMFB2Fzc2V0SWQEBmFtb3VudAkAZQIJAJEDAgUNYmFsYW5jZXNBZnRlcgUIYXNzZXROdW0JAJEDAgUOYmFsYW5jZXNCZWZvcmUFCGFzc2V0TnVtBAJpbgMJAAACBQdhc3NldElkBQtiYXNlQXNzZXRJZAUGYW1vdW50BAckbWF0Y2gwCQD9BwQFC21haW5BZGRyZXNzAgRzd2FwCQDMCAIJAQ5nZXRBc3NldFN0cmluZwEFC2Jhc2VBc3NldElkCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQdhc3NldElkBQZhbW91bnQFA25pbAMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgAAAMJAAACBQJpbgUCaW4JAGQCBQVhY2N1bQUCaW4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ECWVnZ0Ftb3VudAoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmM18xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMZm9sZEhhbmRsZXIyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYzXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA5CQEFJGYzXzICCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECCQEFJGYzXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAwkAAAIFCWVnZ0Ftb3VudAUJZWdnQW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZAIFCWVnZ0Ftb3VudAkAZQIFDmJhc2VBc3NldEFmdGVyBQ9iYXNlQXNzZXRCZWZvcmUFC2Jhc2VBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEUZ2VuZXJhdGVXaXRoT25lVG9rZW4BDm1haW5BZGRyZXNzU3RyBAtiYXNlQXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAttYWluQWRkcmVzcwkBB0FkZHJlc3MBCQDZBAEFDm1haW5BZGRyZXNzU3RyBAhhc3NldElkcwoAAiRsCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFC21haW5BZGRyZXNzAg9zdGF0aWNfdG9rZW5JZHMCASwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBE2FkZEFzc2V0Qnl0ZXNUb0xpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEEXNlY29uZGFyeUFzc2V0SWRzCQDRCAIFCGFzc2V0SWRzCQEFdmFsdWUBCQDPCAIFCGFzc2V0SWRzBQtiYXNlQXNzZXRJZAQLcG9vbEluZGV4SWQJARFAZXh0ck5hdGl2ZSgxMDUyKQIFC21haW5BZGRyZXNzAhNnbG9iYWxfcG9vbFRva2VuX2lkBAlwYXlBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CgEHaGFuZGxlcgIFYWNjdW0HYXNzZXRJZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQUHYXNzZXRJZAQLYXNzZXRXZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFC21haW5BZGRyZXNzCQCsAgIJAKwCAgIHc3RhdGljXwUKYXNzZXRJZFN0cgIHX3dlaWdodAQGYW1vdW50CQBrAwUJcGF5QW1vdW50BQthc3NldFdlaWdodACQTgQCaW4EByRtYXRjaDAJAP0HBAULbWFpbkFkZHJlc3MCBHN3YXAJAMwIAgkBDmdldEFzc2V0U3RyaW5nAQUHYXNzZXRJZAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULYmFzZUFzc2V0SWQFBmFtb3VudAUDbmlsAwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAAAAwkAAAIFAmluBQJpbgkAzggCBQVhY2N1bQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUCaW4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQKcmV0dXJuRmxhZwcED2Jhc2VBc3NldFdlaWdodAkBEUBleHRyTmF0aXZlKDEwNTApAgULbWFpbkFkZHJlc3MJAKwCAgkArAICAgdzdGF0aWNfCQEOZ2V0QXNzZXRTdHJpbmcBBQtiYXNlQXNzZXRJZAIHX3dlaWdodAQNYmFzZVBheUFtb3VudAkAawMFCXBheUFtb3VudAUPYmFzZUFzc2V0V2VpZ2h0AJBOBA9leGNoYW5nZUludm9rZXMKAAIkbAURc2Vjb25kYXJ5QXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQtiYXNlQXNzZXRJZAUNYmFzZVBheUFtb3VudAUDbmlsCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdoYW5kbGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA5CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAwkAAAIFD2V4Y2hhbmdlSW52b2tlcwUPZXhjaGFuZ2VJbnZva2VzBA1QSXNzdWVkQW1vdW50BAckbWF0Y2gwCQD9BwQFC21haW5BZGRyZXNzAg1nZW5lcmF0ZUluZGV4CQDMCAIFCnJldHVybkZsYWcFA25pbAUPZXhjaGFuZ2VJbnZva2VzAwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAAAAwkAAAIFDVBJc3N1ZWRBbW91bnQFDVBJc3N1ZWRBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQ1QSXNzdWVkQW1vdW50BQtwb29sSW5kZXhJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEnJlZGVlbVdpdGhPbmVUb2tlbgIObWFpbkFkZHJlc3NTdHINb3V0QXNzZXRJZFN0cgQLbWFpbkFkZHJlc3MJAQdBZGRyZXNzAQkA2QQBBQ5tYWluQWRkcmVzc1N0cgQIYXNzZXRJZHMKAAIkbAkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQttYWluQWRkcmVzcwIPc3RhdGljX3Rva2VuSWRzAgEsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARNhZGRBc3NldEJ5dGVzVG9MaXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAtiYXNlQXNzZXRJZAkBDWdldEFzc2V0Qnl0ZXMBBQ1vdXRBc3NldElkU3RyBBFzZWNvbmRhcnlBc3NldElkcwkA0QgCBQhhc3NldElkcwkBBXZhbHVlAQkAzwgCBQhhc3NldElkcwULYmFzZUFzc2V0SWQEC3Bvb2xJbmRleElkCQERQGV4dHJOYXRpdmUoMTA1MikCBQttYWluQWRkcmVzcwITZ2xvYmFsX3Bvb2xUb2tlbl9pZAoBDGZvbGRIYW5kbGVyMQIFYWNjdW0HYXNzZXRJZAkAzggCBQVhY2N1bQkAzAgCCQEPZ2V0VG9rZW5CYWxhbmNlAQUHYXNzZXRJZAUDbmlsBA5yZXR1cm5Ub09yaWdpbgcEDmJhbGFuY2VzQmVmb3JlCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxmb2xkSGFuZGxlcjECBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQAAAgUOYmFsYW5jZXNCZWZvcmUFDmJhbGFuY2VzQmVmb3JlBA9iYXNlQXNzZXRCZWZvcmUJAQ9nZXRUb2tlbkJhbGFuY2UBBQtiYXNlQXNzZXRJZAMJAAACBQ9iYXNlQXNzZXRCZWZvcmUFD2Jhc2VBc3NldEJlZm9yZQQNdW5zdGFrZUludm9rZQkA/QcEBQttYWluQWRkcmVzcwILcmVkZWVtSW5kZXgJAMwIAgUOcmV0dXJuVG9PcmlnaW4FA25pbAkAzAgCCQCRAwIIBQFpCHBheW1lbnRzAAAFA25pbAMJAAACBQ11bnN0YWtlSW52b2tlBQ11bnN0YWtlSW52b2tlBA1iYWxhbmNlc0FmdGVyCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxmb2xkSGFuZGxlcjECBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQAAAgUNYmFsYW5jZXNBZnRlcgUNYmFsYW5jZXNBZnRlcgQOYmFzZUFzc2V0QWZ0ZXIJAQ9nZXRUb2tlbkJhbGFuY2UBBQtiYXNlQXNzZXRJZAMJAAACBQ5iYXNlQXNzZXRBZnRlcgUOYmFzZUFzc2V0QWZ0ZXIKAQxmb2xkSGFuZGxlcjICBWFjY3VtB2Fzc2V0SWQECGFzc2V0TnVtCQEFdmFsdWUBCQDPCAIFCGFzc2V0SWRzBQdhc3NldElkBAZhbW91bnQJAGUCCQCRAwIFDWJhbGFuY2VzQWZ0ZXIFCGFzc2V0TnVtCQCRAwIFDmJhbGFuY2VzQmVmb3JlBQhhc3NldE51bQQCaW4DCQAAAgUHYXNzZXRJZAULYmFzZUFzc2V0SWQFBmFtb3VudAQHJG1hdGNoMAkA/QcEBQttYWluQWRkcmVzcwIEc3dhcAkAzAgCCQEOZ2V0QXNzZXRTdHJpbmcBBQtiYXNlQXNzZXRJZAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUGYW1vdW50BQNuaWwDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4AAADCQAAAgUCaW4FAmluCQBkAgUFYWNjdW0FAmluCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBANvdXQKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjNfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGZvbGRIYW5kbGVyMgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmM18yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjNfMgIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgMJAAACBQNvdXQFA291dAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFA291dAULYmFzZUFzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARVnZW5lcmF0ZUluZGV4QW5kU3Rha2UBDm1haW5BZGRyZXNzU3RyBAttYWluQWRkcmVzcwkBB0FkZHJlc3MBCQDZBAEFDm1haW5BZGRyZXNzU3RyBAhhc3NldElkcwoAAiRsCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFC21haW5BZGRyZXNzAg9zdGF0aWNfdG9rZW5JZHMCASwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBE2FkZEFzc2V0Qnl0ZXNUb0xpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEC2Jhc2VBc3NldElkCQENZ2V0QXNzZXRCeXRlcwEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFC21haW5BZGRyZXNzAhJzdGF0aWNfYmFzZVRva2VuSWQEEXNlY29uZGFyeUFzc2V0SWRzCQDRCAIFCGFzc2V0SWRzCQEFdmFsdWUBCQDPCAIFCGFzc2V0SWRzBQtiYXNlQXNzZXRJZAQLcG9vbEluZGV4SWQJARFAZXh0ck5hdGl2ZSgxMDUyKQIFC21haW5BZGRyZXNzAhNnbG9iYWxfcG9vbFRva2VuX2lkBA1QSXNzdWVkQW1vdW50BAckbWF0Y2gwCQD9BwQFC21haW5BZGRyZXNzAg1nZW5lcmF0ZUluZGV4CQDMCAIGBQNuaWwIBQFpCHBheW1lbnRzAwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAAAAwkAAAIFDVBJc3N1ZWRBbW91bnQFDVBJc3N1ZWRBbW91bnQEC3N0YWtlSW52b2tlCQD9BwQFC21haW5BZGRyZXNzAgpzdGFrZUluZGV4BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3Bvb2xJbmRleElkBQ1QSXNzdWVkQW1vdW50BQNuaWwDCQAAAgULc3Rha2VJbnZva2UFC3N0YWtlSW52b2tlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVdW5zdGFrZUFuZFJlZGVlbUluZGV4AgZhbW91bnQObWFpbkFkZHJlc3NTdHIEC21haW5BZGRyZXNzCQEHQWRkcmVzcwEJANkEAQUObWFpbkFkZHJlc3NTdHIECGFzc2V0SWRzCgACJGwJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgULbWFpbkFkZHJlc3MCD3N0YXRpY190b2tlbklkcwIBLAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQETYWRkQXNzZXRCeXRlc1RvTGlzdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQLYmFzZUFzc2V0SWQJAQ1nZXRBc3NldEJ5dGVzAQkBEUBleHRyTmF0aXZlKDEwNTMpAgULbWFpbkFkZHJlc3MCEnN0YXRpY19iYXNlVG9rZW5JZAQRc2Vjb25kYXJ5QXNzZXRJZHMJANEIAgUIYXNzZXRJZHMJAQV2YWx1ZQEJAM8IAgUIYXNzZXRJZHMFC2Jhc2VBc3NldElkBAtwb29sSW5kZXhJZAkBEUBleHRyTmF0aXZlKDEwNTIpAgULbWFpbkFkZHJlc3MCE2dsb2JhbF9wb29sVG9rZW5faWQEDXVuc3Rha2VJbnZva2UJAP0HBAULbWFpbkFkZHJlc3MCDHVuc3Rha2VJbmRleAkAzAgCBQZhbW91bnQFA25pbAgFAWkIcGF5bWVudHMDCQAAAgUNdW5zdGFrZUludm9rZQUNdW5zdGFrZUludm9rZQQMcmVkZWVtSW52b2tlCQD9BwQFC21haW5BZGRyZXNzAgtyZWRlZW1JbmRleAkAzAgCBgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQtwb29sSW5kZXhJZAUGYW1vdW50BQNuaWwDCQAAAgUMcmVkZWVtSW52b2tlBQxyZWRlZW1JbnZva2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQADCQEKaXNTaHV0ZG93bgAHCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5QiN+vA==", "chainId": 84, "height": 3083031, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func isShutdown () = match getBoolean(Address(base58'3MtiMjKiFuMZAA3NW9YZH89bYmiYUQUBezx'), "is_shutdown") { | |
5 | + | case x: Boolean => | |
6 | + | x | |
7 | + | case _ => | |
8 | + | false | |
9 | + | } | |
10 | + | ||
11 | + | ||
12 | + | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
13 | + | then unit | |
14 | + | else fromBase58String(assetIdStr) | |
15 | + | ||
16 | + | ||
17 | + | func getAssetString (assetId) = match assetId { | |
18 | + | case b: ByteVector => | |
19 | + | toBase58String(value(assetId)) | |
20 | + | case _ => | |
21 | + | "WAVES" | |
22 | + | } | |
23 | + | ||
24 | + | ||
25 | + | func getTokenBalance (assetId) = match assetId { | |
26 | + | case t: ByteVector => | |
27 | + | assetBalance(this, t) | |
28 | + | case _ => | |
29 | + | wavesBalance(this).available | |
30 | + | } | |
31 | + | ||
32 | + | ||
33 | + | func addAssetBytesToList (accum,item) = (accum ++ [getAssetBytes(item)]) | |
34 | + | ||
35 | + | ||
36 | + | @Callable(i) | |
37 | + | func generateIndexWithOneTokenAndStake (mainAddressStr) = { | |
38 | + | let tokenId = i.payments[0].assetId | |
39 | + | let baseAssetId = tokenId | |
40 | + | let mainAddress = Address(fromBase58String(mainAddressStr)) | |
41 | + | let assetIds = { | |
42 | + | let $l = split(getStringValue(mainAddress, "static_tokenIds"), ",") | |
43 | + | let $s = size($l) | |
44 | + | let $acc0 = nil | |
45 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
46 | + | then $a | |
47 | + | else addAssetBytesToList($a, $l[$i]) | |
48 | + | ||
49 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
50 | + | then $a | |
51 | + | else throw("List size exceeds 10") | |
52 | + | ||
53 | + | $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) | |
54 | + | } | |
55 | + | let secondaryAssetIds = removeByIndex(assetIds, value(indexOf(assetIds, tokenId))) | |
56 | + | let poolIndexId = getBinaryValue(mainAddress, "global_poolToken_id") | |
57 | + | let amount = (i.payments[0].amount / 10000) | |
58 | + | func handler (accum,assetId) = { | |
59 | + | let assetIdStr = getAssetString(assetId) | |
60 | + | let assetWeight = getIntegerValue(mainAddress, (("static_" + assetIdStr) + "_weight")) | |
61 | + | let in = match reentrantInvoke(mainAddress, "swap", [getAssetString(assetId), 0], [AttachedPayment(baseAssetId, (amount * assetWeight))]) { | |
62 | + | case x: Int => | |
63 | + | x | |
64 | + | case _ => | |
65 | + | 0 | |
66 | + | } | |
67 | + | if ((in == in)) | |
68 | + | then (accum ++ [AttachedPayment(assetId, in)]) | |
69 | + | else throw("Strict value is not equal to itself.") | |
70 | + | } | |
71 | + | ||
72 | + | let baseAssetWeight = getIntegerValue(mainAddress, (("static_" + getAssetString(baseAssetId)) + "_weight")) | |
73 | + | let exchangeInvokes = { | |
74 | + | let $l = secondaryAssetIds | |
75 | + | let $s = size($l) | |
76 | + | let $acc0 = [AttachedPayment(baseAssetId, (amount * baseAssetWeight))] | |
77 | + | func $f1_1 ($a,$i) = if (($i >= $s)) | |
78 | + | then $a | |
79 | + | else handler($a, $l[$i]) | |
80 | + | ||
81 | + | func $f1_2 ($a,$i) = if (($i >= $s)) | |
82 | + | then $a | |
83 | + | else throw("List size exceeds 9") | |
84 | + | ||
85 | + | $f1_2($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) | |
86 | + | } | |
87 | + | if ((exchangeInvokes == exchangeInvokes)) | |
88 | + | then { | |
89 | + | let PIssuedAmount = match reentrantInvoke(mainAddress, "generateIndex", [false], exchangeInvokes) { | |
90 | + | case x: Int => | |
91 | + | x | |
92 | + | case _ => | |
93 | + | 0 | |
94 | + | } | |
95 | + | if ((PIssuedAmount == PIssuedAmount)) | |
96 | + | then { | |
97 | + | let stakeInvoke = reentrantInvoke(mainAddress, "stakeIndex", nil, [AttachedPayment(poolIndexId, PIssuedAmount)]) | |
98 | + | if ((stakeInvoke == stakeInvoke)) | |
99 | + | then nil | |
100 | + | else throw("Strict value is not equal to itself.") | |
101 | + | } | |
102 | + | else throw("Strict value is not equal to itself.") | |
103 | + | } | |
104 | + | else throw("Strict value is not equal to itself.") | |
105 | + | } | |
106 | + | ||
107 | + | ||
108 | + | ||
109 | + | @Callable(i) | |
110 | + | func unstakeIndexAndRedeemAsOneToken (indexAmount,mainAddressStr) = { | |
111 | + | let mainAddress = Address(fromBase58String(mainAddressStr)) | |
112 | + | let assetIds = { | |
113 | + | let $l = split(getStringValue(mainAddress, "static_tokenIds"), ",") | |
114 | + | let $s = size($l) | |
115 | + | let $acc0 = nil | |
116 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
117 | + | then $a | |
118 | + | else addAssetBytesToList($a, $l[$i]) | |
119 | + | ||
120 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
121 | + | then $a | |
122 | + | else throw("List size exceeds 10") | |
123 | + | ||
124 | + | $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) | |
125 | + | } | |
126 | + | let baseAssetId = getAssetBytes(getStringValue(mainAddress, "static_baseTokenId")) | |
127 | + | let secondaryAssetIds = removeByIndex(assetIds, value(indexOf(assetIds, baseAssetId))) | |
128 | + | let poolIndexId = getBinaryValue(mainAddress, "global_poolToken_id") | |
129 | + | func foldHandler1 (accum,assetId) = (accum ++ [getTokenBalance(assetId)]) | |
130 | + | ||
131 | + | let balancesBefore = { | |
132 | + | let $l = assetIds | |
133 | + | let $s = size($l) | |
134 | + | let $acc0 = nil | |
135 | + | func $f1_1 ($a,$i) = if (($i >= $s)) | |
136 | + | then $a | |
137 | + | else foldHandler1($a, $l[$i]) | |
138 | + | ||
139 | + | func $f1_2 ($a,$i) = if (($i >= $s)) | |
140 | + | then $a | |
141 | + | else throw("List size exceeds 10") | |
142 | + | ||
143 | + | $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) | |
144 | + | } | |
145 | + | if ((balancesBefore == balancesBefore)) | |
146 | + | then { | |
147 | + | let baseAssetBefore = getTokenBalance(baseAssetId) | |
148 | + | if ((baseAssetBefore == baseAssetBefore)) | |
149 | + | then { | |
150 | + | let unstakeInvoke = reentrantInvoke(mainAddress, "unstakeAndRedeemIndex", [indexAmount], nil) | |
151 | + | if ((unstakeInvoke == unstakeInvoke)) | |
152 | + | then { | |
153 | + | let balancesAfter = { | |
154 | + | let $l = assetIds | |
155 | + | let $s = size($l) | |
156 | + | let $acc0 = nil | |
157 | + | func $f2_1 ($a,$i) = if (($i >= $s)) | |
158 | + | then $a | |
159 | + | else foldHandler1($a, $l[$i]) | |
160 | + | ||
161 | + | func $f2_2 ($a,$i) = if (($i >= $s)) | |
162 | + | then $a | |
163 | + | else throw("List size exceeds 10") | |
164 | + | ||
165 | + | $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
166 | + | } | |
167 | + | if ((balancesAfter == balancesAfter)) | |
168 | + | then { | |
169 | + | let baseAssetAfter = getTokenBalance(baseAssetId) | |
170 | + | if ((baseAssetAfter == baseAssetAfter)) | |
171 | + | then { | |
172 | + | func foldHandler2 (accum,assetId) = { | |
173 | + | let assetNum = value(indexOf(assetIds, assetId)) | |
174 | + | let amount = (balancesAfter[assetNum] - balancesBefore[assetNum]) | |
175 | + | let in = if ((assetId == baseAssetId)) | |
176 | + | then amount | |
177 | + | else match reentrantInvoke(mainAddress, "swap", [getAssetString(baseAssetId), 0], [AttachedPayment(assetId, amount)]) { | |
178 | + | case x: Int => | |
179 | + | x | |
180 | + | case _ => | |
181 | + | 0 | |
182 | + | } | |
183 | + | if ((in == in)) | |
184 | + | then (accum + in) | |
185 | + | else throw("Strict value is not equal to itself.") | |
186 | + | } | |
187 | + | ||
188 | + | let eggAmount = { | |
189 | + | let $l = assetIds | |
190 | + | let $s = size($l) | |
191 | + | let $acc0 = 0 | |
192 | + | func $f3_1 ($a,$i) = if (($i >= $s)) | |
193 | + | then $a | |
194 | + | else foldHandler2($a, $l[$i]) | |
195 | + | ||
196 | + | func $f3_2 ($a,$i) = if (($i >= $s)) | |
197 | + | then $a | |
198 | + | else throw("List size exceeds 9") | |
199 | + | ||
200 | + | $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
201 | + | } | |
202 | + | if ((eggAmount == eggAmount)) | |
203 | + | then [ScriptTransfer(i.caller, (eggAmount + (baseAssetAfter - baseAssetBefore)), baseAssetId)] | |
204 | + | else throw("Strict value is not equal to itself.") | |
205 | + | } | |
206 | + | else throw("Strict value is not equal to itself.") | |
207 | + | } | |
208 | + | else throw("Strict value is not equal to itself.") | |
209 | + | } | |
210 | + | else throw("Strict value is not equal to itself.") | |
211 | + | } | |
212 | + | else throw("Strict value is not equal to itself.") | |
213 | + | } | |
214 | + | else throw("Strict value is not equal to itself.") | |
215 | + | } | |
216 | + | ||
217 | + | ||
218 | + | ||
219 | + | @Callable(i) | |
220 | + | func generateWithOneToken (mainAddressStr) = { | |
221 | + | let baseAssetId = i.payments[0].assetId | |
222 | + | let mainAddress = Address(fromBase58String(mainAddressStr)) | |
223 | + | let assetIds = { | |
224 | + | let $l = split(getStringValue(mainAddress, "static_tokenIds"), ",") | |
225 | + | let $s = size($l) | |
226 | + | let $acc0 = nil | |
227 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
228 | + | then $a | |
229 | + | else addAssetBytesToList($a, $l[$i]) | |
230 | + | ||
231 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
232 | + | then $a | |
233 | + | else throw("List size exceeds 10") | |
234 | + | ||
235 | + | $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) | |
236 | + | } | |
237 | + | let secondaryAssetIds = removeByIndex(assetIds, value(indexOf(assetIds, baseAssetId))) | |
238 | + | let poolIndexId = getBinaryValue(mainAddress, "global_poolToken_id") | |
239 | + | let payAmount = i.payments[0].amount | |
240 | + | func handler (accum,assetId) = { | |
241 | + | let assetIdStr = getAssetString(assetId) | |
242 | + | let assetWeight = getIntegerValue(mainAddress, (("static_" + assetIdStr) + "_weight")) | |
243 | + | let amount = fraction(payAmount, assetWeight, 10000) | |
244 | + | let in = match reentrantInvoke(mainAddress, "swap", [getAssetString(assetId), 0], [AttachedPayment(baseAssetId, amount)]) { | |
245 | + | case x: Int => | |
246 | + | x | |
247 | + | case _ => | |
248 | + | 0 | |
249 | + | } | |
250 | + | if ((in == in)) | |
251 | + | then (accum ++ [AttachedPayment(assetId, in)]) | |
252 | + | else throw("Strict value is not equal to itself.") | |
253 | + | } | |
254 | + | ||
255 | + | let returnFlag = false | |
256 | + | let baseAssetWeight = getIntegerValue(mainAddress, (("static_" + getAssetString(baseAssetId)) + "_weight")) | |
257 | + | let basePayAmount = fraction(payAmount, baseAssetWeight, 10000) | |
258 | + | let exchangeInvokes = { | |
259 | + | let $l = secondaryAssetIds | |
260 | + | let $s = size($l) | |
261 | + | let $acc0 = [AttachedPayment(baseAssetId, basePayAmount)] | |
262 | + | func $f1_1 ($a,$i) = if (($i >= $s)) | |
263 | + | then $a | |
264 | + | else handler($a, $l[$i]) | |
265 | + | ||
266 | + | func $f1_2 ($a,$i) = if (($i >= $s)) | |
267 | + | then $a | |
268 | + | else throw("List size exceeds 9") | |
269 | + | ||
270 | + | $f1_2($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) | |
271 | + | } | |
272 | + | if ((exchangeInvokes == exchangeInvokes)) | |
273 | + | then { | |
274 | + | let PIssuedAmount = match reentrantInvoke(mainAddress, "generateIndex", [returnFlag], exchangeInvokes) { | |
275 | + | case x: Int => | |
276 | + | x | |
277 | + | case _ => | |
278 | + | 0 | |
279 | + | } | |
280 | + | if ((PIssuedAmount == PIssuedAmount)) | |
281 | + | then [ScriptTransfer(i.caller, PIssuedAmount, poolIndexId)] | |
282 | + | else throw("Strict value is not equal to itself.") | |
283 | + | } | |
284 | + | else throw("Strict value is not equal to itself.") | |
285 | + | } | |
286 | + | ||
287 | + | ||
288 | + | ||
289 | + | @Callable(i) | |
290 | + | func redeemWithOneToken (mainAddressStr,outAssetIdStr) = { | |
291 | + | let mainAddress = Address(fromBase58String(mainAddressStr)) | |
292 | + | let assetIds = { | |
293 | + | let $l = split(getStringValue(mainAddress, "static_tokenIds"), ",") | |
294 | + | let $s = size($l) | |
295 | + | let $acc0 = nil | |
296 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
297 | + | then $a | |
298 | + | else addAssetBytesToList($a, $l[$i]) | |
299 | + | ||
300 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
301 | + | then $a | |
302 | + | else throw("List size exceeds 10") | |
303 | + | ||
304 | + | $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) | |
305 | + | } | |
306 | + | let baseAssetId = getAssetBytes(outAssetIdStr) | |
307 | + | let secondaryAssetIds = removeByIndex(assetIds, value(indexOf(assetIds, baseAssetId))) | |
308 | + | let poolIndexId = getBinaryValue(mainAddress, "global_poolToken_id") | |
309 | + | func foldHandler1 (accum,assetId) = (accum ++ [getTokenBalance(assetId)]) | |
310 | + | ||
311 | + | let returnToOrigin = false | |
312 | + | let balancesBefore = { | |
313 | + | let $l = assetIds | |
314 | + | let $s = size($l) | |
315 | + | let $acc0 = nil | |
316 | + | func $f1_1 ($a,$i) = if (($i >= $s)) | |
317 | + | then $a | |
318 | + | else foldHandler1($a, $l[$i]) | |
319 | + | ||
320 | + | func $f1_2 ($a,$i) = if (($i >= $s)) | |
321 | + | then $a | |
322 | + | else throw("List size exceeds 10") | |
323 | + | ||
324 | + | $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) | |
325 | + | } | |
326 | + | if ((balancesBefore == balancesBefore)) | |
327 | + | then { | |
328 | + | let baseAssetBefore = getTokenBalance(baseAssetId) | |
329 | + | if ((baseAssetBefore == baseAssetBefore)) | |
330 | + | then { | |
331 | + | let unstakeInvoke = reentrantInvoke(mainAddress, "redeemIndex", [returnToOrigin], [i.payments[0]]) | |
332 | + | if ((unstakeInvoke == unstakeInvoke)) | |
333 | + | then { | |
334 | + | let balancesAfter = { | |
335 | + | let $l = assetIds | |
336 | + | let $s = size($l) | |
337 | + | let $acc0 = nil | |
338 | + | func $f2_1 ($a,$i) = if (($i >= $s)) | |
339 | + | then $a | |
340 | + | else foldHandler1($a, $l[$i]) | |
341 | + | ||
342 | + | func $f2_2 ($a,$i) = if (($i >= $s)) | |
343 | + | then $a | |
344 | + | else throw("List size exceeds 10") | |
345 | + | ||
346 | + | $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
347 | + | } | |
348 | + | if ((balancesAfter == balancesAfter)) | |
349 | + | then { | |
350 | + | let baseAssetAfter = getTokenBalance(baseAssetId) | |
351 | + | if ((baseAssetAfter == baseAssetAfter)) | |
352 | + | then { | |
353 | + | func foldHandler2 (accum,assetId) = { | |
354 | + | let assetNum = value(indexOf(assetIds, assetId)) | |
355 | + | let amount = (balancesAfter[assetNum] - balancesBefore[assetNum]) | |
356 | + | let in = if ((assetId == baseAssetId)) | |
357 | + | then amount | |
358 | + | else match reentrantInvoke(mainAddress, "swap", [getAssetString(baseAssetId), 0], [AttachedPayment(assetId, amount)]) { | |
359 | + | case x: Int => | |
360 | + | x | |
361 | + | case _ => | |
362 | + | 0 | |
363 | + | } | |
364 | + | if ((in == in)) | |
365 | + | then (accum + in) | |
366 | + | else throw("Strict value is not equal to itself.") | |
367 | + | } | |
368 | + | ||
369 | + | let out = { | |
370 | + | let $l = assetIds | |
371 | + | let $s = size($l) | |
372 | + | let $acc0 = 0 | |
373 | + | func $f3_1 ($a,$i) = if (($i >= $s)) | |
374 | + | then $a | |
375 | + | else foldHandler2($a, $l[$i]) | |
376 | + | ||
377 | + | func $f3_2 ($a,$i) = if (($i >= $s)) | |
378 | + | then $a | |
379 | + | else throw("List size exceeds 10") | |
380 | + | ||
381 | + | $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
382 | + | } | |
383 | + | if ((out == out)) | |
384 | + | then [ScriptTransfer(i.caller, out, baseAssetId)] | |
385 | + | else throw("Strict value is not equal to itself.") | |
386 | + | } | |
387 | + | else throw("Strict value is not equal to itself.") | |
388 | + | } | |
389 | + | else throw("Strict value is not equal to itself.") | |
390 | + | } | |
391 | + | else throw("Strict value is not equal to itself.") | |
392 | + | } | |
393 | + | else throw("Strict value is not equal to itself.") | |
394 | + | } | |
395 | + | else throw("Strict value is not equal to itself.") | |
396 | + | } | |
397 | + | ||
398 | + | ||
399 | + | ||
400 | + | @Callable(i) | |
401 | + | func generateIndexAndStake (mainAddressStr) = { | |
402 | + | let mainAddress = Address(fromBase58String(mainAddressStr)) | |
403 | + | let assetIds = { | |
404 | + | let $l = split(getStringValue(mainAddress, "static_tokenIds"), ",") | |
405 | + | let $s = size($l) | |
406 | + | let $acc0 = nil | |
407 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
408 | + | then $a | |
409 | + | else addAssetBytesToList($a, $l[$i]) | |
410 | + | ||
411 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
412 | + | then $a | |
413 | + | else throw("List size exceeds 10") | |
414 | + | ||
415 | + | $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) | |
416 | + | } | |
417 | + | let baseAssetId = getAssetBytes(getStringValue(mainAddress, "static_baseTokenId")) | |
418 | + | let secondaryAssetIds = removeByIndex(assetIds, value(indexOf(assetIds, baseAssetId))) | |
419 | + | let poolIndexId = getBinaryValue(mainAddress, "global_poolToken_id") | |
420 | + | let PIssuedAmount = match reentrantInvoke(mainAddress, "generateIndex", [true], i.payments) { | |
421 | + | case x: Int => | |
422 | + | x | |
423 | + | case _ => | |
424 | + | 0 | |
425 | + | } | |
426 | + | if ((PIssuedAmount == PIssuedAmount)) | |
427 | + | then { | |
428 | + | let stakeInvoke = reentrantInvoke(mainAddress, "stakeIndex", nil, [AttachedPayment(poolIndexId, PIssuedAmount)]) | |
429 | + | if ((stakeInvoke == stakeInvoke)) | |
430 | + | then nil | |
431 | + | else throw("Strict value is not equal to itself.") | |
432 | + | } | |
433 | + | else throw("Strict value is not equal to itself.") | |
434 | + | } | |
435 | + | ||
436 | + | ||
437 | + | ||
438 | + | @Callable(i) | |
439 | + | func unstakeAndRedeemIndex (amount,mainAddressStr) = { | |
440 | + | let mainAddress = Address(fromBase58String(mainAddressStr)) | |
441 | + | let assetIds = { | |
442 | + | let $l = split(getStringValue(mainAddress, "static_tokenIds"), ",") | |
443 | + | let $s = size($l) | |
444 | + | let $acc0 = nil | |
445 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
446 | + | then $a | |
447 | + | else addAssetBytesToList($a, $l[$i]) | |
448 | + | ||
449 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
450 | + | then $a | |
451 | + | else throw("List size exceeds 10") | |
452 | + | ||
453 | + | $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) | |
454 | + | } | |
455 | + | let baseAssetId = getAssetBytes(getStringValue(mainAddress, "static_baseTokenId")) | |
456 | + | let secondaryAssetIds = removeByIndex(assetIds, value(indexOf(assetIds, baseAssetId))) | |
457 | + | let poolIndexId = getBinaryValue(mainAddress, "global_poolToken_id") | |
458 | + | let unstakeInvoke = reentrantInvoke(mainAddress, "unstakeIndex", [amount], i.payments) | |
459 | + | if ((unstakeInvoke == unstakeInvoke)) | |
460 | + | then { | |
461 | + | let redeemInvoke = reentrantInvoke(mainAddress, "redeemIndex", [true], [AttachedPayment(poolIndexId, amount)]) | |
462 | + | if ((redeemInvoke == redeemInvoke)) | |
463 | + | then nil | |
464 | + | else throw("Strict value is not equal to itself.") | |
465 | + | } | |
466 | + | else throw("Strict value is not equal to itself.") | |
467 | + | } | |
468 | + | ||
469 | + | ||
470 | + | @Verifier(tx) | |
471 | + | func verify () = if (isShutdown()) | |
472 | + | then false | |
473 | + | else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
474 | + |
github/deemru/w8io/3ef1775 42.01 ms ◑