tx · BQe9nfNJPjetd98itdmwZ7wH52ELU2QD6JwE2sGDwv4F

3NAsFvuLwxz1iUtZ9fmhfmSN16r9NEsPqsh:  -0.01800000 Waves

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

{ "type": 13, "id": "BQe9nfNJPjetd98itdmwZ7wH52ELU2QD6JwE2sGDwv4F", "fee": 1800000, "feeAssetId": null, "timestamp": 1674121696171, "version": 1, "sender": "3NAsFvuLwxz1iUtZ9fmhfmSN16r9NEsPqsh", "senderPublicKey": "33fpjdpM9FMu87RZKePniPardKqQXM96sm7VhAk3JEVQ", "proofs": [ "5eaVd6cYr586v53LW842hf2vFoRHo4rc3smHAEpxLpzqjhskrf5RdncjCLWt4Kg6ZaSGH7JxtPPHde5pCpRD2sbd" ], "script": "base64:BgLnEwgCEgUKAwgIBBIFCgMIGAESBwoFEQgYAQESBgoECAgICBIGCgQICAgCEgUKAwgIBBIGCgQICAEBEgQKAggYEgMKAQgSABIECgIICBIDCgEIEgQKAggIEgMKAQgSACIJc2VwYXJhdG9yIgxrZXlXeEFzc2V0SWQiE2tleUJhY2tlbmRQdWJsaWNLZXkiG2tleUV4aXN0c1JlZmVycmVyVG9SZWZlcnJhbCILcHJvZ3JhbU5hbWUiD3JlZmVycmVyQWRkcmVzcyIPcmVmZXJyYWxBZGRyZXNzIhJrZXlDbGFpbWVkUmVmZXJyZXIiDmNsYWltZXJBZGRyZXNzIhJrZXlDbGFpbWVkUmVmZXJyYWwiFGtleVVuY2xhaW1lZFJlZmVycmVyIhRrZXlVbmNsYWltZWRSZWZlcnJhbCILa2V5UmVmZXJyZXIiDmtleVByb2dyYW1OYW1lIhVrZXlUb3RhbFJlZmVycmFsQ291bnQiFmtleUFjdGl2ZVJlZmVycmFsQ291bnQiE2tleUlzUmVmZXJyYWxBY3RpdmUiFmtleUNsYWltZWRUb3RhbEFkZHJlc3MiB2FkZHJlc3MiGGtleVVuY2xhaW1lZFRvdGFsQWRkcmVzcyIPa2V5Q2xhaW1lZFRvdGFsIg9rZXlSZXdhcmRzVG90YWwiEGtleVJld2FyZEFzc2V0SWQiE2tleVRyZWFzdXJ5Q29udHJhY3QiGWtleUltcGxlbWVudGF0aW9uQ29udHJhY3QiFmtleUFsbFJlZmVycmFsUHJvZ3JhbXMiJ2tleUxhc3RJbmNVbmNsYWltZWRXaXRoUGF5bWVudENhbGxCbG9jayITa2V5TWFuYWdlclB1YmxpY0tleSIaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiD2tleUNsYWltSGlzdG9yeSILdXNlckFkZHJlc3MiDXRyYW5zYWN0aW9uSWQiBHR5cGUiEmZvcm1hdENsYWltSGlzdG9yeSIGYW1vdW50Igh0aHJvd0VyciIDbXNnIhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IgckbWF0Y2gwIgFzIh1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdCILbXVzdE1hbmFnZXIiAWkiAnBkIgJwayIZdXBkYXRlQWxsUmVmZXJyYWxQcm9ncmFtcyITYWxsUmVmZXJyYWxQcm9ncmFtcyIadXBkYXRlZEFsbFJlZmVycmFsUHJvZ3JhbXMiFm5ld0FsbFJlZmVycmFsUHJvZ3JhbXMiGGlzSW1wbGVtZW50YXRpb25Db250cmFjdCISY2hlY2tQcm9ncmFtRXhpc3RzIgskdDA0ODIxNTc1OCIOY2xhaW1lckNsYWltZWQiEGNsYWltZXJVbmNsYWltZWQiCmtleUNsYWltZWQiDGtleVVuY2xhaW1lZCIPY2xhaW1IaXN0b3J5S2V5IgxjbGFpbWVkVG90YWwiEHRyZWFzdXJ5Q29udHJhY3QiDXJld2FyZEFzc2V0SWQiE2NsYWltZWRUb3RhbEFkZHJlc3MiFXVuY2xhaW1lZFRvdGFsQWRkcmVzcyINY2hlY2tDYW5DbGFpbSIRbmV3Q2xhaW1lckNsYWltZWQiD25ld0NsYWltZWRUb3RhbCIWbmV3Q2xhaW1lZFRvdGFsQWRkcmVzcyIYbmV3VW5jbGFpbWVkVG90YWxBZGRyZXNzIg1iYWxhbmNlQmVmb3JlIgNyZXMiDGJhbGFuY2VBZnRlciILYmFsYW5jZURpZmYiDGNoZWNrQmFsYW5jZSIHY2xhaW1lciIMcHJvZ3JhbU5hbWVzIgtjdXJyZW50SXRlciILY2hlY2tDYWxsZXIiEHByb2dyYW1VbmNsYWltZWQiEWNsYWltQnVsa0ludGVybmFsIhF1bmNsYWltZWRSZWZlcnJlciIFY2xhaW0iDnBheW1lbnRBbW91bnRzIhFyZWZlcnJlckFkZHJlc3NlcyIJcmVzQW1vdW50Ig5hcmdzQ29tcGFyaXNvbiIFY2hlY2siEXJlZmVycmVyVW5jbGFpbWVkIgxyZXdhcmRzVG90YWwiFG5ld1JlZmVycmVyVW5jbGFpbWVkIgxuZXdSZXNBbW91bnQiA2ludiIadXBkYXRlZEFsbFJlZmVycmVyUHJvZ3JhbXMiFmltcGxlbWVudGF0aW9uQ29udHJhY3QiEGNoZWNrUHJvZ3JhbU5hbWUiEnByb2dyYW1OYW1lSXNWYWxpZCIQY2hlY2tSZXdhcmRBc3NldCIJc2lnbmF0dXJlIiBwYWlyUmVmZXJyZXJUb1JlZmVycmFsRXhpc3RDaGVjayIJbm9SZWZTZWxmIgRwYWlyIhBiYWNrZW5kUHVibGljS2V5IhF2YWxpZGF0ZVNpZ25hdHVyZSISdG90YWxSZWZlcnJhbENvdW50IhVuZXdUb3RhbFJlZmVycmFsQ291bnQiCGlzQWN0aXZlIhBpc1JlZmVycmFsQWN0aXZlIgZ1cGRhdGUiFm5ld0FjdGl2ZVJlZmVycmFsQ291bnQiDnJlZmVycmVyUmV3YXJkIg5yZWZlcnJhbFJld2FyZCIMY2hlY2tQcm9ncmFtIhZjaGVja1JlZmVycmVySW5Qcm9ncmFtIhZjaGVja1JlZmVycmFsSW5Qcm9ncmFtIhZ1bmNsYWltZWRUb3RhbFJlZmVycmVyIhZ1bmNsYWltZWRUb3RhbFJlZmVycmFsIhFyZWZlcnJhbFVuY2xhaW1lZCIZbmV3VW5jbGFpbWVkVG90YWxSZWZlcnJlciIZbmV3VW5jbGFpbWVkVG90YWxSZWZlcnJhbCIUbmV3UmVmZXJyYWxVbmNsYWltZWQiDWNhbGxlckFkZHJlc3MiCGxhc3RDYWxsIgp3YWl0QmxvY2tzIg1sYXN0Q2FsbENoZWNrIgNtYXAiBWFjY3VtIgRuZXh0Igxhc3NldElkQ2hlY2siC2Ftb3VudENoZWNrIghwYXltZW50cyICJGwiAiRzIgUkYWNjMCIFJGYwXzEiAiRhIgIkaSIFJGYwXzIiAUAiDWNsYWltSW50ZXJuYWwiEWNhbGxlclByb2dyYW1zU3RyIg5wcm9ncmFtc0V4aXN0cyIOY2FsbGVyUHJvZ3JhbXMiCWJ1bGtDbGFpbSIPY2xhaW1lZFJlZmVycmVyIg9jbGFpbWVkUmVmZXJyYWwiEXVuY2xhaW1lZFJlZmVycmFsIhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleR8AAWECAl9fAQFiAAkAuQkCCQDMCAICAiVzCQDMCAICCXd4QXNzZXRJZAUDbmlsBQFhAAFjCQC5CQIJAMwIAgICJXMJAMwIAgIQYmFja2VuZFB1YmxpY0tleQUDbmlsBQFhAQFkAwFlAWYBZwkAuQkCCQDMCAICCCVzJXMlcyVzCQDMCAICGGV4aXN0c1JlZmVycmVyVG9SZWZlcnJhbAkAzAgCBQFlCQDMCAIFAWYJAMwIAgUBZwUDbmlsBQFhAQFoAgFlAWkJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIPY2xhaW1lZFJlZmVycmVyCQDMCAIFAWUJAMwIAgUBaQUDbmlsBQFhAQFqAgFlAWkJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIPY2xhaW1lZFJlZmVycmFsCQDMCAIFAWUJAMwIAgUBaQUDbmlsBQFhAQFrAgFlAWkJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIRdW5jbGFpbWVkUmVmZXJyZXIJAMwIAgUBZQkAzAgCBQFpBQNuaWwFAWEBAWwCAWUBaQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhF1bmNsYWltZWRSZWZlcnJhbAkAzAgCBQFlCQDMCAIFAWkFA25pbAUBYQEBbQIBZQFnCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICCHJlZmVycmVyCQDMCAIFAWUJAMwIAgUBZwUDbmlsBQFhAQFuAQFlCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgtwcm9ncmFtTmFtZQkAzAgCBQFlBQNuaWwFAWEBAW8CAWUBZgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhJ0b3RhbFJlZmVycmFsQ291bnQJAMwIAgUBZQkAzAgCBQFmBQNuaWwFAWEBAXACAWUBZgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhNhY3RpdmVSZWZlcnJhbENvdW50CQDMCAIFAWUJAMwIAgUBZgUDbmlsBQFhAQFxAgFlAWcJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIOYWN0aXZlUmVmZXJyYWwJAMwIAgUBZQkAzAgCBQFnBQNuaWwFAWEBAXIBAXMJALkJAgkAzAgCAgQlcyVzCQDMCAICE2NsYWltZWRUb3RhbEFkZHJlc3MJAMwIAgUBcwUDbmlsBQFhAQF0AQFzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhV1bmNsYWltZWRUb3RhbEFkZHJlc3MJAMwIAgUBcwUDbmlsBQFhAQF1AQFlCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgxjbGFpbWVkVG90YWwJAMwIAgUBZQUDbmlsBQFhAQF2AQFlCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgxyZXdhcmRzVG90YWwJAMwIAgUBZQUDbmlsBQFhAQF3AQFlCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg1yZXdhcmRBc3NldElkCQDMCAIFAWUFA25pbAUBYQEBeAEBZQkAuQkCCQDMCAICBCVzJXMJAMwIAgIQdHJlYXN1cnlDb250cmFjdAkAzAgCBQFlBQNuaWwFAWEBAXkBAWUJALkJAgkAzAgCAgQlcyVzCQDMCAICFmltcGxlbWVudGF0aW9uQ29udHJhY3QJAMwIAgUBZQUDbmlsBQFhAQF6AQFzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhNhbGxSZWZlcnJhbFByb2dyYW1zCQDMCAIFAXMFA25pbAUBYQEBQQEBcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIkbGFzdEluY1VuY2xhaW1lZFdpdGhQYXltZW50Q2FsbEJsb2NrCQDMCAIFAXMFA25pbAUBYQEBQgACFCVzX19tYW5hZ2VyUHVibGljS2V5AQFDAAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQFEBAFlAUUBRgFHCQC5CQIJAMwIAgIKJXMlcyVzJXMlcwkAzAgCAgdoaXN0b3J5CQDMCAIFAUcJAMwIAgUBZQkAzAgCBQFFCQDMCAIFAUYFA25pbAUBYQEBSAEBSQkAuQkCCQDMCAICBiVkJWQlZAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sGaGVpZ2h0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkApAMBBQFJBQNuaWwFAWEBAUoBAUsJAAIBCQC5CQIJAMwIAgIOcmVmZXJyYWwucmlkZToJAMwIAgUBSwUDbmlsAgEgAQFMAAQBTQkAoggBCQEBQgADCQABAgUBTQIGU3RyaW5nBAFOBQFNCQDZBAEFAU4DCQABAgUBTQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQFPAAQBTQkAoggBCQEBQwADCQABAgUBTQIGU3RyaW5nBAFOBQFNCQDZBAEFAU4DCQABAgUBTQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQFQAQFRBAFSCQEBSgECEXBlcm1pc3Npb24gZGVuaWVkBAFNCQEBTAADCQABAgUBTQIKQnl0ZVZlY3RvcgQBUwUBTQMJAAACCAUBUQ9jYWxsZXJQdWJsaWNLZXkFAVMGBQFSAwkAAQIFAU0CBFVuaXQDCQAAAggFAVEGY2FsbGVyBQR0aGlzBgUBUgkAAgECC01hdGNoIGVycm9yAQFUAgFzAWUEAVUJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBAXoBBQFzAgAEAVYDCQEIY29udGFpbnMCBQFVBQFlBQNuaWwEAVcDCQAAAgUBVQIABQFlCQC5CQIJAMwIAgUBVQkAzAgCBQFlBQNuaWwFAWEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAXoBBQFzBQFXBQNuaWwFAVYPAVEBDWNsYWltSW50ZXJuYWwDAWUBaQFYBAFZAwkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEBbgEFAWUHBgkBAUoBAhZwcm9ncmFtIGRvZXMgbm90IGV4aXN0AwkAAAIFAVkFAVkEAVoDBQFYCQCXCgUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWoCBQFlBQFpAAAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWwCBQFlBQFpAAAJAQFqAgUBZQUBaQkBAWwCBQFlBQFpCQEBRAQFAWUFAWkJANgEAQgFAVENdHJhbnNhY3Rpb25JZAINY2xhaW1SZWZlcnJhbAkAlwoFCQELdmFsdWVPckVsc2UCCQCfCAEJAQFoAgUBZQUBaQAACQELdmFsdWVPckVsc2UCCQCfCAEJAQFrAgUBZQUBaQAACQEBaAIFAWUFAWkJAQFrAgUBZQUBaQkBAUQEBQFlBQFpCQDYBAEIBQFRDXRyYW5zYWN0aW9uSWQCDWNsYWltUmVmZXJyZXIEAmFhCAUBWgJfMQQCYWIIBQFaAl8yBAJhYwgFAVoCXzMEAmFkCAUBWgJfNAQCYWUIBQFaAl81BAJhZgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBdQEFAWUAAAQCYWcJAQV2YWx1ZQEJAKYIAQkBBXZhbHVlAQkAoggBCQEBeAEFAWUEAmFoCQDZBAEJAQV2YWx1ZQEJAKIIAQkBAXcBBQFlBAJhaQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBcgEFAWkAAAQCYWoJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAXQBBQFpAAADAwUBWAkAAAIFAmFiAAAHCQCUCgIFA25pbAAABAJhawMJAGYCBQJhYgAABgkBAUoBAhBub3RoaW5nIHRvIGNsYWltAwkAAAIFAmFrBQJhawQCYWwJAGQCBQJhYQUCYWIEAmFtCQBkAgUCYWYFAmFiBAJhbgkAZAIFAmFpBQJhYgQCYW8JAGUCBQJhagUCYWIEAmFwCQEFdmFsdWUBCQDwBwIFBHRoaXMFAmFoAwkAAAIFAmFwBQJhcAQCYXEJAPwHBAUCYWcCFndpdGhkcmF3UmVmZXJyYWxSZXdhcmQJAMwIAgUCYWIFA25pbAUDbmlsAwkAAAIFAmFxBQJhcQQCYXIJAQV2YWx1ZQEJAPAHAgUEdGhpcwUCYWgDCQAAAgUCYXIFAmFyBAJhcwkAZQIFAmFyBQJhcAMJAAACBQJhcwUCYXMEAmF0AwkAAAIFAmFzBQJhYgYJAQFKAQIpaW5zdWZmaWNpZW50IGJhbGFuY2Ugb24gcmVmZXJyYWwgY29udHJhY3QDCQAAAgUCYXQFAmF0CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFAmFjBQJhbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUCYWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAXUBBQFlBQJhbQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAXIBBQFpBQJhbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAXQBBQFpBQJhbwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQFpBQJhYgUCYWgJAMwIAgkBC1N0cmluZ0VudHJ5AgUCYWUJAQFIAQUCYWIFA25pbAUCYWIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQERY2xhaW1CdWxrSW50ZXJuYWwDAmF1AmF2AmF3BAJheAMJAAACCAUBUQZjYWxsZXIFBHRoaXMGCQEBSgECEXBlcm1pc3Npb24gZGVuaWVkAwkAAAIFAmF4BQJheAMJAAACBQJhdwkAkAMBBQJhdgUDbmlsBAFlCQCRAwIFAmF2BQJhdwQCYXkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWsCBQFlBQJhdQAABAJhZQkBAUQEBQFlBQJhdQkA2AQBCAUBUQ10cmFuc2FjdGlvbklkAgljbGFpbUJ1bGsEAmF6CQD8BwQFBHRoaXMCEWNsYWltQnVsa0ludGVybmFsCQDMCAIFAmF1CQDMCAIFAmF2CQDMCAIJAGQCBQJhdwABBQNuaWwFA25pbAMJAAACBQJhegUCYXoEAmFBCQELdmFsdWVPckVsc2UCCQCfCAEJAQFrAgUBZQUCYXUAAAQCYUIDCQBmAgUCYUEAAAkA/AcEBQR0aGlzAg1jbGFpbUludGVybmFsCQDMCAIFAWUJAMwIAgUCYXUJAMwIAgcFA25pbAUDbmlsBQR1bml0AwkAAAIFAmFCBQJhQgkAlAoCBQNuaWwJAMwIAgUCYXoJAMwIAgUCYUIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFRAR9pbmNVbmNsYWltZWRXaXRoUGF5bWVudEludGVybmFsBQJhQwFlAmFEAmF3AmFFBAJheAMJAAACCAUBUQZjYWxsZXIFBHRoaXMGCQEBSgECEXBlcm1pc3Npb24gZGVuaWVkAwkAAAIFAmF4BQJheAQCYUYJAAACCQCQAwEFAmFDCQCQAwEFAmFEBAJhRwMFAmFGBgkBAUoBAh9saXN0cyBpbiBhcmdzIG11c3QgYmUgc2FtZSBzaXplAwkAAAIFAmFHBQJhRwMJAAACBQJhdwkAkAMBBQJhQwkAlAoCBQNuaWwFAmFFBAFmCQCRAwIFAmFEBQJhdwQCYWoJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAXQBBQFmAAAEAmFICQELdmFsdWVPckVsc2UCCQCfCAEJAQFrAgUBZQUBZgAABAJhSQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBdgEFAWUAAAQCYW8JAGQCBQJhagkAkQMCBQJhQwUCYXcEAmFKCQBkAgUCYUgJAJEDAgUCYUMFAmF3BAJhSwkAZAIFAmFFCQCRAwIFAmFDBQJhdwQCYUwJAPwHBAUEdGhpcwIfaW5jVW5jbGFpbWVkV2l0aFBheW1lbnRJbnRlcm5hbAkAzAgCBQJhQwkAzAgCBQFlCQDMCAIFAmFECQDMCAIJAGQCBQJhdwABCQDMCAIFAmFLBQNuaWwFA25pbAMJAAACBQJhTAUCYUwEAmFNCQEBVAIFAWYFAWUJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBdAEFAWYFAmFvCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBawIFAWUFAWYFAmFKCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBdgEFAWUJAGQCBQJhSQkAkQMCBQJhQwUCYXcFA25pbAUCYU0FAmFMCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAVEBFWNyZWF0ZVJlZmVycmFsUHJvZ3JhbQQBZQJhZwJhTgJhaAQCYXgJAQFQAQUBUQMJAAACBQJheAUCYXgEAmFPAwkAAAIJAKAIAQkBAW4BBQFlBQR1bml0BgkBAUoBAhtwcm9ncmFtIG5hbWUgYWxyZWFkeSBleGlzdHMDCQAAAgUCYU8FAmFPBAJhUAMJAQEhAQkBCGNvbnRhaW5zAgUBZQUBYQkBASEBCQEIY29udGFpbnMCBQFlAgEgBwQBWQMFAmFQBgkBAUoBAhRpbnZhbGlkIHByb2dyYW0gbmFtZQMJAAACBQFZBQFZBAJhUQMJAQIhPQIJAOwHAQkA2QQBBQJhaAUEdW5pdAYJAQFKAQIXaW52YWxpZCByZXdhcmQgYXNzZXQgaWQDCQAAAgUCYVEFAmFRCQCUCgIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFuAQUBZQYJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAXgBBQFlBQJhZwkAzAgCCQELU3RyaW5nRW50cnkCCQEBeQEFAWUFAmFOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQF3AQUBZQUCYWgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQF2AQUBZQAABQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQEKY3JlYXRlUGFpcgQBZQFmAWcCYVIEAVkDCQELdmFsdWVPckVsc2UCCQCgCAEJAQFuAQUBZQcGCQEBSgECFnByb2dyYW0gZG9lcyBub3QgZXhpc3QDCQAAAgUBWQUBWQQCYVMDCQAAAgkAoAgBCQEBZAMFAWUFAWYFAWcFBHVuaXQGCQEBSgECE3BhaXIgYWxyZWFkeSBleGlzdHMDCQAAAgUCYVMFAmFTBAJhVAMJAQIhPQIFAWYFAWcGCQEBSgECFGNhbm5vdCByZWZlciB0byBzZWxmAwkAAAIFAmFUBQJhVAQCYVUJAJsDAQkAuQkCCQDMCAIFAWUJAMwIAgUBZgkAzAgCBQFnBQNuaWwCAToEAmFWCQDZBAEJAQV2YWx1ZQEJAKIIAQUBYwQCYVcDCQD0AwMFAmFVBQJhUgUCYVYGCQEBSgECDWJhZCBzaWduYXR1cmUDCQAAAgUCYVcFAmFXBAJhWAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBbwIFAWUFAWYAAAQCYVkJAGQCBQJhWAABBAJhTQkBAVQCBQFmBQFlBAFWCQEBVAIFAWcFAWUJAJQKAgkAzggCCQDOCAIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFkAwUBZQUBZgUBZwYJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFvAgUBZQUBZgUCYVkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAW0CBQFlBQFnBQFmBQNuaWwFAmFNBQFWBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAVEBFnVwZGF0ZVJlZmVycmFsQWN0aXZpdHkDAWUBZwJhWgQCYU4JAQV2YWx1ZQEJAKIIAQkBAXkBBQFlBAJiYQkBAiE9AgkAoAgBCQEBcQIFAWUFAWcFBHVuaXQEAWYJAQV2YWx1ZQEJAKIIAQkBAW0CBQFlBQFnBAJheAMJAAACCQClCAEIBQFRBmNhbGxlcgUCYU4GCQEBSgECEXBlcm1pc3Npb24gZGVuaWVkAwkAAAIFAmF4BQJheAQCYmIDCQAAAgUCYmEFAmFaCQCUCgIFA25pbAUEdW5pdAQCYmIDCQAAAgUCYVoGBAJiYwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAXACBQFlBQFmAAAAAQkAlAoCCQDMCAIJAQxCb29sZWFuRW50cnkCCQEBcQIFAWUFAWcGCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBcAIFAWUFAWYFAmJjBQNuaWwFBHVuaXQEAmJjCQBlAgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBcAIFAWUFAWYAAAABCQCUCgIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAXECBQFlBQFnCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBcAIFAWUFAWYFAmJjBQNuaWwFBHVuaXQFAmJiBQJiYgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFRAQxpbmNVbmNsYWltZWQEAWUBZwJiZAJiZQQCYU4JAQV2YWx1ZQEJAKIIAQkBAXkBBQFlBAFmCQEFdmFsdWUBCQCiCAEJAQFtAgUBZQUBZwQCYXgDCQAAAgkApQgBCAUBUQZjYWxsZXIFAmFOBgkBAUoBAhFwZXJtaXNzaW9uIGRlbmllZAMJAAACBQJheAUCYXgEAmJmAwkAAAIFAWUCBnd4bG9jawYJAQFKAQIPaW52YWxpZCBwcm9ncmFtAwkAAAIFAmJmBQJiZgQCYmcDCQEIY29udGFpbnMCCQELdmFsdWVPckVsc2UCCQCiCAEJAQF6AQUBZgIABQFlBgkBAUoBCQCsAgIJAKwCAgkArAICAhhyZWZlcnJlciBub3QgaW4gcHJvZ3JhbT0FAWUCBiBhZGRyPQUBZgMJAAACBQJiZwUCYmcEAmJoAwkBCGNvbnRhaW5zAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEBegEFAWcCAAUBZQYJAQFKAQkArAICCQCsAgIJAKwCAgIYcmVmZXJyYWwgbm90IGluIHByb2dyYW09BQFlAgYgYWRkcj0FAWcDCQAAAgUCYmgFAmJoBAJiaQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBdAEFAWYAAAQCYUgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWsCBQFlBQFmAAAEAmJqCQELdmFsdWVPckVsc2UCCQCfCAEJAQF0AQUBZwAABAJiawkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBbAIFAWUFAWcAAAQCYUkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAXYBBQFlAAAEAmJsCQBkAgUCYmkFAmJkBAJhSgkAZAIFAmFIBQJiZAQCYm0JAGQCBQJiagUCYmUEAmJuCQBkAgUCYmsFAmJlCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQF0AQUBZgUCYmwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQF0AQUBZwUCYm0JAMwIAgkBDEludGVnZXJFbnRyeQIJAQFrAgUBZQUBZgUCYUoJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFsAgUBZQUBZwUCYm4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQF2AQUBZQkAZAIJAGQCBQJhSQUCYmQFAmJlBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQEXaW5jVW5jbGFpbWVkV2l0aFBheW1lbnQCAWUCYUQEAmJmAwkAAAIFAWUCCXd4U3BvdEZlZQYJAQFKAQIPaW52YWxpZCBwcm9ncmFtAwkAAAIFAmJmBQJiZgQCYm8JAKUIAQgFAVEGY2FsbGVyBAJicAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBQQEFAmJvAAAEAmJxCQBkAgkAZQIFAmJwBQZoZWlnaHQAAwQCYnIDCQBmAgkAZQIFBmhlaWdodAADBQJicAYJAQFKAQkAuQkCCQDMCAICBHdhaXQJAMwIAgkApAMBBQJicQkAzAgCAgZibG9ja3MFA25pbAIBIAMJAAACBQJicgUCYnIKAQJicwICYnQCYnUEAmJ2CQAAAgkA2AQBCQEFdmFsdWUBCAUCYnUHYXNzZXRJZAkBBXZhbHVlAQkAoggBCQEBdwEFAWUEAmJ3AwUCYnYGCQEBSgECEGludmFsaWQgYXNzZXQgaWQDCQAAAgUCYncFAmJ3CQDNCAIFAmJ0CAUCYnUGYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAJieAoAAmJ5CAUBUQhwYXltZW50cwoAAmJ6CQCQAwEFAmJ5CgACYkEFA25pbAoBAmJCAgJiQwJiRAMJAGcCBQJiRAUCYnoFAmJDCQECYnMCBQJiQwkAkQMCBQJieQUCYkQKAQJiRQICYkMCYkQDCQBnAgUCYkQFAmJ6BQJiQwkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQECYkUCCQECYkICCQECYkICCQECYkICCQECYkICCQECYkICCQECYkICCQECYkICCQECYkICCQECYkICCQECYkICBQJiQQAAAAEAAgADAAQABQAGAAcACAAJAAoEAmFFCgACYkYJAPwHBAUEdGhpcwIfaW5jVW5jbGFpbWVkV2l0aFBheW1lbnRJbnRlcm5hbAkAzAgCBQJieAkAzAgCBQFlCQDMCAIFAmFECQDMCAIAAAkAzAgCAAAFA25pbAUDbmlsAwkAAQIFAmJGAgNJbnQFAmJGCQACAQkArAICCQADAQUCYkYCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQJhRQUCYUUEAmFnCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBCQCiCAEJAQF4AQUBZQQCYWgJANkEAQkBBXZhbHVlAQkAoggBCQEBdwEFAWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYWcFAmFFBQJhaAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAUEBBQJibwUGaGVpZ2h0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQEFY2xhaW0BAWUEAVkDCQELdmFsdWVPckVsc2UCCQCgCAEJAQFuAQUBZQcGCQEBSgECFnByb2dyYW0gZG9lcyBub3QgZXhpc3QDCQAAAgUBWQUBWQQBWAkAAAIJAKUIAQgFAVEGY2FsbGVyCQEFdmFsdWUBCQCiCAEJAQF5AQUBZQQBaQMFAVgJAKUIAQgFAVEMb3JpZ2luQ2FsbGVyCQClCAEIBQFRBmNhbGxlcgQCYkcJAPwHBAUEdGhpcwINY2xhaW1JbnRlcm5hbAkAzAgCBQFlCQDMCAIFAWkJAMwIAgUBWAUDbmlsBQNuaWwDCQAAAgUCYkcFAmJHCQCUCgIFA25pbAUCYkcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQEJY2xhaW1CdWxrAAQCYm8JAKUIAQgFAVEGY2FsbGVyBAJiSAkAoggBCQEBegEJAKUIAQgFAVEGY2FsbGVyBAJiSQMJAQlpc0RlZmluZWQBBQJiSAYJAQFKAQIUbm8gcmVmZXJyYWwgcHJvZ3JhbXMDCQAAAgUCYkkFAmJJBAJiSgkAtQkCCQEFdmFsdWUBBQJiSAICX18EAmJLCQD8BwQFBHRoaXMCEWNsYWltQnVsa0ludGVybmFsCQDMCAIFAmJvCQDMCAIFAmJKCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUCYksFAmJLCQCUCgIFA25pbAUCYksJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BUQENY2xhaW1SRUFET05MWQIBZQFFBAJhYQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBaAIFAWUFAUUAAAQCYWIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWsCBQFlBQFFAAAJAJQKAgUDbmlsCQDMCAIFAmFiCQDMCAIFAmFhBQNuaWwBUQERY2xhaW1CdWxrUkVBRE9OTFkBAmF1BAJhaQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBcgEFAmF1AAAEAmFqCQELdmFsdWVPckVsc2UCCQCfCAEJAQF0AQUCYXUAAAkAlAoCBQNuaWwJAMwIAgUCYWoJAMwIAgUCYWkFA25pbAFRAQxzZXRUb3RhbEtleXMCAWUBcwQCYkwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWgCBQFlBQFzAAAEAmJNCQELdmFsdWVPckVsc2UCCQCfCAEJAQFqAgUBZQUBcwAABAJhQQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEBawIFAWUFAXMAAAQCYk4JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAWwCBQFlBQFzAAAEAmFpCQBkAgUCYkwFAmJNBAJhagkAZAIFAmFBBQJiTgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBcgEFAXMFAmFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBdAEFAXMFAmFqBQNuaWwFBHVuaXQBUQEKc2V0TWFuYWdlcgECYk8EAmF4CQEBUAEFAVEDCQAAAgUCYXgFAmF4BAJiUAkA2QQBBQJiTwMJAAACBQJiUAUCYlAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAUMABQJiTwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAVEBDmNvbmZpcm1NYW5hZ2VyAAQCYlEJAQFPAAQCYlIDCQEJaXNEZWZpbmVkAQUCYlEGCQEBSgECEm5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJiUgUCYlIEAmJTAwkAAAIIBQFRD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCYlEGCQEBSgECG3lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJiUwUCYlMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAUIACQDYBAEJAQV2YWx1ZQEFAmJRCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFDAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJiVAECYlUABAJiVgQBTQkBAUwAAwkAAQIFAU0CCkJ5dGVWZWN0b3IEAVMFAU0FAVMDCQABAgUBTQIEVW5pdAgFAmJUD3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJiVAlib2R5Qnl0ZXMJAJEDAggFAmJUBnByb29mcwAABQJiVh+BG/4=", "chainId": 84, "height": 2411647, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 99nmnPvBm2aSz1jRiN6CCR9cSowfAwT9a1CAF29HBeRQ Next: 3UH88heEP1uWs5zG6T9Bw1My5283R1HaAVxzDWUqQqix Diff:
OldNewDifferences
6060
6161
6262 func keyAllReferralPrograms (address) = makeString(["%s%s", "allReferralPrograms", address], separator)
63+
64+
65+func keyLastIncUnclaimedWithPaymentCallBlock (address) = makeString(["%s%s", "lastIncUnclaimedWithPaymentCallBlock", address], separator)
6366
6467
6568 func keyManagerPublicKey () = "%s__managerPublicKey"
135138 else throwErr("program does not exist")
136139 if ((checkProgramExists == checkProgramExists))
137140 then {
138- let $t046775614 = if (isImplementationContract)
141+ let $t048215758 = if (isImplementationContract)
139142 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"))
140143 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
144+ let claimerClaimed = $t048215758._1
145+ let claimerUnclaimed = $t048215758._2
146+ let keyClaimed = $t048215758._3
147+ let keyUnclaimed = $t048215758._4
148+ let claimHistoryKey = $t048215758._5
146149 let claimedTotal = valueOrElse(getInteger(keyClaimedTotal(programName)), 0)
147150 let treasuryContract = value(addressFromString(value(getString(keyTreasuryContract(programName)))))
148151 let rewardAssetId = fromBase58String(value(getString(keyRewardAssetId(programName))))
423426 else throwErr("invalid program")
424427 if ((checkProgram == checkProgram))
425428 then {
426- func map (accum,next) = {
427- let assetIdCheck = (toBase58String(value(next.assetId)) == value(getString(keyRewardAssetId(programName))))
428- let amountCheck = if (assetIdCheck)
429- then true
430- else throwErr("invalid asset id")
431- if ((amountCheck == amountCheck))
432- then (accum :+ next.amount)
433- else throw("Strict value is not equal to itself.")
434- }
429+ let callerAddress = toString(i.caller)
430+ let lastCall = valueOrElse(getInteger(keyLastIncUnclaimedWithPaymentCallBlock(callerAddress)), 0)
431+ let waitBlocks = ((lastCall - height) + 3)
432+ let lastCallCheck = if (((height - 3) > lastCall))
433+ then true
434+ else throwErr(makeString(["wait", toString(waitBlocks), "blocks"], " "))
435+ if ((lastCallCheck == lastCallCheck))
436+ then {
437+ func map (accum,next) = {
438+ let assetIdCheck = (toBase58String(value(next.assetId)) == value(getString(keyRewardAssetId(programName))))
439+ let amountCheck = if (assetIdCheck)
440+ then true
441+ else throwErr("invalid asset id")
442+ if ((amountCheck == amountCheck))
443+ then (accum :+ next.amount)
444+ else throw("Strict value is not equal to itself.")
445+ }
435446
436- let payments = {
437- let $l = i.payments
438- let $s = size($l)
439- let $acc0 = nil
440- func $f0_1 ($a,$i) = if (($i >= $s))
441- then $a
442- else map($a, $l[$i])
447+ let payments = {
448+ let $l = i.payments
449+ let $s = size($l)
450+ let $acc0 = nil
451+ func $f0_1 ($a,$i) = if (($i >= $s))
452+ then $a
453+ else map($a, $l[$i])
443454
444- func $f0_2 ($a,$i) = if (($i >= $s))
445- then $a
446- else throw("List size exceeds 10")
455+ func $f0_2 ($a,$i) = if (($i >= $s))
456+ then $a
457+ else throw("List size exceeds 10")
447458
448- $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)
449- }
450- let resAmount = {
451- let @ = invoke(this, "incUnclaimedWithPaymentInternal", [payments, programName, referrerAddresses, 0, 0], nil)
452- if ($isInstanceOf(@, "Int"))
453- then @
454- else throw(($getType(@) + " couldn't be cast to Int"))
455- }
456- if ((resAmount == resAmount))
457- then {
458- let treasuryContract = addressFromStringValue(value(getString(keyTreasuryContract(programName))))
459- let rewardAssetId = fromBase58String(value(getString(keyRewardAssetId(programName))))
460-[ScriptTransfer(treasuryContract, resAmount, rewardAssetId)]
459+ $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)
460+ }
461+ let resAmount = {
462+ let @ = invoke(this, "incUnclaimedWithPaymentInternal", [payments, programName, referrerAddresses, 0, 0], nil)
463+ if ($isInstanceOf(@, "Int"))
464+ then @
465+ else throw(($getType(@) + " couldn't be cast to Int"))
466+ }
467+ if ((resAmount == resAmount))
468+ then {
469+ let treasuryContract = addressFromStringValue(value(getString(keyTreasuryContract(programName))))
470+ let rewardAssetId = fromBase58String(value(getString(keyRewardAssetId(programName))))
471+[ScriptTransfer(treasuryContract, resAmount, rewardAssetId), IntegerEntry(keyLastIncUnclaimedWithPaymentCallBlock(callerAddress), height)]
472+ }
473+ else throw("Strict value is not equal to itself.")
461474 }
462475 else throw("Strict value is not equal to itself.")
463476 }
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)
63+
64+
65+func keyLastIncUnclaimedWithPaymentCallBlock (address) = makeString(["%s%s", "lastIncUnclaimedWithPaymentCallBlock", address], separator)
6366
6467
6568 func keyManagerPublicKey () = "%s__managerPublicKey"
6669
6770
6871 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
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
8083 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
8184 case s: String =>
8285 fromBase58String(s)
8386 case _: Unit =>
8487 unit
8588 case _ =>
8689 throw("Match error")
8790 }
8891
8992
9093 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
9194 case s: String =>
9295 fromBase58String(s)
9396 case _: Unit =>
9497 unit
9598 case _ =>
9699 throw("Match error")
97100 }
98101
99102
100103 func mustManager (i) = {
101104 let pd = throwErr("permission denied")
102105 match managerPublicKeyOrUnit() {
103106 case pk: ByteVector =>
104107 if ((i.callerPublicKey == pk))
105108 then true
106109 else pd
107110 case _: Unit =>
108111 if ((i.caller == this))
109112 then true
110113 else pd
111114 case _ =>
112115 throw("Match error")
113116 }
114117 }
115118
116119
117120 func updateAllReferralPrograms (address,programName) = {
118121 let allReferralPrograms = valueOrElse(getString(keyAllReferralPrograms(address)), "")
119122 let updatedAllReferralPrograms = if (contains(allReferralPrograms, programName))
120123 then nil
121124 else {
122125 let newAllReferralPrograms = if ((allReferralPrograms == ""))
123126 then programName
124127 else makeString([allReferralPrograms, programName], separator)
125128 [StringEntry(keyAllReferralPrograms(address), newAllReferralPrograms)]
126129 }
127130 updatedAllReferralPrograms
128131 }
129132
130133
131134 @Callable(i)
132135 func claimInternal (programName,claimerAddress,isImplementationContract) = {
133136 let checkProgramExists = if (valueOrElse(getBoolean(keyProgramName(programName)), false))
134137 then true
135138 else throwErr("program does not exist")
136139 if ((checkProgramExists == checkProgramExists))
137140 then {
138- let $t046775614 = if (isImplementationContract)
141+ let $t048215758 = if (isImplementationContract)
139142 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"))
140143 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
144+ let claimerClaimed = $t048215758._1
145+ let claimerUnclaimed = $t048215758._2
146+ let keyClaimed = $t048215758._3
147+ let keyUnclaimed = $t048215758._4
148+ let claimHistoryKey = $t048215758._5
146149 let claimedTotal = valueOrElse(getInteger(keyClaimedTotal(programName)), 0)
147150 let treasuryContract = value(addressFromString(value(getString(keyTreasuryContract(programName)))))
148151 let rewardAssetId = fromBase58String(value(getString(keyRewardAssetId(programName))))
149152 let claimedTotalAddress = valueOrElse(getInteger(keyClaimedTotalAddress(claimerAddress)), 0)
150153 let unclaimedTotalAddress = valueOrElse(getInteger(keyUnclaimedTotalAddress(claimerAddress)), 0)
151154 if (if (isImplementationContract)
152155 then (claimerUnclaimed == 0)
153156 else false)
154157 then $Tuple2(nil, 0)
155158 else {
156159 let checkCanClaim = if ((claimerUnclaimed > 0))
157160 then true
158161 else throwErr("nothing to claim")
159162 if ((checkCanClaim == checkCanClaim))
160163 then {
161164 let newClaimerClaimed = (claimerClaimed + claimerUnclaimed)
162165 let newClaimedTotal = (claimedTotal + claimerUnclaimed)
163166 let newClaimedTotalAddress = (claimedTotalAddress + claimerUnclaimed)
164167 let newUnclaimedTotalAddress = (unclaimedTotalAddress - claimerUnclaimed)
165168 let balanceBefore = value(assetBalance(this, rewardAssetId))
166169 if ((balanceBefore == balanceBefore))
167170 then {
168171 let res = invoke(treasuryContract, "withdrawReferralReward", [claimerUnclaimed], nil)
169172 if ((res == res))
170173 then {
171174 let balanceAfter = value(assetBalance(this, rewardAssetId))
172175 if ((balanceAfter == balanceAfter))
173176 then {
174177 let balanceDiff = (balanceAfter - balanceBefore)
175178 if ((balanceDiff == balanceDiff))
176179 then {
177180 let checkBalance = if ((balanceDiff == claimerUnclaimed))
178181 then true
179182 else throwErr("insufficient balance on referral contract")
180183 if ((checkBalance == checkBalance))
181184 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)
182185 else throw("Strict value is not equal to itself.")
183186 }
184187 else throw("Strict value is not equal to itself.")
185188 }
186189 else throw("Strict value is not equal to itself.")
187190 }
188191 else throw("Strict value is not equal to itself.")
189192 }
190193 else throw("Strict value is not equal to itself.")
191194 }
192195 else throw("Strict value is not equal to itself.")
193196 }
194197 }
195198 else throw("Strict value is not equal to itself.")
196199 }
197200
198201
199202
200203 @Callable(i)
201204 func claimBulkInternal (claimer,programNames,currentIter) = {
202205 let checkCaller = if ((i.caller == this))
203206 then true
204207 else throwErr("permission denied")
205208 if ((checkCaller == checkCaller))
206209 then if ((currentIter == size(programNames)))
207210 then nil
208211 else {
209212 let programName = programNames[currentIter]
210213 let programUnclaimed = valueOrElse(getInteger(keyUnclaimedReferrer(programName, claimer)), 0)
211214 let claimHistoryKey = keyClaimHistory(programName, claimer, toBase58String(i.transactionId), "claimBulk")
212215 let claimBulkInternal = invoke(this, "claimBulkInternal", [claimer, programNames, (currentIter + 1)], nil)
213216 if ((claimBulkInternal == claimBulkInternal))
214217 then {
215218 let unclaimedReferrer = valueOrElse(getInteger(keyUnclaimedReferrer(programName, claimer)), 0)
216219 let claim = if ((unclaimedReferrer > 0))
217220 then invoke(this, "claimInternal", [programName, claimer, false], nil)
218221 else unit
219222 if ((claim == claim))
220223 then $Tuple2(nil, [claimBulkInternal, claim])
221224 else throw("Strict value is not equal to itself.")
222225 }
223226 else throw("Strict value is not equal to itself.")
224227 }
225228 else throw("Strict value is not equal to itself.")
226229 }
227230
228231
229232
230233 @Callable(i)
231234 func incUnclaimedWithPaymentInternal (paymentAmounts,programName,referrerAddresses,currentIter,resAmount) = {
232235 let checkCaller = if ((i.caller == this))
233236 then true
234237 else throwErr("permission denied")
235238 if ((checkCaller == checkCaller))
236239 then {
237240 let argsComparison = (size(paymentAmounts) == size(referrerAddresses))
238241 let check = if (argsComparison)
239242 then true
240243 else throwErr("lists in args must be same size")
241244 if ((check == check))
242245 then if ((currentIter == size(paymentAmounts)))
243246 then $Tuple2(nil, resAmount)
244247 else {
245248 let referrerAddress = referrerAddresses[currentIter]
246249 let unclaimedTotalAddress = valueOrElse(getInteger(keyUnclaimedTotalAddress(referrerAddress)), 0)
247250 let referrerUnclaimed = valueOrElse(getInteger(keyUnclaimedReferrer(programName, referrerAddress)), 0)
248251 let rewardsTotal = valueOrElse(getInteger(keyRewardsTotal(programName)), 0)
249252 let newUnclaimedTotalAddress = (unclaimedTotalAddress + paymentAmounts[currentIter])
250253 let newReferrerUnclaimed = (referrerUnclaimed + paymentAmounts[currentIter])
251254 let newResAmount = (resAmount + paymentAmounts[currentIter])
252255 let inv = invoke(this, "incUnclaimedWithPaymentInternal", [paymentAmounts, programName, referrerAddresses, (currentIter + 1), newResAmount], nil)
253256 if ((inv == inv))
254257 then {
255258 let updatedAllReferrerPrograms = updateAllReferralPrograms(referrerAddress, programName)
256259 $Tuple2(([IntegerEntry(keyUnclaimedTotalAddress(referrerAddress), newUnclaimedTotalAddress), IntegerEntry(keyUnclaimedReferrer(programName, referrerAddress), newReferrerUnclaimed), IntegerEntry(keyRewardsTotal(programName), (rewardsTotal + paymentAmounts[currentIter]))] ++ updatedAllReferrerPrograms), inv)
257260 }
258261 else throw("Strict value is not equal to itself.")
259262 }
260263 else throw("Strict value is not equal to itself.")
261264 }
262265 else throw("Strict value is not equal to itself.")
263266 }
264267
265268
266269
267270 @Callable(i)
268271 func createReferralProgram (programName,treasuryContract,implementationContract,rewardAssetId) = {
269272 let checkCaller = mustManager(i)
270273 if ((checkCaller == checkCaller))
271274 then {
272275 let checkProgramName = if ((getBoolean(keyProgramName(programName)) == unit))
273276 then true
274277 else throwErr("program name already exists")
275278 if ((checkProgramName == checkProgramName))
276279 then {
277280 let programNameIsValid = if (!(contains(programName, separator)))
278281 then !(contains(programName, " "))
279282 else false
280283 let checkProgramExists = if (programNameIsValid)
281284 then true
282285 else throwErr("invalid program name")
283286 if ((checkProgramExists == checkProgramExists))
284287 then {
285288 let checkRewardAsset = if ((assetInfo(fromBase58String(rewardAssetId)) != unit))
286289 then true
287290 else throwErr("invalid reward asset id")
288291 if ((checkRewardAsset == checkRewardAsset))
289292 then $Tuple2([BooleanEntry(keyProgramName(programName), true), StringEntry(keyTreasuryContract(programName), treasuryContract), StringEntry(keyImplementationContract(programName), implementationContract), StringEntry(keyRewardAssetId(programName), rewardAssetId), IntegerEntry(keyRewardsTotal(programName), 0)], unit)
290293 else throw("Strict value is not equal to itself.")
291294 }
292295 else throw("Strict value is not equal to itself.")
293296 }
294297 else throw("Strict value is not equal to itself.")
295298 }
296299 else throw("Strict value is not equal to itself.")
297300 }
298301
299302
300303
301304 @Callable(i)
302305 func createPair (programName,referrerAddress,referralAddress,signature) = {
303306 let checkProgramExists = if (valueOrElse(getBoolean(keyProgramName(programName)), false))
304307 then true
305308 else throwErr("program does not exist")
306309 if ((checkProgramExists == checkProgramExists))
307310 then {
308311 let pairReferrerToReferralExistCheck = if ((getBoolean(keyExistsReferrerToReferral(programName, referrerAddress, referralAddress)) == unit))
309312 then true
310313 else throwErr("pair already exists")
311314 if ((pairReferrerToReferralExistCheck == pairReferrerToReferralExistCheck))
312315 then {
313316 let noRefSelf = if ((referrerAddress != referralAddress))
314317 then true
315318 else throwErr("cannot refer to self")
316319 if ((noRefSelf == noRefSelf))
317320 then {
318321 let pair = toBytes(makeString([programName, referrerAddress, referralAddress], ":"))
319322 let backendPublicKey = fromBase58String(value(getString(keyBackendPublicKey)))
320323 let validateSignature = if (sigVerify(pair, signature, backendPublicKey))
321324 then true
322325 else throwErr("bad signature")
323326 if ((validateSignature == validateSignature))
324327 then {
325328 let totalReferralCount = valueOrElse(getInteger(keyTotalReferralCount(programName, referrerAddress)), 0)
326329 let newTotalReferralCount = (totalReferralCount + 1)
327330 let updatedAllReferrerPrograms = updateAllReferralPrograms(referrerAddress, programName)
328331 let updatedAllReferralPrograms = updateAllReferralPrograms(referralAddress, programName)
329332 $Tuple2((([BooleanEntry(keyExistsReferrerToReferral(programName, referrerAddress, referralAddress), true), IntegerEntry(keyTotalReferralCount(programName, referrerAddress), newTotalReferralCount), StringEntry(keyReferrer(programName, referralAddress), referrerAddress)] ++ updatedAllReferrerPrograms) ++ updatedAllReferralPrograms), unit)
330333 }
331334 else throw("Strict value is not equal to itself.")
332335 }
333336 else throw("Strict value is not equal to itself.")
334337 }
335338 else throw("Strict value is not equal to itself.")
336339 }
337340 else throw("Strict value is not equal to itself.")
338341 }
339342
340343
341344
342345 @Callable(i)
343346 func updateReferralActivity (programName,referralAddress,isActive) = {
344347 let implementationContract = value(getString(keyImplementationContract(programName)))
345348 let isReferralActive = (getBoolean(keyIsReferralActive(programName, referralAddress)) != unit)
346349 let referrerAddress = value(getString(keyReferrer(programName, referralAddress)))
347350 let checkCaller = if ((toString(i.caller) == implementationContract))
348351 then true
349352 else throwErr("permission denied")
350353 if ((checkCaller == checkCaller))
351354 then {
352355 let update = if ((isReferralActive == isActive))
353356 then $Tuple2(nil, unit)
354357 else {
355358 let update = if ((isActive == true))
356359 then {
357360 let newActiveReferralCount = (valueOrElse(getInteger(keyActiveReferralCount(programName, referrerAddress)), 0) + 1)
358361 $Tuple2([BooleanEntry(keyIsReferralActive(programName, referralAddress), true), IntegerEntry(keyActiveReferralCount(programName, referrerAddress), newActiveReferralCount)], unit)
359362 }
360363 else {
361364 let newActiveReferralCount = (valueOrElse(getInteger(keyActiveReferralCount(programName, referrerAddress)), 0) - 1)
362365 $Tuple2([DeleteEntry(keyIsReferralActive(programName, referralAddress)), IntegerEntry(keyActiveReferralCount(programName, referrerAddress), newActiveReferralCount)], unit)
363366 }
364367 update
365368 }
366369 update
367370 }
368371 else throw("Strict value is not equal to itself.")
369372 }
370373
371374
372375
373376 @Callable(i)
374377 func incUnclaimed (programName,referralAddress,referrerReward,referralReward) = {
375378 let implementationContract = value(getString(keyImplementationContract(programName)))
376379 let referrerAddress = value(getString(keyReferrer(programName, referralAddress)))
377380 let checkCaller = if ((toString(i.caller) == implementationContract))
378381 then true
379382 else throwErr("permission denied")
380383 if ((checkCaller == checkCaller))
381384 then {
382385 let checkProgram = if ((programName == "wxlock"))
383386 then true
384387 else throwErr("invalid program")
385388 if ((checkProgram == checkProgram))
386389 then {
387390 let checkReferrerInProgram = if (contains(valueOrElse(getString(keyAllReferralPrograms(referrerAddress)), ""), programName))
388391 then true
389392 else throwErr(((("referrer not in program=" + programName) + " addr=") + referrerAddress))
390393 if ((checkReferrerInProgram == checkReferrerInProgram))
391394 then {
392395 let checkReferralInProgram = if (contains(valueOrElse(getString(keyAllReferralPrograms(referralAddress)), ""), programName))
393396 then true
394397 else throwErr(((("referral not in program=" + programName) + " addr=") + referralAddress))
395398 if ((checkReferralInProgram == checkReferralInProgram))
396399 then {
397400 let unclaimedTotalReferrer = valueOrElse(getInteger(keyUnclaimedTotalAddress(referrerAddress)), 0)
398401 let referrerUnclaimed = valueOrElse(getInteger(keyUnclaimedReferrer(programName, referrerAddress)), 0)
399402 let unclaimedTotalReferral = valueOrElse(getInteger(keyUnclaimedTotalAddress(referralAddress)), 0)
400403 let referralUnclaimed = valueOrElse(getInteger(keyUnclaimedReferral(programName, referralAddress)), 0)
401404 let rewardsTotal = valueOrElse(getInteger(keyRewardsTotal(programName)), 0)
402405 let newUnclaimedTotalReferrer = (unclaimedTotalReferrer + referrerReward)
403406 let newReferrerUnclaimed = (referrerUnclaimed + referrerReward)
404407 let newUnclaimedTotalReferral = (unclaimedTotalReferral + referralReward)
405408 let newReferralUnclaimed = (referralUnclaimed + referralReward)
406409 $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)
407410 }
408411 else throw("Strict value is not equal to itself.")
409412 }
410413 else throw("Strict value is not equal to itself.")
411414 }
412415 else throw("Strict value is not equal to itself.")
413416 }
414417 else throw("Strict value is not equal to itself.")
415418 }
416419
417420
418421
419422 @Callable(i)
420423 func incUnclaimedWithPayment (programName,referrerAddresses) = {
421424 let checkProgram = if ((programName == "wxSpotFee"))
422425 then true
423426 else throwErr("invalid program")
424427 if ((checkProgram == checkProgram))
425428 then {
426- func map (accum,next) = {
427- let assetIdCheck = (toBase58String(value(next.assetId)) == value(getString(keyRewardAssetId(programName))))
428- let amountCheck = if (assetIdCheck)
429- then true
430- else throwErr("invalid asset id")
431- if ((amountCheck == amountCheck))
432- then (accum :+ next.amount)
433- else throw("Strict value is not equal to itself.")
434- }
429+ let callerAddress = toString(i.caller)
430+ let lastCall = valueOrElse(getInteger(keyLastIncUnclaimedWithPaymentCallBlock(callerAddress)), 0)
431+ let waitBlocks = ((lastCall - height) + 3)
432+ let lastCallCheck = if (((height - 3) > lastCall))
433+ then true
434+ else throwErr(makeString(["wait", toString(waitBlocks), "blocks"], " "))
435+ if ((lastCallCheck == lastCallCheck))
436+ then {
437+ func map (accum,next) = {
438+ let assetIdCheck = (toBase58String(value(next.assetId)) == value(getString(keyRewardAssetId(programName))))
439+ let amountCheck = if (assetIdCheck)
440+ then true
441+ else throwErr("invalid asset id")
442+ if ((amountCheck == amountCheck))
443+ then (accum :+ next.amount)
444+ else throw("Strict value is not equal to itself.")
445+ }
435446
436- let payments = {
437- let $l = i.payments
438- let $s = size($l)
439- let $acc0 = nil
440- func $f0_1 ($a,$i) = if (($i >= $s))
441- then $a
442- else map($a, $l[$i])
447+ let payments = {
448+ let $l = i.payments
449+ let $s = size($l)
450+ let $acc0 = nil
451+ func $f0_1 ($a,$i) = if (($i >= $s))
452+ then $a
453+ else map($a, $l[$i])
443454
444- func $f0_2 ($a,$i) = if (($i >= $s))
445- then $a
446- else throw("List size exceeds 10")
455+ func $f0_2 ($a,$i) = if (($i >= $s))
456+ then $a
457+ else throw("List size exceeds 10")
447458
448- $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)
449- }
450- let resAmount = {
451- let @ = invoke(this, "incUnclaimedWithPaymentInternal", [payments, programName, referrerAddresses, 0, 0], nil)
452- if ($isInstanceOf(@, "Int"))
453- then @
454- else throw(($getType(@) + " couldn't be cast to Int"))
455- }
456- if ((resAmount == resAmount))
457- then {
458- let treasuryContract = addressFromStringValue(value(getString(keyTreasuryContract(programName))))
459- let rewardAssetId = fromBase58String(value(getString(keyRewardAssetId(programName))))
460-[ScriptTransfer(treasuryContract, resAmount, rewardAssetId)]
459+ $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)
460+ }
461+ let resAmount = {
462+ let @ = invoke(this, "incUnclaimedWithPaymentInternal", [payments, programName, referrerAddresses, 0, 0], nil)
463+ if ($isInstanceOf(@, "Int"))
464+ then @
465+ else throw(($getType(@) + " couldn't be cast to Int"))
466+ }
467+ if ((resAmount == resAmount))
468+ then {
469+ let treasuryContract = addressFromStringValue(value(getString(keyTreasuryContract(programName))))
470+ let rewardAssetId = fromBase58String(value(getString(keyRewardAssetId(programName))))
471+[ScriptTransfer(treasuryContract, resAmount, rewardAssetId), IntegerEntry(keyLastIncUnclaimedWithPaymentCallBlock(callerAddress), height)]
472+ }
473+ else throw("Strict value is not equal to itself.")
461474 }
462475 else throw("Strict value is not equal to itself.")
463476 }
464477 else throw("Strict value is not equal to itself.")
465478 }
466479
467480
468481
469482 @Callable(i)
470483 func claim (programName) = {
471484 let checkProgramExists = if (valueOrElse(getBoolean(keyProgramName(programName)), false))
472485 then true
473486 else throwErr("program does not exist")
474487 if ((checkProgramExists == checkProgramExists))
475488 then {
476489 let isImplementationContract = (toString(i.caller) == value(getString(keyImplementationContract(programName))))
477490 let claimerAddress = if (isImplementationContract)
478491 then toString(i.originCaller)
479492 else toString(i.caller)
480493 let claimInternal = invoke(this, "claimInternal", [programName, claimerAddress, isImplementationContract], nil)
481494 if ((claimInternal == claimInternal))
482495 then $Tuple2(nil, claimInternal)
483496 else throw("Strict value is not equal to itself.")
484497 }
485498 else throw("Strict value is not equal to itself.")
486499 }
487500
488501
489502
490503 @Callable(i)
491504 func claimBulk () = {
492505 let callerAddress = toString(i.caller)
493506 let callerProgramsStr = getString(keyAllReferralPrograms(toString(i.caller)))
494507 let programsExists = if (isDefined(callerProgramsStr))
495508 then true
496509 else throwErr("no referral programs")
497510 if ((programsExists == programsExists))
498511 then {
499512 let callerPrograms = split(value(callerProgramsStr), "__")
500513 let bulkClaim = invoke(this, "claimBulkInternal", [callerAddress, callerPrograms, 0], nil)
501514 if ((bulkClaim == bulkClaim))
502515 then $Tuple2(nil, bulkClaim)
503516 else throw("Strict value is not equal to itself.")
504517 }
505518 else throw("Strict value is not equal to itself.")
506519 }
507520
508521
509522
510523 @Callable(i)
511524 func claimREADONLY (programName,userAddress) = {
512525 let claimerClaimed = valueOrElse(getInteger(keyClaimedReferrer(programName, userAddress)), 0)
513526 let claimerUnclaimed = valueOrElse(getInteger(keyUnclaimedReferrer(programName, userAddress)), 0)
514527 $Tuple2(nil, [claimerUnclaimed, claimerClaimed])
515528 }
516529
517530
518531
519532 @Callable(i)
520533 func claimBulkREADONLY (claimer) = {
521534 let claimedTotalAddress = valueOrElse(getInteger(keyClaimedTotalAddress(claimer)), 0)
522535 let unclaimedTotalAddress = valueOrElse(getInteger(keyUnclaimedTotalAddress(claimer)), 0)
523536 $Tuple2(nil, [unclaimedTotalAddress, claimedTotalAddress])
524537 }
525538
526539
527540
528541 @Callable(i)
529542 func setTotalKeys (programName,address) = {
530543 let claimedReferrer = valueOrElse(getInteger(keyClaimedReferrer(programName, address)), 0)
531544 let claimedReferral = valueOrElse(getInteger(keyClaimedReferral(programName, address)), 0)
532545 let unclaimedReferrer = valueOrElse(getInteger(keyUnclaimedReferrer(programName, address)), 0)
533546 let unclaimedReferral = valueOrElse(getInteger(keyUnclaimedReferral(programName, address)), 0)
534547 let claimedTotalAddress = (claimedReferrer + claimedReferral)
535548 let unclaimedTotalAddress = (unclaimedReferrer + unclaimedReferral)
536549 $Tuple2([IntegerEntry(keyClaimedTotalAddress(address), claimedTotalAddress), IntegerEntry(keyUnclaimedTotalAddress(address), unclaimedTotalAddress)], unit)
537550 }
538551
539552
540553
541554 @Callable(i)
542555 func setManager (pendingManagerPublicKey) = {
543556 let checkCaller = mustManager(i)
544557 if ((checkCaller == checkCaller))
545558 then {
546559 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
547560 if ((checkManagerPublicKey == checkManagerPublicKey))
548561 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
549562 else throw("Strict value is not equal to itself.")
550563 }
551564 else throw("Strict value is not equal to itself.")
552565 }
553566
554567
555568
556569 @Callable(i)
557570 func confirmManager () = {
558571 let pm = pendingManagerPublicKeyOrUnit()
559572 let hasPM = if (isDefined(pm))
560573 then true
561574 else throwErr("no pending manager")
562575 if ((hasPM == hasPM))
563576 then {
564577 let checkPM = if ((i.callerPublicKey == value(pm)))
565578 then true
566579 else throwErr("you are not pending manager")
567580 if ((checkPM == checkPM))
568581 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
569582 else throw("Strict value is not equal to itself.")
570583 }
571584 else throw("Strict value is not equal to itself.")
572585 }
573586
574587
575588 @Verifier(tx)
576589 func verify () = {
577590 let targetPublicKey = match managerPublicKeyOrUnit() {
578591 case pk: ByteVector =>
579592 pk
580593 case _: Unit =>
581594 tx.senderPublicKey
582595 case _ =>
583596 throw("Match error")
584597 }
585598 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
586599 }
587600

github/deemru/w8io/169f3d6 
78.47 ms