tx · 29yoKtMSLZPgwzXqmwfSihN3WqSW3Ee6wdQVuTF2xjxg

3NAsFvuLwxz1iUtZ9fmhfmSN16r9NEsPqsh:  -0.01700000 Waves

2023.05.02 09:54 [2559810] smart account 3NAsFvuLwxz1iUtZ9fmhfmSN16r9NEsPqsh > SELF 0.00000000 Waves

{ "type": 13, "id": "29yoKtMSLZPgwzXqmwfSihN3WqSW3Ee6wdQVuTF2xjxg", "fee": 1700000, "feeAssetId": null, "timestamp": 1683010475141, "version": 2, "chainId": 84, "sender": "3NAsFvuLwxz1iUtZ9fmhfmSN16r9NEsPqsh", "senderPublicKey": "33fpjdpM9FMu87RZKePniPardKqQXM96sm7VhAk3JEVQ", "proofs": [ "mmdCphrs9NyQVmkf13GDW1YC7sVhrBVDaZrXHNiqsYXRi2L8uZaaXLirWatvnT4Kwf5r2pN6uqXRkv5R2aU1WiT" ], "script": "base64:BgLZEggCEgUKAwgIBBIFCgMIGAESBwoFEQgYAQESBgoECAgICBIGCgQICAgCEgUKAwgIBBIGCgQICAEBEgQKAggYEgMKAQgSABIECgIICBIDCgEIEgQKAggIIglzZXBhcmF0b3IiDGtleVd4QXNzZXRJZCITa2V5QmFja2VuZFB1YmxpY0tleSIba2V5RXhpc3RzUmVmZXJyZXJUb1JlZmVycmFsIgtwcm9ncmFtTmFtZSIPcmVmZXJyZXJBZGRyZXNzIg9yZWZlcnJhbEFkZHJlc3MiEmtleUNsYWltZWRSZWZlcnJlciIOY2xhaW1lckFkZHJlc3MiEmtleUNsYWltZWRSZWZlcnJhbCIUa2V5VW5jbGFpbWVkUmVmZXJyZXIiFGtleVVuY2xhaW1lZFJlZmVycmFsIgtrZXlSZWZlcnJlciIOa2V5UHJvZ3JhbU5hbWUiFWtleVRvdGFsUmVmZXJyYWxDb3VudCIWa2V5QWN0aXZlUmVmZXJyYWxDb3VudCITa2V5SXNSZWZlcnJhbEFjdGl2ZSIWa2V5Q2xhaW1lZFRvdGFsQWRkcmVzcyIHYWRkcmVzcyIYa2V5VW5jbGFpbWVkVG90YWxBZGRyZXNzIg9rZXlDbGFpbWVkVG90YWwiD2tleVJld2FyZHNUb3RhbCIQa2V5UmV3YXJkQXNzZXRJZCITa2V5VHJlYXN1cnlDb250cmFjdCIZa2V5SW1wbGVtZW50YXRpb25Db250cmFjdCIWa2V5QWxsUmVmZXJyYWxQcm9ncmFtcyITa2V5TWFuYWdlclB1YmxpY0tleSIWa2V5TWFuYWdlclZhdWx0QWRkcmVzcyIXZ2V0TWFuYWdlckFkZHJlc3NPckZhaWwiD2tleUNsYWltSGlzdG9yeSILdXNlckFkZHJlc3MiDXRyYW5zYWN0aW9uSWQiBHR5cGUiEmZvcm1hdENsYWltSGlzdG9yeSIGYW1vdW50Igh0aHJvd0VyciIDbXNnIhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IhNtYW5hZ2VyVmF1bHRBZGRyZXNzIgckbWF0Y2gwIgFzIgttdXN0TWFuYWdlciIBaSICcGQiAnBrIhl1cGRhdGVBbGxSZWZlcnJhbFByb2dyYW1zIhNhbGxSZWZlcnJhbFByb2dyYW1zIhp1cGRhdGVkQWxsUmVmZXJyYWxQcm9ncmFtcyIWbmV3QWxsUmVmZXJyYWxQcm9ncmFtcyIYaXNJbXBsZW1lbnRhdGlvbkNvbnRyYWN0IhJjaGVja1Byb2dyYW1FeGlzdHMiCyR0MDQ3MDA1NjM3Ig5jbGFpbWVyQ2xhaW1lZCIQY2xhaW1lclVuY2xhaW1lZCIKa2V5Q2xhaW1lZCIMa2V5VW5jbGFpbWVkIg9jbGFpbUhpc3RvcnlLZXkiDGNsYWltZWRUb3RhbCIQdHJlYXN1cnlDb250cmFjdCINcmV3YXJkQXNzZXRJZCITY2xhaW1lZFRvdGFsQWRkcmVzcyIVdW5jbGFpbWVkVG90YWxBZGRyZXNzIg1jaGVja0NhbkNsYWltIhFuZXdDbGFpbWVyQ2xhaW1lZCIPbmV3Q2xhaW1lZFRvdGFsIhZuZXdDbGFpbWVkVG90YWxBZGRyZXNzIhhuZXdVbmNsYWltZWRUb3RhbEFkZHJlc3MiDWJhbGFuY2VCZWZvcmUiA3JlcyIMYmFsYW5jZUFmdGVyIgtiYWxhbmNlRGlmZiIMY2hlY2tCYWxhbmNlIgdjbGFpbWVyIgxwcm9ncmFtTmFtZXMiC2N1cnJlbnRJdGVyIgtjaGVja0NhbGxlciIQcHJvZ3JhbVVuY2xhaW1lZCIRY2xhaW1CdWxrSW50ZXJuYWwiEXVuY2xhaW1lZFJlZmVycmVyIgVjbGFpbSIOcGF5bWVudEFtb3VudHMiEXJlZmVycmVyQWRkcmVzc2VzIglyZXNBbW91bnQiDmFyZ3NDb21wYXJpc29uIgVjaGVjayIRcmVmZXJyZXJVbmNsYWltZWQiDHJld2FyZHNUb3RhbCIUbmV3UmVmZXJyZXJVbmNsYWltZWQiDG5ld1Jlc0Ftb3VudCIDaW52Ihp1cGRhdGVkQWxsUmVmZXJyZXJQcm9ncmFtcyIWaW1wbGVtZW50YXRpb25Db250cmFjdCIQY2hlY2tQcm9ncmFtTmFtZSIScHJvZ3JhbU5hbWVJc1ZhbGlkIhBjaGVja1Jld2FyZEFzc2V0IglzaWduYXR1cmUiIHBhaXJSZWZlcnJlclRvUmVmZXJyYWxFeGlzdENoZWNrIglub1JlZlNlbGYiBHBhaXIiEGJhY2tlbmRQdWJsaWNLZXkiEXZhbGlkYXRlU2lnbmF0dXJlIhJ0b3RhbFJlZmVycmFsQ291bnQiFW5ld1RvdGFsUmVmZXJyYWxDb3VudCIIaXNBY3RpdmUiEGlzUmVmZXJyYWxBY3RpdmUiBnVwZGF0ZSIWbmV3QWN0aXZlUmVmZXJyYWxDb3VudCIOcmVmZXJyZXJSZXdhcmQiDnJlZmVycmFsUmV3YXJkIgxjaGVja1Byb2dyYW0iFmNoZWNrUmVmZXJyZXJJblByb2dyYW0iFmNoZWNrUmVmZXJyYWxJblByb2dyYW0iFnVuY2xhaW1lZFRvdGFsUmVmZXJyZXIiFnVuY2xhaW1lZFRvdGFsUmVmZXJyYWwiEXJlZmVycmFsVW5jbGFpbWVkIhluZXdVbmNsYWltZWRUb3RhbFJlZmVycmVyIhluZXdVbmNsYWltZWRUb3RhbFJlZmVycmFsIhRuZXdSZWZlcnJhbFVuY2xhaW1lZCIDbWFwIgVhY2N1bSIEbmV4dCIMYXNzZXRJZENoZWNrIgthbW91bnRDaGVjayIIcGF5bWVudHMiAiRsIgIkcyIFJGFjYzAiBSRmMF8xIgIkYSICJGkiBSRmMF8yIgFAIg1jbGFpbUludGVybmFsIg1jYWxsZXJBZGRyZXNzIhFjYWxsZXJQcm9ncmFtc1N0ciIOcHJvZ3JhbXNFeGlzdHMiDmNhbGxlclByb2dyYW1zIglidWxrQ2xhaW0iD2NsYWltZWRSZWZlcnJlciIPY2xhaW1lZFJlZmVycmFsIhF1bmNsYWltZWRSZWZlcnJhbCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5HgABYQICX18BAWIACQC5CQIJAMwIAgICJXMJAMwIAgIJd3hBc3NldElkBQNuaWwFAWEAAWMJALkJAgkAzAgCAgIlcwkAzAgCAhBiYWNrZW5kUHVibGljS2V5BQNuaWwFAWEBAWQDAWUBZgFnCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgIYZXhpc3RzUmVmZXJyZXJUb1JlZmVycmFsCQDMCAIFAWUJAMwIAgUBZgkAzAgCBQFnBQNuaWwFAWEBAWgCAWUBaQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAg9jbGFpbWVkUmVmZXJyZXIJAMwIAgUBZQkAzAgCBQFpBQNuaWwFAWEBAWoCAWUBaQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAg9jbGFpbWVkUmVmZXJyYWwJAMwIAgUBZQkAzAgCBQFpBQNuaWwFAWEBAWsCAWUBaQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhF1bmNsYWltZWRSZWZlcnJlcgkAzAgCBQFlCQDMCAIFAWkFA25pbAUBYQEBbAIBZQFpCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICEXVuY2xhaW1lZFJlZmVycmFsCQDMCAIFAWUJAMwIAgUBaQUDbmlsBQFhAQFtAgFlAWcJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIIcmVmZXJyZXIJAMwIAgUBZQkAzAgCBQFnBQNuaWwFAWEBAW4BAWUJALkJAgkAzAgCAgQlcyVzCQDMCAICC3Byb2dyYW1OYW1lCQDMCAIFAWUFA25pbAUBYQEBbwIBZQFmCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICEnRvdGFsUmVmZXJyYWxDb3VudAkAzAgCBQFlCQDMCAIFAWYFA25pbAUBYQEBcAIBZQFmCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICE2FjdGl2ZVJlZmVycmFsQ291bnQJAMwIAgUBZQkAzAgCBQFmBQNuaWwFAWEBAXECAWUBZwkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAg5hY3RpdmVSZWZlcnJhbAkAzAgCBQFlCQDMCAIFAWcFA25pbAUBYQEBcgEBcwkAuQkCCQDMCAICBCVzJXMJAMwIAgITY2xhaW1lZFRvdGFsQWRkcmVzcwkAzAgCBQFzBQNuaWwFAWEBAXQBAXMJALkJAgkAzAgCAgQlcyVzCQDMCAICFXVuY2xhaW1lZFRvdGFsQWRkcmVzcwkAzAgCBQFzBQNuaWwFAWEBAXUBAWUJALkJAgkAzAgCAgQlcyVzCQDMCAICDGNsYWltZWRUb3RhbAkAzAgCBQFlBQNuaWwFAWEBAXYBAWUJALkJAgkAzAgCAgQlcyVzCQDMCAICDHJld2FyZHNUb3RhbAkAzAgCBQFlBQNuaWwFAWEBAXcBAWUJALkJAgkAzAgCAgQlcyVzCQDMCAICDXJld2FyZEFzc2V0SWQJAMwIAgUBZQUDbmlsBQFhAQF4AQFlCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhB0cmVhc3VyeUNvbnRyYWN0CQDMCAIFAWUFA25pbAUBYQEBeQEBZQkAuQkCCQDMCAICBCVzJXMJAMwIAgIWaW1wbGVtZW50YXRpb25Db250cmFjdAkAzAgCBQFlBQNuaWwFAWEBAXoBAXMJALkJAgkAzAgCAgQlcyVzCQDMCAICE2FsbFJlZmVycmFsUHJvZ3JhbXMJAMwIAgUBcwUDbmlsBQFhAQFBAAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBAUIAAhclc19fbWFuYWdlclZhdWx0QWRkcmVzcwEBQwAJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAQFCAAEBRAQBZQFFAUYBRwkAuQkCCQDMCAICCiVzJXMlcyVzJXMJAMwIAgIHaGlzdG9yeQkAzAgCBQFHCQDMCAIFAWUJAMwIAgUBRQkAzAgCBQFGBQNuaWwFAWEBAUgBAUkJALkJAgkAzAgCAgYlZCVkJWQJAMwIAgkApAMBCAUJbGFzdEJsb2NrBmhlaWdodAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAKQDAQUBSQUDbmlsBQFhAQFKAQFLCQACAQkAuQkCCQDMCAICDnJlZmVycmFsLnJpZGU6CQDMCAIFAUsFA25pbAIBIAEBTAAEAU0JAQFDAAQBTgkAnQgCBQFNCQEBQQADCQABAgUBTgIGU3RyaW5nBAFPBQFOCQDZBAEFAU8DCQABAgUBTgIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQFQAQFRBAFSCQEBSgECEXBlcm1pc3Npb24gZGVuaWVkBAFOCQEBTAADCQABAgUBTgIKQnl0ZVZlY3RvcgQBUwUBTgMJAAACCAUBUQ9jYWxsZXJQdWJsaWNLZXkFAVMGBQFSAwkAAQIFAU4CBFVuaXQDCQAAAggFAVEGY2FsbGVyBQR0aGlzBgUBUgkAAgECC01hdGNoIGVycm9yAQFUAgFzAWUEAVUJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBAXoBBQFzAgAEAVYDCQEIY29udGFpbnMCBQFVBQFlBQNuaWwEAVcDCQAAAgUBVQIABQFlCQC5CQIJAMwIAgUBVQkAzAgCBQFlBQNuaWwFAWEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAXoBBQFzBQFXBQNuaWwFAVYNAVEBDWNsYWltSW50ZXJuYWwDAWUBaQFYBAFZAwkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEBbgEFAWUHBgkBAUoBAhZwcm9ncmFtIGRvZXMgbm90IGV4aXN0AwkAAAIFAVkFAVkEAVoDBQFYCQCXCgUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWoCBQFlBQFpAAAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWwCBQFlBQFpAAAJAQFqAgUBZQUBaQkBAWwCBQFlBQFpCQEBRAQFAWUFAWkJANgEAQgFAVENdHJhbnNhY3Rpb25JZAINY2xhaW1SZWZlcnJhbAkAlwoFCQELdmFsdWVPckVsc2UCCQCfCAEJAQFoAgUBZQUBaQAACQELdmFsdWVPckVsc2UCCQCfCAEJAQFrAgUBZQUBaQAACQEBaAIFAWUFAWkJAQFrAgUBZQUBaQkBAUQEBQFlBQFpCQDYBAEIBQFRDXRyYW5zYWN0aW9uSWQCDWNsYWltUmVmZXJyZXIEAmFhCAUBWgJfMQQCYWIIBQFaAl8yBAJhYwgFAVoCXzMEAmFkCAUBWgJfNAQCYWUIBQFaAl81BAJhZgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBdQEFAWUAAAQCYWcJAQV2YWx1ZQEJAKYIAQkBBXZhbHVlAQkAoggBCQEBeAEFAWUEAmFoCQDZBAEJAQV2YWx1ZQEJAKIIAQkBAXcBBQFlBAJhaQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBcgEFAWkAAAQCYWoJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAXQBBQFpAAADAwUBWAkAAAIFAmFiAAAHCQCUCgIFA25pbAAABAJhawMJAGYCBQJhYgAABgkBAUoBAhBub3RoaW5nIHRvIGNsYWltAwkAAAIFAmFrBQJhawQCYWwJAGQCBQJhYQUCYWIEAmFtCQBkAgUCYWYFAmFiBAJhbgkAZAIFAmFpBQJhYgQCYW8JAGUCBQJhagUCYWIEAmFwCQEFdmFsdWUBCQDwBwIFBHRoaXMFAmFoAwkAAAIFAmFwBQJhcAQCYXEJAPwHBAUCYWcCFndpdGhkcmF3UmVmZXJyYWxSZXdhcmQJAMwIAgUCYWIFA25pbAUDbmlsAwkAAAIFAmFxBQJhcQQCYXIJAQV2YWx1ZQEJAPAHAgUEdGhpcwUCYWgDCQAAAgUCYXIFAmFyBAJhcwkAZQIFAmFyBQJhcAMJAAACBQJhcwUCYXMEAmF0AwkAAAIFAmFzBQJhYgYJAQFKAQIpaW5zdWZmaWNpZW50IGJhbGFuY2Ugb24gcmVmZXJyYWwgY29udHJhY3QDCQAAAgUCYXQFAmF0CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFAmFjBQJhbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUCYWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAXUBBQFlBQJhbQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAXIBBQFpBQJhbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAXQBBQFpBQJhbwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQFpBQJhYgUCYWgJAMwIAgkBC1N0cmluZ0VudHJ5AgUCYWUJAQFIAQUCYWIFA25pbAUCYWIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQERY2xhaW1CdWxrSW50ZXJuYWwDAmF1AmF2AmF3BAJheAMJAAACCAUBUQZjYWxsZXIFBHRoaXMGCQEBSgECEXBlcm1pc3Npb24gZGVuaWVkAwkAAAIFAmF4BQJheAMJAAACBQJhdwkAkAMBBQJhdgUDbmlsBAFlCQCRAwIFAmF2BQJhdwQCYXkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWsCBQFlBQJhdQAABAJhZQkBAUQEBQFlBQJhdQkA2AQBCAUBUQ10cmFuc2FjdGlvbklkAgljbGFpbUJ1bGsEAmF6CQD8BwQFBHRoaXMCEWNsYWltQnVsa0ludGVybmFsCQDMCAIFAmF1CQDMCAIFAmF2CQDMCAIJAGQCBQJhdwABBQNuaWwFA25pbAMJAAACBQJhegUCYXoEAmFBCQELdmFsdWVPckVsc2UCCQCfCAEJAQFrAgUBZQUCYXUAAAQCYUIDCQBmAgUCYUEAAAkA/AcEBQR0aGlzAg1jbGFpbUludGVybmFsCQDMCAIFAWUJAMwIAgUCYXUJAMwIAgcFA25pbAUDbmlsBQR1bml0AwkAAAIFAmFCBQJhQgkAlAoCBQNuaWwJAMwIAgUCYXoJAMwIAgUCYUIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFRAR9pbmNVbmNsYWltZWRXaXRoUGF5bWVudEludGVybmFsBQJhQwFlAmFEAmF3AmFFBAJheAMJAAACCAUBUQZjYWxsZXIFBHRoaXMGCQEBSgECEXBlcm1pc3Npb24gZGVuaWVkAwkAAAIFAmF4BQJheAQCYUYJAAACCQCQAwEFAmFDCQCQAwEFAmFEBAJhRwMFAmFGBgkBAUoBAh9saXN0cyBpbiBhcmdzIG11c3QgYmUgc2FtZSBzaXplAwkAAAIFAmFHBQJhRwMJAAACBQJhdwkAkAMBBQJhQwkAlAoCBQNuaWwFAmFFBAFmCQCRAwIFAmFEBQJhdwQCYWoJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAXQBBQFmAAAEAmFICQELdmFsdWVPckVsc2UCCQCfCAEJAQFrAgUBZQUBZgAABAJhSQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBdgEFAWUAAAQCYW8JAGQCBQJhagkAkQMCBQJhQwUCYXcEAmFKCQBkAgUCYUgJAJEDAgUCYUMFAmF3BAJhSwkAZAIFAmFFCQCRAwIFAmFDBQJhdwQCYUwJAPwHBAUEdGhpcwIfaW5jVW5jbGFpbWVkV2l0aFBheW1lbnRJbnRlcm5hbAkAzAgCBQJhQwkAzAgCBQFlCQDMCAIFAmFECQDMCAIJAGQCBQJhdwABCQDMCAIFAmFLBQNuaWwFA25pbAMJAAACBQJhTAUCYUwEAmFNCQEBVAIFAWYFAWUJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBdAEFAWYFAmFvCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBawIFAWUFAWYFAmFKCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBdgEFAWUJAGQCBQJhSQkAkQMCBQJhQwUCYXcFA25pbAUCYU0FAmFMCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAVEBFWNyZWF0ZVJlZmVycmFsUHJvZ3JhbQQBZQJhZwJhTgJhaAQCYXgJAQFQAQUBUQMJAAACBQJheAUCYXgEAmFPAwkAAAIJAKAIAQkBAW4BBQFlBQR1bml0BgkBAUoBAhtwcm9ncmFtIG5hbWUgYWxyZWFkeSBleGlzdHMDCQAAAgUCYU8FAmFPBAJhUAMJAQEhAQkBCGNvbnRhaW5zAgUBZQUBYQkBASEBCQEIY29udGFpbnMCBQFlAgEgBwQBWQMFAmFQBgkBAUoBAhRpbnZhbGlkIHByb2dyYW0gbmFtZQMJAAACBQFZBQFZBAJhUQMJAQIhPQIJAOwHAQkA2QQBBQJhaAUEdW5pdAYJAQFKAQIXaW52YWxpZCByZXdhcmQgYXNzZXQgaWQDCQAAAgUCYVEFAmFRCQCUCgIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFuAQUBZQYJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAXgBBQFlBQJhZwkAzAgCCQELU3RyaW5nRW50cnkCCQEBeQEFAWUFAmFOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQF3AQUBZQUCYWgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQF2AQUBZQAABQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQEKY3JlYXRlUGFpcgQBZQFmAWcCYVIEAVkDCQELdmFsdWVPckVsc2UCCQCgCAEJAQFuAQUBZQcGCQEBSgECFnByb2dyYW0gZG9lcyBub3QgZXhpc3QDCQAAAgUBWQUBWQQCYVMDCQAAAgkAoAgBCQEBZAMFAWUFAWYFAWcFBHVuaXQGCQEBSgECE3BhaXIgYWxyZWFkeSBleGlzdHMDCQAAAgUCYVMFAmFTBAJhVAMJAQIhPQIFAWYFAWcGCQEBSgECFGNhbm5vdCByZWZlciB0byBzZWxmAwkAAAIFAmFUBQJhVAQCYVUJAJsDAQkAuQkCCQDMCAIFAWUJAMwIAgUBZgkAzAgCBQFnBQNuaWwCAToEAmFWCQDZBAEJAQV2YWx1ZQEJAKIIAQUBYwQCYVcDCQD0AwMFAmFVBQJhUgUCYVYGCQEBSgECDWJhZCBzaWduYXR1cmUDCQAAAgUCYVcFAmFXBAJhWAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBbwIFAWUFAWYAAAQCYVkJAGQCBQJhWAABBAJhTQkBAVQCBQFmBQFlBAFWCQEBVAIFAWcFAWUJAJQKAgkAzggCCQDOCAIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFkAwUBZQUBZgUBZwYJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFvAgUBZQUBZgUCYVkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAW0CBQFlBQFnBQFmBQNuaWwFAmFNBQFWBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAVEBFnVwZGF0ZVJlZmVycmFsQWN0aXZpdHkDAWUBZwJhWgQCYU4JAQV2YWx1ZQEJAKIIAQkBAXkBBQFlBAJiYQkBAiE9AgkAoAgBCQEBcQIFAWUFAWcFBHVuaXQEAWYJAQV2YWx1ZQEJAKIIAQkBAW0CBQFlBQFnBAJheAMJAAACCQClCAEIBQFRBmNhbGxlcgUCYU4GCQEBSgECEXBlcm1pc3Npb24gZGVuaWVkAwkAAAIFAmF4BQJheAQCYmIDCQAAAgUCYmEFAmFaCQCUCgIFA25pbAUEdW5pdAQCYmIDCQAAAgUCYVoGBAJiYwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAXACBQFlBQFmAAAAAQkAlAoCCQDMCAIJAQxCb29sZWFuRW50cnkCCQEBcQIFAWUFAWcGCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBcAIFAWUFAWYFAmJjBQNuaWwFBHVuaXQEAmJjCQBlAgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBcAIFAWUFAWYAAAABCQCUCgIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAXECBQFlBQFnCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBcAIFAWUFAWYFAmJjBQNuaWwFBHVuaXQFAmJiBQJiYgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFRAQxpbmNVbmNsYWltZWQEAWUBZwJiZAJiZQQCYU4JAQV2YWx1ZQEJAKIIAQkBAXkBBQFlBAFmCQEFdmFsdWUBCQCiCAEJAQFtAgUBZQUBZwQCYXgDCQAAAgkApQgBCAUBUQZjYWxsZXIFAmFOBgkBAUoBAhFwZXJtaXNzaW9uIGRlbmllZAMJAAACBQJheAUCYXgEAmJmAwkAAAIFAWUCBnd4bG9jawYJAQFKAQIPaW52YWxpZCBwcm9ncmFtAwkAAAIFAmJmBQJiZgQCYmcDCQEIY29udGFpbnMCCQELdmFsdWVPckVsc2UCCQCiCAEJAQF6AQUBZgIABQFlBgkBAUoBCQCsAgIJAKwCAgkArAICAhhyZWZlcnJlciBub3QgaW4gcHJvZ3JhbT0FAWUCBiBhZGRyPQUBZgMJAAACBQJiZwUCYmcEAmJoAwkBCGNvbnRhaW5zAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEBegEFAWcCAAUBZQYJAQFKAQkArAICCQCsAgIJAKwCAgIYcmVmZXJyYWwgbm90IGluIHByb2dyYW09BQFlAgYgYWRkcj0FAWcDCQAAAgUCYmgFAmJoBAJiaQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBdAEFAWYAAAQCYUgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWsCBQFlBQFmAAAEAmJqCQELdmFsdWVPckVsc2UCCQCfCAEJAQF0AQUBZwAABAJiawkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBbAIFAWUFAWcAAAQCYUkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAXYBBQFlAAAEAmJsCQBkAgUCYmkFAmJkBAJhSgkAZAIFAmFIBQJiZAQCYm0JAGQCBQJiagUCYmUEAmJuCQBkAgUCYmsFAmJlCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQF0AQUBZgUCYmwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQF0AQUBZwUCYm0JAMwIAgkBDEludGVnZXJFbnRyeQIJAQFrAgUBZQUBZgUCYUoJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFsAgUBZQUBZwUCYm4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQF2AQUBZQkAZAIJAGQCBQJhSQUCYmQFAmJlBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQEXaW5jVW5jbGFpbWVkV2l0aFBheW1lbnQCAWUCYUQEAmJmAwkAAAIFAWUCCXd4U3BvdEZlZQYJAQFKAQIPaW52YWxpZCBwcm9ncmFtAwkAAAIFAmJmBQJiZgoBAmJvAgJicAJicQQCYnIJAAACCQDYBAEJAQV2YWx1ZQEIBQJicQdhc3NldElkCQEFdmFsdWUBCQCiCAEJAQF3AQUBZQQCYnMDBQJicgYJAQFKAQIQaW52YWxpZCBhc3NldCBpZAMJAAACBQJicwUCYnMJAM0IAgUCYnAIBQJicQZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EAmJ0CgACYnUIBQFRCHBheW1lbnRzCgACYnYJAJADAQUCYnUKAAJidwUDbmlsCgECYngCAmJ5AmJ6AwkAZwIFAmJ6BQJidgUCYnkJAQJibwIFAmJ5CQCRAwIFAmJ1BQJiegoBAmJBAgJieQJiegMJAGcCBQJiegUCYnYFAmJ5CQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQJiQQIJAQJieAIJAQJieAIJAQJieAIJAQJieAIJAQJieAIJAQJieAIJAQJieAIJAQJieAIJAQJieAIJAQJieAIFAmJ3AAAAAQACAAMABAAFAAYABwAIAAkACgQCYUUKAAJiQgkA/AcEBQR0aGlzAh9pbmNVbmNsYWltZWRXaXRoUGF5bWVudEludGVybmFsCQDMCAIFAmJ0CQDMCAIFAWUJAMwIAgUCYUQJAMwIAgAACQDMCAIAAAUDbmlsBQNuaWwDCQABAgUCYkICA0ludAUCYkIJAAIBCQCsAgIJAAMBBQJiQgIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFAmFFBQJhRQQCYWcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEJAKIIAQkBAXgBBQFlBAJhaAkA2QQBCQEFdmFsdWUBCQCiCAEJAQF3AQUBZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhZwUCYUUFAmFoBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQEFY2xhaW0BAWUEAVkDCQELdmFsdWVPckVsc2UCCQCgCAEJAQFuAQUBZQcGCQEBSgECFnByb2dyYW0gZG9lcyBub3QgZXhpc3QDCQAAAgUBWQUBWQQBWAkAAAIJAKUIAQgFAVEGY2FsbGVyCQEFdmFsdWUBCQCiCAEJAQF5AQUBZQQBaQMFAVgJAKUIAQgFAVEMb3JpZ2luQ2FsbGVyCQClCAEIBQFRBmNhbGxlcgQCYkMJAPwHBAUEdGhpcwINY2xhaW1JbnRlcm5hbAkAzAgCBQFlCQDMCAIFAWkJAMwIAgUBWAUDbmlsBQNuaWwDCQAAAgUCYkMFAmJDCQCUCgIFA25pbAUCYkMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQEJY2xhaW1CdWxrAAQCYkQJAKUIAQgFAVEGY2FsbGVyBAJiRQkAoggBCQEBegEJAKUIAQgFAVEGY2FsbGVyBAJiRgMJAQlpc0RlZmluZWQBBQJiRQYJAQFKAQIUbm8gcmVmZXJyYWwgcHJvZ3JhbXMDCQAAAgUCYkYFAmJGBAJiRwkAtQkCCQEFdmFsdWUBBQJiRQICX18EAmJICQD8BwQFBHRoaXMCEWNsYWltQnVsa0ludGVybmFsCQDMCAIFAmJECQDMCAIFAmJHCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUCYkgFAmJICQCUCgIFA25pbAUCYkgJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQENY2xhaW1SRUFET05MWQIBZQFFBAJhYQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBaAIFAWUFAUUAAAQCYWIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWsCBQFlBQFFAAAJAJQKAgUDbmlsCQDMCAIFAmFiCQDMCAIFAmFhBQNuaWwBUQERY2xhaW1CdWxrUkVBRE9OTFkBAmF1BAJhaQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBcgEFAmF1AAAEAmFqCQELdmFsdWVPckVsc2UCCQCfCAEJAQF0AQUCYXUAAAkAlAoCBQNuaWwJAMwIAgUCYWoJAMwIAgUCYWkFA25pbAFRAQxzZXRUb3RhbEtleXMCAWUBcwQCYkkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWgCBQFlBQFzAAAEAmJKCQELdmFsdWVPckVsc2UCCQCfCAEJAQFqAgUBZQUBcwAABAJhQQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBawIFAWUFAXMAAAQCYksJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWwCBQFlBQFzAAAEAmFpCQBkAgUCYkkFAmJKBAJhagkAZAIFAmFBBQJiSwkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBcgEFAXMFAmFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBdAEFAXMFAmFqBQNuaWwFBHVuaXQBAmJMAQJiTQAEAmJOBAFOCQEBTAADCQABAgUBTgIKQnl0ZVZlY3RvcgQBUwUBTgUBUwMJAAECBQFOAgRVbml0CAUCYkwPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IJAPQDAwgFAmJMCWJvZHlCeXRlcwkAkQMCCAUCYkwGcHJvb2ZzAAAFAmJOgQYUSg==", "height": 2559810, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AcS5USaaQPt6izY3LoVMKwygYzv9pEBHNVB694pmsn7a Next: none Diff:
OldNewDifferences
6565 func keyManagerPublicKey () = "%s__managerPublicKey"
6666
6767
68-func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
68+func keyManagerVaultAddress () = "%s__managerVaultAddress"
69+
70+
71+func getManagerAddressOrFail () = addressFromStringValue(getStringValue(keyManagerVaultAddress()))
6972
7073
7174 func keyClaimHistory (programName,userAddress,transactionId,type) = makeString(["%s%s%s%s%s", "history", type, programName, userAddress, transactionId], separator)
7780 func throwErr (msg) = throw(makeString(["referral.ride:", msg], " "))
7881
7982
80-func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
81- case s: String =>
82- fromBase58String(s)
83- case _: Unit =>
84- unit
85- case _ =>
86- throw("Match error")
87-}
88-
89-
90-func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
91- case s: String =>
92- fromBase58String(s)
93- case _: Unit =>
94- unit
95- case _ =>
96- throw("Match error")
97-}
83+func managerPublicKeyOrUnit () = {
84+ let managerVaultAddress = getManagerAddressOrFail()
85+ match getString(managerVaultAddress, keyManagerPublicKey()) {
86+ case s: String =>
87+ fromBase58String(s)
88+ case _: Unit =>
89+ unit
90+ case _ =>
91+ throw("Match error")
92+ }
93+ }
9894
9995
10096 func mustManager (i) = {
135131 else throwErr("program does not exist")
136132 if ((checkProgramExists == checkProgramExists))
137133 then {
138- let $t046775614 = if (isImplementationContract)
134+ let $t047005637 = if (isImplementationContract)
139135 then $Tuple5(valueOrElse(getInteger(keyClaimedReferral(programName, claimerAddress)), 0), valueOrElse(getInteger(keyUnclaimedReferral(programName, claimerAddress)), 0), keyClaimedReferral(programName, claimerAddress), keyUnclaimedReferral(programName, claimerAddress), keyClaimHistory(programName, claimerAddress, toBase58String(i.transactionId), "claimReferral"))
140136 else $Tuple5(valueOrElse(getInteger(keyClaimedReferrer(programName, claimerAddress)), 0), valueOrElse(getInteger(keyUnclaimedReferrer(programName, claimerAddress)), 0), keyClaimedReferrer(programName, claimerAddress), keyUnclaimedReferrer(programName, claimerAddress), keyClaimHistory(programName, claimerAddress, toBase58String(i.transactionId), "claimReferrer"))
141- let claimerClaimed = $t046775614._1
142- let claimerUnclaimed = $t046775614._2
143- let keyClaimed = $t046775614._3
144- let keyUnclaimed = $t046775614._4
145- let claimHistoryKey = $t046775614._5
137+ let claimerClaimed = $t047005637._1
138+ let claimerUnclaimed = $t047005637._2
139+ let keyClaimed = $t047005637._3
140+ let keyUnclaimed = $t047005637._4
141+ let claimHistoryKey = $t047005637._5
146142 let claimedTotal = valueOrElse(getInteger(keyClaimedTotal(programName)), 0)
147143 let treasuryContract = value(addressFromString(value(getString(keyTreasuryContract(programName)))))
148144 let rewardAssetId = fromBase58String(value(getString(keyRewardAssetId(programName))))
537533 }
538534
539535
540-
541-@Callable(i)
542-func setManager (pendingManagerPublicKey) = {
543- let checkCaller = mustManager(i)
544- if ((checkCaller == checkCaller))
545- then {
546- let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
547- if ((checkManagerPublicKey == checkManagerPublicKey))
548- then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
549- else throw("Strict value is not equal to itself.")
550- }
551- else throw("Strict value is not equal to itself.")
552- }
553-
554-
555-
556-@Callable(i)
557-func confirmManager () = {
558- let pm = pendingManagerPublicKeyOrUnit()
559- let hasPM = if (isDefined(pm))
560- then true
561- else throwErr("no pending manager")
562- if ((hasPM == hasPM))
563- then {
564- let checkPM = if ((i.callerPublicKey == value(pm)))
565- then true
566- else throwErr("you are not pending manager")
567- if ((checkPM == checkPM))
568- then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
569- else throw("Strict value is not equal to itself.")
570- }
571- else throw("Strict value is not equal to itself.")
572- }
573-
574-
575536 @Verifier(tx)
576537 func verify () = {
577538 let targetPublicKey = match managerPublicKeyOrUnit() {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "__"
55
66 func keyWxAssetId () = makeString(["%s", "wxAssetId"], separator)
77
88
99 let keyBackendPublicKey = makeString(["%s", "backendPublicKey"], separator)
1010
1111 func keyExistsReferrerToReferral (programName,referrerAddress,referralAddress) = makeString(["%s%s%s%s", "existsReferrerToReferral", programName, referrerAddress, referralAddress], separator)
1212
1313
1414 func keyClaimedReferrer (programName,claimerAddress) = makeString(["%s%s%s", "claimedReferrer", programName, claimerAddress], separator)
1515
1616
1717 func keyClaimedReferral (programName,claimerAddress) = makeString(["%s%s%s", "claimedReferral", programName, claimerAddress], separator)
1818
1919
2020 func keyUnclaimedReferrer (programName,claimerAddress) = makeString(["%s%s%s", "unclaimedReferrer", programName, claimerAddress], separator)
2121
2222
2323 func keyUnclaimedReferral (programName,claimerAddress) = makeString(["%s%s%s", "unclaimedReferral", programName, claimerAddress], separator)
2424
2525
2626 func keyReferrer (programName,referralAddress) = makeString(["%s%s%s", "referrer", programName, referralAddress], separator)
2727
2828
2929 func keyProgramName (programName) = makeString(["%s%s", "programName", programName], separator)
3030
3131
3232 func keyTotalReferralCount (programName,referrerAddress) = makeString(["%s%s%s", "totalReferralCount", programName, referrerAddress], separator)
3333
3434
3535 func keyActiveReferralCount (programName,referrerAddress) = makeString(["%s%s%s", "activeReferralCount", programName, referrerAddress], separator)
3636
3737
3838 func keyIsReferralActive (programName,referralAddress) = makeString(["%s%s%s", "activeReferral", programName, referralAddress], separator)
3939
4040
4141 func keyClaimedTotalAddress (address) = makeString(["%s%s", "claimedTotalAddress", address], separator)
4242
4343
4444 func keyUnclaimedTotalAddress (address) = makeString(["%s%s", "unclaimedTotalAddress", address], separator)
4545
4646
4747 func keyClaimedTotal (programName) = makeString(["%s%s", "claimedTotal", programName], separator)
4848
4949
5050 func keyRewardsTotal (programName) = makeString(["%s%s", "rewardsTotal", programName], separator)
5151
5252
5353 func keyRewardAssetId (programName) = makeString(["%s%s", "rewardAssetId", programName], separator)
5454
5555
5656 func keyTreasuryContract (programName) = makeString(["%s%s", "treasuryContract", programName], separator)
5757
5858
5959 func keyImplementationContract (programName) = makeString(["%s%s", "implementationContract", programName], separator)
6060
6161
6262 func keyAllReferralPrograms (address) = makeString(["%s%s", "allReferralPrograms", address], separator)
6363
6464
6565 func keyManagerPublicKey () = "%s__managerPublicKey"
6666
6767
68-func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
68+func keyManagerVaultAddress () = "%s__managerVaultAddress"
69+
70+
71+func getManagerAddressOrFail () = addressFromStringValue(getStringValue(keyManagerVaultAddress()))
6972
7073
7174 func keyClaimHistory (programName,userAddress,transactionId,type) = makeString(["%s%s%s%s%s", "history", type, programName, userAddress, transactionId], separator)
7275
7376
7477 func formatClaimHistory (amount) = makeString(["%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(amount)], separator)
7578
7679
7780 func throwErr (msg) = throw(makeString(["referral.ride:", msg], " "))
7881
7982
80-func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
81- case s: String =>
82- fromBase58String(s)
83- case _: Unit =>
84- unit
85- case _ =>
86- throw("Match error")
87-}
88-
89-
90-func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
91- case s: String =>
92- fromBase58String(s)
93- case _: Unit =>
94- unit
95- case _ =>
96- throw("Match error")
97-}
83+func managerPublicKeyOrUnit () = {
84+ let managerVaultAddress = getManagerAddressOrFail()
85+ match getString(managerVaultAddress, keyManagerPublicKey()) {
86+ case s: String =>
87+ fromBase58String(s)
88+ case _: Unit =>
89+ unit
90+ case _ =>
91+ throw("Match error")
92+ }
93+ }
9894
9995
10096 func mustManager (i) = {
10197 let pd = throwErr("permission denied")
10298 match managerPublicKeyOrUnit() {
10399 case pk: ByteVector =>
104100 if ((i.callerPublicKey == pk))
105101 then true
106102 else pd
107103 case _: Unit =>
108104 if ((i.caller == this))
109105 then true
110106 else pd
111107 case _ =>
112108 throw("Match error")
113109 }
114110 }
115111
116112
117113 func updateAllReferralPrograms (address,programName) = {
118114 let allReferralPrograms = valueOrElse(getString(keyAllReferralPrograms(address)), "")
119115 let updatedAllReferralPrograms = if (contains(allReferralPrograms, programName))
120116 then nil
121117 else {
122118 let newAllReferralPrograms = if ((allReferralPrograms == ""))
123119 then programName
124120 else makeString([allReferralPrograms, programName], separator)
125121 [StringEntry(keyAllReferralPrograms(address), newAllReferralPrograms)]
126122 }
127123 updatedAllReferralPrograms
128124 }
129125
130126
131127 @Callable(i)
132128 func claimInternal (programName,claimerAddress,isImplementationContract) = {
133129 let checkProgramExists = if (valueOrElse(getBoolean(keyProgramName(programName)), false))
134130 then true
135131 else throwErr("program does not exist")
136132 if ((checkProgramExists == checkProgramExists))
137133 then {
138- let $t046775614 = if (isImplementationContract)
134+ let $t047005637 = if (isImplementationContract)
139135 then $Tuple5(valueOrElse(getInteger(keyClaimedReferral(programName, claimerAddress)), 0), valueOrElse(getInteger(keyUnclaimedReferral(programName, claimerAddress)), 0), keyClaimedReferral(programName, claimerAddress), keyUnclaimedReferral(programName, claimerAddress), keyClaimHistory(programName, claimerAddress, toBase58String(i.transactionId), "claimReferral"))
140136 else $Tuple5(valueOrElse(getInteger(keyClaimedReferrer(programName, claimerAddress)), 0), valueOrElse(getInteger(keyUnclaimedReferrer(programName, claimerAddress)), 0), keyClaimedReferrer(programName, claimerAddress), keyUnclaimedReferrer(programName, claimerAddress), keyClaimHistory(programName, claimerAddress, toBase58String(i.transactionId), "claimReferrer"))
141- let claimerClaimed = $t046775614._1
142- let claimerUnclaimed = $t046775614._2
143- let keyClaimed = $t046775614._3
144- let keyUnclaimed = $t046775614._4
145- let claimHistoryKey = $t046775614._5
137+ let claimerClaimed = $t047005637._1
138+ let claimerUnclaimed = $t047005637._2
139+ let keyClaimed = $t047005637._3
140+ let keyUnclaimed = $t047005637._4
141+ let claimHistoryKey = $t047005637._5
146142 let claimedTotal = valueOrElse(getInteger(keyClaimedTotal(programName)), 0)
147143 let treasuryContract = value(addressFromString(value(getString(keyTreasuryContract(programName)))))
148144 let rewardAssetId = fromBase58String(value(getString(keyRewardAssetId(programName))))
149145 let claimedTotalAddress = valueOrElse(getInteger(keyClaimedTotalAddress(claimerAddress)), 0)
150146 let unclaimedTotalAddress = valueOrElse(getInteger(keyUnclaimedTotalAddress(claimerAddress)), 0)
151147 if (if (isImplementationContract)
152148 then (claimerUnclaimed == 0)
153149 else false)
154150 then $Tuple2(nil, 0)
155151 else {
156152 let checkCanClaim = if ((claimerUnclaimed > 0))
157153 then true
158154 else throwErr("nothing to claim")
159155 if ((checkCanClaim == checkCanClaim))
160156 then {
161157 let newClaimerClaimed = (claimerClaimed + claimerUnclaimed)
162158 let newClaimedTotal = (claimedTotal + claimerUnclaimed)
163159 let newClaimedTotalAddress = (claimedTotalAddress + claimerUnclaimed)
164160 let newUnclaimedTotalAddress = (unclaimedTotalAddress - claimerUnclaimed)
165161 let balanceBefore = value(assetBalance(this, rewardAssetId))
166162 if ((balanceBefore == balanceBefore))
167163 then {
168164 let res = invoke(treasuryContract, "withdrawReferralReward", [claimerUnclaimed], nil)
169165 if ((res == res))
170166 then {
171167 let balanceAfter = value(assetBalance(this, rewardAssetId))
172168 if ((balanceAfter == balanceAfter))
173169 then {
174170 let balanceDiff = (balanceAfter - balanceBefore)
175171 if ((balanceDiff == balanceDiff))
176172 then {
177173 let checkBalance = if ((balanceDiff == claimerUnclaimed))
178174 then true
179175 else throwErr("insufficient balance on referral contract")
180176 if ((checkBalance == checkBalance))
181177 then $Tuple2([IntegerEntry(keyClaimed, newClaimerClaimed), IntegerEntry(keyUnclaimed, 0), IntegerEntry(keyClaimedTotal(programName), newClaimedTotal), IntegerEntry(keyClaimedTotalAddress(claimerAddress), newClaimedTotalAddress), IntegerEntry(keyUnclaimedTotalAddress(claimerAddress), newUnclaimedTotalAddress), ScriptTransfer(addressFromStringValue(claimerAddress), claimerUnclaimed, rewardAssetId), StringEntry(claimHistoryKey, formatClaimHistory(claimerUnclaimed))], claimerUnclaimed)
182178 else throw("Strict value is not equal to itself.")
183179 }
184180 else throw("Strict value is not equal to itself.")
185181 }
186182 else throw("Strict value is not equal to itself.")
187183 }
188184 else throw("Strict value is not equal to itself.")
189185 }
190186 else throw("Strict value is not equal to itself.")
191187 }
192188 else throw("Strict value is not equal to itself.")
193189 }
194190 }
195191 else throw("Strict value is not equal to itself.")
196192 }
197193
198194
199195
200196 @Callable(i)
201197 func claimBulkInternal (claimer,programNames,currentIter) = {
202198 let checkCaller = if ((i.caller == this))
203199 then true
204200 else throwErr("permission denied")
205201 if ((checkCaller == checkCaller))
206202 then if ((currentIter == size(programNames)))
207203 then nil
208204 else {
209205 let programName = programNames[currentIter]
210206 let programUnclaimed = valueOrElse(getInteger(keyUnclaimedReferrer(programName, claimer)), 0)
211207 let claimHistoryKey = keyClaimHistory(programName, claimer, toBase58String(i.transactionId), "claimBulk")
212208 let claimBulkInternal = invoke(this, "claimBulkInternal", [claimer, programNames, (currentIter + 1)], nil)
213209 if ((claimBulkInternal == claimBulkInternal))
214210 then {
215211 let unclaimedReferrer = valueOrElse(getInteger(keyUnclaimedReferrer(programName, claimer)), 0)
216212 let claim = if ((unclaimedReferrer > 0))
217213 then invoke(this, "claimInternal", [programName, claimer, false], nil)
218214 else unit
219215 if ((claim == claim))
220216 then $Tuple2(nil, [claimBulkInternal, claim])
221217 else throw("Strict value is not equal to itself.")
222218 }
223219 else throw("Strict value is not equal to itself.")
224220 }
225221 else throw("Strict value is not equal to itself.")
226222 }
227223
228224
229225
230226 @Callable(i)
231227 func incUnclaimedWithPaymentInternal (paymentAmounts,programName,referrerAddresses,currentIter,resAmount) = {
232228 let checkCaller = if ((i.caller == this))
233229 then true
234230 else throwErr("permission denied")
235231 if ((checkCaller == checkCaller))
236232 then {
237233 let argsComparison = (size(paymentAmounts) == size(referrerAddresses))
238234 let check = if (argsComparison)
239235 then true
240236 else throwErr("lists in args must be same size")
241237 if ((check == check))
242238 then if ((currentIter == size(paymentAmounts)))
243239 then $Tuple2(nil, resAmount)
244240 else {
245241 let referrerAddress = referrerAddresses[currentIter]
246242 let unclaimedTotalAddress = valueOrElse(getInteger(keyUnclaimedTotalAddress(referrerAddress)), 0)
247243 let referrerUnclaimed = valueOrElse(getInteger(keyUnclaimedReferrer(programName, referrerAddress)), 0)
248244 let rewardsTotal = valueOrElse(getInteger(keyRewardsTotal(programName)), 0)
249245 let newUnclaimedTotalAddress = (unclaimedTotalAddress + paymentAmounts[currentIter])
250246 let newReferrerUnclaimed = (referrerUnclaimed + paymentAmounts[currentIter])
251247 let newResAmount = (resAmount + paymentAmounts[currentIter])
252248 let inv = invoke(this, "incUnclaimedWithPaymentInternal", [paymentAmounts, programName, referrerAddresses, (currentIter + 1), newResAmount], nil)
253249 if ((inv == inv))
254250 then {
255251 let updatedAllReferrerPrograms = updateAllReferralPrograms(referrerAddress, programName)
256252 $Tuple2(([IntegerEntry(keyUnclaimedTotalAddress(referrerAddress), newUnclaimedTotalAddress), IntegerEntry(keyUnclaimedReferrer(programName, referrerAddress), newReferrerUnclaimed), IntegerEntry(keyRewardsTotal(programName), (rewardsTotal + paymentAmounts[currentIter]))] ++ updatedAllReferrerPrograms), inv)
257253 }
258254 else throw("Strict value is not equal to itself.")
259255 }
260256 else throw("Strict value is not equal to itself.")
261257 }
262258 else throw("Strict value is not equal to itself.")
263259 }
264260
265261
266262
267263 @Callable(i)
268264 func createReferralProgram (programName,treasuryContract,implementationContract,rewardAssetId) = {
269265 let checkCaller = mustManager(i)
270266 if ((checkCaller == checkCaller))
271267 then {
272268 let checkProgramName = if ((getBoolean(keyProgramName(programName)) == unit))
273269 then true
274270 else throwErr("program name already exists")
275271 if ((checkProgramName == checkProgramName))
276272 then {
277273 let programNameIsValid = if (!(contains(programName, separator)))
278274 then !(contains(programName, " "))
279275 else false
280276 let checkProgramExists = if (programNameIsValid)
281277 then true
282278 else throwErr("invalid program name")
283279 if ((checkProgramExists == checkProgramExists))
284280 then {
285281 let checkRewardAsset = if ((assetInfo(fromBase58String(rewardAssetId)) != unit))
286282 then true
287283 else throwErr("invalid reward asset id")
288284 if ((checkRewardAsset == checkRewardAsset))
289285 then $Tuple2([BooleanEntry(keyProgramName(programName), true), StringEntry(keyTreasuryContract(programName), treasuryContract), StringEntry(keyImplementationContract(programName), implementationContract), StringEntry(keyRewardAssetId(programName), rewardAssetId), IntegerEntry(keyRewardsTotal(programName), 0)], unit)
290286 else throw("Strict value is not equal to itself.")
291287 }
292288 else throw("Strict value is not equal to itself.")
293289 }
294290 else throw("Strict value is not equal to itself.")
295291 }
296292 else throw("Strict value is not equal to itself.")
297293 }
298294
299295
300296
301297 @Callable(i)
302298 func createPair (programName,referrerAddress,referralAddress,signature) = {
303299 let checkProgramExists = if (valueOrElse(getBoolean(keyProgramName(programName)), false))
304300 then true
305301 else throwErr("program does not exist")
306302 if ((checkProgramExists == checkProgramExists))
307303 then {
308304 let pairReferrerToReferralExistCheck = if ((getBoolean(keyExistsReferrerToReferral(programName, referrerAddress, referralAddress)) == unit))
309305 then true
310306 else throwErr("pair already exists")
311307 if ((pairReferrerToReferralExistCheck == pairReferrerToReferralExistCheck))
312308 then {
313309 let noRefSelf = if ((referrerAddress != referralAddress))
314310 then true
315311 else throwErr("cannot refer to self")
316312 if ((noRefSelf == noRefSelf))
317313 then {
318314 let pair = toBytes(makeString([programName, referrerAddress, referralAddress], ":"))
319315 let backendPublicKey = fromBase58String(value(getString(keyBackendPublicKey)))
320316 let validateSignature = if (sigVerify(pair, signature, backendPublicKey))
321317 then true
322318 else throwErr("bad signature")
323319 if ((validateSignature == validateSignature))
324320 then {
325321 let totalReferralCount = valueOrElse(getInteger(keyTotalReferralCount(programName, referrerAddress)), 0)
326322 let newTotalReferralCount = (totalReferralCount + 1)
327323 let updatedAllReferrerPrograms = updateAllReferralPrograms(referrerAddress, programName)
328324 let updatedAllReferralPrograms = updateAllReferralPrograms(referralAddress, programName)
329325 $Tuple2((([BooleanEntry(keyExistsReferrerToReferral(programName, referrerAddress, referralAddress), true), IntegerEntry(keyTotalReferralCount(programName, referrerAddress), newTotalReferralCount), StringEntry(keyReferrer(programName, referralAddress), referrerAddress)] ++ updatedAllReferrerPrograms) ++ updatedAllReferralPrograms), unit)
330326 }
331327 else throw("Strict value is not equal to itself.")
332328 }
333329 else throw("Strict value is not equal to itself.")
334330 }
335331 else throw("Strict value is not equal to itself.")
336332 }
337333 else throw("Strict value is not equal to itself.")
338334 }
339335
340336
341337
342338 @Callable(i)
343339 func updateReferralActivity (programName,referralAddress,isActive) = {
344340 let implementationContract = value(getString(keyImplementationContract(programName)))
345341 let isReferralActive = (getBoolean(keyIsReferralActive(programName, referralAddress)) != unit)
346342 let referrerAddress = value(getString(keyReferrer(programName, referralAddress)))
347343 let checkCaller = if ((toString(i.caller) == implementationContract))
348344 then true
349345 else throwErr("permission denied")
350346 if ((checkCaller == checkCaller))
351347 then {
352348 let update = if ((isReferralActive == isActive))
353349 then $Tuple2(nil, unit)
354350 else {
355351 let update = if ((isActive == true))
356352 then {
357353 let newActiveReferralCount = (valueOrElse(getInteger(keyActiveReferralCount(programName, referrerAddress)), 0) + 1)
358354 $Tuple2([BooleanEntry(keyIsReferralActive(programName, referralAddress), true), IntegerEntry(keyActiveReferralCount(programName, referrerAddress), newActiveReferralCount)], unit)
359355 }
360356 else {
361357 let newActiveReferralCount = (valueOrElse(getInteger(keyActiveReferralCount(programName, referrerAddress)), 0) - 1)
362358 $Tuple2([DeleteEntry(keyIsReferralActive(programName, referralAddress)), IntegerEntry(keyActiveReferralCount(programName, referrerAddress), newActiveReferralCount)], unit)
363359 }
364360 update
365361 }
366362 update
367363 }
368364 else throw("Strict value is not equal to itself.")
369365 }
370366
371367
372368
373369 @Callable(i)
374370 func incUnclaimed (programName,referralAddress,referrerReward,referralReward) = {
375371 let implementationContract = value(getString(keyImplementationContract(programName)))
376372 let referrerAddress = value(getString(keyReferrer(programName, referralAddress)))
377373 let checkCaller = if ((toString(i.caller) == implementationContract))
378374 then true
379375 else throwErr("permission denied")
380376 if ((checkCaller == checkCaller))
381377 then {
382378 let checkProgram = if ((programName == "wxlock"))
383379 then true
384380 else throwErr("invalid program")
385381 if ((checkProgram == checkProgram))
386382 then {
387383 let checkReferrerInProgram = if (contains(valueOrElse(getString(keyAllReferralPrograms(referrerAddress)), ""), programName))
388384 then true
389385 else throwErr(((("referrer not in program=" + programName) + " addr=") + referrerAddress))
390386 if ((checkReferrerInProgram == checkReferrerInProgram))
391387 then {
392388 let checkReferralInProgram = if (contains(valueOrElse(getString(keyAllReferralPrograms(referralAddress)), ""), programName))
393389 then true
394390 else throwErr(((("referral not in program=" + programName) + " addr=") + referralAddress))
395391 if ((checkReferralInProgram == checkReferralInProgram))
396392 then {
397393 let unclaimedTotalReferrer = valueOrElse(getInteger(keyUnclaimedTotalAddress(referrerAddress)), 0)
398394 let referrerUnclaimed = valueOrElse(getInteger(keyUnclaimedReferrer(programName, referrerAddress)), 0)
399395 let unclaimedTotalReferral = valueOrElse(getInteger(keyUnclaimedTotalAddress(referralAddress)), 0)
400396 let referralUnclaimed = valueOrElse(getInteger(keyUnclaimedReferral(programName, referralAddress)), 0)
401397 let rewardsTotal = valueOrElse(getInteger(keyRewardsTotal(programName)), 0)
402398 let newUnclaimedTotalReferrer = (unclaimedTotalReferrer + referrerReward)
403399 let newReferrerUnclaimed = (referrerUnclaimed + referrerReward)
404400 let newUnclaimedTotalReferral = (unclaimedTotalReferral + referralReward)
405401 let newReferralUnclaimed = (referralUnclaimed + referralReward)
406402 $Tuple2([IntegerEntry(keyUnclaimedTotalAddress(referrerAddress), newUnclaimedTotalReferrer), IntegerEntry(keyUnclaimedTotalAddress(referralAddress), newUnclaimedTotalReferral), IntegerEntry(keyUnclaimedReferrer(programName, referrerAddress), newReferrerUnclaimed), IntegerEntry(keyUnclaimedReferral(programName, referralAddress), newReferralUnclaimed), IntegerEntry(keyRewardsTotal(programName), ((rewardsTotal + referrerReward) + referralReward))], unit)
407403 }
408404 else throw("Strict value is not equal to itself.")
409405 }
410406 else throw("Strict value is not equal to itself.")
411407 }
412408 else throw("Strict value is not equal to itself.")
413409 }
414410 else throw("Strict value is not equal to itself.")
415411 }
416412
417413
418414
419415 @Callable(i)
420416 func incUnclaimedWithPayment (programName,referrerAddresses) = {
421417 let checkProgram = if ((programName == "wxSpotFee"))
422418 then true
423419 else throwErr("invalid program")
424420 if ((checkProgram == checkProgram))
425421 then {
426422 func map (accum,next) = {
427423 let assetIdCheck = (toBase58String(value(next.assetId)) == value(getString(keyRewardAssetId(programName))))
428424 let amountCheck = if (assetIdCheck)
429425 then true
430426 else throwErr("invalid asset id")
431427 if ((amountCheck == amountCheck))
432428 then (accum :+ next.amount)
433429 else throw("Strict value is not equal to itself.")
434430 }
435431
436432 let payments = {
437433 let $l = i.payments
438434 let $s = size($l)
439435 let $acc0 = nil
440436 func $f0_1 ($a,$i) = if (($i >= $s))
441437 then $a
442438 else map($a, $l[$i])
443439
444440 func $f0_2 ($a,$i) = if (($i >= $s))
445441 then $a
446442 else throw("List size exceeds 10")
447443
448444 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
449445 }
450446 let resAmount = {
451447 let @ = invoke(this, "incUnclaimedWithPaymentInternal", [payments, programName, referrerAddresses, 0, 0], nil)
452448 if ($isInstanceOf(@, "Int"))
453449 then @
454450 else throw(($getType(@) + " couldn't be cast to Int"))
455451 }
456452 if ((resAmount == resAmount))
457453 then {
458454 let treasuryContract = addressFromStringValue(value(getString(keyTreasuryContract(programName))))
459455 let rewardAssetId = fromBase58String(value(getString(keyRewardAssetId(programName))))
460456 [ScriptTransfer(treasuryContract, resAmount, rewardAssetId)]
461457 }
462458 else throw("Strict value is not equal to itself.")
463459 }
464460 else throw("Strict value is not equal to itself.")
465461 }
466462
467463
468464
469465 @Callable(i)
470466 func claim (programName) = {
471467 let checkProgramExists = if (valueOrElse(getBoolean(keyProgramName(programName)), false))
472468 then true
473469 else throwErr("program does not exist")
474470 if ((checkProgramExists == checkProgramExists))
475471 then {
476472 let isImplementationContract = (toString(i.caller) == value(getString(keyImplementationContract(programName))))
477473 let claimerAddress = if (isImplementationContract)
478474 then toString(i.originCaller)
479475 else toString(i.caller)
480476 let claimInternal = invoke(this, "claimInternal", [programName, claimerAddress, isImplementationContract], nil)
481477 if ((claimInternal == claimInternal))
482478 then $Tuple2(nil, claimInternal)
483479 else throw("Strict value is not equal to itself.")
484480 }
485481 else throw("Strict value is not equal to itself.")
486482 }
487483
488484
489485
490486 @Callable(i)
491487 func claimBulk () = {
492488 let callerAddress = toString(i.caller)
493489 let callerProgramsStr = getString(keyAllReferralPrograms(toString(i.caller)))
494490 let programsExists = if (isDefined(callerProgramsStr))
495491 then true
496492 else throwErr("no referral programs")
497493 if ((programsExists == programsExists))
498494 then {
499495 let callerPrograms = split(value(callerProgramsStr), "__")
500496 let bulkClaim = invoke(this, "claimBulkInternal", [callerAddress, callerPrograms, 0], nil)
501497 if ((bulkClaim == bulkClaim))
502498 then $Tuple2(nil, bulkClaim)
503499 else throw("Strict value is not equal to itself.")
504500 }
505501 else throw("Strict value is not equal to itself.")
506502 }
507503
508504
509505
510506 @Callable(i)
511507 func claimREADONLY (programName,userAddress) = {
512508 let claimerClaimed = valueOrElse(getInteger(keyClaimedReferrer(programName, userAddress)), 0)
513509 let claimerUnclaimed = valueOrElse(getInteger(keyUnclaimedReferrer(programName, userAddress)), 0)
514510 $Tuple2(nil, [claimerUnclaimed, claimerClaimed])
515511 }
516512
517513
518514
519515 @Callable(i)
520516 func claimBulkREADONLY (claimer) = {
521517 let claimedTotalAddress = valueOrElse(getInteger(keyClaimedTotalAddress(claimer)), 0)
522518 let unclaimedTotalAddress = valueOrElse(getInteger(keyUnclaimedTotalAddress(claimer)), 0)
523519 $Tuple2(nil, [unclaimedTotalAddress, claimedTotalAddress])
524520 }
525521
526522
527523
528524 @Callable(i)
529525 func setTotalKeys (programName,address) = {
530526 let claimedReferrer = valueOrElse(getInteger(keyClaimedReferrer(programName, address)), 0)
531527 let claimedReferral = valueOrElse(getInteger(keyClaimedReferral(programName, address)), 0)
532528 let unclaimedReferrer = valueOrElse(getInteger(keyUnclaimedReferrer(programName, address)), 0)
533529 let unclaimedReferral = valueOrElse(getInteger(keyUnclaimedReferral(programName, address)), 0)
534530 let claimedTotalAddress = (claimedReferrer + claimedReferral)
535531 let unclaimedTotalAddress = (unclaimedReferrer + unclaimedReferral)
536532 $Tuple2([IntegerEntry(keyClaimedTotalAddress(address), claimedTotalAddress), IntegerEntry(keyUnclaimedTotalAddress(address), unclaimedTotalAddress)], unit)
537533 }
538534
539535
540-
541-@Callable(i)
542-func setManager (pendingManagerPublicKey) = {
543- let checkCaller = mustManager(i)
544- if ((checkCaller == checkCaller))
545- then {
546- let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
547- if ((checkManagerPublicKey == checkManagerPublicKey))
548- then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
549- else throw("Strict value is not equal to itself.")
550- }
551- else throw("Strict value is not equal to itself.")
552- }
553-
554-
555-
556-@Callable(i)
557-func confirmManager () = {
558- let pm = pendingManagerPublicKeyOrUnit()
559- let hasPM = if (isDefined(pm))
560- then true
561- else throwErr("no pending manager")
562- if ((hasPM == hasPM))
563- then {
564- let checkPM = if ((i.callerPublicKey == value(pm)))
565- then true
566- else throwErr("you are not pending manager")
567- if ((checkPM == checkPM))
568- then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
569- else throw("Strict value is not equal to itself.")
570- }
571- else throw("Strict value is not equal to itself.")
572- }
573-
574-
575536 @Verifier(tx)
576537 func verify () = {
577538 let targetPublicKey = match managerPublicKeyOrUnit() {
578539 case pk: ByteVector =>
579540 pk
580541 case _: Unit =>
581542 tx.senderPublicKey
582543 case _ =>
583544 throw("Match error")
584545 }
585546 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
586547 }
587548

github/deemru/w8io/169f3d6 
90.79 ms