tx · 3YHRUcANtrH7KZzFBtboixMk47hpepQi2SA6ZYQwtEjP

3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj:  -0.01000000 Waves

2023.01.19 10:56 [2411536] smart account 3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj > SELF 0.00000000 Waves

{ "type": 13, "id": "3YHRUcANtrH7KZzFBtboixMk47hpepQi2SA6ZYQwtEjP", "fee": 1000000, "feeAssetId": null, "timestamp": 1674115048939, "version": 2, "chainId": 84, "sender": "3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj", "senderPublicKey": "A2m227AHcq7gWfSU59Q3UJaqkEa7SccFYmJuWHbFrrKE", "proofs": [ "3eiTUD2v71yvLZyQd2A8vSYSygVA9UBXhLQ2CtEgj3ynWrBjyynBEaRm6La7YdW2LRjyU6xhmu2AMzZ3KySocB3r" ], "script": "base64:BgJMCAISBAoCCAgSBAoCBAgSAwoBBBIICgYICAgIAQgSCAoGCAgICAEIEgQKAggIEgUKAwgICBIDCgEIEgYKBAgIAQESBAoCCAgSAwoBCCcAB1ZFUlNJT04CAzEuNQEOZ2V0U3RyaW5nQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkCAAEPZ2V0Qm9vbGVhbkJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUDa2V5BwEPZ2V0SW50ZWdlckJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAAABWNocmlzCQEOZ2V0U3RyaW5nQnlLZXkBAgxjb25mX2FkbWluXzEADmRhcHBSdW5uaW5nS2V5AhRjb25mX2RhcHBfaXNfcnVubmluZwARbWFpbnRlbmFuY2VNU0dLZXkCFGNvbmZfbWFpbnRlbmFuY2VfbXNnABJ3aGl0ZWxpc3RlZG9ubHlLZXkCFWNvbmZfd2hpdGVsaXN0ZWRfb25seQALZGFwcFJ1bm5pbmcJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUOZGFwcFJ1bm5pbmdLZXkGAA5tYWludGVuYW5jZU1TRwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBRFtYWludGVuYW5jZU1TR0tleQIAAA93aGl0ZWxpc3RlZG9ubHkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUSd2hpdGVsaXN0ZWRvbmx5S2V5BgANd2hpdGVsaXN0RGFwcAkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAhNjb25mX3doaXRlbGlzdF9kYXBwAAt1c2VyQWxsb3dlZAIHQUxMT1dFRAAOdXNlclJlZ2lzdGVyZWQCClJFR0lTVEVSRUQADHVzZXJWZXJpZmllZAIIVkVSSUZJRUQADXVzZXJTdXNwZW5kZWQCCVNVU1BFTkRFRAALdXNlclJlbW92ZWQCB1JFTU9WRUQAEnVzZXJDaGFuZ2VSZXF1aXJlZAIPQ0hBTkdFX1JFUVVJUkVEABB1c2VyVW5yZWdpc3RlcmVkAgxVTlJFR0lTVEVSRUQACXVzZXJSZXNldAIFUkVTRVQBC2tleVVzZXJBZGRyAQZjYWxsZXIJAKwCAgIFdXNlcl8FBmNhbGxlcgELa2V5VXNlck5hbWUBBmNhbGxlcgkArAICAgp1c2VyX25hbWVfBQZjYWxsZXIBC2tleVVzZXJEZXNjAQZjYWxsZXIJAKwCAgIKdXNlcl9kZXNjXwUGY2FsbGVyAQ1rZXlVc2VyU29jaWFsAQZjYWxsZXIJAKwCAgIMdXNlcl9zb2NpYWxfBQZjYWxsZXIBDGtleVVzZXJUaHVtYgEGY2FsbGVyCQCsAgICC3VzZXJfdGh1bWJfBQZjYWxsZXIBDWtleVVzZXJTdGF0dXMBBmNhbGxlcgkArAICAgx1c2VyX3N0YXR1c18FBmNhbGxlcgEQa2V5VXNlclJveWFsdGllcwEGY2FsbGVyCQCsAgICD3VzZXJfcm95YWx0aWVzXwUGY2FsbGVyAQtrZXlVc2VyRGF0ZQEGY2FsbGVyCQCsAgICCnVzZXJfZGF0ZV8FBmNhbGxlcgEMa2V5VXNlckVSQzIwAQZjYWxsZXIJAKwCAgILdXNlcl9FUkMyMF8FBmNhbGxlcgESa2V5QXJ0aXN0QWdlbnRBZGRyAQphcnRpc3RBZGRyCQCsAgICDWFydGlzdF9hZ2VudF8FCmFydGlzdEFkZHIBEmtleUFnZW50QXJ0aXN0QWRkcgIJYWdlbnRBZGRyCmFydGlzdEFkZHIJAKwCAgkArAICCQCsAgICBmFnZW50XwUJYWdlbnRBZGRyAgFfBQphcnRpc3RBZGRyAQ9rZXlQcmltYXJ5U2hhcmUBCmFydGlzdEFkZHIJAKwCAgIVYXJ0aXN0X2FnZW50X3ByaW1hcnlfBQphcnRpc3RBZGRyARFrZXlTZWNvbmRhcnlTaGFyZQEKYXJ0aXN0QWRkcgkArAICAhdhcnRpc3RfYWdlbnRfc2Vjb25kYXJ5XwUKYXJ0aXN0QWRkcgELdmFsaWRhdGVDSUQBA2NpZAMJAQhjb250YWlucwIFA2NpZAIBLwMDCQBmAgBMCQCxAgEFA2NpZAkAAAIJALECAQkAkQMCCQC1CQIFA2NpZAIBLwAAADsHCQBmAgAQCQCxAgEJAJEDAgkAtQkCBQNjaWQCAS8AAQcHAQ12YWxpZFVzZXJEYXRhBQZjYWxsZXIEbmFtZQtkZXNjcmlwdGlvbgV0aHVtYgppc0FuVXBkYXRlAwYJAAIBBQZjYWxsZXIECHZhbGlkQ0lEAwkBAiE9AgkAsQIBBQV0aHVtYgAACQELdmFsaWRhdGVDSUQBBQV0aHVtYgYDCQEBIQEFCHZhbGlkQ0lECQACAQIcQ0lEIGRvbid0IG1hdGNoIHJlcXVpcmVtZW50IQMDCQAAAgUEbmFtZQIABgkAAAIFC2Rlc2NyaXB0aW9uAgAJAAIBAiROYW1lIGFuZCBkZXNjcmlwdGlvbiBjYW5ub3QgYmUgZW1wdHkDCQBmAgkAsQIBBQtkZXNjcmlwdGlvbgDYBAkAAgECGTYwMCBDaGFyLiBtYXggZGVzY3JpcHRpb24DCQBmAgkAsQIBBQRuYW1lAC0JAAIBAhE0NSBDaGFyLiBtYXggbmFtZQQGc3RhdHVzCQEOZ2V0U3RyaW5nQnlLZXkBCQENa2V5VXNlclN0YXR1cwEFBmNhbGxlcgMDCQAAAgUGc3RhdHVzBQ11c2VyU3VzcGVuZGVkBgkAAAIFBnN0YXR1cwULdXNlclJlbW92ZWQJAAIBAhtBY2NvdW50IHN1c3BlbmRlZC8gcmVtb3ZlZC4DAwkBASEBBQppc0FuVXBkYXRlCQAAAgUGc3RhdHVzBQ51c2VyUmVnaXN0ZXJlZAcJAAIBAhJBbHJlYWR5IHJlZ2lzdGVyZWQDAwMJAQEhAQUKaXNBblVwZGF0ZQkAAAIFBnN0YXR1cwIABwUPd2hpdGVsaXN0ZWRvbmx5BwkAAgECI0Nhbid0IHJlZ2lzdGVyLCBnZXQgYXBwcm92ZWQgZmlyc3QuAwMDBQppc0FuVXBkYXRlCQAAAgUGc3RhdHVzAgAHBgMFCmlzQW5VcGRhdGUJAAACBQZzdGF0dXMFC3VzZXJBbGxvd2VkBwkAAgECDlJlZ2lzdGVyIGZpcnN0BgERdmFsaWRhdGVOZXdTdGF0dXMDBnN0YXR1cwdhZGRyZXNzDWN1cnJlbnRTdGF0dXMECWFsbFN0YXR1cwkAzAgCBQx1c2VyVmVyaWZpZWQJAMwIAgUOdXNlclJlZ2lzdGVyZWQJAMwIAgUNdXNlclN1c3BlbmRlZAkAzAgCBQt1c2VyUmVtb3ZlZAkAzAgCBQt1c2VyQWxsb3dlZAkAzAgCBRJ1c2VyQ2hhbmdlUmVxdWlyZWQFA25pbAQLc3RhdHVzVG9TZXQDCQEPY29udGFpbnNFbGVtZW50AgUJYWxsU3RhdHVzBQZzdGF0dXMFBnN0YXR1cwMDCQAAAgUGc3RhdHVzBQl1c2VyUmVzZXQJAAACBQ1jdXJyZW50U3RhdHVzBQt1c2VyQWxsb3dlZAcCAAkAAgECDlVua25vd24gc3RhdHVzBBB1c2VySXNSZWdpc3RlcmVkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBC2tleVVzZXJEYXRlAQUHYWRkcmVzcwMDCQAAAgUQdXNlcklzUmVnaXN0ZXJlZAAACQECIT0CBQtzdGF0dXNUb1NldAULdXNlckFsbG93ZWQHCQACAQIxWW91IGNhbnQgc2V0IHRoaXMgc3RhdHVzLCB1c2VyIGlzIG5vdCByZWdpc3RlcmVkLgMDCQAAAgUNY3VycmVudFN0YXR1cwULdXNlckFsbG93ZWQJAAACBQtzdGF0dXNUb1NldAULdXNlckFsbG93ZWQHCQACAQIUVXNlciBhbHJlYWR5IGFsbG93ZWQDAwkAAAIFDWN1cnJlbnRTdGF0dXMFDnVzZXJSZWdpc3RlcmVkCQAAAgULc3RhdHVzVG9TZXQFC3VzZXJBbGxvd2VkBwkAAgECIVVzZXIgYWxyZWFkeSBhbGxvd2VkICYgcmVnaXN0ZXJlZAMDCQAAAgUNY3VycmVudFN0YXR1cwUMdXNlclZlcmlmaWVkCQAAAgULc3RhdHVzVG9TZXQFC3VzZXJBbGxvd2VkBwkAAgECH1VzZXIgYWxyZWFkeSBhbGxvd2VkICYgdmVyaWZpZWQFC3N0YXR1c1RvU2V0AQhtYWtlSlNPTgMEbmFtZQV0aHVtYgRkYXRlCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg97InVzZXJfbmFtZSI6ICIFBG5hbWUCESIsICJ1c2VyX3RodW1iIjoiBQV0aHVtYgIPIiwidXNlcl9kYXRlIjoiBQRkYXRlAgIifQEIYXNTdHJpbmcBAmJ2BAckbWF0Y2gwBQJidgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEA2J2MAUHJG1hdGNoMAUDYnYwCQACAQIkU3BvbnNvcmVkIFB1YmxpYyBLZXkgU3RyaW5nIGV4cGVjdGVkAQlnZXRDYWxsZXICAWkGcHViS2V5BAZjYWxsZXIDAwkAAAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkApQgBBQR0aGlzCQAAAgkAkAMBCAUBaQhwYXltZW50cwAABwkApQgBCQCnCAEJANkEAQUGcHViS2V5CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEE2dldF9zcG9uc29yZWRfd2F2ZXMDCQECIT0CBQZwdWJLZXkCAAkA/AcEBQ13aGl0ZWxpc3REYXBwAgl1c2VGcmVlVHgJAMwIAgkApQgBCQCnCAEJANkEAQUGcHViS2V5BQNuaWwFA25pbAUEdW5pdAMJAAACBRNnZXRfc3BvbnNvcmVkX3dhdmVzBRNnZXRfc3BvbnNvcmVkX3dhdmVzBQZjYWxsZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4LBmludm9rZQEHc2V0Q29uZgIDa2V5A3ZhbAQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCBQNrZXkFA3ZhbAUDbmlsCQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwZpbnZva2UBCmFwcFJ1bm5pbmcCBmlzTGl2ZQdtZXNzYWdlBAZjYWxsZXIJAKUIAQgFBmludm9rZQZjYWxsZXIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyCQDMCAIJAQxCb29sZWFuRW50cnkCBQ5kYXBwUnVubmluZ0tleQUGaXNMaXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIFEW1haW50ZW5hbmNlTVNHS2V5BQdtZXNzYWdlBQNuaWwJAAIBAiJZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGlzBmludm9rZQEQcmVnaXN0cmF0aW9uTW9kZQEGV0xvbmx5BAZjYWxsZXIJAKUIAQgFBmludm9rZQZjYWxsZXIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyCQDMCAIJAQxCb29sZWFuRW50cnkCBRJ3aGl0ZWxpc3RlZG9ubHlLZXkFBldMb25seQUDbmlsCQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwZpbnZva2UBDHJlZ2lzdGVyVXNlcgYEbmFtZQtkZXNjcmlwdGlvbgV0aHVtYgZzb2NpYWwJcm95YWx0aWVzBnB1YktleQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQGY2FsbGVyCQEJZ2V0Q2FsbGVyAgUGaW52b2tlBQZwdWJLZXkEAmlkCQDYBAEIBQZpbnZva2UNdHJhbnNhY3Rpb25JZAQJdGltZXN0YW1wCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAMJAQEhAQkBDXZhbGlkVXNlckRhdGEFBQZjYWxsZXIFBG5hbWUFC2Rlc2NyaXB0aW9uBQV0aHVtYgcJAAIBAhRTb21ldGhpbmcgd2VudCB3cm9uZwQEanNvbgkBCG1ha2VKU09OAwkA2gQBCQCbAwEFBG5hbWUJANoEAQkAmwMBBQV0aHVtYgkApAMBBQl0aW1lc3RhbXADAwkAZgIAAAUJcm95YWx0aWVzBgkAZgIFCXJveWFsdGllcwDoBwkAAgECM1JveWFsdGllcyBjYW5ub3QgYmUgbGVzcyB0aGFuIDAlIG9yIGhpZ2hlciB0aGFuIDEwJQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBC2tleVVzZXJEYXRlAQUGY2FsbGVyBQl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleVVzZXJBZGRyAQUGY2FsbGVyCQCsAgIJAKwCAgUCaWQCAV8JAKQDAQUJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlVc2VyTmFtZQEFBmNhbGxlcgUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5VXNlckRlc2MBBQZjYWxsZXIFC2Rlc2NyaXB0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlVc2VyU29jaWFsAQUGY2FsbGVyBQZzb2NpYWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleVVzZXJUaHVtYgEFBmNhbGxlcgUFdGh1bWIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVVzZXJTdGF0dXMBBQZjYWxsZXIFDnVzZXJSZWdpc3RlcmVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQa2V5VXNlclJveWFsdGllcwEFBmNhbGxlcgUJcm95YWx0aWVzCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgIIQUxMT1dFRF8FBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUOdXNlclJlZ2lzdGVyZWQCAV8FBmNhbGxlcgUEanNvbgUDbmlsBmludm9rZQEKdXBkYXRlVXNlcgYEbmFtZQtkZXNjcmlwdGlvbgV0aHVtYgZzb2NpYWwJcm95YWx0aWVzBnB1YktleQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQGY2FsbGVyCQEJZ2V0Q2FsbGVyAgUGaW52b2tlBQZwdWJLZXkEBnN0YXR1cwkBDmdldFN0cmluZ0J5S2V5AQkBDWtleVVzZXJTdGF0dXMBBQZjYWxsZXIDCQEBIQEJAQ12YWxpZFVzZXJEYXRhBQUGY2FsbGVyBQRuYW1lBQtkZXNjcmlwdGlvbgUFdGh1bWIGCQACAQIUU29tZXRoaW5nIHdlbnQgd3JvbmcEBGRhdGUJAQ9nZXRJbnRlZ2VyQnlLZXkBCQELa2V5VXNlckRhdGUBBQZjYWxsZXIEBGpzb24JAQhtYWtlSlNPTgMJANoEAQkAmwMBBQRuYW1lCQDaBAEJAJsDAQUFdGh1bWIJAKQDAQUEZGF0ZQMDCQBmAgAABQlyb3lhbHRpZXMGCQBmAgUJcm95YWx0aWVzAOgHCQACAQIzUm95YWx0aWVzIGNhbm5vdCBiZSBsZXNzIHRoYW4gMCUgb3IgaGlnaGVyIHRoYW4gMTAlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlVc2VyTmFtZQEFBmNhbGxlcgUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5VXNlckRlc2MBBQZjYWxsZXIFC2Rlc2NyaXB0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlVc2VyU29jaWFsAQUGY2FsbGVyBQZzb2NpYWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleVVzZXJUaHVtYgEFBmNhbGxlcgUFdGh1bWIJAMwIAgkBDEludGVnZXJFbnRyeQIJARBrZXlVc2VyUm95YWx0aWVzAQUGY2FsbGVyBQlyb3lhbHRpZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBnN0YXR1cwIBXwUGY2FsbGVyBQRqc29uBQNuaWwGaW52b2tlAQxzZXRFUkMyMFVzZXICBWVyYzIwBnB1YktleQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQGY2FsbGVyCQEJZ2V0Q2FsbGVyAgUGaW52b2tlBQZwdWJLZXkEBnN0YXR1cwkBDmdldFN0cmluZ0J5S2V5AQkBDWtleVVzZXJTdGF0dXMBBQZjYWxsZXIDAwkBAiE9AgUGc3RhdHVzBQ51c2VyUmVnaXN0ZXJlZAkBAiE9AgUGc3RhdHVzBQx1c2VyVmVyaWZpZWQHCQACAQIgTm90IGFsbG93ZWQgdG8gc2V0IEVSQzIwIGFkZHJlc3MECGZpcnN0VHdvCQCvAgIFBWVyYzIwAAIDAwkBAiE9AgUIZmlyc3RUd28CAjB4BgkBAiE9AgkAsQIBBQVlcmMyMAAqCQACAQIcVGhpcyBpcyBub3QgYW4gZXJjMjAgYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5VXNlckVSQzIwAQUGY2FsbGVyBQVlcmMyMAUDbmlsBmludm9rZQEQY2hhbmdlVXNlclN0YXR1cwMHYWRkcmVzcwZzdGF0dXMEbm90ZQQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyBA1jdXJyZW50U3RhdHVzCQEOZ2V0U3RyaW5nQnlLZXkBCQENa2V5VXNlclN0YXR1cwEFB2FkZHJlc3MEC3N0YXR1c1RvU2V0CQERdmFsaWRhdGVOZXdTdGF0dXMDBQZzdGF0dXMFB2FkZHJlc3MFDWN1cnJlbnRTdGF0dXMEBG5hbWUJANoEAQkAmwMBCQEOZ2V0U3RyaW5nQnlLZXkBCQELa2V5VXNlck5hbWUBBQdhZGRyZXNzBAV0aHVtYgkA2gQBCQCbAwEJAQ5nZXRTdHJpbmdCeUtleQEJAQxrZXlVc2VyVGh1bWIBBQdhZGRyZXNzBARkYXRlCQEPZ2V0SW50ZWdlckJ5S2V5AQkBC2tleVVzZXJEYXRlAQUHYWRkcmVzcwQEanNvbgkBCG1ha2VKU09OAwUEbmFtZQUFdGh1bWIJAKQDAQUEZGF0ZQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVVzZXJTdGF0dXMBBQdhZGRyZXNzBQtzdGF0dXNUb1NldAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgUNY3VycmVudFN0YXR1cwIBXwUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgULc3RhdHVzVG9TZXQCAV8FB2FkZHJlc3MFBGpzb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgp1c2VyX25vdGVfBQdhZGRyZXNzBQRub3RlBQNuaWwJAAIBAiFOb3QgYWxsb3dlZCB0byBjaGFuZ2UgdXNlciBzdGF0dXMGaW52b2tlAQpkZWxldGVVc2VyAQdhZGRyZXNzBAZjYWxsZXIJAKUIAQgFBmludm9rZQZjYWxsZXIEDWN1cnJlbnRTdGF0dXMJAQ5nZXRTdHJpbmdCeUtleQEJAQ1rZXlVc2VyU3RhdHVzAQUHYWRkcmVzcwMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleVVzZXJEYXRlAQUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5VXNlckFkZHIBBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlVc2VyTmFtZQEFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleVVzZXJEZXNjAQUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5VXNlclNvY2lhbAEFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleVVzZXJUaHVtYgEFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAgp1c2VyX25vdGVfBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICBQ1jdXJyZW50U3RhdHVzAgFfBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlVc2VyUm95YWx0aWVzAQUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VXNlclN0YXR1cwEFB2FkZHJlc3MFC3VzZXJSZW1vdmVkBQNuaWwJAAIBAgtOb3QgYWxsb3dlZAFpAQhzZXRBZ2VudAQKYXJ0aXN0QWRkcglhZ2VudEFkZHIMcHJpbWFyeVNoYXJlDnNlY29uZGFyeVNoYXJlAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBAZjYWxsZXIJAKUIAQgFAWkGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMDCQECIT0CCQCxAgEFCmFydGlzdEFkZHIAIwYJAQIhPQIJALECAQUJYWdlbnRBZGRyACMJAAIBAg1Xcm9uZyBhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARJrZXlBcnRpc3RBZ2VudEFkZHIBBQphcnRpc3RBZGRyBQlhZ2VudEFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEmtleUFnZW50QXJ0aXN0QWRkcgIFCWFnZW50QWRkcgUKYXJ0aXN0QWRkcgUKYXJ0aXN0QWRkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBD2tleVByaW1hcnlTaGFyZQEFCmFydGlzdEFkZHIFDHByaW1hcnlTaGFyZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEWtleVNlY29uZGFyeVNoYXJlAQUKYXJ0aXN0QWRkcgUOc2Vjb25kYXJ5U2hhcmUFA25pbAkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQBaQEKdW5zZXRBZ2VudAIKYXJ0aXN0QWRkcglhZ2VudEFkZHIDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cEBmNhbGxlcgkApQgBCAUBaQZjYWxsZXIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyAwMJAQIhPQIJALECAQUKYXJ0aXN0QWRkcgAjBgkBAiE9AgkAsQIBBQlhZ2VudEFkZHIAIwkAAgECDVdyb25nIGFkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEmtleUFydGlzdEFnZW50QWRkcgEFCmFydGlzdEFkZHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEmtleUFnZW50QXJ0aXN0QWRkcgIFCWFnZW50QWRkcgUKYXJ0aXN0QWRkcgkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5UHJpbWFyeVNoYXJlAQUKYXJ0aXN0QWRkcgkAzAgCCQELRGVsZXRlRW50cnkBCQERa2V5U2Vjb25kYXJ5U2hhcmUBBQphcnRpc3RBZGRyBQNuaWwJAAIBAhNZb3UgYXJlIG5vdCBhbGxvd2VkAWkBC2RlbGV0ZUVudHJ5AQVlbnRyeQQGY2FsbGVyCQClCAEIBQFpBmNhbGxlcgMJAAACBQZjYWxsZXIFBWNocmlzCQDMCAIJAQtEZWxldGVFbnRyeQEFBWVudHJ5BQNuaWwJAAIBAgJubwECdHgBCHZlcmlmaWVyAAQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAMDCQAAAggFA2ludghmdW5jdGlvbgIMcmVnaXN0ZXJVc2VyCQAAAggFA2ludgRkQXBwBQR0aGlzBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQEIYXNTdHJpbmcBCQCRAwIIBQNpbnYEYXJncwANAwMJAAACCAUDaW52CGZ1bmN0aW9uAgp1cGRhdGVVc2VyCQAAAggFA2ludgRkQXBwBQR0aGlzBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQEIYXNTdHJpbmcBCQCRAwIIBQNpbnYEYXJncwAMAwMJAAACCAUDaW52CGZ1bmN0aW9uAgxzZXRFUkMyMFVzZXIJAAACCAUDaW52BGRBcHAFBHRoaXMHCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQDZBAEJAQhhc1N0cmluZwEJAJEDAggFA2ludgRhcmdzAAUJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXmmYg54", "height": 2411536, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HJuFQwm75ntfMjjBx4Fdx9BXxUQUDXZFZAXbwwnDbGpP Next: EAfspMPWvgSEhsDSTAVm9BiZPfFp5g4ELj7rc1Ur9Sb7 Diff:
OldNewDifferences
9292 else false
9393
9494
95-func validUserData (caller,name,description,thumb,isAnUpdate) = {
96- let validCID = if ((size(thumb) != 0))
97- then validateCID(thumb)
98- else true
99- if (!(validCID))
100- then throw("CID don't match requirement!")
101- else if (if ((name == ""))
102- then true
103- else (description == ""))
104- then throw("Name and description cannot be empty")
105- else if ((size(description) > 600))
106- then throw("600 Char. max description")
107- else if ((size(name) > 45))
108- then throw("45 Char. max name")
109- else {
110- let status = getStringByKey(keyUserStatus(caller))
111- if (if ((status == userSuspended))
112- then true
113- else (status == userRemoved))
114- then throw("Account suspended/ removed.")
115- else if (if (!(isAnUpdate))
116- then (status == userRegistered)
117- else false)
118- then throw("Already registered")
119- else if (if (if (!(isAnUpdate))
120- then (status == "")
95+func validUserData (caller,name,description,thumb,isAnUpdate) = if (true)
96+ then throw(caller)
97+ else {
98+ let validCID = if ((size(thumb) != 0))
99+ then validateCID(thumb)
100+ else true
101+ if (!(validCID))
102+ then throw("CID don't match requirement!")
103+ else if (if ((name == ""))
104+ then true
105+ else (description == ""))
106+ then throw("Name and description cannot be empty")
107+ else if ((size(description) > 600))
108+ then throw("600 Char. max description")
109+ else if ((size(name) > 45))
110+ then throw("45 Char. max name")
111+ else {
112+ let status = getStringByKey(keyUserStatus(caller))
113+ if (if ((status == userSuspended))
114+ then true
115+ else (status == userRemoved))
116+ then throw("Account suspended/ removed.")
117+ else if (if (!(isAnUpdate))
118+ then (status == userRegistered)
121119 else false)
122- then whitelistedonly
123- else false)
124- then throw("Can't register, get approved first.")
125- else if (if (if (isAnUpdate)
120+ then throw("Already registered")
121+ else if (if (if (!(isAnUpdate))
126122 then (status == "")
127123 else false)
128- then true
129- else if (isAnUpdate)
130- then (status == userAllowed)
124+ then whitelistedonly
125+ else false)
126+ then throw("Can't register, get approved first.")
127+ else if (if (if (isAnUpdate)
128+ then (status == "")
131129 else false)
132- then throw("Register first")
133- else true
134- }
135- }
130+ then true
131+ else if (isAnUpdate)
132+ then (status == userAllowed)
133+ else false)
134+ then throw("Register first")
135+ else true
136+ }
137+ }
136138
137139
138140 func validateNewStatus (status,address,currentStatus) = {
177179
178180
179181 func getCaller (i,pubKey) = {
180- let caller = if ((toBase58String(i.caller.bytes) == toString(this)))
182+ let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
183+ then (size(i.payments) == 0)
184+ else false)
181185 then toString(addressFromPublicKey(fromBase58String(pubKey)))
182186 else toBase58String(i.caller.bytes)
183187 let get_sponsored_waves = if ((pubKey != ""))
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 validateCID (cid) = if (contains(cid, "/"))
8787 then if (if ((76 > size(cid)))
8888 then (size(split(cid, "/")[0]) == 59)
8989 else false)
9090 then (16 > size(split(cid, "/")[1]))
9191 else false
9292 else false
9393
9494
95-func validUserData (caller,name,description,thumb,isAnUpdate) = {
96- let validCID = if ((size(thumb) != 0))
97- then validateCID(thumb)
98- else true
99- if (!(validCID))
100- then throw("CID don't match requirement!")
101- else if (if ((name == ""))
102- then true
103- else (description == ""))
104- then throw("Name and description cannot be empty")
105- else if ((size(description) > 600))
106- then throw("600 Char. max description")
107- else if ((size(name) > 45))
108- then throw("45 Char. max name")
109- else {
110- let status = getStringByKey(keyUserStatus(caller))
111- if (if ((status == userSuspended))
112- then true
113- else (status == userRemoved))
114- then throw("Account suspended/ removed.")
115- else if (if (!(isAnUpdate))
116- then (status == userRegistered)
117- else false)
118- then throw("Already registered")
119- else if (if (if (!(isAnUpdate))
120- then (status == "")
95+func validUserData (caller,name,description,thumb,isAnUpdate) = if (true)
96+ then throw(caller)
97+ else {
98+ let validCID = if ((size(thumb) != 0))
99+ then validateCID(thumb)
100+ else true
101+ if (!(validCID))
102+ then throw("CID don't match requirement!")
103+ else if (if ((name == ""))
104+ then true
105+ else (description == ""))
106+ then throw("Name and description cannot be empty")
107+ else if ((size(description) > 600))
108+ then throw("600 Char. max description")
109+ else if ((size(name) > 45))
110+ then throw("45 Char. max name")
111+ else {
112+ let status = getStringByKey(keyUserStatus(caller))
113+ if (if ((status == userSuspended))
114+ then true
115+ else (status == userRemoved))
116+ then throw("Account suspended/ removed.")
117+ else if (if (!(isAnUpdate))
118+ then (status == userRegistered)
121119 else false)
122- then whitelistedonly
123- else false)
124- then throw("Can't register, get approved first.")
125- else if (if (if (isAnUpdate)
120+ then throw("Already registered")
121+ else if (if (if (!(isAnUpdate))
126122 then (status == "")
127123 else false)
128- then true
129- else if (isAnUpdate)
130- then (status == userAllowed)
124+ then whitelistedonly
125+ else false)
126+ then throw("Can't register, get approved first.")
127+ else if (if (if (isAnUpdate)
128+ then (status == "")
131129 else false)
132- then throw("Register first")
133- else true
134- }
135- }
130+ then true
131+ else if (isAnUpdate)
132+ then (status == userAllowed)
133+ else false)
134+ then throw("Register first")
135+ else true
136+ }
137+ }
136138
137139
138140 func validateNewStatus (status,address,currentStatus) = {
139141 let allStatus = [userVerified, userRegistered, userSuspended, userRemoved, userAllowed, userChangeRequired]
140142 let statusToSet = if (containsElement(allStatus, status))
141143 then status
142144 else if (if ((status == userReset))
143145 then (currentStatus == userAllowed)
144146 else false)
145147 then ""
146148 else throw("Unknown status")
147149 let userIsRegistered = getIntegerByKey(keyUserDate(address))
148150 if (if ((userIsRegistered == 0))
149151 then (statusToSet != userAllowed)
150152 else false)
151153 then throw("You cant set this status, user is not registered.")
152154 else if (if ((currentStatus == userAllowed))
153155 then (statusToSet == userAllowed)
154156 else false)
155157 then throw("User already allowed")
156158 else if (if ((currentStatus == userRegistered))
157159 then (statusToSet == userAllowed)
158160 else false)
159161 then throw("User already allowed & registered")
160162 else if (if ((currentStatus == userVerified))
161163 then (statusToSet == userAllowed)
162164 else false)
163165 then throw("User already allowed & verified")
164166 else statusToSet
165167 }
166168
167169
168170 func makeJSON (name,thumb,date) = (((((("{\"user_name\": \"" + name) + "\", \"user_thumb\":\"") + thumb) + "\",\"user_date\":\"") + date) + "\"}")
169171
170172
171173 func asString (bv) = match bv {
172174 case bv0: String =>
173175 bv0
174176 case _ =>
175177 throw("Sponsored Public Key String expected")
176178 }
177179
178180
179181 func getCaller (i,pubKey) = {
180- let caller = if ((toBase58String(i.caller.bytes) == toString(this)))
182+ let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
183+ then (size(i.payments) == 0)
184+ else false)
181185 then toString(addressFromPublicKey(fromBase58String(pubKey)))
182186 else toBase58String(i.caller.bytes)
183187 let get_sponsored_waves = if ((pubKey != ""))
184188 then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
185189 else unit
186190 if ((get_sponsored_waves == get_sponsored_waves))
187191 then caller
188192 else throw("Strict value is not equal to itself.")
189193 }
190194
191195
192196 @Callable(invoke)
193197 func setConf (key,val) = {
194198 let caller = toString(invoke.caller)
195199 if (containsElement([chris, toString(this)], caller))
196200 then [StringEntry(key, val)]
197201 else throw("You are not allowed to change this")
198202 }
199203
200204
201205
202206 @Callable(invoke)
203207 func appRunning (isLive,message) = {
204208 let caller = toString(invoke.caller)
205209 if (containsElement([chris, toString(this)], caller))
206210 then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
207211 else throw("You are not allowed to change this")
208212 }
209213
210214
211215
212216 @Callable(invoke)
213217 func registrationMode (WLonly) = {
214218 let caller = toString(invoke.caller)
215219 if (containsElement([chris, toString(this)], caller))
216220 then [BooleanEntry(whitelistedonlyKey, WLonly)]
217221 else throw("You are not allowed to change this")
218222 }
219223
220224
221225
222226 @Callable(invoke)
223227 func registerUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
224228 then throw(maintenanceMSG)
225229 else {
226230 let caller = getCaller(invoke, pubKey)
227231 let id = toBase58String(invoke.transactionId)
228232 let timestamp = lastBlock.timestamp
229233 if (!(validUserData(caller, name, description, thumb, false)))
230234 then throw("Something went wrong")
231235 else {
232236 let json = makeJSON(toBase64String(toBytes(name)), toBase64String(toBytes(thumb)), toString(timestamp))
233237 if (if ((0 > royalties))
234238 then true
235239 else (royalties > 1000))
236240 then throw("Royalties cannot be less than 0% or higher than 10%")
237241 else [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)]
238242 }
239243 }
240244
241245
242246
243247 @Callable(invoke)
244248 func updateUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
245249 then throw(maintenanceMSG)
246250 else {
247251 let caller = getCaller(invoke, pubKey)
248252 let status = getStringByKey(keyUserStatus(caller))
249253 if (!(validUserData(caller, name, description, thumb, true)))
250254 then throw("Something went wrong")
251255 else {
252256 let date = getIntegerByKey(keyUserDate(caller))
253257 let json = makeJSON(toBase64String(toBytes(name)), toBase64String(toBytes(thumb)), toString(date))
254258 if (if ((0 > royalties))
255259 then true
256260 else (royalties > 1000))
257261 then throw("Royalties cannot be less than 0% or higher than 10%")
258262 else [StringEntry(keyUserName(caller), name), StringEntry(keyUserDesc(caller), description), StringEntry(keyUserSocial(caller), social), StringEntry(keyUserThumb(caller), thumb), IntegerEntry(keyUserRoyalties(caller), royalties), StringEntry(((status + "_") + caller), json)]
259263 }
260264 }
261265
262266
263267
264268 @Callable(invoke)
265269 func setERC20User (erc20,pubKey) = if (!(dappRunning))
266270 then throw(maintenanceMSG)
267271 else {
268272 let caller = getCaller(invoke, pubKey)
269273 let status = getStringByKey(keyUserStatus(caller))
270274 if (if ((status != userRegistered))
271275 then (status != userVerified)
272276 else false)
273277 then throw("Not allowed to set ERC20 address")
274278 else {
275279 let firstTwo = take(erc20, 2)
276280 if (if ((firstTwo != "0x"))
277281 then true
278282 else (size(erc20) != 42))
279283 then throw("This is not an erc20 address")
280284 else [StringEntry(keyUserERC20(caller), erc20)]
281285 }
282286 }
283287
284288
285289
286290 @Callable(invoke)
287291 func changeUserStatus (address,status,note) = {
288292 let caller = toString(invoke.caller)
289293 let currentStatus = getStringByKey(keyUserStatus(address))
290294 let statusToSet = validateNewStatus(status, address, currentStatus)
291295 let name = toBase64String(toBytes(getStringByKey(keyUserName(address))))
292296 let thumb = toBase64String(toBytes(getStringByKey(keyUserThumb(address))))
293297 let date = getIntegerByKey(keyUserDate(address))
294298 let json = makeJSON(name, thumb, toString(date))
295299 if (containsElement([chris, toString(this)], caller))
296300 then [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), json), StringEntry(("user_note_" + address), note)]
297301 else throw("Not allowed to change user status")
298302 }
299303
300304
301305
302306 @Callable(invoke)
303307 func deleteUser (address) = {
304308 let caller = toString(invoke.caller)
305309 let currentStatus = getStringByKey(keyUserStatus(address))
306310 if (containsElement([chris, toString(this)], caller))
307311 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)]
308312 else throw("Not allowed")
309313 }
310314
311315
312316
313317 @Callable(i)
314318 func setAgent (artistAddr,agentAddr,primaryShare,secondaryShare) = if (!(dappRunning))
315319 then throw(maintenanceMSG)
316320 else {
317321 let caller = toString(i.caller)
318322 if (containsElement([chris, toString(this)], caller))
319323 then if (if ((size(artistAddr) != 35))
320324 then true
321325 else (size(agentAddr) != 35))
322326 then throw("Wrong address")
323327 else [StringEntry(keyArtistAgentAddr(artistAddr), agentAddr), StringEntry(keyAgentArtistAddr(agentAddr, artistAddr), artistAddr), IntegerEntry(keyPrimaryShare(artistAddr), primaryShare), IntegerEntry(keySecondaryShare(artistAddr), secondaryShare)]
324328 else throw("You are not allowed")
325329 }
326330
327331
328332
329333 @Callable(i)
330334 func unsetAgent (artistAddr,agentAddr) = if (!(dappRunning))
331335 then throw(maintenanceMSG)
332336 else {
333337 let caller = toString(i.caller)
334338 if (containsElement([chris, toString(this)], caller))
335339 then if (if ((size(artistAddr) != 35))
336340 then true
337341 else (size(agentAddr) != 35))
338342 then throw("Wrong address")
339343 else [DeleteEntry(keyArtistAgentAddr(artistAddr)), DeleteEntry(keyAgentArtistAddr(agentAddr, artistAddr)), DeleteEntry(keyPrimaryShare(artistAddr)), DeleteEntry(keySecondaryShare(artistAddr))]
340344 else throw("You are not allowed")
341345 }
342346
343347
344348
345349 @Callable(i)
346350 func deleteEntry (entry) = {
347351 let caller = toString(i.caller)
348352 if ((caller == chris))
349353 then [DeleteEntry(entry)]
350354 else throw("no")
351355 }
352356
353357
354358 @Verifier(tx)
355359 func verifier () = match tx {
356360 case inv: InvokeScriptTransaction =>
357361 if (if ((inv.function == "registerUser"))
358362 then (inv.dApp == this)
359363 else false)
360364 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[13])))
361365 else if (if ((inv.function == "updateUser"))
362366 then (inv.dApp == this)
363367 else false)
364368 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[12])))
365369 else if (if ((inv.function == "setERC20User"))
366370 then (inv.dApp == this)
367371 else false)
368372 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
369373 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
370374 case _ =>
371375 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
372376 }
373377

github/deemru/w8io/3ef1775 
58.10 ms