tx · FpMcHXZKes1tdv5PDmm3WTWjR1gUqfVCZYoVgmH6Y5DW

3N4ziXSMRverXyxHDUKKMR9MHXnB3TyU3Yh:  -0.01000000 Waves

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

{ "type": 13, "id": "FpMcHXZKes1tdv5PDmm3WTWjR1gUqfVCZYoVgmH6Y5DW", "fee": 1000000, "feeAssetId": null, "timestamp": 1684308612823, "version": 2, "chainId": 84, "sender": "3N4ziXSMRverXyxHDUKKMR9MHXnB3TyU3Yh", "senderPublicKey": "EU9obW1yVhR8qug3EmXPeew3DMagvJFQzY5Ku8bmcsU7", "proofs": [ "5thfTcSanXEW1kYR3XgQUmQLhPXpChZnR3YeB9JCVGSoDLgGkdSnM7EguFPWzVtawuedhUHyBafdfQ9uU14az3sT" ], "script": "base64:BgIfCAISBwoFCAgIAQESABIDCgEBEgASAwoBARIECgIICBkACXNlcGFyYXRvcgICX18ADmtleUVwb2NoTGVuZ3RoCQC5CQIJAMwIAgICJXMJAMwIAgILZXBvY2hMZW5ndGgFA25pbAUJc2VwYXJhdG9yABNrZXlFbWlzc2lvbkNvbnRyYWN0CQC5CQIJAMwIAgICJXMJAMwIAgIQZW1pc3Npb25Db250cmFjdAUDbmlsBQlzZXBhcmF0b3IAE2tleUJvb3N0aW5nQ29udHJhY3QJALkJAgkAzAgCAgIlcwkAzAgCAhBib29zdGluZ0NvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgAMa2V5VGhyZXNob2xkCQC5CQIJAMwIAgICJXMJAMwIAgIPdm90aW5nVGhyZXNob2xkBQNuaWwFCXNlcGFyYXRvcgAPa2V5UmF0ZVBlckJsb2NrCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgxyYXRlUGVyQmxvY2sJAMwIAgIHY3VycmVudAUDbmlsBQlzZXBhcmF0b3IAEmtleVJhdGVQZXJCbG9ja01heAkAuQkCCQDMCAICBCVzJXMJAMwIAgIPcmF0ZVBlckJsb2NrTWF4CQDMCAICB2N1cnJlbnQFA25pbAUJc2VwYXJhdG9yABFrZXlSYXRlQ2hhbmdlU3RlcAkAuQkCCQDMCAICAiVzCQDMCAICDnJhdGVDaGFuZ2VTdGVwBQNuaWwFCXNlcGFyYXRvcgEPZ2V0U3RyaW5nT3JGYWlsAQNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQNrZXkJAKwCAgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBDGdldEludE9yRmFpbAEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUDa2V5CQCsAgIFA2tleQIPIGlzIG5vdCBkZWZpbmVkAQ5rZXlTdGFydEhlaWdodAAJALkJAgkAzAgCAgIlcwkAzAgCAgtzdGFydEhlaWdodAUDbmlsBQlzZXBhcmF0b3IBD2tleVZvdGluZ1Jlc3VsdAAJALkJAgkAzAgCAgIlcwkAzAgCAgx2b3RpbmdSZXN1bHQFA25pbAUJc2VwYXJhdG9yAQp0b3RhbFZvdGVzAw10b3RhbEluY3JlYXNlCXRvdGFsTm9uZQ10b3RhbERlY3JlYXNlCQC5CQIJAMwIAgIGJWQlZCVkCQDMCAIFDXRvdGFsSW5jcmVhc2UJAMwIAgUJdG90YWxOb25lCQDMCAIFDXRvdGFsRGVjcmVhc2UFA25pbAUJc2VwYXJhdG9yAQdrZXlWb3RlAQx2b3RlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICBHZvdGUJAMwIAgUMdm90ZXJBZGRyZXNzBQNuaWwFCXNlcGFyYXRvcgEMa2V5Vm90ZVZhbHVlAglnd3hBbW91bnQEdm90ZQQDa2V5AwkAAAIFBHZvdGUAAQkAuQkCCQDMCAICBCVkJXMJAMwIAgUJZ3d4QW1vdW50CQDMCAICCGluY3JlYXNlBQNuaWwFCXNlcGFyYXRvcgMJAAACBQR2b3RlAP///////////wEJALkJAgkAzAgCAgQlZCVzCQDMCAIFCWd3eEFtb3VudAkAzAgCAghkZWNyZWFzZQUDbmlsBQlzZXBhcmF0b3IJALkJAgkAzAgCAgQlZCVzCQDMCAIFCWd3eEFtb3VudAkAzAgCAgRub25lBQNuaWwFCXNlcGFyYXRvcgUDa2V5ABBib29zdGluZ0NvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQEPZ2V0U3RyaW5nT3JGYWlsAQUTa2V5Qm9vc3RpbmdDb250cmFjdAAQZW1pc3Npb25Db250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBD2dldFN0cmluZ09yRmFpbAEFE2tleUVtaXNzaW9uQ29udHJhY3QBE2tleU1hbmFnZXJQdWJsaWNLZXkAAhQlc19fbWFuYWdlclB1YmxpY0tleQEWa2V5TWFuYWdlclZhdWx0QWRkcmVzcwACFyVzX19tYW5hZ2VyVmF1bHRBZGRyZXNzARxnZXRNYW5hZ2VyVmF1bHRBZGRyZXNzT3JUaGlzAAQHJG1hdGNoMAkAoggBCQEWa2V5TWFuYWdlclZhdWx0QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFzBQR0aGlzARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAQTbWFuYWdlclZhdWx0QWRkcmVzcwkBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCdCAIFE21hbmFnZXJWYXVsdEFkZHJlc3MJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBCWlzTWFuYWdlcgEBaQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwCQAAAggFAWkPY2FsbGVyUHVibGljS2V5BQJwawMJAAECBQckbWF0Y2gwAgRVbml0CQAAAggFAWkGY2FsbGVyBQR0aGlzCQACAQILTWF0Y2ggZXJyb3IBC211c3RNYW5hZ2VyAQFpAwkBCWlzTWFuYWdlcgEFAWkGCQACAQIRcGVybWlzc2lvbiBkZW5pZWQBBWFzSW50AQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgNJbnQEBnZhbEludAUHJG1hdGNoMAUGdmFsSW50CQACAQIbZmFpbGVkIHRvIGNhc3QgaW50byBJbnRlZ2VyAQtjYWxjTmV3UmF0ZQMPcmF0ZVBlckJsb2NrTWF4DHJhdGVQZXJCbG9jawpjaGFuZ2VTdGVwBAptYXhBbGxvd2VkCQBrAwBkBQ9yYXRlUGVyQmxvY2tNYXgAeAQNaW5jcmVhc2VkUmF0ZQkAlwMBCQDMCAIJAGsDCQBkAgBkBQpjaGFuZ2VTdGVwBQxyYXRlUGVyQmxvY2sAZAkAzAgCBQptYXhBbGxvd2VkBQNuaWwEDWRlY3JlYXNlZFJhdGUJAJYDAQkAzAgCCQBrAwkAZQIAZAUKY2hhbmdlU3RlcAUMcmF0ZVBlckJsb2NrAGQJAMwIAgAABQNuaWwJAJUKAwUNaW5jcmVhc2VkUmF0ZQUMcmF0ZVBlckJsb2NrBQ1kZWNyZWFzZWRSYXRlBgFpAQtjb25zdHJ1Y3RvcgUTYm9vc3RpbmdDb250cmFjdFBybRNlbWlzc2lvbkNvbnRyYWN0UHJtEmZhY3RvcnlDb250cmFjdFBybRF2b3RpbmdEdXJhdGlvblBybQl0aHJlc2hvbGQEBmNoZWNrcwkAzAgCAwkBCWlzRGVmaW5lZAEJAKYIAQUTYm9vc3RpbmdDb250cmFjdFBybQYJAAIBAiFJbnZhbGlkIGJvb3N0aW5nIGNvbnRyYWN0IGFkZHJlc3MJAMwIAgMJAQlpc0RlZmluZWQBCQCmCAEFE2VtaXNzaW9uQ29udHJhY3RQcm0GCQACAQIhSW52YWxpZCBlbWlzc2lvbiBjb250cmFjdCBhZGRyZXNzCQDMCAIDCQBmAgURdm90aW5nRHVyYXRpb25Qcm0AAAYJAAIBAhdJbnZhbGlkIHZvdGluZyBkdXJhdGlvbgkAzAgCAwkAZgIFCXRocmVzaG9sZAAABgkAAgECEWludmFsaWQgdGhyZXNob2xkBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBRNrZXlCb29zdGluZ0NvbnRyYWN0BRNib29zdGluZ0NvbnRyYWN0UHJtCQDMCAIJAQtTdHJpbmdFbnRyeQIFE2tleUVtaXNzaW9uQ29udHJhY3QFE2VtaXNzaW9uQ29udHJhY3RQcm0JAMwIAgkBDEludGVnZXJFbnRyeQIFDmtleUVwb2NoTGVuZ3RoBRF2b3RpbmdEdXJhdGlvblBybQkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa2V5VGhyZXNob2xkBQl0aHJlc2hvbGQFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARxnZXRSYXRlQ2hhbmdlQW1vdW50c1JFQURPTkxZAAQPcmF0ZVBlckJsb2NrTWF4CQERQGV4dHJOYXRpdmUoMTA1MCkCBRBlbWlzc2lvbkNvbnRyYWN0BRJrZXlSYXRlUGVyQmxvY2tNYXgEDHJhdGVQZXJCbG9jawkBEUBleHRyTmF0aXZlKDEwNTApAgUQZW1pc3Npb25Db250cmFjdAUPa2V5UmF0ZVBlckJsb2NrBA5yYXRlQ2hhbmdlU3RlcAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwURa2V5UmF0ZUNoYW5nZVN0ZXAJAJQKAgUDbmlsCQELY2FsY05ld1JhdGUDBQ9yYXRlUGVyQmxvY2tNYXgFDHJhdGVQZXJCbG9jawUOcmF0ZUNoYW5nZVN0ZXABaQEEdm90ZQEHaW5GYXZvcgQSdm90aW5nRmluaXNoSGVpZ2h0CQBkAgkBBXZhbHVlAQkAnwgBCQEOa2V5U3RhcnRIZWlnaHQACQEFdmFsdWUBCQCfCAEFDmtleUVwb2NoTGVuZ3RoBAZjaGVja3MJAMwIAgMJAGYCBRJ2b3RpbmdGaW5pc2hIZWlnaHQFBmhlaWdodAYJAAIBAhB0b28gbGF0ZSB0byB2b3RlCQDMCAIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCAAEJAMwIAgAACQDMCAIA////////////AQUDbmlsBQdpbkZhdm9yBgkAAgECEm5vdCB2YWxpZCBhcmd1bWVudAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAlnd3hBbW91bnQJAPwHBAUQYm9vc3RpbmdDb250cmFjdAIgZ2V0VXNlckd3eEFtb3VudEF0SGVpZ2h0UkVBRE9OTFkJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUSdm90aW5nRmluaXNoSGVpZ2h0BQNuaWwFA25pbAQHbm90WmVybwMJAGYCCQEFYXNJbnQBBQlnd3hBbW91bnQAAAYJAAIBAhJ5b3UgZG9uJ3QgaGF2ZSBnd3gDCQAAAgUHbm90WmVybwUHbm90WmVybwQEdm90ZQQHJG1hdGNoMAkAoggBCQEHa2V5Vm90ZQEJAKUIAQgFAWkGY2FsbGVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAQEdm90ZQkAtQkCBQFzBQlzZXBhcmF0b3IECXZvdGVWYWx1ZQkAkQMCBQR2b3RlAAEECHZvdGVUeXBlCQCRAwIFBHZvdGUAAgQRaXNWb3RlVHlwZVNpbWlsYXIDAwMJAAACBQh2b3RlVHlwZQIIaW5jcmVhc2UJAAACBQdpbkZhdm9yAAEHBgMJAAACBQh2b3RlVHlwZQIIZGVjcmVhc2UJAAACBQdpbkZhdm9yAP///////////wEHBgMJAAACBQh2b3RlVHlwZQIEbm9uZQkAAAIFB2luRmF2b3IAAAcEEmlzVm90ZVZhbHVlU2ltaWxhcgMFEWlzVm90ZVR5cGVTaW1pbGFyCQAAAgkBBWFzSW50AQUJZ3d4QW1vdW50CQENcGFyc2VJbnRWYWx1ZQEFCXZvdGVWYWx1ZQcEEGlzTmV3Vm90ZVNpbWlsYXIDAwURaXNWb3RlVHlwZVNpbWlsYXIFEmlzVm90ZVZhbHVlU2ltaWxhcgcJAAIBAhF5b3UgYWxyZWFkeSB2b3RlZAkA/AcEBQR0aGlzAgpjYW5jZWxWb3RlBQNuaWwFA25pbAUQaXNOZXdWb3RlU2ltaWxhcgMJAAECBQckbWF0Y2gwAgRVbml0BAF1BQckbWF0Y2gwBQF1CQACAQILTWF0Y2ggZXJyb3IDCQAAAgUEdm90ZQUEdm90ZQQMdm90aW5nUmVzdWx0CQC1CQIJAQV2YWx1ZQEJAKIIAQkBD2tleVZvdGluZ1Jlc3VsdAAFCXNlcGFyYXRvcgQPdm90ZXNUb0luY3JlYXNlCQCRAwIFDHZvdGluZ1Jlc3VsdAABBAt2b3Rlc1RvTm9uZQkAkQMCBQx2b3RpbmdSZXN1bHQAAgQPdm90ZXNUb0RlY3JlYXNlCQCRAwIFDHZvdGluZ1Jlc3VsdAADBBtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMDCQAAAgUHaW5GYXZvcgABBBBuZXdQb3NpdGl2ZVZvdGVzCQBkAgkBDXBhcnNlSW50VmFsdWUBBQ92b3Rlc1RvSW5jcmVhc2UJAQVhc0ludAEFCWd3eEFtb3VudAkAzAgCCQCkAwEFEG5ld1Bvc2l0aXZlVm90ZXMJAMwIAgULdm90ZXNUb05vbmUJAMwIAgUPdm90ZXNUb0RlY3JlYXNlBQNuaWwDCQAAAgUHaW5GYXZvcgD///////////8BBBBuZXdOZWdhdGl2ZVZvdGVzCQBkAgkBDXBhcnNlSW50VmFsdWUBBQt2b3Rlc1RvTm9uZQkBBWFzSW50AQUJZ3d4QW1vdW50CQDMCAIFD3ZvdGVzVG9JbmNyZWFzZQkAzAgCBQt2b3Rlc1RvTm9uZQkAzAgCCQCkAwEFEG5ld05lZ2F0aXZlVm90ZXMFA25pbAQMbmV3Tm9uZVZvdGVzCQBkAgkBDXBhcnNlSW50VmFsdWUBBQt2b3Rlc1RvTm9uZQkBBWFzSW50AQUJZ3d4QW1vdW50CQDMCAIFD3ZvdGVzVG9JbmNyZWFzZQkAzAgCCQCkAwEFDG5ld05vbmVWb3RlcwkAzAgCBQ92b3Rlc1RvRGVjcmVhc2UFA25pbAQHdm90ZUtleQkBB2tleVZvdGUBCQClCAEIBQFpBmNhbGxlcgQJdm90ZVZhbHVlCQEMa2V5Vm90ZVZhbHVlAgkApAMBCQEFYXNJbnQBBQlnd3hBbW91bnQFB2luRmF2b3IJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5Vm90aW5nUmVzdWx0AAkBCnRvdGFsVm90ZXMDCQCRAwIFG25ld1Bvc2l0aXZlQW5kTmVnYXRpdmVWb3RlcwAACQCRAwIFG25ld1Bvc2l0aXZlQW5kTmVnYXRpdmVWb3RlcwABCQCRAwIFG25ld1Bvc2l0aXZlQW5kTmVnYXRpdmVWb3RlcwACCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3ZvdGVLZXkFCXZvdGVWYWx1ZQUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmNhbmNlbFZvdGUABAt1c2VyQWRkcmVzcwMJAAACCAUBaQZjYWxsZXIFBHRoaXMJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQClCAEIBQFpBmNhbGxlcgQGY2hlY2tzCQDMCAIDCQEJaXNEZWZpbmVkAQkAoggBCQEPa2V5Vm90aW5nUmVzdWx0AAYJAAIBAgdubyB2b3RlBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEBHZvdGUJALUJAgkBBXZhbHVlAQkAoggBCQEHa2V5Vm90ZQEFC3VzZXJBZGRyZXNzBQlzZXBhcmF0b3IECXZvdGVWYWx1ZQkAkQMCBQR2b3RlAAEECHZvdGVUeXBlCQCRAwIFBHZvdGUAAgQMdm90aW5nUmVzdWx0CQC1CQIJAQV2YWx1ZQEJAKIIAQkBD2tleVZvdGluZ1Jlc3VsdAAFCXNlcGFyYXRvcgQPdm90ZXNUb0luY3JlYXNlCQCRAwIFDHZvdGluZ1Jlc3VsdAABBAt2b3Rlc1RvTm9uZQkAkQMCBQx2b3RpbmdSZXN1bHQAAgQPdm90ZXNUb0RlY3JlYXNlCQCRAwIFDHZvdGluZ1Jlc3VsdAADBAdhY3Rpb25zAwkAAAIFCHZvdGVUeXBlAghpbmNyZWFzZQQQbmV3SW5jcmVhc2VWb3RlcwkAZQIJAQ1wYXJzZUludFZhbHVlAQUPdm90ZXNUb0luY3JlYXNlCQENcGFyc2VJbnRWYWx1ZQEFCXZvdGVWYWx1ZQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlWb3RpbmdSZXN1bHQACQEKdG90YWxWb3RlcwMJAKQDAQUQbmV3SW5jcmVhc2VWb3RlcwULdm90ZXNUb05vbmUFD3ZvdGVzVG9EZWNyZWFzZQkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5Vm90ZQEFC3VzZXJBZGRyZXNzBQNuaWwFBHVuaXQDCQAAAgUIdm90ZVR5cGUCCWRlc2NyZWFzZQQQbmV3RGVjcmVhc2VWb3RlcwkAZQIJAQ1wYXJzZUludFZhbHVlAQUPdm90ZXNUb0RlY3JlYXNlCQENcGFyc2VJbnRWYWx1ZQEFCXZvdGVWYWx1ZQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlWb3RpbmdSZXN1bHQACQEKdG90YWxWb3RlcwMFD3ZvdGVzVG9JbmNyZWFzZQULdm90ZXNUb05vbmUJAKQDAQUQbmV3RGVjcmVhc2VWb3RlcwkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5Vm90ZQEFC3VzZXJBZGRyZXNzBQNuaWwFBHVuaXQEDG5ld05vbmVWb3RlcwkAZQIJAQ1wYXJzZUludFZhbHVlAQULdm90ZXNUb05vbmUJAQ1wYXJzZUludFZhbHVlAQUJdm90ZVZhbHVlCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleVZvdGluZ1Jlc3VsdAAJAQp0b3RhbFZvdGVzAwUPdm90ZXNUb0luY3JlYXNlCQCkAwEFDG5ld05vbmVWb3RlcwUPdm90ZXNUb0RlY3JlYXNlCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlWb3RlAQULdXNlckFkZHJlc3MFA25pbAUEdW5pdAUHYWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxzZXRUaHJlc2hvbGQBDG5ld1RocmVzaG9sZAQGY2hlY2tzCQDMCAIJAQttdXN0TWFuYWdlcgEFAWkJAMwIAgMJAGYCBQxuZXdUaHJlc2hvbGQAAAYJAAIBAhFpbnZhbGlkIHRocmVzaG9sZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtleVRocmVzaG9sZAUMbmV3VGhyZXNob2xkBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIZmluYWxpemUCDWFtb3VudEFzc2V0SWQMcHJpY2VBc3NldElkBBJ2b3RpbmdGaW5pc2hIZWlnaHQJAGQCCQEFdmFsdWUBCQCfCAEJAQ5rZXlTdGFydEhlaWdodAAJAQV2YWx1ZQEJAJ8IAQUOa2V5RXBvY2hMZW5ndGgEBmNoZWNrcwkAzAgCAwkAZwIFBmhlaWdodAUSdm90aW5nRmluaXNoSGVpZ2h0BgkAAgECImluc3VmZmljaWVudCBoZWlnaHQgZm9yIGNvbXBsZXRpb24FA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQMdm90aW5nUmVzdWx0CQC1CQIJAQV2YWx1ZQEJAKIIAQkBD2tleVZvdGluZ1Jlc3VsdAAFCXNlcGFyYXRvcgQPdm90ZXNUb0luY3JlYXNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMdm90aW5nUmVzdWx0AAEEC3ZvdGVzVG9Ob25lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMdm90aW5nUmVzdWx0AAIED3ZvdGVzVG9EZWNyZWFzZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDHZvdGluZ1Jlc3VsdAADBAhhbGxWb3RlcwkAZAIJAGQCBQ92b3Rlc1RvSW5jcmVhc2UFC3ZvdGVzVG9Ob25lBQ92b3Rlc1RvRGVjcmVhc2UECXRocmVzaG9sZAkBDGdldEludE9yRmFpbAEFDGtleVRocmVzaG9sZAQHYWN0aW9ucwMDCQBnAgUIYWxsVm90ZXMFCXRocmVzaG9sZAYHBQNuaWwFA25pbAUHYWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgBpVPJ4", "height": 2581655, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 47nzm6AAKnKAJasEPmtWrWoz35E9SfLvbWT3s1Na8xmQ Next: Fp8MBeMkygTfLAMnFb1R2VC3nid6t4ryUgBSzUhm9uHq Diff:
OldNewDifferences
88 let keyEmissionContract = makeString(["%s", "emissionContract"], separator)
99
1010 let keyBoostingContract = makeString(["%s", "boostingContract"], separator)
11-
12-let keyFactoryContract = makeString(["%s", "factoryContract"], separator)
1311
1412 let keyThreshold = makeString(["%s", "votingThreshold"], separator)
1513
5048 let boostingContract = addressFromStringValue(getStringOrFail(keyBoostingContract))
5149
5250 let emissionContract = addressFromStringValue(getStringOrFail(keyEmissionContract))
53-
54-let factoryContract = addressFromStringValue(getStringOrFail(keyFactoryContract))
5551
5652 func keyManagerPublicKey () = "%s__managerPublicKey"
5753
113109
114110 @Callable(i)
115111 func constructor (boostingContractPrm,emissionContractPrm,factoryContractPrm,votingDurationPrm,threshold) = {
116- let checks = [mustManager(i), if (isDefined(addressFromString(boostingContractPrm)))
112+ let checks = [if (isDefined(addressFromString(boostingContractPrm)))
117113 then true
118114 else throw("Invalid boosting contract address"), if (isDefined(addressFromString(emissionContractPrm)))
119115 then true
120- else throw("Invalid emission contract address"), if (isDefined(addressFromString(factoryContractPrm)))
121- then true
122- else throw("Invalid factory contract address"), if ((votingDurationPrm > 0))
116+ else throw("Invalid emission contract address"), if ((votingDurationPrm > 0))
123117 then true
124118 else throw("Invalid voting duration"), if ((threshold > 0))
125119 then true
126120 else throw("invalid threshold")]
127121 if ((checks == checks))
128- then $Tuple2([StringEntry(keyBoostingContract, boostingContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), StringEntry(keyFactoryContract, factoryContractPrm), IntegerEntry(keyEpochLength, votingDurationPrm), IntegerEntry(keyThreshold, threshold)], unit)
122+ then $Tuple2([StringEntry(keyBoostingContract, boostingContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), IntegerEntry(keyEpochLength, votingDurationPrm), IntegerEntry(keyThreshold, threshold)], unit)
129123 else throw("Strict value is not equal to itself.")
130124 }
131125
287281 let actions = if (if ((allVotes >= threshold))
288282 then true
289283 else false)
290- then {
291- let res = invoke(factoryContract, "setWxEmissionPoolLabel", [amountAssetId, priceAssetId], nil)
292- if ((res == res))
293- then nil
294- else throw("Strict value is not equal to itself.")
295- }
284+ then nil
296285 else nil
297286 actions
298287 }
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)
11-
12-let keyFactoryContract = makeString(["%s", "factoryContract"], separator)
1311
1412 let keyThreshold = makeString(["%s", "votingThreshold"], separator)
1513
1614 let keyRatePerBlock = makeString(["%s%s", "ratePerBlock", "current"], separator)
1715
1816 let keyRatePerBlockMax = makeString(["%s%s", "ratePerBlockMax", "current"], separator)
1917
2018 let keyRateChangeStep = makeString(["%s", "rateChangeStep"], separator)
2119
2220 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (key + " is not defined"))
2321
2422
2523 func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), (key + " is not defined"))
2624
2725
2826 func keyStartHeight () = makeString(["%s", "startHeight"], separator)
2927
3028
3129 func keyVotingResult () = makeString(["%s", "votingResult"], separator)
3230
3331
3432 func totalVotes (totalIncrease,totalNone,totalDecrease) = makeString(["%d%d%d", totalIncrease, totalNone, totalDecrease], separator)
3533
3634
3735 func keyVote (voterAddress) = makeString(["%s%s", "vote", voterAddress], separator)
3836
3937
4038 func keyVoteValue (gwxAmount,vote) = {
4139 let key = if ((vote == 1))
4240 then makeString(["%d%s", gwxAmount, "increase"], separator)
4341 else if ((vote == -1))
4442 then makeString(["%d%s", gwxAmount, "decrease"], separator)
4543 else makeString(["%d%s", gwxAmount, "none"], separator)
4644 key
4745 }
4846
4947
5048 let boostingContract = addressFromStringValue(getStringOrFail(keyBoostingContract))
5149
5250 let emissionContract = addressFromStringValue(getStringOrFail(keyEmissionContract))
53-
54-let factoryContract = addressFromStringValue(getStringOrFail(keyFactoryContract))
5551
5652 func keyManagerPublicKey () = "%s__managerPublicKey"
5753
5854
5955 func keyManagerVaultAddress () = "%s__managerVaultAddress"
6056
6157
6258 func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
6359 case s: String =>
6460 addressFromStringValue(s)
6561 case _ =>
6662 this
6763 }
6864
6965
7066 func managerPublicKeyOrUnit () = {
7167 let managerVaultAddress = getManagerVaultAddressOrThis()
7268 match getString(managerVaultAddress, keyManagerPublicKey()) {
7369 case s: String =>
7470 fromBase58String(s)
7571 case _: Unit =>
7672 unit
7773 case _ =>
7874 throw("Match error")
7975 }
8076 }
8177
8278
8379 func isManager (i) = match managerPublicKeyOrUnit() {
8480 case pk: ByteVector =>
8581 (i.callerPublicKey == pk)
8682 case _: Unit =>
8783 (i.caller == this)
8884 case _ =>
8985 throw("Match error")
9086 }
9187
9288
9389 func mustManager (i) = if (isManager(i))
9490 then true
9591 else throw("permission denied")
9692
9793
9894 func asInt (val) = match val {
9995 case valInt: Int =>
10096 valInt
10197 case _ =>
10298 throw("failed to cast into Integer")
10399 }
104100
105101
106102 func calcNewRate (ratePerBlockMax,ratePerBlock,changeStep) = {
107103 let maxAllowed = fraction(100, ratePerBlockMax, 120)
108104 let increasedRate = min([fraction((100 + changeStep), ratePerBlock, 100), maxAllowed])
109105 let decreasedRate = max([fraction((100 - changeStep), ratePerBlock, 100), 0])
110106 $Tuple3(increasedRate, ratePerBlock, decreasedRate)
111107 }
112108
113109
114110 @Callable(i)
115111 func constructor (boostingContractPrm,emissionContractPrm,factoryContractPrm,votingDurationPrm,threshold) = {
116- let checks = [mustManager(i), if (isDefined(addressFromString(boostingContractPrm)))
112+ let checks = [if (isDefined(addressFromString(boostingContractPrm)))
117113 then true
118114 else throw("Invalid boosting contract address"), if (isDefined(addressFromString(emissionContractPrm)))
119115 then true
120- else throw("Invalid emission contract address"), if (isDefined(addressFromString(factoryContractPrm)))
121- then true
122- else throw("Invalid factory contract address"), if ((votingDurationPrm > 0))
116+ else throw("Invalid emission contract address"), if ((votingDurationPrm > 0))
123117 then true
124118 else throw("Invalid voting duration"), if ((threshold > 0))
125119 then true
126120 else throw("invalid threshold")]
127121 if ((checks == checks))
128- then $Tuple2([StringEntry(keyBoostingContract, boostingContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), StringEntry(keyFactoryContract, factoryContractPrm), IntegerEntry(keyEpochLength, votingDurationPrm), IntegerEntry(keyThreshold, threshold)], unit)
122+ then $Tuple2([StringEntry(keyBoostingContract, boostingContractPrm), StringEntry(keyEmissionContract, emissionContractPrm), IntegerEntry(keyEpochLength, votingDurationPrm), IntegerEntry(keyThreshold, threshold)], unit)
129123 else throw("Strict value is not equal to itself.")
130124 }
131125
132126
133127
134128 @Callable(i)
135129 func getRateChangeAmountsREADONLY () = {
136130 let ratePerBlockMax = getIntegerValue(emissionContract, keyRatePerBlockMax)
137131 let ratePerBlock = getIntegerValue(emissionContract, keyRatePerBlock)
138132 let rateChangeStep = getIntegerValue(this, keyRateChangeStep)
139133 $Tuple2(nil, calcNewRate(ratePerBlockMax, ratePerBlock, rateChangeStep))
140134 }
141135
142136
143137
144138 @Callable(i)
145139 func vote (inFavor) = {
146140 let votingFinishHeight = (value(getInteger(keyStartHeight())) + value(getInteger(keyEpochLength)))
147141 let checks = [if ((votingFinishHeight > height))
148142 then true
149143 else throw("too late to vote"), if (containsElement([1, 0, -1], inFavor))
150144 then true
151145 else throw("not valid argument")]
152146 if ((checks == checks))
153147 then {
154148 let gwxAmount = invoke(boostingContract, "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), votingFinishHeight], nil)
155149 let notZero = if ((asInt(gwxAmount) > 0))
156150 then true
157151 else throw("you don't have gwx")
158152 if ((notZero == notZero))
159153 then {
160154 let vote = match getString(keyVote(toString(i.caller))) {
161155 case s: String =>
162156 let vote = split(s, separator)
163157 let voteValue = vote[1]
164158 let voteType = vote[2]
165159 let isVoteTypeSimilar = if (if (if ((voteType == "increase"))
166160 then (inFavor == 1)
167161 else false)
168162 then true
169163 else if ((voteType == "decrease"))
170164 then (inFavor == -1)
171165 else false)
172166 then true
173167 else if ((voteType == "none"))
174168 then (inFavor == 0)
175169 else false
176170 let isVoteValueSimilar = if (isVoteTypeSimilar)
177171 then (asInt(gwxAmount) == parseIntValue(voteValue))
178172 else false
179173 let isNewVoteSimilar = if (if (isVoteTypeSimilar)
180174 then isVoteValueSimilar
181175 else false)
182176 then throw("you already voted")
183177 else invoke(this, "cancelVote", nil, nil)
184178 isNewVoteSimilar
185179 case u: Unit =>
186180 u
187181 case _ =>
188182 throw("Match error")
189183 }
190184 if ((vote == vote))
191185 then {
192186 let votingResult = split(value(getString(keyVotingResult())), separator)
193187 let votesToIncrease = votingResult[1]
194188 let votesToNone = votingResult[2]
195189 let votesToDecrease = votingResult[3]
196190 let newPositiveAndNegativeVotes = if ((inFavor == 1))
197191 then {
198192 let newPositiveVotes = (parseIntValue(votesToIncrease) + asInt(gwxAmount))
199193 [toString(newPositiveVotes), votesToNone, votesToDecrease]
200194 }
201195 else if ((inFavor == -1))
202196 then {
203197 let newNegativeVotes = (parseIntValue(votesToNone) + asInt(gwxAmount))
204198 [votesToIncrease, votesToNone, toString(newNegativeVotes)]
205199 }
206200 else {
207201 let newNoneVotes = (parseIntValue(votesToNone) + asInt(gwxAmount))
208202 [votesToIncrease, toString(newNoneVotes), votesToDecrease]
209203 }
210204 let voteKey = keyVote(toString(i.caller))
211205 let voteValue = keyVoteValue(toString(asInt(gwxAmount)), inFavor)
212206 $Tuple2([StringEntry(keyVotingResult(), totalVotes(newPositiveAndNegativeVotes[0], newPositiveAndNegativeVotes[1], newPositiveAndNegativeVotes[2])), StringEntry(voteKey, voteValue)], unit)
213207 }
214208 else throw("Strict value is not equal to itself.")
215209 }
216210 else throw("Strict value is not equal to itself.")
217211 }
218212 else throw("Strict value is not equal to itself.")
219213 }
220214
221215
222216
223217 @Callable(i)
224218 func cancelVote () = {
225219 let userAddress = if ((i.caller == this))
226220 then toString(i.originCaller)
227221 else toString(i.caller)
228222 let checks = [if (isDefined(getString(keyVotingResult())))
229223 then true
230224 else throw("no vote")]
231225 if ((checks == checks))
232226 then {
233227 let vote = split(value(getString(keyVote(userAddress))), separator)
234228 let voteValue = vote[1]
235229 let voteType = vote[2]
236230 let votingResult = split(value(getString(keyVotingResult())), separator)
237231 let votesToIncrease = votingResult[1]
238232 let votesToNone = votingResult[2]
239233 let votesToDecrease = votingResult[3]
240234 let actions = if ((voteType == "increase"))
241235 then {
242236 let newIncreaseVotes = (parseIntValue(votesToIncrease) - parseIntValue(voteValue))
243237 $Tuple2([StringEntry(keyVotingResult(), totalVotes(toString(newIncreaseVotes), votesToNone, votesToDecrease)), DeleteEntry(keyVote(userAddress))], unit)
244238 }
245239 else if ((voteType == "descrease"))
246240 then {
247241 let newDecreaseVotes = (parseIntValue(votesToDecrease) - parseIntValue(voteValue))
248242 $Tuple2([StringEntry(keyVotingResult(), totalVotes(votesToIncrease, votesToNone, toString(newDecreaseVotes))), DeleteEntry(keyVote(userAddress))], unit)
249243 }
250244 else {
251245 let newNoneVotes = (parseIntValue(votesToNone) - parseIntValue(voteValue))
252246 $Tuple2([StringEntry(keyVotingResult(), totalVotes(votesToIncrease, toString(newNoneVotes), votesToDecrease)), DeleteEntry(keyVote(userAddress))], unit)
253247 }
254248 actions
255249 }
256250 else throw("Strict value is not equal to itself.")
257251 }
258252
259253
260254
261255 @Callable(i)
262256 func setThreshold (newThreshold) = {
263257 let checks = [mustManager(i), if ((newThreshold > 0))
264258 then true
265259 else throw("invalid threshold")]
266260 if ((checks == checks))
267261 then $Tuple2([IntegerEntry(keyThreshold, newThreshold)], unit)
268262 else throw("Strict value is not equal to itself.")
269263 }
270264
271265
272266
273267 @Callable(i)
274268 func finalize (amountAssetId,priceAssetId) = {
275269 let votingFinishHeight = (value(getInteger(keyStartHeight())) + value(getInteger(keyEpochLength)))
276270 let checks = [if ((height >= votingFinishHeight))
277271 then true
278272 else throw("insufficient height for completion")]
279273 if ((checks == checks))
280274 then {
281275 let votingResult = split(value(getString(keyVotingResult())), separator)
282276 let votesToIncrease = parseIntValue(votingResult[1])
283277 let votesToNone = parseIntValue(votingResult[2])
284278 let votesToDecrease = parseIntValue(votingResult[3])
285279 let allVotes = ((votesToIncrease + votesToNone) + votesToDecrease)
286280 let threshold = getIntOrFail(keyThreshold)
287281 let actions = if (if ((allVotes >= threshold))
288282 then true
289283 else false)
290- then {
291- let res = invoke(factoryContract, "setWxEmissionPoolLabel", [amountAssetId, priceAssetId], nil)
292- if ((res == res))
293- then nil
294- else throw("Strict value is not equal to itself.")
295- }
284+ then nil
296285 else nil
297286 actions
298287 }
299288 else throw("Strict value is not equal to itself.")
300289 }
301290
302291

github/deemru/w8io/026f985 
34.93 ms