tx · 2gsfJvw2Yr4pAiGKVrJ3AgxeJnpYedFguD74Dsr4qdUY

3PGSWDgad4RtceQYXBpq2x73mXLRJYLRqRP:  -0.01000000 Waves

2023.03.23 05:59 [3567664] smart account 3PGSWDgad4RtceQYXBpq2x73mXLRJYLRqRP > SELF 0.00000000 Waves

{ "type": 13, "id": "2gsfJvw2Yr4pAiGKVrJ3AgxeJnpYedFguD74Dsr4qdUY", "fee": 1000000, "feeAssetId": null, "timestamp": 1679540484248, "version": 2, "chainId": 87, "sender": "3PGSWDgad4RtceQYXBpq2x73mXLRJYLRqRP", "senderPublicKey": "JAViVMdZcZXe48bAXR2yjiWQNFSLKNBUatCLK4HJYTkG", "proofs": [ "4R5QebwD1a7fqsJmT2kLD3f21NKNjXFV1sC4yLQ6T5GHjgt4vvaMgTMoQs6fdNaWTy35a8GnVbZSWbNTYxdd4hLb" ], "script": "base64:BgKMCwgCEgQKAggIEgQKAgQIEgMKAQQSCAoGCAgICAEIEggKBggICAgBCBIECgIICBIKCggICAgIAQEBARIDCgEIEgcKBQgIAQEEEgUKAwgIBBIDCgEIIg5nZXRTdHJpbmdCeUtleSIDa2V5Ig9nZXRJbnRlZ2VyQnlLZXkiBWNocmlzIg5kYXBwUnVubmluZ0tleSIRbWFpbnRlbmFuY2VNU0dLZXkiEndoaXRlbGlzdGVkb25seUtleSILZGFwcFJ1bm5pbmciDm1haW50ZW5hbmNlTVNHIg93aGl0ZWxpc3RlZG9ubHkiDXdoaXRlbGlzdERhcHAiCHNpZ25EYXBwIgt1c2VyQWxsb3dlZCIOdXNlclJlZ2lzdGVyZWQiDHVzZXJWZXJpZmllZCINdXNlclN1c3BlbmRlZCILdXNlclJlbW92ZWQiEnVzZXJDaGFuZ2VSZXF1aXJlZCIJdXNlclJlc2V0IgtrZXlVc2VyQWRkciIGY2FsbGVyIgtrZXlVc2VyTmFtZSILa2V5VXNlckRlc2MiDWtleVVzZXJTb2NpYWwiDGtleVVzZXJUaHVtYiINa2V5VXNlclN0YXR1cyIQa2V5VXNlclJveWFsdGllcyILa2V5VXNlckRhdGUiDGtleVVzZXJFUkMyMCILa2V5VXNlck5vdGUiDGtleVVzZXJMYWJlbCISa2V5QXJ0aXN0QWdlbnRBZGRyIgphcnRpc3RBZGRyIhJrZXlBZ2VudEFydGlzdEFkZHIiCWFnZW50QWRkciIUa2V5UHJpbWFyeVNoYXJlQWdlbnQiFmtleVNlY29uZGFyeVNoYXJlQWdlbnQiGGtleUFydGlzdFB1YmxpY0FnZW50QWRkciIYa2V5UHVibGljQWdlbnRBcnRpc3RBZGRyIhprZXlQcmltYXJ5U2hhcmVQdWJsaWNBZ2VudCIca2V5U2Vjb25kYXJ5U2hhcmVQdWJsaWNBZ2VudCIOY2hlY2tXaGl0ZWxpc3QiC3ZhbGlkYXRlQ0lEIgNjaWQiDXZhbGlkVXNlckRhdGEiBG5hbWUiC2Rlc2NyaXB0aW9uIgV0aHVtYiIKaXNBblVwZGF0ZSIIdmFsaWRDSUQiBnN0YXR1cyIRdmFsaWRhdGVOZXdTdGF0dXMiB2FkZHJlc3MiDWN1cnJlbnRTdGF0dXMiCWFsbFN0YXR1cyILc3RhdHVzVG9TZXQiEHVzZXJJc1JlZ2lzdGVyZWQiCG1ha2VKU09OIgRkYXRlIghhc1N0cmluZyICYnYiByRtYXRjaDAiA2J2MCIJZ2V0Q2FsbGVyIgFpIgZwdWJLZXkiC2lzU3BvbnNvcmVkIhNnZXRfc3BvbnNvcmVkX3dhdmVzIgZpbnZva2UiA3ZhbCIGaXNMaXZlIgdtZXNzYWdlIgZXTG9ubHkiBnNvY2lhbCIJcm95YWx0aWVzIgskdDA3OTE4Nzk3MCICaWQiCXRpbWVzdGFtcCIEbm90ZSIFbGFiZWwiBGpzb24iCnR4VG9DYWxsZXIiCyR0MDk2NTU5NzU5IgVlcmMyMCINJHQwMTA5NDYxMTA0OSIIZmlyc3RUd28iEXdsX2NlcnRpZmljYXRpb25zIgZ3bF90eHMiCHdsX2Ryb3BzIg53bF9jb21taXNzaW9ucyILY3VycmVudE5vdGUiDGN1cnJlbnRMYWJlbCIJbm90ZVRvVXNlIgpsYWJlbFRvVXNlIhNmcmVlX2NlcnRpZmljYXRpb25zIghmcmVlX3R4cyIKZnJlZV9kcm9wcyIQZnJlZV9jb21taXNzaW9ucyIMcHJpbWFyeVNoYXJlIg5zZWNvbmRhcnlTaGFyZSIJYXNQYXJ0bmVyIgVlbnRyeSICdHgiCHZlcmlmaWVyIgNpbnYsAQFhAQFiCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAWICAAEBYwEBYgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFiAAAAAWQJAQFhAQIMY29uZl9hZG1pbl8xAAFlAhRjb25mX2RhcHBfaXNfcnVubmluZwABZgIUY29uZl9tYWludGVuYW5jZV9tc2cAAWcCFWNvbmZfd2hpdGVsaXN0ZWRfb25seQABaAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQFlBgABaQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQFmAgAAAWoJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUBZwYAAWsJAQV2YWx1ZQEJAKYIAQkBAWEBAhNjb25mX3doaXRlbGlzdF9kYXBwAAFsCQEFdmFsdWUBCQCmCAEJAQFhAQIRY29uZl9zaWdud2ViX2RhcHAAAW0CB0FMTE9XRUQAAW4CClJFR0lTVEVSRUQAAW8CCFZFUklGSUVEAAFwAglTVVNQRU5ERUQAAXECB1JFTU9WRUQAAXICD0NIQU5HRV9SRVFVSVJFRAABcwIFUkVTRVQBAXQBAXUJAKwCAgIFdXNlcl8FAXUBAXYBAXUJAKwCAgIKdXNlcl9uYW1lXwUBdQEBdwEBdQkArAICAgp1c2VyX2Rlc2NfBQF1AQF4AQF1CQCsAgICDHVzZXJfc29jaWFsXwUBdQEBeQEBdQkArAICAgt1c2VyX3RodW1iXwUBdQEBegEBdQkArAICAgx1c2VyX3N0YXR1c18FAXUBAUEBAXUJAKwCAgIPdXNlcl9yb3lhbHRpZXNfBQF1AQFCAQF1CQCsAgICCnVzZXJfZGF0ZV8FAXUBAUMBAXUJAKwCAgILdXNlcl9FUkMyMF8FAXUBAUQBAXUJAKwCAgIKdXNlcl9ub3RlXwUBdQEBRQEBdQkArAICAgt1c2VyX2xhYmVsXwUBdQEBRgEBRwkArAICAg1hcnRpc3RfYWdlbnRfBQFHAQFIAgFJAUcJAKwCAgkArAICCQCsAgICBmFnZW50XwUBSQIBXwUBRwEBSgEBRwkArAICAhVhcnRpc3RfYWdlbnRfcHJpbWFyeV8FAUcBAUsBAUcJAKwCAgIXYXJ0aXN0X2FnZW50X3NlY29uZGFyeV8FAUcBAUwBAUcJAKwCAgIUYXJ0aXN0X3B1YmxpY19hZ2VudF8FAUcBAU0CAUkBRwkArAICCQCsAgIJAKwCAgINcHVibGljX2FnZW50XwUBSQIBXwUBRwEBTgEBRwkArAICAhxhcnRpc3RfcHVibGljX2FnZW50X3ByaW1hcnlfBQFHAQFPAQFHCQCsAgICHmFydGlzdF9wdWJsaWNfYWdlbnRfc2Vjb25kYXJ5XwUBRwEBUAEBYgkBC3ZhbHVlT3JFbHNlAgkAmggCBQFrBQFiAAABAVEBAVIDCQEIY29udGFpbnMCBQFSAgEvAwMJAGYCAEwJALECAQUBUgkAAAIJALECAQkAkQMCCQC1CQIFAVICAS8AAAA7BwkAZgIAEAkAsQIBCQCRAwIJALUJAgUBUgIBLwABBwcBAVMFAXUBVAFVAVYBVwQBWAMJAQIhPQIJALECAQUBVgAACQEBUQEFAVYGAwkBASEBBQFYCQACAQIcQ0lEIGRvbid0IG1hdGNoIHJlcXVpcmVtZW50IQMDCQAAAgUBVAIABgkAAAIFAVUCAAkAAgECJE5hbWUgYW5kIGRlc2NyaXB0aW9uIGNhbm5vdCBiZSBlbXB0eQMJAGYCCQCxAgEFAVUA2AQJAAIBAhk2MDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAwkAZgIJALECAQUBVAAtCQACAQIRNDUgQ2hhci4gbWF4IG5hbWUEAVkJAQFhAQkBAXoBBQF1AwMJAAACBQFZBQFwBgkAAAIFAVkFAXEJAAIBAhtBY2NvdW50IHN1c3BlbmRlZC8gcmVtb3ZlZC4DAwkBASEBBQFXCQAAAgUBWQUBbgcJAAIBAhJBbHJlYWR5IHJlZ2lzdGVyZWQDAwMJAQEhAQUBVwkAAAIFAVkCAAcFAWoHCQACAQIjQ2FuJ3QgcmVnaXN0ZXIsIGdldCBhcHByb3ZlZCBmaXJzdC4DAwMFAVcJAAACBQFZAgAHBgMFAVcJAAACBQFZBQFtBwkAAgECDlJlZ2lzdGVyIGZpcnN0BgEBWgMBWQJhYQJhYgQCYWMJAMwIAgUBbwkAzAgCBQFuCQDMCAIFAXAJAMwIAgUBcQkAzAgCBQFtCQDMCAIFAXIFA25pbAQCYWQDCQEPY29udGFpbnNFbGVtZW50AgUCYWMFAVkFAVkDAwkAAAIFAVkFAXMJAAACBQJhYgUBbQcCAAkAAgECDlVua25vd24gc3RhdHVzBAJhZQkBAWMBCQEBQgEFAmFhAwMJAAACBQJhZQAACQECIT0CBQJhZAUBbQcJAAIBAjFZb3UgY2FudCBzZXQgdGhpcyBzdGF0dXMsIHVzZXIgaXMgbm90IHJlZ2lzdGVyZWQuAwMJAAACBQJhYgUBbQkAAAIFAmFkBQFtBwkAAgECFFVzZXIgYWxyZWFkeSBhbGxvd2VkAwMJAAACBQJhYgUBbgkAAAIFAmFkBQFtBwkAAgECIVVzZXIgYWxyZWFkeSBhbGxvd2VkICYgcmVnaXN0ZXJlZAMDCQAAAgUCYWIFAW8JAAACBQJhZAUBbQcJAAIBAh9Vc2VyIGFscmVhZHkgYWxsb3dlZCAmIHZlcmlmaWVkBQJhZAECYWYDAVQBVgJhZwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPeyJ1c2VyX25hbWUiOiAiBQFUAhEiLCAidXNlcl90aHVtYiI6IgUBVgIPIiwidXNlcl9kYXRlIjoiBQJhZwICIn0BAmFoAQJhaQQCYWoFAmFpAwkAAQIFAmFqAgZTdHJpbmcEAmFrBQJhagUCYWsJAAIBAiRTcG9uc29yZWQgUHVibGljIEtleSBTdHJpbmcgZXhwZWN0ZWQBAmFsAgJhbQJhbgQCYW8DCQECIT0CBQJhbgIACQELdmFsdWVPckVsc2UCCQEBUAEJAKwCAgkApQgBCQCnCAEJANkEAQUCYW4CCV9mcmVlX3R4cwAAAAAEAXUDAwkAAAIJANgEAQgIBQJhbQZjYWxsZXIFYnl0ZXMJAKUIAQUEdGhpcwkAZgIFAmFvAAAHCQClCAEJAKcIAQkA2QQBBQJhbgkA2AQBCAgFAmFtBmNhbGxlcgVieXRlcwQCYXADAwkBAiE9AgUCYW4CAAkAZgIFAmFvAAAHCQD8BwQFAWsCCXVzZUZyZWVUeAkAzAgCCQClCAEJAKcIAQkA2QQBBQJhbgUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCYXAFAmFwCQCUCgIFAXUJAGYCBQJhbwAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCwJhcQEHc2V0Q29uZgIBYgJhcgQBdQkApQgBCAUCYXEGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUBZAkAzAgCCQClCAEFBHRoaXMFA25pbAUBdQkAzAgCCQELU3RyaW5nRW50cnkCBQFiBQJhcgUDbmlsCQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwJhcQEKYXBwUnVubmluZwICYXMCYXQEAXUJAKUIAQgFAmFxBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFAWQJAMwIAgkApQgBBQR0aGlzBQNuaWwFAXUJAMwIAgkBDEJvb2xlYW5FbnRyeQIFAWUFAmFzCQDMCAIJAQtTdHJpbmdFbnRyeQIFAWYFAmF0BQNuaWwJAAIBAiJZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGlzAmFxARByZWdpc3RyYXRpb25Nb2RlAQJhdQQBdQkApQgBCAUCYXEGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUBZAkAzAgCCQClCAEFBHRoaXMFA25pbAUBdQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUBZwUCYXUFA25pbAkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMCYXEBDHJlZ2lzdGVyVXNlcgYBVAFVAVYCYXYCYXcCYW4DCQEBIQEFAWgJAAIBBQFpBAJheAkBAmFsAgUCYXEFAmFuBAF1CAUCYXgCXzEEAmFvCAUCYXgCXzIEAmF5CQDYBAEIBQJhcQ10cmFuc2FjdGlvbklkBAJheggFCWxhc3RCbG9jawl0aW1lc3RhbXAEAmFBCQEBYQEJAQFEAQUBdQQCYUIJAQFhAQkBAUUBBQF1AwkBASEBCQEBUwUFAXUFAVQFAVUFAVYHCQACAQIUU29tZXRoaW5nIHdlbnQgd3JvbmcEAmFDCQECYWYDCQDaBAEJAJsDAQUBVAkA2gQBCQCbAwEFAVYJAKQDAQUCYXoDAwkAZgIAAAUCYXcGCQBmAgUCYXcA6AcJAAIBAjNSb3lhbHRpZXMgY2Fubm90IGJlIGxlc3MgdGhhbiAwJSBvciBoaWdoZXIgdGhhbiAxMCUEAmFEAwUCYW8JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAXUAAAUEdW5pdAUDbmlsBQNuaWwJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAUIBBQF1BQJhegkAzAgCCQELU3RyaW5nRW50cnkCCQEBdAEFAXUJAKwCAgkArAICBQJheQIBXwkApAMBBQJhegkAzAgCCQELU3RyaW5nRW50cnkCCQEBdgEFAXUFAVQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAXcBBQF1BQFVCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQF4AQUBdQUCYXYJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAXkBBQF1BQFWCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQF6AQUBdQUBbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAUEBBQF1BQJhdwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICCEFMTE9XRURfBQF1CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQFuAgFfBQF1BQJhQwkAzAgCCQELU3RyaW5nRW50cnkCCQEBRAEFAXUFAmFBCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFFAQUBdQUCYUIFA25pbAUCYUQCYXEBCnVwZGF0ZVVzZXIGAVQBVQFWAmF2AmF3AmFuAwkBASEBBQFoCQACAQUBaQQCYUUJAQJhbAIFAmFxBQJhbgQBdQgFAmFFAl8xBAJhbwgFAmFFAl8yBAFZCQEBYQEJAQF6AQUBdQMJAQEhAQkBAVMFBQF1BQFUBQFVBQFWBgkAAgECFFNvbWV0aGluZyB3ZW50IHdyb25nBAJhZwkBAWMBCQEBQgEFAXUEAmFDCQECYWYDCQDaBAEJAJsDAQUBVAkA2gQBCQCbAwEFAVYJAKQDAQUCYWcDAwkAZgIAAAUCYXcGCQBmAgUCYXcA6AcJAAIBAjNSb3lhbHRpZXMgY2Fubm90IGJlIGxlc3MgdGhhbiAwJSBvciBoaWdoZXIgdGhhbiAxMCUEAmFEAwUCYW8JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAXUAAAUEdW5pdAUDbmlsBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCCQEBdgEFAXUFAVQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAXcBBQF1BQFVCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQF4AQUBdQUCYXYJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAXkBBQF1BQFWCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBQQEFAXUFAmF3CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQFZAgFfBQF1BQJhQwUDbmlsBQJhRAJhcQEMc2V0RVJDMjBVc2VyAgJhRgJhbgMJAQEhAQUBaAkAAgEFAWkEAmFHCQECYWwCBQJhcQUCYW4EAXUIBQJhRwJfMQQCYW8IBQJhRwJfMgQBWQkBAWEBCQEBegEFAXUDAwkBAiE9AgUBWQUBbgkBAiE9AgUBWQUBbwcJAAIBAiBOb3QgYWxsb3dlZCB0byBzZXQgRVJDMjAgYWRkcmVzcwQCYUgJAK8CAgUCYUYAAgMDCQECIT0CBQJhSAICMHgGCQECIT0CCQCxAgEFAmFGACoJAAIBAhxUaGlzIGlzIG5vdCBhbiBlcmMyMCBhZGRyZXNzBAJhRAMFAmFvCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQF1AAAFBHVuaXQFA25pbAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAUMBBQF1BQJhRgUDbmlsBQJhRAJhcQEQY2hhbmdlVXNlclN0YXR1cwgCYWEBWQJhQQJhQgJhSQJhSgJhSwJhTAQBdQkApQgBCAUCYXEGY2FsbGVyAwkAAAIJALECAQUCYWEAAAkAAgECF0FkZHJlc3MgY2Fubm90IGJlIGVtcHR5BAJhTQkBAWEBCQEBRAEFAmFhBAJhTgkBAWEBCQEBRQEFAmFhBAJhTwMDCQECIT0CCQCxAgEFAmFBAAAJAQIhPQIFAmFBAgEuBwUCYUEDCQAAAgUCYUECAS4CAAUCYU0EAmFQAwMJAQIhPQIJALECAQUCYUIAAAkBAiE9AgUCYUICAS4HBQJhQgMJAAACBQJhQgIBLgIABQJhTgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFAWQJAMwIAgkApQgBBQR0aGlzBQNuaWwFAXUEAmFRAwkBAiE9AgUCYUkAAAkA/AcEBQFsAht3aGl0ZWxpc3RGcmVlQ2VydGlmaWNhdGlvbnMJAMwIAgUCYWEJAMwIAgUCYUkJAMwIAgYFA25pbAUDbmlsBQNuaWwDCQAAAgUCYVEFAmFRBAJhUgMJAQIhPQIFAmFKAAAJAPwHBAUBawIQd2hpdGVsaXN0RnJlZVR4cwkAzAgCBQJhYQkAzAgCBQJhSgkAzAgCBgUDbmlsBQNuaWwFA25pbAMJAAACBQJhUgUCYVIEAmFTAwkBAiE9AgUCYUsAAAkA/AcEBQFrAhF3aGl0ZWxpc3RGcmVlRHJvcAkAzAgCBQJhYQkAzAgCBQJhSwkAzAgCBgUDbmlsBQNuaWwFA25pbAMJAAACBQJhUwUCYVMEAmFUAwkBAiE9AgUCYUwAAAkA/AcEBQFrAgl3aGl0ZWxpc3QJAMwIAgUCYWEJAMwIAgUCYUwFA25pbAUDbmlsBQNuaWwDCQAAAgUCYVQFAmFUBAJhYgkBAWEBCQEBegEFAmFhAwkAAAIJALECAQUBWQAAAwkAAAIFAmFiAgAJAAIBAhdVc2VyIGhhdmUgbm8gc3RhdHVzIHlldAkAzAgCCQELU3RyaW5nRW50cnkCCQEBRAEFAmFhBQJhTwkAzAgCCQELU3RyaW5nRW50cnkCCQEBRQEFAmFhBQJhUAUDbmlsBAJhZAkBAVoDBQFZBQJhYQUCYWIEAVQJANoEAQkAmwMBCQEBYQEJAQF2AQUCYWEEAVYJANoEAQkAmwMBCQEBYQEJAQF5AQUCYWEEAmFnCQEBYwEJAQFCAQUCYWEEAmFDCQECYWYDBQFUBQFWCQCkAwEFAmFnCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQF6AQUCYWEFAmFkCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICBQJhYgIBXwUCYWEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFAmFkAgFfBQJhYQUCYUMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAUQBBQJhYQUCYU8JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAUUBBQJhYQUCYVAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECIU5vdCBhbGxvd2VkIHRvIGNoYW5nZSB1c2VyIHN0YXR1cwJhcQEKZGVsZXRlVXNlcgECYWEEAXUJAKUIAQgFAmFxBmNhbGxlcgQCYWIJAQFhAQkBAXoBBQJhYQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFAWQJAMwIAgkApQgBBQR0aGlzBQNuaWwFAXUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAUIBBQJhYQkAzAgCCQELRGVsZXRlRW50cnkBCQEBdAEFAmFhCQDMCAIJAQtEZWxldGVFbnRyeQEJAQF2AQUCYWEJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAXcBBQJhYQkAzAgCCQELRGVsZXRlRW50cnkBCQEBeAEFAmFhCQDMCAIJAQtEZWxldGVFbnRyeQEJAQF5AQUCYWEJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAgp1c2VyX25vdGVfBQJhYQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgUCYWICAV8FAmFhCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFBAQUCYWEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAXoBBQJhYQUBcQUDbmlsCQACAQILTm90IGFsbG93ZWQCYW0BCHNldEFnZW50BQFHAUkCYVUCYVYCYVcDCQEBIQEFAWgJAAIBBQFpBAF1CQClCAEIBQJhbQZjYWxsZXIDAwkAZgIAAAUCYVUGCQBmAgUCYVUAiCcJAAIBAjxQcmltYXJ5IGNvbW1pc3Npb24gY2Fubm90IGJlIGxlc3MgdGhhbiAwJSBvciBoaWdoZXIgdGhhbiA1MCUDAwkAZgIAAAUCYVYGCQBmAgUCYVYAiCcJAAIBAj5TZWNvbmRhcnkgY29tbWlzc2lvbiBjYW5ub3QgYmUgbGVzcyB0aGFuIDAlIG9yIGhpZ2hlciB0aGFuIDUwJQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFAWQJAMwIAgkApQgBBQR0aGlzBQNuaWwFAXUDAwkBAiE9AgkAsQIBBQFHACMGCQECIT0CCQCxAgEFAUkAIwkAAgECDVdyb25nIGFkZHJlc3MDBQJhVwkAzAgCCQELU3RyaW5nRW50cnkCCQEBRgEFAUcFAUkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAUgCBQFJBQFHBQFHCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBSgEFAUcFAmFVCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBSwEFAUcFAmFWBQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAUwBBQFHBQFJCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFNAgUBSQUBRwUBRwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAU4BBQFHBQJhVQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAU8BBQFHBQJhVgUDbmlsCQACAQITWW91IGFyZSBub3QgYWxsb3dlZAJhbQEKdW5zZXRBZ2VudAMBRwFJAmFXAwkBASEBBQFoCQACAQUBaQQBdQkApQgBCAUCYW0GY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUBZAkAzAgCCQClCAEFBHRoaXMFA25pbAUBdQMDCQECIT0CCQCxAgEFAUcAIwYJAQIhPQIJALECAQUBSQAjCQACAQINV3JvbmcgYWRkcmVzcwMFAmFXCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFGAQUBRwkAzAgCCQELRGVsZXRlRW50cnkBCQEBSAIFAUkFAUcJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAUoBBQFHCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFLAQUBRwUDbmlsCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFMAQUBRwkAzAgCCQELRGVsZXRlRW50cnkBCQEBTQIFAUkFAUcJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAU4BBQFHCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFPAQUBRwUDbmlsCQACAQITWW91IGFyZSBub3QgYWxsb3dlZAJhbQELZGVsZXRlRW50cnkBAmFYBAF1CQClCAEIBQJhbQZjYWxsZXIDCQAAAgUBdQUBZAkAzAgCCQELRGVsZXRlRW50cnkBBQJhWAUDbmlsCQACAQICbm8BAmFZAQJhWgAEAmFqBQJhWQMJAAECBQJhagIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EAmJhBQJhagMDAwMJAAACCAUCYmEIZnVuY3Rpb24CDHJlZ2lzdGVyVXNlcgkAAAIIBQJiYQRkQXBwBQR0aGlzBwkAAAIIBQJiYQNmZWUAoMIeBwkAAAIIBQJiYQpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCYVkJYm9keUJ5dGVzCQCRAwIIBQJhWQZwcm9vZnMAAAkA2QQBCQECYWgBCQCRAwIIBQJiYQRhcmdzAAUDAwMDCQAAAggFAmJhCGZ1bmN0aW9uAgp1cGRhdGVVc2VyCQAAAggFAmJhBGRBcHAFBHRoaXMHCQAAAggFAmJhA2ZlZQCgwh4HCQAAAggFAmJhCmZlZUFzc2V0SWQFBHVuaXQHCQD0AwMIBQJhWQlib2R5Qnl0ZXMJAJEDAggFAmFZBnByb29mcwAACQDZBAEJAQJhaAEJAJEDAggFAmJhBGFyZ3MABQMDAwMJAAACCAUCYmEIZnVuY3Rpb24CDHNldEVSQzIwVXNlcgkAAAIIBQJiYQRkQXBwBQR0aGlzBwkAAAIIBQJiYQNmZWUAoMIeBwkAAAIIBQJiYQpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCYVkJYm9keUJ5dGVzCQCRAwIIBQJhWQZwcm9vZnMAAAkA2QQBCQECYWgBCQCRAwIIBQJiYQRhcmdzAAEJAPQDAwgFAmFZCWJvZHlCeXRlcwkAkQMCCAUCYVkGcHJvb2ZzAAAIBQJhWQ9zZW5kZXJQdWJsaWNLZXkJAPQDAwgFAmFZCWJvZHlCeXRlcwkAkQMCCAUCYVkGcHJvb2ZzAAAIBQJhWQ9zZW5kZXJQdWJsaWNLZXn9UL/W", "height": 3567664, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AvoxzFnpABVPLP2RvP9vKJPcFJgdZQ3aqP6Lph64u2NP Next: none Diff:
OldNewDifferences
491491 else false)
492492 then (inv.feeAssetId == unit)
493493 else false)
494- then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[2])))
494+ then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[1])))
495495 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
496496 case _ =>
497497 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringByKey (key) = valueOrElse(getString(this, key), "")
55
66
77 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
88
99
1010 let chris = getStringByKey("conf_admin_1")
1111
1212 let dappRunningKey = "conf_dapp_is_running"
1313
1414 let maintenanceMSGKey = "conf_maintenance_msg"
1515
1616 let whitelistedonlyKey = "conf_whitelisted_only"
1717
1818 let dappRunning = valueOrElse(getBoolean(this, dappRunningKey), true)
1919
2020 let maintenanceMSG = valueOrElse(getString(this, maintenanceMSGKey), "")
2121
2222 let whitelistedonly = valueOrElse(getBoolean(this, whitelistedonlyKey), true)
2323
2424 let whitelistDapp = value(addressFromString(getStringByKey("conf_whitelist_dapp")))
2525
2626 let signDapp = value(addressFromString(getStringByKey("conf_signweb_dapp")))
2727
2828 let userAllowed = "ALLOWED"
2929
3030 let userRegistered = "REGISTERED"
3131
3232 let userVerified = "VERIFIED"
3333
3434 let userSuspended = "SUSPENDED"
3535
3636 let userRemoved = "REMOVED"
3737
3838 let userChangeRequired = "CHANGE_REQUIRED"
3939
4040 let userReset = "RESET"
4141
4242 func keyUserAddr (caller) = ("user_" + caller)
4343
4444
4545 func keyUserName (caller) = ("user_name_" + caller)
4646
4747
4848 func keyUserDesc (caller) = ("user_desc_" + caller)
4949
5050
5151 func keyUserSocial (caller) = ("user_social_" + caller)
5252
5353
5454 func keyUserThumb (caller) = ("user_thumb_" + caller)
5555
5656
5757 func keyUserStatus (caller) = ("user_status_" + caller)
5858
5959
6060 func keyUserRoyalties (caller) = ("user_royalties_" + caller)
6161
6262
6363 func keyUserDate (caller) = ("user_date_" + caller)
6464
6565
6666 func keyUserERC20 (caller) = ("user_ERC20_" + caller)
6767
6868
6969 func keyUserNote (caller) = ("user_note_" + caller)
7070
7171
7272 func keyUserLabel (caller) = ("user_label_" + caller)
7373
7474
7575 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
7676
7777
7878 func keyAgentArtistAddr (agentAddr,artistAddr) = ((("agent_" + agentAddr) + "_") + artistAddr)
7979
8080
8181 func keyPrimaryShareAgent (artistAddr) = ("artist_agent_primary_" + artistAddr)
8282
8383
8484 func keySecondaryShareAgent (artistAddr) = ("artist_agent_secondary_" + artistAddr)
8585
8686
8787 func keyArtistPublicAgentAddr (artistAddr) = ("artist_public_agent_" + artistAddr)
8888
8989
9090 func keyPublicAgentArtistAddr (agentAddr,artistAddr) = ((("public_agent_" + agentAddr) + "_") + artistAddr)
9191
9292
9393 func keyPrimarySharePublicAgent (artistAddr) = ("artist_public_agent_primary_" + artistAddr)
9494
9595
9696 func keySecondarySharePublicAgent (artistAddr) = ("artist_public_agent_secondary_" + artistAddr)
9797
9898
9999 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
100100
101101
102102 func validateCID (cid) = if (contains(cid, "/"))
103103 then if (if ((76 > size(cid)))
104104 then (size(split(cid, "/")[0]) == 59)
105105 else false)
106106 then (16 > size(split(cid, "/")[1]))
107107 else false
108108 else false
109109
110110
111111 func validUserData (caller,name,description,thumb,isAnUpdate) = {
112112 let validCID = if ((size(thumb) != 0))
113113 then validateCID(thumb)
114114 else true
115115 if (!(validCID))
116116 then throw("CID don't match requirement!")
117117 else if (if ((name == ""))
118118 then true
119119 else (description == ""))
120120 then throw("Name and description cannot be empty")
121121 else if ((size(description) > 600))
122122 then throw("600 Char. max description")
123123 else if ((size(name) > 45))
124124 then throw("45 Char. max name")
125125 else {
126126 let status = getStringByKey(keyUserStatus(caller))
127127 if (if ((status == userSuspended))
128128 then true
129129 else (status == userRemoved))
130130 then throw("Account suspended/ removed.")
131131 else if (if (!(isAnUpdate))
132132 then (status == userRegistered)
133133 else false)
134134 then throw("Already registered")
135135 else if (if (if (!(isAnUpdate))
136136 then (status == "")
137137 else false)
138138 then whitelistedonly
139139 else false)
140140 then throw("Can't register, get approved first.")
141141 else if (if (if (isAnUpdate)
142142 then (status == "")
143143 else false)
144144 then true
145145 else if (isAnUpdate)
146146 then (status == userAllowed)
147147 else false)
148148 then throw("Register first")
149149 else true
150150 }
151151 }
152152
153153
154154 func validateNewStatus (status,address,currentStatus) = {
155155 let allStatus = [userVerified, userRegistered, userSuspended, userRemoved, userAllowed, userChangeRequired]
156156 let statusToSet = if (containsElement(allStatus, status))
157157 then status
158158 else if (if ((status == userReset))
159159 then (currentStatus == userAllowed)
160160 else false)
161161 then ""
162162 else throw("Unknown status")
163163 let userIsRegistered = getIntegerByKey(keyUserDate(address))
164164 if (if ((userIsRegistered == 0))
165165 then (statusToSet != userAllowed)
166166 else false)
167167 then throw("You cant set this status, user is not registered.")
168168 else if (if ((currentStatus == userAllowed))
169169 then (statusToSet == userAllowed)
170170 else false)
171171 then throw("User already allowed")
172172 else if (if ((currentStatus == userRegistered))
173173 then (statusToSet == userAllowed)
174174 else false)
175175 then throw("User already allowed & registered")
176176 else if (if ((currentStatus == userVerified))
177177 then (statusToSet == userAllowed)
178178 else false)
179179 then throw("User already allowed & verified")
180180 else statusToSet
181181 }
182182
183183
184184 func makeJSON (name,thumb,date) = (((((("{\"user_name\": \"" + name) + "\", \"user_thumb\":\"") + thumb) + "\",\"user_date\":\"") + date) + "\"}")
185185
186186
187187 func asString (bv) = match bv {
188188 case bv0: String =>
189189 bv0
190190 case _ =>
191191 throw("Sponsored Public Key String expected")
192192 }
193193
194194
195195 func getCaller (i,pubKey) = {
196196 let isSponsored = if ((pubKey != ""))
197197 then valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
198198 else 0
199199 let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
200200 then (isSponsored > 0)
201201 else false)
202202 then toString(addressFromPublicKey(fromBase58String(pubKey)))
203203 else toBase58String(i.caller.bytes)
204204 let get_sponsored_waves = if (if ((pubKey != ""))
205205 then (isSponsored > 0)
206206 else false)
207207 then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
208208 else unit
209209 if ((get_sponsored_waves == get_sponsored_waves))
210210 then $Tuple2(caller, (isSponsored > 0))
211211 else throw("Strict value is not equal to itself.")
212212 }
213213
214214
215215 @Callable(invoke)
216216 func setConf (key,val) = {
217217 let caller = toString(invoke.caller)
218218 if (containsElement([chris, toString(this)], caller))
219219 then [StringEntry(key, val)]
220220 else throw("You are not allowed to change this")
221221 }
222222
223223
224224
225225 @Callable(invoke)
226226 func appRunning (isLive,message) = {
227227 let caller = toString(invoke.caller)
228228 if (containsElement([chris, toString(this)], caller))
229229 then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
230230 else throw("You are not allowed to change this")
231231 }
232232
233233
234234
235235 @Callable(invoke)
236236 func registrationMode (WLonly) = {
237237 let caller = toString(invoke.caller)
238238 if (containsElement([chris, toString(this)], caller))
239239 then [BooleanEntry(whitelistedonlyKey, WLonly)]
240240 else throw("You are not allowed to change this")
241241 }
242242
243243
244244
245245 @Callable(invoke)
246246 func registerUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
247247 then throw(maintenanceMSG)
248248 else {
249249 let $t079187970 = getCaller(invoke, pubKey)
250250 let caller = $t079187970._1
251251 let isSponsored = $t079187970._2
252252 let id = toBase58String(invoke.transactionId)
253253 let timestamp = lastBlock.timestamp
254254 let note = getStringByKey(keyUserNote(caller))
255255 let label = getStringByKey(keyUserLabel(caller))
256256 if (!(validUserData(caller, name, description, thumb, false)))
257257 then throw("Something went wrong")
258258 else {
259259 let json = makeJSON(toBase64String(toBytes(name)), toBase64String(toBytes(thumb)), toString(timestamp))
260260 if (if ((0 > royalties))
261261 then true
262262 else (royalties > 1000))
263263 then throw("Royalties cannot be less than 0% or higher than 10%")
264264 else {
265265 let txToCaller = if (isSponsored)
266266 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
267267 else nil
268268 ([IntegerEntry(keyUserDate(caller), timestamp), StringEntry(keyUserAddr(caller), ((id + "_") + toString(timestamp))), StringEntry(keyUserName(caller), name), StringEntry(keyUserDesc(caller), description), StringEntry(keyUserSocial(caller), social), StringEntry(keyUserThumb(caller), thumb), StringEntry(keyUserStatus(caller), userRegistered), IntegerEntry(keyUserRoyalties(caller), royalties), DeleteEntry(("ALLOWED_" + caller)), StringEntry(((userRegistered + "_") + caller), json), StringEntry(keyUserNote(caller), note), StringEntry(keyUserLabel(caller), label)] ++ txToCaller)
269269 }
270270 }
271271 }
272272
273273
274274
275275 @Callable(invoke)
276276 func updateUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
277277 then throw(maintenanceMSG)
278278 else {
279279 let $t096559759 = getCaller(invoke, pubKey)
280280 let caller = $t096559759._1
281281 let isSponsored = $t096559759._2
282282 let status = getStringByKey(keyUserStatus(caller))
283283 if (!(validUserData(caller, name, description, thumb, true)))
284284 then throw("Something went wrong")
285285 else {
286286 let date = getIntegerByKey(keyUserDate(caller))
287287 let json = makeJSON(toBase64String(toBytes(name)), toBase64String(toBytes(thumb)), toString(date))
288288 if (if ((0 > royalties))
289289 then true
290290 else (royalties > 1000))
291291 then throw("Royalties cannot be less than 0% or higher than 10%")
292292 else {
293293 let txToCaller = if (isSponsored)
294294 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
295295 else nil
296296 ([StringEntry(keyUserName(caller), name), StringEntry(keyUserDesc(caller), description), StringEntry(keyUserSocial(caller), social), StringEntry(keyUserThumb(caller), thumb), IntegerEntry(keyUserRoyalties(caller), royalties), StringEntry(((status + "_") + caller), json)] ++ txToCaller)
297297 }
298298 }
299299 }
300300
301301
302302
303303 @Callable(invoke)
304304 func setERC20User (erc20,pubKey) = if (!(dappRunning))
305305 then throw(maintenanceMSG)
306306 else {
307307 let $t01094611049 = getCaller(invoke, pubKey)
308308 let caller = $t01094611049._1
309309 let isSponsored = $t01094611049._2
310310 let status = getStringByKey(keyUserStatus(caller))
311311 if (if ((status != userRegistered))
312312 then (status != userVerified)
313313 else false)
314314 then throw("Not allowed to set ERC20 address")
315315 else {
316316 let firstTwo = take(erc20, 2)
317317 if (if ((firstTwo != "0x"))
318318 then true
319319 else (size(erc20) != 42))
320320 then throw("This is not an erc20 address")
321321 else {
322322 let txToCaller = if (isSponsored)
323323 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
324324 else nil
325325 ([StringEntry(keyUserERC20(caller), erc20)] ++ txToCaller)
326326 }
327327 }
328328 }
329329
330330
331331
332332 @Callable(invoke)
333333 func changeUserStatus (address,status,note,label,wl_certifications,wl_txs,wl_drops,wl_commissions) = {
334334 let caller = toString(invoke.caller)
335335 if ((size(address) == 0))
336336 then throw("Address cannot be empty")
337337 else {
338338 let currentNote = getStringByKey(keyUserNote(address))
339339 let currentLabel = getStringByKey(keyUserLabel(address))
340340 let noteToUse = if (if ((size(note) != 0))
341341 then (note != ".")
342342 else false)
343343 then note
344344 else if ((note == "."))
345345 then ""
346346 else currentNote
347347 let labelToUse = if (if ((size(label) != 0))
348348 then (label != ".")
349349 else false)
350350 then label
351351 else if ((label == "."))
352352 then ""
353353 else currentLabel
354354 if (containsElement([chris, toString(this)], caller))
355355 then {
356356 let free_certifications = if ((wl_certifications != 0))
357357 then invoke(signDapp, "whitelistFreeCertifications", [address, wl_certifications, true], nil)
358358 else nil
359359 if ((free_certifications == free_certifications))
360360 then {
361361 let free_txs = if ((wl_txs != 0))
362362 then invoke(whitelistDapp, "whitelistFreeTxs", [address, wl_txs, true], nil)
363363 else nil
364364 if ((free_txs == free_txs))
365365 then {
366366 let free_drops = if ((wl_drops != 0))
367367 then invoke(whitelistDapp, "whitelistFreeDrop", [address, wl_drops, true], nil)
368368 else nil
369369 if ((free_drops == free_drops))
370370 then {
371371 let free_commissions = if ((wl_commissions != 0))
372372 then invoke(whitelistDapp, "whitelist", [address, wl_commissions], nil)
373373 else nil
374374 if ((free_commissions == free_commissions))
375375 then {
376376 let currentStatus = getStringByKey(keyUserStatus(address))
377377 if ((size(status) == 0))
378378 then if ((currentStatus == ""))
379379 then throw("User have no status yet")
380380 else [StringEntry(keyUserNote(address), noteToUse), StringEntry(keyUserLabel(address), labelToUse)]
381381 else {
382382 let statusToSet = validateNewStatus(status, address, currentStatus)
383383 let name = toBase64String(toBytes(getStringByKey(keyUserName(address))))
384384 let thumb = toBase64String(toBytes(getStringByKey(keyUserThumb(address))))
385385 let date = getIntegerByKey(keyUserDate(address))
386386 let json = makeJSON(name, thumb, toString(date))
387387 [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), json), StringEntry(keyUserNote(address), noteToUse), StringEntry(keyUserLabel(address), labelToUse)]
388388 }
389389 }
390390 else throw("Strict value is not equal to itself.")
391391 }
392392 else throw("Strict value is not equal to itself.")
393393 }
394394 else throw("Strict value is not equal to itself.")
395395 }
396396 else throw("Strict value is not equal to itself.")
397397 }
398398 else throw("Not allowed to change user status")
399399 }
400400 }
401401
402402
403403
404404 @Callable(invoke)
405405 func deleteUser (address) = {
406406 let caller = toString(invoke.caller)
407407 let currentStatus = getStringByKey(keyUserStatus(address))
408408 if (containsElement([chris, toString(this)], caller))
409409 then [DeleteEntry(keyUserDate(address)), DeleteEntry(keyUserAddr(address)), DeleteEntry(keyUserName(address)), DeleteEntry(keyUserDesc(address)), DeleteEntry(keyUserSocial(address)), DeleteEntry(keyUserThumb(address)), DeleteEntry(("user_note_" + address)), DeleteEntry(((currentStatus + "_") + address)), DeleteEntry(keyUserRoyalties(address)), StringEntry(keyUserStatus(address), userRemoved)]
410410 else throw("Not allowed")
411411 }
412412
413413
414414
415415 @Callable(i)
416416 func setAgent (artistAddr,agentAddr,primaryShare,secondaryShare,asPartner) = if (!(dappRunning))
417417 then throw(maintenanceMSG)
418418 else {
419419 let caller = toString(i.caller)
420420 if (if ((0 > primaryShare))
421421 then true
422422 else (primaryShare > 5000))
423423 then throw("Primary commission cannot be less than 0% or higher than 50%")
424424 else if (if ((0 > secondaryShare))
425425 then true
426426 else (secondaryShare > 5000))
427427 then throw("Secondary commission cannot be less than 0% or higher than 50%")
428428 else if (containsElement([chris, toString(this)], caller))
429429 then if (if ((size(artistAddr) != 35))
430430 then true
431431 else (size(agentAddr) != 35))
432432 then throw("Wrong address")
433433 else if (asPartner)
434434 then [StringEntry(keyArtistAgentAddr(artistAddr), agentAddr), StringEntry(keyAgentArtistAddr(agentAddr, artistAddr), artistAddr), IntegerEntry(keyPrimaryShareAgent(artistAddr), primaryShare), IntegerEntry(keySecondaryShareAgent(artistAddr), secondaryShare)]
435435 else [StringEntry(keyArtistPublicAgentAddr(artistAddr), agentAddr), StringEntry(keyPublicAgentArtistAddr(agentAddr, artistAddr), artistAddr), IntegerEntry(keyPrimarySharePublicAgent(artistAddr), primaryShare), IntegerEntry(keySecondarySharePublicAgent(artistAddr), secondaryShare)]
436436 else throw("You are not allowed")
437437 }
438438
439439
440440
441441 @Callable(i)
442442 func unsetAgent (artistAddr,agentAddr,asPartner) = if (!(dappRunning))
443443 then throw(maintenanceMSG)
444444 else {
445445 let caller = toString(i.caller)
446446 if (containsElement([chris, toString(this)], caller))
447447 then if (if ((size(artistAddr) != 35))
448448 then true
449449 else (size(agentAddr) != 35))
450450 then throw("Wrong address")
451451 else if (asPartner)
452452 then [DeleteEntry(keyArtistAgentAddr(artistAddr)), DeleteEntry(keyAgentArtistAddr(agentAddr, artistAddr)), DeleteEntry(keyPrimaryShareAgent(artistAddr)), DeleteEntry(keySecondaryShareAgent(artistAddr))]
453453 else [DeleteEntry(keyArtistPublicAgentAddr(artistAddr)), DeleteEntry(keyPublicAgentArtistAddr(agentAddr, artistAddr)), DeleteEntry(keyPrimarySharePublicAgent(artistAddr)), DeleteEntry(keySecondarySharePublicAgent(artistAddr))]
454454 else throw("You are not allowed")
455455 }
456456
457457
458458
459459 @Callable(i)
460460 func deleteEntry (entry) = {
461461 let caller = toString(i.caller)
462462 if ((caller == chris))
463463 then [DeleteEntry(entry)]
464464 else throw("no")
465465 }
466466
467467
468468 @Verifier(tx)
469469 func verifier () = match tx {
470470 case inv: InvokeScriptTransaction =>
471471 if (if (if (if ((inv.function == "registerUser"))
472472 then (inv.dApp == this)
473473 else false)
474474 then (inv.fee == 500000)
475475 else false)
476476 then (inv.feeAssetId == unit)
477477 else false)
478478 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
479479 else if (if (if (if ((inv.function == "updateUser"))
480480 then (inv.dApp == this)
481481 else false)
482482 then (inv.fee == 500000)
483483 else false)
484484 then (inv.feeAssetId == unit)
485485 else false)
486486 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
487487 else if (if (if (if ((inv.function == "setERC20User"))
488488 then (inv.dApp == this)
489489 else false)
490490 then (inv.fee == 500000)
491491 else false)
492492 then (inv.feeAssetId == unit)
493493 else false)
494- then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[2])))
494+ then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[1])))
495495 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
496496 case _ =>
497497 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
498498 }
499499

github/deemru/w8io/3ef1775 
64.79 ms