tx · 9coC7PKpTkXWApoTZJZG5etZnBGWWCgJD87aHaQcNAc5

3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj:  -0.01100000 Waves

2023.01.20 08:50 [2412873] smart account 3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj > SELF 0.00000000 Waves

{ "type": 13, "id": "9coC7PKpTkXWApoTZJZG5etZnBGWWCgJD87aHaQcNAc5", "fee": 1100000, "feeAssetId": null, "timestamp": 1674193912999, "version": 2, "chainId": 84, "sender": "3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj", "senderPublicKey": "A2m227AHcq7gWfSU59Q3UJaqkEa7SccFYmJuWHbFrrKE", "proofs": [ "yvXrwpPZKTumgRuLFqk742i6ha57LqZHk7QeqYiix9drB9m7eRzXpiuuzuxnAqUCCKw3Nk4rNVzgH8Uu8kG4FTV" ], "script": "base64:BgJMCAISBAoCCAgSBAoCBAgSAwoBBBIICgYICAgIAQgSCAoGCAgICAEIEgQKAggIEgUKAwgICBIDCgEIEgYKBAgIAQESBAoCCAgSAwoBCCgAB1ZFUlNJT04CAzEuNQEOZ2V0U3RyaW5nQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkCAAEPZ2V0Qm9vbGVhbkJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUDa2V5BwEPZ2V0SW50ZWdlckJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAAABWNocmlzCQEOZ2V0U3RyaW5nQnlLZXkBAgxjb25mX2FkbWluXzEADmRhcHBSdW5uaW5nS2V5AhRjb25mX2RhcHBfaXNfcnVubmluZwARbWFpbnRlbmFuY2VNU0dLZXkCFGNvbmZfbWFpbnRlbmFuY2VfbXNnABJ3aGl0ZWxpc3RlZG9ubHlLZXkCFWNvbmZfd2hpdGVsaXN0ZWRfb25seQALZGFwcFJ1bm5pbmcJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUOZGFwcFJ1bm5pbmdLZXkGAA5tYWludGVuYW5jZU1TRwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBRFtYWludGVuYW5jZU1TR0tleQIAAA93aGl0ZWxpc3RlZG9ubHkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUSd2hpdGVsaXN0ZWRvbmx5S2V5BgANd2hpdGVsaXN0RGFwcAkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAhNjb25mX3doaXRlbGlzdF9kYXBwAAt1c2VyQWxsb3dlZAIHQUxMT1dFRAAOdXNlclJlZ2lzdGVyZWQCClJFR0lTVEVSRUQADHVzZXJWZXJpZmllZAIIVkVSSUZJRUQADXVzZXJTdXNwZW5kZWQCCVNVU1BFTkRFRAALdXNlclJlbW92ZWQCB1JFTU9WRUQAEnVzZXJDaGFuZ2VSZXF1aXJlZAIPQ0hBTkdFX1JFUVVJUkVEABB1c2VyVW5yZWdpc3RlcmVkAgxVTlJFR0lTVEVSRUQACXVzZXJSZXNldAIFUkVTRVQBC2tleVVzZXJBZGRyAQZjYWxsZXIJAKwCAgIFdXNlcl8FBmNhbGxlcgELa2V5VXNlck5hbWUBBmNhbGxlcgkArAICAgp1c2VyX25hbWVfBQZjYWxsZXIBC2tleVVzZXJEZXNjAQZjYWxsZXIJAKwCAgIKdXNlcl9kZXNjXwUGY2FsbGVyAQ1rZXlVc2VyU29jaWFsAQZjYWxsZXIJAKwCAgIMdXNlcl9zb2NpYWxfBQZjYWxsZXIBDGtleVVzZXJUaHVtYgEGY2FsbGVyCQCsAgICC3VzZXJfdGh1bWJfBQZjYWxsZXIBDWtleVVzZXJTdGF0dXMBBmNhbGxlcgkArAICAgx1c2VyX3N0YXR1c18FBmNhbGxlcgEQa2V5VXNlclJveWFsdGllcwEGY2FsbGVyCQCsAgICD3VzZXJfcm95YWx0aWVzXwUGY2FsbGVyAQtrZXlVc2VyRGF0ZQEGY2FsbGVyCQCsAgICCnVzZXJfZGF0ZV8FBmNhbGxlcgEMa2V5VXNlckVSQzIwAQZjYWxsZXIJAKwCAgILdXNlcl9FUkMyMF8FBmNhbGxlcgESa2V5QXJ0aXN0QWdlbnRBZGRyAQphcnRpc3RBZGRyCQCsAgICDWFydGlzdF9hZ2VudF8FCmFydGlzdEFkZHIBEmtleUFnZW50QXJ0aXN0QWRkcgIJYWdlbnRBZGRyCmFydGlzdEFkZHIJAKwCAgkArAICCQCsAgICBmFnZW50XwUJYWdlbnRBZGRyAgFfBQphcnRpc3RBZGRyAQ9rZXlQcmltYXJ5U2hhcmUBCmFydGlzdEFkZHIJAKwCAgIVYXJ0aXN0X2FnZW50X3ByaW1hcnlfBQphcnRpc3RBZGRyARFrZXlTZWNvbmRhcnlTaGFyZQEKYXJ0aXN0QWRkcgkArAICAhdhcnRpc3RfYWdlbnRfc2Vjb25kYXJ5XwUKYXJ0aXN0QWRkcgEOY2hlY2tXaGl0ZWxpc3QBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQ13aGl0ZWxpc3REYXBwBQNrZXkAAAELdmFsaWRhdGVDSUQBA2NpZAMJAQhjb250YWlucwIFA2NpZAIBLwMDCQBmAgBMCQCxAgEFA2NpZAkAAAIJALECAQkAkQMCCQC1CQIFA2NpZAIBLwAAADsHCQBmAgAQCQCxAgEJAJEDAgkAtQkCBQNjaWQCAS8AAQcHAQ12YWxpZFVzZXJEYXRhBQZjYWxsZXIEbmFtZQtkZXNjcmlwdGlvbgV0aHVtYgppc0FuVXBkYXRlBAh2YWxpZENJRAMJAQIhPQIJALECAQUFdGh1bWIAAAkBC3ZhbGlkYXRlQ0lEAQUFdGh1bWIGAwkBASEBBQh2YWxpZENJRAkAAgECHENJRCBkb24ndCBtYXRjaCByZXF1aXJlbWVudCEDAwkAAAIFBG5hbWUCAAYJAAACBQtkZXNjcmlwdGlvbgIACQACAQIkTmFtZSBhbmQgZGVzY3JpcHRpb24gY2Fubm90IGJlIGVtcHR5AwkAZgIJALECAQULZGVzY3JpcHRpb24A2AQJAAIBAhk2MDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAwkAZgIJALECAQUEbmFtZQAtCQACAQIRNDUgQ2hhci4gbWF4IG5hbWUEBnN0YXR1cwkBDmdldFN0cmluZ0J5S2V5AQkBDWtleVVzZXJTdGF0dXMBBQZjYWxsZXIDAwkAAAIFBnN0YXR1cwUNdXNlclN1c3BlbmRlZAYJAAACBQZzdGF0dXMFC3VzZXJSZW1vdmVkCQACAQIbQWNjb3VudCBzdXNwZW5kZWQvIHJlbW92ZWQuAwMJAQEhAQUKaXNBblVwZGF0ZQkAAAIFBnN0YXR1cwUOdXNlclJlZ2lzdGVyZWQHCQACAQISQWxyZWFkeSByZWdpc3RlcmVkAwMDCQEBIQEFCmlzQW5VcGRhdGUJAAACBQZzdGF0dXMCAAcFD3doaXRlbGlzdGVkb25seQcJAAIBAiNDYW4ndCByZWdpc3RlciwgZ2V0IGFwcHJvdmVkIGZpcnN0LgMDAwUKaXNBblVwZGF0ZQkAAAIFBnN0YXR1cwIABwYDBQppc0FuVXBkYXRlCQAAAgUGc3RhdHVzBQt1c2VyQWxsb3dlZAcJAAIBAg5SZWdpc3RlciBmaXJzdAYBEXZhbGlkYXRlTmV3U3RhdHVzAwZzdGF0dXMHYWRkcmVzcw1jdXJyZW50U3RhdHVzBAlhbGxTdGF0dXMJAMwIAgUMdXNlclZlcmlmaWVkCQDMCAIFDnVzZXJSZWdpc3RlcmVkCQDMCAIFDXVzZXJTdXNwZW5kZWQJAMwIAgULdXNlclJlbW92ZWQJAMwIAgULdXNlckFsbG93ZWQJAMwIAgUSdXNlckNoYW5nZVJlcXVpcmVkBQNuaWwEC3N0YXR1c1RvU2V0AwkBD2NvbnRhaW5zRWxlbWVudAIFCWFsbFN0YXR1cwUGc3RhdHVzBQZzdGF0dXMDAwkAAAIFBnN0YXR1cwUJdXNlclJlc2V0CQAAAgUNY3VycmVudFN0YXR1cwULdXNlckFsbG93ZWQHAgAJAAIBAg5Vbmtub3duIHN0YXR1cwQQdXNlcklzUmVnaXN0ZXJlZAkBD2dldEludGVnZXJCeUtleQEJAQtrZXlVc2VyRGF0ZQEFB2FkZHJlc3MDAwkAAAIFEHVzZXJJc1JlZ2lzdGVyZWQAAAkBAiE9AgULc3RhdHVzVG9TZXQFC3VzZXJBbGxvd2VkBwkAAgECMVlvdSBjYW50IHNldCB0aGlzIHN0YXR1cywgdXNlciBpcyBub3QgcmVnaXN0ZXJlZC4DAwkAAAIFDWN1cnJlbnRTdGF0dXMFC3VzZXJBbGxvd2VkCQAAAgULc3RhdHVzVG9TZXQFC3VzZXJBbGxvd2VkBwkAAgECFFVzZXIgYWxyZWFkeSBhbGxvd2VkAwMJAAACBQ1jdXJyZW50U3RhdHVzBQ51c2VyUmVnaXN0ZXJlZAkAAAIFC3N0YXR1c1RvU2V0BQt1c2VyQWxsb3dlZAcJAAIBAiFVc2VyIGFscmVhZHkgYWxsb3dlZCAmIHJlZ2lzdGVyZWQDAwkAAAIFDWN1cnJlbnRTdGF0dXMFDHVzZXJWZXJpZmllZAkAAAIFC3N0YXR1c1RvU2V0BQt1c2VyQWxsb3dlZAcJAAIBAh9Vc2VyIGFscmVhZHkgYWxsb3dlZCAmIHZlcmlmaWVkBQtzdGF0dXNUb1NldAEIbWFrZUpTT04DBG5hbWUFdGh1bWIEZGF0ZQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPeyJ1c2VyX25hbWUiOiAiBQRuYW1lAhEiLCAidXNlcl90aHVtYiI6IgUFdGh1bWICDyIsInVzZXJfZGF0ZSI6IgUEZGF0ZQICIn0BCGFzU3RyaW5nAQJidgQHJG1hdGNoMAUCYnYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBANidjAFByRtYXRjaDAFA2J2MAkAAgECJFNwb25zb3JlZCBQdWJsaWMgS2V5IFN0cmluZyBleHBlY3RlZAEJZ2V0Q2FsbGVyAgFpBnB1YktleQQLaXNTcG9uc29yZWQDCQECIT0CBQZwdWJLZXkCAAkBC3ZhbHVlT3JFbHNlAgkBDmNoZWNrV2hpdGVsaXN0AQkArAICCQClCAEJAKcIAQkA2QQBBQZwdWJLZXkCCV9mcmVlX3R4cwAAAAAEBmNhbGxlcgMDAwkAAAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkApQgBBQR0aGlzCQAAAgkAkAMBCAUBaQhwYXltZW50cwAABwkAZgIFC2lzU3BvbnNvcmVkAAAHCQClCAEJAKcIAQkA2QQBBQZwdWJLZXkJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQTZ2V0X3Nwb25zb3JlZF93YXZlcwMJAQIhPQIFBnB1YktleQIACQD8BwQFDXdoaXRlbGlzdERhcHACCXVzZUZyZWVUeAkAzAgCCQClCAEJAKcIAQkA2QQBBQZwdWJLZXkFA25pbAUDbmlsBQR1bml0AwkAAAIFE2dldF9zcG9uc29yZWRfd2F2ZXMFE2dldF9zcG9uc29yZWRfd2F2ZXMJAJQKAgUGY2FsbGVyCQBmAgULaXNTcG9uc29yZWQAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgsGaW52b2tlAQdzZXRDb25mAgNrZXkDdmFsBAZjYWxsZXIJAKUIAQgFBmludm9rZQZjYWxsZXIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwJAAIBAiJZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGlzBmludm9rZQEKYXBwUnVubmluZwIGaXNMaXZlB21lc3NhZ2UEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDmRhcHBSdW5uaW5nS2V5BQZpc0xpdmUJAMwIAgkBC1N0cmluZ0VudHJ5AgURbWFpbnRlbmFuY2VNU0dLZXkFB21lc3NhZ2UFA25pbAkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMGaW52b2tlARByZWdpc3RyYXRpb25Nb2RlAQZXTG9ubHkEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIJAMwIAgkBDEJvb2xlYW5FbnRyeQIFEndoaXRlbGlzdGVkb25seUtleQUGV0xvbmx5BQNuaWwJAAIBAiJZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGlzBmludm9rZQEMcmVnaXN0ZXJVc2VyBgRuYW1lC2Rlc2NyaXB0aW9uBXRodW1iBnNvY2lhbAlyb3lhbHRpZXMGcHViS2V5AwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBAskdDA3MzA1NzM1NwkBCWdldENhbGxlcgIFBmludm9rZQUGcHViS2V5BAZjYWxsZXIIBQskdDA3MzA1NzM1NwJfMQQLaXNTcG9uc29yZWQIBQskdDA3MzA1NzM1NwJfMgQCaWQJANgEAQgFBmludm9rZQ10cmFuc2FjdGlvbklkBAl0aW1lc3RhbXAIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkBASEBCQENdmFsaWRVc2VyRGF0YQUFBmNhbGxlcgUEbmFtZQULZGVzY3JpcHRpb24FBXRodW1iBwkAAgECFFNvbWV0aGluZyB3ZW50IHdyb25nBARqc29uCQEIbWFrZUpTT04DCQDaBAEJAJsDAQUEbmFtZQkA2gQBCQCbAwEFBXRodW1iCQCkAwEFCXRpbWVzdGFtcAMDCQBmAgAABQlyb3lhbHRpZXMGCQBmAgUJcm95YWx0aWVzAOgHCQACAQIzUm95YWx0aWVzIGNhbm5vdCBiZSBsZXNzIHRoYW4gMCUgb3IgaGlnaGVyIHRoYW4gMTAlBAp0eFRvQ2FsbGVyAwULaXNTcG9uc29yZWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmNhbGxlcgAABQR1bml0BQNuaWwFA25pbAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQELa2V5VXNlckRhdGUBBQZjYWxsZXIFCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5VXNlckFkZHIBBQZjYWxsZXIJAKwCAgkArAICBQJpZAIBXwkApAMBBQl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleVVzZXJOYW1lAQUGY2FsbGVyBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlVc2VyRGVzYwEFBmNhbGxlcgULZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVVzZXJTb2NpYWwBBQZjYWxsZXIFBnNvY2lhbAkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5VXNlclRodW1iAQUGY2FsbGVyBQV0aHVtYgkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VXNlclN0YXR1cwEFBmNhbGxlcgUOdXNlclJlZ2lzdGVyZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARBrZXlVc2VyUm95YWx0aWVzAQUGY2FsbGVyBQlyb3lhbHRpZXMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAghBTExPV0VEXwUGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQ51c2VyUmVnaXN0ZXJlZAIBXwUGY2FsbGVyBQRqc29uBQNuaWwFCnR4VG9DYWxsZXIGaW52b2tlAQp1cGRhdGVVc2VyBgRuYW1lC2Rlc2NyaXB0aW9uBXRodW1iBnNvY2lhbAlyb3lhbHRpZXMGcHViS2V5AwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBAskdDA4ODAwODkwNAkBCWdldENhbGxlcgIFBmludm9rZQUGcHViS2V5BAZjYWxsZXIIBQskdDA4ODAwODkwNAJfMQQLaXNTcG9uc29yZWQIBQskdDA4ODAwODkwNAJfMgQGc3RhdHVzCQEOZ2V0U3RyaW5nQnlLZXkBCQENa2V5VXNlclN0YXR1cwEFBmNhbGxlcgMJAQEhAQkBDXZhbGlkVXNlckRhdGEFBQZjYWxsZXIFBG5hbWUFC2Rlc2NyaXB0aW9uBQV0aHVtYgYJAAIBAhRTb21ldGhpbmcgd2VudCB3cm9uZwQEZGF0ZQkBD2dldEludGVnZXJCeUtleQEJAQtrZXlVc2VyRGF0ZQEFBmNhbGxlcgQEanNvbgkBCG1ha2VKU09OAwkA2gQBCQCbAwEFBG5hbWUJANoEAQkAmwMBBQV0aHVtYgkApAMBBQRkYXRlAwMJAGYCAAAFCXJveWFsdGllcwYJAGYCBQlyb3lhbHRpZXMA6AcJAAIBAjNSb3lhbHRpZXMgY2Fubm90IGJlIGxlc3MgdGhhbiAwJSBvciBoaWdoZXIgdGhhbiAxMCUECnR4VG9DYWxsZXIDBQtpc1Nwb25zb3JlZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAAFBHVuaXQFA25pbAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleVVzZXJOYW1lAQUGY2FsbGVyBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlVc2VyRGVzYwEFBmNhbGxlcgULZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVVzZXJTb2NpYWwBBQZjYWxsZXIFBnNvY2lhbAkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5VXNlclRodW1iAQUGY2FsbGVyBQV0aHVtYgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEGtleVVzZXJSb3lhbHRpZXMBBQZjYWxsZXIFCXJveWFsdGllcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUGc3RhdHVzAgFfBQZjYWxsZXIFBGpzb24FA25pbAUKdHhUb0NhbGxlcgZpbnZva2UBDHNldEVSQzIwVXNlcgIFZXJjMjAGcHViS2V5AwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBA0kdDAxMDA5MTEwMTk0CQEJZ2V0Q2FsbGVyAgUGaW52b2tlBQZwdWJLZXkEBmNhbGxlcggFDSR0MDEwMDkxMTAxOTQCXzEEC2lzU3BvbnNvcmVkCAUNJHQwMTAwOTExMDE5NAJfMgQGc3RhdHVzCQEOZ2V0U3RyaW5nQnlLZXkBCQENa2V5VXNlclN0YXR1cwEFBmNhbGxlcgMDCQECIT0CBQZzdGF0dXMFDnVzZXJSZWdpc3RlcmVkCQECIT0CBQZzdGF0dXMFDHVzZXJWZXJpZmllZAcJAAIBAiBOb3QgYWxsb3dlZCB0byBzZXQgRVJDMjAgYWRkcmVzcwQIZmlyc3RUd28JAK8CAgUFZXJjMjAAAgMDCQECIT0CBQhmaXJzdFR3bwICMHgGCQECIT0CCQCxAgEFBWVyYzIwACoJAAIBAhxUaGlzIGlzIG5vdCBhbiBlcmMyMCBhZGRyZXNzBAp0eFRvQ2FsbGVyAwULaXNTcG9uc29yZWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmNhbGxlcgAABQR1bml0BQNuaWwFA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlVc2VyRVJDMjABBQZjYWxsZXIFBWVyYzIwBQNuaWwFCnR4VG9DYWxsZXIGaW52b2tlARBjaGFuZ2VVc2VyU3RhdHVzAwdhZGRyZXNzBnN0YXR1cwRub3RlBAZjYWxsZXIJAKUIAQgFBmludm9rZQZjYWxsZXIEDWN1cnJlbnRTdGF0dXMJAQ5nZXRTdHJpbmdCeUtleQEJAQ1rZXlVc2VyU3RhdHVzAQUHYWRkcmVzcwQLc3RhdHVzVG9TZXQJARF2YWxpZGF0ZU5ld1N0YXR1cwMFBnN0YXR1cwUHYWRkcmVzcwUNY3VycmVudFN0YXR1cwQEbmFtZQkA2gQBCQCbAwEJAQ5nZXRTdHJpbmdCeUtleQEJAQtrZXlVc2VyTmFtZQEFB2FkZHJlc3MEBXRodW1iCQDaBAEJAJsDAQkBDmdldFN0cmluZ0J5S2V5AQkBDGtleVVzZXJUaHVtYgEFB2FkZHJlc3MEBGRhdGUJAQ9nZXRJbnRlZ2VyQnlLZXkBCQELa2V5VXNlckRhdGUBBQdhZGRyZXNzBARqc29uCQEIbWFrZUpTT04DBQRuYW1lBQV0aHVtYgkApAMBBQRkYXRlAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VXNlclN0YXR1cwEFB2FkZHJlc3MFC3N0YXR1c1RvU2V0CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICBQ1jdXJyZW50U3RhdHVzAgFfBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQtzdGF0dXNUb1NldAIBXwUHYWRkcmVzcwUEanNvbgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICCnVzZXJfbm90ZV8FB2FkZHJlc3MFBG5vdGUFA25pbAkAAgECIU5vdCBhbGxvd2VkIHRvIGNoYW5nZSB1c2VyIHN0YXR1cwZpbnZva2UBCmRlbGV0ZVVzZXIBB2FkZHJlc3MEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgQNY3VycmVudFN0YXR1cwkBDmdldFN0cmluZ0J5S2V5AQkBDWtleVVzZXJTdGF0dXMBBQdhZGRyZXNzAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5VXNlckRhdGUBBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlVc2VyQWRkcgEFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleVVzZXJOYW1lAQUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5VXNlckRlc2MBBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlVc2VyU29jaWFsAQUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5VXNlclRodW1iAQUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICCnVzZXJfbm90ZV8FB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIFDWN1cnJlbnRTdGF0dXMCAV8FB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEGtleVVzZXJSb3lhbHRpZXMBBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlVc2VyU3RhdHVzAQUHYWRkcmVzcwULdXNlclJlbW92ZWQFA25pbAkAAgECC05vdCBhbGxvd2VkAWkBCHNldEFnZW50BAphcnRpc3RBZGRyCWFnZW50QWRkcgxwcmltYXJ5U2hhcmUOc2Vjb25kYXJ5U2hhcmUDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cEBmNhbGxlcgkApQgBCAUBaQZjYWxsZXIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyAwMJAQIhPQIJALECAQUKYXJ0aXN0QWRkcgAjBgkBAiE9AgkAsQIBBQlhZ2VudEFkZHIAIwkAAgECDVdyb25nIGFkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEmtleUFydGlzdEFnZW50QWRkcgEFCmFydGlzdEFkZHIFCWFnZW50QWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5QWdlbnRBcnRpc3RBZGRyAgUJYWdlbnRBZGRyBQphcnRpc3RBZGRyBQphcnRpc3RBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5UHJpbWFyeVNoYXJlAQUKYXJ0aXN0QWRkcgUMcHJpbWFyeVNoYXJlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERa2V5U2Vjb25kYXJ5U2hhcmUBBQphcnRpc3RBZGRyBQ5zZWNvbmRhcnlTaGFyZQUDbmlsCQACAQITWW91IGFyZSBub3QgYWxsb3dlZAFpAQp1bnNldEFnZW50AgphcnRpc3RBZGRyCWFnZW50QWRkcgMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQGY2FsbGVyCQClCAEIBQFpBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDAwkBAiE9AgkAsQIBBQphcnRpc3RBZGRyACMGCQECIT0CCQCxAgEFCWFnZW50QWRkcgAjCQACAQINV3JvbmcgYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQESa2V5QXJ0aXN0QWdlbnRBZGRyAQUKYXJ0aXN0QWRkcgkAzAgCCQELRGVsZXRlRW50cnkBCQESa2V5QWdlbnRBcnRpc3RBZGRyAgUJYWdlbnRBZGRyBQphcnRpc3RBZGRyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlQcmltYXJ5U2hhcmUBBQphcnRpc3RBZGRyCQDMCAIJAQtEZWxldGVFbnRyeQEJARFrZXlTZWNvbmRhcnlTaGFyZQEFCmFydGlzdEFkZHIFA25pbAkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQBaQELZGVsZXRlRW50cnkBBWVudHJ5BAZjYWxsZXIJAKUIAQgFAWkGY2FsbGVyAwkAAAIFBmNhbGxlcgUFY2hyaXMJAMwIAgkBC0RlbGV0ZUVudHJ5AQUFZW50cnkFA25pbAkAAgECAm5vAQJ0eAEIdmVyaWZpZXIABAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQDaW52BQckbWF0Y2gwAwMDCQAAAggFA2ludghmdW5jdGlvbgIMcmVnaXN0ZXJVc2VyCQAAAggFA2ludgRkQXBwBQR0aGlzBwkAAAIIBQNpbnYDZmVlAKDCHgcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJANkEAQkBCGFzU3RyaW5nAQkAkQMCCAUDaW52BGFyZ3MABQMDAwkAAAIIBQNpbnYIZnVuY3Rpb24CCnVwZGF0ZVVzZXIJAAACCAUDaW52BGRBcHAFBHRoaXMHCQAAAggFA2ludgNmZWUAoMIeBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQEIYXNTdHJpbmcBCQCRAwIIBQNpbnYEYXJncwAFAwMDCQAAAggFA2ludghmdW5jdGlvbgIMc2V0RVJDMjBVc2VyCQAAAggFA2ludgRkQXBwBQR0aGlzBwkAAAIIBQNpbnYDZmVlAKDCHgcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJANkEAQkBCGFzU3RyaW5nAQkAkQMCCAUDaW52BGFyZ3MAAgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tlee1MNpo=", "height": 2412873, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 97J8ikmsPZgj9rVJcQ35zmP9fZYH1CH3WDnhf8YD89gB Next: EU8Ct34qHoDypMj3LK5QiPzB8KsdMKMkNMp1GGnPv3jd Diff:
OldNewDifferences
180180
181181
182182 func getCaller (i,pubKey) = {
183- let isSponsored = valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
183+ let isSponsored = if ((pubKey != ""))
184+ then valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
185+ else 0
184186 let caller = if (if (if ((toBase58String(i.caller.bytes) == toString(this)))
185187 then (size(i.payments) == 0)
186188 else false)
231233 func registerUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
232234 then throw(maintenanceMSG)
233235 else {
234- let $t072777329 = getCaller(invoke, pubKey)
235- let caller = $t072777329._1
236- let isSponsored = $t072777329._2
236+ let $t073057357 = getCaller(invoke, pubKey)
237+ let caller = $t073057357._1
238+ let isSponsored = $t073057357._2
237239 let id = toBase58String(invoke.transactionId)
238240 let timestamp = lastBlock.timestamp
239241 if (!(validUserData(caller, name, description, thumb, false)))
259261 func updateUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
260262 then throw(maintenanceMSG)
261263 else {
262- let $t087728876 = getCaller(invoke, pubKey)
263- let caller = $t087728876._1
264- let isSponsored = $t087728876._2
264+ let $t088008904 = getCaller(invoke, pubKey)
265+ let caller = $t088008904._1
266+ let isSponsored = $t088008904._2
265267 let status = getStringByKey(keyUserStatus(caller))
266268 if (!(validUserData(caller, name, description, thumb, true)))
267269 then throw("Something went wrong")
287289 func setERC20User (erc20,pubKey) = if (!(dappRunning))
288290 then throw(maintenanceMSG)
289291 else {
290- let $t01006310166 = getCaller(invoke, pubKey)
291- let caller = $t01006310166._1
292- let isSponsored = $t01006310166._2
292+ let $t01009110194 = getCaller(invoke, pubKey)
293+ let caller = $t01009110194._1
294+ let isSponsored = $t01009110194._2
293295 let status = getStringByKey(keyUserStatus(caller))
294296 if (if ((status != userRegistered))
295297 then (status != userVerified)
383385 @Verifier(tx)
384386 func verifier () = match tx {
385387 case inv: InvokeScriptTransaction =>
386- if (if ((inv.function == "registerUser"))
388+ if (if (if ((inv.function == "registerUser"))
387389 then (inv.dApp == this)
388390 else false)
391+ then (inv.fee == 500000)
392+ else false)
389393 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
390- else if (if ((inv.function == "updateUser"))
394+ else if (if (if ((inv.function == "updateUser"))
391395 then (inv.dApp == this)
392396 else false)
397+ then (inv.fee == 500000)
398+ else false)
393399 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
394- else if (if ((inv.function == "setERC20User"))
400+ else if (if (if ((inv.function == "setERC20User"))
395401 then (inv.dApp == this)
402+ else false)
403+ then (inv.fee == 500000)
396404 else false)
397405 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[2])))
398406 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VERSION = "1.5"
55
66 func getStringByKey (key) = valueOrElse(getString(this, key), "")
77
88
99 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
1010
1111
1212 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
1313
1414
1515 let chris = getStringByKey("conf_admin_1")
1616
1717 let dappRunningKey = "conf_dapp_is_running"
1818
1919 let maintenanceMSGKey = "conf_maintenance_msg"
2020
2121 let whitelistedonlyKey = "conf_whitelisted_only"
2222
2323 let dappRunning = valueOrElse(getBoolean(this, dappRunningKey), true)
2424
2525 let maintenanceMSG = valueOrElse(getString(this, maintenanceMSGKey), "")
2626
2727 let whitelistedonly = valueOrElse(getBoolean(this, whitelistedonlyKey), true)
2828
2929 let whitelistDapp = value(addressFromString(getStringByKey("conf_whitelist_dapp")))
3030
3131 let userAllowed = "ALLOWED"
3232
3333 let userRegistered = "REGISTERED"
3434
3535 let userVerified = "VERIFIED"
3636
3737 let userSuspended = "SUSPENDED"
3838
3939 let userRemoved = "REMOVED"
4040
4141 let userChangeRequired = "CHANGE_REQUIRED"
4242
4343 let userUnregistered = "UNREGISTERED"
4444
4545 let userReset = "RESET"
4646
4747 func keyUserAddr (caller) = ("user_" + caller)
4848
4949
5050 func keyUserName (caller) = ("user_name_" + caller)
5151
5252
5353 func keyUserDesc (caller) = ("user_desc_" + caller)
5454
5555
5656 func keyUserSocial (caller) = ("user_social_" + caller)
5757
5858
5959 func keyUserThumb (caller) = ("user_thumb_" + caller)
6060
6161
6262 func keyUserStatus (caller) = ("user_status_" + caller)
6363
6464
6565 func keyUserRoyalties (caller) = ("user_royalties_" + caller)
6666
6767
6868 func keyUserDate (caller) = ("user_date_" + caller)
6969
7070
7171 func keyUserERC20 (caller) = ("user_ERC20_" + caller)
7272
7373
7474 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
7575
7676
7777 func keyAgentArtistAddr (agentAddr,artistAddr) = ((("agent_" + agentAddr) + "_") + artistAddr)
7878
7979
8080 func keyPrimaryShare (artistAddr) = ("artist_agent_primary_" + artistAddr)
8181
8282
8383 func keySecondaryShare (artistAddr) = ("artist_agent_secondary_" + artistAddr)
8484
8585
8686 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
8787
8888
8989 func validateCID (cid) = if (contains(cid, "/"))
9090 then if (if ((76 > size(cid)))
9191 then (size(split(cid, "/")[0]) == 59)
9292 else false)
9393 then (16 > size(split(cid, "/")[1]))
9494 else false
9595 else false
9696
9797
9898 func validUserData (caller,name,description,thumb,isAnUpdate) = {
9999 let validCID = if ((size(thumb) != 0))
100100 then validateCID(thumb)
101101 else true
102102 if (!(validCID))
103103 then throw("CID don't match requirement!")
104104 else if (if ((name == ""))
105105 then true
106106 else (description == ""))
107107 then throw("Name and description cannot be empty")
108108 else if ((size(description) > 600))
109109 then throw("600 Char. max description")
110110 else if ((size(name) > 45))
111111 then throw("45 Char. max name")
112112 else {
113113 let status = getStringByKey(keyUserStatus(caller))
114114 if (if ((status == userSuspended))
115115 then true
116116 else (status == userRemoved))
117117 then throw("Account suspended/ removed.")
118118 else if (if (!(isAnUpdate))
119119 then (status == userRegistered)
120120 else false)
121121 then throw("Already registered")
122122 else if (if (if (!(isAnUpdate))
123123 then (status == "")
124124 else false)
125125 then whitelistedonly
126126 else false)
127127 then throw("Can't register, get approved first.")
128128 else if (if (if (isAnUpdate)
129129 then (status == "")
130130 else false)
131131 then true
132132 else if (isAnUpdate)
133133 then (status == userAllowed)
134134 else false)
135135 then throw("Register first")
136136 else true
137137 }
138138 }
139139
140140
141141 func validateNewStatus (status,address,currentStatus) = {
142142 let allStatus = [userVerified, userRegistered, userSuspended, userRemoved, userAllowed, userChangeRequired]
143143 let statusToSet = if (containsElement(allStatus, status))
144144 then status
145145 else if (if ((status == userReset))
146146 then (currentStatus == userAllowed)
147147 else false)
148148 then ""
149149 else throw("Unknown status")
150150 let userIsRegistered = getIntegerByKey(keyUserDate(address))
151151 if (if ((userIsRegistered == 0))
152152 then (statusToSet != userAllowed)
153153 else false)
154154 then throw("You cant set this status, user is not registered.")
155155 else if (if ((currentStatus == userAllowed))
156156 then (statusToSet == userAllowed)
157157 else false)
158158 then throw("User already allowed")
159159 else if (if ((currentStatus == userRegistered))
160160 then (statusToSet == userAllowed)
161161 else false)
162162 then throw("User already allowed & registered")
163163 else if (if ((currentStatus == userVerified))
164164 then (statusToSet == userAllowed)
165165 else false)
166166 then throw("User already allowed & verified")
167167 else statusToSet
168168 }
169169
170170
171171 func makeJSON (name,thumb,date) = (((((("{\"user_name\": \"" + name) + "\", \"user_thumb\":\"") + thumb) + "\",\"user_date\":\"") + date) + "\"}")
172172
173173
174174 func asString (bv) = match bv {
175175 case bv0: String =>
176176 bv0
177177 case _ =>
178178 throw("Sponsored Public Key String expected")
179179 }
180180
181181
182182 func getCaller (i,pubKey) = {
183- let isSponsored = valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
183+ let isSponsored = if ((pubKey != ""))
184+ then valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
185+ else 0
184186 let caller = if (if (if ((toBase58String(i.caller.bytes) == toString(this)))
185187 then (size(i.payments) == 0)
186188 else false)
187189 then (isSponsored > 0)
188190 else false)
189191 then toString(addressFromPublicKey(fromBase58String(pubKey)))
190192 else toBase58String(i.caller.bytes)
191193 let get_sponsored_waves = if ((pubKey != ""))
192194 then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
193195 else unit
194196 if ((get_sponsored_waves == get_sponsored_waves))
195197 then $Tuple2(caller, (isSponsored > 0))
196198 else throw("Strict value is not equal to itself.")
197199 }
198200
199201
200202 @Callable(invoke)
201203 func setConf (key,val) = {
202204 let caller = toString(invoke.caller)
203205 if (containsElement([chris, toString(this)], caller))
204206 then [StringEntry(key, val)]
205207 else throw("You are not allowed to change this")
206208 }
207209
208210
209211
210212 @Callable(invoke)
211213 func appRunning (isLive,message) = {
212214 let caller = toString(invoke.caller)
213215 if (containsElement([chris, toString(this)], caller))
214216 then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
215217 else throw("You are not allowed to change this")
216218 }
217219
218220
219221
220222 @Callable(invoke)
221223 func registrationMode (WLonly) = {
222224 let caller = toString(invoke.caller)
223225 if (containsElement([chris, toString(this)], caller))
224226 then [BooleanEntry(whitelistedonlyKey, WLonly)]
225227 else throw("You are not allowed to change this")
226228 }
227229
228230
229231
230232 @Callable(invoke)
231233 func registerUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
232234 then throw(maintenanceMSG)
233235 else {
234- let $t072777329 = getCaller(invoke, pubKey)
235- let caller = $t072777329._1
236- let isSponsored = $t072777329._2
236+ let $t073057357 = getCaller(invoke, pubKey)
237+ let caller = $t073057357._1
238+ let isSponsored = $t073057357._2
237239 let id = toBase58String(invoke.transactionId)
238240 let timestamp = lastBlock.timestamp
239241 if (!(validUserData(caller, name, description, thumb, false)))
240242 then throw("Something went wrong")
241243 else {
242244 let json = makeJSON(toBase64String(toBytes(name)), toBase64String(toBytes(thumb)), toString(timestamp))
243245 if (if ((0 > royalties))
244246 then true
245247 else (royalties > 1000))
246248 then throw("Royalties cannot be less than 0% or higher than 10%")
247249 else {
248250 let txToCaller = if (isSponsored)
249251 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
250252 else nil
251253 ([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)] ++ txToCaller)
252254 }
253255 }
254256 }
255257
256258
257259
258260 @Callable(invoke)
259261 func updateUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
260262 then throw(maintenanceMSG)
261263 else {
262- let $t087728876 = getCaller(invoke, pubKey)
263- let caller = $t087728876._1
264- let isSponsored = $t087728876._2
264+ let $t088008904 = getCaller(invoke, pubKey)
265+ let caller = $t088008904._1
266+ let isSponsored = $t088008904._2
265267 let status = getStringByKey(keyUserStatus(caller))
266268 if (!(validUserData(caller, name, description, thumb, true)))
267269 then throw("Something went wrong")
268270 else {
269271 let date = getIntegerByKey(keyUserDate(caller))
270272 let json = makeJSON(toBase64String(toBytes(name)), toBase64String(toBytes(thumb)), toString(date))
271273 if (if ((0 > royalties))
272274 then true
273275 else (royalties > 1000))
274276 then throw("Royalties cannot be less than 0% or higher than 10%")
275277 else {
276278 let txToCaller = if (isSponsored)
277279 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
278280 else nil
279281 ([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)
280282 }
281283 }
282284 }
283285
284286
285287
286288 @Callable(invoke)
287289 func setERC20User (erc20,pubKey) = if (!(dappRunning))
288290 then throw(maintenanceMSG)
289291 else {
290- let $t01006310166 = getCaller(invoke, pubKey)
291- let caller = $t01006310166._1
292- let isSponsored = $t01006310166._2
292+ let $t01009110194 = getCaller(invoke, pubKey)
293+ let caller = $t01009110194._1
294+ let isSponsored = $t01009110194._2
293295 let status = getStringByKey(keyUserStatus(caller))
294296 if (if ((status != userRegistered))
295297 then (status != userVerified)
296298 else false)
297299 then throw("Not allowed to set ERC20 address")
298300 else {
299301 let firstTwo = take(erc20, 2)
300302 if (if ((firstTwo != "0x"))
301303 then true
302304 else (size(erc20) != 42))
303305 then throw("This is not an erc20 address")
304306 else {
305307 let txToCaller = if (isSponsored)
306308 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
307309 else nil
308310 ([StringEntry(keyUserERC20(caller), erc20)] ++ txToCaller)
309311 }
310312 }
311313 }
312314
313315
314316
315317 @Callable(invoke)
316318 func changeUserStatus (address,status,note) = {
317319 let caller = toString(invoke.caller)
318320 let currentStatus = getStringByKey(keyUserStatus(address))
319321 let statusToSet = validateNewStatus(status, address, currentStatus)
320322 let name = toBase64String(toBytes(getStringByKey(keyUserName(address))))
321323 let thumb = toBase64String(toBytes(getStringByKey(keyUserThumb(address))))
322324 let date = getIntegerByKey(keyUserDate(address))
323325 let json = makeJSON(name, thumb, toString(date))
324326 if (containsElement([chris, toString(this)], caller))
325327 then [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), json), StringEntry(("user_note_" + address), note)]
326328 else throw("Not allowed to change user status")
327329 }
328330
329331
330332
331333 @Callable(invoke)
332334 func deleteUser (address) = {
333335 let caller = toString(invoke.caller)
334336 let currentStatus = getStringByKey(keyUserStatus(address))
335337 if (containsElement([chris, toString(this)], caller))
336338 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)]
337339 else throw("Not allowed")
338340 }
339341
340342
341343
342344 @Callable(i)
343345 func setAgent (artistAddr,agentAddr,primaryShare,secondaryShare) = if (!(dappRunning))
344346 then throw(maintenanceMSG)
345347 else {
346348 let caller = toString(i.caller)
347349 if (containsElement([chris, toString(this)], caller))
348350 then if (if ((size(artistAddr) != 35))
349351 then true
350352 else (size(agentAddr) != 35))
351353 then throw("Wrong address")
352354 else [StringEntry(keyArtistAgentAddr(artistAddr), agentAddr), StringEntry(keyAgentArtistAddr(agentAddr, artistAddr), artistAddr), IntegerEntry(keyPrimaryShare(artistAddr), primaryShare), IntegerEntry(keySecondaryShare(artistAddr), secondaryShare)]
353355 else throw("You are not allowed")
354356 }
355357
356358
357359
358360 @Callable(i)
359361 func unsetAgent (artistAddr,agentAddr) = if (!(dappRunning))
360362 then throw(maintenanceMSG)
361363 else {
362364 let caller = toString(i.caller)
363365 if (containsElement([chris, toString(this)], caller))
364366 then if (if ((size(artistAddr) != 35))
365367 then true
366368 else (size(agentAddr) != 35))
367369 then throw("Wrong address")
368370 else [DeleteEntry(keyArtistAgentAddr(artistAddr)), DeleteEntry(keyAgentArtistAddr(agentAddr, artistAddr)), DeleteEntry(keyPrimaryShare(artistAddr)), DeleteEntry(keySecondaryShare(artistAddr))]
369371 else throw("You are not allowed")
370372 }
371373
372374
373375
374376 @Callable(i)
375377 func deleteEntry (entry) = {
376378 let caller = toString(i.caller)
377379 if ((caller == chris))
378380 then [DeleteEntry(entry)]
379381 else throw("no")
380382 }
381383
382384
383385 @Verifier(tx)
384386 func verifier () = match tx {
385387 case inv: InvokeScriptTransaction =>
386- if (if ((inv.function == "registerUser"))
388+ if (if (if ((inv.function == "registerUser"))
387389 then (inv.dApp == this)
388390 else false)
391+ then (inv.fee == 500000)
392+ else false)
389393 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
390- else if (if ((inv.function == "updateUser"))
394+ else if (if (if ((inv.function == "updateUser"))
391395 then (inv.dApp == this)
392396 else false)
397+ then (inv.fee == 500000)
398+ else false)
393399 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
394- else if (if ((inv.function == "setERC20User"))
400+ else if (if (if ((inv.function == "setERC20User"))
395401 then (inv.dApp == this)
402+ else false)
403+ then (inv.fee == 500000)
396404 else false)
397405 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[2])))
398406 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
399407 case _ =>
400408 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
401409 }
402410

github/deemru/w8io/3ef1775 
66.26 ms