tx · CLk4CVvdQTVRU3ieWRkRFxpCDa1h1QrAJPCPCMGJaSTo

3NCCbzmJYurqgXL9bh85G7gzASswGVjkfRU:  -0.01400000 Waves

2024.03.22 15:03 [3029218] smart account 3NCCbzmJYurqgXL9bh85G7gzASswGVjkfRU > SELF 0.00000000 Waves

{ "type": 13, "id": "CLk4CVvdQTVRU3ieWRkRFxpCDa1h1QrAJPCPCMGJaSTo", "fee": 1400000, "feeAssetId": null, "timestamp": 1711109009754, "version": 2, "chainId": 84, "sender": "3NCCbzmJYurqgXL9bh85G7gzASswGVjkfRU", "senderPublicKey": "7dYS4cBUtMS3qg16og5S9C9U6ygyVxgTqhJGoYcsuYzr", "proofs": [ "Mn4wqxxQrjjrvPwVvSSWpRh6P4dZbMmQaWP5gGjCsrCgt3TPm84PornGaotHqwSrwWs3vtm8XfGFyY3Uu7H2Ny4" ], "script": "base64:BwJPCAISBgoECAgICBIICgYICAgICAgSCQoHCAgBCAgBCBIICgYICAEICAgSCAoGCAgBCAgIEgUKAwEICBIFCgMBCAgSABIAEgMKAQgSAwoBCD4ACVNFUEFSQVRPUgICX18ADEtFWV9NVUxUSVNJRwIITVVMVElTSUcACktFWV9TVEFUVVMCBlNUQVRVUwAIS0VZX0lOSVQCBElOSVQACktFWV9QQVVTRUQCBlBBVVNFRAAKS0VZX1BBVVNFUgIGUEFVU0VSAAxLRVlfRVhFQ1VUT1ICCEVYRUNVVE9SABNLRVlfQ0FMTEVSX0NPTlRSQUNUAg9DQUxMRVJfQ09OVFJBQ1QAD0tFWV9XQVZFU19WQVVMVAILV0FWRVNfVkFVTFQAE0tFWV9BQ0NPVU5UX1NUT1JBR0UCD0FDQ09VTlRfU1RPUkFHRQAJS0VZX0NIQUlOAgVDSEFJTgAQS0VZX0FTU0VUX1RJQ0tFUgIMQVNTRVRfVElDS0VSABJLRVlfQVNTRVRfUkVTRVJWRVMCDkFTU0VUX1JFU0VSVkVTABNLRVlfVElDS0VSX1JFU0VSVkVTAg9USUNLRVJfUkVTRVJWRVMADEZVTkNfREVQT1NJVAIHZGVwb3NpdAAFV0FWRVMCBVdBVkVTAAtTUE9UX1dBTExFVAIEU1BPVAAHTUFYX0lOVAD//////////38AC1pFUk9fQklHSU5UCQC2AgEAAAAKT05FX0JJR0lOVAkAtgIBAAEBEF92YWxpZGF0ZUFkZHJlc3MCCGFkZHJlc3NfBGVycl8EByRtYXRjaDAJAKYIAQUIYWRkcmVzc18DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYJAAIBBQRlcnJfAQxfdmFsaWRhdGVJbnQEBHZhbF8ObG93ZXJCb3VuZGFyeV8OdXBwZXJCb3VuZGFyeV8EZXJyXwMDCQBmAgUObG93ZXJCb3VuZGFyeV8FBHZhbF8GCQBmAgUEdmFsXwUOdXBwZXJCb3VuZGFyeV8JAAIBBQRlcnJfBgEPX3ZhbGlkYXRlQmlnSW50AwR2YWxfDmxvd2VyQm91bmRhcnlfBGVycl8DCQC/AgIFDmxvd2VyQm91bmRhcnlfBQR2YWxfCQACAQUEZXJyXwYBD192YWxpZGF0ZVN0cmluZwIEdmFsXwRlcnJfAwMJAGcCAAAJALECAQUEdmFsXwYJAQhjb250YWlucwIFBHZhbF8FCVNFUEFSQVRPUgkAAgEFBGVycl8GAQlfbG9hZEluaXQABAckbWF0Y2gwCQCgCAEFCEtFWV9JTklUAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWEFByRtYXRjaDAFAWEHAQlfc2F2ZUluaXQBB2lzSW5pdF8JAMwIAgkBDEJvb2xlYW5FbnRyeQIFCEtFWV9JTklUBQdpc0luaXRfBQNuaWwBCl9sb2FkUGF1c2UABAckbWF0Y2gwCQCgCAEFCktFWV9QQVVTRUQDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYQUHJG1hdGNoMAUBYQcBCl9zYXZlUGF1c2UBCWlzUGF1c2VkXwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUKS0VZX1BBVVNFRAUJaXNQYXVzZWRfBQNuaWwBC19sb2FkUGF1c2VyAAQHJG1hdGNoMAkAoggBBQpLRVlfUEFVU0VSAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBYQkBB0FkZHJlc3MBAQABC19zYXZlUGF1c2VyAQdwYXVzZXJfCQDMCAIJAQtTdHJpbmdFbnRyeQIFCktFWV9QQVVTRVIJAKUIAQUHcGF1c2VyXwUDbmlsAQ1fbG9hZE11bHRpc2lnAAQHJG1hdGNoMAkAoggBBQxLRVlfTVVMVElTSUcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQEHQWRkcmVzcwEBAAENX3NhdmVNdWx0aXNpZwEJbXVsdGlzaWdfCQDMCAIJAQtTdHJpbmdFbnRyeQIFDEtFWV9NVUxUSVNJRwkApQgBBQltdWx0aXNpZ18FA25pbAETX2xvYWRDYWxsZXJDb250cmFjdAEIY2hhaW5JZF8EByRtYXRjaDAJAKIIAQkAuQkCCQDMCAIFE0tFWV9DQUxMRVJfQ09OVFJBQ1QJAMwIAgkApAMBBQhjaGFpbklkXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhAgABE19zYXZlQ2FsbGVyQ29udHJhY3QCCGNoYWluSWRfD2NhbGxlckNvbnRyYWN0XwkAzAgCCQELU3RyaW5nRW50cnkCCQC5CQIJAMwIAgUTS0VZX0NBTExFUl9DT05UUkFDVAkAzAgCCQCkAwEFCGNoYWluSWRfBQNuaWwFCVNFUEFSQVRPUgUPY2FsbGVyQ29udHJhY3RfBQNuaWwBDV9sb2FkRXhlY3V0b3IABAckbWF0Y2gwCQCiCAEFDEtFWV9FWEVDVVRPUgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQ1fc2F2ZUV4ZWN1dG9yAQlleGVjdXRvcl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUMS0VZX0VYRUNVVE9SCQClCAEFCWV4ZWN1dG9yXwUDbmlsARNfbG9hZEFjY291bnRTdG9yYWdlAAQHJG1hdGNoMAkAoggBBRNLRVlfQUNDT1VOVF9TVE9SQUdFAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBYQkBB0FkZHJlc3MBAQABE19zYXZlQWNjb3VudFN0b3JhZ2UBD2FjY291bnRTdG9yYWdlXwkAzAgCCQELU3RyaW5nRW50cnkCBRNLRVlfQUNDT1VOVF9TVE9SQUdFCQClCAEFD2FjY291bnRTdG9yYWdlXwUDbmlsAQ9fbG9hZFdhdmVzVmF1bHQABAckbWF0Y2gwCQCiCAEFD0tFWV9XQVZFU19WQVVMVAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAWEJAQdBZGRyZXNzAQEAAQ9fc2F2ZVdhdmVzVmF1bHQBC3dhdmVzVmF1bHRfCQDMCAIJAQtTdHJpbmdFbnRyeQIFD0tFWV9XQVZFU19WQVVMVAkApQgBBQt3YXZlc1ZhdWx0XwUDbmlsAQpfbG9hZENoYWluAQhjaGFpbklkXwQHJG1hdGNoMAkAoggBCQC5CQIJAMwIAgUJS0VZX0NIQUlOCQDMCAIJAKQDAQUIY2hhaW5JZF8FA25pbAUJU0VQQVJBVE9SAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAAQpfc2F2ZUNoYWluAghjaGFpbklkXwVuYW1lXwkAzAgCCQELU3RyaW5nRW50cnkCCQC5CQIJAMwIAgUJS0VZX0NIQUlOCQDMCAIJAKQDAQUIY2hhaW5JZF8FA25pbAUJU0VQQVJBVE9SBQVuYW1lXwUDbmlsARBfbG9hZEFzc2V0VGlja2VyAghjaGFpbklkXwZhc3NldF8EByRtYXRjaDAJAKIIAQkAuQkCCQDMCAIFEEtFWV9BU1NFVF9USUNLRVIJAMwIAgkApAMBBQhjaGFpbklkXwkAzAgCBQZhc3NldF8FA25pbAUJU0VQQVJBVE9SAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAARBfc2F2ZUFzc2V0VGlja2VyAwhjaGFpbklkXwZhc3NldF8HdGlja2VyXwkAzAgCCQELU3RyaW5nRW50cnkCCQC5CQIJAMwIAgUQS0VZX0FTU0VUX1RJQ0tFUgkAzAgCCQCkAwEFCGNoYWluSWRfCQDMCAIFBmFzc2V0XwUDbmlsBQlTRVBBUkFUT1IFB3RpY2tlcl8FA25pbAESX2xvYWRBc3NldFJlc2VydmVzAghjaGFpbklkXwZhc3NldF8EByRtYXRjaDAJAKIIAQkAuQkCCQDMCAIFEktFWV9BU1NFVF9SRVNFUlZFUwkAzAgCCQCkAwEFCGNoYWluSWRfCQDMCAIFBmFzc2V0XwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQCnAwEFAWEFC1pFUk9fQklHSU5UARJfc2F2ZUFzc2V0UmVzZXJ2ZXMDCGNoYWluSWRfBmFzc2V0XwlyZXNlcnZlc18JAMwIAgkBC1N0cmluZ0VudHJ5AgkAuQkCCQDMCAIFEktFWV9BU1NFVF9SRVNFUlZFUwkAzAgCCQCkAwEFCGNoYWluSWRfCQDMCAIFBmFzc2V0XwUDbmlsBQlTRVBBUkFUT1IJAKYDAQUJcmVzZXJ2ZXNfBQNuaWwBE19sb2FkVGlja2VyUmVzZXJ2ZXMBB3RpY2tlcl8EByRtYXRjaDAJAKIIAQkAuQkCCQDMCAIFE0tFWV9USUNLRVJfUkVTRVJWRVMJAMwIAgUHdGlja2VyXwUDbmlsBQlTRVBBUkFUT1IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQCnAwEFAWEFC1pFUk9fQklHSU5UARNfc2F2ZVRpY2tlclJlc2VydmVzAgd0aWNrZXJfCXJlc2VydmVzXwkAzAgCCQELU3RyaW5nRW50cnkCCQC5CQIJAMwIAgUTS0VZX1RJQ0tFUl9SRVNFUlZFUwkAzAgCBQd0aWNrZXJfBQNuaWwFCVNFUEFSQVRPUgkApgMBBQlyZXNlcnZlc18FA25pbAERX29ubHlUaGlzQ29udHJhY3QBB2NhbGxlcl8DCQECIT0CBQdjYWxsZXJfBQR0aGlzCQACAQIZX29ubHlUaGlzQ29udHJhY3Q6IHJldmVydAYBEF93aGVuTXVsdGlzaWdTZXQAAwkAAAIJAQ1fbG9hZE11bHRpc2lnAAkBB0FkZHJlc3MBAQAJAAIBAhhfd2hlbk11bHRpc2lnU2V0OiByZXZlcnQGARNfd2hlbk5vdEluaXRpYWxpemVkAAMJAQlfbG9hZEluaXQACQACAQIbX3doZW5Ob3RJbml0aWFsaXplZDogcmV2ZXJ0BgEQX3doZW5Jbml0aWFsaXplZAADCQEBIQEJAQlfbG9hZEluaXQACQACAQIYX3doZW5Jbml0aWFsaXplZDogcmV2ZXJ0BgEOX3doZW5Ob3RQYXVzZWQAAwkBCl9sb2FkUGF1c2UACQACAQIWX3doZW5Ob3RQYXVzZWQ6IHJldmVydAYBC193aGVuUGF1c2VkAAMJAQEhAQkBCl9sb2FkUGF1c2UACQACAQITX3doZW5QYXVzZWQ6IHJldmVydAYBC19vbmx5UGF1c2VyAQdjYWxsZXJfAwkBAiE9AgUHY2FsbGVyXwkBC19sb2FkUGF1c2VyAAkAAgECE19vbmx5UGF1c2VyOiByZXZlcnQGARFfdmFsaWRhdGVFeGVjdXRvcgIEdmFsXwRlcnJfAwkBAiE9AgUEdmFsXwkBDV9sb2FkRXhlY3V0b3IACQACAQUEZXJyXwYBF192YWxpZGF0ZUNhbGxlckNvbnRyYWN0AwhjaGFpbklkXw9jYWxsZXJDb250cmFjdF8EZXJyXwMJAQIhPQIJARNfbG9hZENhbGxlckNvbnRyYWN0AQUIY2hhaW5JZF8FD2NhbGxlckNvbnRyYWN0XwkAAgEFBGVycl8GAQxfY2hhaW5FeGlzdHMCCGNoYWluSWRfBGVycl8DCQBnAgAACQCxAgEJAQpfbG9hZENoYWluAQUIY2hhaW5JZF8JAAIBBQRlcnJfBgEOX2NoYWluTm90RXhpc3QCCGNoYWluSWRfBGVycl8DCQBmAgkAsQIBCQEKX2xvYWRDaGFpbgEFCGNoYWluSWRfAAAJAAIBBQRlcnJfBgESX2Fzc2V0VGlja2VyRXhpc3RzAwhjaGFpbklkXwZhc3NldF8EZXJyXwMJAGcCAAAJALECAQkBEF9sb2FkQXNzZXRUaWNrZXICBQhjaGFpbklkXwUGYXNzZXRfCQACAQUEZXJyXwYBFF9hc3NldFRpY2tlck5vdEV4aXN0AwhjaGFpbklkXwZhc3NldF8EZXJyXwMJAGYCCQCxAgEJARBfbG9hZEFzc2V0VGlja2VyAgUIY2hhaW5JZF8FBmFzc2V0XwAACQACAQUEZXJyXwYBE192YWxpZGF0ZVdhdmVzVmF1bHQCBmNhbGxlcgRlcnJfAwkBAiE9AgkBD19sb2FkV2F2ZXNWYXVsdAAFBmNhbGxlcgkAAgEFBGVycl8GCwFpAQRpbml0BAlleGVjdXRvcl8HcGF1c2VyXw9hY2NvdW50U3RvcmFnZV8Ld2F2ZXNWYXVsdF8EA2VycgMDAwMDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQETX3doZW5Ob3RJbml0aWFsaXplZAAHCQEQX3doZW5NdWx0aXNpZ1NldAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFCWV4ZWN1dG9yXwIWaW5pdDogaW52YWxpZCBleGVjdXRvcgcJARBfdmFsaWRhdGVBZGRyZXNzAgUHcGF1c2VyXwIUaW5pdDogaW52YWxpZCBwYXVzZXIHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFD2FjY291bnRTdG9yYWdlXwIcaW5pdDogaW52YWxpZCBhY2NvdW50U3RvcmFnZQcJARBfdmFsaWRhdGVBZGRyZXNzAgULd2F2ZXNWYXVsdF8CGGluaXQ6IGludmFsaWQgd2F2ZXNWYXVsdAcDCQAAAgUDZXJyBQNlcnIJAJQKAgkAzggCCQDOCAIJAM4IAgkAzggCCQEJX3NhdmVJbml0AQYJAQ1fc2F2ZUV4ZWN1dG9yAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUJZXhlY3V0b3JfCQELX3NhdmVQYXVzZXIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQdwYXVzZXJfCQETX3NhdmVBY2NvdW50U3RvcmFnZQEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFD2FjY291bnRTdG9yYWdlXwkBD19zYXZlV2F2ZXNWYXVsdAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFC3dhdmVzVmF1bHRfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB2RlcG9zaXQGD2NhbGxlckNvbnRyYWN0XwVmcm9tXwN0b18IY2hhaW5JZF8GYXNzZXRfB2Ftb3VudF8EB2NoYWluSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBBQhjaGFpbklkXwIYZGVwb3NpdDogY2hhaW5JZCBub3QgaW50BAZhbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAqAMBBQdhbW91bnRfAhdkZXBvc2l0OiBhbW91bnQgbm90IGludAQDZXJyAwMDAwMDCQEQX3doZW5Jbml0aWFsaXplZAAJAQ5fd2hlbk5vdFBhdXNlZAAHCQEMX2NoYWluRXhpc3RzAgUHY2hhaW5JZAIYZGVwb3NpdDogaW52YWxpZCBjaGFpbklkBwkBD192YWxpZGF0ZVN0cmluZwIFBWZyb21fAhVkZXBvc2l0OiBpbnZhbGlkIGZyb20HCQEPX3ZhbGlkYXRlU3RyaW5nAgUDdG9fAhNkZXBvc2l0OiBpbnZhbGlkIHRvBwkBEl9hc3NldFRpY2tlckV4aXN0cwMFB2NoYWluSWQFBmFzc2V0XwIWZGVwb3NpdDogaW52YWxpZCBhc3NldAcJAQ9fdmFsaWRhdGVCaWdJbnQDBQZhbW91bnQFC1pFUk9fQklHSU5UAhdkZXBvc2l0OiBpbnZhbGlkIGFtb3VudAcDCQAAAgUDZXJyBQNlcnIEBGVycjEDCQAAAgkBCl9sb2FkQ2hhaW4BBQdjaGFpbklkBQVXQVZFUwkBE192YWxpZGF0ZVdhdmVzVmF1bHQCCAUBaQZjYWxsZXICHGRlcG9zaXQ6IGludmFsaWQgd2F2ZXMgdmF1bHQDCQERX3ZhbGlkYXRlRXhlY3V0b3ICCAUBaQZjYWxsZXICGWRlcG9zaXQ6IGludmFsaWQgZXhlY3V0b3IJARdfdmFsaWRhdGVDYWxsZXJDb250cmFjdAMFB2NoYWluSWQFD2NhbGxlckNvbnRyYWN0XwIgZGVwb3NpdDogaW52YWxpZCBjYWxsZXIgY29udHJhY3QHAwkAAAIFBGVycjEFBGVycjEEEG5ld0Fzc2V0UmVzZXJ2ZXMJALcCAgkBEl9sb2FkQXNzZXRSZXNlcnZlcwIFB2NoYWluSWQFBmFzc2V0XwUGYW1vdW50BAZ0aWNrZXIJARBfbG9hZEFzc2V0VGlja2VyAgUHY2hhaW5JZAUGYXNzZXRfBBFuZXdUaWNrZXJSZXNlcnZlcwkAtwICCQETX2xvYWRUaWNrZXJSZXNlcnZlcwEFBnRpY2tlcgUGYW1vdW50BAppbnZvY2F0aW9uCQD8BwQJARNfbG9hZEFjY291bnRTdG9yYWdlAAUMRlVOQ19ERVBPU0lUCQDMCAIFA3RvXwkAzAgCBQtTUE9UX1dBTExFVAkAzAgCBQZ0aWNrZXIJAMwIAgUHYW1vdW50XwUDbmlsBQNuaWwDCQAAAgUKaW52b2NhdGlvbgUKaW52b2NhdGlvbgkAlAoCCQDOCAIJARJfc2F2ZUFzc2V0UmVzZXJ2ZXMDBQdjaGFpbklkBQZhc3NldF8FEG5ld0Fzc2V0UmVzZXJ2ZXMJARNfc2F2ZVRpY2tlclJlc2VydmVzAgUGdGlja2VyBRFuZXdUaWNrZXJSZXNlcnZlcwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQh3aXRoZHJhdwcFZnJvbV8DdG9fCGNoYWluSWRfBmFzc2V0XwdhbW91bnRfCnRpbWVzdGFtcF8Kc2lnbmF0dXJlXwkAlAoCBQNuaWwFBHVuaXQBaQERcmVxdWVzdFdpdGhkcmF3YWwGBWZyb21fA3RvXwhjaGFpbklkXwZhc3NldF8HYW1vdW50XwpzaWduYXR1cmVfCQCUCgIFA25pbAUEdW5pdAFpARFleGVjdXRlV2l0aGRyYXdhbAYFZnJvbV8DdG9fCGNoYWluSWRfBmFzc2V0XwdhbW91bnRfCnNpZ25hdHVyZV8JAJQKAgUDbmlsBQR1bml0AWkBCGFkZENoYWluAwhjaGFpbklkXwVuYW1lXw9jYWxsZXJDb250cmFjdF8EA2VycgMDAwMDCQERX29ubHlUaGlzQ29udHJhY3QBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJAQxfdmFsaWRhdGVJbnQEBQhjaGFpbklkXwAABQdNQVhfSU5UAhlhZGRDaGFpbjogaW52YWxpZCBjaGFpbklkBwkBD192YWxpZGF0ZVN0cmluZwIFBW5hbWVfAhZhZGRDaGFpbjogaW52YWxpZCBuYW1lBwkBD192YWxpZGF0ZVN0cmluZwIFD2NhbGxlckNvbnRyYWN0XwIgYWRkQ2hhaW46IGludmFsaWQgY2FsbGVyQ29udHJhY3QHCQEOX2NoYWluTm90RXhpc3QCBQhjaGFpbklkXwIYYWRkQ2hhaW46IGFscmVhZHkgZXhpc3RzBwMJAAACBQNlcnIFA2VycgkAlAoCCQDOCAIJAQpfc2F2ZUNoYWluAgUIY2hhaW5JZF8FBW5hbWVfCQETX3NhdmVDYWxsZXJDb250cmFjdAIFCGNoYWluSWRfBQ9jYWxsZXJDb250cmFjdF8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIYWRkQXNzZXQDCGNoYWluSWRfBmFzc2V0Xwd0aWNrZXJfBANlcnIDAwMDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEMX2NoYWluRXhpc3RzAgUIY2hhaW5JZF8CGWFkZEFzc2V0OiBpbnZhbGlkIGNoYWluSWQHCQEPX3ZhbGlkYXRlU3RyaW5nAgUGYXNzZXRfAhdhZGRBc3NldDogaW52YWxpZCBhc3NldAcJAQ9fdmFsaWRhdGVTdHJpbmcCBQd0aWNrZXJfAhhhZGRBc3NldDogaW52YWxpZCB0aWNrZXIHCQEUX2Fzc2V0VGlja2VyTm90RXhpc3QDBQhjaGFpbklkXwUGYXNzZXRfAhhhZGRBc3NldDogYWxyZWFkeSBleGlzdHMHAwkAAAIFA2VycgUDZXJyCQCUCgIJARBfc2F2ZUFzc2V0VGlja2VyAwUIY2hhaW5JZF8FBmFzc2V0XwUHdGlja2VyXwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVwYXVzZQAEA2VycgMDCQELX29ubHlQYXVzZXIBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJAQ5fd2hlbk5vdFBhdXNlZAAHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQpfc2F2ZVBhdXNlAQYFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHdW5wYXVzZQAEA2VycgMDCQELX29ubHlQYXVzZXIBCAUBaQZjYWxsZXIJARBfd2hlbkluaXRpYWxpemVkAAcJAQtfd2hlblBhdXNlZAAHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQpfc2F2ZVBhdXNlAQcFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMdXBkYXRlUGF1c2VyAQdwYXVzZXJfBANlcnIDAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3doZW5Jbml0aWFsaXplZAAHCQEQX3ZhbGlkYXRlQWRkcmVzcwIFB3BhdXNlcl8CHHVwZGF0ZVBhdXNlcjogaW52YWxpZCBwYXVzZXIHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQtfc2F2ZVBhdXNlcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB3BhdXNlcl8FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELc2V0TXVsdGlzaWcBCW11bHRpc2lnXwQDZXJyAwkBEV9vbmx5VGhpc0NvbnRyYWN0AQgFAWkGY2FsbGVyCQEQX3ZhbGlkYXRlQWRkcmVzcwIFCW11bHRpc2lnXwIdc2V0TXVsdGlzaWc6IGludmFsaWQgbXVsdGlzaWcHAwkAAAIFA2VycgUDZXJyCQCUCgIJAQ1fc2F2ZU11bHRpc2lnAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbXVsdGlzaWdfBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQHJG1hdGNoMAkAoggBBQxLRVlfTVVMVElTSUcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAhtdWx0aXNpZwUHJG1hdGNoMAkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQhtdWx0aXNpZwkAuQkCCQDMCAIFCktFWV9TVEFUVVMJAMwIAgkApQgBBQR0aGlzCQDMCAIJANgEAQgFAnR4AmlkBQNuaWwFCVNFUEFSQVRPUgcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXm+J7zf", "height": 3029218, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ByNGaMUqkErvMddgj5c9BX2Yf5iToVH6CA8ppUs1G9WZ Next: 22iAgtg8xCHx5adVyxLGAv5tWQKJ682BjqeSoN2eYzLL Diff:
OldNewDifferences
250250 else true
251251
252252
253+func _chainNotExist (chainId_,err_) = if ((size(_loadChain(chainId_)) > 0))
254+ then throw(err_)
255+ else true
256+
257+
253258 func _assetTickerExists (chainId_,asset_,err_) = if ((0 >= size(_loadAssetTicker(chainId_, asset_))))
259+ then throw(err_)
260+ else true
261+
262+
263+func _assetTickerNotExist (chainId_,asset_,err_) = if ((size(_loadAssetTicker(chainId_, asset_)) > 0))
254264 then throw(err_)
255265 else true
256266
349359 else false)
350360 then _validateString(callerContract_, "addChain: invalid callerContract")
351361 else false)
352- then !(_chainExists(chainId_, "addChain: already exists"))
362+ then _chainNotExist(chainId_, "addChain: already exists")
353363 else false
354364 if ((err == err))
355365 then $Tuple2((_saveChain(chainId_, name_) ++ _saveCallerContract(chainId_, callerContract_)), unit)
369379 else false)
370380 then _validateString(ticker_, "addAsset: invalid ticker")
371381 else false)
372- then !(_assetTickerExists(chainId_, asset_, "addAsset: already exists"))
382+ then _assetTickerNotExist(chainId_, asset_, "addAsset: already exists")
373383 else false
374384 if ((err == err))
375385 then $Tuple2(_saveAssetTicker(chainId_, asset_, ticker_), unit)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 7 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEPARATOR = "__"
55
66 let KEY_MULTISIG = "MULTISIG"
77
88 let KEY_STATUS = "STATUS"
99
1010 let KEY_INIT = "INIT"
1111
1212 let KEY_PAUSED = "PAUSED"
1313
1414 let KEY_PAUSER = "PAUSER"
1515
1616 let KEY_EXECUTOR = "EXECUTOR"
1717
1818 let KEY_CALLER_CONTRACT = "CALLER_CONTRACT"
1919
2020 let KEY_WAVES_VAULT = "WAVES_VAULT"
2121
2222 let KEY_ACCOUNT_STORAGE = "ACCOUNT_STORAGE"
2323
2424 let KEY_CHAIN = "CHAIN"
2525
2626 let KEY_ASSET_TICKER = "ASSET_TICKER"
2727
2828 let KEY_ASSET_RESERVES = "ASSET_RESERVES"
2929
3030 let KEY_TICKER_RESERVES = "TICKER_RESERVES"
3131
3232 let FUNC_DEPOSIT = "deposit"
3333
3434 let WAVES = "WAVES"
3535
3636 let SPOT_WALLET = "SPOT"
3737
3838 let MAX_INT = 9223372036854775807
3939
4040 let ZERO_BIGINT = toBigInt(0)
4141
4242 let ONE_BIGINT = toBigInt(1)
4343
4444 func _validateAddress (address_,err_) = match addressFromString(address_) {
4545 case a: Address =>
4646 true
4747 case _ =>
4848 throw(err_)
4949 }
5050
5151
5252 func _validateInt (val_,lowerBoundary_,upperBoundary_,err_) = if (if ((lowerBoundary_ > val_))
5353 then true
5454 else (val_ > upperBoundary_))
5555 then throw(err_)
5656 else true
5757
5858
5959 func _validateBigInt (val_,lowerBoundary_,err_) = if ((lowerBoundary_ > val_))
6060 then throw(err_)
6161 else true
6262
6363
6464 func _validateString (val_,err_) = if (if ((0 >= size(val_)))
6565 then true
6666 else contains(val_, SEPARATOR))
6767 then throw(err_)
6868 else true
6969
7070
7171 func _loadInit () = match getBoolean(KEY_INIT) {
7272 case a: Boolean =>
7373 a
7474 case _ =>
7575 false
7676 }
7777
7878
7979 func _saveInit (isInit_) = [BooleanEntry(KEY_INIT, isInit_)]
8080
8181
8282 func _loadPause () = match getBoolean(KEY_PAUSED) {
8383 case a: Boolean =>
8484 a
8585 case _ =>
8686 false
8787 }
8888
8989
9090 func _savePause (isPaused_) = [BooleanEntry(KEY_PAUSED, isPaused_)]
9191
9292
9393 func _loadPauser () = match getString(KEY_PAUSER) {
9494 case a: String =>
9595 addressFromStringValue(a)
9696 case _ =>
9797 Address(base58'')
9898 }
9999
100100
101101 func _savePauser (pauser_) = [StringEntry(KEY_PAUSER, toString(pauser_))]
102102
103103
104104 func _loadMultisig () = match getString(KEY_MULTISIG) {
105105 case a: String =>
106106 addressFromStringValue(a)
107107 case _ =>
108108 Address(base58'')
109109 }
110110
111111
112112 func _saveMultisig (multisig_) = [StringEntry(KEY_MULTISIG, toString(multisig_))]
113113
114114
115115 func _loadCallerContract (chainId_) = match getString(makeString([KEY_CALLER_CONTRACT, toString(chainId_)], SEPARATOR)) {
116116 case a: String =>
117117 a
118118 case _ =>
119119 ""
120120 }
121121
122122
123123 func _saveCallerContract (chainId_,callerContract_) = [StringEntry(makeString([KEY_CALLER_CONTRACT, toString(chainId_)], SEPARATOR), callerContract_)]
124124
125125
126126 func _loadExecutor () = match getString(KEY_EXECUTOR) {
127127 case a: String =>
128128 addressFromStringValue(a)
129129 case _ =>
130130 Address(base58'')
131131 }
132132
133133
134134 func _saveExecutor (executor_) = [StringEntry(KEY_EXECUTOR, toString(executor_))]
135135
136136
137137 func _loadAccountStorage () = match getString(KEY_ACCOUNT_STORAGE) {
138138 case a: String =>
139139 addressFromStringValue(a)
140140 case _ =>
141141 Address(base58'')
142142 }
143143
144144
145145 func _saveAccountStorage (accountStorage_) = [StringEntry(KEY_ACCOUNT_STORAGE, toString(accountStorage_))]
146146
147147
148148 func _loadWavesVault () = match getString(KEY_WAVES_VAULT) {
149149 case a: String =>
150150 addressFromStringValue(a)
151151 case _ =>
152152 Address(base58'')
153153 }
154154
155155
156156 func _saveWavesVault (wavesVault_) = [StringEntry(KEY_WAVES_VAULT, toString(wavesVault_))]
157157
158158
159159 func _loadChain (chainId_) = match getString(makeString([KEY_CHAIN, toString(chainId_)], SEPARATOR)) {
160160 case a: String =>
161161 a
162162 case _ =>
163163 ""
164164 }
165165
166166
167167 func _saveChain (chainId_,name_) = [StringEntry(makeString([KEY_CHAIN, toString(chainId_)], SEPARATOR), name_)]
168168
169169
170170 func _loadAssetTicker (chainId_,asset_) = match getString(makeString([KEY_ASSET_TICKER, toString(chainId_), asset_], SEPARATOR)) {
171171 case a: String =>
172172 a
173173 case _ =>
174174 ""
175175 }
176176
177177
178178 func _saveAssetTicker (chainId_,asset_,ticker_) = [StringEntry(makeString([KEY_ASSET_TICKER, toString(chainId_), asset_], SEPARATOR), ticker_)]
179179
180180
181181 func _loadAssetReserves (chainId_,asset_) = match getString(makeString([KEY_ASSET_RESERVES, toString(chainId_), asset_], SEPARATOR)) {
182182 case a: String =>
183183 parseBigIntValue(a)
184184 case _ =>
185185 ZERO_BIGINT
186186 }
187187
188188
189189 func _saveAssetReserves (chainId_,asset_,reserves_) = [StringEntry(makeString([KEY_ASSET_RESERVES, toString(chainId_), asset_], SEPARATOR), toString(reserves_))]
190190
191191
192192 func _loadTickerReserves (ticker_) = match getString(makeString([KEY_TICKER_RESERVES, ticker_], SEPARATOR)) {
193193 case a: String =>
194194 parseBigIntValue(a)
195195 case _ =>
196196 ZERO_BIGINT
197197 }
198198
199199
200200 func _saveTickerReserves (ticker_,reserves_) = [StringEntry(makeString([KEY_TICKER_RESERVES, ticker_], SEPARATOR), toString(reserves_))]
201201
202202
203203 func _onlyThisContract (caller_) = if ((caller_ != this))
204204 then throw("_onlyThisContract: revert")
205205 else true
206206
207207
208208 func _whenMultisigSet () = if ((_loadMultisig() == Address(base58'')))
209209 then throw("_whenMultisigSet: revert")
210210 else true
211211
212212
213213 func _whenNotInitialized () = if (_loadInit())
214214 then throw("_whenNotInitialized: revert")
215215 else true
216216
217217
218218 func _whenInitialized () = if (!(_loadInit()))
219219 then throw("_whenInitialized: revert")
220220 else true
221221
222222
223223 func _whenNotPaused () = if (_loadPause())
224224 then throw("_whenNotPaused: revert")
225225 else true
226226
227227
228228 func _whenPaused () = if (!(_loadPause()))
229229 then throw("_whenPaused: revert")
230230 else true
231231
232232
233233 func _onlyPauser (caller_) = if ((caller_ != _loadPauser()))
234234 then throw("_onlyPauser: revert")
235235 else true
236236
237237
238238 func _validateExecutor (val_,err_) = if ((val_ != _loadExecutor()))
239239 then throw(err_)
240240 else true
241241
242242
243243 func _validateCallerContract (chainId_,callerContract_,err_) = if ((_loadCallerContract(chainId_) != callerContract_))
244244 then throw(err_)
245245 else true
246246
247247
248248 func _chainExists (chainId_,err_) = if ((0 >= size(_loadChain(chainId_))))
249249 then throw(err_)
250250 else true
251251
252252
253+func _chainNotExist (chainId_,err_) = if ((size(_loadChain(chainId_)) > 0))
254+ then throw(err_)
255+ else true
256+
257+
253258 func _assetTickerExists (chainId_,asset_,err_) = if ((0 >= size(_loadAssetTicker(chainId_, asset_))))
259+ then throw(err_)
260+ else true
261+
262+
263+func _assetTickerNotExist (chainId_,asset_,err_) = if ((size(_loadAssetTicker(chainId_, asset_)) > 0))
254264 then throw(err_)
255265 else true
256266
257267
258268 func _validateWavesVault (caller,err_) = if ((_loadWavesVault() != caller))
259269 then throw(err_)
260270 else true
261271
262272
263273 @Callable(i)
264274 func init (executor_,pauser_,accountStorage_,wavesVault_) = {
265275 let err = if (if (if (if (if (if (_onlyThisContract(i.caller))
266276 then _whenNotInitialized()
267277 else false)
268278 then _whenMultisigSet()
269279 else false)
270280 then _validateAddress(executor_, "init: invalid executor")
271281 else false)
272282 then _validateAddress(pauser_, "init: invalid pauser")
273283 else false)
274284 then _validateAddress(accountStorage_, "init: invalid accountStorage")
275285 else false)
276286 then _validateAddress(wavesVault_, "init: invalid wavesVault")
277287 else false
278288 if ((err == err))
279289 then $Tuple2(((((_saveInit(true) ++ _saveExecutor(addressFromStringValue(executor_))) ++ _savePauser(addressFromStringValue(pauser_))) ++ _saveAccountStorage(addressFromStringValue(accountStorage_))) ++ _saveWavesVault(addressFromStringValue(wavesVault_))), unit)
280290 else throw("Strict value is not equal to itself.")
281291 }
282292
283293
284294
285295 @Callable(i)
286296 func deposit (callerContract_,from_,to_,chainId_,asset_,amount_) = {
287297 let chainId = valueOrErrorMessage(parseInt(chainId_), "deposit: chainId not int")
288298 let amount = valueOrErrorMessage(parseBigInt(amount_), "deposit: amount not int")
289299 let err = if (if (if (if (if (if (_whenInitialized())
290300 then _whenNotPaused()
291301 else false)
292302 then _chainExists(chainId, "deposit: invalid chainId")
293303 else false)
294304 then _validateString(from_, "deposit: invalid from")
295305 else false)
296306 then _validateString(to_, "deposit: invalid to")
297307 else false)
298308 then _assetTickerExists(chainId, asset_, "deposit: invalid asset")
299309 else false)
300310 then _validateBigInt(amount, ZERO_BIGINT, "deposit: invalid amount")
301311 else false
302312 if ((err == err))
303313 then {
304314 let err1 = if ((_loadChain(chainId) == WAVES))
305315 then _validateWavesVault(i.caller, "deposit: invalid waves vault")
306316 else if (_validateExecutor(i.caller, "deposit: invalid executor"))
307317 then _validateCallerContract(chainId, callerContract_, "deposit: invalid caller contract")
308318 else false
309319 if ((err1 == err1))
310320 then {
311321 let newAssetReserves = (_loadAssetReserves(chainId, asset_) + amount)
312322 let ticker = _loadAssetTicker(chainId, asset_)
313323 let newTickerReserves = (_loadTickerReserves(ticker) + amount)
314324 let invocation = invoke(_loadAccountStorage(), FUNC_DEPOSIT, [to_, SPOT_WALLET, ticker, amount_], nil)
315325 if ((invocation == invocation))
316326 then $Tuple2((_saveAssetReserves(chainId, asset_, newAssetReserves) ++ _saveTickerReserves(ticker, newTickerReserves)), unit)
317327 else throw("Strict value is not equal to itself.")
318328 }
319329 else throw("Strict value is not equal to itself.")
320330 }
321331 else throw("Strict value is not equal to itself.")
322332 }
323333
324334
325335
326336 @Callable(i)
327337 func withdraw (from_,to_,chainId_,asset_,amount_,timestamp_,signature_) = $Tuple2(nil, unit)
328338
329339
330340
331341 @Callable(i)
332342 func requestWithdrawal (from_,to_,chainId_,asset_,amount_,signature_) = $Tuple2(nil, unit)
333343
334344
335345
336346 @Callable(i)
337347 func executeWithdrawal (from_,to_,chainId_,asset_,amount_,signature_) = $Tuple2(nil, unit)
338348
339349
340350
341351 @Callable(i)
342352 func addChain (chainId_,name_,callerContract_) = {
343353 let err = if (if (if (if (if (_onlyThisContract(i.caller))
344354 then _whenInitialized()
345355 else false)
346356 then _validateInt(chainId_, 0, MAX_INT, "addChain: invalid chainId")
347357 else false)
348358 then _validateString(name_, "addChain: invalid name")
349359 else false)
350360 then _validateString(callerContract_, "addChain: invalid callerContract")
351361 else false)
352- then !(_chainExists(chainId_, "addChain: already exists"))
362+ then _chainNotExist(chainId_, "addChain: already exists")
353363 else false
354364 if ((err == err))
355365 then $Tuple2((_saveChain(chainId_, name_) ++ _saveCallerContract(chainId_, callerContract_)), unit)
356366 else throw("Strict value is not equal to itself.")
357367 }
358368
359369
360370
361371 @Callable(i)
362372 func addAsset (chainId_,asset_,ticker_) = {
363373 let err = if (if (if (if (if (_onlyThisContract(i.caller))
364374 then _whenInitialized()
365375 else false)
366376 then _chainExists(chainId_, "addAsset: invalid chainId")
367377 else false)
368378 then _validateString(asset_, "addAsset: invalid asset")
369379 else false)
370380 then _validateString(ticker_, "addAsset: invalid ticker")
371381 else false)
372- then !(_assetTickerExists(chainId_, asset_, "addAsset: already exists"))
382+ then _assetTickerNotExist(chainId_, asset_, "addAsset: already exists")
373383 else false
374384 if ((err == err))
375385 then $Tuple2(_saveAssetTicker(chainId_, asset_, ticker_), unit)
376386 else throw("Strict value is not equal to itself.")
377387 }
378388
379389
380390
381391 @Callable(i)
382392 func pause () = {
383393 let err = if (if (_onlyPauser(i.caller))
384394 then _whenInitialized()
385395 else false)
386396 then _whenNotPaused()
387397 else false
388398 if ((err == err))
389399 then $Tuple2(_savePause(true), unit)
390400 else throw("Strict value is not equal to itself.")
391401 }
392402
393403
394404
395405 @Callable(i)
396406 func unpause () = {
397407 let err = if (if (_onlyPauser(i.caller))
398408 then _whenInitialized()
399409 else false)
400410 then _whenPaused()
401411 else false
402412 if ((err == err))
403413 then $Tuple2(_savePause(false), unit)
404414 else throw("Strict value is not equal to itself.")
405415 }
406416
407417
408418
409419 @Callable(i)
410420 func updatePauser (pauser_) = {
411421 let err = if (if (_onlyThisContract(i.caller))
412422 then _whenInitialized()
413423 else false)
414424 then _validateAddress(pauser_, "updatePauser: invalid pauser")
415425 else false
416426 if ((err == err))
417427 then $Tuple2(_savePauser(addressFromStringValue(pauser_)), unit)
418428 else throw("Strict value is not equal to itself.")
419429 }
420430
421431
422432
423433 @Callable(i)
424434 func setMultisig (multisig_) = {
425435 let err = if (_onlyThisContract(i.caller))
426436 then _validateAddress(multisig_, "setMultisig: invalid multisig")
427437 else false
428438 if ((err == err))
429439 then $Tuple2(_saveMultisig(addressFromStringValue(multisig_)), unit)
430440 else throw("Strict value is not equal to itself.")
431441 }
432442
433443
434444 @Verifier(tx)
435445 func verify () = match getString(KEY_MULTISIG) {
436446 case multisig: String =>
437447 valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false)
438448 case _ =>
439449 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
440450 }
441451

github/deemru/w8io/3ef1775 
58.05 ms