tx · 3UH88heEP1uWs5zG6T9Bw1My5283R1HaAVxzDWUqQqix

3NAsFvuLwxz1iUtZ9fmhfmSN16r9NEsPqsh:  -0.01800000 Waves

2023.01.19 12:47 [2411647] smart account 3NAsFvuLwxz1iUtZ9fmhfmSN16r9NEsPqsh > SELF 0.00000000 Waves

{ "type": 13, "id": "3UH88heEP1uWs5zG6T9Bw1My5283R1HaAVxzDWUqQqix", "fee": 1800000, "feeAssetId": null, "timestamp": 1674121699676, "version": 1, "sender": "3NAsFvuLwxz1iUtZ9fmhfmSN16r9NEsPqsh", "senderPublicKey": "33fpjdpM9FMu87RZKePniPardKqQXM96sm7VhAk3JEVQ", "proofs": [ "RLDetqPdLYsSGq2gQaBkknMm8frqtNVZZCu4EqdxXmh19Vc6UKo1fDw9nerGgYiseYvj95KDF3Sj3PtSNjRVhGY" ], "script": "base64:BgLnEwgCEgUKAwgIBBIFCgMIGAESBwoFEQgYAQESBgoECAgICBIGCgQICAgCEgUKAwgIBBIGCgQICAEBEgQKAggYEgMKAQgSABIECgIICBIDCgEIEgQKAggIEgMKAQgSACIJc2VwYXJhdG9yIgxrZXlXeEFzc2V0SWQiE2tleUJhY2tlbmRQdWJsaWNLZXkiG2tleUV4aXN0c1JlZmVycmVyVG9SZWZlcnJhbCILcHJvZ3JhbU5hbWUiD3JlZmVycmVyQWRkcmVzcyIPcmVmZXJyYWxBZGRyZXNzIhJrZXlDbGFpbWVkUmVmZXJyZXIiDmNsYWltZXJBZGRyZXNzIhJrZXlDbGFpbWVkUmVmZXJyYWwiFGtleVVuY2xhaW1lZFJlZmVycmVyIhRrZXlVbmNsYWltZWRSZWZlcnJhbCILa2V5UmVmZXJyZXIiDmtleVByb2dyYW1OYW1lIhVrZXlUb3RhbFJlZmVycmFsQ291bnQiFmtleUFjdGl2ZVJlZmVycmFsQ291bnQiE2tleUlzUmVmZXJyYWxBY3RpdmUiFmtleUNsYWltZWRUb3RhbEFkZHJlc3MiB2FkZHJlc3MiGGtleVVuY2xhaW1lZFRvdGFsQWRkcmVzcyIPa2V5Q2xhaW1lZFRvdGFsIg9rZXlSZXdhcmRzVG90YWwiEGtleVJld2FyZEFzc2V0SWQiE2tleVRyZWFzdXJ5Q29udHJhY3QiGWtleUltcGxlbWVudGF0aW9uQ29udHJhY3QiFmtleUFsbFJlZmVycmFsUHJvZ3JhbXMiJ2tleUxhc3RJbmNVbmNsYWltZWRXaXRoUGF5bWVudENhbGxCbG9jayITa2V5TWFuYWdlclB1YmxpY0tleSIaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiD2tleUNsYWltSGlzdG9yeSILdXNlckFkZHJlc3MiDXRyYW5zYWN0aW9uSWQiBHR5cGUiEmZvcm1hdENsYWltSGlzdG9yeSIGYW1vdW50Igh0aHJvd0VyciIDbXNnIhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IgckbWF0Y2gwIgFzIh1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdCILbXVzdE1hbmFnZXIiAWkiAnBkIgJwayIZdXBkYXRlQWxsUmVmZXJyYWxQcm9ncmFtcyITYWxsUmVmZXJyYWxQcm9ncmFtcyIadXBkYXRlZEFsbFJlZmVycmFsUHJvZ3JhbXMiFm5ld0FsbFJlZmVycmFsUHJvZ3JhbXMiGGlzSW1wbGVtZW50YXRpb25Db250cmFjdCISY2hlY2tQcm9ncmFtRXhpc3RzIgskdDA0ODIxNTc1OCIOY2xhaW1lckNsYWltZWQiEGNsYWltZXJVbmNsYWltZWQiCmtleUNsYWltZWQiDGtleVVuY2xhaW1lZCIPY2xhaW1IaXN0b3J5S2V5IgxjbGFpbWVkVG90YWwiEHRyZWFzdXJ5Q29udHJhY3QiDXJld2FyZEFzc2V0SWQiE2NsYWltZWRUb3RhbEFkZHJlc3MiFXVuY2xhaW1lZFRvdGFsQWRkcmVzcyINY2hlY2tDYW5DbGFpbSIRbmV3Q2xhaW1lckNsYWltZWQiD25ld0NsYWltZWRUb3RhbCIWbmV3Q2xhaW1lZFRvdGFsQWRkcmVzcyIYbmV3VW5jbGFpbWVkVG90YWxBZGRyZXNzIg1iYWxhbmNlQmVmb3JlIgNyZXMiDGJhbGFuY2VBZnRlciILYmFsYW5jZURpZmYiDGNoZWNrQmFsYW5jZSIHY2xhaW1lciIMcHJvZ3JhbU5hbWVzIgtjdXJyZW50SXRlciILY2hlY2tDYWxsZXIiEHByb2dyYW1VbmNsYWltZWQiEWNsYWltQnVsa0ludGVybmFsIhF1bmNsYWltZWRSZWZlcnJlciIFY2xhaW0iDnBheW1lbnRBbW91bnRzIhFyZWZlcnJlckFkZHJlc3NlcyIJcmVzQW1vdW50Ig5hcmdzQ29tcGFyaXNvbiIFY2hlY2siEXJlZmVycmVyVW5jbGFpbWVkIgxyZXdhcmRzVG90YWwiFG5ld1JlZmVycmVyVW5jbGFpbWVkIgxuZXdSZXNBbW91bnQiA2ludiIadXBkYXRlZEFsbFJlZmVycmVyUHJvZ3JhbXMiFmltcGxlbWVudGF0aW9uQ29udHJhY3QiEGNoZWNrUHJvZ3JhbU5hbWUiEnByb2dyYW1OYW1lSXNWYWxpZCIQY2hlY2tSZXdhcmRBc3NldCIJc2lnbmF0dXJlIiBwYWlyUmVmZXJyZXJUb1JlZmVycmFsRXhpc3RDaGVjayIJbm9SZWZTZWxmIgRwYWlyIhBiYWNrZW5kUHVibGljS2V5IhF2YWxpZGF0ZVNpZ25hdHVyZSISdG90YWxSZWZlcnJhbENvdW50IhVuZXdUb3RhbFJlZmVycmFsQ291bnQiCGlzQWN0aXZlIhBpc1JlZmVycmFsQWN0aXZlIgZ1cGRhdGUiFm5ld0FjdGl2ZVJlZmVycmFsQ291bnQiDnJlZmVycmVyUmV3YXJkIg5yZWZlcnJhbFJld2FyZCIMY2hlY2tQcm9ncmFtIhZjaGVja1JlZmVycmVySW5Qcm9ncmFtIhZjaGVja1JlZmVycmFsSW5Qcm9ncmFtIhZ1bmNsYWltZWRUb3RhbFJlZmVycmVyIhZ1bmNsYWltZWRUb3RhbFJlZmVycmFsIhFyZWZlcnJhbFVuY2xhaW1lZCIZbmV3VW5jbGFpbWVkVG90YWxSZWZlcnJlciIZbmV3VW5jbGFpbWVkVG90YWxSZWZlcnJhbCIUbmV3UmVmZXJyYWxVbmNsYWltZWQiDWNhbGxlckFkZHJlc3MiCGxhc3RDYWxsIgp3YWl0QmxvY2tzIg1sYXN0Q2FsbENoZWNrIgNtYXAiBWFjY3VtIgRuZXh0Igxhc3NldElkQ2hlY2siC2Ftb3VudENoZWNrIghwYXltZW50cyICJGwiAiRzIgUkYWNjMCIFJGYwXzEiAiRhIgIkaSIFJGYwXzIiAUAiDWNsYWltSW50ZXJuYWwiEWNhbGxlclByb2dyYW1zU3RyIg5wcm9ncmFtc0V4aXN0cyIOY2FsbGVyUHJvZ3JhbXMiCWJ1bGtDbGFpbSIPY2xhaW1lZFJlZmVycmVyIg9jbGFpbWVkUmVmZXJyYWwiEXVuY2xhaW1lZFJlZmVycmFsIhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleR8AAWECAl9fAQFiAAkAuQkCCQDMCAICAiVzCQDMCAICCXd4QXNzZXRJZAUDbmlsBQFhAAFjCQC5CQIJAMwIAgICJXMJAMwIAgIQYmFja2VuZFB1YmxpY0tleQUDbmlsBQFhAQFkAwFlAWYBZwkAuQkCCQDMCAICCCVzJXMlcyVzCQDMCAICGGV4aXN0c1JlZmVycmVyVG9SZWZlcnJhbAkAzAgCBQFlCQDMCAIFAWYJAMwIAgUBZwUDbmlsBQFhAQFoAgFlAWkJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIPY2xhaW1lZFJlZmVycmVyCQDMCAIFAWUJAMwIAgUBaQUDbmlsBQFhAQFqAgFlAWkJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIPY2xhaW1lZFJlZmVycmFsCQDMCAIFAWUJAMwIAgUBaQUDbmlsBQFhAQFrAgFlAWkJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIRdW5jbGFpbWVkUmVmZXJyZXIJAMwIAgUBZQkAzAgCBQFpBQNuaWwFAWEBAWwCAWUBaQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhF1bmNsYWltZWRSZWZlcnJhbAkAzAgCBQFlCQDMCAIFAWkFA25pbAUBYQEBbQIBZQFnCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICCHJlZmVycmVyCQDMCAIFAWUJAMwIAgUBZwUDbmlsBQFhAQFuAQFlCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgtwcm9ncmFtTmFtZQkAzAgCBQFlBQNuaWwFAWEBAW8CAWUBZgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhJ0b3RhbFJlZmVycmFsQ291bnQJAMwIAgUBZQkAzAgCBQFmBQNuaWwFAWEBAXACAWUBZgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhNhY3RpdmVSZWZlcnJhbENvdW50CQDMCAIFAWUJAMwIAgUBZgUDbmlsBQFhAQFxAgFlAWcJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIOYWN0aXZlUmVmZXJyYWwJAMwIAgUBZQkAzAgCBQFnBQNuaWwFAWEBAXIBAXMJALkJAgkAzAgCAgQlcyVzCQDMCAICE2NsYWltZWRUb3RhbEFkZHJlc3MJAMwIAgUBcwUDbmlsBQFhAQF0AQFzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhV1bmNsYWltZWRUb3RhbEFkZHJlc3MJAMwIAgUBcwUDbmlsBQFhAQF1AQFlCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgxjbGFpbWVkVG90YWwJAMwIAgUBZQUDbmlsBQFhAQF2AQFlCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgxyZXdhcmRzVG90YWwJAMwIAgUBZQUDbmlsBQFhAQF3AQFlCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg1yZXdhcmRBc3NldElkCQDMCAIFAWUFA25pbAUBYQEBeAEBZQkAuQkCCQDMCAICBCVzJXMJAMwIAgIQdHJlYXN1cnlDb250cmFjdAkAzAgCBQFlBQNuaWwFAWEBAXkBAWUJALkJAgkAzAgCAgQlcyVzCQDMCAICFmltcGxlbWVudGF0aW9uQ29udHJhY3QJAMwIAgUBZQUDbmlsBQFhAQF6AQFzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhNhbGxSZWZlcnJhbFByb2dyYW1zCQDMCAIFAXMFA25pbAUBYQEBQQEBcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIkbGFzdEluY1VuY2xhaW1lZFdpdGhQYXltZW50Q2FsbEJsb2NrCQDMCAIFAXMFA25pbAUBYQEBQgACFCVzX19tYW5hZ2VyUHVibGljS2V5AQFDAAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQFEBAFlAUUBRgFHCQC5CQIJAMwIAgIKJXMlcyVzJXMlcwkAzAgCAgdoaXN0b3J5CQDMCAIFAUcJAMwIAgUBZQkAzAgCBQFFCQDMCAIFAUYFA25pbAUBYQEBSAEBSQkAuQkCCQDMCAICBiVkJWQlZAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sGaGVpZ2h0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkApAMBBQFJBQNuaWwFAWEBAUoBAUsJAAIBCQC5CQIJAMwIAgIOcmVmZXJyYWwucmlkZToJAMwIAgUBSwUDbmlsAgEgAQFMAAQBTQkAoggBCQEBQgADCQABAgUBTQIGU3RyaW5nBAFOBQFNCQDZBAEFAU4DCQABAgUBTQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQFPAAQBTQkAoggBCQEBQwADCQABAgUBTQIGU3RyaW5nBAFOBQFNCQDZBAEFAU4DCQABAgUBTQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQFQAQFRBAFSCQEBSgECEXBlcm1pc3Npb24gZGVuaWVkBAFNCQEBTAADCQABAgUBTQIKQnl0ZVZlY3RvcgQBUwUBTQMJAAACCAUBUQ9jYWxsZXJQdWJsaWNLZXkFAVMGBQFSAwkAAQIFAU0CBFVuaXQDCQAAAggFAVEGY2FsbGVyBQR0aGlzBgUBUgkAAgECC01hdGNoIGVycm9yAQFUAgFzAWUEAVUJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBAXoBBQFzAgAEAVYDCQEIY29udGFpbnMCBQFVBQFlBQNuaWwEAVcDCQAAAgUBVQIABQFlCQC5CQIJAMwIAgUBVQkAzAgCBQFlBQNuaWwFAWEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAXoBBQFzBQFXBQNuaWwFAVYPAVEBDWNsYWltSW50ZXJuYWwDAWUBaQFYBAFZAwkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEBbgEFAWUHBgkBAUoBAhZwcm9ncmFtIGRvZXMgbm90IGV4aXN0AwkAAAIFAVkFAVkEAVoDBQFYCQCXCgUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWoCBQFlBQFpAAAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWwCBQFlBQFpAAAJAQFqAgUBZQUBaQkBAWwCBQFlBQFpCQEBRAQFAWUFAWkJANgEAQgFAVENdHJhbnNhY3Rpb25JZAINY2xhaW1SZWZlcnJhbAkAlwoFCQELdmFsdWVPckVsc2UCCQCfCAEJAQFoAgUBZQUBaQAACQELdmFsdWVPckVsc2UCCQCfCAEJAQFrAgUBZQUBaQAACQEBaAIFAWUFAWkJAQFrAgUBZQUBaQkBAUQEBQFlBQFpCQDYBAEIBQFRDXRyYW5zYWN0aW9uSWQCDWNsYWltUmVmZXJyZXIEAmFhCAUBWgJfMQQCYWIIBQFaAl8yBAJhYwgFAVoCXzMEAmFkCAUBWgJfNAQCYWUIBQFaAl81BAJhZgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBdQEFAWUAAAQCYWcJAQV2YWx1ZQEJAKYIAQkBBXZhbHVlAQkAoggBCQEBeAEFAWUEAmFoCQDZBAEJAQV2YWx1ZQEJAKIIAQkBAXcBBQFlBAJhaQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBcgEFAWkAAAQCYWoJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAXQBBQFpAAADAwUBWAkAAAIFAmFiAAAHCQCUCgIFA25pbAAABAJhawMJAGYCBQJhYgAABgkBAUoBAhBub3RoaW5nIHRvIGNsYWltAwkAAAIFAmFrBQJhawQCYWwJAGQCBQJhYQUCYWIEAmFtCQBkAgUCYWYFAmFiBAJhbgkAZAIFAmFpBQJhYgQCYW8JAGUCBQJhagUCYWIEAmFwCQEFdmFsdWUBCQDwBwIFBHRoaXMFAmFoAwkAAAIFAmFwBQJhcAQCYXEJAPwHBAUCYWcCFndpdGhkcmF3UmVmZXJyYWxSZXdhcmQJAMwIAgUCYWIFA25pbAUDbmlsAwkAAAIFAmFxBQJhcQQCYXIJAQV2YWx1ZQEJAPAHAgUEdGhpcwUCYWgDCQAAAgUCYXIFAmFyBAJhcwkAZQIFAmFyBQJhcAMJAAACBQJhcwUCYXMEAmF0AwkAAAIFAmFzBQJhYgYJAQFKAQIpaW5zdWZmaWNpZW50IGJhbGFuY2Ugb24gcmVmZXJyYWwgY29udHJhY3QDCQAAAgUCYXQFAmF0CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFAmFjBQJhbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUCYWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAXUBBQFlBQJhbQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAXIBBQFpBQJhbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAXQBBQFpBQJhbwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQFpBQJhYgUCYWgJAMwIAgkBC1N0cmluZ0VudHJ5AgUCYWUJAQFIAQUCYWIFA25pbAUCYWIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQERY2xhaW1CdWxrSW50ZXJuYWwDAmF1AmF2AmF3BAJheAMJAAACCAUBUQZjYWxsZXIFBHRoaXMGCQEBSgECEXBlcm1pc3Npb24gZGVuaWVkAwkAAAIFAmF4BQJheAMJAAACBQJhdwkAkAMBBQJhdgUDbmlsBAFlCQCRAwIFAmF2BQJhdwQCYXkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWsCBQFlBQJhdQAABAJhZQkBAUQEBQFlBQJhdQkA2AQBCAUBUQ10cmFuc2FjdGlvbklkAgljbGFpbUJ1bGsEAmF6CQD8BwQFBHRoaXMCEWNsYWltQnVsa0ludGVybmFsCQDMCAIFAmF1CQDMCAIFAmF2CQDMCAIJAGQCBQJhdwABBQNuaWwFA25pbAMJAAACBQJhegUCYXoEAmFBCQELdmFsdWVPckVsc2UCCQCfCAEJAQFrAgUBZQUCYXUAAAQCYUIDCQBmAgUCYUEAAAkA/AcEBQR0aGlzAg1jbGFpbUludGVybmFsCQDMCAIFAWUJAMwIAgUCYXUJAMwIAgcFA25pbAUDbmlsBQR1bml0AwkAAAIFAmFCBQJhQgkAlAoCBQNuaWwJAMwIAgUCYXoJAMwIAgUCYUIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFRAR9pbmNVbmNsYWltZWRXaXRoUGF5bWVudEludGVybmFsBQJhQwFlAmFEAmF3AmFFBAJheAMJAAACCAUBUQZjYWxsZXIFBHRoaXMGCQEBSgECEXBlcm1pc3Npb24gZGVuaWVkAwkAAAIFAmF4BQJheAQCYUYJAAACCQCQAwEFAmFDCQCQAwEFAmFEBAJhRwMFAmFGBgkBAUoBAh9saXN0cyBpbiBhcmdzIG11c3QgYmUgc2FtZSBzaXplAwkAAAIFAmFHBQJhRwMJAAACBQJhdwkAkAMBBQJhQwkAlAoCBQNuaWwFAmFFBAFmCQCRAwIFAmFEBQJhdwQCYWoJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAXQBBQFmAAAEAmFICQELdmFsdWVPckVsc2UCCQCfCAEJAQFrAgUBZQUBZgAABAJhSQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBdgEFAWUAAAQCYW8JAGQCBQJhagkAkQMCBQJhQwUCYXcEAmFKCQBkAgUCYUgJAJEDAgUCYUMFAmF3BAJhSwkAZAIFAmFFCQCRAwIFAmFDBQJhdwQCYUwJAPwHBAUEdGhpcwIfaW5jVW5jbGFpbWVkV2l0aFBheW1lbnRJbnRlcm5hbAkAzAgCBQJhQwkAzAgCBQFlCQDMCAIFAmFECQDMCAIJAGQCBQJhdwABCQDMCAIFAmFLBQNuaWwFA25pbAMJAAACBQJhTAUCYUwEAmFNCQEBVAIFAWYFAWUJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBdAEFAWYFAmFvCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBawIFAWUFAWYFAmFKCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBdgEFAWUJAGQCBQJhSQkAkQMCBQJhQwUCYXcFA25pbAUCYU0FAmFMCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAVEBFWNyZWF0ZVJlZmVycmFsUHJvZ3JhbQQBZQJhZwJhTgJhaAQCYXgJAQFQAQUBUQMJAAACBQJheAUCYXgEAmFPAwkAAAIJAKAIAQkBAW4BBQFlBQR1bml0BgkBAUoBAhtwcm9ncmFtIG5hbWUgYWxyZWFkeSBleGlzdHMDCQAAAgUCYU8FAmFPBAJhUAMJAQEhAQkBCGNvbnRhaW5zAgUBZQUBYQkBASEBCQEIY29udGFpbnMCBQFlAgEgBwQBWQMFAmFQBgkBAUoBAhRpbnZhbGlkIHByb2dyYW0gbmFtZQMJAAACBQFZBQFZBAJhUQMJAQIhPQIJAOwHAQkA2QQBBQJhaAUEdW5pdAYJAQFKAQIXaW52YWxpZCByZXdhcmQgYXNzZXQgaWQDCQAAAgUCYVEFAmFRCQCUCgIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFuAQUBZQYJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAXgBBQFlBQJhZwkAzAgCCQELU3RyaW5nRW50cnkCCQEBeQEFAWUFAmFOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQF3AQUBZQUCYWgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQF2AQUBZQAABQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQEKY3JlYXRlUGFpcgQBZQFmAWcCYVIEAVkDCQELdmFsdWVPckVsc2UCCQCgCAEJAQFuAQUBZQcGCQEBSgECFnByb2dyYW0gZG9lcyBub3QgZXhpc3QDCQAAAgUBWQUBWQQCYVMDCQAAAgkAoAgBCQEBZAMFAWUFAWYFAWcFBHVuaXQGCQEBSgECE3BhaXIgYWxyZWFkeSBleGlzdHMDCQAAAgUCYVMFAmFTBAJhVAMJAQIhPQIFAWYFAWcGCQEBSgECFGNhbm5vdCByZWZlciB0byBzZWxmAwkAAAIFAmFUBQJhVAQCYVUJAJsDAQkAuQkCCQDMCAIFAWUJAMwIAgUBZgkAzAgCBQFnBQNuaWwCAToEAmFWCQDZBAEJAQV2YWx1ZQEJAKIIAQUBYwQCYVcDCQD0AwMFAmFVBQJhUgUCYVYGCQEBSgECDWJhZCBzaWduYXR1cmUDCQAAAgUCYVcFAmFXBAJhWAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBbwIFAWUFAWYAAAQCYVkJAGQCBQJhWAABBAJhTQkBAVQCBQFmBQFlBAFWCQEBVAIFAWcFAWUJAJQKAgkAzggCCQDOCAIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFkAwUBZQUBZgUBZwYJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFvAgUBZQUBZgUCYVkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAW0CBQFlBQFnBQFmBQNuaWwFAmFNBQFWBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAVEBFnVwZGF0ZVJlZmVycmFsQWN0aXZpdHkDAWUBZwJhWgQCYU4JAQV2YWx1ZQEJAKIIAQkBAXkBBQFlBAJiYQkBAiE9AgkAoAgBCQEBcQIFAWUFAWcFBHVuaXQEAWYJAQV2YWx1ZQEJAKIIAQkBAW0CBQFlBQFnBAJheAMJAAACCQClCAEIBQFRBmNhbGxlcgUCYU4GCQEBSgECEXBlcm1pc3Npb24gZGVuaWVkAwkAAAIFAmF4BQJheAQCYmIDCQAAAgUCYmEFAmFaCQCUCgIFA25pbAUEdW5pdAQCYmIDCQAAAgUCYVoGBAJiYwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAXACBQFlBQFmAAAAAQkAlAoCCQDMCAIJAQxCb29sZWFuRW50cnkCCQEBcQIFAWUFAWcGCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBcAIFAWUFAWYFAmJjBQNuaWwFBHVuaXQEAmJjCQBlAgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBcAIFAWUFAWYAAAABCQCUCgIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAXECBQFlBQFnCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBcAIFAWUFAWYFAmJjBQNuaWwFBHVuaXQFAmJiBQJiYgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFRAQxpbmNVbmNsYWltZWQEAWUBZwJiZAJiZQQCYU4JAQV2YWx1ZQEJAKIIAQkBAXkBBQFlBAFmCQEFdmFsdWUBCQCiCAEJAQFtAgUBZQUBZwQCYXgDCQAAAgkApQgBCAUBUQZjYWxsZXIFAmFOBgkBAUoBAhFwZXJtaXNzaW9uIGRlbmllZAMJAAACBQJheAUCYXgEAmJmAwkAAAIFAWUCBnd4bG9jawYJAQFKAQIPaW52YWxpZCBwcm9ncmFtAwkAAAIFAmJmBQJiZgQCYmcDCQEIY29udGFpbnMCCQELdmFsdWVPckVsc2UCCQCiCAEJAQF6AQUBZgIABQFlBgkBAUoBCQCsAgIJAKwCAgkArAICAhhyZWZlcnJlciBub3QgaW4gcHJvZ3JhbT0FAWUCBiBhZGRyPQUBZgMJAAACBQJiZwUCYmcEAmJoAwkBCGNvbnRhaW5zAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEBegEFAWcCAAUBZQYJAQFKAQkArAICCQCsAgIJAKwCAgIYcmVmZXJyYWwgbm90IGluIHByb2dyYW09BQFlAgYgYWRkcj0FAWcDCQAAAgUCYmgFAmJoBAJiaQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBdAEFAWYAAAQCYUgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWsCBQFlBQFmAAAEAmJqCQELdmFsdWVPckVsc2UCCQCfCAEJAQF0AQUBZwAABAJiawkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBbAIFAWUFAWcAAAQCYUkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAXYBBQFlAAAEAmJsCQBkAgUCYmkFAmJkBAJhSgkAZAIFAmFIBQJiZAQCYm0JAGQCBQJiagUCYmUEAmJuCQBkAgUCYmsFAmJlCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQF0AQUBZgUCYmwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQF0AQUBZwUCYm0JAMwIAgkBDEludGVnZXJFbnRyeQIJAQFrAgUBZQUBZgUCYUoJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFsAgUBZQUBZwUCYm4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQF2AQUBZQkAZAIJAGQCBQJhSQUCYmQFAmJlBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQEXaW5jVW5jbGFpbWVkV2l0aFBheW1lbnQCAWUCYUQEAmJmAwkAAAIFAWUCCXd4U3BvdEZlZQYJAQFKAQIPaW52YWxpZCBwcm9ncmFtAwkAAAIFAmJmBQJiZgQCYm8JAKUIAQgFAVEGY2FsbGVyBAJicAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBQQEFAmJvAAAEAmJxCQBkAgkAZQIFAmJwBQZoZWlnaHQAAwQCYnIDCQBmAgkAZQIFBmhlaWdodAADBQJicAYJAQFKAQkAuQkCCQDMCAICBHdhaXQJAMwIAgkApAMBBQJicQkAzAgCAgZibG9ja3MFA25pbAIBIAMJAAACBQJicgUCYnIKAQJicwICYnQCYnUEAmJ2CQAAAgkA2AQBCQEFdmFsdWUBCAUCYnUHYXNzZXRJZAkBBXZhbHVlAQkAoggBCQEBdwEFAWUEAmJ3AwUCYnYGCQEBSgECEGludmFsaWQgYXNzZXQgaWQDCQAAAgUCYncFAmJ3CQDNCAIFAmJ0CAUCYnUGYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAJieAoAAmJ5CAUBUQhwYXltZW50cwoAAmJ6CQCQAwEFAmJ5CgACYkEFA25pbAoBAmJCAgJiQwJiRAMJAGcCBQJiRAUCYnoFAmJDCQECYnMCBQJiQwkAkQMCBQJieQUCYkQKAQJiRQICYkMCYkQDCQBnAgUCYkQFAmJ6BQJiQwkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQECYkUCCQECYkICCQECYkICCQECYkICCQECYkICCQECYkICCQECYkICCQECYkICCQECYkICCQECYkICCQECYkICBQJiQQAAAAEAAgADAAQABQAGAAcACAAJAAoEAmFFCgACYkYJAPwHBAUEdGhpcwIfaW5jVW5jbGFpbWVkV2l0aFBheW1lbnRJbnRlcm5hbAkAzAgCBQJieAkAzAgCBQFlCQDMCAIFAmFECQDMCAIAAAkAzAgCAAAFA25pbAUDbmlsAwkAAQIFAmJGAgNJbnQFAmJGCQACAQkArAICCQADAQUCYkYCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQJhRQUCYUUEAmFnCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBCQCiCAEJAQF4AQUBZQQCYWgJANkEAQkBBXZhbHVlAQkAoggBCQEBdwEFAWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYWcFAmFFBQJhaAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAUEBBQJibwUGaGVpZ2h0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQEFY2xhaW0BAWUEAVkDCQELdmFsdWVPckVsc2UCCQCgCAEJAQFuAQUBZQcGCQEBSgECFnByb2dyYW0gZG9lcyBub3QgZXhpc3QDCQAAAgUBWQUBWQQBWAkAAAIJAKUIAQgFAVEGY2FsbGVyCQEFdmFsdWUBCQCiCAEJAQF5AQUBZQQBaQMFAVgJAKUIAQgFAVEMb3JpZ2luQ2FsbGVyCQClCAEIBQFRBmNhbGxlcgQCYkcJAPwHBAUEdGhpcwINY2xhaW1JbnRlcm5hbAkAzAgCBQFlCQDMCAIFAWkJAMwIAgUBWAUDbmlsBQNuaWwDCQAAAgUCYkcFAmJHCQCUCgIFA25pbAUCYkcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQEJY2xhaW1CdWxrAAQCYm8JAKUIAQgFAVEGY2FsbGVyBAJiSAkAoggBCQEBegEJAKUIAQgFAVEGY2FsbGVyBAJiSQMJAQlpc0RlZmluZWQBBQJiSAYJAQFKAQIUbm8gcmVmZXJyYWwgcHJvZ3JhbXMDCQAAAgUCYkkFAmJJBAJiSgkAtQkCCQEFdmFsdWUBBQJiSAICX18EAmJLCQD8BwQFBHRoaXMCEWNsYWltQnVsa0ludGVybmFsCQDMCAIFAmJvCQDMCAIFAmJKCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUCYksFAmJLCQCUCgIFA25pbAUCYksJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQENY2xhaW1SRUFET05MWQIBZQFFBAJhYQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBaAIFAWUFAUUAAAQCYWIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWsCBQFlBQFFAAAJAJQKAgUDbmlsCQDMCAIFAmFiCQDMCAIFAmFhBQNuaWwBUQERY2xhaW1CdWxrUkVBRE9OTFkBAmF1BAJhaQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBcgEFAmF1AAAEAmFqCQELdmFsdWVPckVsc2UCCQCfCAEJAQF0AQUCYXUAAAkAlAoCBQNuaWwJAMwIAgUCYWoJAMwIAgUCYWkFA25pbAFRAQxzZXRUb3RhbEtleXMCAWUBcwQCYkwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWgCBQFlBQFzAAAEAmJNCQELdmFsdWVPckVsc2UCCQCfCAEJAQFqAgUBZQUBcwAABAJhQQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBawIFAWUFAXMAAAQCYk4JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWwCBQFlBQFzAAAEAmFpCQBkAgUCYkwFAmJNBAJhagkAZAIFAmFBBQJiTgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBcgEFAXMFAmFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBdAEFAXMFAmFqBQNuaWwFBHVuaXQBUQEKc2V0TWFuYWdlcgECYk8EAmF4CQEBUAEFAVEDCQAAAgUCYXgFAmF4BAJiUAkA2QQBBQJiTwMJAAACBQJiUAUCYlAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAUMABQJiTwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAVEBDmNvbmZpcm1NYW5hZ2VyAAQCYlEJAQFPAAQCYlIDCQEJaXNEZWZpbmVkAQUCYlEGCQEBSgECEm5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJiUgUCYlIEAmJTAwkAAAIIBQFRD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCYlEGCQEBSgECG3lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJiUwUCYlMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAUIACQDYBAEJAQV2YWx1ZQEFAmJRCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFDAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJiVAECYlUABAJiVgQBTQkBAUwAAwkAAQIFAU0CCkJ5dGVWZWN0b3IEAVMFAU0FAVMDCQABAgUBTQIEVW5pdAgFAmJUD3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJiVAlib2R5Qnl0ZXMJAJEDAggFAmJUBnByb29mcwAABQJiVh+BG/4=", "chainId": 84, "height": 2411647, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BQe9nfNJPjetd98itdmwZ7wH52ELU2QD6JwE2sGDwv4F Next: AcS5USaaQPt6izY3LoVMKwygYzv9pEBHNVB694pmsn7a 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 keyLastIncUnclaimedWithPaymentCallBlock (address) = makeString(["%s%s", "lastIncUnclaimedWithPaymentCallBlock", address], separator)
6666
6767
6868 func keyManagerPublicKey () = "%s__managerPublicKey"
6969
7070
7171 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
7272
7373
7474 func keyClaimHistory (programName,userAddress,transactionId,type) = makeString(["%s%s%s%s%s", "history", type, programName, userAddress, transactionId], separator)
7575
7676
7777 func formatClaimHistory (amount) = makeString(["%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(amount)], separator)
7878
7979
8080 func throwErr (msg) = throw(makeString(["referral.ride:", msg], " "))
8181
8282
8383 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
8484 case s: String =>
8585 fromBase58String(s)
8686 case _: Unit =>
8787 unit
8888 case _ =>
8989 throw("Match error")
9090 }
9191
9292
9393 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
9494 case s: String =>
9595 fromBase58String(s)
9696 case _: Unit =>
9797 unit
9898 case _ =>
9999 throw("Match error")
100100 }
101101
102102
103103 func mustManager (i) = {
104104 let pd = throwErr("permission denied")
105105 match managerPublicKeyOrUnit() {
106106 case pk: ByteVector =>
107107 if ((i.callerPublicKey == pk))
108108 then true
109109 else pd
110110 case _: Unit =>
111111 if ((i.caller == this))
112112 then true
113113 else pd
114114 case _ =>
115115 throw("Match error")
116116 }
117117 }
118118
119119
120120 func updateAllReferralPrograms (address,programName) = {
121121 let allReferralPrograms = valueOrElse(getString(keyAllReferralPrograms(address)), "")
122122 let updatedAllReferralPrograms = if (contains(allReferralPrograms, programName))
123123 then nil
124124 else {
125125 let newAllReferralPrograms = if ((allReferralPrograms == ""))
126126 then programName
127127 else makeString([allReferralPrograms, programName], separator)
128128 [StringEntry(keyAllReferralPrograms(address), newAllReferralPrograms)]
129129 }
130130 updatedAllReferralPrograms
131131 }
132132
133133
134134 @Callable(i)
135135 func claimInternal (programName,claimerAddress,isImplementationContract) = {
136136 let checkProgramExists = if (valueOrElse(getBoolean(keyProgramName(programName)), false))
137137 then true
138138 else throwErr("program does not exist")
139139 if ((checkProgramExists == checkProgramExists))
140140 then {
141141 let $t048215758 = if (isImplementationContract)
142142 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"))
143143 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"))
144144 let claimerClaimed = $t048215758._1
145145 let claimerUnclaimed = $t048215758._2
146146 let keyClaimed = $t048215758._3
147147 let keyUnclaimed = $t048215758._4
148148 let claimHistoryKey = $t048215758._5
149149 let claimedTotal = valueOrElse(getInteger(keyClaimedTotal(programName)), 0)
150150 let treasuryContract = value(addressFromString(value(getString(keyTreasuryContract(programName)))))
151151 let rewardAssetId = fromBase58String(value(getString(keyRewardAssetId(programName))))
152152 let claimedTotalAddress = valueOrElse(getInteger(keyClaimedTotalAddress(claimerAddress)), 0)
153153 let unclaimedTotalAddress = valueOrElse(getInteger(keyUnclaimedTotalAddress(claimerAddress)), 0)
154154 if (if (isImplementationContract)
155155 then (claimerUnclaimed == 0)
156156 else false)
157157 then $Tuple2(nil, 0)
158158 else {
159159 let checkCanClaim = if ((claimerUnclaimed > 0))
160160 then true
161161 else throwErr("nothing to claim")
162162 if ((checkCanClaim == checkCanClaim))
163163 then {
164164 let newClaimerClaimed = (claimerClaimed + claimerUnclaimed)
165165 let newClaimedTotal = (claimedTotal + claimerUnclaimed)
166166 let newClaimedTotalAddress = (claimedTotalAddress + claimerUnclaimed)
167167 let newUnclaimedTotalAddress = (unclaimedTotalAddress - claimerUnclaimed)
168168 let balanceBefore = value(assetBalance(this, rewardAssetId))
169169 if ((balanceBefore == balanceBefore))
170170 then {
171171 let res = invoke(treasuryContract, "withdrawReferralReward", [claimerUnclaimed], nil)
172172 if ((res == res))
173173 then {
174174 let balanceAfter = value(assetBalance(this, rewardAssetId))
175175 if ((balanceAfter == balanceAfter))
176176 then {
177177 let balanceDiff = (balanceAfter - balanceBefore)
178178 if ((balanceDiff == balanceDiff))
179179 then {
180180 let checkBalance = if ((balanceDiff == claimerUnclaimed))
181181 then true
182182 else throwErr("insufficient balance on referral contract")
183183 if ((checkBalance == checkBalance))
184184 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)
185185 else throw("Strict value is not equal to itself.")
186186 }
187187 else throw("Strict value is not equal to itself.")
188188 }
189189 else throw("Strict value is not equal to itself.")
190190 }
191191 else throw("Strict value is not equal to itself.")
192192 }
193193 else throw("Strict value is not equal to itself.")
194194 }
195195 else throw("Strict value is not equal to itself.")
196196 }
197197 }
198198 else throw("Strict value is not equal to itself.")
199199 }
200200
201201
202202
203203 @Callable(i)
204204 func claimBulkInternal (claimer,programNames,currentIter) = {
205205 let checkCaller = if ((i.caller == this))
206206 then true
207207 else throwErr("permission denied")
208208 if ((checkCaller == checkCaller))
209209 then if ((currentIter == size(programNames)))
210210 then nil
211211 else {
212212 let programName = programNames[currentIter]
213213 let programUnclaimed = valueOrElse(getInteger(keyUnclaimedReferrer(programName, claimer)), 0)
214214 let claimHistoryKey = keyClaimHistory(programName, claimer, toBase58String(i.transactionId), "claimBulk")
215215 let claimBulkInternal = invoke(this, "claimBulkInternal", [claimer, programNames, (currentIter + 1)], nil)
216216 if ((claimBulkInternal == claimBulkInternal))
217217 then {
218218 let unclaimedReferrer = valueOrElse(getInteger(keyUnclaimedReferrer(programName, claimer)), 0)
219219 let claim = if ((unclaimedReferrer > 0))
220220 then invoke(this, "claimInternal", [programName, claimer, false], nil)
221221 else unit
222222 if ((claim == claim))
223223 then $Tuple2(nil, [claimBulkInternal, claim])
224224 else throw("Strict value is not equal to itself.")
225225 }
226226 else throw("Strict value is not equal to itself.")
227227 }
228228 else throw("Strict value is not equal to itself.")
229229 }
230230
231231
232232
233233 @Callable(i)
234234 func incUnclaimedWithPaymentInternal (paymentAmounts,programName,referrerAddresses,currentIter,resAmount) = {
235235 let checkCaller = if ((i.caller == this))
236236 then true
237237 else throwErr("permission denied")
238238 if ((checkCaller == checkCaller))
239239 then {
240240 let argsComparison = (size(paymentAmounts) == size(referrerAddresses))
241241 let check = if (argsComparison)
242242 then true
243243 else throwErr("lists in args must be same size")
244244 if ((check == check))
245245 then if ((currentIter == size(paymentAmounts)))
246246 then $Tuple2(nil, resAmount)
247247 else {
248248 let referrerAddress = referrerAddresses[currentIter]
249249 let unclaimedTotalAddress = valueOrElse(getInteger(keyUnclaimedTotalAddress(referrerAddress)), 0)
250250 let referrerUnclaimed = valueOrElse(getInteger(keyUnclaimedReferrer(programName, referrerAddress)), 0)
251251 let rewardsTotal = valueOrElse(getInteger(keyRewardsTotal(programName)), 0)
252252 let newUnclaimedTotalAddress = (unclaimedTotalAddress + paymentAmounts[currentIter])
253253 let newReferrerUnclaimed = (referrerUnclaimed + paymentAmounts[currentIter])
254254 let newResAmount = (resAmount + paymentAmounts[currentIter])
255255 let inv = invoke(this, "incUnclaimedWithPaymentInternal", [paymentAmounts, programName, referrerAddresses, (currentIter + 1), newResAmount], nil)
256256 if ((inv == inv))
257257 then {
258258 let updatedAllReferrerPrograms = updateAllReferralPrograms(referrerAddress, programName)
259259 $Tuple2(([IntegerEntry(keyUnclaimedTotalAddress(referrerAddress), newUnclaimedTotalAddress), IntegerEntry(keyUnclaimedReferrer(programName, referrerAddress), newReferrerUnclaimed), IntegerEntry(keyRewardsTotal(programName), (rewardsTotal + paymentAmounts[currentIter]))] ++ updatedAllReferrerPrograms), inv)
260260 }
261261 else throw("Strict value is not equal to itself.")
262262 }
263263 else throw("Strict value is not equal to itself.")
264264 }
265265 else throw("Strict value is not equal to itself.")
266266 }
267267
268268
269269
270270 @Callable(i)
271271 func createReferralProgram (programName,treasuryContract,implementationContract,rewardAssetId) = {
272272 let checkCaller = mustManager(i)
273273 if ((checkCaller == checkCaller))
274274 then {
275275 let checkProgramName = if ((getBoolean(keyProgramName(programName)) == unit))
276276 then true
277277 else throwErr("program name already exists")
278278 if ((checkProgramName == checkProgramName))
279279 then {
280280 let programNameIsValid = if (!(contains(programName, separator)))
281281 then !(contains(programName, " "))
282282 else false
283283 let checkProgramExists = if (programNameIsValid)
284284 then true
285285 else throwErr("invalid program name")
286286 if ((checkProgramExists == checkProgramExists))
287287 then {
288288 let checkRewardAsset = if ((assetInfo(fromBase58String(rewardAssetId)) != unit))
289289 then true
290290 else throwErr("invalid reward asset id")
291291 if ((checkRewardAsset == checkRewardAsset))
292292 then $Tuple2([BooleanEntry(keyProgramName(programName), true), StringEntry(keyTreasuryContract(programName), treasuryContract), StringEntry(keyImplementationContract(programName), implementationContract), StringEntry(keyRewardAssetId(programName), rewardAssetId), IntegerEntry(keyRewardsTotal(programName), 0)], unit)
293293 else throw("Strict value is not equal to itself.")
294294 }
295295 else throw("Strict value is not equal to itself.")
296296 }
297297 else throw("Strict value is not equal to itself.")
298298 }
299299 else throw("Strict value is not equal to itself.")
300300 }
301301
302302
303303
304304 @Callable(i)
305305 func createPair (programName,referrerAddress,referralAddress,signature) = {
306306 let checkProgramExists = if (valueOrElse(getBoolean(keyProgramName(programName)), false))
307307 then true
308308 else throwErr("program does not exist")
309309 if ((checkProgramExists == checkProgramExists))
310310 then {
311311 let pairReferrerToReferralExistCheck = if ((getBoolean(keyExistsReferrerToReferral(programName, referrerAddress, referralAddress)) == unit))
312312 then true
313313 else throwErr("pair already exists")
314314 if ((pairReferrerToReferralExistCheck == pairReferrerToReferralExistCheck))
315315 then {
316316 let noRefSelf = if ((referrerAddress != referralAddress))
317317 then true
318318 else throwErr("cannot refer to self")
319319 if ((noRefSelf == noRefSelf))
320320 then {
321321 let pair = toBytes(makeString([programName, referrerAddress, referralAddress], ":"))
322322 let backendPublicKey = fromBase58String(value(getString(keyBackendPublicKey)))
323323 let validateSignature = if (sigVerify(pair, signature, backendPublicKey))
324324 then true
325325 else throwErr("bad signature")
326326 if ((validateSignature == validateSignature))
327327 then {
328328 let totalReferralCount = valueOrElse(getInteger(keyTotalReferralCount(programName, referrerAddress)), 0)
329329 let newTotalReferralCount = (totalReferralCount + 1)
330330 let updatedAllReferrerPrograms = updateAllReferralPrograms(referrerAddress, programName)
331331 let updatedAllReferralPrograms = updateAllReferralPrograms(referralAddress, programName)
332332 $Tuple2((([BooleanEntry(keyExistsReferrerToReferral(programName, referrerAddress, referralAddress), true), IntegerEntry(keyTotalReferralCount(programName, referrerAddress), newTotalReferralCount), StringEntry(keyReferrer(programName, referralAddress), referrerAddress)] ++ updatedAllReferrerPrograms) ++ updatedAllReferralPrograms), unit)
333333 }
334334 else throw("Strict value is not equal to itself.")
335335 }
336336 else throw("Strict value is not equal to itself.")
337337 }
338338 else throw("Strict value is not equal to itself.")
339339 }
340340 else throw("Strict value is not equal to itself.")
341341 }
342342
343343
344344
345345 @Callable(i)
346346 func updateReferralActivity (programName,referralAddress,isActive) = {
347347 let implementationContract = value(getString(keyImplementationContract(programName)))
348348 let isReferralActive = (getBoolean(keyIsReferralActive(programName, referralAddress)) != unit)
349349 let referrerAddress = value(getString(keyReferrer(programName, referralAddress)))
350350 let checkCaller = if ((toString(i.caller) == implementationContract))
351351 then true
352352 else throwErr("permission denied")
353353 if ((checkCaller == checkCaller))
354354 then {
355355 let update = if ((isReferralActive == isActive))
356356 then $Tuple2(nil, unit)
357357 else {
358358 let update = if ((isActive == true))
359359 then {
360360 let newActiveReferralCount = (valueOrElse(getInteger(keyActiveReferralCount(programName, referrerAddress)), 0) + 1)
361361 $Tuple2([BooleanEntry(keyIsReferralActive(programName, referralAddress), true), IntegerEntry(keyActiveReferralCount(programName, referrerAddress), newActiveReferralCount)], unit)
362362 }
363363 else {
364364 let newActiveReferralCount = (valueOrElse(getInteger(keyActiveReferralCount(programName, referrerAddress)), 0) - 1)
365365 $Tuple2([DeleteEntry(keyIsReferralActive(programName, referralAddress)), IntegerEntry(keyActiveReferralCount(programName, referrerAddress), newActiveReferralCount)], unit)
366366 }
367367 update
368368 }
369369 update
370370 }
371371 else throw("Strict value is not equal to itself.")
372372 }
373373
374374
375375
376376 @Callable(i)
377377 func incUnclaimed (programName,referralAddress,referrerReward,referralReward) = {
378378 let implementationContract = value(getString(keyImplementationContract(programName)))
379379 let referrerAddress = value(getString(keyReferrer(programName, referralAddress)))
380380 let checkCaller = if ((toString(i.caller) == implementationContract))
381381 then true
382382 else throwErr("permission denied")
383383 if ((checkCaller == checkCaller))
384384 then {
385385 let checkProgram = if ((programName == "wxlock"))
386386 then true
387387 else throwErr("invalid program")
388388 if ((checkProgram == checkProgram))
389389 then {
390390 let checkReferrerInProgram = if (contains(valueOrElse(getString(keyAllReferralPrograms(referrerAddress)), ""), programName))
391391 then true
392392 else throwErr(((("referrer not in program=" + programName) + " addr=") + referrerAddress))
393393 if ((checkReferrerInProgram == checkReferrerInProgram))
394394 then {
395395 let checkReferralInProgram = if (contains(valueOrElse(getString(keyAllReferralPrograms(referralAddress)), ""), programName))
396396 then true
397397 else throwErr(((("referral not in program=" + programName) + " addr=") + referralAddress))
398398 if ((checkReferralInProgram == checkReferralInProgram))
399399 then {
400400 let unclaimedTotalReferrer = valueOrElse(getInteger(keyUnclaimedTotalAddress(referrerAddress)), 0)
401401 let referrerUnclaimed = valueOrElse(getInteger(keyUnclaimedReferrer(programName, referrerAddress)), 0)
402402 let unclaimedTotalReferral = valueOrElse(getInteger(keyUnclaimedTotalAddress(referralAddress)), 0)
403403 let referralUnclaimed = valueOrElse(getInteger(keyUnclaimedReferral(programName, referralAddress)), 0)
404404 let rewardsTotal = valueOrElse(getInteger(keyRewardsTotal(programName)), 0)
405405 let newUnclaimedTotalReferrer = (unclaimedTotalReferrer + referrerReward)
406406 let newReferrerUnclaimed = (referrerUnclaimed + referrerReward)
407407 let newUnclaimedTotalReferral = (unclaimedTotalReferral + referralReward)
408408 let newReferralUnclaimed = (referralUnclaimed + referralReward)
409409 $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)
410410 }
411411 else throw("Strict value is not equal to itself.")
412412 }
413413 else throw("Strict value is not equal to itself.")
414414 }
415415 else throw("Strict value is not equal to itself.")
416416 }
417417 else throw("Strict value is not equal to itself.")
418418 }
419419
420420
421421
422422 @Callable(i)
423423 func incUnclaimedWithPayment (programName,referrerAddresses) = {
424424 let checkProgram = if ((programName == "wxSpotFee"))
425425 then true
426426 else throwErr("invalid program")
427427 if ((checkProgram == checkProgram))
428428 then {
429429 let callerAddress = toString(i.caller)
430430 let lastCall = valueOrElse(getInteger(keyLastIncUnclaimedWithPaymentCallBlock(callerAddress)), 0)
431431 let waitBlocks = ((lastCall - height) + 3)
432432 let lastCallCheck = if (((height - 3) > lastCall))
433433 then true
434434 else throwErr(makeString(["wait", toString(waitBlocks), "blocks"], " "))
435435 if ((lastCallCheck == lastCallCheck))
436436 then {
437437 func map (accum,next) = {
438438 let assetIdCheck = (toBase58String(value(next.assetId)) == value(getString(keyRewardAssetId(programName))))
439439 let amountCheck = if (assetIdCheck)
440440 then true
441441 else throwErr("invalid asset id")
442442 if ((amountCheck == amountCheck))
443443 then (accum :+ next.amount)
444444 else throw("Strict value is not equal to itself.")
445445 }
446446
447447 let payments = {
448448 let $l = i.payments
449449 let $s = size($l)
450450 let $acc0 = nil
451451 func $f0_1 ($a,$i) = if (($i >= $s))
452452 then $a
453453 else map($a, $l[$i])
454454
455455 func $f0_2 ($a,$i) = if (($i >= $s))
456456 then $a
457457 else throw("List size exceeds 10")
458458
459459 $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)
460460 }
461461 let resAmount = {
462462 let @ = invoke(this, "incUnclaimedWithPaymentInternal", [payments, programName, referrerAddresses, 0, 0], nil)
463463 if ($isInstanceOf(@, "Int"))
464464 then @
465465 else throw(($getType(@) + " couldn't be cast to Int"))
466466 }
467467 if ((resAmount == resAmount))
468468 then {
469469 let treasuryContract = addressFromStringValue(value(getString(keyTreasuryContract(programName))))
470470 let rewardAssetId = fromBase58String(value(getString(keyRewardAssetId(programName))))
471471 [ScriptTransfer(treasuryContract, resAmount, rewardAssetId), IntegerEntry(keyLastIncUnclaimedWithPaymentCallBlock(callerAddress), height)]
472472 }
473473 else throw("Strict value is not equal to itself.")
474474 }
475475 else throw("Strict value is not equal to itself.")
476476 }
477477 else throw("Strict value is not equal to itself.")
478478 }
479479
480480
481481
482482 @Callable(i)
483483 func claim (programName) = {
484484 let checkProgramExists = if (valueOrElse(getBoolean(keyProgramName(programName)), false))
485485 then true
486486 else throwErr("program does not exist")
487487 if ((checkProgramExists == checkProgramExists))
488488 then {
489489 let isImplementationContract = (toString(i.caller) == value(getString(keyImplementationContract(programName))))
490490 let claimerAddress = if (isImplementationContract)
491491 then toString(i.originCaller)
492492 else toString(i.caller)
493493 let claimInternal = invoke(this, "claimInternal", [programName, claimerAddress, isImplementationContract], nil)
494494 if ((claimInternal == claimInternal))
495495 then $Tuple2(nil, claimInternal)
496496 else throw("Strict value is not equal to itself.")
497497 }
498498 else throw("Strict value is not equal to itself.")
499499 }
500500
501501
502502
503503 @Callable(i)
504504 func claimBulk () = {
505505 let callerAddress = toString(i.caller)
506506 let callerProgramsStr = getString(keyAllReferralPrograms(toString(i.caller)))
507507 let programsExists = if (isDefined(callerProgramsStr))
508508 then true
509509 else throwErr("no referral programs")
510510 if ((programsExists == programsExists))
511511 then {
512512 let callerPrograms = split(value(callerProgramsStr), "__")
513513 let bulkClaim = invoke(this, "claimBulkInternal", [callerAddress, callerPrograms, 0], nil)
514514 if ((bulkClaim == bulkClaim))
515515 then $Tuple2(nil, bulkClaim)
516516 else throw("Strict value is not equal to itself.")
517517 }
518518 else throw("Strict value is not equal to itself.")
519519 }
520520
521521
522522
523523 @Callable(i)
524524 func claimREADONLY (programName,userAddress) = {
525525 let claimerClaimed = valueOrElse(getInteger(keyClaimedReferrer(programName, userAddress)), 0)
526526 let claimerUnclaimed = valueOrElse(getInteger(keyUnclaimedReferrer(programName, userAddress)), 0)
527527 $Tuple2(nil, [claimerUnclaimed, claimerClaimed])
528528 }
529529
530530
531531
532532 @Callable(i)
533533 func claimBulkREADONLY (claimer) = {
534534 let claimedTotalAddress = valueOrElse(getInteger(keyClaimedTotalAddress(claimer)), 0)
535535 let unclaimedTotalAddress = valueOrElse(getInteger(keyUnclaimedTotalAddress(claimer)), 0)
536536 $Tuple2(nil, [unclaimedTotalAddress, claimedTotalAddress])
537537 }
538538
539539
540540
541541 @Callable(i)
542542 func setTotalKeys (programName,address) = {
543543 let claimedReferrer = valueOrElse(getInteger(keyClaimedReferrer(programName, address)), 0)
544544 let claimedReferral = valueOrElse(getInteger(keyClaimedReferral(programName, address)), 0)
545545 let unclaimedReferrer = valueOrElse(getInteger(keyUnclaimedReferrer(programName, address)), 0)
546546 let unclaimedReferral = valueOrElse(getInteger(keyUnclaimedReferral(programName, address)), 0)
547547 let claimedTotalAddress = (claimedReferrer + claimedReferral)
548548 let unclaimedTotalAddress = (unclaimedReferrer + unclaimedReferral)
549549 $Tuple2([IntegerEntry(keyClaimedTotalAddress(address), claimedTotalAddress), IntegerEntry(keyUnclaimedTotalAddress(address), unclaimedTotalAddress)], unit)
550550 }
551551
552552
553553
554554 @Callable(i)
555555 func setManager (pendingManagerPublicKey) = {
556556 let checkCaller = mustManager(i)
557557 if ((checkCaller == checkCaller))
558558 then {
559559 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
560560 if ((checkManagerPublicKey == checkManagerPublicKey))
561561 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
562562 else throw("Strict value is not equal to itself.")
563563 }
564564 else throw("Strict value is not equal to itself.")
565565 }
566566
567567
568568
569569 @Callable(i)
570570 func confirmManager () = {
571571 let pm = pendingManagerPublicKeyOrUnit()
572572 let hasPM = if (isDefined(pm))
573573 then true
574574 else throwErr("no pending manager")
575575 if ((hasPM == hasPM))
576576 then {
577577 let checkPM = if ((i.callerPublicKey == value(pm)))
578578 then true
579579 else throwErr("you are not pending manager")
580580 if ((checkPM == checkPM))
581581 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
582582 else throw("Strict value is not equal to itself.")
583583 }
584584 else throw("Strict value is not equal to itself.")
585585 }
586586
587587
588588 @Verifier(tx)
589589 func verify () = {
590590 let targetPublicKey = match managerPublicKeyOrUnit() {
591591 case pk: ByteVector =>
592592 pk
593593 case _: Unit =>
594594 tx.senderPublicKey
595595 case _ =>
596596 throw("Match error")
597597 }
598598 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
599599 }
600600

github/deemru/w8io/169f3d6 
70.27 ms