tx · 5Z1JkyR2dz4cb2Dj5tp9UrMtWcPMpuen9D5L3xvJzgxu

3Mx4GxjrawhKHBgMKH9C5Hmbj8ePZDrs8ed:  -0.01500000 Waves

2023.05.11 10:15 [2572909] smart account 3Mx4GxjrawhKHBgMKH9C5Hmbj8ePZDrs8ed > SELF 0.00000000 Waves

{ "type": 13, "id": "5Z1JkyR2dz4cb2Dj5tp9UrMtWcPMpuen9D5L3xvJzgxu", "fee": 1500000, "feeAssetId": null, "timestamp": 1683789365317, "version": 2, "chainId": 84, "sender": "3Mx4GxjrawhKHBgMKH9C5Hmbj8ePZDrs8ed", "senderPublicKey": "9DpEgmia9fGpxtGGDeSMtER4g9qB7WQPPYTKTHzqSFuX", "proofs": [ "tBrWjLXzgHGKauwNYaAzNzAYGzYig6qcTvxjU1KxoWAKC1Cydfc6U413QUXGJqUWzxRbRPEWQ9TWZmNRYZfNqgE" ], "script": "base64:BgJUCAISBgoECAgICBIJCgcICAgICAgIEgUKAwEIARIECgIBCBIDCgEIEgQKAgEEEgMKAQgSBQoDAQgBEgsKCQEICAEBAQEBBBIAEgASAwoBCBIDCgEIPwAJU0VQQVJBVE9SAgJfXwAIS0VZX0lOSVQCBElOSVQADEtFWV9NVUxUSVNJRwIITVVMVElTSUcACktFWV9TVEFUVVMCBlNUQVRVUwAKS0VZX1BBVVNFRAIGUEFVU0VEAApLRVlfUEFVU0VSAgZQQVVTRVIADEtFWV9FWEVDVVRPUgIIRVhFQ1VUT1IAEEtFWV9ST09UX0FEQVBURVICDFJPT1RfQURBUFRFUgATS0VZX0NBTExFUl9DT05UUkFDVAIPQ0FMTEVSX0NPTlRSQUNUAAlLRVlfQ0hBSU4CBUNIQUlOAAtLRVlfQklORElORwIHQklORElORwAHS0VZX0ZFRQIDRkVFABFLRVlfRkVFX1JFQ0lQSUVOVAINRkVFX1JFQ0lQSUVOVAAYS0VZX1JFRkVSUkVSX0ZFRV9QRVJDRU5UAhRSRUZFUlJFUl9GRUVfUEVSQ0VOVAATRlVOQ19SRUxFQVNFX1RPS0VOUwINcmVsZWFzZVRva2VucwAFV0FWRVMCBVdBVkVTAA5XQVZFU19ERUNJTUFMUwAIAAhERUNJTUFMUwAGAA5QRVJDRU5UX0ZBQ1RPUgDAhD0AEE1BWF9SRUZFUlJFUl9GRUUAwJoMAAdNQVhfSU5UAP//////////fwEQX3ZhbGlkYXRlQWRkcmVzcwIIYWRkcmVzc18EZXJyXwQHJG1hdGNoMAkApggBBQhhZGRyZXNzXwMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBgkAAgEFBGVycl8BDl92YWxpZGF0ZUFzc2V0Aghhc3NldElkXwRlcnJfBAckbWF0Y2gwCQDsBwEJANkEAQUIYXNzZXRJZF8DCQABAgUHJG1hdGNoMAIFQXNzZXQEAWEFByRtYXRjaDAGCQACAQUEZXJyXwEMX3ZhbGlkYXRlSW50BAR2YWxfDmxvd2VyQm91bmRhcnlfDnVwcGVyQm91bmRhcnlfBGVycl8DAwkAZgIFDmxvd2VyQm91bmRhcnlfBQR2YWxfBgkAZgIFBHZhbF8FDnVwcGVyQm91bmRhcnlfCQACAQUEZXJyXwYBDV92YWxpZGF0ZUJvb2wDBHZhbF8HdGFyZ2V0XwRlcnJfAwkBAiE9AgUEdmFsXwUHdGFyZ2V0XwkAAgEFBGVycl8GARVfdmFsaWRhdGVQYXltZW50c1NpemUDCXBheW1lbnRzXwd0YXJnZXRfBGVycl8DCQECIT0CCQCQAwEFCXBheW1lbnRzXwUHdGFyZ2V0XwkAAgEFBGVycl8GARJfbm9ybWFsaXplRGVjaW1hbHMDB2Ftb3VudF8Pc291cmNlRGVjaW1hbHNfD3RhcmdldERlY2ltYWxzXwMJAGcCBQ9zb3VyY2VEZWNpbWFsc18FD3RhcmdldERlY2ltYWxzXwkAaQIFB2Ftb3VudF8JAGwGAAoAAAkAZQIFD3NvdXJjZURlY2ltYWxzXwUPdGFyZ2V0RGVjaW1hbHNfAAAAAAUERE9XTgkAaAIFB2Ftb3VudF8JAGwGAAoAAAkAZQIFD3RhcmdldERlY2ltYWxzXwUPc291cmNlRGVjaW1hbHNfAAAAAAUERE9XTgEJX2xvYWRJbml0AAQHJG1hdGNoMAkAoAgBBQhLRVlfSU5JVAMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFhBQckbWF0Y2gwBQFhBwEJX3NhdmVJbml0AQdpc0luaXRfCQDMCAIJAQxCb29sZWFuRW50cnkCBQhLRVlfSU5JVAUHaXNJbml0XwUDbmlsAQpfbG9hZFBhdXNlAAQHJG1hdGNoMAkAoAgBBQpLRVlfUEFVU0VEAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWEFByRtYXRjaDAFAWEHAQpfc2F2ZVBhdXNlAQlpc1BhdXNlZF8JAMwIAgkBDEJvb2xlYW5FbnRyeQIFCktFWV9QQVVTRUQFCWlzUGF1c2VkXwUDbmlsAQtfbG9hZFBhdXNlcgAEByRtYXRjaDAJAKIIAQUKS0VZX1BBVVNFUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQtfc2F2ZVBhdXNlcgEHcGF1c2VyXwkAzAgCCQELU3RyaW5nRW50cnkCBQpLRVlfUEFVU0VSCQClCAEFB3BhdXNlcl8FA25pbAENX2xvYWRNdWx0aXNpZwAEByRtYXRjaDAJAKIIAQUMS0VZX01VTFRJU0lHAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBYQkBB0FkZHJlc3MBAQABDV9zYXZlTXVsdGlzaWcBCW11bHRpc2lnXwkAzAgCCQELU3RyaW5nRW50cnkCBQxLRVlfTVVMVElTSUcJAKUIAQUJbXVsdGlzaWdfBQNuaWwBDV9sb2FkRXhlY3V0b3IABAckbWF0Y2gwCQCiCAEFDEtFWV9FWEVDVVRPUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQ1fc2F2ZUV4ZWN1dG9yAQlleGVjdXRvcl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUMS0VZX0VYRUNVVE9SCQClCAEFCWV4ZWN1dG9yXwUDbmlsARNfbG9hZENhbGxlckNvbnRyYWN0AAQHJG1hdGNoMAkAoggBBRNLRVlfQ0FMTEVSX0NPTlRSQUNUAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAARNfc2F2ZUNhbGxlckNvbnRyYWN0AQdjYWxsZXJfCQDMCAIJAQtTdHJpbmdFbnRyeQIFE0tFWV9DQUxMRVJfQ09OVFJBQ1QFB2NhbGxlcl8FA25pbAEKX2xvYWRDaGFpbgEIY2hhaW5JZF8EByRtYXRjaDAJAKAIAQkAuQkCCQDMCAIFCUtFWV9DSEFJTgkAzAgCCQCkAwEFCGNoYWluSWRfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFhBQckbWF0Y2gwBQFhBwEKX3NhdmVDaGFpbgIIY2hhaW5JZF8EdmFsXwkAzAgCCQEMQm9vbGVhbkVudHJ5AgkAuQkCCQDMCAIFCUtFWV9DSEFJTgkAzAgCCQCkAwEFCGNoYWluSWRfBQNuaWwFCVNFUEFSQVRPUgUEdmFsXwUDbmlsAQxfbG9hZEJpbmRpbmcCEWV4ZWN1dGlvbkNoYWluSWRfCGFzc2V0SWRfBAckbWF0Y2gwCQCiCAEJALkJAgkAzAgCBQtLRVlfQklORElORwkAzAgCCQCkAwEFEWV4ZWN1dGlvbkNoYWluSWRfCQDMCAIJANgEAQUIYXNzZXRJZF8FA25pbAUJU0VQQVJBVE9SAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAQGc3RydWN0CQC1CQIFAWEFCVNFUEFSQVRPUgkAmgoICQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFBnN0cnVjdAAACQCRAwIFBnN0cnVjdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RydWN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdHJ1Y3QAAwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0cnVjdAAECQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RydWN0AAUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdHJ1Y3QABgMJAAACCQCRAwIFBnN0cnVjdAAHAgExBgcJAJoKCAkBB0FkZHJlc3MBAQACAAAAAAAAAAAAAAAHAQxfc2F2ZUJpbmRpbmcDEWV4ZWN1dGlvbkNoYWluSWRfCGFzc2V0SWRfCGJpbmRpbmdfCQDMCAIJAQtTdHJpbmdFbnRyeQIJALkJAgkAzAgCBQtLRVlfQklORElORwkAzAgCCQCkAwEFEWV4ZWN1dGlvbkNoYWluSWRfCQDMCAIJANgEAQUIYXNzZXRJZF8FA25pbAUJU0VQQVJBVE9SCQC5CQIJAMwIAgkApQgBCAUIYmluZGluZ18CXzEJAMwIAggFCGJpbmRpbmdfAl8yCQDMCAIJAKQDAQgFCGJpbmRpbmdfAl8zCQDMCAIJAKQDAQgFCGJpbmRpbmdfAl80CQDMCAIJAKQDAQgFCGJpbmRpbmdfAl81CQDMCAIJAKQDAQgFCGJpbmRpbmdfAl82CQDMCAIJAKQDAQgFCGJpbmRpbmdfAl83CQDMCAIDCAUIYmluZGluZ18CXzgCATECATAFA25pbAUJU0VQQVJBVE9SBQNuaWwBCF9sb2FkRmVlAQhhc3NldElkXwQHJG1hdGNoMAkAnwgBCQC5CQIJAMwIAgUHS0VZX0ZFRQkAzAgCCQDYBAEFCGFzc2V0SWRfBQNuaWwFCVNFUEFSQVRPUgMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEIX3NhdmVGZWUCCGFzc2V0SWRfBHZhbF8JAMwIAgkBDEludGVnZXJFbnRyeQIJALkJAgkAzAgCBQdLRVlfRkVFCQDMCAIJANgEAQUIYXNzZXRJZF8FA25pbAUJU0VQQVJBVE9SBQR2YWxfBQNuaWwBEF9sb2FkUm9vdEFkYXB0ZXIABAckbWF0Y2gwCQCiCAEFEEtFWV9ST09UX0FEQVBURVIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQEHQWRkcmVzcwEBAAEQX3NhdmVSb290QWRhcHRlcgEIYWRhcHRlcl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUQS0VZX1JPT1RfQURBUFRFUgkApQgBBQhhZGFwdGVyXwUDbmlsARFfbG9hZEZlZVJlY2lwaWVudAAEByRtYXRjaDAJAKIIAQURS0VZX0ZFRV9SRUNJUElFTlQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQEHQWRkcmVzcwEBAAERX3NhdmVGZWVSZWNpcGllbnQBBHZhbF8JAMwIAgkBC1N0cmluZ0VudHJ5AgURS0VZX0ZFRV9SRUNJUElFTlQJAKUIAQUEdmFsXwUDbmlsARdfbG9hZFJlZmVycmVyRmVlUGVyY2VudAIRZXhlY3V0aW9uQ2hhaW5JZF8JcmVmZXJyZXJfBAckbWF0Y2gwCQCfCAEJALkJAgkAzAgCBRhLRVlfUkVGRVJSRVJfRkVFX1BFUkNFTlQJAMwIAgkApAMBBRFleGVjdXRpb25DaGFpbklkXwkAzAgCCQClCAEFCXJlZmVycmVyXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABF19zYXZlUmVmZXJyZXJGZWVQZXJjZW50AxFleGVjdXRpb25DaGFpbklkXwlyZWZlcnJlcl8EdmFsXwkAzAgCCQEMSW50ZWdlckVudHJ5AgkAuQkCCQDMCAIFGEtFWV9SRUZFUlJFUl9GRUVfUEVSQ0VOVAkAzAgCCQCkAwEFEWV4ZWN1dGlvbkNoYWluSWRfCQDMCAIJAKUIAQUJcmVmZXJyZXJfBQNuaWwFCVNFUEFSQVRPUgUEdmFsXwUDbmlsARFfb25seVRoaXNDb250cmFjdAEHY2FsbGVyXwMJAQIhPQIFB2NhbGxlcl8FBHRoaXMJAAIBAhlfb25seVRoaXNDb250cmFjdDogcmV2ZXJ0BgEQX3doZW5NdWx0aXNpZ1NldAADCQAAAgkBDV9sb2FkTXVsdGlzaWcACQEHQWRkcmVzcwEBAAkAAgECGF93aGVuTXVsdGlzaWdTZXQ6IHJldmVydAYBE193aGVuTm90SW5pdGlhbGl6ZWQAAwkBCV9sb2FkSW5pdAAJAAIBAhtfd2hlbk5vdEluaXRpYWxpemVkOiByZXZlcnQGARBfd2hlbkluaXRpYWxpemVkAAMJAQEhAQkBCV9sb2FkSW5pdAAJAAIBAhhfd2hlbkluaXRpYWxpemVkOiByZXZlcnQGAQ5fd2hlbk5vdFBhdXNlZAADCQEKX2xvYWRQYXVzZQAJAAIBAhZfd2hlbk5vdFBhdXNlZDogcmV2ZXJ0BgELX3doZW5QYXVzZWQAAwkBASEBCQEKX2xvYWRQYXVzZQAJAAIBAhNfd2hlblBhdXNlZDogcmV2ZXJ0BgELX29ubHlQYXVzZXIBB2NhbGxlcl8DCQECIT0CBQdjYWxsZXJfCQELX2xvYWRQYXVzZXIACQACAQITX29ubHlQYXVzZXI6IHJldmVydAYBBl9hc0ludAEEdmFsXwQHJG1hdGNoMAUEdmFsXwMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEJAAIBAg5fYXNJbnQ6IHJldmVydAEIX2FzQnl0ZXMBBHZhbF8EByRtYXRjaDAFBHZhbF8DCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYQUHJG1hdGNoMAUBYQkAAgECEF9hc0J5dGVzOiByZXZlcnQBEV92YWxpZGF0ZUV4ZWN1dG9yAgR2YWxfBGVycl8DCQECIT0CBQR2YWxfCQENX2xvYWRFeGVjdXRvcgAJAAIBBQRlcnJfBgEPX3ZhbGlkYXRlQ2FsbGVyAgR2YWxfBGVycl8DCQECIT0CBQR2YWxfCQETX2xvYWRDYWxsZXJDb250cmFjdAAJAAIBBQRlcnJfBgEOX3ZhbGlkYXRlQ2hhaW4CEWV4ZWN1dGlvbkNoYWluSWRfBGVycl8DCQEBIQEJAQpfbG9hZENoYWluAQURZXhlY3V0aW9uQ2hhaW5JZF8JAAIBBQRlcnJfBg0BaQEEaW5pdAQJZXhlY3V0b3JfCGFkYXB0ZXJfB3BhdXNlcl8NZmVlUmVjaXBpZW50XwQDZXJyAwMDAwMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARNfd2hlbk5vdEluaXRpYWxpemVkAAcJARBfd2hlbk11bHRpc2lnU2V0AAcJARBfdmFsaWRhdGVBZGRyZXNzAgUJZXhlY3V0b3JfAhZpbml0OiBpbnZhbGlkIGV4ZWN1dG9yBwkBEF92YWxpZGF0ZUFkZHJlc3MCBQhhZGFwdGVyXwIVaW5pdDogaW52YWxpZCBhZGFwdGVyBwkBEF92YWxpZGF0ZUFkZHJlc3MCBQdwYXVzZXJfAhRpbml0OiBpbnZhbGlkIHBhdXNlcgcJARBfdmFsaWRhdGVBZGRyZXNzAgUNZmVlUmVjaXBpZW50XwIaaW5pdDogaW52YWxpZCBmZWVSZWNpcGllbnQHAwkAAAIFA2VycgUDZXJyCQCUCgIJAM4IAgkAzggCCQDOCAIJAM4IAgkBCV9zYXZlSW5pdAEGCQENX3NhdmVFeGVjdXRvcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCWV4ZWN1dG9yXwkBEF9zYXZlUm9vdEFkYXB0ZXIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQhhZGFwdGVyXwkBC19zYXZlUGF1c2VyAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUHcGF1c2VyXwkBEV9zYXZlRmVlUmVjaXBpZW50AQkBEUBleHRyTmF0aXZlKDEwNjIpAQUNZmVlUmVjaXBpZW50XwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQptaW50VG9rZW5zBw9jYWxsZXJDb250cmFjdF8OYXNzZXRDb250cmFjdF8HYW1vdW50XwpyZWNpcGllbnRfDmdhc2xlc3NSZXdhcmRfCXJlZmVycmVyXwxyZWZlcnJlckZlZV8EBmFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEFB2Ftb3VudF8CF21pbnQ6IGFtb3VudCBpcyBub3QgSW50BA1nYXNsZXNzUmV3YXJkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQUOZ2FzbGVzc1Jld2FyZF8CHm1pbnQ6IGdhc2xlc3NSZXdhcmQgaXMgbm90IEludAQLcmVmZXJyZXJGZWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBBQxyZWZlcnJlckZlZV8CHG1pbnQ6IHJlZmVycmVyRmVlIGlzIG5vdCBJbnQEA2VycgMDAwMDAwMDCQEQX3doZW5Jbml0aWFsaXplZAAJAQ5fd2hlbk5vdFBhdXNlZAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFDmFzc2V0Q29udHJhY3RfAhxtaW50OiBpbnZhbGlkIGFzc2V0IGNvbnRyYWN0BwkBEV92YWxpZGF0ZUV4ZWN1dG9yAggFAWkGY2FsbGVyAhZtaW50OiBpbnZhbGlkIGV4ZWN1dG9yBwkBD192YWxpZGF0ZUNhbGxlcgIFD2NhbGxlckNvbnRyYWN0XwIUbWludDogaW52YWxpZCBjYWxsZXIHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFCnJlY2lwaWVudF8CH21pbnQ6IGludmFsaWQgcmVjaXBpZW50IGFkZHJlc3MHCQEMX3ZhbGlkYXRlSW50BAUGYW1vdW50AAAFB01BWF9JTlQCFG1pbnQ6IGludmFsaWQgYW1vdW50BwkBDF92YWxpZGF0ZUludAQFDWdhc2xlc3NSZXdhcmQAAAUHTUFYX0lOVAIbbWludDogaW52YWxpZCBnYXNsZXNzUmV3YXJkBwkBDF92YWxpZGF0ZUludAQFC3JlZmVycmVyRmVlAAAFB01BWF9JTlQCGm1pbnQ6IGludmFsaWQgcmVmZXJyZXIgZmVlBwMJAAACBQNlcnIFA2VycgQHYXNzZXRJZAkBCF9hc0J5dGVzAQkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQ5hc3NldENvbnRyYWN0XwIKZ2V0QXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUHYXNzZXRJZAUHYXNzZXRJZAQNYXNzZXREZWNpbWFscwkBBl9hc0ludAEJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUOYXNzZXRDb250cmFjdF8CC2dldERlY2ltYWxzBQNuaWwFA25pbAMJAAACBQ1hc3NldERlY2ltYWxzBQ1hc3NldERlY2ltYWxzBBBub3JtYWxpemVkQW1vdW50CQESX25vcm1hbGl6ZURlY2ltYWxzAwUGYW1vdW50BQhERUNJTUFMUwUNYXNzZXREZWNpbWFscwQRbm9ybWFsaXplZEdhc2xlc3MJARJfbm9ybWFsaXplRGVjaW1hbHMDBQ1nYXNsZXNzUmV3YXJkBQhERUNJTUFMUwUNYXNzZXREZWNpbWFscwQIcmVmZXJyZXIEByRtYXRjaDAJAKYIAQUJcmVmZXJyZXJfAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEDnJlZmVyZXJBZGRyZXNzBQckbWF0Y2gwBBVub3JtYWxpemVkUmVmZXJyZXJGZWUJARJfbm9ybWFsaXplRGVjaW1hbHMDBQtyZWZlcnJlckZlZQUIREVDSU1BTFMFDWFzc2V0RGVjaW1hbHMJAJQKAgUVbm9ybWFsaXplZFJlZmVycmVyRmVlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDnJlZmVyZXJBZGRyZXNzBRVub3JtYWxpemVkUmVmZXJyZXJGZWUFB2Fzc2V0SWQFA25pbAkAlAoCAAAFA25pbAQVbm9ybWFsaXplZFJlZmVycmVyRmVlCAUIcmVmZXJyZXICXzEED3JlZmVycmVyQWN0aW9ucwgFCHJlZmVycmVyAl8yBAppbnZvY2F0aW9uCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDmFzc2V0Q29udHJhY3RfAgRtaW50CQDMCAIJAGQCBRBub3JtYWxpemVkQW1vdW50BRVub3JtYWxpemVkUmVmZXJyZXJGZWUJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAACBQppbnZvY2F0aW9uBQppbnZvY2F0aW9uBAdhY3Rpb25zAwMJAGYCBRFub3JtYWxpemVkR2FzbGVzcwAACQECIT0CCQERQGV4dHJOYXRpdmUoMTA2MikBBQpyZWNpcGllbnRfCAUBaQxvcmlnaW5DYWxsZXIHCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCnJlY2lwaWVudF8JAGUCBRBub3JtYWxpemVkQW1vdW50BRFub3JtYWxpemVkR2FzbGVzcwUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQxvcmlnaW5DYWxsZXIFEW5vcm1hbGl6ZWRHYXNsZXNzBQdhc3NldElkBQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUKcmVjaXBpZW50XwUQbm9ybWFsaXplZEFtb3VudAUHYXNzZXRJZAUDbmlsCQCUCgIJAM4IAgUHYWN0aW9ucwUPcmVmZXJyZXJBY3Rpb25zBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmJ1cm5Ub2tlbnMDEWV4ZWN1dGlvbkNoYWluSWRfCnJlY2lwaWVudF8OZ2FzbGVzc1Jld2FyZF8EA2VycgMDAwMDCQEQX3doZW5Jbml0aWFsaXplZAAJAQ5fd2hlbk5vdFBhdXNlZAAHCQEOX3ZhbGlkYXRlQ2hhaW4CBRFleGVjdXRpb25DaGFpbklkXwIdYnVybjogaW52YWxpZCBleGVjdXRpb24gY2hhaW4HCQEVX3ZhbGlkYXRlUGF5bWVudHNTaXplAwgFAWkIcGF5bWVudHMAAQIQYnVybjogbm8gcGF5bWVudAcJAQxfdmFsaWRhdGVJbnQEBQ5nYXNsZXNzUmV3YXJkXwAABQdNQVhfSU5UAhtidXJuOiBpbnZhbGlkIGdhc2xlc3NSZXdhcmQHCQEMX3ZhbGlkYXRlSW50BAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAAUHTUFYX0lOVAIcYnVybjogaW52YWxpZCBwYXltZW50IGFtb3VudAcDCQAAAgUDZXJyBQNlcnIEBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEB2Fzc2V0SWQEByRtYXRjaDAICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFhBQckbWF0Y2gwBQFhCQACAQITYnVybjogaW52YWxpZCBhc3NldAQHYmluZGluZwkBDF9sb2FkQmluZGluZwIFEWV4ZWN1dGlvbkNoYWluSWRfBQdhc3NldElkBA1hc3NldENvbnRyYWN0CAUHYmluZGluZwJfMQQOZXhlY3V0aW9uQXNzZXQIBQdiaW5kaW5nAl8yBAltaW5BbW91bnQIBQdiaW5kaW5nAl8zBAZtaW5GZWUIBQdiaW5kaW5nAl80BAx0aHJlc2hvbGRGZWUIBQdiaW5kaW5nAl81BBBiZWZvcmVQZXJjZW50RmVlCAUHYmluZGluZwJfNgQPYWZ0ZXJQZXJjZW50RmVlCAUHYmluZGluZwJfNwQHZW5hYmxlZAgFB2JpbmRpbmcCXzgEBGVycjEDAwkBEF92YWxpZGF0ZUFkZHJlc3MCCQClCAEFDWFzc2V0Q29udHJhY3QCFWJ1cm46IG5vIHN1Y2ggYmluZGluZwkBDF92YWxpZGF0ZUludAQFBmFtb3VudAUJbWluQW1vdW50BQdNQVhfSU5UAhNidXJuOiBsZXNzIHRoYW4gbWluBwkBDV92YWxpZGF0ZUJvb2wDBQdlbmFibGVkBgIXYnVybjogdG9rZW4gaXMgZGlzYWJsZWQHAwkAAAIFBGVycjEFBGVycjEEDWFzc2V0RGVjaW1hbHMJAQZfYXNJbnQBCQD8BwQFDWFzc2V0Q29udHJhY3QCC2dldERlY2ltYWxzBQNuaWwFA25pbAMJAAACBQ1hc3NldERlY2ltYWxzBQ1hc3NldERlY2ltYWxzBAdwZXJjZW50AwkAZgIFBmFtb3VudAUMdGhyZXNob2xkRmVlBQ9hZnRlclBlcmNlbnRGZWUFEGJlZm9yZVBlcmNlbnRGZWUEA2ZlZQkAZAIFBm1pbkZlZQkAawMFBmFtb3VudAUHcGVyY2VudAUOUEVSQ0VOVF9GQUNUT1IEBGVycjIJAQxfdmFsaWRhdGVJbnQEBQZhbW91bnQJAGQCBQNmZWUAAQUHTUFYX0lOVAIaYnVybjogZmVlIG1vcmUgdGhhbiBhbW91bnQDCQAAAgUEZXJyMgUEZXJyMgQMYW1vdW50VG9TZW5kCQBlAgUGYW1vdW50BQNmZWUEBGVycjMJAQxfdmFsaWRhdGVJbnQEBQxhbW91bnRUb1NlbmQJAGQCBQ5nYXNsZXNzUmV3YXJkXwABBQdNQVhfSU5UAh1idXJuOiByZXdhcmQgbW9yZSB0aGFuIGFtb3VudAMJAAACBQRlcnIzBQRlcnIzBAl1cGRhdGVGZWUJAGQCCQEIX2xvYWRGZWUBBQdhc3NldElkBQNmZWUEEG5vcm1hbGl6ZWRBbW91bnQJARJfbm9ybWFsaXplRGVjaW1hbHMDBQxhbW91bnRUb1NlbmQFDWFzc2V0RGVjaW1hbHMFCERFQ0lNQUxTBBFub3JtYWxpemVkR2FzbGVzcwkBEl9ub3JtYWxpemVEZWNpbWFscwMFDmdhc2xlc3NSZXdhcmRfBQ1hc3NldERlY2ltYWxzBQhERUNJTUFMUwQKaW52b2NhdGlvbgkA/AcECQEQX2xvYWRSb290QWRhcHRlcgAFE0ZVTkNfUkVMRUFTRV9UT0tFTlMJAMwIAgURZXhlY3V0aW9uQ2hhaW5JZF8JAMwIAgUOZXhlY3V0aW9uQXNzZXQJAMwIAgUQbm9ybWFsaXplZEFtb3VudAkAzAgCBQpyZWNpcGllbnRfCQDMCAIFEW5vcm1hbGl6ZWRHYXNsZXNzBQNuaWwFA25pbAMJAAACBQppbnZvY2F0aW9uBQppbnZvY2F0aW9uCQCUCgIJAM4IAgkBCF9zYXZlRmVlAgUHYXNzZXRJZAUJdXBkYXRlRmVlCQDMCAIJAQRCdXJuAgUHYXNzZXRJZAUMYW1vdW50VG9TZW5kBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELdHJhbnNmZXJGZWUCEWV4ZWN1dGlvbkNoYWluSWRfCGFzc2V0SWRfBANlcnIDAwkBEF93aGVuSW5pdGlhbGl6ZWQACQEOX3doZW5Ob3RQYXVzZWQABwkBDl92YWxpZGF0ZUFzc2V0AgUIYXNzZXRJZF8CGnRyYW5zZmVyRmVlOiBpbnZhbGlkIGFzc2V0BwMJAAACBQNlcnIFA2VycgQHYXNzZXRJZAkA2QQBBQhhc3NldElkXwQHYmluZGluZwkBDF9sb2FkQmluZGluZwIFEWV4ZWN1dGlvbkNoYWluSWRfBQdhc3NldElkBA1hc3NldENvbnRyYWN0CAUHYmluZGluZwJfMQQHZW5hYmxlZAgFB2JpbmRpbmcCXzgEBGVycjEDCQEQX3ZhbGlkYXRlQWRkcmVzcwIJAKUIAQUNYXNzZXRDb250cmFjdAIcdHJhbnNmZXJGZWU6IG5vIHN1Y2ggYmluZGluZwkBDV92YWxpZGF0ZUJvb2wDBQdlbmFibGVkBgIedHJhbnNmZXJGZWU6IHRva2VuIGlzIGRpc2FibGVkBwMJAAACBQRlcnIxBQRlcnIxCQCUCgIJAM4IAgkBCF9zYXZlRmVlAgUHYXNzZXRJZAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFfbG9hZEZlZVJlY2lwaWVudAAJAQhfbG9hZEZlZQEFB2Fzc2V0SWQFB2Fzc2V0SWQFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARR1cGRhdGVDYWxsZXJDb250cmFjdAEPY2FsbGVyQ29udHJhY3RfBANlcnIDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBE19zYXZlQ2FsbGVyQ29udHJhY3QBBQ9jYWxsZXJDb250cmFjdF8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEUdXBkYXRlRXhlY3V0aW9uQ2hhaW4CEWV4ZWN1dGlvbkNoYWluSWRfCGVuYWJsZWRfBANlcnIDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEMX3ZhbGlkYXRlSW50BAURZXhlY3V0aW9uQ2hhaW5JZF8AAAUHTUFYX0lOVAIudXBkYXRlRXhlY3V0aW9uQ2hhaW46IGludmFsaWQgZXhlY3V0aW9uQ2hhaW5JZAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBCl9zYXZlQ2hhaW4CBRFleGVjdXRpb25DaGFpbklkXwUIZW5hYmxlZF8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESdXBkYXRlRmVlUmVjaXBpZW50AQ1mZWVSZWNpcGllbnRfBANlcnIDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFDWZlZVJlY2lwaWVudF8CKHVwZGF0ZUZlZVJlY2lwaWVudDogaW52YWxpZCBmZWVSZWNpcGllbnQHAwkAAAIFA2VycgUDZXJyCQCUCgIJARFfc2F2ZUZlZVJlY2lwaWVudAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDWZlZVJlY2lwaWVudF8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOdXBkYXRlUmVmZXJyZXIDEWV4ZWN1dGlvbkNoYWluSWRfCXJlZmVycmVyXwRmZWVfBANlcnIDAwMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJAQ5fdmFsaWRhdGVDaGFpbgIFEWV4ZWN1dGlvbkNoYWluSWRfAid1cGRhdGVSZWZlcnJlcjogaW52YWxpZCBleGVjdXRpb24gY2hhaW4HCQEQX3ZhbGlkYXRlQWRkcmVzcwIFCXJlZmVycmVyXwIgdXBkYXRlUmVmZXJyZXI6IGludmFsaWQgcmVmZXJyZXIHCQEMX3ZhbGlkYXRlSW50BAUEZmVlXwAABRBNQVhfUkVGRVJSRVJfRkVFAht1cGRhdGVSZWZlcnJlcjogaW52YWxpZCBmZWUHAwkAAAIFA2VycgUDZXJyCQCUCgIJARdfc2F2ZVJlZmVycmVyRmVlUGVyY2VudAMFEWV4ZWN1dGlvbkNoYWluSWRfCQERQGV4dHJOYXRpdmUoMTA2MikBBQlyZWZlcnJlcl8FBGZlZV8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERdXBkYXRlQmluZGluZ0luZm8JEWV4ZWN1dGlvbkNoYWluSWRfDmFzc2V0Q29udHJhY3RfD2V4ZWN1dGlvbkFzc2V0XwptaW5BbW91bnRfB21pbkZlZV8NdGhyZXNob2xkRmVlXxFiZWZvcmVQZXJjZW50RmVlXxBhZnRlclBlcmNlbnRGZWVfCGVuYWJsZWRfBANlcnIDAwMDAwMDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFDmFzc2V0Q29udHJhY3RfAil1cGRhdGVCaW5kaW5nSW5mbzogaW52YWxpZCBhc3NldCBjb250cmFjdAcJAQxfdmFsaWRhdGVJbnQEBRFleGVjdXRpb25DaGFpbklkXwAABQdNQVhfSU5UAit1cGRhdGVCaW5kaW5nSW5mbzogaW52YWxpZCBleGVjdXRpb25DaGFpbklkBwkBDF92YWxpZGF0ZUludAQFCm1pbkFtb3VudF8AAAUHTUFYX0lOVAIkdXBkYXRlQmluZGluZ0luZm86IGludmFsaWQgbWluQW1vdW50BwkBDF92YWxpZGF0ZUludAQFB21pbkZlZV8AAAUHTUFYX0lOVAIhdXBkYXRlQmluZGluZ0luZm86IGludmFsaWQgbWluRmVlBwkBDF92YWxpZGF0ZUludAQFDXRocmVzaG9sZEZlZV8AAAUHTUFYX0lOVAIndXBkYXRlQmluZGluZ0luZm86IGludmFsaWQgdGhyZXNob2xkRmVlBwkBDF92YWxpZGF0ZUludAQFEWJlZm9yZVBlcmNlbnRGZWVfAAAFB01BWF9JTlQCK3VwZGF0ZUJpbmRpbmdJbmZvOiBpbnZhbGlkIGJlZm9yZVBlcmNlbnRGZWUHCQEMX3ZhbGlkYXRlSW50BAUQYWZ0ZXJQZXJjZW50RmVlXwAABQdNQVhfSU5UAip1cGRhdGVCaW5kaW5nSW5mbzogaW52YWxpZCBhZnRlclBlcmNlbnRGZWUHAwkAAAIFA2VycgUDZXJyBAdhc3NldElkCQEIX2FzQnl0ZXMBCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDmFzc2V0Q29udHJhY3RfAgpnZXRBc3NldElkBQNuaWwFA25pbAMJAAACBQdhc3NldElkBQdhc3NldElkBAdiaW5kaW5nCQCaCggJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDmFzc2V0Q29udHJhY3RfBQ9leGVjdXRpb25Bc3NldF8FCm1pbkFtb3VudF8FB21pbkZlZV8FDXRocmVzaG9sZEZlZV8FEWJlZm9yZVBlcmNlbnRGZWVfBRBhZnRlclBlcmNlbnRGZWVfBQhlbmFibGVkXwkAlAoCCQEMX3NhdmVCaW5kaW5nAwURZXhlY3V0aW9uQ2hhaW5JZF8FB2Fzc2V0SWQFB2JpbmRpbmcFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFcGF1c2UABANlcnIDAwkBC19vbmx5UGF1c2VyAQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEOX3doZW5Ob3RQYXVzZWQABwMJAAACBQNlcnIFA2VycgkAlAoCCQEKX3NhdmVQYXVzZQEGBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB3VucGF1c2UABANlcnIDAwkBC19vbmx5UGF1c2VyAQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQELX3doZW5QYXVzZWQABwMJAAACBQNlcnIFA2VycgkAlAoCCQEKX3NhdmVQYXVzZQEHBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHVwZGF0ZVBhdXNlcgEHcGF1c2VyXwQDZXJyAwMJARFfb25seVRoaXNDb250cmFjdAEIBQFpBmNhbGxlcgkBEF93aGVuSW5pdGlhbGl6ZWQABwkBEF92YWxpZGF0ZUFkZHJlc3MCBQdwYXVzZXJfAhRpbml0OiBpbnZhbGlkIHBhdXNlcgcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBC19zYXZlUGF1c2VyAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUHcGF1c2VyXwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtzZXRNdWx0aXNpZwEJbXVsdGlzaWdfBANlcnIDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfdmFsaWRhdGVBZGRyZXNzAgUJbXVsdGlzaWdfAh1zZXRNdWx0aXNpZzogaW52YWxpZCBtdWx0aXNpZwcDCQAAAgUDZXJyBQNlcnIJAJQKAgkBDV9zYXZlTXVsdGlzaWcBCQERQGV4dHJOYXRpdmUoMTA2MikBBQltdWx0aXNpZ18FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABAckbWF0Y2gwCQCiCAEFDEtFWV9NVUxUSVNJRwMJAAECBQckbWF0Y2gwAgZTdHJpbmcECG11bHRpc2lnBQckbWF0Y2gwCQELdmFsdWVPckVsc2UCCQCbCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCG11bHRpc2lnCQC5CQIJAMwIAgUKS0VZX1NUQVRVUwkAzAgCCQClCAEFBHRoaXMJAMwIAgkA2AQBCAUCdHgCaWQFA25pbAUJU0VQQVJBVE9SBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleXdm2AQ=", "height": 2572909, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AYFnp5rYW8kJxTU3XfHTS36TQmnTRmvNWWLoDDyZfUDy Next: CutHDDT3ZWqnnsLpCRLmXhXX1GbbmRJseeNLkgQeUveE Diff:
OldNewDifferences
2727
2828 let KEY_FEE_RECIPIENT = "FEE_RECIPIENT"
2929
30+let KEY_REFERRER_FEE_PERCENT = "REFERRER_FEE_PERCENT"
31+
3032 let FUNC_RELEASE_TOKENS = "releaseTokens"
3133
3234 let WAVES = "WAVES"
3638 let DECIMALS = 6
3739
3840 let PERCENT_FACTOR = 1000000
41+
42+let MAX_REFERRER_FEE = 200000
3943
4044 let MAX_INT = 9223372036854775807
4145
203207 func _saveFeeRecipient (val_) = [StringEntry(KEY_FEE_RECIPIENT, toString(val_))]
204208
205209
210+func _loadReferrerFeePercent (executionChainId_,referrer_) = match getInteger(makeString([KEY_REFERRER_FEE_PERCENT, toString(executionChainId_), toString(referrer_)], SEPARATOR)) {
211+ case a: Int =>
212+ a
213+ case _ =>
214+ 0
215+}
216+
217+
218+func _saveReferrerFeePercent (executionChainId_,referrer_,val_) = [IntegerEntry(makeString([KEY_REFERRER_FEE_PERCENT, toString(executionChainId_), toString(referrer_)], SEPARATOR), val_)]
219+
220+
206221 func _onlyThisContract (caller_) = if ((caller_ != this))
207222 then throw("_onlyThisContract: revert")
208223 else true
355370
356371 @Callable(i)
357372 func burnTokens (executionChainId_,recipient_,gaslessReward_) = {
358- let err = if (if (if (if (_whenInitialized())
373+ let err = if (if (if (if (if (_whenInitialized())
359374 then _whenNotPaused()
360375 else false)
361376 then _validateChain(executionChainId_, "burn: invalid execution chain")
362377 else false)
363378 then _validatePaymentsSize(i.payments, 1, "burn: no payment")
379+ else false)
380+ then _validateInt(gaslessReward_, 0, MAX_INT, "burn: invalid gaslessReward")
364381 else false)
365382 then _validateInt(i.payments[0].amount, 0, MAX_INT, "burn: invalid payment amount")
366383 else false
490507
491508
492509 @Callable(i)
510+func updateReferrer (executionChainId_,referrer_,fee_) = {
511+ let err = if (if (if (if (_onlyThisContract(i.caller))
512+ then _whenInitialized()
513+ else false)
514+ then _validateChain(executionChainId_, "updateReferrer: invalid execution chain")
515+ else false)
516+ then _validateAddress(referrer_, "updateReferrer: invalid referrer")
517+ else false)
518+ then _validateInt(fee_, 0, MAX_REFERRER_FEE, "updateReferrer: invalid fee")
519+ else false
520+ if ((err == err))
521+ then $Tuple2(_saveReferrerFeePercent(executionChainId_, addressFromStringValue(referrer_), fee_), unit)
522+ else throw("Strict value is not equal to itself.")
523+ }
524+
525+
526+
527+@Callable(i)
493528 func updateBindingInfo (executionChainId_,assetContract_,executionAsset_,minAmount_,minFee_,thresholdFee_,beforePercentFee_,afterPercentFee_,enabled_) = {
494529 let err = if (if (if (if (if (if (if (if (_onlyThisContract(i.caller))
495530 then _whenInitialized()
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_EXECUTOR = "EXECUTOR"
1717
1818 let KEY_ROOT_ADAPTER = "ROOT_ADAPTER"
1919
2020 let KEY_CALLER_CONTRACT = "CALLER_CONTRACT"
2121
2222 let KEY_CHAIN = "CHAIN"
2323
2424 let KEY_BINDING = "BINDING"
2525
2626 let KEY_FEE = "FEE"
2727
2828 let KEY_FEE_RECIPIENT = "FEE_RECIPIENT"
2929
30+let KEY_REFERRER_FEE_PERCENT = "REFERRER_FEE_PERCENT"
31+
3032 let FUNC_RELEASE_TOKENS = "releaseTokens"
3133
3234 let WAVES = "WAVES"
3335
3436 let WAVES_DECIMALS = 8
3537
3638 let DECIMALS = 6
3739
3840 let PERCENT_FACTOR = 1000000
41+
42+let MAX_REFERRER_FEE = 200000
3943
4044 let MAX_INT = 9223372036854775807
4145
4246 func _validateAddress (address_,err_) = match addressFromString(address_) {
4347 case a: Address =>
4448 true
4549 case _ =>
4650 throw(err_)
4751 }
4852
4953
5054 func _validateAsset (assetId_,err_) = match assetInfo(fromBase58String(assetId_)) {
5155 case a: Asset =>
5256 true
5357 case _ =>
5458 throw(err_)
5559 }
5660
5761
5862 func _validateInt (val_,lowerBoundary_,upperBoundary_,err_) = if (if ((lowerBoundary_ > val_))
5963 then true
6064 else (val_ > upperBoundary_))
6165 then throw(err_)
6266 else true
6367
6468
6569 func _validateBool (val_,target_,err_) = if ((val_ != target_))
6670 then throw(err_)
6771 else true
6872
6973
7074 func _validatePaymentsSize (payments_,target_,err_) = if ((size(payments_) != target_))
7175 then throw(err_)
7276 else true
7377
7478
7579 func _normalizeDecimals (amount_,sourceDecimals_,targetDecimals_) = if ((sourceDecimals_ >= targetDecimals_))
7680 then (amount_ / pow(10, 0, (sourceDecimals_ - targetDecimals_), 0, 0, DOWN))
7781 else (amount_ * pow(10, 0, (targetDecimals_ - sourceDecimals_), 0, 0, DOWN))
7882
7983
8084 func _loadInit () = match getBoolean(KEY_INIT) {
8185 case a: Boolean =>
8286 a
8387 case _ =>
8488 false
8589 }
8690
8791
8892 func _saveInit (isInit_) = [BooleanEntry(KEY_INIT, isInit_)]
8993
9094
9195 func _loadPause () = match getBoolean(KEY_PAUSED) {
9296 case a: Boolean =>
9397 a
9498 case _ =>
9599 false
96100 }
97101
98102
99103 func _savePause (isPaused_) = [BooleanEntry(KEY_PAUSED, isPaused_)]
100104
101105
102106 func _loadPauser () = match getString(KEY_PAUSER) {
103107 case a: String =>
104108 addressFromStringValue(a)
105109 case _ =>
106110 Address(base58'')
107111 }
108112
109113
110114 func _savePauser (pauser_) = [StringEntry(KEY_PAUSER, toString(pauser_))]
111115
112116
113117 func _loadMultisig () = match getString(KEY_MULTISIG) {
114118 case a: String =>
115119 addressFromStringValue(a)
116120 case _ =>
117121 Address(base58'')
118122 }
119123
120124
121125 func _saveMultisig (multisig_) = [StringEntry(KEY_MULTISIG, toString(multisig_))]
122126
123127
124128 func _loadExecutor () = match getString(KEY_EXECUTOR) {
125129 case a: String =>
126130 addressFromStringValue(a)
127131 case _ =>
128132 Address(base58'')
129133 }
130134
131135
132136 func _saveExecutor (executor_) = [StringEntry(KEY_EXECUTOR, toString(executor_))]
133137
134138
135139 func _loadCallerContract () = match getString(KEY_CALLER_CONTRACT) {
136140 case a: String =>
137141 a
138142 case _ =>
139143 ""
140144 }
141145
142146
143147 func _saveCallerContract (caller_) = [StringEntry(KEY_CALLER_CONTRACT, caller_)]
144148
145149
146150 func _loadChain (chainId_) = match getBoolean(makeString([KEY_CHAIN, toString(chainId_)], SEPARATOR)) {
147151 case a: Boolean =>
148152 a
149153 case _ =>
150154 false
151155 }
152156
153157
154158 func _saveChain (chainId_,val_) = [BooleanEntry(makeString([KEY_CHAIN, toString(chainId_)], SEPARATOR), val_)]
155159
156160
157161 func _loadBinding (executionChainId_,assetId_) = match getString(makeString([KEY_BINDING, toString(executionChainId_), toBase58String(assetId_)], SEPARATOR)) {
158162 case a: String =>
159163 let struct = split(a, SEPARATOR)
160164 $Tuple8(addressFromStringValue(struct[0]), struct[1], parseIntValue(struct[2]), parseIntValue(struct[3]), parseIntValue(struct[4]), parseIntValue(struct[5]), parseIntValue(struct[6]), if ((struct[7] == "1"))
161165 then true
162166 else false)
163167 case _ =>
164168 $Tuple8(Address(base58''), "", 0, 0, 0, 0, 0, false)
165169 }
166170
167171
168172 func _saveBinding (executionChainId_,assetId_,binding_) = [StringEntry(makeString([KEY_BINDING, toString(executionChainId_), toBase58String(assetId_)], SEPARATOR), makeString([toString(binding_._1), binding_._2, toString(binding_._3), toString(binding_._4), toString(binding_._5), toString(binding_._6), toString(binding_._7), if (binding_._8)
169173 then "1"
170174 else "0"], SEPARATOR))]
171175
172176
173177 func _loadFee (assetId_) = match getInteger(makeString([KEY_FEE, toBase58String(assetId_)], SEPARATOR)) {
174178 case a: Int =>
175179 a
176180 case _ =>
177181 0
178182 }
179183
180184
181185 func _saveFee (assetId_,val_) = [IntegerEntry(makeString([KEY_FEE, toBase58String(assetId_)], SEPARATOR), val_)]
182186
183187
184188 func _loadRootAdapter () = match getString(KEY_ROOT_ADAPTER) {
185189 case a: String =>
186190 addressFromStringValue(a)
187191 case _ =>
188192 Address(base58'')
189193 }
190194
191195
192196 func _saveRootAdapter (adapter_) = [StringEntry(KEY_ROOT_ADAPTER, toString(adapter_))]
193197
194198
195199 func _loadFeeRecipient () = match getString(KEY_FEE_RECIPIENT) {
196200 case a: String =>
197201 addressFromStringValue(a)
198202 case _ =>
199203 Address(base58'')
200204 }
201205
202206
203207 func _saveFeeRecipient (val_) = [StringEntry(KEY_FEE_RECIPIENT, toString(val_))]
204208
205209
210+func _loadReferrerFeePercent (executionChainId_,referrer_) = match getInteger(makeString([KEY_REFERRER_FEE_PERCENT, toString(executionChainId_), toString(referrer_)], SEPARATOR)) {
211+ case a: Int =>
212+ a
213+ case _ =>
214+ 0
215+}
216+
217+
218+func _saveReferrerFeePercent (executionChainId_,referrer_,val_) = [IntegerEntry(makeString([KEY_REFERRER_FEE_PERCENT, toString(executionChainId_), toString(referrer_)], SEPARATOR), val_)]
219+
220+
206221 func _onlyThisContract (caller_) = if ((caller_ != this))
207222 then throw("_onlyThisContract: revert")
208223 else true
209224
210225
211226 func _whenMultisigSet () = if ((_loadMultisig() == Address(base58'')))
212227 then throw("_whenMultisigSet: revert")
213228 else true
214229
215230
216231 func _whenNotInitialized () = if (_loadInit())
217232 then throw("_whenNotInitialized: revert")
218233 else true
219234
220235
221236 func _whenInitialized () = if (!(_loadInit()))
222237 then throw("_whenInitialized: revert")
223238 else true
224239
225240
226241 func _whenNotPaused () = if (_loadPause())
227242 then throw("_whenNotPaused: revert")
228243 else true
229244
230245
231246 func _whenPaused () = if (!(_loadPause()))
232247 then throw("_whenPaused: revert")
233248 else true
234249
235250
236251 func _onlyPauser (caller_) = if ((caller_ != _loadPauser()))
237252 then throw("_onlyPauser: revert")
238253 else true
239254
240255
241256 func _asInt (val_) = match val_ {
242257 case a: Int =>
243258 a
244259 case _ =>
245260 throw("_asInt: revert")
246261 }
247262
248263
249264 func _asBytes (val_) = match val_ {
250265 case a: ByteVector =>
251266 a
252267 case _ =>
253268 throw("_asBytes: revert")
254269 }
255270
256271
257272 func _validateExecutor (val_,err_) = if ((val_ != _loadExecutor()))
258273 then throw(err_)
259274 else true
260275
261276
262277 func _validateCaller (val_,err_) = if ((val_ != _loadCallerContract()))
263278 then throw(err_)
264279 else true
265280
266281
267282 func _validateChain (executionChainId_,err_) = if (!(_loadChain(executionChainId_)))
268283 then throw(err_)
269284 else true
270285
271286
272287 @Callable(i)
273288 func init (executor_,adapter_,pauser_,feeRecipient_) = {
274289 let err = if (if (if (if (if (if (_onlyThisContract(i.caller))
275290 then _whenNotInitialized()
276291 else false)
277292 then _whenMultisigSet()
278293 else false)
279294 then _validateAddress(executor_, "init: invalid executor")
280295 else false)
281296 then _validateAddress(adapter_, "init: invalid adapter")
282297 else false)
283298 then _validateAddress(pauser_, "init: invalid pauser")
284299 else false)
285300 then _validateAddress(feeRecipient_, "init: invalid feeRecipient")
286301 else false
287302 if ((err == err))
288303 then $Tuple2(((((_saveInit(true) ++ _saveExecutor(addressFromStringValue(executor_))) ++ _saveRootAdapter(addressFromStringValue(adapter_))) ++ _savePauser(addressFromStringValue(pauser_))) ++ _saveFeeRecipient(addressFromStringValue(feeRecipient_))), unit)
289304 else throw("Strict value is not equal to itself.")
290305 }
291306
292307
293308
294309 @Callable(i)
295310 func mintTokens (callerContract_,assetContract_,amount_,recipient_,gaslessReward_,referrer_,referrerFee_) = {
296311 let amount = valueOrErrorMessage(parseInt(amount_), "mint: amount is not Int")
297312 let gaslessReward = valueOrErrorMessage(parseInt(gaslessReward_), "mint: gaslessReward is not Int")
298313 let referrerFee = valueOrErrorMessage(parseInt(referrerFee_), "mint: referrerFee is not Int")
299314 let err = if (if (if (if (if (if (if (if (_whenInitialized())
300315 then _whenNotPaused()
301316 else false)
302317 then _validateAddress(assetContract_, "mint: invalid asset contract")
303318 else false)
304319 then _validateExecutor(i.caller, "mint: invalid executor")
305320 else false)
306321 then _validateCaller(callerContract_, "mint: invalid caller")
307322 else false)
308323 then _validateAddress(recipient_, "mint: invalid recipient address")
309324 else false)
310325 then _validateInt(amount, 0, MAX_INT, "mint: invalid amount")
311326 else false)
312327 then _validateInt(gaslessReward, 0, MAX_INT, "mint: invalid gaslessReward")
313328 else false)
314329 then _validateInt(referrerFee, 0, MAX_INT, "mint: invalid referrer fee")
315330 else false
316331 if ((err == err))
317332 then {
318333 let assetId = _asBytes(invoke(addressFromStringValue(assetContract_), "getAssetId", nil, nil))
319334 if ((assetId == assetId))
320335 then {
321336 let assetDecimals = _asInt(invoke(addressFromStringValue(assetContract_), "getDecimals", nil, nil))
322337 if ((assetDecimals == assetDecimals))
323338 then {
324339 let normalizedAmount = _normalizeDecimals(amount, DECIMALS, assetDecimals)
325340 let normalizedGasless = _normalizeDecimals(gaslessReward, DECIMALS, assetDecimals)
326341 let referrer = match addressFromString(referrer_) {
327342 case refererAddress: Address =>
328343 let normalizedReferrerFee = _normalizeDecimals(referrerFee, DECIMALS, assetDecimals)
329344 $Tuple2(normalizedReferrerFee, [ScriptTransfer(refererAddress, normalizedReferrerFee, assetId)])
330345 case _ =>
331346 $Tuple2(0, nil)
332347 }
333348 let normalizedReferrerFee = referrer._1
334349 let referrerActions = referrer._2
335350 let invocation = invoke(addressFromStringValue(assetContract_), "mint", [(normalizedAmount + normalizedReferrerFee), toString(this)], nil)
336351 if ((invocation == invocation))
337352 then {
338353 let actions = if (if ((normalizedGasless > 0))
339354 then (addressFromStringValue(recipient_) != i.originCaller)
340355 else false)
341356 then [ScriptTransfer(addressFromStringValue(recipient_), (normalizedAmount - normalizedGasless), assetId), ScriptTransfer(i.originCaller, normalizedGasless, assetId)]
342357 else [ScriptTransfer(addressFromStringValue(recipient_), normalizedAmount, assetId)]
343358 $Tuple2((actions ++ referrerActions), unit)
344359 }
345360 else throw("Strict value is not equal to itself.")
346361 }
347362 else throw("Strict value is not equal to itself.")
348363 }
349364 else throw("Strict value is not equal to itself.")
350365 }
351366 else throw("Strict value is not equal to itself.")
352367 }
353368
354369
355370
356371 @Callable(i)
357372 func burnTokens (executionChainId_,recipient_,gaslessReward_) = {
358- let err = if (if (if (if (_whenInitialized())
373+ let err = if (if (if (if (if (_whenInitialized())
359374 then _whenNotPaused()
360375 else false)
361376 then _validateChain(executionChainId_, "burn: invalid execution chain")
362377 else false)
363378 then _validatePaymentsSize(i.payments, 1, "burn: no payment")
379+ else false)
380+ then _validateInt(gaslessReward_, 0, MAX_INT, "burn: invalid gaslessReward")
364381 else false)
365382 then _validateInt(i.payments[0].amount, 0, MAX_INT, "burn: invalid payment amount")
366383 else false
367384 if ((err == err))
368385 then {
369386 let amount = i.payments[0].amount
370387 let assetId = match i.payments[0].assetId {
371388 case a: ByteVector =>
372389 a
373390 case _ =>
374391 throw("burn: invalid asset")
375392 }
376393 let binding = _loadBinding(executionChainId_, assetId)
377394 let assetContract = binding._1
378395 let executionAsset = binding._2
379396 let minAmount = binding._3
380397 let minFee = binding._4
381398 let thresholdFee = binding._5
382399 let beforePercentFee = binding._6
383400 let afterPercentFee = binding._7
384401 let enabled = binding._8
385402 let err1 = if (if (_validateAddress(toString(assetContract), "burn: no such binding"))
386403 then _validateInt(amount, minAmount, MAX_INT, "burn: less than min")
387404 else false)
388405 then _validateBool(enabled, true, "burn: token is disabled")
389406 else false
390407 if ((err1 == err1))
391408 then {
392409 let assetDecimals = _asInt(invoke(assetContract, "getDecimals", nil, nil))
393410 if ((assetDecimals == assetDecimals))
394411 then {
395412 let percent = if ((amount > thresholdFee))
396413 then afterPercentFee
397414 else beforePercentFee
398415 let fee = (minFee + fraction(amount, percent, PERCENT_FACTOR))
399416 let err2 = _validateInt(amount, (fee + 1), MAX_INT, "burn: fee more than amount")
400417 if ((err2 == err2))
401418 then {
402419 let amountToSend = (amount - fee)
403420 let err3 = _validateInt(amountToSend, (gaslessReward_ + 1), MAX_INT, "burn: reward more than amount")
404421 if ((err3 == err3))
405422 then {
406423 let updateFee = (_loadFee(assetId) + fee)
407424 let normalizedAmount = _normalizeDecimals(amountToSend, assetDecimals, DECIMALS)
408425 let normalizedGasless = _normalizeDecimals(gaslessReward_, assetDecimals, DECIMALS)
409426 let invocation = invoke(_loadRootAdapter(), FUNC_RELEASE_TOKENS, [executionChainId_, executionAsset, normalizedAmount, recipient_, normalizedGasless], nil)
410427 if ((invocation == invocation))
411428 then $Tuple2((_saveFee(assetId, updateFee) ++ [Burn(assetId, amountToSend)]), unit)
412429 else throw("Strict value is not equal to itself.")
413430 }
414431 else throw("Strict value is not equal to itself.")
415432 }
416433 else throw("Strict value is not equal to itself.")
417434 }
418435 else throw("Strict value is not equal to itself.")
419436 }
420437 else throw("Strict value is not equal to itself.")
421438 }
422439 else throw("Strict value is not equal to itself.")
423440 }
424441
425442
426443
427444 @Callable(i)
428445 func transferFee (executionChainId_,assetId_) = {
429446 let err = if (if (_whenInitialized())
430447 then _whenNotPaused()
431448 else false)
432449 then _validateAsset(assetId_, "transferFee: invalid asset")
433450 else false
434451 if ((err == err))
435452 then {
436453 let assetId = fromBase58String(assetId_)
437454 let binding = _loadBinding(executionChainId_, assetId)
438455 let assetContract = binding._1
439456 let enabled = binding._8
440457 let err1 = if (_validateAddress(toString(assetContract), "transferFee: no such binding"))
441458 then _validateBool(enabled, true, "transferFee: token is disabled")
442459 else false
443460 if ((err1 == err1))
444461 then $Tuple2((_saveFee(assetId, 0) ++ [ScriptTransfer(_loadFeeRecipient(), _loadFee(assetId), assetId)]), unit)
445462 else throw("Strict value is not equal to itself.")
446463 }
447464 else throw("Strict value is not equal to itself.")
448465 }
449466
450467
451468
452469 @Callable(i)
453470 func updateCallerContract (callerContract_) = {
454471 let err = if (_onlyThisContract(i.caller))
455472 then _whenInitialized()
456473 else false
457474 if ((err == err))
458475 then $Tuple2(_saveCallerContract(callerContract_), unit)
459476 else throw("Strict value is not equal to itself.")
460477 }
461478
462479
463480
464481 @Callable(i)
465482 func updateExecutionChain (executionChainId_,enabled_) = {
466483 let err = if (if (_onlyThisContract(i.caller))
467484 then _whenInitialized()
468485 else false)
469486 then _validateInt(executionChainId_, 0, MAX_INT, "updateExecutionChain: invalid executionChainId")
470487 else false
471488 if ((err == err))
472489 then $Tuple2(_saveChain(executionChainId_, enabled_), unit)
473490 else throw("Strict value is not equal to itself.")
474491 }
475492
476493
477494
478495 @Callable(i)
479496 func updateFeeRecipient (feeRecipient_) = {
480497 let err = if (if (_onlyThisContract(i.caller))
481498 then _whenInitialized()
482499 else false)
483500 then _validateAddress(feeRecipient_, "updateFeeRecipient: invalid feeRecipient")
484501 else false
485502 if ((err == err))
486503 then $Tuple2(_saveFeeRecipient(addressFromStringValue(feeRecipient_)), unit)
487504 else throw("Strict value is not equal to itself.")
488505 }
489506
490507
491508
492509 @Callable(i)
510+func updateReferrer (executionChainId_,referrer_,fee_) = {
511+ let err = if (if (if (if (_onlyThisContract(i.caller))
512+ then _whenInitialized()
513+ else false)
514+ then _validateChain(executionChainId_, "updateReferrer: invalid execution chain")
515+ else false)
516+ then _validateAddress(referrer_, "updateReferrer: invalid referrer")
517+ else false)
518+ then _validateInt(fee_, 0, MAX_REFERRER_FEE, "updateReferrer: invalid fee")
519+ else false
520+ if ((err == err))
521+ then $Tuple2(_saveReferrerFeePercent(executionChainId_, addressFromStringValue(referrer_), fee_), unit)
522+ else throw("Strict value is not equal to itself.")
523+ }
524+
525+
526+
527+@Callable(i)
493528 func updateBindingInfo (executionChainId_,assetContract_,executionAsset_,minAmount_,minFee_,thresholdFee_,beforePercentFee_,afterPercentFee_,enabled_) = {
494529 let err = if (if (if (if (if (if (if (if (_onlyThisContract(i.caller))
495530 then _whenInitialized()
496531 else false)
497532 then _validateAddress(assetContract_, "updateBindingInfo: invalid asset contract")
498533 else false)
499534 then _validateInt(executionChainId_, 0, MAX_INT, "updateBindingInfo: invalid executionChainId")
500535 else false)
501536 then _validateInt(minAmount_, 0, MAX_INT, "updateBindingInfo: invalid minAmount")
502537 else false)
503538 then _validateInt(minFee_, 0, MAX_INT, "updateBindingInfo: invalid minFee")
504539 else false)
505540 then _validateInt(thresholdFee_, 0, MAX_INT, "updateBindingInfo: invalid thresholdFee")
506541 else false)
507542 then _validateInt(beforePercentFee_, 0, MAX_INT, "updateBindingInfo: invalid beforePercentFee")
508543 else false)
509544 then _validateInt(afterPercentFee_, 0, MAX_INT, "updateBindingInfo: invalid afterPercentFee")
510545 else false
511546 if ((err == err))
512547 then {
513548 let assetId = _asBytes(invoke(addressFromStringValue(assetContract_), "getAssetId", nil, nil))
514549 if ((assetId == assetId))
515550 then {
516551 let binding = $Tuple8(addressFromStringValue(assetContract_), executionAsset_, minAmount_, minFee_, thresholdFee_, beforePercentFee_, afterPercentFee_, enabled_)
517552 $Tuple2(_saveBinding(executionChainId_, assetId, binding), unit)
518553 }
519554 else throw("Strict value is not equal to itself.")
520555 }
521556 else throw("Strict value is not equal to itself.")
522557 }
523558
524559
525560
526561 @Callable(i)
527562 func pause () = {
528563 let err = if (if (_onlyPauser(i.caller))
529564 then _whenInitialized()
530565 else false)
531566 then _whenNotPaused()
532567 else false
533568 if ((err == err))
534569 then $Tuple2(_savePause(true), unit)
535570 else throw("Strict value is not equal to itself.")
536571 }
537572
538573
539574
540575 @Callable(i)
541576 func unpause () = {
542577 let err = if (if (_onlyPauser(i.caller))
543578 then _whenInitialized()
544579 else false)
545580 then _whenPaused()
546581 else false
547582 if ((err == err))
548583 then $Tuple2(_savePause(false), unit)
549584 else throw("Strict value is not equal to itself.")
550585 }
551586
552587
553588
554589 @Callable(i)
555590 func updatePauser (pauser_) = {
556591 let err = if (if (_onlyThisContract(i.caller))
557592 then _whenInitialized()
558593 else false)
559594 then _validateAddress(pauser_, "init: invalid pauser")
560595 else false
561596 if ((err == err))
562597 then $Tuple2(_savePauser(addressFromStringValue(pauser_)), unit)
563598 else throw("Strict value is not equal to itself.")
564599 }
565600
566601
567602
568603 @Callable(i)
569604 func setMultisig (multisig_) = {
570605 let err = if (_onlyThisContract(i.caller))
571606 then _validateAddress(multisig_, "setMultisig: invalid multisig")
572607 else false
573608 if ((err == err))
574609 then $Tuple2(_saveMultisig(addressFromStringValue(multisig_)), unit)
575610 else throw("Strict value is not equal to itself.")
576611 }
577612
578613
579614 @Verifier(tx)
580615 func verify () = match getString(KEY_MULTISIG) {
581616 case multisig: String =>
582617 valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false)
583618 case _ =>
584619 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
585620 }
586621

github/deemru/w8io/026f985 
77.24 ms