tx · Ben3kgAXbXqQe9uc7Qq16u8tebBuwJw561LRWV6SB6oa 3N4ziXSMRverXyxHDUKKMR9MHXnB3TyU3Yh: -0.01000000 Waves 2023.05.19 09:26 [2584471] smart account 3N4ziXSMRverXyxHDUKKMR9MHXnB3TyU3Yh > SELF 0.00000000 Waves
{ "type": 13, "id": "Ben3kgAXbXqQe9uc7Qq16u8tebBuwJw561LRWV6SB6oa", "fee": 1000000, "feeAssetId": null, "timestamp": 1684477668689, "version": 2, "chainId": 84, "sender": "3N4ziXSMRverXyxHDUKKMR9MHXnB3TyU3Yh", "senderPublicKey": "EU9obW1yVhR8qug3EmXPeew3DMagvJFQzY5Ku8bmcsU7", "proofs": [ "3rJfETbftuvSqyHisJd3tEnXrjvhLmSXDqvYF8WmtKs8JrPi8otV919RbcYbFcL5qZXAyxb5oLBgLJ1F9jFmauaH" ], "script": "base64:BgIbCAISBwoFCAgBAQESABIDCgEBEgASAwoBARIAHAAJc2VwYXJhdG9yAgJfXwAQY29udHJhY3RGaWxlbmFtZQIZdm90aW5nX2VtaXNzaW9uX3JhdGUucmlkZQAOa2V5RXBvY2hMZW5ndGgJALkJAgkAzAgCAgIlcwkAzAgCAgtlcG9jaExlbmd0aAUDbmlsBQlzZXBhcmF0b3IAE2tleUVtaXNzaW9uQ29udHJhY3QJALkJAgkAzAgCAgIlcwkAzAgCAhBlbWlzc2lvbkNvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgATa2V5Qm9vc3RpbmdDb250cmFjdAkAuQkCCQDMCAICAiVzCQDMCAICEGJvb3N0aW5nQ29udHJhY3QFA25pbAUJc2VwYXJhdG9yAAxrZXlUaHJlc2hvbGQJALkJAgkAzAgCAgIlcwkAzAgCAg92b3RpbmdUaHJlc2hvbGQFA25pbAUJc2VwYXJhdG9yAA9rZXlSYXRlUGVyQmxvY2sJALkJAgkAzAgCAgQlcyVzCQDMCAICDHJhdGVQZXJCbG9jawkAzAgCAgdjdXJyZW50BQNuaWwFCXNlcGFyYXRvcgASa2V5UmF0ZVBlckJsb2NrTWF4CQC5CQIJAMwIAgIEJXMlcwkAzAgCAg9yYXRlUGVyQmxvY2tNYXgJAMwIAgIHY3VycmVudAUDbmlsBQlzZXBhcmF0b3IAEWtleVJhdGVDaGFuZ2VTdGVwCQC5CQIJAMwIAgICJXMJAMwIAgIOcmF0ZUNoYW5nZVN0ZXAFA25pbAUJc2VwYXJhdG9yAA5rZXlTdGFydEhlaWdodAkAuQkCCQDMCAICAiVzCQDMCAICC3N0YXJ0SGVpZ2h0BQNuaWwFCXNlcGFyYXRvcgAPa2V5Vm90aW5nUmVzdWx0CQC5CQIJAMwIAgICJXMJAMwIAgIMdm90aW5nUmVzdWx0BQNuaWwFCXNlcGFyYXRvcgEIdGhyb3dFcnIBAXMJAAIBCQCsAgIJAKwCAgUQY29udHJhY3RGaWxlbmFtZQICOiAFAXMBD2dldFN0cmluZ09yRmFpbAEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUDa2V5CQCsAgIFA2tleQIPIGlzIG5vdCBkZWZpbmVkAQxnZXRJbnRPckZhaWwBA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFA2tleQkArAICBQNrZXkCDyBpcyBub3QgZGVmaW5lZAEKdG90YWxWb3RlcwMNdG90YWxJbmNyZWFzZQx0b3RhbEN1cnJlbnQNdG90YWxEZWNyZWFzZQkAuQkCCQDMCAICBiVkJWQlZAkAzAgCBQ10b3RhbEluY3JlYXNlCQDMCAIFDHRvdGFsQ3VycmVudAkAzAgCBQ10b3RhbERlY3JlYXNlBQNuaWwFCXNlcGFyYXRvcgEHa2V5Vm90ZQIMdm90ZXJBZGRyZXNzC3N0YXJ0SGVpZ2h0CQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICBHZvdGUJAMwIAgUMdm90ZXJBZGRyZXNzCQDMCAIJAKQDAQULc3RhcnRIZWlnaHQFA25pbAUJc2VwYXJhdG9yAQxrZXlWb3RlVmFsdWUCCWd3eEFtb3VudAR2b3RlBANrZXkDCQAAAgUEdm90ZQABCQC5CQIJAMwIAgIEJWQlcwkAzAgCBQlnd3hBbW91bnQJAMwIAgIIaW5jcmVhc2UFA25pbAUJc2VwYXJhdG9yAwkAAAIFBHZvdGUA////////////AQkAuQkCCQDMCAICBCVkJXMJAMwIAgUJZ3d4QW1vdW50CQDMCAICCGRlY3JlYXNlBQNuaWwFCXNlcGFyYXRvcgkAuQkCCQDMCAICBCVkJXMJAMwIAgUJZ3d4QW1vdW50CQDMCAICB2N1cnJlbnQFA25pbAUJc2VwYXJhdG9yBQNrZXkAEGJvb3N0aW5nQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQ9nZXRTdHJpbmdPckZhaWwBBRNrZXlCb29zdGluZ0NvbnRyYWN0ABBlbWlzc2lvbkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQEPZ2V0U3RyaW5nT3JGYWlsAQUTa2V5RW1pc3Npb25Db250cmFjdAETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAIXJXNfX21hbmFnZXJWYXVsdEFkZHJlc3MBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCiCAEJARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAXMFBHRoaXMBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABBNtYW5hZ2VyVmF1bHRBZGRyZXNzCQEcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcwAEByRtYXRjaDAJAJ0IAgUTbWFuYWdlclZhdWx0QWRkcmVzcwkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEJaXNNYW5hZ2VyAQFpBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkDCQEJaXNNYW5hZ2VyAQUBaQYJAQh0aHJvd0VycgECEXBlcm1pc3Npb24gZGVuaWVkAQVhc0ludAEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIDSW50BAZ2YWxJbnQFByRtYXRjaDAFBnZhbEludAkBCHRocm93RXJyAQIbZmFpbGVkIHRvIGNhc3QgaW50byBJbnRlZ2VyAQtjYWxjTmV3UmF0ZQMPcmF0ZVBlckJsb2NrTWF4DHJhdGVQZXJCbG9jawpjaGFuZ2VTdGVwBAptYXhBbGxvd2VkCQBrAwBkBQ9yYXRlUGVyQmxvY2tNYXgAeAQNaW5jcmVhc2VkUmF0ZQkAlwMBCQDMCAIJAGsDCQBkAgBkBQpjaGFuZ2VTdGVwBQxyYXRlUGVyQmxvY2sAZAkAzAgCBQptYXhBbGxvd2VkBQNuaWwEDWRlY3JlYXNlZFJhdGUJAJYDAQkAzAgCCQBrAwkAZQIAZAUKY2hhbmdlU3RlcAUMcmF0ZVBlckJsb2NrAGQJAMwIAgAABQNuaWwJAJUKAwUNaW5jcmVhc2VkUmF0ZQUMcmF0ZVBlckJsb2NrBQ1kZWNyZWFzZWRSYXRlARxnZXRSYXRlQ2hhbmdlQW1vdW50c0lOVEVSTkFMAAQPcmF0ZVBlckJsb2NrTWF4CQERQGV4dHJOYXRpdmUoMTA1MCkCBRBlbWlzc2lvbkNvbnRyYWN0BRJrZXlSYXRlUGVyQmxvY2tNYXgEDHJhdGVQZXJCbG9jawkBEUBleHRyTmF0aXZlKDEwNTApAgUQZW1pc3Npb25Db250cmFjdAUPa2V5UmF0ZVBlckJsb2NrBA5yYXRlQ2hhbmdlU3RlcAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwURa2V5UmF0ZUNoYW5nZVN0ZXAJAQtjYWxjTmV3UmF0ZQMFD3JhdGVQZXJCbG9ja01heAUMcmF0ZVBlckJsb2NrBQ5yYXRlQ2hhbmdlU3RlcAYBaQELY29uc3RydWN0b3IFE2Jvb3N0aW5nQ29udHJhY3RQcm0TZW1pc3Npb25Db250cmFjdFBybRF2b3RpbmdEdXJhdGlvblBybQl0aHJlc2hvbGQOcmF0ZUNoYW5nZVN0ZXAEBmNoZWNrcwkAzAgCAwkBCWlzRGVmaW5lZAEJAKYIAQUTYm9vc3RpbmdDb250cmFjdFBybQYJAQh0aHJvd0VycgECIUludmFsaWQgYm9vc3RpbmcgY29udHJhY3QgYWRkcmVzcwkAzAgCAwkBCWlzRGVmaW5lZAEJAKYIAQUTZW1pc3Npb25Db250cmFjdFBybQYJAQh0aHJvd0VycgECIUludmFsaWQgZW1pc3Npb24gY29udHJhY3QgYWRkcmVzcwkAzAgCAwkAZgIFEXZvdGluZ0R1cmF0aW9uUHJtAAAGCQEIdGhyb3dFcnIBAhdJbnZhbGlkIHZvdGluZyBkdXJhdGlvbgkAzAgCAwkAZgIFCXRocmVzaG9sZAAABgkBCHRocm93RXJyAQIRaW52YWxpZCB0aHJlc2hvbGQJAMwIAgMJAGYCBQ5yYXRlQ2hhbmdlU3RlcAAABgkBCHRocm93RXJyAQIWaW52YWxpZCByYXRlQ2hhbmdlU3RlcAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUTa2V5Qm9vc3RpbmdDb250cmFjdAUTYm9vc3RpbmdDb250cmFjdFBybQkAzAgCCQELU3RyaW5nRW50cnkCBRNrZXlFbWlzc2lvbkNvbnRyYWN0BRNlbWlzc2lvbkNvbnRyYWN0UHJtCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rZXlFcG9jaExlbmd0aAURdm90aW5nRHVyYXRpb25Qcm0JAMwIAgkBDEludGVnZXJFbnRyeQIFDGtleVRocmVzaG9sZAUJdGhyZXNob2xkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrZXlSYXRlQ2hhbmdlU3RlcAUOcmF0ZUNoYW5nZVN0ZXAJAMwIAgkBDEludGVnZXJFbnRyeQIFDmtleVN0YXJ0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgUPa2V5Vm90aW5nUmVzdWx0CQEKdG90YWxWb3RlcwMCATACATACATAFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARxnZXRSYXRlQ2hhbmdlQW1vdW50c1JFQURPTkxZAAkAlAoCBQNuaWwJARxnZXRSYXRlQ2hhbmdlQW1vdW50c0lOVEVSTkFMAAFpAQR2b3RlAQdpbkZhdm9yBAtzdGFydEhlaWdodAkBEUBleHRyTmF0aXZlKDEwNTUpAQUOa2V5U3RhcnRIZWlnaHQEEnZvdGluZ0ZpbmlzaEhlaWdodAkAZAIFC3N0YXJ0SGVpZ2h0CQEFdmFsdWUBCQCfCAEFDmtleUVwb2NoTGVuZ3RoBAZjaGVja3MJAMwIAgMJAGYCBRJ2b3RpbmdGaW5pc2hIZWlnaHQFBmhlaWdodAYJAQh0aHJvd0VycgECEHRvbyBsYXRlIHRvIHZvdGUJAMwIAgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIAAQkAzAgCAAAJAMwIAgD///////////8BBQNuaWwFB2luRmF2b3IGCQEIdGhyb3dFcnIBAhJub3QgdmFsaWQgYXJndW1lbnQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQJZ3d4QW1vdW50CQD8BwQFEGJvb3N0aW5nQ29udHJhY3QCIGdldFVzZXJHd3hBbW91bnRBdEhlaWdodFJFQURPTkxZCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFEnZvdGluZ0ZpbmlzaEhlaWdodAUDbmlsBQNuaWwEB25vdFplcm8DCQBmAgkBBWFzSW50AQUJZ3d4QW1vdW50AAAGCQEIdGhyb3dFcnIBAhJ5b3UgZG9uJ3QgaGF2ZSBnd3gDCQAAAgUHbm90WmVybwUHbm90WmVybwQEdm90ZQQHJG1hdGNoMAkAoggBCQEHa2V5Vm90ZQIJAKUIAQgFAWkGY2FsbGVyBQtzdGFydEhlaWdodAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAEBHZvdGUJALUJAgUBcwUJc2VwYXJhdG9yBAl2b3RlVmFsdWUJAJEDAgUEdm90ZQABBAh2b3RlVHlwZQkAkQMCBQR2b3RlAAIEEWlzVm90ZVR5cGVTaW1pbGFyAwMDCQAAAgUIdm90ZVR5cGUCCGluY3JlYXNlCQAAAgUHaW5GYXZvcgABBwYDCQAAAgUIdm90ZVR5cGUCCGRlY3JlYXNlCQAAAgUHaW5GYXZvcgD///////////8BBwYDCQAAAgUIdm90ZVR5cGUCB2N1cnJlbnQJAAACBQdpbkZhdm9yAAAHBBJpc1ZvdGVWYWx1ZVNpbWlsYXIDBRFpc1ZvdGVUeXBlU2ltaWxhcgkAAAIJAQVhc0ludAEFCWd3eEFtb3VudAkBDXBhcnNlSW50VmFsdWUBBQl2b3RlVmFsdWUHBBBpc05ld1ZvdGVTaW1pbGFyAwMFEWlzVm90ZVR5cGVTaW1pbGFyBRJpc1ZvdGVWYWx1ZVNpbWlsYXIHCQEIdGhyb3dFcnIBAhF5b3UgYWxyZWFkeSB2b3RlZAkA/AcEBQR0aGlzAgpjYW5jZWxWb3RlBQNuaWwFA25pbAUQaXNOZXdWb3RlU2ltaWxhcgMJAAECBQckbWF0Y2gwAgRVbml0BAF1BQckbWF0Y2gwBQF1CQACAQILTWF0Y2ggZXJyb3IDCQAAAgUEdm90ZQUEdm90ZQQMdm90aW5nUmVzdWx0CQC1CQIJARFAZXh0ck5hdGl2ZSgxMDU4KQEFD2tleVZvdGluZ1Jlc3VsdAUJc2VwYXJhdG9yBBB2b3Rlc0ZvckluY3JlYXNlCQCRAwIFDHZvdGluZ1Jlc3VsdAABBA92b3Rlc0ZvckN1cnJlbnQJAJEDAgUMdm90aW5nUmVzdWx0AAIEEHZvdGVzRm9yRGVjcmVhc2UJAJEDAgUMdm90aW5nUmVzdWx0AAMEG25ld1Bvc2l0aXZlQW5kTmVnYXRpdmVWb3RlcwMJAAACBQdpbkZhdm9yAAEEEG5ld1Bvc2l0aXZlVm90ZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEFEHZvdGVzRm9ySW5jcmVhc2UJAQVhc0ludAEFCWd3eEFtb3VudAkAzAgCCQCkAwEFEG5ld1Bvc2l0aXZlVm90ZXMJAMwIAgUPdm90ZXNGb3JDdXJyZW50CQDMCAIFEHZvdGVzRm9yRGVjcmVhc2UFA25pbAMJAAACBQdpbkZhdm9yAP///////////wEEEG5ld05lZ2F0aXZlVm90ZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEFD3ZvdGVzRm9yQ3VycmVudAkBBWFzSW50AQUJZ3d4QW1vdW50CQDMCAIFEHZvdGVzRm9ySW5jcmVhc2UJAMwIAgUPdm90ZXNGb3JDdXJyZW50CQDMCAIJAKQDAQUQbmV3TmVnYXRpdmVWb3RlcwUDbmlsBA9uZXdDdXJyZW50Vm90ZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEFD3ZvdGVzRm9yQ3VycmVudAkBBWFzSW50AQUJZ3d4QW1vdW50CQDMCAIFEHZvdGVzRm9ySW5jcmVhc2UJAMwIAgkApAMBBQ9uZXdDdXJyZW50Vm90ZXMJAMwIAgUQdm90ZXNGb3JEZWNyZWFzZQUDbmlsBAd2b3RlS2V5CQEHa2V5Vm90ZQIJAKUIAQgFAWkGY2FsbGVyBQtzdGFydEhlaWdodAQJdm90ZVZhbHVlCQEMa2V5Vm90ZVZhbHVlAgkApAMBCQEFYXNJbnQBBQlnd3hBbW91bnQFB2luRmF2b3IJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQ9rZXlWb3RpbmdSZXN1bHQJAQp0b3RhbFZvdGVzAwkAkQMCBRtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAAkAkQMCBRtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAQkAkQMCBRtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAgkAzAgCCQELU3RyaW5nRW50cnkCBQd2b3RlS2V5BQl2b3RlVmFsdWUFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpjYW5jZWxWb3RlAAQLc3RhcnRIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDU1KQEFDmtleVN0YXJ0SGVpZ2h0BAt1c2VyQWRkcmVzcwMJAAACCAUBaQZjYWxsZXIFBHRoaXMJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQClCAEIBQFpBmNhbGxlcgQGY2hlY2tzCQDMCAIDCQEJaXNEZWZpbmVkAQkAoggBBQ9rZXlWb3RpbmdSZXN1bHQGCQEIdGhyb3dFcnIBAgdubyB2b3RlCQDMCAIDCQEJaXNEZWZpbmVkAQkAoggBCQEHa2V5Vm90ZQIFC3VzZXJBZGRyZXNzBQtzdGFydEhlaWdodAYJAQh0aHJvd0VycgECDG5vIHVzZXIgdm90ZQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAR2b3RlCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAQdrZXlWb3RlAgULdXNlckFkZHJlc3MFC3N0YXJ0SGVpZ2h0BQlzZXBhcmF0b3IECXZvdGVWYWx1ZQkAkQMCBQR2b3RlAAEECHZvdGVUeXBlCQCRAwIFBHZvdGUAAgQMdm90aW5nUmVzdWx0CQC1CQIJARFAZXh0ck5hdGl2ZSgxMDU4KQEFD2tleVZvdGluZ1Jlc3VsdAUJc2VwYXJhdG9yBBB2b3Rlc0ZvckluY3JlYXNlCQCRAwIFDHZvdGluZ1Jlc3VsdAABBA92b3Rlc0ZvckN1cnJlbnQJAJEDAgUMdm90aW5nUmVzdWx0AAIEEHZvdGVzRm9yRGVjcmVhc2UJAJEDAgUMdm90aW5nUmVzdWx0AAMEB2FjdGlvbnMDCQAAAgUIdm90ZVR5cGUCCGluY3JlYXNlBBBuZXdJbmNyZWFzZVZvdGVzCQBlAgkBDXBhcnNlSW50VmFsdWUBBRB2b3Rlc0ZvckluY3JlYXNlCQENcGFyc2VJbnRWYWx1ZQEFCXZvdGVWYWx1ZQkAzAgCCQELU3RyaW5nRW50cnkCBQ9rZXlWb3RpbmdSZXN1bHQJAQp0b3RhbFZvdGVzAwkApAMBBRBuZXdJbmNyZWFzZVZvdGVzBQ92b3Rlc0ZvckN1cnJlbnQFEHZvdGVzRm9yRGVjcmVhc2UFA25pbAMJAAACBQh2b3RlVHlwZQIIZGVjcmVhc2UEEG5ld0RlY3JlYXNlVm90ZXMJAGUCCQENcGFyc2VJbnRWYWx1ZQEFEHZvdGVzRm9yRGVjcmVhc2UJAQ1wYXJzZUludFZhbHVlAQUJdm90ZVZhbHVlCQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tleVZvdGluZ1Jlc3VsdAkBCnRvdGFsVm90ZXMDBRB2b3Rlc0ZvckluY3JlYXNlBQ92b3Rlc0ZvckN1cnJlbnQJAKQDAQUQbmV3RGVjcmVhc2VWb3RlcwUDbmlsBA9uZXdDdXJyZW50Vm90ZXMJAGUCCQENcGFyc2VJbnRWYWx1ZQEFD3ZvdGVzRm9yQ3VycmVudAkBDXBhcnNlSW50VmFsdWUBBQl2b3RlVmFsdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgUPa2V5Vm90aW5nUmVzdWx0CQEKdG90YWxWb3RlcwMFEHZvdGVzRm9ySW5jcmVhc2UJAKQDAQUPbmV3Q3VycmVudFZvdGVzBRB2b3Rlc0ZvckRlY3JlYXNlBQNuaWwEDmRlZmF1bHRBY3Rpb25zCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlWb3RlAgULdXNlckFkZHJlc3MFC3N0YXJ0SGVpZ2h0BQNuaWwJAM4IAgUHYWN0aW9ucwUOZGVmYXVsdEFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMc2V0VGhyZXNob2xkAQxuZXdUaHJlc2hvbGQEBmNoZWNrcwkAzAgCCQELbXVzdE1hbmFnZXIBBQFpCQDMCAIDCQBmAgUMbmV3VGhyZXNob2xkAAAGCQEIdGhyb3dFcnIBAhFpbnZhbGlkIHRocmVzaG9sZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtleVRocmVzaG9sZAUMbmV3VGhyZXNob2xkBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIZmluYWxpemUABBJ2b3RpbmdGaW5pc2hIZWlnaHQJAGQCCQERQGV4dHJOYXRpdmUoMTA1NSkBBQ5rZXlTdGFydEhlaWdodAkBBXZhbHVlAQkAnwgBBQ5rZXlFcG9jaExlbmd0aAQGY2hlY2tzCQDMCAIDCQBnAgUGaGVpZ2h0BRJ2b3RpbmdGaW5pc2hIZWlnaHQGCQEIdGhyb3dFcnIBAiJpbnN1ZmZpY2llbnQgaGVpZ2h0IGZvciBjb21wbGV0aW9uBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDHZvdGluZ1Jlc3VsdAkAtQkCCQEFdmFsdWUBCQCiCAEFD2tleVZvdGluZ1Jlc3VsdAUJc2VwYXJhdG9yBBB2b3Rlc0ZvckluY3JlYXNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMdm90aW5nUmVzdWx0AAEED3ZvdGVzRm9yQ3VycmVudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDHZvdGluZ1Jlc3VsdAACBBB2b3Rlc0ZvckRlY3JlYXNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMdm90aW5nUmVzdWx0AAMECGFsbFZvdGVzCQBkAgkAZAIFEHZvdGVzRm9ySW5jcmVhc2UFD3ZvdGVzRm9yQ3VycmVudAUQdm90ZXNGb3JEZWNyZWFzZQQJdGhyZXNob2xkCQEMZ2V0SW50T3JGYWlsAQUMa2V5VGhyZXNob2xkBAskdDA5MzE4OTM5OAkBHGdldFJhdGVDaGFuZ2VBbW91bnRzSU5URVJOQUwABA1pbmNyZWFzZWRSYXRlCAULJHQwOTMxODkzOTgCXzEEC2N1cnJlbnRSYXRlCAULJHQwOTMxODkzOTgCXzIEDWRlY3JlYXNlZFJhdGUIBQskdDA5MzE4OTM5OAJfMwQJdm90ZXNMaXN0CQDMCAIFEHZvdGVzRm9ySW5jcmVhc2UJAMwIAgUPdm90ZXNGb3JDdXJyZW50CQDMCAIFEHZvdGVzRm9yRGVjcmVhc2UFA25pbAQHbmV3UmF0ZQMDCQBmAgUJdGhyZXNob2xkBQhhbGxWb3RlcwYJAAACBQ92b3Rlc0ZvckN1cnJlbnQJAJYDAQUJdm90ZXNMaXN0BQR1bml0AwkAAAIFEHZvdGVzRm9ySW5jcmVhc2UJAJYDAQUJdm90ZXNMaXN0BQ1pbmNyZWFzZWRSYXRlBQ1kZWNyZWFzZWRSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rZXlTdGFydEhlaWdodAUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tleVZvdGluZ1Jlc3VsdAkBCnRvdGFsVm90ZXMDAgEwAgEwAgEwBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AUafReQ==", "height": 2584471, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: F4oAcLBWoAZZQbi34R7R99kog8qC8JARp3afVFSfNXyW Next: 2m2XsiApYTNCzQgh22k4Psu3ddHks28YbK3dncW4SYqr Diff:
Old | New | Differences | |
---|---|---|---|
319 | 319 | else if ((an == max(aE))) | |
320 | 320 | then U | |
321 | 321 | else V | |
322 | - | let aG = { | |
323 | - | let F = aF | |
324 | - | if ($isInstanceOf(F, "Int")) | |
325 | - | then { | |
326 | - | let aH = F | |
327 | - | invoke(B, "changeRatePerBlock", [aH], nil) | |
328 | - | } | |
329 | - | else unit | |
330 | - | } | |
331 | - | if ((aG == aG)) | |
332 | - | then [IntegerEntry(j, height), StringEntry(k, q("0", "0", "0"))] | |
333 | - | else throw("Strict value is not equal to itself.") | |
322 | + | [IntegerEntry(j, height), StringEntry(k, q("0", "0", "0"))] | |
334 | 323 | } | |
335 | 324 | else throw("Strict value is not equal to itself.") | |
336 | 325 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "__" | |
5 | 5 | ||
6 | 6 | let b = "voting_emission_rate.ride" | |
7 | 7 | ||
8 | 8 | let c = makeString(["%s", "epochLength"], a) | |
9 | 9 | ||
10 | 10 | let d = makeString(["%s", "emissionContract"], a) | |
11 | 11 | ||
12 | 12 | let e = makeString(["%s", "boostingContract"], a) | |
13 | 13 | ||
14 | 14 | let f = makeString(["%s", "votingThreshold"], a) | |
15 | 15 | ||
16 | 16 | let g = makeString(["%s%s", "ratePerBlock", "current"], a) | |
17 | 17 | ||
18 | 18 | let h = makeString(["%s%s", "ratePerBlockMax", "current"], a) | |
19 | 19 | ||
20 | 20 | let i = makeString(["%s", "rateChangeStep"], a) | |
21 | 21 | ||
22 | 22 | let j = makeString(["%s", "startHeight"], a) | |
23 | 23 | ||
24 | 24 | let k = makeString(["%s", "votingResult"], a) | |
25 | 25 | ||
26 | 26 | func l (m) = throw(((b + ": ") + m)) | |
27 | 27 | ||
28 | 28 | ||
29 | 29 | func n (o) = valueOrErrorMessage(getString(this, o), (o + " is not defined")) | |
30 | 30 | ||
31 | 31 | ||
32 | 32 | func p (o) = valueOrErrorMessage(getInteger(this, o), (o + " is not defined")) | |
33 | 33 | ||
34 | 34 | ||
35 | 35 | func q (r,s,t) = makeString(["%d%d%d", r, s, t], a) | |
36 | 36 | ||
37 | 37 | ||
38 | 38 | func u (v,w) = makeString(["%s%s%d", "vote", v, toString(w)], a) | |
39 | 39 | ||
40 | 40 | ||
41 | 41 | func x (y,z) = { | |
42 | 42 | let o = if ((z == 1)) | |
43 | 43 | then makeString(["%d%s", y, "increase"], a) | |
44 | 44 | else if ((z == -1)) | |
45 | 45 | then makeString(["%d%s", y, "decrease"], a) | |
46 | 46 | else makeString(["%d%s", y, "current"], a) | |
47 | 47 | o | |
48 | 48 | } | |
49 | 49 | ||
50 | 50 | ||
51 | 51 | let A = addressFromStringValue(n(e)) | |
52 | 52 | ||
53 | 53 | let B = addressFromStringValue(n(d)) | |
54 | 54 | ||
55 | 55 | func C () = "%s__managerPublicKey" | |
56 | 56 | ||
57 | 57 | ||
58 | 58 | func D () = "%s__managerVaultAddress" | |
59 | 59 | ||
60 | 60 | ||
61 | 61 | func E () = { | |
62 | 62 | let F = getString(D()) | |
63 | 63 | if ($isInstanceOf(F, "String")) | |
64 | 64 | then { | |
65 | 65 | let m = F | |
66 | 66 | addressFromStringValue(m) | |
67 | 67 | } | |
68 | 68 | else this | |
69 | 69 | } | |
70 | 70 | ||
71 | 71 | ||
72 | 72 | func G () = { | |
73 | 73 | let H = E() | |
74 | 74 | let F = getString(H, C()) | |
75 | 75 | if ($isInstanceOf(F, "String")) | |
76 | 76 | then { | |
77 | 77 | let m = F | |
78 | 78 | fromBase58String(m) | |
79 | 79 | } | |
80 | 80 | else if ($isInstanceOf(F, "Unit")) | |
81 | 81 | then unit | |
82 | 82 | else throw("Match error") | |
83 | 83 | } | |
84 | 84 | ||
85 | 85 | ||
86 | 86 | func I (J) = { | |
87 | 87 | let F = G() | |
88 | 88 | if ($isInstanceOf(F, "ByteVector")) | |
89 | 89 | then { | |
90 | 90 | let K = F | |
91 | 91 | (J.callerPublicKey == K) | |
92 | 92 | } | |
93 | 93 | else if ($isInstanceOf(F, "Unit")) | |
94 | 94 | then (J.caller == this) | |
95 | 95 | else throw("Match error") | |
96 | 96 | } | |
97 | 97 | ||
98 | 98 | ||
99 | 99 | func L (J) = if (I(J)) | |
100 | 100 | then true | |
101 | 101 | else l("permission denied") | |
102 | 102 | ||
103 | 103 | ||
104 | 104 | func M (N) = { | |
105 | 105 | let F = N | |
106 | 106 | if ($isInstanceOf(F, "Int")) | |
107 | 107 | then { | |
108 | 108 | let O = F | |
109 | 109 | O | |
110 | 110 | } | |
111 | 111 | else l("failed to cast into Integer") | |
112 | 112 | } | |
113 | 113 | ||
114 | 114 | ||
115 | 115 | func P (Q,R,S) = { | |
116 | 116 | let T = fraction(100, Q, 120) | |
117 | 117 | let U = min([fraction((100 + S), R, 100), T]) | |
118 | 118 | let V = max([fraction((100 - S), R, 100), 0]) | |
119 | 119 | $Tuple3(U, R, V) | |
120 | 120 | } | |
121 | 121 | ||
122 | 122 | ||
123 | 123 | func W () = { | |
124 | 124 | let Q = getIntegerValue(B, h) | |
125 | 125 | let R = getIntegerValue(B, g) | |
126 | 126 | let X = getIntegerValue(this, i) | |
127 | 127 | P(Q, R, X) | |
128 | 128 | } | |
129 | 129 | ||
130 | 130 | ||
131 | 131 | @Callable(J) | |
132 | 132 | func constructor (Y,Z,aa,ab,X) = { | |
133 | 133 | let ac = [if (isDefined(addressFromString(Y))) | |
134 | 134 | then true | |
135 | 135 | else l("Invalid boosting contract address"), if (isDefined(addressFromString(Z))) | |
136 | 136 | then true | |
137 | 137 | else l("Invalid emission contract address"), if ((aa > 0)) | |
138 | 138 | then true | |
139 | 139 | else l("Invalid voting duration"), if ((ab > 0)) | |
140 | 140 | then true | |
141 | 141 | else l("invalid threshold"), if ((X > 0)) | |
142 | 142 | then true | |
143 | 143 | else l("invalid rateChangeStep")] | |
144 | 144 | if ((ac == ac)) | |
145 | 145 | then $Tuple2([StringEntry(e, Y), StringEntry(d, Z), IntegerEntry(c, aa), IntegerEntry(f, ab), IntegerEntry(i, X), IntegerEntry(j, height), StringEntry(k, q("0", "0", "0"))], unit) | |
146 | 146 | else throw("Strict value is not equal to itself.") | |
147 | 147 | } | |
148 | 148 | ||
149 | 149 | ||
150 | 150 | ||
151 | 151 | @Callable(J) | |
152 | 152 | func getRateChangeAmountsREADONLY () = $Tuple2(nil, W()) | |
153 | 153 | ||
154 | 154 | ||
155 | 155 | ||
156 | 156 | @Callable(J) | |
157 | 157 | func vote (ad) = { | |
158 | 158 | let w = getIntegerValue(j) | |
159 | 159 | let ae = (w + value(getInteger(c))) | |
160 | 160 | let ac = [if ((ae > height)) | |
161 | 161 | then true | |
162 | 162 | else l("too late to vote"), if (containsElement([1, 0, -1], ad)) | |
163 | 163 | then true | |
164 | 164 | else l("not valid argument")] | |
165 | 165 | if ((ac == ac)) | |
166 | 166 | then { | |
167 | 167 | let y = invoke(A, "getUserGwxAmountAtHeightREADONLY", [toString(J.caller), ae], nil) | |
168 | 168 | let af = if ((M(y) > 0)) | |
169 | 169 | then true | |
170 | 170 | else l("you don't have gwx") | |
171 | 171 | if ((af == af)) | |
172 | 172 | then { | |
173 | 173 | let z = { | |
174 | 174 | let F = getString(u(toString(J.caller), w)) | |
175 | 175 | if ($isInstanceOf(F, "String")) | |
176 | 176 | then { | |
177 | 177 | let m = F | |
178 | 178 | let z = split(m, a) | |
179 | 179 | let ag = z[1] | |
180 | 180 | let ah = z[2] | |
181 | 181 | let ai = if (if (if ((ah == "increase")) | |
182 | 182 | then (ad == 1) | |
183 | 183 | else false) | |
184 | 184 | then true | |
185 | 185 | else if ((ah == "decrease")) | |
186 | 186 | then (ad == -1) | |
187 | 187 | else false) | |
188 | 188 | then true | |
189 | 189 | else if ((ah == "current")) | |
190 | 190 | then (ad == 0) | |
191 | 191 | else false | |
192 | 192 | let aj = if (ai) | |
193 | 193 | then (M(y) == parseIntValue(ag)) | |
194 | 194 | else false | |
195 | 195 | let ak = if (if (ai) | |
196 | 196 | then aj | |
197 | 197 | else false) | |
198 | 198 | then l("you already voted") | |
199 | 199 | else invoke(this, "cancelVote", nil, nil) | |
200 | 200 | ak | |
201 | 201 | } | |
202 | 202 | else if ($isInstanceOf(F, "Unit")) | |
203 | 203 | then { | |
204 | 204 | let al = F | |
205 | 205 | al | |
206 | 206 | } | |
207 | 207 | else throw("Match error") | |
208 | 208 | } | |
209 | 209 | if ((z == z)) | |
210 | 210 | then { | |
211 | 211 | let am = split(getStringValue(k), a) | |
212 | 212 | let an = am[1] | |
213 | 213 | let ao = am[2] | |
214 | 214 | let ap = am[3] | |
215 | 215 | let aq = if ((ad == 1)) | |
216 | 216 | then { | |
217 | 217 | let ar = (parseIntValue(an) + M(y)) | |
218 | 218 | [toString(ar), ao, ap] | |
219 | 219 | } | |
220 | 220 | else if ((ad == -1)) | |
221 | 221 | then { | |
222 | 222 | let as = (parseIntValue(ao) + M(y)) | |
223 | 223 | [an, ao, toString(as)] | |
224 | 224 | } | |
225 | 225 | else { | |
226 | 226 | let at = (parseIntValue(ao) + M(y)) | |
227 | 227 | [an, toString(at), ap] | |
228 | 228 | } | |
229 | 229 | let au = u(toString(J.caller), w) | |
230 | 230 | let ag = x(toString(M(y)), ad) | |
231 | 231 | $Tuple2([StringEntry(k, q(aq[0], aq[1], aq[2])), StringEntry(au, ag)], unit) | |
232 | 232 | } | |
233 | 233 | else throw("Strict value is not equal to itself.") | |
234 | 234 | } | |
235 | 235 | else throw("Strict value is not equal to itself.") | |
236 | 236 | } | |
237 | 237 | else throw("Strict value is not equal to itself.") | |
238 | 238 | } | |
239 | 239 | ||
240 | 240 | ||
241 | 241 | ||
242 | 242 | @Callable(J) | |
243 | 243 | func cancelVote () = { | |
244 | 244 | let w = getIntegerValue(j) | |
245 | 245 | let av = if ((J.caller == this)) | |
246 | 246 | then toString(J.originCaller) | |
247 | 247 | else toString(J.caller) | |
248 | 248 | let ac = [if (isDefined(getString(k))) | |
249 | 249 | then true | |
250 | 250 | else l("no vote"), if (isDefined(getString(u(av, w)))) | |
251 | 251 | then true | |
252 | 252 | else l("no user vote")] | |
253 | 253 | if ((ac == ac)) | |
254 | 254 | then { | |
255 | 255 | let z = split(getStringValue(u(av, w)), a) | |
256 | 256 | let ag = z[1] | |
257 | 257 | let ah = z[2] | |
258 | 258 | let am = split(getStringValue(k), a) | |
259 | 259 | let an = am[1] | |
260 | 260 | let ao = am[2] | |
261 | 261 | let ap = am[3] | |
262 | 262 | let aw = if ((ah == "increase")) | |
263 | 263 | then { | |
264 | 264 | let ax = (parseIntValue(an) - parseIntValue(ag)) | |
265 | 265 | [StringEntry(k, q(toString(ax), ao, ap))] | |
266 | 266 | } | |
267 | 267 | else if ((ah == "decrease")) | |
268 | 268 | then { | |
269 | 269 | let ay = (parseIntValue(ap) - parseIntValue(ag)) | |
270 | 270 | [StringEntry(k, q(an, ao, toString(ay)))] | |
271 | 271 | } | |
272 | 272 | else { | |
273 | 273 | let at = (parseIntValue(ao) - parseIntValue(ag)) | |
274 | 274 | [StringEntry(k, q(an, toString(at), ap))] | |
275 | 275 | } | |
276 | 276 | let az = [DeleteEntry(u(av, w))] | |
277 | 277 | (aw ++ az) | |
278 | 278 | } | |
279 | 279 | else throw("Strict value is not equal to itself.") | |
280 | 280 | } | |
281 | 281 | ||
282 | 282 | ||
283 | 283 | ||
284 | 284 | @Callable(J) | |
285 | 285 | func setThreshold (aA) = { | |
286 | 286 | let ac = [L(J), if ((aA > 0)) | |
287 | 287 | then true | |
288 | 288 | else l("invalid threshold")] | |
289 | 289 | if ((ac == ac)) | |
290 | 290 | then $Tuple2([IntegerEntry(f, aA)], unit) | |
291 | 291 | else throw("Strict value is not equal to itself.") | |
292 | 292 | } | |
293 | 293 | ||
294 | 294 | ||
295 | 295 | ||
296 | 296 | @Callable(J) | |
297 | 297 | func finalize () = { | |
298 | 298 | let ae = (getIntegerValue(j) + value(getInteger(c))) | |
299 | 299 | let ac = [if ((height >= ae)) | |
300 | 300 | then true | |
301 | 301 | else l("insufficient height for completion")] | |
302 | 302 | if ((ac == ac)) | |
303 | 303 | then { | |
304 | 304 | let am = split(value(getString(k)), a) | |
305 | 305 | let an = parseIntValue(am[1]) | |
306 | 306 | let ao = parseIntValue(am[2]) | |
307 | 307 | let ap = parseIntValue(am[3]) | |
308 | 308 | let aB = ((an + ao) + ap) | |
309 | 309 | let ab = p(f) | |
310 | 310 | let aC = W() | |
311 | 311 | let U = aC._1 | |
312 | 312 | let aD = aC._2 | |
313 | 313 | let V = aC._3 | |
314 | 314 | let aE = [an, ao, ap] | |
315 | 315 | let aF = if (if ((ab > aB)) | |
316 | 316 | then true | |
317 | 317 | else (ao == max(aE))) | |
318 | 318 | then unit | |
319 | 319 | else if ((an == max(aE))) | |
320 | 320 | then U | |
321 | 321 | else V | |
322 | - | let aG = { | |
323 | - | let F = aF | |
324 | - | if ($isInstanceOf(F, "Int")) | |
325 | - | then { | |
326 | - | let aH = F | |
327 | - | invoke(B, "changeRatePerBlock", [aH], nil) | |
328 | - | } | |
329 | - | else unit | |
330 | - | } | |
331 | - | if ((aG == aG)) | |
332 | - | then [IntegerEntry(j, height), StringEntry(k, q("0", "0", "0"))] | |
333 | - | else throw("Strict value is not equal to itself.") | |
322 | + | [IntegerEntry(j, height), StringEntry(k, q("0", "0", "0"))] | |
334 | 323 | } | |
335 | 324 | else throw("Strict value is not equal to itself.") | |
336 | 325 | } | |
337 | 326 | ||
338 | 327 |
github/deemru/w8io/169f3d6 38.79 ms ◑