tx · FjjNa3UMe9h27a92kHhpGZK44PKRQrb6AsKwZFQ2VSBt

3MuqubsQAq9mrsN65SePHeThcN3JVAbgZ9d:  -0.01500000 Waves

2023.06.01 09:31 [2603235] smart account 3MuqubsQAq9mrsN65SePHeThcN3JVAbgZ9d > SELF 0.00000000 Waves

{ "type": 13, "id": "FjjNa3UMe9h27a92kHhpGZK44PKRQrb6AsKwZFQ2VSBt", "fee": 1500000, "feeAssetId": null, "timestamp": 1685601201073, "version": 2, "chainId": 84, "sender": "3MuqubsQAq9mrsN65SePHeThcN3JVAbgZ9d", "senderPublicKey": "GWTozVWP9MvUxrEuz1BPrNAbtLYAec9LrT4U82jWG6KX", "proofs": [ "4K1MJRpH7pB6pjLcYUp84Wwmhjcg2PDvCMUYRHzUSRiwebG6cc1cmhZwSRCzvT7vt1uDMTXAvJ1Q7GWpB6zLv7Si" ], "script": "base64:BgIcCAISCAoGCAgIAQEBEgASAwoBARIAEgMKAQESACEACXNlcGFyYXRvcgICX18AEGNvbnRyYWN0RmlsZW5hbWUCGXZvdGluZ19lbWlzc2lvbl9yYXRlLnJpZGUAE0RFRkFVTFRfRVBPQ0hfQ09VTlQAAQAOa2V5RXBvY2hMZW5ndGgJALkJAgkAzAgCAgIlcwkAzAgCAgtlcG9jaExlbmd0aAUDbmlsBQlzZXBhcmF0b3IAE2tleUVtaXNzaW9uQ29udHJhY3QJALkJAgkAzAgCAgIlcwkAzAgCAhBlbWlzc2lvbkNvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgAZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdAkAuQkCCQDMCAICAiVzCQDMCAICFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QFA25pbAUJc2VwYXJhdG9yABNrZXlCb29zdGluZ0NvbnRyYWN0CQC5CQIJAMwIAgICJXMJAMwIAgIQYm9vc3RpbmdDb250cmFjdAUDbmlsBQlzZXBhcmF0b3IADGtleVRocmVzaG9sZAkAuQkCCQDMCAICAiVzCQDMCAICD3ZvdGluZ1RocmVzaG9sZAUDbmlsBQlzZXBhcmF0b3IAD2tleVJhdGVQZXJCbG9jawkAuQkCCQDMCAICBCVzJXMJAMwIAgIMcmF0ZVBlckJsb2NrCQDMCAICB2N1cnJlbnQFA25pbAUJc2VwYXJhdG9yABJrZXlSYXRlUGVyQmxvY2tNYXgJALkJAgkAzAgCAgQlcyVzCQDMCAICD3JhdGVQZXJCbG9ja01heAkAzAgCAgdjdXJyZW50BQNuaWwFCXNlcGFyYXRvcgARa2V5UmF0ZUNoYW5nZVN0ZXAJALkJAgkAzAgCAgIlcwkAzAgCAg5yYXRlQ2hhbmdlU3RlcAUDbmlsBQlzZXBhcmF0b3IADmtleVN0YXJ0SGVpZ2h0CQC5CQIJAMwIAgICJXMJAMwIAgILc3RhcnRIZWlnaHQFA25pbAUJc2VwYXJhdG9yAA9rZXlWb3RpbmdSZXN1bHQJALkJAgkAzAgCAgIlcwkAzAgCAgx2b3RpbmdSZXN1bHQFA25pbAUJc2VwYXJhdG9yABtrZXlWb3RpbmdFbWlzc2lvbkVwb2NoQ291bnQJALkJAgkAzAgCAgIlcwkAzAgCAhh2b3RpbmdFbWlzc2lvbkVwb2NoQ291bnQFA25pbAUJc2VwYXJhdG9yAQh0aHJvd0VycgEBcwkAAgEJAKwCAgkArAICBRBjb250cmFjdEZpbGVuYW1lAgI6IAUBcwEPZ2V0U3RyaW5nT3JGYWlsAQNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQNrZXkJAKwCAgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBDGdldEludE9yRmFpbAEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUDa2V5CQCsAgIFA2tleQIPIGlzIG5vdCBkZWZpbmVkAQp0b3RhbFZvdGVzAw10b3RhbEluY3JlYXNlDHRvdGFsQ3VycmVudA10b3RhbERlY3JlYXNlCQC5CQIJAMwIAgIGJWQlZCVkCQDMCAIFDXRvdGFsSW5jcmVhc2UJAMwIAgUMdG90YWxDdXJyZW50CQDMCAIFDXRvdGFsRGVjcmVhc2UFA25pbAUJc2VwYXJhdG9yAQdrZXlWb3RlAgx2b3RlckFkZHJlc3MLc3RhcnRIZWlnaHQJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIEdm90ZQkAzAgCBQx2b3RlckFkZHJlc3MJAMwIAgkApAMBBQtzdGFydEhlaWdodAUDbmlsBQlzZXBhcmF0b3IBDGtleVZvdGVWYWx1ZQIJZ3d4QW1vdW50BHZvdGUEA2tleQMJAAACBQR2b3RlAAEJALkJAgkAzAgCAgQlZCVzCQDMCAIFCWd3eEFtb3VudAkAzAgCAghpbmNyZWFzZQUDbmlsBQlzZXBhcmF0b3IDCQAAAgUEdm90ZQD///////////8BCQC5CQIJAMwIAgIEJWQlcwkAzAgCBQlnd3hBbW91bnQJAMwIAgIIZGVjcmVhc2UFA25pbAUJc2VwYXJhdG9yCQC5CQIJAMwIAgIEJWQlcwkAzAgCBQlnd3hBbW91bnQJAMwIAgIHY3VycmVudAUDbmlsBQlzZXBhcmF0b3IFA2tleQAQYm9vc3RpbmdDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBD2dldFN0cmluZ09yRmFpbAEFE2tleUJvb3N0aW5nQ29udHJhY3QAEGVtaXNzaW9uQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQ9nZXRTdHJpbmdPckZhaWwBBRNrZXlFbWlzc2lvbkNvbnRyYWN0ABZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQEPZ2V0U3RyaW5nT3JGYWlsAQUZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdAETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAIXJXNfX21hbmFnZXJWYXVsdEFkZHJlc3MBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCiCAEJARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAXMFBHRoaXMBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABBNtYW5hZ2VyVmF1bHRBZGRyZXNzCQEcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcwAEByRtYXRjaDAJAJ0IAgUTbWFuYWdlclZhdWx0QWRkcmVzcwkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEJaXNNYW5hZ2VyAQFpBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkDCQEJaXNNYW5hZ2VyAQUBaQYJAQh0aHJvd0VycgECEXBlcm1pc3Npb24gZGVuaWVkAQVhc0ludAEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIDSW50BAZ2YWxJbnQFByRtYXRjaDAFBnZhbEludAkBCHRocm93RXJyAQIbZmFpbGVkIHRvIGNhc3QgaW50byBJbnRlZ2VyAQtjYWxjTmV3UmF0ZQMPcmF0ZVBlckJsb2NrTWF4DHJhdGVQZXJCbG9jawpjaGFuZ2VTdGVwBAptYXhBbGxvd2VkCQBrAwBkBQ9yYXRlUGVyQmxvY2tNYXgAeAQNaW5jcmVhc2VkUmF0ZQkAlwMBCQDMCAIJAGsDCQBkAgBkBQpjaGFuZ2VTdGVwBQxyYXRlUGVyQmxvY2sAZAkAzAgCBQptYXhBbGxvd2VkBQNuaWwEDWRlY3JlYXNlZFJhdGUJAJYDAQkAzAgCCQBrAwkAZQIAZAUKY2hhbmdlU3RlcAUMcmF0ZVBlckJsb2NrAGQJAMwIAgAABQNuaWwJAJUKAwUNaW5jcmVhc2VkUmF0ZQUMcmF0ZVBlckJsb2NrBQ1kZWNyZWFzZWRSYXRlARxnZXRSYXRlQ2hhbmdlQW1vdW50c0lOVEVSTkFMAAQPcmF0ZVBlckJsb2NrTWF4CQERQGV4dHJOYXRpdmUoMTA1MCkCBRBlbWlzc2lvbkNvbnRyYWN0BRJrZXlSYXRlUGVyQmxvY2tNYXgEDHJhdGVQZXJCbG9jawkBEUBleHRyTmF0aXZlKDEwNTApAgUQZW1pc3Npb25Db250cmFjdAUPa2V5UmF0ZVBlckJsb2NrBA5yYXRlQ2hhbmdlU3RlcAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwURa2V5UmF0ZUNoYW5nZVN0ZXAJAQtjYWxjTmV3UmF0ZQMFD3JhdGVQZXJCbG9ja01heAUMcmF0ZVBlckJsb2NrBQ5yYXRlQ2hhbmdlU3RlcAEOZ2V0RXBvY2hMZW5ndGgBFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QEEXZvdGluZ0Vwb2NoTGVuZ3RoCQERQGV4dHJOYXRpdmUoMTA1MCkCBRZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0BQ5rZXlFcG9jaExlbmd0aAQRdm90aW5nU3RhcnRMZW5ndGgJARFAZXh0ck5hdGl2ZSgxMDUwKQIFFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QFDmtleVN0YXJ0SGVpZ2h0BBh2b3RpbmdFbWlzc2lvbkVwb2NoQ291bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUba2V5Vm90aW5nRW1pc3Npb25FcG9jaENvdW50BRNERUZBVUxUX0VQT0NIX0NPVU5UCQBlAgkAZQIJAGQCBRF2b3RpbmdTdGFydExlbmd0aAkAaAIFEXZvdGluZ0Vwb2NoTGVuZ3RoBRh2b3RpbmdFbWlzc2lvbkVwb2NoQ291bnQFBmhlaWdodAABBgFpAQtjb25zdHJ1Y3RvcgYTYm9vc3RpbmdDb250cmFjdFBybRNlbWlzc2lvbkNvbnRyYWN0UHJtGXZvdGluZ0VtaXNzaW9uQ29udHJhY3RQcm0JdGhyZXNob2xkDnJhdGVDaGFuZ2VTdGVwGHZvdGluZ0VtaXNzaW9uRXBvY2hDb3VudAQGY2hlY2tzCQDMCAIJAQttdXN0TWFuYWdlcgEFAWkJAMwIAgMJAQlpc0RlZmluZWQBCQCmCAEFE2Jvb3N0aW5nQ29udHJhY3RQcm0GCQEIdGhyb3dFcnIBAiFJbnZhbGlkIGJvb3N0aW5nIGNvbnRyYWN0IGFkZHJlc3MJAMwIAgMJAQlpc0RlZmluZWQBCQCmCAEFE2VtaXNzaW9uQ29udHJhY3RQcm0GCQEIdGhyb3dFcnIBAiFJbnZhbGlkIGVtaXNzaW9uIGNvbnRyYWN0IGFkZHJlc3MJAMwIAgMJAQlpc0RlZmluZWQBCQCmCAEFGXZvdGluZ0VtaXNzaW9uQ29udHJhY3RQcm0GCQEIdGhyb3dFcnIBAiFJbnZhbGlkIGVtaXNzaW9uIGNvbnRyYWN0IGFkZHJlc3MJAMwIAgMJAGYCBQl0aHJlc2hvbGQAAAYJAQh0aHJvd0VycgECEWludmFsaWQgdGhyZXNob2xkCQDMCAIDCQBmAgUOcmF0ZUNoYW5nZVN0ZXAAAAYJAQh0aHJvd0VycgECFmludmFsaWQgcmF0ZUNoYW5nZVN0ZXAJAMwIAgMJAGYCBRh2b3RpbmdFbWlzc2lvbkVwb2NoQ291bnQAAAYJAQh0aHJvd0VycgECIGludmFsaWQgdm90aW5nRW1pc3Npb25FcG9jaENvdW50BQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDnZvdGluZ0VtaXNzaW9uCQERQGV4dHJOYXRpdmUoMTA2MikBBRl2b3RpbmdFbWlzc2lvbkNvbnRyYWN0UHJtCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUTa2V5Qm9vc3RpbmdDb250cmFjdAUTYm9vc3RpbmdDb250cmFjdFBybQkAzAgCCQELU3RyaW5nRW50cnkCBRNrZXlFbWlzc2lvbkNvbnRyYWN0BRNlbWlzc2lvbkNvbnRyYWN0UHJtCQDMCAIJAQtTdHJpbmdFbnRyeQIFGWtleVZvdGluZ0VtaXNzaW9uQ29udHJhY3QFGXZvdGluZ0VtaXNzaW9uQ29udHJhY3RQcm0JAMwIAgkBDEludGVnZXJFbnRyeQIFDmtleUVwb2NoTGVuZ3RoCQEOZ2V0RXBvY2hMZW5ndGgBBQ52b3RpbmdFbWlzc2lvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa2V5VGhyZXNob2xkBQl0aHJlc2hvbGQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtleVJhdGVDaGFuZ2VTdGVwBQ5yYXRlQ2hhbmdlU3RlcAkAzAgCCQEMSW50ZWdlckVudHJ5AgUba2V5Vm90aW5nRW1pc3Npb25FcG9jaENvdW50BRh2b3RpbmdFbWlzc2lvbkVwb2NoQ291bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFDmtleVN0YXJ0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgUPa2V5Vm90aW5nUmVzdWx0CQEKdG90YWxWb3RlcwMCATACATACATAFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARxnZXRSYXRlQ2hhbmdlQW1vdW50c1JFQURPTkxZAAkAlAoCBQNuaWwJARxnZXRSYXRlQ2hhbmdlQW1vdW50c0lOVEVSTkFMAAFpAQR2b3RlAQdpbkZhdm9yBAtzdGFydEhlaWdodAkBEUBleHRyTmF0aXZlKDEwNTUpAQUOa2V5U3RhcnRIZWlnaHQEEnZvdGluZ0ZpbmlzaEhlaWdodAkAZAIFC3N0YXJ0SGVpZ2h0CQERQGV4dHJOYXRpdmUoMTA1NSkBBQ5rZXlFcG9jaExlbmd0aAQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAZjaGVja3MJAMwIAgMJAGYCBRJ2b3RpbmdGaW5pc2hIZWlnaHQFBmhlaWdodAYJAQh0aHJvd0VycgECEHRvbyBsYXRlIHRvIHZvdGUJAMwIAgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIAAQkAzAgCAAAJAMwIAgD///////////8BBQNuaWwFB2luRmF2b3IGCQEIdGhyb3dFcnIBAhJub3QgdmFsaWQgYXJndW1lbnQJAMwIAgMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBB2tleVZvdGUCBQt1c2VyQWRkcmVzcwULc3RhcnRIZWlnaHQGCQEIdGhyb3dFcnIBAhF5b3UgYWxyZWFkeSB2b3RlZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAlnd3hBbW91bnQJAPwHBAUQYm9vc3RpbmdDb250cmFjdAIgZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0UkVBRE9OTFkJAMwIAgULdXNlckFkZHJlc3MJAMwIAgUSdm90aW5nRmluaXNoSGVpZ2h0BQNuaWwFA25pbAQHbm90WmVybwMJAGYCCQEFYXNJbnQBBQlnd3hBbW91bnQAAAYJAQh0aHJvd0VycgECEnlvdSBkb24ndCBoYXZlIGd3eAMJAAACBQdub3RaZXJvBQdub3RaZXJvBAx2b3RpbmdSZXN1bHQJALUJAgkBEUBleHRyTmF0aXZlKDEwNTgpAQUPa2V5Vm90aW5nUmVzdWx0BQlzZXBhcmF0b3IEEHZvdGVzRm9ySW5jcmVhc2UJAJEDAgUMdm90aW5nUmVzdWx0AAEED3ZvdGVzRm9yQ3VycmVudAkAkQMCBQx2b3RpbmdSZXN1bHQAAgQQdm90ZXNGb3JEZWNyZWFzZQkAkQMCBQx2b3RpbmdSZXN1bHQAAwQbbmV3UG9zaXRpdmVBbmROZWdhdGl2ZVZvdGVzAwkAAAIFB2luRmF2b3IAAQQQbmV3SW5jcmVhc2VWb3RlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQUQdm90ZXNGb3JJbmNyZWFzZQkBBWFzSW50AQUJZ3d4QW1vdW50CQDMCAIJAKQDAQUQbmV3SW5jcmVhc2VWb3RlcwkAzAgCBQ92b3Rlc0ZvckN1cnJlbnQJAMwIAgUQdm90ZXNGb3JEZWNyZWFzZQUDbmlsAwkAAAIFB2luRmF2b3IA////////////AQQQbmV3RGVjcmVhc2VWb3RlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQUQdm90ZXNGb3JEZWNyZWFzZQkBBWFzSW50AQUJZ3d4QW1vdW50CQDMCAIFEHZvdGVzRm9ySW5jcmVhc2UJAMwIAgUPdm90ZXNGb3JDdXJyZW50CQDMCAIJAKQDAQUQbmV3RGVjcmVhc2VWb3RlcwUDbmlsBA9uZXdDdXJyZW50Vm90ZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEFD3ZvdGVzRm9yQ3VycmVudAkBBWFzSW50AQUJZ3d4QW1vdW50CQDMCAIFEHZvdGVzRm9ySW5jcmVhc2UJAMwIAgkApAMBBQ9uZXdDdXJyZW50Vm90ZXMJAMwIAgUQdm90ZXNGb3JEZWNyZWFzZQUDbmlsBAd2b3RlS2V5CQEHa2V5Vm90ZQIJAKUIAQgFAWkGY2FsbGVyBQtzdGFydEhlaWdodAQJdm90ZVZhbHVlCQEMa2V5Vm90ZVZhbHVlAgkApAMBCQEFYXNJbnQBBQlnd3hBbW91bnQFB2luRmF2b3IJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQ9rZXlWb3RpbmdSZXN1bHQJAQp0b3RhbFZvdGVzAwkAkQMCBRtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAAkAkQMCBRtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAQkAkQMCBRtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAgkAzAgCCQELU3RyaW5nRW50cnkCBQd2b3RlS2V5BQl2b3RlVmFsdWUFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpjYW5jZWxWb3RlAAQLc3RhcnRIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDU1KQEFDmtleVN0YXJ0SGVpZ2h0BBJ2b3RpbmdGaW5pc2hIZWlnaHQJAGQCBQtzdGFydEhlaWdodAkBEUBleHRyTmF0aXZlKDEwNTUpAQUOa2V5RXBvY2hMZW5ndGgEC3VzZXJBZGRyZXNzAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwkApQgBCAUBaQxvcmlnaW5DYWxsZXIJAKUIAQgFAWkGY2FsbGVyBAZjaGVja3MJAMwIAgMJAGYCBRJ2b3RpbmdGaW5pc2hIZWlnaHQFBmhlaWdodAYJAQh0aHJvd0VycgECF3RvbyBsYXRlIHRvIGNhbmNlbCB2b3RlCQDMCAIDCQEJaXNEZWZpbmVkAQkAoggBBQ9rZXlWb3RpbmdSZXN1bHQGCQEIdGhyb3dFcnIBAgdubyB2b3RlCQDMCAIDCQEJaXNEZWZpbmVkAQkAoggBCQEHa2V5Vm90ZQIFC3VzZXJBZGRyZXNzBQtzdGFydEhlaWdodAYJAQh0aHJvd0VycgECDG5vIHVzZXIgdm90ZQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAR2b3RlCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAQdrZXlWb3RlAgULdXNlckFkZHJlc3MFC3N0YXJ0SGVpZ2h0BQlzZXBhcmF0b3IECXZvdGVWYWx1ZQkAkQMCBQR2b3RlAAEECHZvdGVUeXBlCQCRAwIFBHZvdGUAAgQMdm90aW5nUmVzdWx0CQC1CQIJARFAZXh0ck5hdGl2ZSgxMDU4KQEFD2tleVZvdGluZ1Jlc3VsdAUJc2VwYXJhdG9yBBB2b3Rlc0ZvckluY3JlYXNlCQCRAwIFDHZvdGluZ1Jlc3VsdAABBA92b3Rlc0ZvckN1cnJlbnQJAJEDAgUMdm90aW5nUmVzdWx0AAIEEHZvdGVzRm9yRGVjcmVhc2UJAJEDAgUMdm90aW5nUmVzdWx0AAMEB2FjdGlvbnMDCQAAAgUIdm90ZVR5cGUCCGluY3JlYXNlBBBuZXdJbmNyZWFzZVZvdGVzCQBlAgkBDXBhcnNlSW50VmFsdWUBBRB2b3Rlc0ZvckluY3JlYXNlCQENcGFyc2VJbnRWYWx1ZQEFCXZvdGVWYWx1ZQkAzAgCCQELU3RyaW5nRW50cnkCBQ9rZXlWb3RpbmdSZXN1bHQJAQp0b3RhbFZvdGVzAwkApAMBBRBuZXdJbmNyZWFzZVZvdGVzBQ92b3Rlc0ZvckN1cnJlbnQFEHZvdGVzRm9yRGVjcmVhc2UFA25pbAMJAAACBQh2b3RlVHlwZQIIZGVjcmVhc2UEEG5ld0RlY3JlYXNlVm90ZXMJAGUCCQENcGFyc2VJbnRWYWx1ZQEFEHZvdGVzRm9yRGVjcmVhc2UJAQ1wYXJzZUludFZhbHVlAQUJdm90ZVZhbHVlCQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tleVZvdGluZ1Jlc3VsdAkBCnRvdGFsVm90ZXMDBRB2b3Rlc0ZvckluY3JlYXNlBQ92b3Rlc0ZvckN1cnJlbnQJAKQDAQUQbmV3RGVjcmVhc2VWb3RlcwUDbmlsBA9uZXdDdXJyZW50Vm90ZXMJAGUCCQENcGFyc2VJbnRWYWx1ZQEFD3ZvdGVzRm9yQ3VycmVudAkBDXBhcnNlSW50VmFsdWUBBQl2b3RlVmFsdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgUPa2V5Vm90aW5nUmVzdWx0CQEKdG90YWxWb3RlcwMFEHZvdGVzRm9ySW5jcmVhc2UJAKQDAQUPbmV3Q3VycmVudFZvdGVzBRB2b3Rlc0ZvckRlY3JlYXNlBQNuaWwEDmRlZmF1bHRBY3Rpb25zCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlWb3RlAgULdXNlckFkZHJlc3MFC3N0YXJ0SGVpZ2h0BQNuaWwJAM4IAgUHYWN0aW9ucwUOZGVmYXVsdEFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMc2V0VGhyZXNob2xkAQxuZXdUaHJlc2hvbGQEBmNoZWNrcwkAzAgCCQELbXVzdE1hbmFnZXIBBQFpCQDMCAIDCQBmAgUMbmV3VGhyZXNob2xkAAAGCQEIdGhyb3dFcnIBAhFpbnZhbGlkIHRocmVzaG9sZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtleVRocmVzaG9sZAUMbmV3VGhyZXNob2xkBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIZmluYWxpemUABAVjaGVjawMDCQAAAggFAWkGY2FsbGVyBRZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0BgkBC211c3RNYW5hZ2VyAQUBaQYJAQh0aHJvd0VycgECEVBlcm1pc3Npb24gZGVuaWVkAwkAAAIFBWNoZWNrBQVjaGVjawQSdm90aW5nRmluaXNoSGVpZ2h0CQBkAgkBEUBleHRyTmF0aXZlKDEwNTUpAQUOa2V5U3RhcnRIZWlnaHQJAQV2YWx1ZQEJAJ8IAQUOa2V5RXBvY2hMZW5ndGgDCQBnAgUGaGVpZ2h0BRJ2b3RpbmdGaW5pc2hIZWlnaHQEDHZvdGluZ1Jlc3VsdAkAtQkCCQEFdmFsdWUBCQCiCAEFD2tleVZvdGluZ1Jlc3VsdAUJc2VwYXJhdG9yBBB2b3Rlc0ZvckluY3JlYXNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMdm90aW5nUmVzdWx0AAEED3ZvdGVzRm9yQ3VycmVudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDHZvdGluZ1Jlc3VsdAACBBB2b3Rlc0ZvckRlY3JlYXNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMdm90aW5nUmVzdWx0AAMECGFsbFZvdGVzCQBkAgkAZAIFEHZvdGVzRm9ySW5jcmVhc2UFD3ZvdGVzRm9yQ3VycmVudAUQdm90ZXNGb3JEZWNyZWFzZQQJdGhyZXNob2xkCQEMZ2V0SW50T3JGYWlsAQUMa2V5VGhyZXNob2xkBA0kdDAxMDE5ODEwMjc4CQEcZ2V0UmF0ZUNoYW5nZUFtb3VudHNJTlRFUk5BTAAEDWluY3JlYXNlZFJhdGUIBQ0kdDAxMDE5ODEwMjc4Al8xBAtjdXJyZW50UmF0ZQgFDSR0MDEwMTk4MTAyNzgCXzIEDWRlY3JlYXNlZFJhdGUIBQ0kdDAxMDE5ODEwMjc4Al8zBAl2b3Rlc0xpc3QJAMwIAgUQdm90ZXNGb3JJbmNyZWFzZQkAzAgCBQ92b3Rlc0ZvckN1cnJlbnQJAMwIAgUQdm90ZXNGb3JEZWNyZWFzZQUDbmlsBAduZXdSYXRlAwMJAGYCBQl0aHJlc2hvbGQFCGFsbFZvdGVzBgkAAAIFD3ZvdGVzRm9yQ3VycmVudAkAlgMBBQl2b3Rlc0xpc3QFBHVuaXQDCQAAAgUQdm90ZXNGb3JJbmNyZWFzZQkAlgMBBQl2b3Rlc0xpc3QFDWluY3JlYXNlZFJhdGUFDWRlY3JlYXNlZFJhdGUEEWNoYW5nZVJhdGVJbnZva2VzBAckbWF0Y2gwBQduZXdSYXRlAwkAAQIFByRtYXRjaDACA0ludAQBcgUHJG1hdGNoMAQSZW1pc3Npb25DaGFuZ2VSYXRlCQD8BwQFEGVtaXNzaW9uQ29udHJhY3QCEmNoYW5nZVJhdGVQZXJCbG9jawkAzAgCBQFyBQNuaWwFA25pbAMJAAACBRJlbWlzc2lvbkNoYW5nZVJhdGUFEmVtaXNzaW9uQ2hhbmdlUmF0ZQUSZW1pc3Npb25DaGFuZ2VSYXRlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQR1bml0AwkAAAIFEWNoYW5nZVJhdGVJbnZva2VzBRFjaGFuZ2VSYXRlSW52b2tlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa2V5U3RhcnRIZWlnaHQFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa2V5RXBvY2hMZW5ndGgJAQ5nZXRFcG9jaExlbmd0aAEFFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgUPa2V5Vm90aW5nUmVzdWx0CQEKdG90YWxWb3RlcwMCATACATACATAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQPdGFyZ2V0UHVibGljS2V5BAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQIBQJ0eA9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUPdGFyZ2V0UHVibGljS2V5ulztlA==", "height": 2603235, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 42mj3S71gMmjciskdcB8Nw7WmxvmMSRSbSsuyfpzbxaM Next: GYe49y2HTgG7PPFSnt3EtkLyZJvbcQRKtaq9fd4QcZC4 Diff:
OldNewDifferences
2727
2828 let m = makeString(["%s", "votingResult"], a)
2929
30-func n (o) = throw(((b + ": ") + o))
30+let n = makeString(["%s", "votingEmissionEpochCount"], a)
31+
32+func o (p) = throw(((b + ": ") + p))
3133
3234
33-func p (q) = valueOrErrorMessage(getString(this, q), (q + " is not defined"))
35+func q (r) = valueOrErrorMessage(getString(this, r), (r + " is not defined"))
3436
3537
36-func r (q) = valueOrErrorMessage(getInteger(this, q), (q + " is not defined"))
38+func s (r) = valueOrErrorMessage(getInteger(this, r), (r + " is not defined"))
3739
3840
39-func s (t,u,v) = makeString(["%d%d%d", t, u, v], a)
41+func t (u,v,w) = makeString(["%d%d%d", u, v, w], a)
4042
4143
42-func w (x,y) = makeString(["%s%s%d", "vote", x, toString(y)], a)
44+func x (y,z) = makeString(["%s%s%d", "vote", y, toString(z)], a)
4345
4446
45-func z (A,B) = {
46- let q = if ((B == 1))
47- then makeString(["%d%s", A, "increase"], a)
48- else if ((B == -1))
49- then makeString(["%d%s", A, "decrease"], a)
50- else makeString(["%d%s", A, "current"], a)
51- q
47+func A (B,C) = {
48+ let r = if ((C == 1))
49+ then makeString(["%d%s", B, "increase"], a)
50+ else if ((C == -1))
51+ then makeString(["%d%s", B, "decrease"], a)
52+ else makeString(["%d%s", B, "current"], a)
53+ r
5254 }
5355
5456
55-let C = addressFromStringValue(p(g))
57+let D = addressFromStringValue(q(g))
5658
57-let D = addressFromStringValue(p(e))
59+let E = addressFromStringValue(q(e))
5860
59-let E = addressFromStringValue(p(f))
61+let F = addressFromStringValue(q(f))
6062
61-func F () = "%s__managerPublicKey"
63+func G () = "%s__managerPublicKey"
6264
6365
64-func G () = "%s__managerVaultAddress"
66+func H () = "%s__managerVaultAddress"
6567
6668
67-func H () = {
68- let I = getString(G())
69- if ($isInstanceOf(I, "String"))
69+func I () = {
70+ let J = getString(H())
71+ if ($isInstanceOf(J, "String"))
7072 then {
71- let o = I
72- addressFromStringValue(o)
73+ let p = J
74+ addressFromStringValue(p)
7375 }
7476 else this
7577 }
7678
7779
78-func J () = {
79- let K = H()
80- let I = getString(K, F())
81- if ($isInstanceOf(I, "String"))
80+func K () = {
81+ let L = I()
82+ let J = getString(L, G())
83+ if ($isInstanceOf(J, "String"))
8284 then {
83- let o = I
84- fromBase58String(o)
85+ let p = J
86+ fromBase58String(p)
8587 }
86- else if ($isInstanceOf(I, "Unit"))
88+ else if ($isInstanceOf(J, "Unit"))
8789 then unit
8890 else throw("Match error")
8991 }
9092
9193
92-func L (M) = {
93- let I = J()
94- if ($isInstanceOf(I, "ByteVector"))
94+func M (N) = {
95+ let J = K()
96+ if ($isInstanceOf(J, "ByteVector"))
9597 then {
96- let N = I
97- (M.callerPublicKey == N)
98+ let O = J
99+ (N.callerPublicKey == O)
98100 }
99- else if ($isInstanceOf(I, "Unit"))
100- then (M.caller == this)
101+ else if ($isInstanceOf(J, "Unit"))
102+ then (N.caller == this)
101103 else throw("Match error")
102104 }
103105
104106
105-func O (M) = if (L(M))
107+func P (N) = if (M(N))
106108 then true
107- else n("permission denied")
109+ else o("permission denied")
108110
109111
110-func P (Q) = {
111- let I = Q
112- if ($isInstanceOf(I, "Int"))
112+func Q (R) = {
113+ let J = R
114+ if ($isInstanceOf(J, "Int"))
113115 then {
114- let R = I
115- R
116+ let S = J
117+ S
116118 }
117- else n("failed to cast into Integer")
119+ else o("failed to cast into Integer")
118120 }
119121
120122
121-func S (T,U,V) = {
122- let W = fraction(100, T, 120)
123- let X = min([fraction((100 + V), U, 100), W])
124- let Y = max([fraction((100 - V), U, 100), 0])
125- $Tuple3(X, U, Y)
123+func T (U,V,W) = {
124+ let X = fraction(100, U, 120)
125+ let Y = min([fraction((100 + W), V, 100), X])
126+ let Z = max([fraction((100 - W), V, 100), 0])
127+ $Tuple3(Y, V, Z)
126128 }
127129
128130
129-func Z () = {
130- let T = getIntegerValue(D, j)
131- let U = getIntegerValue(D, i)
132- let aa = getIntegerValue(this, k)
133- S(T, U, aa)
131+func aa () = {
132+ let U = getIntegerValue(E, j)
133+ let V = getIntegerValue(E, i)
134+ let ab = getIntegerValue(this, k)
135+ T(U, V, ab)
134136 }
135137
136138
137-func ab (E) = {
138- let ac = getIntegerValue(E, d)
139- let ad = getIntegerValue(E, l)
140- (((ad + (ac * c)) - height) - 1)
139+func ac (F) = {
140+ let ad = getIntegerValue(F, d)
141+ let ae = getIntegerValue(F, l)
142+ let af = valueOrElse(getInteger(this, n), c)
143+ (((ae + (ad * af)) - height) - 1)
141144 }
142145
143146
144-@Callable(M)
145-func constructor (ae,af,ag,ah,aa) = {
146- let ai = [O(M), if (isDefined(addressFromString(ae)))
147+@Callable(N)
148+func constructor (ag,ah,ai,aj,ab,af) = {
149+ let ak = [P(N), if (isDefined(addressFromString(ag)))
147150 then true
148- else n("Invalid boosting contract address"), if (isDefined(addressFromString(af)))
151+ else o("Invalid boosting contract address"), if (isDefined(addressFromString(ah)))
149152 then true
150- else n("Invalid emission contract address"), if (isDefined(addressFromString(ag)))
153+ else o("Invalid emission contract address"), if (isDefined(addressFromString(ai)))
151154 then true
152- else n("Invalid emission contract address"), if ((ah > 0))
155+ else o("Invalid emission contract address"), if ((aj > 0))
153156 then true
154- else n("invalid threshold"), if ((aa > 0))
157+ else o("invalid threshold"), if ((ab > 0))
155158 then true
156- else n("invalid rateChangeStep")]
157- if ((ai == ai))
159+ else o("invalid rateChangeStep"), if ((af > 0))
160+ then true
161+ else o("invalid votingEmissionEpochCount")]
162+ if ((ak == ak))
158163 then {
159- let aj = addressFromStringValue(ag)
160- $Tuple2([StringEntry(g, ae), StringEntry(e, af), StringEntry(f, ag), IntegerEntry(d, ab(aj)), IntegerEntry(h, ah), IntegerEntry(k, aa), IntegerEntry(l, height), StringEntry(m, s("0", "0", "0"))], unit)
164+ let al = addressFromStringValue(ai)
165+ $Tuple2([StringEntry(g, ag), StringEntry(e, ah), StringEntry(f, ai), IntegerEntry(d, ac(al)), IntegerEntry(h, aj), IntegerEntry(k, ab), IntegerEntry(n, af), IntegerEntry(l, height), StringEntry(m, t("0", "0", "0"))], unit)
161166 }
162167 else throw("Strict value is not equal to itself.")
163168 }
164169
165170
166171
167-@Callable(M)
168-func getRateChangeAmountsREADONLY () = $Tuple2(nil, Z())
172+@Callable(N)
173+func getRateChangeAmountsREADONLY () = $Tuple2(nil, aa())
169174
170175
171176
172-@Callable(M)
173-func vote (ak) = {
174- let y = getIntegerValue(l)
175- let al = (y + getIntegerValue(d))
176- let am = toString(M.caller)
177- let ai = [if ((al > height))
177+@Callable(N)
178+func vote (am) = {
179+ let z = getIntegerValue(l)
180+ let an = (z + getIntegerValue(d))
181+ let ao = toString(N.caller)
182+ let ak = [if ((an > height))
178183 then true
179- else n("too late to vote"), if (containsElement([1, 0, -1], ak))
184+ else o("too late to vote"), if (containsElement([1, 0, -1], am))
180185 then true
181- else n("not valid argument"), if (!(isDefined(getString(w(am, y)))))
186+ else o("not valid argument"), if (!(isDefined(getString(x(ao, z)))))
182187 then true
183- else n("you already voted")]
184- if ((ai == ai))
188+ else o("you already voted")]
189+ if ((ak == ak))
185190 then {
186- let A = invoke(C, "getUserGwxAmountAtHeightREADONLY", [am, al], nil)
187- let an = if ((P(A) > 0))
191+ let B = invoke(D, "getUserGwxAmountAtHeightREADONLY", [ao, an], nil)
192+ let ap = if ((Q(B) > 0))
188193 then true
189- else n("you don't have gwx")
190- if ((an == an))
194+ else o("you don't have gwx")
195+ if ((ap == ap))
191196 then {
192- let ao = split(getStringValue(m), a)
193- let ap = ao[1]
194- let aq = ao[2]
195- let ar = ao[3]
196- let as = if ((ak == 1))
197+ let aq = split(getStringValue(m), a)
198+ let ar = aq[1]
199+ let as = aq[2]
200+ let at = aq[3]
201+ let au = if ((am == 1))
197202 then {
198- let at = (parseIntValue(ap) + P(A))
199-[toString(at), aq, ar]
203+ let av = (parseIntValue(ar) + Q(B))
204+[toString(av), as, at]
200205 }
201- else if ((ak == -1))
206+ else if ((am == -1))
202207 then {
203- let au = (parseIntValue(ar) + P(A))
204-[ap, aq, toString(au)]
208+ let aw = (parseIntValue(at) + Q(B))
209+[ar, as, toString(aw)]
205210 }
206211 else {
207- let av = (parseIntValue(aq) + P(A))
208-[ap, toString(av), ar]
212+ let ax = (parseIntValue(as) + Q(B))
213+[ar, toString(ax), at]
209214 }
210- let aw = w(toString(M.caller), y)
211- let ax = z(toString(P(A)), ak)
212- $Tuple2([StringEntry(m, s(as[0], as[1], as[2])), StringEntry(aw, ax)], unit)
215+ let ay = x(toString(N.caller), z)
216+ let az = A(toString(Q(B)), am)
217+ $Tuple2([StringEntry(m, t(au[0], au[1], au[2])), StringEntry(ay, az)], unit)
213218 }
214219 else throw("Strict value is not equal to itself.")
215220 }
218223
219224
220225
221-@Callable(M)
226+@Callable(N)
222227 func cancelVote () = {
223- let y = getIntegerValue(l)
224- let al = (y + getIntegerValue(d))
225- let am = if ((M.caller == this))
226- then toString(M.originCaller)
227- else toString(M.caller)
228- let ai = [if ((al > height))
228+ let z = getIntegerValue(l)
229+ let an = (z + getIntegerValue(d))
230+ let ao = if ((N.caller == this))
231+ then toString(N.originCaller)
232+ else toString(N.caller)
233+ let ak = [if ((an > height))
229234 then true
230- else n("too late to cancel vote"), if (isDefined(getString(m)))
235+ else o("too late to cancel vote"), if (isDefined(getString(m)))
231236 then true
232- else n("no vote"), if (isDefined(getString(w(am, y))))
237+ else o("no vote"), if (isDefined(getString(x(ao, z))))
233238 then true
234- else n("no user vote")]
235- if ((ai == ai))
239+ else o("no user vote")]
240+ if ((ak == ak))
236241 then {
237- let B = split(getStringValue(w(am, y)), a)
238- let ax = B[1]
239- let ay = B[2]
240- let ao = split(getStringValue(m), a)
241- let ap = ao[1]
242- let aq = ao[2]
243- let ar = ao[3]
244- let az = if ((ay == "increase"))
242+ let C = split(getStringValue(x(ao, z)), a)
243+ let az = C[1]
244+ let aA = C[2]
245+ let aq = split(getStringValue(m), a)
246+ let ar = aq[1]
247+ let as = aq[2]
248+ let at = aq[3]
249+ let aB = if ((aA == "increase"))
245250 then {
246- let at = (parseIntValue(ap) - parseIntValue(ax))
247-[StringEntry(m, s(toString(at), aq, ar))]
251+ let av = (parseIntValue(ar) - parseIntValue(az))
252+[StringEntry(m, t(toString(av), as, at))]
248253 }
249- else if ((ay == "decrease"))
254+ else if ((aA == "decrease"))
250255 then {
251- let au = (parseIntValue(ar) - parseIntValue(ax))
252-[StringEntry(m, s(ap, aq, toString(au)))]
256+ let aw = (parseIntValue(at) - parseIntValue(az))
257+[StringEntry(m, t(ar, as, toString(aw)))]
253258 }
254259 else {
255- let av = (parseIntValue(aq) - parseIntValue(ax))
256-[StringEntry(m, s(ap, toString(av), ar))]
260+ let ax = (parseIntValue(as) - parseIntValue(az))
261+[StringEntry(m, t(ar, toString(ax), at))]
257262 }
258- let aA = [DeleteEntry(w(am, y))]
259- (az ++ aA)
263+ let aC = [DeleteEntry(x(ao, z))]
264+ (aB ++ aC)
260265 }
261266 else throw("Strict value is not equal to itself.")
262267 }
263268
264269
265270
266-@Callable(M)
267-func setThreshold (aB) = {
268- let ai = [O(M), if ((aB > 0))
271+@Callable(N)
272+func setThreshold (aD) = {
273+ let ak = [P(N), if ((aD > 0))
269274 then true
270- else n("invalid threshold")]
271- if ((ai == ai))
272- then $Tuple2([IntegerEntry(h, aB)], unit)
275+ else o("invalid threshold")]
276+ if ((ak == ak))
277+ then $Tuple2([IntegerEntry(h, aD)], unit)
273278 else throw("Strict value is not equal to itself.")
274279 }
275280
276281
277282
278-@Callable(M)
283+@Callable(N)
279284 func finalize () = {
280- let aC = if (if ((M.caller == E))
285+ let aE = if (if ((N.caller == F))
281286 then true
282- else O(M))
287+ else P(N))
283288 then true
284- else n("Permission denied")
285- if ((aC == aC))
289+ else o("Permission denied")
290+ if ((aE == aE))
286291 then {
287- let al = (getIntegerValue(l) + value(getInteger(d)))
288- if ((height >= al))
292+ let an = (getIntegerValue(l) + value(getInteger(d)))
293+ if ((height >= an))
289294 then {
290- let ao = split(value(getString(m)), a)
291- let ap = parseIntValue(ao[1])
292- let aq = parseIntValue(ao[2])
293- let ar = parseIntValue(ao[3])
294- let aD = ((ap + aq) + ar)
295- let ah = r(h)
296- let aE = Z()
297- let X = aE._1
298- let aF = aE._2
299- let Y = aE._3
300- let aG = [ap, aq, ar]
301- let aH = if (if ((ah > aD))
295+ let aq = split(value(getString(m)), a)
296+ let ar = parseIntValue(aq[1])
297+ let as = parseIntValue(aq[2])
298+ let at = parseIntValue(aq[3])
299+ let aF = ((ar + as) + at)
300+ let aj = s(h)
301+ let aG = aa()
302+ let Y = aG._1
303+ let aH = aG._2
304+ let Z = aG._3
305+ let aI = [ar, as, at]
306+ let aJ = if (if ((aj > aF))
302307 then true
303- else (aq == max(aG)))
308+ else (as == max(aI)))
304309 then unit
305- else if ((ap == max(aG)))
306- then X
307- else Y
308- let aI = {
309- let I = aH
310- if ($isInstanceOf(I, "Int"))
310+ else if ((ar == max(aI)))
311+ then Y
312+ else Z
313+ let aK = {
314+ let J = aJ
315+ if ($isInstanceOf(J, "Int"))
311316 then {
312- let aJ = I
313- let aK = invoke(D, "changeRatePerBlock", [aJ], nil)
314- if ((aK == aK))
315- then aK
317+ let aL = J
318+ let aM = invoke(E, "changeRatePerBlock", [aL], nil)
319+ if ((aM == aM))
320+ then aM
316321 else throw("Strict value is not equal to itself.")
317322 }
318323 else unit
319324 }
320- if ((aI == aI))
321- then [IntegerEntry(l, height), IntegerEntry(d, ab(E)), StringEntry(m, s("0", "0", "0"))]
325+ if ((aK == aK))
326+ then [IntegerEntry(l, height), IntegerEntry(d, ac(F)), StringEntry(m, t("0", "0", "0"))]
322327 else throw("Strict value is not equal to itself.")
323328 }
324329 else nil
327332 }
328333
329334
330-@Verifier(aL)
331-func aM () = {
332- let aN = {
333- let I = J()
334- if ($isInstanceOf(I, "ByteVector"))
335+@Verifier(aN)
336+func aO () = {
337+ let aP = {
338+ let J = K()
339+ if ($isInstanceOf(J, "ByteVector"))
335340 then {
336- let N = I
337- N
341+ let O = J
342+ O
338343 }
339- else if ($isInstanceOf(I, "Unit"))
340- then aL.senderPublicKey
344+ else if ($isInstanceOf(J, "Unit"))
345+ then aN.senderPublicKey
341346 else throw("Match error")
342347 }
343- sigVerify(aL.bodyBytes, aL.proofs[0], aN)
348+ sigVerify(aN.bodyBytes, aN.proofs[0], aP)
344349 }
345350
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = "voting_emission_rate.ride"
77
88 let c = 1
99
1010 let d = makeString(["%s", "epochLength"], a)
1111
1212 let e = makeString(["%s", "emissionContract"], a)
1313
1414 let f = makeString(["%s", "votingEmissionContract"], a)
1515
1616 let g = makeString(["%s", "boostingContract"], a)
1717
1818 let h = makeString(["%s", "votingThreshold"], a)
1919
2020 let i = makeString(["%s%s", "ratePerBlock", "current"], a)
2121
2222 let j = makeString(["%s%s", "ratePerBlockMax", "current"], a)
2323
2424 let k = makeString(["%s", "rateChangeStep"], a)
2525
2626 let l = makeString(["%s", "startHeight"], a)
2727
2828 let m = makeString(["%s", "votingResult"], a)
2929
30-func n (o) = throw(((b + ": ") + o))
30+let n = makeString(["%s", "votingEmissionEpochCount"], a)
31+
32+func o (p) = throw(((b + ": ") + p))
3133
3234
33-func p (q) = valueOrErrorMessage(getString(this, q), (q + " is not defined"))
35+func q (r) = valueOrErrorMessage(getString(this, r), (r + " is not defined"))
3436
3537
36-func r (q) = valueOrErrorMessage(getInteger(this, q), (q + " is not defined"))
38+func s (r) = valueOrErrorMessage(getInteger(this, r), (r + " is not defined"))
3739
3840
39-func s (t,u,v) = makeString(["%d%d%d", t, u, v], a)
41+func t (u,v,w) = makeString(["%d%d%d", u, v, w], a)
4042
4143
42-func w (x,y) = makeString(["%s%s%d", "vote", x, toString(y)], a)
44+func x (y,z) = makeString(["%s%s%d", "vote", y, toString(z)], a)
4345
4446
45-func z (A,B) = {
46- let q = if ((B == 1))
47- then makeString(["%d%s", A, "increase"], a)
48- else if ((B == -1))
49- then makeString(["%d%s", A, "decrease"], a)
50- else makeString(["%d%s", A, "current"], a)
51- q
47+func A (B,C) = {
48+ let r = if ((C == 1))
49+ then makeString(["%d%s", B, "increase"], a)
50+ else if ((C == -1))
51+ then makeString(["%d%s", B, "decrease"], a)
52+ else makeString(["%d%s", B, "current"], a)
53+ r
5254 }
5355
5456
55-let C = addressFromStringValue(p(g))
57+let D = addressFromStringValue(q(g))
5658
57-let D = addressFromStringValue(p(e))
59+let E = addressFromStringValue(q(e))
5860
59-let E = addressFromStringValue(p(f))
61+let F = addressFromStringValue(q(f))
6062
61-func F () = "%s__managerPublicKey"
63+func G () = "%s__managerPublicKey"
6264
6365
64-func G () = "%s__managerVaultAddress"
66+func H () = "%s__managerVaultAddress"
6567
6668
67-func H () = {
68- let I = getString(G())
69- if ($isInstanceOf(I, "String"))
69+func I () = {
70+ let J = getString(H())
71+ if ($isInstanceOf(J, "String"))
7072 then {
71- let o = I
72- addressFromStringValue(o)
73+ let p = J
74+ addressFromStringValue(p)
7375 }
7476 else this
7577 }
7678
7779
78-func J () = {
79- let K = H()
80- let I = getString(K, F())
81- if ($isInstanceOf(I, "String"))
80+func K () = {
81+ let L = I()
82+ let J = getString(L, G())
83+ if ($isInstanceOf(J, "String"))
8284 then {
83- let o = I
84- fromBase58String(o)
85+ let p = J
86+ fromBase58String(p)
8587 }
86- else if ($isInstanceOf(I, "Unit"))
88+ else if ($isInstanceOf(J, "Unit"))
8789 then unit
8890 else throw("Match error")
8991 }
9092
9193
92-func L (M) = {
93- let I = J()
94- if ($isInstanceOf(I, "ByteVector"))
94+func M (N) = {
95+ let J = K()
96+ if ($isInstanceOf(J, "ByteVector"))
9597 then {
96- let N = I
97- (M.callerPublicKey == N)
98+ let O = J
99+ (N.callerPublicKey == O)
98100 }
99- else if ($isInstanceOf(I, "Unit"))
100- then (M.caller == this)
101+ else if ($isInstanceOf(J, "Unit"))
102+ then (N.caller == this)
101103 else throw("Match error")
102104 }
103105
104106
105-func O (M) = if (L(M))
107+func P (N) = if (M(N))
106108 then true
107- else n("permission denied")
109+ else o("permission denied")
108110
109111
110-func P (Q) = {
111- let I = Q
112- if ($isInstanceOf(I, "Int"))
112+func Q (R) = {
113+ let J = R
114+ if ($isInstanceOf(J, "Int"))
113115 then {
114- let R = I
115- R
116+ let S = J
117+ S
116118 }
117- else n("failed to cast into Integer")
119+ else o("failed to cast into Integer")
118120 }
119121
120122
121-func S (T,U,V) = {
122- let W = fraction(100, T, 120)
123- let X = min([fraction((100 + V), U, 100), W])
124- let Y = max([fraction((100 - V), U, 100), 0])
125- $Tuple3(X, U, Y)
123+func T (U,V,W) = {
124+ let X = fraction(100, U, 120)
125+ let Y = min([fraction((100 + W), V, 100), X])
126+ let Z = max([fraction((100 - W), V, 100), 0])
127+ $Tuple3(Y, V, Z)
126128 }
127129
128130
129-func Z () = {
130- let T = getIntegerValue(D, j)
131- let U = getIntegerValue(D, i)
132- let aa = getIntegerValue(this, k)
133- S(T, U, aa)
131+func aa () = {
132+ let U = getIntegerValue(E, j)
133+ let V = getIntegerValue(E, i)
134+ let ab = getIntegerValue(this, k)
135+ T(U, V, ab)
134136 }
135137
136138
137-func ab (E) = {
138- let ac = getIntegerValue(E, d)
139- let ad = getIntegerValue(E, l)
140- (((ad + (ac * c)) - height) - 1)
139+func ac (F) = {
140+ let ad = getIntegerValue(F, d)
141+ let ae = getIntegerValue(F, l)
142+ let af = valueOrElse(getInteger(this, n), c)
143+ (((ae + (ad * af)) - height) - 1)
141144 }
142145
143146
144-@Callable(M)
145-func constructor (ae,af,ag,ah,aa) = {
146- let ai = [O(M), if (isDefined(addressFromString(ae)))
147+@Callable(N)
148+func constructor (ag,ah,ai,aj,ab,af) = {
149+ let ak = [P(N), if (isDefined(addressFromString(ag)))
147150 then true
148- else n("Invalid boosting contract address"), if (isDefined(addressFromString(af)))
151+ else o("Invalid boosting contract address"), if (isDefined(addressFromString(ah)))
149152 then true
150- else n("Invalid emission contract address"), if (isDefined(addressFromString(ag)))
153+ else o("Invalid emission contract address"), if (isDefined(addressFromString(ai)))
151154 then true
152- else n("Invalid emission contract address"), if ((ah > 0))
155+ else o("Invalid emission contract address"), if ((aj > 0))
153156 then true
154- else n("invalid threshold"), if ((aa > 0))
157+ else o("invalid threshold"), if ((ab > 0))
155158 then true
156- else n("invalid rateChangeStep")]
157- if ((ai == ai))
159+ else o("invalid rateChangeStep"), if ((af > 0))
160+ then true
161+ else o("invalid votingEmissionEpochCount")]
162+ if ((ak == ak))
158163 then {
159- let aj = addressFromStringValue(ag)
160- $Tuple2([StringEntry(g, ae), StringEntry(e, af), StringEntry(f, ag), IntegerEntry(d, ab(aj)), IntegerEntry(h, ah), IntegerEntry(k, aa), IntegerEntry(l, height), StringEntry(m, s("0", "0", "0"))], unit)
164+ let al = addressFromStringValue(ai)
165+ $Tuple2([StringEntry(g, ag), StringEntry(e, ah), StringEntry(f, ai), IntegerEntry(d, ac(al)), IntegerEntry(h, aj), IntegerEntry(k, ab), IntegerEntry(n, af), IntegerEntry(l, height), StringEntry(m, t("0", "0", "0"))], unit)
161166 }
162167 else throw("Strict value is not equal to itself.")
163168 }
164169
165170
166171
167-@Callable(M)
168-func getRateChangeAmountsREADONLY () = $Tuple2(nil, Z())
172+@Callable(N)
173+func getRateChangeAmountsREADONLY () = $Tuple2(nil, aa())
169174
170175
171176
172-@Callable(M)
173-func vote (ak) = {
174- let y = getIntegerValue(l)
175- let al = (y + getIntegerValue(d))
176- let am = toString(M.caller)
177- let ai = [if ((al > height))
177+@Callable(N)
178+func vote (am) = {
179+ let z = getIntegerValue(l)
180+ let an = (z + getIntegerValue(d))
181+ let ao = toString(N.caller)
182+ let ak = [if ((an > height))
178183 then true
179- else n("too late to vote"), if (containsElement([1, 0, -1], ak))
184+ else o("too late to vote"), if (containsElement([1, 0, -1], am))
180185 then true
181- else n("not valid argument"), if (!(isDefined(getString(w(am, y)))))
186+ else o("not valid argument"), if (!(isDefined(getString(x(ao, z)))))
182187 then true
183- else n("you already voted")]
184- if ((ai == ai))
188+ else o("you already voted")]
189+ if ((ak == ak))
185190 then {
186- let A = invoke(C, "getUserGwxAmountAtHeightREADONLY", [am, al], nil)
187- let an = if ((P(A) > 0))
191+ let B = invoke(D, "getUserGwxAmountAtHeightREADONLY", [ao, an], nil)
192+ let ap = if ((Q(B) > 0))
188193 then true
189- else n("you don't have gwx")
190- if ((an == an))
194+ else o("you don't have gwx")
195+ if ((ap == ap))
191196 then {
192- let ao = split(getStringValue(m), a)
193- let ap = ao[1]
194- let aq = ao[2]
195- let ar = ao[3]
196- let as = if ((ak == 1))
197+ let aq = split(getStringValue(m), a)
198+ let ar = aq[1]
199+ let as = aq[2]
200+ let at = aq[3]
201+ let au = if ((am == 1))
197202 then {
198- let at = (parseIntValue(ap) + P(A))
199-[toString(at), aq, ar]
203+ let av = (parseIntValue(ar) + Q(B))
204+[toString(av), as, at]
200205 }
201- else if ((ak == -1))
206+ else if ((am == -1))
202207 then {
203- let au = (parseIntValue(ar) + P(A))
204-[ap, aq, toString(au)]
208+ let aw = (parseIntValue(at) + Q(B))
209+[ar, as, toString(aw)]
205210 }
206211 else {
207- let av = (parseIntValue(aq) + P(A))
208-[ap, toString(av), ar]
212+ let ax = (parseIntValue(as) + Q(B))
213+[ar, toString(ax), at]
209214 }
210- let aw = w(toString(M.caller), y)
211- let ax = z(toString(P(A)), ak)
212- $Tuple2([StringEntry(m, s(as[0], as[1], as[2])), StringEntry(aw, ax)], unit)
215+ let ay = x(toString(N.caller), z)
216+ let az = A(toString(Q(B)), am)
217+ $Tuple2([StringEntry(m, t(au[0], au[1], au[2])), StringEntry(ay, az)], unit)
213218 }
214219 else throw("Strict value is not equal to itself.")
215220 }
216221 else throw("Strict value is not equal to itself.")
217222 }
218223
219224
220225
221-@Callable(M)
226+@Callable(N)
222227 func cancelVote () = {
223- let y = getIntegerValue(l)
224- let al = (y + getIntegerValue(d))
225- let am = if ((M.caller == this))
226- then toString(M.originCaller)
227- else toString(M.caller)
228- let ai = [if ((al > height))
228+ let z = getIntegerValue(l)
229+ let an = (z + getIntegerValue(d))
230+ let ao = if ((N.caller == this))
231+ then toString(N.originCaller)
232+ else toString(N.caller)
233+ let ak = [if ((an > height))
229234 then true
230- else n("too late to cancel vote"), if (isDefined(getString(m)))
235+ else o("too late to cancel vote"), if (isDefined(getString(m)))
231236 then true
232- else n("no vote"), if (isDefined(getString(w(am, y))))
237+ else o("no vote"), if (isDefined(getString(x(ao, z))))
233238 then true
234- else n("no user vote")]
235- if ((ai == ai))
239+ else o("no user vote")]
240+ if ((ak == ak))
236241 then {
237- let B = split(getStringValue(w(am, y)), a)
238- let ax = B[1]
239- let ay = B[2]
240- let ao = split(getStringValue(m), a)
241- let ap = ao[1]
242- let aq = ao[2]
243- let ar = ao[3]
244- let az = if ((ay == "increase"))
242+ let C = split(getStringValue(x(ao, z)), a)
243+ let az = C[1]
244+ let aA = C[2]
245+ let aq = split(getStringValue(m), a)
246+ let ar = aq[1]
247+ let as = aq[2]
248+ let at = aq[3]
249+ let aB = if ((aA == "increase"))
245250 then {
246- let at = (parseIntValue(ap) - parseIntValue(ax))
247-[StringEntry(m, s(toString(at), aq, ar))]
251+ let av = (parseIntValue(ar) - parseIntValue(az))
252+[StringEntry(m, t(toString(av), as, at))]
248253 }
249- else if ((ay == "decrease"))
254+ else if ((aA == "decrease"))
250255 then {
251- let au = (parseIntValue(ar) - parseIntValue(ax))
252-[StringEntry(m, s(ap, aq, toString(au)))]
256+ let aw = (parseIntValue(at) - parseIntValue(az))
257+[StringEntry(m, t(ar, as, toString(aw)))]
253258 }
254259 else {
255- let av = (parseIntValue(aq) - parseIntValue(ax))
256-[StringEntry(m, s(ap, toString(av), ar))]
260+ let ax = (parseIntValue(as) - parseIntValue(az))
261+[StringEntry(m, t(ar, toString(ax), at))]
257262 }
258- let aA = [DeleteEntry(w(am, y))]
259- (az ++ aA)
263+ let aC = [DeleteEntry(x(ao, z))]
264+ (aB ++ aC)
260265 }
261266 else throw("Strict value is not equal to itself.")
262267 }
263268
264269
265270
266-@Callable(M)
267-func setThreshold (aB) = {
268- let ai = [O(M), if ((aB > 0))
271+@Callable(N)
272+func setThreshold (aD) = {
273+ let ak = [P(N), if ((aD > 0))
269274 then true
270- else n("invalid threshold")]
271- if ((ai == ai))
272- then $Tuple2([IntegerEntry(h, aB)], unit)
275+ else o("invalid threshold")]
276+ if ((ak == ak))
277+ then $Tuple2([IntegerEntry(h, aD)], unit)
273278 else throw("Strict value is not equal to itself.")
274279 }
275280
276281
277282
278-@Callable(M)
283+@Callable(N)
279284 func finalize () = {
280- let aC = if (if ((M.caller == E))
285+ let aE = if (if ((N.caller == F))
281286 then true
282- else O(M))
287+ else P(N))
283288 then true
284- else n("Permission denied")
285- if ((aC == aC))
289+ else o("Permission denied")
290+ if ((aE == aE))
286291 then {
287- let al = (getIntegerValue(l) + value(getInteger(d)))
288- if ((height >= al))
292+ let an = (getIntegerValue(l) + value(getInteger(d)))
293+ if ((height >= an))
289294 then {
290- let ao = split(value(getString(m)), a)
291- let ap = parseIntValue(ao[1])
292- let aq = parseIntValue(ao[2])
293- let ar = parseIntValue(ao[3])
294- let aD = ((ap + aq) + ar)
295- let ah = r(h)
296- let aE = Z()
297- let X = aE._1
298- let aF = aE._2
299- let Y = aE._3
300- let aG = [ap, aq, ar]
301- let aH = if (if ((ah > aD))
295+ let aq = split(value(getString(m)), a)
296+ let ar = parseIntValue(aq[1])
297+ let as = parseIntValue(aq[2])
298+ let at = parseIntValue(aq[3])
299+ let aF = ((ar + as) + at)
300+ let aj = s(h)
301+ let aG = aa()
302+ let Y = aG._1
303+ let aH = aG._2
304+ let Z = aG._3
305+ let aI = [ar, as, at]
306+ let aJ = if (if ((aj > aF))
302307 then true
303- else (aq == max(aG)))
308+ else (as == max(aI)))
304309 then unit
305- else if ((ap == max(aG)))
306- then X
307- else Y
308- let aI = {
309- let I = aH
310- if ($isInstanceOf(I, "Int"))
310+ else if ((ar == max(aI)))
311+ then Y
312+ else Z
313+ let aK = {
314+ let J = aJ
315+ if ($isInstanceOf(J, "Int"))
311316 then {
312- let aJ = I
313- let aK = invoke(D, "changeRatePerBlock", [aJ], nil)
314- if ((aK == aK))
315- then aK
317+ let aL = J
318+ let aM = invoke(E, "changeRatePerBlock", [aL], nil)
319+ if ((aM == aM))
320+ then aM
316321 else throw("Strict value is not equal to itself.")
317322 }
318323 else unit
319324 }
320- if ((aI == aI))
321- then [IntegerEntry(l, height), IntegerEntry(d, ab(E)), StringEntry(m, s("0", "0", "0"))]
325+ if ((aK == aK))
326+ then [IntegerEntry(l, height), IntegerEntry(d, ac(F)), StringEntry(m, t("0", "0", "0"))]
322327 else throw("Strict value is not equal to itself.")
323328 }
324329 else nil
325330 }
326331 else throw("Strict value is not equal to itself.")
327332 }
328333
329334
330-@Verifier(aL)
331-func aM () = {
332- let aN = {
333- let I = J()
334- if ($isInstanceOf(I, "ByteVector"))
335+@Verifier(aN)
336+func aO () = {
337+ let aP = {
338+ let J = K()
339+ if ($isInstanceOf(J, "ByteVector"))
335340 then {
336- let N = I
337- N
341+ let O = J
342+ O
338343 }
339- else if ($isInstanceOf(I, "Unit"))
340- then aL.senderPublicKey
344+ else if ($isInstanceOf(J, "Unit"))
345+ then aN.senderPublicKey
341346 else throw("Match error")
342347 }
343- sigVerify(aL.bodyBytes, aL.proofs[0], aN)
348+ sigVerify(aN.bodyBytes, aN.proofs[0], aP)
344349 }
345350

github/deemru/w8io/873ac7e 
104.24 ms