tx · FcGftrfF2zzLeu33Yx1W3E6z5n1jwFHvtyp4gH6hRBeo

3PLdFmzGkp46BS7qdXQAT169AoWhdCydsk3:  -0.01400000 Waves

2024.01.12 18:51 [3994305] smart account 3PLdFmzGkp46BS7qdXQAT169AoWhdCydsk3 > SELF 0.00000000 Waves

{ "type": 13, "id": "FcGftrfF2zzLeu33Yx1W3E6z5n1jwFHvtyp4gH6hRBeo", "fee": 1400000, "feeAssetId": null, "timestamp": 1705074481279, "version": 2, "chainId": 87, "sender": "3PLdFmzGkp46BS7qdXQAT169AoWhdCydsk3", "senderPublicKey": "41hrwXHVfNweohCnMqw4W6mbuZjY9UsUiMAUk1B6zLCx", "proofs": [ "5BpaYnJ3Rg2v8numrJAmoLsQ7woyEVGCq9LdbuNKvkmpdQQHXiJEbNFu6h1HqfJWmmavonFQf3z1NVU4i9Jxp8zy" ], "script": "base64:BgIjCAISBQoDCAgIEgQKAgEEEgQKAgEIEgASABIDCgEIEgMKAQgpAAlTRVBBUkFUT1ICAl9fAAhLRVlfSU5JVAIESU5JVAAMS0VZX01VTFRJU0lHAghNVUxUSVNJRwAKS0VZX1NUQVRVUwIGU1RBVFVTAApLRVlfUEFVU0VEAgZQQVVTRUQACktFWV9QQVVTRVICBlBBVVNFUgATS0VZX1NXQVZFU19DT05UUkFDVAIPU1dBVkVTX0NPTlRSQUNUABFLRVlfU1dBUF9DT05UUkFDVAINU1dBUF9DT05UUkFDVAAYRk9SRUlHTl9LRVlfU1dBVkVTX0FTU0VUAgVBU1NFVAAJRlVOQ19TV0FQAgRzd2FwAAxGVU5DX0RFUE9TSVQCB2RlcG9zaXQADUZVTkNfV0lUSERSQVcCCHdpdGhkcmF3AAdNQVhfSU5UAP//////////fwASU1dBVkVTX1JBVEVfRkFDVE9SCQC2AgEAgKCUpY0dAApJTlZPS0VfRkVFAKDCHgEQX3ZhbGlkYXRlQWRkcmVzcwIIYWRkcmVzc18EZXJyXwQHJG1hdGNoMAkApggBBQhhZGRyZXNzXwMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBgkAAgEFBGVycl8BDF92YWxpZGF0ZUludAQEdmFsXw5sb3dlckJvdW5kYXJ5Xw51cHBlckJvdW5kYXJ5XwRlcnJfAwMJAGYCBQ5sb3dlckJvdW5kYXJ5XwUEdmFsXwYJAGYCBQR2YWxfBQ51cHBlckJvdW5kYXJ5XwkAAgEFBGVycl8GAQlfbG9hZEluaXQABAckbWF0Y2gwCQCgCAEFCEtFWV9JTklUAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWEFByRtYXRjaDAFAWEHAQlfc2F2ZUluaXQBB2lzSW5pdF8JAMwIAgkBDEJvb2xlYW5FbnRyeQIFCEtFWV9JTklUBQdpc0luaXRfBQNuaWwBDV9sb2FkTXVsdGlzaWcABAckbWF0Y2gwCQCiCAEFDEtFWV9NVUxUSVNJRwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQ1fc2F2ZU11bHRpc2lnAQltdWx0aXNpZ18JAMwIAgkBC1N0cmluZ0VudHJ5AgUMS0VZX01VTFRJU0lHCQClCAEFCW11bHRpc2lnXwUDbmlsAQpfbG9hZFBhdXNlAAQHJG1hdGNoMAkAoAgBBQpLRVlfUEFVU0VEAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWEFByRtYXRjaDAFAWEHAQpfc2F2ZVBhdXNlAQlpc1BhdXNlZF8JAMwIAgkBDEJvb2xlYW5FbnRyeQIFCktFWV9QQVVTRUQFCWlzUGF1c2VkXwUDbmlsAQtfbG9hZFBhdXNlcgAEByRtYXRjaDAJAKIIAQUKS0VZX1BBVVNFUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQtfc2F2ZVBhdXNlcgEHcGF1c2VyXwkAzAgCCQELU3RyaW5nRW50cnkCBQpLRVlfUEFVU0VSCQClCAEFB3BhdXNlcl8FA25pbAETX2xvYWRTd2F2ZXNDb250cmFjdAAEByRtYXRjaDAJAKIIAQUTS0VZX1NXQVZFU19DT05UUkFDVAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAARNfc2F2ZVN3YXZlc0NvbnRyYWN0AQljb250cmFjdF8JAMwIAgkBC1N0cmluZ0VudHJ5AgUTS0VZX1NXQVZFU19DT05UUkFDVAkApQgBBQljb250cmFjdF8FA25pbAERX2xvYWRTd2FwQ29udHJhY3QABAckbWF0Y2gwCQCiCAEFEUtFWV9TV0FQX0NPTlRSQUNUAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBYQkBB0FkZHJlc3MBAQABEV9zYXZlU3dhcENvbnRyYWN0AQljb250cmFjdF8JAMwIAgkBC1N0cmluZ0VudHJ5AgURS0VZX1NXQVBfQ09OVFJBQ1QJAKUIAQUJY29udHJhY3RfBQNuaWwBEF93aGVuTXVsdGlzaWdTZXQAAwkAAAIJAQ1fbG9hZE11bHRpc2lnAAkBB0FkZHJlc3MBAQAJAAIBAhhfd2hlbk11bHRpc2lnU2V0OiByZXZlcnQGARFfb25seVRoaXNDb250cmFjdAEHY2FsbGVyXwMJAQIhPQIFB2NhbGxlcl8FBHRoaXMJAAIBAhlfb25seVRoaXNDb250cmFjdDogcmV2ZXJ0BgETX3doZW5Ob3RJbml0aWFsaXplZAADCQEJX2xvYWRJbml0AAkAAgECG193aGVuTm90SW5pdGlhbGl6ZWQ6IHJldmVydAYBEF93aGVuSW5pdGlhbGl6ZWQAAwkBASEBCQEJX2xvYWRJbml0AAkAAgECGF93aGVuSW5pdGlhbGl6ZWQ6IHJldmVydAYBDl93aGVuTm90UGF1c2VkAAMJAQpfbG9hZFBhdXNlAAkAAgECFl93aGVuTm90UGF1c2VkOiByZXZlcnQGAQtfd2hlblBhdXNlZAADCQEBIQEJAQpfbG9hZFBhdXNlAAkAAgECE193aGVuUGF1c2VkOiByZXZlcnQGAQtfb25seVBhdXNlcgEHY2FsbGVyXwMJAQIhPQIFB2NhbGxlcl8JAQtfbG9hZFBhdXNlcgAJAAIBAhNfb25seVBhdXNlcjogcmV2ZXJ0BgEPX2dldFN3YXZlc0Fzc2V0AAQHJG1hdGNoMAkAnQgCCQETX2xvYWRTd2F2ZXNDb250cmFjdAAFGEZPUkVJR05fS0VZX1NXQVZFU19BU1NFVAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJANkEAQUBYQkAAgECF19nZXRTd2F2ZXNBc3NldDogcmV2ZXJ0AQ1fZGVwb3NpdFdhdmVzAQdhbW91bnRfBAtzd2F2ZXNBc3NldAkBD19nZXRTd2F2ZXNBc3NldAAEDWJhbGFuY2VCZWZvcmUJAPAHAgUEdGhpcwULc3dhdmVzQXNzZXQDCQAAAgUNYmFsYW5jZUJlZm9yZQUNYmFsYW5jZUJlZm9yZQQKaW52b2NhdGlvbgkA/AcECQETX2xvYWRTd2F2ZXNDb250cmFjdAAFDEZVTkNfREVQT1NJVAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0BQdhbW91bnRfBQNuaWwDCQAAAgUKaW52b2NhdGlvbgUKaW52b2NhdGlvbgQMYmFsYW5jZUFmdGVyCQDwBwIFBHRoaXMFC3N3YXZlc0Fzc2V0AwkAAAIFDGJhbGFuY2VBZnRlcgUMYmFsYW5jZUFmdGVyCQBlAgUMYmFsYW5jZUFmdGVyBQ1iYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5fd2l0aGRyYXdXYXZlcwEHYW1vdW50XwQLc3dhdmVzQXNzZXQJAQ9fZ2V0U3dhdmVzQXNzZXQABA1iYWxhbmNlQmVmb3JlCQDvBwEFBHRoaXMDCQAAAgUNYmFsYW5jZUJlZm9yZQUNYmFsYW5jZUJlZm9yZQQKaW52b2NhdGlvbgkA/AcECQETX2xvYWRTd2F2ZXNDb250cmFjdAAFDUZVTkNfV0lUSERSQVcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULc3dhdmVzQXNzZXQFB2Ftb3VudF8FA25pbAMJAAACBQppbnZvY2F0aW9uBQppbnZvY2F0aW9uBAxiYWxhbmNlQWZ0ZXIJAO8HAQUEdGhpcwMJAAACBQxiYWxhbmNlQWZ0ZXIFDGJhbGFuY2VBZnRlcgkAZQIIBQxiYWxhbmNlQWZ0ZXIHcmVndWxhcggFDWJhbGFuY2VCZWZvcmUHcmVndWxhcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgESX3N3YXBXYXZlc1RvU3dhdmVzAQdhbW91bnRfBAtzd2F2ZXNBc3NldAkBD19nZXRTd2F2ZXNBc3NldAAEDWJhbGFuY2VCZWZvcmUJAPAHAgUEdGhpcwULc3dhdmVzQXNzZXQDCQAAAgUNYmFsYW5jZUJlZm9yZQUNYmFsYW5jZUJlZm9yZQQKaW52b2NhdGlvbgkA/AcECQERX2xvYWRTd2FwQ29udHJhY3QABQlGVU5DX1NXQVAJAMwIAgAACQDMCAIJANgEAQULc3dhdmVzQXNzZXQJAMwIAgkApQgBBQR0aGlzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFB2Ftb3VudF8FA25pbAMJAAACBQppbnZvY2F0aW9uBQppbnZvY2F0aW9uBAxiYWxhbmNlQWZ0ZXIJAPAHAgUEdGhpcwULc3dhdmVzQXNzZXQDCQAAAgUMYmFsYW5jZUFmdGVyBQxiYWxhbmNlQWZ0ZXIJAGUCBQxiYWxhbmNlQWZ0ZXIFDWJhbGFuY2VCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEl9zd2FwU3dhdmVzVG9XYXZlcwEHYW1vdW50XwQLc3dhdmVzQXNzZXQJAQ9fZ2V0U3dhdmVzQXNzZXQABA1iYWxhbmNlQmVmb3JlCQDvBwEFBHRoaXMDCQAAAgUNYmFsYW5jZUJlZm9yZQUNYmFsYW5jZUJlZm9yZQQKaW52b2NhdGlvbgkA/AcECQERX2xvYWRTd2FwQ29udHJhY3QABQlGVU5DX1NXQVAJAMwIAgAACQDMCAICAAkAzAgCCQClCAEFBHRoaXMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULc3dhdmVzQXNzZXQFB2Ftb3VudF8FA25pbAMJAAACBQppbnZvY2F0aW9uBQppbnZvY2F0aW9uBAxiYWxhbmNlQWZ0ZXIJAO8HAQUEdGhpcwMJAAACBQxiYWxhbmNlQWZ0ZXIFDGJhbGFuY2VBZnRlcgkAZQIIBQxiYWxhbmNlQWZ0ZXIHcmVndWxhcggFDWJhbGFuY2VCZWZvcmUHcmVndWxhcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgcBaQEEaW5pdAMPc3dhdmVzQ29udHJhY3RfDXN3YXBDb250cmFjdF8HcGF1c2VyXwQDZXJyAwMDAwMJARFfb25seVRoaXNDb250cmFjdAEIBQFpBmNhbGxlcgkBE193aGVuTm90SW5pdGlhbGl6ZWQABwkBEF93aGVuTXVsdGlzaWdTZXQABwkBEF92YWxpZGF0ZUFkZHJlc3MCBQ9zd2F2ZXNDb250cmFjdF8CHWluaXQ6IGludmFsaWQgc3dhdmVzIGNvbnRyYWN0BwkBEF92YWxpZGF0ZUFkZHJlc3MCBQ1zd2FwQ29udHJhY3RfAhtpbml0OiBpbnZhbGlkIHN3YXAgY29udHJhY3QHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFB3BhdXNlcl8CFGluaXQ6IGludmFsaWQgcGF1c2VyBwMJAAACBQNlcnIFA2VycgkAlAoCCQDOCAIJAM4IAgkAzggCCQEJX3NhdmVJbml0AQYJARNfc2F2ZVN3YXZlc0NvbnRyYWN0AQkBEUBleHRyTmF0aXZlKDEwNjIpAQUPc3dhdmVzQ29udHJhY3RfCQERX3NhdmVTd2FwQ29udHJhY3QBCQERQGV4dHJOYXRpdmUoMTA2MikBBQ1zd2FwQ29udHJhY3RfCQELX3NhdmVQYXVzZXIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQdwYXVzZXJfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXRyYWRlAgdhbW91bnRfCm5lZWRUb0J1eV8EA2VycgMDCQEQX3doZW5Jbml0aWFsaXplZAAJAQ5fd2hlbk5vdFBhdXNlZAAHCQEMX3ZhbGlkYXRlSW50BAUHYW1vdW50XwAABQdNQVhfSU5UAhV0cmFkZTogaW52YWxpZCBhbW91bnQHAwkAAAIFA2VycgUDZXJyAwUKbmVlZFRvQnV5XwQJc3dhdmVzR290CQESX3N3YXBXYXZlc1RvU3dhdmVzAQUHYW1vdW50XwMJAAACBQlzd2F2ZXNHb3QFCXN3YXZlc0dvdAQId2F2ZXNHb3QJAQ5fd2l0aGRyYXdXYXZlcwEFCXN3YXZlc0dvdAMJAAACBQh3YXZlc0dvdAUId2F2ZXNHb3QEBmluY29tZQkAZQIJAGUCBQh3YXZlc0dvdAUHYW1vdW50XwUKSU5WT0tFX0ZFRQMJAGYCBQZpbmNvbWUAAAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUKSU5WT0tFX0ZFRQUEdW5pdAUDbmlsBQZpbmNvbWUJAAIBCQCsAgICGnRyYWRlOiBpbmNvbWUgPCAwLCBpbmNvbWU9CQCkAwEFBmluY29tZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQJc3dhdmVzR290CQENX2RlcG9zaXRXYXZlcwEFB2Ftb3VudF8DCQAAAgUJc3dhdmVzR290BQlzd2F2ZXNHb3QECHdhdmVzR290CQESX3N3YXBTd2F2ZXNUb1dhdmVzAQUJc3dhdmVzR290AwkAAAIFCHdhdmVzR290BQh3YXZlc0dvdAQGaW5jb21lCQBlAgkAZQIFCHdhdmVzR290BQdhbW91bnRfBQpJTlZPS0VfRkVFAwkAZgIFBmluY29tZQAACQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQpJTlZPS0VfRkVFBQR1bml0BQNuaWwFBmluY29tZQkAAgEJAKwCAgIadHJhZGU6IGluY29tZSA8IDAsIGluY29tZT0JAKQDAQUGaW5jb21lCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBWNsYWltAgdhbW91bnRfCnJlY2lwaWVudF8EA2VycgMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJARBfdmFsaWRhdGVBZGRyZXNzAgUKcmVjaXBpZW50XwIYY2xhaW06IGludmFsaWQgcmVjaXBpZW50BwMJAAACBQNlcnIFA2VycgkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCnJlY2lwaWVudF8FB2Ftb3VudF8FBHVuaXQFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVwYXVzZQAEA2VycgMDCQELX29ubHlQYXVzZXIBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJAQ5fd2hlbk5vdFBhdXNlZAAHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQpfc2F2ZVBhdXNlAQYFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHdW5wYXVzZQAEA2VycgMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJAQtfd2hlblBhdXNlZAAHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQpfc2F2ZVBhdXNlAQcFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMdXBkYXRlUGF1c2VyAQdwYXVzZXJfBANlcnIDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFB3BhdXNlcl8CHHVwZGF0ZVBhdXNlcjogaW52YWxpZCBwYXVzZXIHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQtfc2F2ZVBhdXNlcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3BhdXNlcl8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELc2V0TXVsdGlzaWcBCW11bHRpc2lnXwQDZXJyAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3ZhbGlkYXRlQWRkcmVzcwIFCW11bHRpc2lnXwIdc2V0TXVsdGlzaWc6IGludmFsaWQgbXVsdGlzaWcHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQ1fc2F2ZU11bHRpc2lnAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbXVsdGlzaWdfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQHJG1hdGNoMAkAoggBBQxLRVlfTVVMVElTSUcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAhtdWx0aXNpZwUHJG1hdGNoMAkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQhtdWx0aXNpZwkAuQkCCQDMCAIFCktFWV9TVEFUVVMJAMwIAgkApQgBBQR0aGlzCQDMCAIJANgEAQgFAnR4AmlkBQNuaWwFCVNFUEFSQVRPUgcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXllN1qy", "height": 3994305, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6uZySJ6QwLopD78SfjDsopwoUQdo2pPLKv6BuYD9pP11 Next: none Diff:
OldNewDifferences
198198 let balanceBefore = assetBalance(this, swavesAsset)
199199 if ((balanceBefore == balanceBefore))
200200 then {
201- let invocation = invoke(_loadSwapContract(), FUNC_SWAP, [0, swavesAsset, toString(this)], [AttachedPayment(unit, amount_)])
201+ let invocation = invoke(_loadSwapContract(), FUNC_SWAP, [0, toBase58String(swavesAsset), toString(this)], [AttachedPayment(unit, amount_)])
202202 if ((invocation == invocation))
203203 then {
204204 let balanceAfter = assetBalance(this, swavesAsset)
269269 then {
270270 let income = ((wavesGot - amount_) - INVOKE_FEE)
271271 if ((income > 0))
272- then $Tuple2([ScriptTransfer(i.caller, INVOKE_FEE, unit)], (income - INVOKE_FEE))
273- else throw("trade: income < 0")
272+ then $Tuple2([ScriptTransfer(i.caller, INVOKE_FEE, unit)], income)
273+ else throw(("trade: income < 0, income=" + toString(income)))
274274 }
275275 else throw("Strict value is not equal to itself.")
276276 }
285285 then {
286286 let income = ((wavesGot - amount_) - INVOKE_FEE)
287287 if ((income > 0))
288- then $Tuple2([ScriptTransfer(i.caller, INVOKE_FEE, unit)], (income - INVOKE_FEE))
289- else throw("trade: income < 0")
288+ then $Tuple2([ScriptTransfer(i.caller, INVOKE_FEE, unit)], income)
289+ else throw(("trade: income < 0, income=" + toString(income)))
290290 }
291291 else throw("Strict value is not equal to itself.")
292292 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEPARATOR = "__"
55
66 let KEY_INIT = "INIT"
77
88 let KEY_MULTISIG = "MULTISIG"
99
1010 let KEY_STATUS = "STATUS"
1111
1212 let KEY_PAUSED = "PAUSED"
1313
1414 let KEY_PAUSER = "PAUSER"
1515
1616 let KEY_SWAVES_CONTRACT = "SWAVES_CONTRACT"
1717
1818 let KEY_SWAP_CONTRACT = "SWAP_CONTRACT"
1919
2020 let FOREIGN_KEY_SWAVES_ASSET = "ASSET"
2121
2222 let FUNC_SWAP = "swap"
2323
2424 let FUNC_DEPOSIT = "deposit"
2525
2626 let FUNC_WITHDRAW = "withdraw"
2727
2828 let MAX_INT = 9223372036854775807
2929
3030 let SWAVES_RATE_FACTOR = toBigInt(1000000000000)
3131
3232 let INVOKE_FEE = 500000
3333
3434 func _validateAddress (address_,err_) = match addressFromString(address_) {
3535 case a: Address =>
3636 true
3737 case _ =>
3838 throw(err_)
3939 }
4040
4141
4242 func _validateInt (val_,lowerBoundary_,upperBoundary_,err_) = if (if ((lowerBoundary_ > val_))
4343 then true
4444 else (val_ > upperBoundary_))
4545 then throw(err_)
4646 else true
4747
4848
4949 func _loadInit () = match getBoolean(KEY_INIT) {
5050 case a: Boolean =>
5151 a
5252 case _ =>
5353 false
5454 }
5555
5656
5757 func _saveInit (isInit_) = [BooleanEntry(KEY_INIT, isInit_)]
5858
5959
6060 func _loadMultisig () = match getString(KEY_MULTISIG) {
6161 case a: String =>
6262 addressFromStringValue(a)
6363 case _ =>
6464 Address(base58'')
6565 }
6666
6767
6868 func _saveMultisig (multisig_) = [StringEntry(KEY_MULTISIG, toString(multisig_))]
6969
7070
7171 func _loadPause () = match getBoolean(KEY_PAUSED) {
7272 case a: Boolean =>
7373 a
7474 case _ =>
7575 false
7676 }
7777
7878
7979 func _savePause (isPaused_) = [BooleanEntry(KEY_PAUSED, isPaused_)]
8080
8181
8282 func _loadPauser () = match getString(KEY_PAUSER) {
8383 case a: String =>
8484 addressFromStringValue(a)
8585 case _ =>
8686 Address(base58'')
8787 }
8888
8989
9090 func _savePauser (pauser_) = [StringEntry(KEY_PAUSER, toString(pauser_))]
9191
9292
9393 func _loadSwavesContract () = match getString(KEY_SWAVES_CONTRACT) {
9494 case a: String =>
9595 addressFromStringValue(a)
9696 case _ =>
9797 Address(base58'')
9898 }
9999
100100
101101 func _saveSwavesContract (contract_) = [StringEntry(KEY_SWAVES_CONTRACT, toString(contract_))]
102102
103103
104104 func _loadSwapContract () = match getString(KEY_SWAP_CONTRACT) {
105105 case a: String =>
106106 addressFromStringValue(a)
107107 case _ =>
108108 Address(base58'')
109109 }
110110
111111
112112 func _saveSwapContract (contract_) = [StringEntry(KEY_SWAP_CONTRACT, toString(contract_))]
113113
114114
115115 func _whenMultisigSet () = if ((_loadMultisig() == Address(base58'')))
116116 then throw("_whenMultisigSet: revert")
117117 else true
118118
119119
120120 func _onlyThisContract (caller_) = if ((caller_ != this))
121121 then throw("_onlyThisContract: revert")
122122 else true
123123
124124
125125 func _whenNotInitialized () = if (_loadInit())
126126 then throw("_whenNotInitialized: revert")
127127 else true
128128
129129
130130 func _whenInitialized () = if (!(_loadInit()))
131131 then throw("_whenInitialized: revert")
132132 else true
133133
134134
135135 func _whenNotPaused () = if (_loadPause())
136136 then throw("_whenNotPaused: revert")
137137 else true
138138
139139
140140 func _whenPaused () = if (!(_loadPause()))
141141 then throw("_whenPaused: revert")
142142 else true
143143
144144
145145 func _onlyPauser (caller_) = if ((caller_ != _loadPauser()))
146146 then throw("_onlyPauser: revert")
147147 else true
148148
149149
150150 func _getSwavesAsset () = match getString(_loadSwavesContract(), FOREIGN_KEY_SWAVES_ASSET) {
151151 case a: String =>
152152 fromBase58String(a)
153153 case _ =>
154154 throw("_getSwavesAsset: revert")
155155 }
156156
157157
158158 func _depositWaves (amount_) = {
159159 let swavesAsset = _getSwavesAsset()
160160 let balanceBefore = assetBalance(this, swavesAsset)
161161 if ((balanceBefore == balanceBefore))
162162 then {
163163 let invocation = invoke(_loadSwavesContract(), FUNC_DEPOSIT, nil, [AttachedPayment(unit, amount_)])
164164 if ((invocation == invocation))
165165 then {
166166 let balanceAfter = assetBalance(this, swavesAsset)
167167 if ((balanceAfter == balanceAfter))
168168 then (balanceAfter - balanceBefore)
169169 else throw("Strict value is not equal to itself.")
170170 }
171171 else throw("Strict value is not equal to itself.")
172172 }
173173 else throw("Strict value is not equal to itself.")
174174 }
175175
176176
177177 func _withdrawWaves (amount_) = {
178178 let swavesAsset = _getSwavesAsset()
179179 let balanceBefore = wavesBalance(this)
180180 if ((balanceBefore == balanceBefore))
181181 then {
182182 let invocation = invoke(_loadSwavesContract(), FUNC_WITHDRAW, nil, [AttachedPayment(swavesAsset, amount_)])
183183 if ((invocation == invocation))
184184 then {
185185 let balanceAfter = wavesBalance(this)
186186 if ((balanceAfter == balanceAfter))
187187 then (balanceAfter.regular - balanceBefore.regular)
188188 else throw("Strict value is not equal to itself.")
189189 }
190190 else throw("Strict value is not equal to itself.")
191191 }
192192 else throw("Strict value is not equal to itself.")
193193 }
194194
195195
196196 func _swapWavesToSwaves (amount_) = {
197197 let swavesAsset = _getSwavesAsset()
198198 let balanceBefore = assetBalance(this, swavesAsset)
199199 if ((balanceBefore == balanceBefore))
200200 then {
201- let invocation = invoke(_loadSwapContract(), FUNC_SWAP, [0, swavesAsset, toString(this)], [AttachedPayment(unit, amount_)])
201+ let invocation = invoke(_loadSwapContract(), FUNC_SWAP, [0, toBase58String(swavesAsset), toString(this)], [AttachedPayment(unit, amount_)])
202202 if ((invocation == invocation))
203203 then {
204204 let balanceAfter = assetBalance(this, swavesAsset)
205205 if ((balanceAfter == balanceAfter))
206206 then (balanceAfter - balanceBefore)
207207 else throw("Strict value is not equal to itself.")
208208 }
209209 else throw("Strict value is not equal to itself.")
210210 }
211211 else throw("Strict value is not equal to itself.")
212212 }
213213
214214
215215 func _swapSwavesToWaves (amount_) = {
216216 let swavesAsset = _getSwavesAsset()
217217 let balanceBefore = wavesBalance(this)
218218 if ((balanceBefore == balanceBefore))
219219 then {
220220 let invocation = invoke(_loadSwapContract(), FUNC_SWAP, [0, "", toString(this)], [AttachedPayment(swavesAsset, amount_)])
221221 if ((invocation == invocation))
222222 then {
223223 let balanceAfter = wavesBalance(this)
224224 if ((balanceAfter == balanceAfter))
225225 then (balanceAfter.regular - balanceBefore.regular)
226226 else throw("Strict value is not equal to itself.")
227227 }
228228 else throw("Strict value is not equal to itself.")
229229 }
230230 else throw("Strict value is not equal to itself.")
231231 }
232232
233233
234234 @Callable(i)
235235 func init (swavesContract_,swapContract_,pauser_) = {
236236 let err = if (if (if (if (if (_onlyThisContract(i.caller))
237237 then _whenNotInitialized()
238238 else false)
239239 then _whenMultisigSet()
240240 else false)
241241 then _validateAddress(swavesContract_, "init: invalid swaves contract")
242242 else false)
243243 then _validateAddress(swapContract_, "init: invalid swap contract")
244244 else false)
245245 then _validateAddress(pauser_, "init: invalid pauser")
246246 else false
247247 if ((err == err))
248248 then $Tuple2((((_saveInit(true) ++ _saveSwavesContract(addressFromStringValue(swavesContract_))) ++ _saveSwapContract(addressFromStringValue(swapContract_))) ++ _savePauser(addressFromStringValue(pauser_))), unit)
249249 else throw("Strict value is not equal to itself.")
250250 }
251251
252252
253253
254254 @Callable(i)
255255 func trade (amount_,needToBuy_) = {
256256 let err = if (if (_whenInitialized())
257257 then _whenNotPaused()
258258 else false)
259259 then _validateInt(amount_, 0, MAX_INT, "trade: invalid amount")
260260 else false
261261 if ((err == err))
262262 then if (needToBuy_)
263263 then {
264264 let swavesGot = _swapWavesToSwaves(amount_)
265265 if ((swavesGot == swavesGot))
266266 then {
267267 let wavesGot = _withdrawWaves(swavesGot)
268268 if ((wavesGot == wavesGot))
269269 then {
270270 let income = ((wavesGot - amount_) - INVOKE_FEE)
271271 if ((income > 0))
272- then $Tuple2([ScriptTransfer(i.caller, INVOKE_FEE, unit)], (income - INVOKE_FEE))
273- else throw("trade: income < 0")
272+ then $Tuple2([ScriptTransfer(i.caller, INVOKE_FEE, unit)], income)
273+ else throw(("trade: income < 0, income=" + toString(income)))
274274 }
275275 else throw("Strict value is not equal to itself.")
276276 }
277277 else throw("Strict value is not equal to itself.")
278278 }
279279 else {
280280 let swavesGot = _depositWaves(amount_)
281281 if ((swavesGot == swavesGot))
282282 then {
283283 let wavesGot = _swapSwavesToWaves(swavesGot)
284284 if ((wavesGot == wavesGot))
285285 then {
286286 let income = ((wavesGot - amount_) - INVOKE_FEE)
287287 if ((income > 0))
288- then $Tuple2([ScriptTransfer(i.caller, INVOKE_FEE, unit)], (income - INVOKE_FEE))
289- else throw("trade: income < 0")
288+ then $Tuple2([ScriptTransfer(i.caller, INVOKE_FEE, unit)], income)
289+ else throw(("trade: income < 0, income=" + toString(income)))
290290 }
291291 else throw("Strict value is not equal to itself.")
292292 }
293293 else throw("Strict value is not equal to itself.")
294294 }
295295 else throw("Strict value is not equal to itself.")
296296 }
297297
298298
299299
300300 @Callable(i)
301301 func claim (amount_,recipient_) = {
302302 let err = if (if (_onlyThisContract(i.caller))
303303 then _whenInitialized()
304304 else false)
305305 then _validateAddress(recipient_, "claim: invalid recipient")
306306 else false
307307 if ((err == err))
308308 then $Tuple2([ScriptTransfer(addressFromStringValue(recipient_), amount_, unit)], unit)
309309 else throw("Strict value is not equal to itself.")
310310 }
311311
312312
313313
314314 @Callable(i)
315315 func pause () = {
316316 let err = if (if (_onlyPauser(i.caller))
317317 then _whenInitialized()
318318 else false)
319319 then _whenNotPaused()
320320 else false
321321 if ((err == err))
322322 then $Tuple2(_savePause(true), unit)
323323 else throw("Strict value is not equal to itself.")
324324 }
325325
326326
327327
328328 @Callable(i)
329329 func unpause () = {
330330 let err = if (if (_onlyThisContract(i.caller))
331331 then _whenInitialized()
332332 else false)
333333 then _whenPaused()
334334 else false
335335 if ((err == err))
336336 then $Tuple2(_savePause(false), unit)
337337 else throw("Strict value is not equal to itself.")
338338 }
339339
340340
341341
342342 @Callable(i)
343343 func updatePauser (pauser_) = {
344344 let err = if (if (_onlyThisContract(i.caller))
345345 then _whenInitialized()
346346 else false)
347347 then _validateAddress(pauser_, "updatePauser: invalid pauser")
348348 else false
349349 if ((err == err))
350350 then $Tuple2(_savePauser(addressFromStringValue(pauser_)), unit)
351351 else throw("Strict value is not equal to itself.")
352352 }
353353
354354
355355
356356 @Callable(i)
357357 func setMultisig (multisig_) = {
358358 let err = if (_onlyThisContract(i.caller))
359359 then _validateAddress(multisig_, "setMultisig: invalid multisig")
360360 else false
361361 if ((err == err))
362362 then $Tuple2(_saveMultisig(addressFromStringValue(multisig_)), unit)
363363 else throw("Strict value is not equal to itself.")
364364 }
365365
366366
367367 @Verifier(tx)
368368 func verify () = match getString(KEY_MULTISIG) {
369369 case multisig: String =>
370370 valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false)
371371 case _ =>
372372 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
373373 }
374374

github/deemru/w8io/3ef1775 
40.59 ms