tx · Fp8MBeMkygTfLAMnFb1R2VC3nid6t4ryUgBSzUhm9uHq

3N4ziXSMRverXyxHDUKKMR9MHXnB3TyU3Yh:  -0.01000000 Waves

2023.05.17 10:30 [2581656] smart account 3N4ziXSMRverXyxHDUKKMR9MHXnB3TyU3Yh > SELF 0.00000000 Waves

{ "type": 13, "id": "Fp8MBeMkygTfLAMnFb1R2VC3nid6t4ryUgBSzUhm9uHq", "fee": 1000000, "feeAssetId": null, "timestamp": 1684308687684, "version": 2, "chainId": 84, "sender": "3N4ziXSMRverXyxHDUKKMR9MHXnB3TyU3Yh", "senderPublicKey": "EU9obW1yVhR8qug3EmXPeew3DMagvJFQzY5Ku8bmcsU7", "proofs": [ "46B6rbeeAUSazAmFcUXKQjRqGxyxbNYwgXLEz8yGXgyeAux7te4VSPn3AgAHFstPvBBSrtYwhmZB8LcUUtKx7PY5" ], "script": "base64:BgIeCAISBgoECAgBARIAEgMKAQESABIDCgEBEgQKAggIGQAJc2VwYXJhdG9yAgJfXwAOa2V5RXBvY2hMZW5ndGgJALkJAgkAzAgCAgIlcwkAzAgCAgtlcG9jaExlbmd0aAUDbmlsBQlzZXBhcmF0b3IAE2tleUVtaXNzaW9uQ29udHJhY3QJALkJAgkAzAgCAgIlcwkAzAgCAhBlbWlzc2lvbkNvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgATa2V5Qm9vc3RpbmdDb250cmFjdAkAuQkCCQDMCAICAiVzCQDMCAICEGJvb3N0aW5nQ29udHJhY3QFA25pbAUJc2VwYXJhdG9yAAxrZXlUaHJlc2hvbGQJALkJAgkAzAgCAgIlcwkAzAgCAg92b3RpbmdUaHJlc2hvbGQFA25pbAUJc2VwYXJhdG9yAA9rZXlSYXRlUGVyQmxvY2sJALkJAgkAzAgCAgQlcyVzCQDMCAICDHJhdGVQZXJCbG9jawkAzAgCAgdjdXJyZW50BQNuaWwFCXNlcGFyYXRvcgASa2V5UmF0ZVBlckJsb2NrTWF4CQC5CQIJAMwIAgIEJXMlcwkAzAgCAg9yYXRlUGVyQmxvY2tNYXgJAMwIAgIHY3VycmVudAUDbmlsBQlzZXBhcmF0b3IAEWtleVJhdGVDaGFuZ2VTdGVwCQC5CQIJAMwIAgICJXMJAMwIAgIOcmF0ZUNoYW5nZVN0ZXAFA25pbAUJc2VwYXJhdG9yAQ9nZXRTdHJpbmdPckZhaWwBA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFA2tleQkArAICBQNrZXkCDyBpcyBub3QgZGVmaW5lZAEMZ2V0SW50T3JGYWlsAQNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQNrZXkJAKwCAgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBDmtleVN0YXJ0SGVpZ2h0AAkAuQkCCQDMCAICAiVzCQDMCAICC3N0YXJ0SGVpZ2h0BQNuaWwFCXNlcGFyYXRvcgEPa2V5Vm90aW5nUmVzdWx0AAkAuQkCCQDMCAICAiVzCQDMCAICDHZvdGluZ1Jlc3VsdAUDbmlsBQlzZXBhcmF0b3IBCnRvdGFsVm90ZXMDDXRvdGFsSW5jcmVhc2UJdG90YWxOb25lDXRvdGFsRGVjcmVhc2UJALkJAgkAzAgCAgYlZCVkJWQJAMwIAgUNdG90YWxJbmNyZWFzZQkAzAgCBQl0b3RhbE5vbmUJAMwIAgUNdG90YWxEZWNyZWFzZQUDbmlsBQlzZXBhcmF0b3IBB2tleVZvdGUBDHZvdGVyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIEdm90ZQkAzAgCBQx2b3RlckFkZHJlc3MFA25pbAUJc2VwYXJhdG9yAQxrZXlWb3RlVmFsdWUCCWd3eEFtb3VudAR2b3RlBANrZXkDCQAAAgUEdm90ZQABCQC5CQIJAMwIAgIEJWQlcwkAzAgCBQlnd3hBbW91bnQJAMwIAgIIaW5jcmVhc2UFA25pbAUJc2VwYXJhdG9yAwkAAAIFBHZvdGUA////////////AQkAuQkCCQDMCAICBCVkJXMJAMwIAgUJZ3d4QW1vdW50CQDMCAICCGRlY3JlYXNlBQNuaWwFCXNlcGFyYXRvcgkAuQkCCQDMCAICBCVkJXMJAMwIAgUJZ3d4QW1vdW50CQDMCAICBG5vbmUFA25pbAUJc2VwYXJhdG9yBQNrZXkAEGJvb3N0aW5nQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQ9nZXRTdHJpbmdPckZhaWwBBRNrZXlCb29zdGluZ0NvbnRyYWN0ABBlbWlzc2lvbkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQEPZ2V0U3RyaW5nT3JGYWlsAQUTa2V5RW1pc3Npb25Db250cmFjdAETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAIXJXNfX21hbmFnZXJWYXVsdEFkZHJlc3MBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCiCAEJARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAXMFBHRoaXMBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABBNtYW5hZ2VyVmF1bHRBZGRyZXNzCQEcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcwAEByRtYXRjaDAJAJ0IAgUTbWFuYWdlclZhdWx0QWRkcmVzcwkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEJaXNNYW5hZ2VyAQFpBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkDCQEJaXNNYW5hZ2VyAQUBaQYJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAEFYXNJbnQBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACA0ludAQGdmFsSW50BQckbWF0Y2gwBQZ2YWxJbnQJAAIBAhtmYWlsZWQgdG8gY2FzdCBpbnRvIEludGVnZXIBC2NhbGNOZXdSYXRlAw9yYXRlUGVyQmxvY2tNYXgMcmF0ZVBlckJsb2NrCmNoYW5nZVN0ZXAECm1heEFsbG93ZWQJAGsDAGQFD3JhdGVQZXJCbG9ja01heAB4BA1pbmNyZWFzZWRSYXRlCQCXAwEJAMwIAgkAawMJAGQCAGQFCmNoYW5nZVN0ZXAFDHJhdGVQZXJCbG9jawBkCQDMCAIFCm1heEFsbG93ZWQFA25pbAQNZGVjcmVhc2VkUmF0ZQkAlgMBCQDMCAIJAGsDCQBlAgBkBQpjaGFuZ2VTdGVwBQxyYXRlUGVyQmxvY2sAZAkAzAgCAAAFA25pbAkAlQoDBQ1pbmNyZWFzZWRSYXRlBQxyYXRlUGVyQmxvY2sFDWRlY3JlYXNlZFJhdGUGAWkBC2NvbnN0cnVjdG9yBBNib29zdGluZ0NvbnRyYWN0UHJtE2VtaXNzaW9uQ29udHJhY3RQcm0Rdm90aW5nRHVyYXRpb25Qcm0JdGhyZXNob2xkBAZjaGVja3MJAMwIAgMJAQlpc0RlZmluZWQBCQCmCAEFE2Jvb3N0aW5nQ29udHJhY3RQcm0GCQACAQIhSW52YWxpZCBib29zdGluZyBjb250cmFjdCBhZGRyZXNzCQDMCAIDCQEJaXNEZWZpbmVkAQkApggBBRNlbWlzc2lvbkNvbnRyYWN0UHJtBgkAAgECIUludmFsaWQgZW1pc3Npb24gY29udHJhY3QgYWRkcmVzcwkAzAgCAwkAZgIFEXZvdGluZ0R1cmF0aW9uUHJtAAAGCQACAQIXSW52YWxpZCB2b3RpbmcgZHVyYXRpb24JAMwIAgMJAGYCBQl0aHJlc2hvbGQAAAYJAAIBAhFpbnZhbGlkIHRocmVzaG9sZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUTa2V5Qm9vc3RpbmdDb250cmFjdAUTYm9vc3RpbmdDb250cmFjdFBybQkAzAgCCQELU3RyaW5nRW50cnkCBRNrZXlFbWlzc2lvbkNvbnRyYWN0BRNlbWlzc2lvbkNvbnRyYWN0UHJtCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rZXlFcG9jaExlbmd0aAURdm90aW5nRHVyYXRpb25Qcm0JAMwIAgkBDEludGVnZXJFbnRyeQIFDGtleVRocmVzaG9sZAUJdGhyZXNob2xkBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEcZ2V0UmF0ZUNoYW5nZUFtb3VudHNSRUFET05MWQAED3JhdGVQZXJCbG9ja01heAkBEUBleHRyTmF0aXZlKDEwNTApAgUQZW1pc3Npb25Db250cmFjdAUSa2V5UmF0ZVBlckJsb2NrTWF4BAxyYXRlUGVyQmxvY2sJARFAZXh0ck5hdGl2ZSgxMDUwKQIFEGVtaXNzaW9uQ29udHJhY3QFD2tleVJhdGVQZXJCbG9jawQOcmF0ZUNoYW5nZVN0ZXAJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEWtleVJhdGVDaGFuZ2VTdGVwCQCUCgIFA25pbAkBC2NhbGNOZXdSYXRlAwUPcmF0ZVBlckJsb2NrTWF4BQxyYXRlUGVyQmxvY2sFDnJhdGVDaGFuZ2VTdGVwAWkBBHZvdGUBB2luRmF2b3IEEnZvdGluZ0ZpbmlzaEhlaWdodAkAZAIJAQV2YWx1ZQEJAJ8IAQkBDmtleVN0YXJ0SGVpZ2h0AAkBBXZhbHVlAQkAnwgBBQ5rZXlFcG9jaExlbmd0aAQGY2hlY2tzCQDMCAIDCQBmAgUSdm90aW5nRmluaXNoSGVpZ2h0BQZoZWlnaHQGCQACAQIQdG9vIGxhdGUgdG8gdm90ZQkAzAgCAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgABCQDMCAIAAAkAzAgCAP///////////wEFA25pbAUHaW5GYXZvcgYJAAIBAhJub3QgdmFsaWQgYXJndW1lbnQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQJZ3d4QW1vdW50CQD8BwQFEGJvb3N0aW5nQ29udHJhY3QCIGdldFVzZXJHd3hBbW91bnRBdEhlaWdodFJFQURPTkxZCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFEnZvdGluZ0ZpbmlzaEhlaWdodAUDbmlsBQNuaWwEB25vdFplcm8DCQBmAgkBBWFzSW50AQUJZ3d4QW1vdW50AAAGCQACAQISeW91IGRvbid0IGhhdmUgZ3d4AwkAAAIFB25vdFplcm8FB25vdFplcm8EBHZvdGUEByRtYXRjaDAJAKIIAQkBB2tleVZvdGUBCQClCAEIBQFpBmNhbGxlcgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAEBHZvdGUJALUJAgUBcwUJc2VwYXJhdG9yBAl2b3RlVmFsdWUJAJEDAgUEdm90ZQABBAh2b3RlVHlwZQkAkQMCBQR2b3RlAAIEEWlzVm90ZVR5cGVTaW1pbGFyAwMDCQAAAgUIdm90ZVR5cGUCCGluY3JlYXNlCQAAAgUHaW5GYXZvcgABBwYDCQAAAgUIdm90ZVR5cGUCCGRlY3JlYXNlCQAAAgUHaW5GYXZvcgD///////////8BBwYDCQAAAgUIdm90ZVR5cGUCBG5vbmUJAAACBQdpbkZhdm9yAAAHBBJpc1ZvdGVWYWx1ZVNpbWlsYXIDBRFpc1ZvdGVUeXBlU2ltaWxhcgkAAAIJAQVhc0ludAEFCWd3eEFtb3VudAkBDXBhcnNlSW50VmFsdWUBBQl2b3RlVmFsdWUHBBBpc05ld1ZvdGVTaW1pbGFyAwMFEWlzVm90ZVR5cGVTaW1pbGFyBRJpc1ZvdGVWYWx1ZVNpbWlsYXIHCQACAQIReW91IGFscmVhZHkgdm90ZWQJAPwHBAUEdGhpcwIKY2FuY2VsVm90ZQUDbmlsBQNuaWwFEGlzTmV3Vm90ZVNpbWlsYXIDCQABAgUHJG1hdGNoMAIEVW5pdAQBdQUHJG1hdGNoMAUBdQkAAgECC01hdGNoIGVycm9yAwkAAAIFBHZvdGUFBHZvdGUEDHZvdGluZ1Jlc3VsdAkAtQkCCQEFdmFsdWUBCQCiCAEJAQ9rZXlWb3RpbmdSZXN1bHQABQlzZXBhcmF0b3IED3ZvdGVzVG9JbmNyZWFzZQkAkQMCBQx2b3RpbmdSZXN1bHQAAQQLdm90ZXNUb05vbmUJAJEDAgUMdm90aW5nUmVzdWx0AAIED3ZvdGVzVG9EZWNyZWFzZQkAkQMCBQx2b3RpbmdSZXN1bHQAAwQbbmV3UG9zaXRpdmVBbmROZWdhdGl2ZVZvdGVzAwkAAAIFB2luRmF2b3IAAQQQbmV3UG9zaXRpdmVWb3RlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQUPdm90ZXNUb0luY3JlYXNlCQEFYXNJbnQBBQlnd3hBbW91bnQJAMwIAgkApAMBBRBuZXdQb3NpdGl2ZVZvdGVzCQDMCAIFC3ZvdGVzVG9Ob25lCQDMCAIFD3ZvdGVzVG9EZWNyZWFzZQUDbmlsAwkAAAIFB2luRmF2b3IA////////////AQQQbmV3TmVnYXRpdmVWb3RlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQULdm90ZXNUb05vbmUJAQVhc0ludAEFCWd3eEFtb3VudAkAzAgCBQ92b3Rlc1RvSW5jcmVhc2UJAMwIAgULdm90ZXNUb05vbmUJAMwIAgkApAMBBRBuZXdOZWdhdGl2ZVZvdGVzBQNuaWwEDG5ld05vbmVWb3RlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQULdm90ZXNUb05vbmUJAQVhc0ludAEFCWd3eEFtb3VudAkAzAgCBQ92b3Rlc1RvSW5jcmVhc2UJAMwIAgkApAMBBQxuZXdOb25lVm90ZXMJAMwIAgUPdm90ZXNUb0RlY3JlYXNlBQNuaWwEB3ZvdGVLZXkJAQdrZXlWb3RlAQkApQgBCAUBaQZjYWxsZXIECXZvdGVWYWx1ZQkBDGtleVZvdGVWYWx1ZQIJAKQDAQkBBWFzSW50AQUJZ3d4QW1vdW50BQdpbkZhdm9yCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleVZvdGluZ1Jlc3VsdAAJAQp0b3RhbFZvdGVzAwkAkQMCBRtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAAkAkQMCBRtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAQkAkQMCBRtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAgkAzAgCCQELU3RyaW5nRW50cnkCBQd2b3RlS2V5BQl2b3RlVmFsdWUFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpjYW5jZWxWb3RlAAQLdXNlckFkZHJlc3MDCQAAAggFAWkGY2FsbGVyBQR0aGlzCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkApQgBCAUBaQZjYWxsZXIEBmNoZWNrcwkAzAgCAwkBCWlzRGVmaW5lZAEJAKIIAQkBD2tleVZvdGluZ1Jlc3VsdAAGCQACAQIHbm8gdm90ZQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAR2b3RlCQC1CQIJAQV2YWx1ZQEJAKIIAQkBB2tleVZvdGUBBQt1c2VyQWRkcmVzcwUJc2VwYXJhdG9yBAl2b3RlVmFsdWUJAJEDAgUEdm90ZQABBAh2b3RlVHlwZQkAkQMCBQR2b3RlAAIEDHZvdGluZ1Jlc3VsdAkAtQkCCQEFdmFsdWUBCQCiCAEJAQ9rZXlWb3RpbmdSZXN1bHQABQlzZXBhcmF0b3IED3ZvdGVzVG9JbmNyZWFzZQkAkQMCBQx2b3RpbmdSZXN1bHQAAQQLdm90ZXNUb05vbmUJAJEDAgUMdm90aW5nUmVzdWx0AAIED3ZvdGVzVG9EZWNyZWFzZQkAkQMCBQx2b3RpbmdSZXN1bHQAAwQHYWN0aW9ucwMJAAACBQh2b3RlVHlwZQIIaW5jcmVhc2UEEG5ld0luY3JlYXNlVm90ZXMJAGUCCQENcGFyc2VJbnRWYWx1ZQEFD3ZvdGVzVG9JbmNyZWFzZQkBDXBhcnNlSW50VmFsdWUBBQl2b3RlVmFsdWUJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5Vm90aW5nUmVzdWx0AAkBCnRvdGFsVm90ZXMDCQCkAwEFEG5ld0luY3JlYXNlVm90ZXMFC3ZvdGVzVG9Ob25lBQ92b3Rlc1RvRGVjcmVhc2UJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleVZvdGUBBQt1c2VyQWRkcmVzcwUDbmlsBQR1bml0AwkAAAIFCHZvdGVUeXBlAglkZXNjcmVhc2UEEG5ld0RlY3JlYXNlVm90ZXMJAGUCCQENcGFyc2VJbnRWYWx1ZQEFD3ZvdGVzVG9EZWNyZWFzZQkBDXBhcnNlSW50VmFsdWUBBQl2b3RlVmFsdWUJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5Vm90aW5nUmVzdWx0AAkBCnRvdGFsVm90ZXMDBQ92b3Rlc1RvSW5jcmVhc2UFC3ZvdGVzVG9Ob25lCQCkAwEFEG5ld0RlY3JlYXNlVm90ZXMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleVZvdGUBBQt1c2VyQWRkcmVzcwUDbmlsBQR1bml0BAxuZXdOb25lVm90ZXMJAGUCCQENcGFyc2VJbnRWYWx1ZQEFC3ZvdGVzVG9Ob25lCQENcGFyc2VJbnRWYWx1ZQEFCXZvdGVWYWx1ZQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlWb3RpbmdSZXN1bHQACQEKdG90YWxWb3RlcwMFD3ZvdGVzVG9JbmNyZWFzZQkApAMBBQxuZXdOb25lVm90ZXMFD3ZvdGVzVG9EZWNyZWFzZQkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5Vm90ZQEFC3VzZXJBZGRyZXNzBQNuaWwFBHVuaXQFB2FjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMc2V0VGhyZXNob2xkAQxuZXdUaHJlc2hvbGQEBmNoZWNrcwkAzAgCCQELbXVzdE1hbmFnZXIBBQFpCQDMCAIDCQBmAgUMbmV3VGhyZXNob2xkAAAGCQACAQIRaW52YWxpZCB0aHJlc2hvbGQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrZXlUaHJlc2hvbGQFDG5ld1RocmVzaG9sZAUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGZpbmFsaXplAg1hbW91bnRBc3NldElkDHByaWNlQXNzZXRJZAQSdm90aW5nRmluaXNoSGVpZ2h0CQBkAgkBBXZhbHVlAQkAnwgBCQEOa2V5U3RhcnRIZWlnaHQACQEFdmFsdWUBCQCfCAEFDmtleUVwb2NoTGVuZ3RoBAZjaGVja3MJAMwIAgMJAGcCBQZoZWlnaHQFEnZvdGluZ0ZpbmlzaEhlaWdodAYJAAIBAiJpbnN1ZmZpY2llbnQgaGVpZ2h0IGZvciBjb21wbGV0aW9uBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDHZvdGluZ1Jlc3VsdAkAtQkCCQEFdmFsdWUBCQCiCAEJAQ9rZXlWb3RpbmdSZXN1bHQABQlzZXBhcmF0b3IED3ZvdGVzVG9JbmNyZWFzZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDHZvdGluZ1Jlc3VsdAABBAt2b3Rlc1RvTm9uZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDHZvdGluZ1Jlc3VsdAACBA92b3Rlc1RvRGVjcmVhc2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQx2b3RpbmdSZXN1bHQAAwQIYWxsVm90ZXMJAGQCCQBkAgUPdm90ZXNUb0luY3JlYXNlBQt2b3Rlc1RvTm9uZQUPdm90ZXNUb0RlY3JlYXNlBAl0aHJlc2hvbGQJAQxnZXRJbnRPckZhaWwBBQxrZXlUaHJlc2hvbGQEB2FjdGlvbnMDAwkAZwIFCGFsbFZvdGVzBQl0aHJlc2hvbGQGBwUDbmlsBQNuaWwFB2FjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4A0FLFGQ==", "height": 2581656, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FpMcHXZKes1tdv5PDmm3WTWjR1gUqfVCZYoVgmH6Y5DW Next: HqH4q7b9MnoFm2K46edyUPLitFdVdorLF8Xx1PL3z5Gj Diff:
OldNewDifferences
108108
109109
110110 @Callable(i)
111-func constructor (boostingContractPrm,emissionContractPrm,factoryContractPrm,votingDurationPrm,threshold) = {
111+func constructor (boostingContractPrm,emissionContractPrm,votingDurationPrm,threshold) = {
112112 let checks = [if (isDefined(addressFromString(boostingContractPrm)))
113113 then true
114114 else throw("Invalid boosting contract address"), if (isDefined(addressFromString(emissionContractPrm)))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "__"
55
66 let keyEpochLength = makeString(["%s", "epochLength"], separator)
77
88 let keyEmissionContract = makeString(["%s", "emissionContract"], separator)
99
1010 let keyBoostingContract = makeString(["%s", "boostingContract"], separator)
1111
1212 let keyThreshold = makeString(["%s", "votingThreshold"], separator)
1313
1414 let keyRatePerBlock = makeString(["%s%s", "ratePerBlock", "current"], separator)
1515
1616 let keyRatePerBlockMax = makeString(["%s%s", "ratePerBlockMax", "current"], separator)
1717
1818 let keyRateChangeStep = makeString(["%s", "rateChangeStep"], separator)
1919
2020 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (key + " is not defined"))
2121
2222
2323 func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), (key + " is not defined"))
2424
2525
2626 func keyStartHeight () = makeString(["%s", "startHeight"], separator)
2727
2828
2929 func keyVotingResult () = makeString(["%s", "votingResult"], separator)
3030
3131
3232 func totalVotes (totalIncrease,totalNone,totalDecrease) = makeString(["%d%d%d", totalIncrease, totalNone, totalDecrease], separator)
3333
3434
3535 func keyVote (voterAddress) = makeString(["%s%s", "vote", voterAddress], separator)
3636
3737
3838 func keyVoteValue (gwxAmount,vote) = {
3939 let key = if ((vote == 1))
4040 then makeString(["%d%s", gwxAmount, "increase"], separator)
4141 else if ((vote == -1))
4242 then makeString(["%d%s", gwxAmount, "decrease"], separator)
4343 else makeString(["%d%s", gwxAmount, "none"], separator)
4444 key
4545 }
4646
4747
4848 let boostingContract = addressFromStringValue(getStringOrFail(keyBoostingContract))
4949
5050 let emissionContract = addressFromStringValue(getStringOrFail(keyEmissionContract))
5151
5252 func keyManagerPublicKey () = "%s__managerPublicKey"
5353
5454
5555 func keyManagerVaultAddress () = "%s__managerVaultAddress"
5656
5757
5858 func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
5959 case s: String =>
6060 addressFromStringValue(s)
6161 case _ =>
6262 this
6363 }
6464
6565
6666 func managerPublicKeyOrUnit () = {
6767 let managerVaultAddress = getManagerVaultAddressOrThis()
6868 match getString(managerVaultAddress, keyManagerPublicKey()) {
6969 case s: String =>
7070 fromBase58String(s)
7171 case _: Unit =>
7272 unit
7373 case _ =>
7474 throw("Match error")
7575 }
7676 }
7777
7878
7979 func isManager (i) = match managerPublicKeyOrUnit() {
8080 case pk: ByteVector =>
8181 (i.callerPublicKey == pk)
8282 case _: Unit =>
8383 (i.caller == this)
8484 case _ =>
8585 throw("Match error")
8686 }
8787
8888
8989 func mustManager (i) = if (isManager(i))
9090 then true
9191 else throw("permission denied")
9292
9393
9494 func asInt (val) = match val {
9595 case valInt: Int =>
9696 valInt
9797 case _ =>
9898 throw("failed to cast into Integer")
9999 }
100100
101101
102102 func calcNewRate (ratePerBlockMax,ratePerBlock,changeStep) = {
103103 let maxAllowed = fraction(100, ratePerBlockMax, 120)
104104 let increasedRate = min([fraction((100 + changeStep), ratePerBlock, 100), maxAllowed])
105105 let decreasedRate = max([fraction((100 - changeStep), ratePerBlock, 100), 0])
106106 $Tuple3(increasedRate, ratePerBlock, decreasedRate)
107107 }
108108
109109
110110 @Callable(i)
111-func constructor (boostingContractPrm,emissionContractPrm,factoryContractPrm,votingDurationPrm,threshold) = {
111+func constructor (boostingContractPrm,emissionContractPrm,votingDurationPrm,threshold) = {
112112 let checks = [if (isDefined(addressFromString(boostingContractPrm)))
113113 then true
114114 else throw("Invalid boosting contract address"), if (isDefined(addressFromString(emissionContractPrm)))
115115 then true
116116 else throw("Invalid emission contract address"), if ((votingDurationPrm > 0))
117117 then true
118118 else throw("Invalid voting duration"), if ((threshold > 0))
119119 then true
120120 else throw("invalid threshold")]
121121 if ((checks == checks))
122122 then $Tuple2([StringEntry(keyBoostingContract, boostingContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), IntegerEntry(keyEpochLength, votingDurationPrm), IntegerEntry(keyThreshold, threshold)], unit)
123123 else throw("Strict value is not equal to itself.")
124124 }
125125
126126
127127
128128 @Callable(i)
129129 func getRateChangeAmountsREADONLY () = {
130130 let ratePerBlockMax = getIntegerValue(emissionContract, keyRatePerBlockMax)
131131 let ratePerBlock = getIntegerValue(emissionContract, keyRatePerBlock)
132132 let rateChangeStep = getIntegerValue(this, keyRateChangeStep)
133133 $Tuple2(nil, calcNewRate(ratePerBlockMax, ratePerBlock, rateChangeStep))
134134 }
135135
136136
137137
138138 @Callable(i)
139139 func vote (inFavor) = {
140140 let votingFinishHeight = (value(getInteger(keyStartHeight())) + value(getInteger(keyEpochLength)))
141141 let checks = [if ((votingFinishHeight > height))
142142 then true
143143 else throw("too late to vote"), if (containsElement([1, 0, -1], inFavor))
144144 then true
145145 else throw("not valid argument")]
146146 if ((checks == checks))
147147 then {
148148 let gwxAmount = invoke(boostingContract, "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), votingFinishHeight], nil)
149149 let notZero = if ((asInt(gwxAmount) > 0))
150150 then true
151151 else throw("you don't have gwx")
152152 if ((notZero == notZero))
153153 then {
154154 let vote = match getString(keyVote(toString(i.caller))) {
155155 case s: String =>
156156 let vote = split(s, separator)
157157 let voteValue = vote[1]
158158 let voteType = vote[2]
159159 let isVoteTypeSimilar = if (if (if ((voteType == "increase"))
160160 then (inFavor == 1)
161161 else false)
162162 then true
163163 else if ((voteType == "decrease"))
164164 then (inFavor == -1)
165165 else false)
166166 then true
167167 else if ((voteType == "none"))
168168 then (inFavor == 0)
169169 else false
170170 let isVoteValueSimilar = if (isVoteTypeSimilar)
171171 then (asInt(gwxAmount) == parseIntValue(voteValue))
172172 else false
173173 let isNewVoteSimilar = if (if (isVoteTypeSimilar)
174174 then isVoteValueSimilar
175175 else false)
176176 then throw("you already voted")
177177 else invoke(this, "cancelVote", nil, nil)
178178 isNewVoteSimilar
179179 case u: Unit =>
180180 u
181181 case _ =>
182182 throw("Match error")
183183 }
184184 if ((vote == vote))
185185 then {
186186 let votingResult = split(value(getString(keyVotingResult())), separator)
187187 let votesToIncrease = votingResult[1]
188188 let votesToNone = votingResult[2]
189189 let votesToDecrease = votingResult[3]
190190 let newPositiveAndNegativeVotes = if ((inFavor == 1))
191191 then {
192192 let newPositiveVotes = (parseIntValue(votesToIncrease) + asInt(gwxAmount))
193193 [toString(newPositiveVotes), votesToNone, votesToDecrease]
194194 }
195195 else if ((inFavor == -1))
196196 then {
197197 let newNegativeVotes = (parseIntValue(votesToNone) + asInt(gwxAmount))
198198 [votesToIncrease, votesToNone, toString(newNegativeVotes)]
199199 }
200200 else {
201201 let newNoneVotes = (parseIntValue(votesToNone) + asInt(gwxAmount))
202202 [votesToIncrease, toString(newNoneVotes), votesToDecrease]
203203 }
204204 let voteKey = keyVote(toString(i.caller))
205205 let voteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
206206 $Tuple2([StringEntry(keyVotingResult(), totalVotes(newPositiveAndNegativeVotes[0], newPositiveAndNegativeVotes[1], newPositiveAndNegativeVotes[2])), StringEntry(voteKey, voteValue)], unit)
207207 }
208208 else throw("Strict value is not equal to itself.")
209209 }
210210 else throw("Strict value is not equal to itself.")
211211 }
212212 else throw("Strict value is not equal to itself.")
213213 }
214214
215215
216216
217217 @Callable(i)
218218 func cancelVote () = {
219219 let userAddress = if ((i.caller == this))
220220 then toString(i.originCaller)
221221 else toString(i.caller)
222222 let checks = [if (isDefined(getString(keyVotingResult())))
223223 then true
224224 else throw("no vote")]
225225 if ((checks == checks))
226226 then {
227227 let vote = split(value(getString(keyVote(userAddress))), separator)
228228 let voteValue = vote[1]
229229 let voteType = vote[2]
230230 let votingResult = split(value(getString(keyVotingResult())), separator)
231231 let votesToIncrease = votingResult[1]
232232 let votesToNone = votingResult[2]
233233 let votesToDecrease = votingResult[3]
234234 let actions = if ((voteType == "increase"))
235235 then {
236236 let newIncreaseVotes = (parseIntValue(votesToIncrease) - parseIntValue(voteValue))
237237 $Tuple2([StringEntry(keyVotingResult(), totalVotes(toString(newIncreaseVotes), votesToNone, votesToDecrease)), DeleteEntry(keyVote(userAddress))], unit)
238238 }
239239 else if ((voteType == "descrease"))
240240 then {
241241 let newDecreaseVotes = (parseIntValue(votesToDecrease) - parseIntValue(voteValue))
242242 $Tuple2([StringEntry(keyVotingResult(), totalVotes(votesToIncrease, votesToNone, toString(newDecreaseVotes))), DeleteEntry(keyVote(userAddress))], unit)
243243 }
244244 else {
245245 let newNoneVotes = (parseIntValue(votesToNone) - parseIntValue(voteValue))
246246 $Tuple2([StringEntry(keyVotingResult(), totalVotes(votesToIncrease, toString(newNoneVotes), votesToDecrease)), DeleteEntry(keyVote(userAddress))], unit)
247247 }
248248 actions
249249 }
250250 else throw("Strict value is not equal to itself.")
251251 }
252252
253253
254254
255255 @Callable(i)
256256 func setThreshold (newThreshold) = {
257257 let checks = [mustManager(i), if ((newThreshold > 0))
258258 then true
259259 else throw("invalid threshold")]
260260 if ((checks == checks))
261261 then $Tuple2([IntegerEntry(keyThreshold, newThreshold)], unit)
262262 else throw("Strict value is not equal to itself.")
263263 }
264264
265265
266266
267267 @Callable(i)
268268 func finalize (amountAssetId,priceAssetId) = {
269269 let votingFinishHeight = (value(getInteger(keyStartHeight())) + value(getInteger(keyEpochLength)))
270270 let checks = [if ((height >= votingFinishHeight))
271271 then true
272272 else throw("insufficient height for completion")]
273273 if ((checks == checks))
274274 then {
275275 let votingResult = split(value(getString(keyVotingResult())), separator)
276276 let votesToIncrease = parseIntValue(votingResult[1])
277277 let votesToNone = parseIntValue(votingResult[2])
278278 let votesToDecrease = parseIntValue(votingResult[3])
279279 let allVotes = ((votesToIncrease + votesToNone) + votesToDecrease)
280280 let threshold = getIntOrFail(keyThreshold)
281281 let actions = if (if ((allVotes >= threshold))
282282 then true
283283 else false)
284284 then nil
285285 else nil
286286 actions
287287 }
288288 else throw("Strict value is not equal to itself.")
289289 }
290290
291291

github/deemru/w8io/873ac7e 
42.47 ms