tx · FovBzKBFKTVQNiNvfU5UHKtzu5NHjHas312M1KJVKmEa

3NAsFvuLwxz1iUtZ9fmhfmSN16r9NEsPqsh:  -0.01800000 Waves

2022.10.20 11:14 [2280469] smart account 3NAsFvuLwxz1iUtZ9fmhfmSN16r9NEsPqsh > SELF 0.00000000 Waves

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

github/deemru/w8io/169f3d6 
85.45 ms