tx · BnduyS8akrEtfpDUXj7Bt8N76E6qe3qDu4u3h5F8oow3

3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj:  -0.01400000 Waves

2023.10.10 08:18 [2792101] smart account 3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj > SELF 0.00000000 Waves

{ "type": 13, "id": "BnduyS8akrEtfpDUXj7Bt8N76E6qe3qDu4u3h5F8oow3", "fee": 1400000, "feeAssetId": null, "timestamp": 1696915121661, "version": 2, "chainId": 84, "sender": "3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj", "senderPublicKey": "A2m227AHcq7gWfSU59Q3UJaqkEa7SccFYmJuWHbFrrKE", "proofs": [ "4b8ZBKTHKoxRGqXp7RZn22WwZUsV5T17PNdRxjRRjaczoAFWtE1Ge7uWyDLBwrwTEjLqRxW6hcLbADmv9HWGUMkv" ], "script": "base64:BgJTCAISBAoCCAgSBAoCBAgSAwoBBBIICgYICAgIAQgSCAoGCAgICAEIEgQKAggIEgoKCAgICAgBAQEBEgMKAQgSBwoFCAgBAQQSBQoDCAgEEgMKAQgvAAdWRVJTSU9OAgMxLjUBDmdldFN0cmluZ0J5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUDa2V5AgABD2dldEJvb2xlYW5CeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFA2tleQcBD2dldEludGVnZXJCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAAAAVjaHJpcwkBDmdldFN0cmluZ0J5S2V5AQIMY29uZl9hZG1pbl8xAA5kYXBwUnVubmluZ0tleQIUY29uZl9kYXBwX2lzX3J1bm5pbmcAEW1haW50ZW5hbmNlTVNHS2V5AhRjb25mX21haW50ZW5hbmNlX21zZwASd2hpdGVsaXN0ZWRvbmx5S2V5AhVjb25mX3doaXRlbGlzdGVkX29ubHkAC2RhcHBSdW5uaW5nCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDmRhcHBSdW5uaW5nS2V5BgAObWFpbnRlbmFuY2VNU0cJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwURbWFpbnRlbmFuY2VNU0dLZXkCAAAPd2hpdGVsaXN0ZWRvbmx5CQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFEndoaXRlbGlzdGVkb25seUtleQYADXdoaXRlbGlzdERhcHAJAQV2YWx1ZQEJAKYIAQkBDmdldFN0cmluZ0J5S2V5AQITY29uZl93aGl0ZWxpc3RfZGFwcAAIc2lnbkRhcHAJAQV2YWx1ZQEJAKYIAQkBDmdldFN0cmluZ0J5S2V5AQIRY29uZl9zaWdud2ViX2RhcHAAC3VzZXJBbGxvd2VkAgdBTExPV0VEAA51c2VyUmVnaXN0ZXJlZAIKUkVHSVNURVJFRAAMdXNlclZlcmlmaWVkAghWRVJJRklFRAANdXNlclN1c3BlbmRlZAIJU1VTUEVOREVEAAt1c2VyUmVtb3ZlZAIHUkVNT1ZFRAASdXNlckNoYW5nZVJlcXVpcmVkAg9DSEFOR0VfUkVRVUlSRUQAEHVzZXJVbnJlZ2lzdGVyZWQCDFVOUkVHSVNURVJFRAAJdXNlclJlc2V0AgVSRVNFVAELa2V5VXNlckFkZHIBBmNhbGxlcgkArAICAgV1c2VyXwUGY2FsbGVyAQtrZXlVc2VyTmFtZQEGY2FsbGVyCQCsAgICCnVzZXJfbmFtZV8FBmNhbGxlcgELa2V5VXNlckRlc2MBBmNhbGxlcgkArAICAgp1c2VyX2Rlc2NfBQZjYWxsZXIBDWtleVVzZXJTb2NpYWwBBmNhbGxlcgkArAICAgx1c2VyX3NvY2lhbF8FBmNhbGxlcgEMa2V5VXNlclRodW1iAQZjYWxsZXIJAKwCAgILdXNlcl90aHVtYl8FBmNhbGxlcgENa2V5VXNlclN0YXR1cwEGY2FsbGVyCQCsAgICDHVzZXJfc3RhdHVzXwUGY2FsbGVyARBrZXlVc2VyUm95YWx0aWVzAQZjYWxsZXIJAKwCAgIPdXNlcl9yb3lhbHRpZXNfBQZjYWxsZXIBC2tleVVzZXJEYXRlAQZjYWxsZXIJAKwCAgIKdXNlcl9kYXRlXwUGY2FsbGVyAQxrZXlVc2VyRVJDMjABBmNhbGxlcgkArAICAgt1c2VyX0VSQzIwXwUGY2FsbGVyAQtrZXlVc2VyTm90ZQEGY2FsbGVyCQCsAgICCnVzZXJfbm90ZV8FBmNhbGxlcgEMa2V5VXNlckxhYmVsAQZjYWxsZXIJAKwCAgILdXNlcl9sYWJlbF8FBmNhbGxlcgESa2V5QXJ0aXN0QWdlbnRBZGRyAQphcnRpc3RBZGRyCQCsAgICDWFydGlzdF9hZ2VudF8FCmFydGlzdEFkZHIBEmtleUFnZW50QXJ0aXN0QWRkcgIJYWdlbnRBZGRyCmFydGlzdEFkZHIJAKwCAgkArAICCQCsAgICBmFnZW50XwUJYWdlbnRBZGRyAgFfBQphcnRpc3RBZGRyARRrZXlQcmltYXJ5U2hhcmVBZ2VudAEKYXJ0aXN0QWRkcgkArAICAhVhcnRpc3RfYWdlbnRfcHJpbWFyeV8FCmFydGlzdEFkZHIBFmtleVNlY29uZGFyeVNoYXJlQWdlbnQBCmFydGlzdEFkZHIJAKwCAgIXYXJ0aXN0X2FnZW50X3NlY29uZGFyeV8FCmFydGlzdEFkZHIBGGtleUFydGlzdFB1YmxpY0FnZW50QWRkcgEKYXJ0aXN0QWRkcgkArAICAhRhcnRpc3RfcHVibGljX2FnZW50XwUKYXJ0aXN0QWRkcgEYa2V5UHVibGljQWdlbnRBcnRpc3RBZGRyAglhZ2VudEFkZHIKYXJ0aXN0QWRkcgkArAICCQCsAgIJAKwCAgINcHVibGljX2FnZW50XwUJYWdlbnRBZGRyAgFfBQphcnRpc3RBZGRyARprZXlQcmltYXJ5U2hhcmVQdWJsaWNBZ2VudAEKYXJ0aXN0QWRkcgkArAICAhxhcnRpc3RfcHVibGljX2FnZW50X3ByaW1hcnlfBQphcnRpc3RBZGRyARxrZXlTZWNvbmRhcnlTaGFyZVB1YmxpY0FnZW50AQphcnRpc3RBZGRyCQCsAgICHmFydGlzdF9wdWJsaWNfYWdlbnRfc2Vjb25kYXJ5XwUKYXJ0aXN0QWRkcgEOY2hlY2tXaGl0ZWxpc3QBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQ13aGl0ZWxpc3REYXBwBQNrZXkAAAELdmFsaWRhdGVDSUQBA2NpZAMJAQhjb250YWlucwIFA2NpZAIBLwMDCQBmAgBMCQCxAgEFA2NpZAkAAAIJALECAQkAkQMCCQC1CQIFA2NpZAIBLwAAADsHCQBmAgAQCQCxAgEJAJEDAgkAtQkCBQNjaWQCAS8AAQcHAQ12YWxpZFVzZXJEYXRhBQZjYWxsZXIEbmFtZQtkZXNjcmlwdGlvbgV0aHVtYgppc0FuVXBkYXRlBAh2YWxpZENJRAMJAQIhPQIJALECAQUFdGh1bWIAAAkBC3ZhbGlkYXRlQ0lEAQUFdGh1bWIGAwkBASEBBQh2YWxpZENJRAkAAgECHENJRCBkb24ndCBtYXRjaCByZXF1aXJlbWVudCEDAwkAAAIFBG5hbWUCAAYJAAACBQtkZXNjcmlwdGlvbgIACQACAQIkTmFtZSBhbmQgZGVzY3JpcHRpb24gY2Fubm90IGJlIGVtcHR5AwkAZgIJALECAQULZGVzY3JpcHRpb24A2AQJAAIBAhk2MDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAwkAZgIJALECAQUEbmFtZQAtCQACAQIRNDUgQ2hhci4gbWF4IG5hbWUEBnN0YXR1cwkBDmdldFN0cmluZ0J5S2V5AQkBDWtleVVzZXJTdGF0dXMBBQZjYWxsZXIDAwkAAAIFBnN0YXR1cwUNdXNlclN1c3BlbmRlZAYJAAACBQZzdGF0dXMFC3VzZXJSZW1vdmVkCQACAQIbQWNjb3VudCBzdXNwZW5kZWQvIHJlbW92ZWQuAwMJAQEhAQUKaXNBblVwZGF0ZQkAAAIFBnN0YXR1cwUOdXNlclJlZ2lzdGVyZWQHCQACAQISQWxyZWFkeSByZWdpc3RlcmVkAwMDCQEBIQEFCmlzQW5VcGRhdGUJAAACBQZzdGF0dXMCAAcFD3doaXRlbGlzdGVkb25seQcJAAIBAiNDYW4ndCByZWdpc3RlciwgZ2V0IGFwcHJvdmVkIGZpcnN0LgMDAwUKaXNBblVwZGF0ZQkAAAIFBnN0YXR1cwIABwYDBQppc0FuVXBkYXRlCQAAAgUGc3RhdHVzBQt1c2VyQWxsb3dlZAcJAAIBAg5SZWdpc3RlciBmaXJzdAYBEXZhbGlkYXRlTmV3U3RhdHVzAwZzdGF0dXMHYWRkcmVzcw1jdXJyZW50U3RhdHVzBAlhbGxTdGF0dXMJAMwIAgUMdXNlclZlcmlmaWVkCQDMCAIFDnVzZXJSZWdpc3RlcmVkCQDMCAIFDXVzZXJTdXNwZW5kZWQJAMwIAgULdXNlclJlbW92ZWQJAMwIAgULdXNlckFsbG93ZWQJAMwIAgUSdXNlckNoYW5nZVJlcXVpcmVkBQNuaWwEC3N0YXR1c1RvU2V0AwkBD2NvbnRhaW5zRWxlbWVudAIFCWFsbFN0YXR1cwUGc3RhdHVzBQZzdGF0dXMDAwkAAAIFBnN0YXR1cwUJdXNlclJlc2V0CQAAAgUNY3VycmVudFN0YXR1cwULdXNlckFsbG93ZWQHAgAJAAIBAg5Vbmtub3duIHN0YXR1cwQQdXNlcklzUmVnaXN0ZXJlZAkBD2dldEludGVnZXJCeUtleQEJAQtrZXlVc2VyRGF0ZQEFB2FkZHJlc3MDAwkAAAIFEHVzZXJJc1JlZ2lzdGVyZWQAAAkBAiE9AgULc3RhdHVzVG9TZXQFC3VzZXJBbGxvd2VkBwkAAgECMVlvdSBjYW50IHNldCB0aGlzIHN0YXR1cywgdXNlciBpcyBub3QgcmVnaXN0ZXJlZC4DAwkAAAIFDWN1cnJlbnRTdGF0dXMFC3VzZXJBbGxvd2VkCQAAAgULc3RhdHVzVG9TZXQFC3VzZXJBbGxvd2VkBwkAAgECFFVzZXIgYWxyZWFkeSBhbGxvd2VkAwMJAAACBQ1jdXJyZW50U3RhdHVzBQ51c2VyUmVnaXN0ZXJlZAkAAAIFC3N0YXR1c1RvU2V0BQt1c2VyQWxsb3dlZAcJAAIBAiFVc2VyIGFscmVhZHkgYWxsb3dlZCAmIHJlZ2lzdGVyZWQDAwkAAAIFDWN1cnJlbnRTdGF0dXMFDHVzZXJWZXJpZmllZAkAAAIFC3N0YXR1c1RvU2V0BQt1c2VyQWxsb3dlZAcJAAIBAh9Vc2VyIGFscmVhZHkgYWxsb3dlZCAmIHZlcmlmaWVkBQtzdGF0dXNUb1NldAEIbWFrZUpTT04DBG5hbWUFdGh1bWIEZGF0ZQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPeyJ1c2VyX25hbWUiOiAiBQRuYW1lAhEiLCAidXNlcl90aHVtYiI6IgUFdGh1bWICDyIsInVzZXJfZGF0ZSI6IgUEZGF0ZQICIn0BCGFzU3RyaW5nAQJidgQHJG1hdGNoMAUCYnYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBANidjAFByRtYXRjaDAFA2J2MAkAAgECJFNwb25zb3JlZCBQdWJsaWMgS2V5IFN0cmluZyBleHBlY3RlZAEJZ2V0Q2FsbGVyAgFpBnB1YktleQQLaXNTcG9uc29yZWQDCQECIT0CBQZwdWJLZXkCAAkBC3ZhbHVlT3JFbHNlAgkBDmNoZWNrV2hpdGVsaXN0AQkArAICCQClCAEJAKcIAQkA2QQBBQZwdWJLZXkCCV9mcmVlX3R4cwAAAAAEBmNhbGxlcgMDCQAAAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQClCAEFBHRoaXMJAGYCBQtpc1Nwb25zb3JlZAAABwkApQgBCQCnCAEJANkEAQUGcHViS2V5CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEE2dldF9zcG9uc29yZWRfd2F2ZXMDAwkBAiE9AgUGcHViS2V5AgAJAGYCBQtpc1Nwb25zb3JlZAAABwkA/AcEBQ13aGl0ZWxpc3REYXBwAgl1c2VGcmVlVHgJAMwIAgkApQgBCQCnCAEJANkEAQUGcHViS2V5BQNuaWwFA25pbAUEdW5pdAMJAAACBRNnZXRfc3BvbnNvcmVkX3dhdmVzBRNnZXRfc3BvbnNvcmVkX3dhdmVzCQCUCgIFBmNhbGxlcgkAZgIFC2lzU3BvbnNvcmVkAAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4LBmludm9rZQEHc2V0Q29uZgIDa2V5A3ZhbAQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCBQNrZXkFA3ZhbAUDbmlsCQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwZpbnZva2UBCmFwcFJ1bm5pbmcCBmlzTGl2ZQdtZXNzYWdlBAZjYWxsZXIJAKUIAQgFBmludm9rZQZjYWxsZXIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyCQDMCAIJAQxCb29sZWFuRW50cnkCBQ5kYXBwUnVubmluZ0tleQUGaXNMaXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIFEW1haW50ZW5hbmNlTVNHS2V5BQdtZXNzYWdlBQNuaWwJAAIBAiJZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGlzBmludm9rZQEQcmVnaXN0cmF0aW9uTW9kZQEGV0xvbmx5BAZjYWxsZXIJAKUIAQgFBmludm9rZQZjYWxsZXIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyCQDMCAIJAQxCb29sZWFuRW50cnkCBRJ3aGl0ZWxpc3RlZG9ubHlLZXkFBldMb25seQUDbmlsCQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwZpbnZva2UBDHJlZ2lzdGVyVXNlcgYEbmFtZQtkZXNjcmlwdGlvbgV0aHVtYgZzb2NpYWwJcm95YWx0aWVzBnB1YktleQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQLJHQwNzkxODc5NzAJAQlnZXRDYWxsZXICBQZpbnZva2UFBnB1YktleQQGY2FsbGVyCAULJHQwNzkxODc5NzACXzEEC2lzU3BvbnNvcmVkCAULJHQwNzkxODc5NzACXzIEAmlkCQDYBAEIBQZpbnZva2UNdHJhbnNhY3Rpb25JZAQJdGltZXN0YW1wCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQEbm90ZQkBDmdldFN0cmluZ0J5S2V5AQkBC2tleVVzZXJOb3RlAQUGY2FsbGVyBAVsYWJlbAkBDmdldFN0cmluZ0J5S2V5AQkBDGtleVVzZXJMYWJlbAEFBmNhbGxlcgMJAQEhAQkBDXZhbGlkVXNlckRhdGEFBQZjYWxsZXIFBG5hbWUFC2Rlc2NyaXB0aW9uBQV0aHVtYgcJAAIBAhRTb21ldGhpbmcgd2VudCB3cm9uZwQEanNvbgkBCG1ha2VKU09OAwkA2gQBCQCbAwEFBG5hbWUJANoEAQkAmwMBBQV0aHVtYgkApAMBBQl0aW1lc3RhbXADAwkAZgIAAAUJcm95YWx0aWVzBgkAZgIFCXJveWFsdGllcwDoBwkAAgECM1JveWFsdGllcyBjYW5ub3QgYmUgbGVzcyB0aGFuIDAlIG9yIGhpZ2hlciB0aGFuIDEwJQQKdHhUb0NhbGxlcgMFC2lzU3BvbnNvcmVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAAUEdW5pdAUDbmlsBQNuaWwJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBC2tleVVzZXJEYXRlAQUGY2FsbGVyBQl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleVVzZXJBZGRyAQUGY2FsbGVyCQCsAgIJAKwCAgUCaWQCAV8JAKQDAQUJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlVc2VyTmFtZQEFBmNhbGxlcgUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5VXNlckRlc2MBBQZjYWxsZXIFC2Rlc2NyaXB0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlVc2VyU29jaWFsAQUGY2FsbGVyBQZzb2NpYWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleVVzZXJUaHVtYgEFBmNhbGxlcgUFdGh1bWIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVVzZXJTdGF0dXMBBQZjYWxsZXIFDnVzZXJSZWdpc3RlcmVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQa2V5VXNlclJveWFsdGllcwEFBmNhbGxlcgUJcm95YWx0aWVzCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgIIQUxMT1dFRF8FBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUOdXNlclJlZ2lzdGVyZWQCAV8FBmNhbGxlcgUEanNvbgkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5VXNlck5vdGUBBQZjYWxsZXIFBG5vdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleVVzZXJMYWJlbAEFBmNhbGxlcgUFbGFiZWwFA25pbAUKdHhUb0NhbGxlcgZpbnZva2UBCnVwZGF0ZVVzZXIGBG5hbWULZGVzY3JpcHRpb24FdGh1bWIGc29jaWFsCXJveWFsdGllcwZwdWJLZXkDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cECyR0MDk2NTU5NzU5CQEJZ2V0Q2FsbGVyAgUGaW52b2tlBQZwdWJLZXkEBmNhbGxlcggFCyR0MDk2NTU5NzU5Al8xBAtpc1Nwb25zb3JlZAgFCyR0MDk2NTU5NzU5Al8yBAZzdGF0dXMJAQ5nZXRTdHJpbmdCeUtleQEJAQ1rZXlVc2VyU3RhdHVzAQUGY2FsbGVyAwkBASEBCQENdmFsaWRVc2VyRGF0YQUFBmNhbGxlcgUEbmFtZQULZGVzY3JpcHRpb24FBXRodW1iBgkAAgECFFNvbWV0aGluZyB3ZW50IHdyb25nBARkYXRlCQEPZ2V0SW50ZWdlckJ5S2V5AQkBC2tleVVzZXJEYXRlAQUGY2FsbGVyBARqc29uCQEIbWFrZUpTT04DCQDaBAEJAJsDAQUEbmFtZQkA2gQBCQCbAwEFBXRodW1iCQCkAwEFBGRhdGUDAwkAZgIAAAUJcm95YWx0aWVzBgkAZgIFCXJveWFsdGllcwDoBwkAAgECM1JveWFsdGllcyBjYW5ub3QgYmUgbGVzcyB0aGFuIDAlIG9yIGhpZ2hlciB0aGFuIDEwJQQKdHhUb0NhbGxlcgMFC2lzU3BvbnNvcmVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAAUEdW5pdAUDbmlsBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5VXNlck5hbWUBBQZjYWxsZXIFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleVVzZXJEZXNjAQUGY2FsbGVyBQtkZXNjcmlwdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VXNlclNvY2lhbAEFBmNhbGxlcgUGc29jaWFsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlVc2VyVGh1bWIBBQZjYWxsZXIFBXRodW1iCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQa2V5VXNlclJveWFsdGllcwEFBmNhbGxlcgUJcm95YWx0aWVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQZzdGF0dXMCAV8FBmNhbGxlcgUEanNvbgUDbmlsBQp0eFRvQ2FsbGVyBmludm9rZQEMc2V0RVJDMjBVc2VyAgVlcmMyMAZwdWJLZXkDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cEDSR0MDEwOTQ2MTEwNDkJAQlnZXRDYWxsZXICBQZpbnZva2UFBnB1YktleQQGY2FsbGVyCAUNJHQwMTA5NDYxMTA0OQJfMQQLaXNTcG9uc29yZWQIBQ0kdDAxMDk0NjExMDQ5Al8yBAZzdGF0dXMJAQ5nZXRTdHJpbmdCeUtleQEJAQ1rZXlVc2VyU3RhdHVzAQUGY2FsbGVyAwMJAQIhPQIFBnN0YXR1cwUOdXNlclJlZ2lzdGVyZWQJAQIhPQIFBnN0YXR1cwUMdXNlclZlcmlmaWVkBwkAAgECIE5vdCBhbGxvd2VkIHRvIHNldCBFUkMyMCBhZGRyZXNzBAhmaXJzdFR3bwkArwICBQVlcmMyMAACAwMJAQIhPQIFCGZpcnN0VHdvAgIweAYJAQIhPQIJALECAQUFZXJjMjAAKgkAAgECHFRoaXMgaXMgbm90IGFuIGVyYzIwIGFkZHJlc3MECnR4VG9DYWxsZXIDBQtpc1Nwb25zb3JlZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAAFBHVuaXQFA25pbAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleVVzZXJFUkMyMAEFBmNhbGxlcgUFZXJjMjAFA25pbAUKdHhUb0NhbGxlcgZpbnZva2UBEGNoYW5nZVVzZXJTdGF0dXMIB2FkZHJlc3MGc3RhdHVzBG5vdGUFbGFiZWwRd2xfY2VydGlmaWNhdGlvbnMGd2xfdHhzCHdsX2Ryb3BzDndsX2NvbW1pc3Npb25zBAZjYWxsZXIJAKUIAQgFBmludm9rZQZjYWxsZXIDCQAAAgkAsQIBBQdhZGRyZXNzAAAJAAIBAhdBZGRyZXNzIGNhbm5vdCBiZSBlbXB0eQQLY3VycmVudE5vdGUJAQ5nZXRTdHJpbmdCeUtleQEJAQtrZXlVc2VyTm90ZQEFB2FkZHJlc3MEDGN1cnJlbnRMYWJlbAkBDmdldFN0cmluZ0J5S2V5AQkBDGtleVVzZXJMYWJlbAEFB2FkZHJlc3MECW5vdGVUb1VzZQMDCQECIT0CCQCxAgEFBG5vdGUAAAkBAiE9AgUEbm90ZQIBLgcFBG5vdGUDCQAAAgUEbm90ZQIBLgIABQtjdXJyZW50Tm90ZQQKbGFiZWxUb1VzZQMDCQECIT0CCQCxAgEFBWxhYmVsAAAJAQIhPQIFBWxhYmVsAgEuBwUFbGFiZWwDCQAAAgUFbGFiZWwCAS4CAAUMY3VycmVudExhYmVsAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgQTZnJlZV9jZXJ0aWZpY2F0aW9ucwMJAQIhPQIFEXdsX2NlcnRpZmljYXRpb25zAAAJAPwHBAUIc2lnbkRhcHACG3doaXRlbGlzdEZyZWVDZXJ0aWZpY2F0aW9ucwkAzAgCBQdhZGRyZXNzCQDMCAIFEXdsX2NlcnRpZmljYXRpb25zCQDMCAIGBQNuaWwFA25pbAUDbmlsAwkAAAIFE2ZyZWVfY2VydGlmaWNhdGlvbnMFE2ZyZWVfY2VydGlmaWNhdGlvbnMECGZyZWVfdHhzAwkBAiE9AgUGd2xfdHhzAAAJAPwHBAUNd2hpdGVsaXN0RGFwcAIQd2hpdGVsaXN0RnJlZVR4cwkAzAgCBQdhZGRyZXNzCQDMCAIFBndsX3R4cwkAzAgCBgUDbmlsBQNuaWwFA25pbAMJAAACBQhmcmVlX3R4cwUIZnJlZV90eHMECmZyZWVfZHJvcHMDCQECIT0CBQh3bF9kcm9wcwAACQD8BwQFDXdoaXRlbGlzdERhcHACEXdoaXRlbGlzdEZyZWVEcm9wCQDMCAIFB2FkZHJlc3MJAMwIAgUId2xfZHJvcHMJAMwIAgYFA25pbAUDbmlsBQNuaWwDCQAAAgUKZnJlZV9kcm9wcwUKZnJlZV9kcm9wcwQQZnJlZV9jb21taXNzaW9ucwMJAQIhPQIFDndsX2NvbW1pc3Npb25zAAAJAPwHBAUNd2hpdGVsaXN0RGFwcAIJd2hpdGVsaXN0CQDMCAIFB2FkZHJlc3MJAMwIAgUOd2xfY29tbWlzc2lvbnMFA25pbAUDbmlsBQNuaWwDCQAAAgUQZnJlZV9jb21taXNzaW9ucwUQZnJlZV9jb21taXNzaW9ucwQNY3VycmVudFN0YXR1cwkBDmdldFN0cmluZ0J5S2V5AQkBDWtleVVzZXJTdGF0dXMBBQdhZGRyZXNzAwkAAAIJALECAQUGc3RhdHVzAAADCQAAAgUNY3VycmVudFN0YXR1cwIACQACAQIXVXNlciBoYXZlIG5vIHN0YXR1cyB5ZXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleVVzZXJOb3RlAQUHYWRkcmVzcwUJbm90ZVRvVXNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlVc2VyTGFiZWwBBQdhZGRyZXNzBQpsYWJlbFRvVXNlBQNuaWwEC3N0YXR1c1RvU2V0CQERdmFsaWRhdGVOZXdTdGF0dXMDBQZzdGF0dXMFB2FkZHJlc3MFDWN1cnJlbnRTdGF0dXMEBG5hbWUJANoEAQkAmwMBCQEOZ2V0U3RyaW5nQnlLZXkBCQELa2V5VXNlck5hbWUBBQdhZGRyZXNzBAV0aHVtYgkA2gQBCQCbAwEJAQ5nZXRTdHJpbmdCeUtleQEJAQxrZXlVc2VyVGh1bWIBBQdhZGRyZXNzBARkYXRlCQEPZ2V0SW50ZWdlckJ5S2V5AQkBC2tleVVzZXJEYXRlAQUHYWRkcmVzcwQEanNvbgkBCG1ha2VKU09OAwUEbmFtZQUFdGh1bWIJAKQDAQUEZGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VXNlclN0YXR1cwEFB2FkZHJlc3MFC3N0YXR1c1RvU2V0CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICBQ1jdXJyZW50U3RhdHVzAgFfBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQtzdGF0dXNUb1NldAIBXwUHYWRkcmVzcwUEanNvbgkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5VXNlck5vdGUBBQdhZGRyZXNzBQlub3RlVG9Vc2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleVVzZXJMYWJlbAEFB2FkZHJlc3MFCmxhYmVsVG9Vc2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECIU5vdCBhbGxvd2VkIHRvIGNoYW5nZSB1c2VyIHN0YXR1cwZpbnZva2UBCmRlbGV0ZVVzZXIBB2FkZHJlc3MEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgQNY3VycmVudFN0YXR1cwkBDmdldFN0cmluZ0J5S2V5AQkBDWtleVVzZXJTdGF0dXMBBQdhZGRyZXNzAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5VXNlckRhdGUBBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlVc2VyQWRkcgEFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleVVzZXJOYW1lAQUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5VXNlckRlc2MBBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlVc2VyU29jaWFsAQUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5VXNlclRodW1iAQUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICCnVzZXJfbm90ZV8FB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIFDWN1cnJlbnRTdGF0dXMCAV8FB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEGtleVVzZXJSb3lhbHRpZXMBBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlVc2VyU3RhdHVzAQUHYWRkcmVzcwULdXNlclJlbW92ZWQFA25pbAkAAgECC05vdCBhbGxvd2VkAWkBCHNldEFnZW50BQphcnRpc3RBZGRyCWFnZW50QWRkcgxwcmltYXJ5U2hhcmUOc2Vjb25kYXJ5U2hhcmUJYXNQYXJ0bmVyAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBAZjYWxsZXIJAKUIAQgFAWkGY2FsbGVyAwMJAGYCAAAFDHByaW1hcnlTaGFyZQYJAGYCBQxwcmltYXJ5U2hhcmUAiCcJAAIBAjxQcmltYXJ5IGNvbW1pc3Npb24gY2Fubm90IGJlIGxlc3MgdGhhbiAwJSBvciBoaWdoZXIgdGhhbiA1MCUDAwkAZgIAAAUOc2Vjb25kYXJ5U2hhcmUGCQBmAgUOc2Vjb25kYXJ5U2hhcmUAiCcJAAIBAj5TZWNvbmRhcnkgY29tbWlzc2lvbiBjYW5ub3QgYmUgbGVzcyB0aGFuIDAlIG9yIGhpZ2hlciB0aGFuIDUwJQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDAwkBAiE9AgkAsQIBBQphcnRpc3RBZGRyACMGCQECIT0CCQCxAgEFCWFnZW50QWRkcgAjCQACAQINV3JvbmcgYWRkcmVzcwMDCQECIT0CCQEOZ2V0U3RyaW5nQnlLZXkBCQESa2V5QXJ0aXN0QWdlbnRBZGRyAQUKYXJ0aXN0QWRkcgIABgkBAiE9AgkBDmdldFN0cmluZ0J5S2V5AQkBGGtleUFydGlzdFB1YmxpY0FnZW50QWRkcgEFCmFydGlzdEFkZHICAAkAAgECHlVuc2V0IGFnZW50IGZpcnN0IHRvIGNoYW5nZSBpdAMFCWFzUGFydG5lcgkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5QXJ0aXN0QWdlbnRBZGRyAQUKYXJ0aXN0QWRkcgUJYWdlbnRBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARJrZXlBZ2VudEFydGlzdEFkZHICBQlhZ2VudEFkZHIFCmFydGlzdEFkZHIFCmFydGlzdEFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARRrZXlQcmltYXJ5U2hhcmVBZ2VudAEFCmFydGlzdEFkZHIFDHByaW1hcnlTaGFyZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVNlY29uZGFyeVNoYXJlQWdlbnQBBQphcnRpc3RBZGRyBQ5zZWNvbmRhcnlTaGFyZQUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJARhrZXlBcnRpc3RQdWJsaWNBZ2VudEFkZHIBBQphcnRpc3RBZGRyBQlhZ2VudEFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGGtleVB1YmxpY0FnZW50QXJ0aXN0QWRkcgIFCWFnZW50QWRkcgUKYXJ0aXN0QWRkcgUKYXJ0aXN0QWRkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmtleVByaW1hcnlTaGFyZVB1YmxpY0FnZW50AQUKYXJ0aXN0QWRkcgUMcHJpbWFyeVNoYXJlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEca2V5U2Vjb25kYXJ5U2hhcmVQdWJsaWNBZ2VudAEFCmFydGlzdEFkZHIFDnNlY29uZGFyeVNoYXJlBQNuaWwJAAIBAhNZb3UgYXJlIG5vdCBhbGxvd2VkAWkBCnVuc2V0QWdlbnQDCmFydGlzdEFkZHIJYWdlbnRBZGRyCWFzUGFydG5lcgMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQGY2FsbGVyCQClCAEIBQFpBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDAwkBAiE9AgkAsQIBBQphcnRpc3RBZGRyACMGCQECIT0CCQCxAgEFCWFnZW50QWRkcgAjCQACAQINV3JvbmcgYWRkcmVzcwMFCWFzUGFydG5lcgkAzAgCCQELRGVsZXRlRW50cnkBCQESa2V5QXJ0aXN0QWdlbnRBZGRyAQUKYXJ0aXN0QWRkcgkAzAgCCQELRGVsZXRlRW50cnkBCQESa2V5QWdlbnRBcnRpc3RBZGRyAgUJYWdlbnRBZGRyBQphcnRpc3RBZGRyCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlQcmltYXJ5U2hhcmVBZ2VudAEFCmFydGlzdEFkZHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVNlY29uZGFyeVNoYXJlQWdlbnQBBQphcnRpc3RBZGRyBQNuaWwJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGGtleUFydGlzdFB1YmxpY0FnZW50QWRkcgEFCmFydGlzdEFkZHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGGtleVB1YmxpY0FnZW50QXJ0aXN0QWRkcgIFCWFnZW50QWRkcgUKYXJ0aXN0QWRkcgkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5UHJpbWFyeVNoYXJlUHVibGljQWdlbnQBBQphcnRpc3RBZGRyCQDMCAIJAQtEZWxldGVFbnRyeQEJARxrZXlTZWNvbmRhcnlTaGFyZVB1YmxpY0FnZW50AQUKYXJ0aXN0QWRkcgUDbmlsCQACAQITWW91IGFyZSBub3QgYWxsb3dlZAFpAQtkZWxldGVFbnRyeQEFZW50cnkEBmNhbGxlcgkApQgBCAUBaQZjYWxsZXIDCQAAAgUGY2FsbGVyBQVjaHJpcwkAzAgCCQELRGVsZXRlRW50cnkBBQVlbnRyeQUDbmlsCQACAQICbm8BAnR4AQh2ZXJpZmllcgAEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBANpbnYFByRtYXRjaDADAwMDCQAAAggFA2ludghmdW5jdGlvbgIMcmVnaXN0ZXJVc2VyCQAAAggFA2ludgRkQXBwBQR0aGlzBwkAAAIIBQNpbnYDZmVlAKDCHgcJAAACCAUDaW52CmZlZUFzc2V0SWQFBHVuaXQHCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQDZBAEJAQhhc1N0cmluZwEJAJEDAggFA2ludgRhcmdzAAUDAwMDCQAAAggFA2ludghmdW5jdGlvbgIKdXBkYXRlVXNlcgkAAAIIBQNpbnYEZEFwcAUEdGhpcwcJAAACCAUDaW52A2ZlZQCgwh4HCQAAAggFA2ludgpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQEIYXNTdHJpbmcBCQCRAwIIBQNpbnYEYXJncwAFAwMDAwkAAAIIBQNpbnYIZnVuY3Rpb24CDHNldEVSQzIwVXNlcgkAAAIIBQNpbnYEZEFwcAUEdGhpcwcJAAACCAUDaW52A2ZlZQCgwh4HCQAAAggFA2ludgpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQEIYXNTdHJpbmcBCQCRAwIIBQNpbnYEYXJncwABCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5CQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5pF7OiA==", "height": 2792101, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9wVK3nV4LVK1TVRfuhUndGB4S5MFdpECCT6Yi98wFuPm Next: none Diff:
OldNewDifferences
344344 else {
345345 let currentNote = getStringByKey(keyUserNote(address))
346346 let currentLabel = getStringByKey(keyUserLabel(address))
347- let noteToUse = if ((size(note) != 0))
347+ let noteToUse = if (if ((size(note) != 0))
348+ then (note != ".")
349+ else false)
348350 then note
349- else currentNote
350- let labelToUse = if ((size(label) != 0))
351+ else if ((note == "."))
352+ then ""
353+ else currentNote
354+ let labelToUse = if (if ((size(label) != 0))
355+ then (label != ".")
356+ else false)
351357 then label
352- else currentLabel
358+ else if ((label == "."))
359+ then ""
360+ else currentLabel
353361 if (containsElement([chris, toString(this)], caller))
354362 then {
355363 let free_certifications = if ((wl_certifications != 0))
429437 then true
430438 else (size(agentAddr) != 35))
431439 then throw("Wrong address")
432- else if (asPartner)
433- then [StringEntry(keyArtistAgentAddr(artistAddr), agentAddr), StringEntry(keyAgentArtistAddr(agentAddr, artistAddr), artistAddr), IntegerEntry(keyPrimaryShareAgent(artistAddr), primaryShare), IntegerEntry(keySecondaryShareAgent(artistAddr), secondaryShare)]
434- else [StringEntry(keyArtistPublicAgentAddr(artistAddr), agentAddr), StringEntry(keyPublicAgentArtistAddr(agentAddr, artistAddr), artistAddr), IntegerEntry(keyPrimarySharePublicAgent(artistAddr), primaryShare), IntegerEntry(keySecondarySharePublicAgent(artistAddr), secondaryShare)]
440+ else if (if ((getStringByKey(keyArtistAgentAddr(artistAddr)) != ""))
441+ then true
442+ else (getStringByKey(keyArtistPublicAgentAddr(artistAddr)) != ""))
443+ then throw("Unset agent first to change it")
444+ else if (asPartner)
445+ then [StringEntry(keyArtistAgentAddr(artistAddr), agentAddr), StringEntry(keyAgentArtistAddr(agentAddr, artistAddr), artistAddr), IntegerEntry(keyPrimaryShareAgent(artistAddr), primaryShare), IntegerEntry(keySecondaryShareAgent(artistAddr), secondaryShare)]
446+ else [StringEntry(keyArtistPublicAgentAddr(artistAddr), agentAddr), StringEntry(keyPublicAgentArtistAddr(agentAddr, artistAddr), artistAddr), IntegerEntry(keyPrimarySharePublicAgent(artistAddr), primaryShare), IntegerEntry(keySecondarySharePublicAgent(artistAddr), secondaryShare)]
435447 else throw("You are not allowed")
436448 }
437449
490502 else false)
491503 then (inv.feeAssetId == unit)
492504 else false)
493- then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[2])))
505+ then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[1])))
494506 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
495507 case _ =>
496508 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 signDapp = value(addressFromString(getStringByKey("conf_signweb_dapp")))
3232
3333 let userAllowed = "ALLOWED"
3434
3535 let userRegistered = "REGISTERED"
3636
3737 let userVerified = "VERIFIED"
3838
3939 let userSuspended = "SUSPENDED"
4040
4141 let userRemoved = "REMOVED"
4242
4343 let userChangeRequired = "CHANGE_REQUIRED"
4444
4545 let userUnregistered = "UNREGISTERED"
4646
4747 let userReset = "RESET"
4848
4949 func keyUserAddr (caller) = ("user_" + caller)
5050
5151
5252 func keyUserName (caller) = ("user_name_" + caller)
5353
5454
5555 func keyUserDesc (caller) = ("user_desc_" + caller)
5656
5757
5858 func keyUserSocial (caller) = ("user_social_" + caller)
5959
6060
6161 func keyUserThumb (caller) = ("user_thumb_" + caller)
6262
6363
6464 func keyUserStatus (caller) = ("user_status_" + caller)
6565
6666
6767 func keyUserRoyalties (caller) = ("user_royalties_" + caller)
6868
6969
7070 func keyUserDate (caller) = ("user_date_" + caller)
7171
7272
7373 func keyUserERC20 (caller) = ("user_ERC20_" + caller)
7474
7575
7676 func keyUserNote (caller) = ("user_note_" + caller)
7777
7878
7979 func keyUserLabel (caller) = ("user_label_" + caller)
8080
8181
8282 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
8383
8484
8585 func keyAgentArtistAddr (agentAddr,artistAddr) = ((("agent_" + agentAddr) + "_") + artistAddr)
8686
8787
8888 func keyPrimaryShareAgent (artistAddr) = ("artist_agent_primary_" + artistAddr)
8989
9090
9191 func keySecondaryShareAgent (artistAddr) = ("artist_agent_secondary_" + artistAddr)
9292
9393
9494 func keyArtistPublicAgentAddr (artistAddr) = ("artist_public_agent_" + artistAddr)
9595
9696
9797 func keyPublicAgentArtistAddr (agentAddr,artistAddr) = ((("public_agent_" + agentAddr) + "_") + artistAddr)
9898
9999
100100 func keyPrimarySharePublicAgent (artistAddr) = ("artist_public_agent_primary_" + artistAddr)
101101
102102
103103 func keySecondarySharePublicAgent (artistAddr) = ("artist_public_agent_secondary_" + artistAddr)
104104
105105
106106 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
107107
108108
109109 func validateCID (cid) = if (contains(cid, "/"))
110110 then if (if ((76 > size(cid)))
111111 then (size(split(cid, "/")[0]) == 59)
112112 else false)
113113 then (16 > size(split(cid, "/")[1]))
114114 else false
115115 else false
116116
117117
118118 func validUserData (caller,name,description,thumb,isAnUpdate) = {
119119 let validCID = if ((size(thumb) != 0))
120120 then validateCID(thumb)
121121 else true
122122 if (!(validCID))
123123 then throw("CID don't match requirement!")
124124 else if (if ((name == ""))
125125 then true
126126 else (description == ""))
127127 then throw("Name and description cannot be empty")
128128 else if ((size(description) > 600))
129129 then throw("600 Char. max description")
130130 else if ((size(name) > 45))
131131 then throw("45 Char. max name")
132132 else {
133133 let status = getStringByKey(keyUserStatus(caller))
134134 if (if ((status == userSuspended))
135135 then true
136136 else (status == userRemoved))
137137 then throw("Account suspended/ removed.")
138138 else if (if (!(isAnUpdate))
139139 then (status == userRegistered)
140140 else false)
141141 then throw("Already registered")
142142 else if (if (if (!(isAnUpdate))
143143 then (status == "")
144144 else false)
145145 then whitelistedonly
146146 else false)
147147 then throw("Can't register, get approved first.")
148148 else if (if (if (isAnUpdate)
149149 then (status == "")
150150 else false)
151151 then true
152152 else if (isAnUpdate)
153153 then (status == userAllowed)
154154 else false)
155155 then throw("Register first")
156156 else true
157157 }
158158 }
159159
160160
161161 func validateNewStatus (status,address,currentStatus) = {
162162 let allStatus = [userVerified, userRegistered, userSuspended, userRemoved, userAllowed, userChangeRequired]
163163 let statusToSet = if (containsElement(allStatus, status))
164164 then status
165165 else if (if ((status == userReset))
166166 then (currentStatus == userAllowed)
167167 else false)
168168 then ""
169169 else throw("Unknown status")
170170 let userIsRegistered = getIntegerByKey(keyUserDate(address))
171171 if (if ((userIsRegistered == 0))
172172 then (statusToSet != userAllowed)
173173 else false)
174174 then throw("You cant set this status, user is not registered.")
175175 else if (if ((currentStatus == userAllowed))
176176 then (statusToSet == userAllowed)
177177 else false)
178178 then throw("User already allowed")
179179 else if (if ((currentStatus == userRegistered))
180180 then (statusToSet == userAllowed)
181181 else false)
182182 then throw("User already allowed & registered")
183183 else if (if ((currentStatus == userVerified))
184184 then (statusToSet == userAllowed)
185185 else false)
186186 then throw("User already allowed & verified")
187187 else statusToSet
188188 }
189189
190190
191191 func makeJSON (name,thumb,date) = (((((("{\"user_name\": \"" + name) + "\", \"user_thumb\":\"") + thumb) + "\",\"user_date\":\"") + date) + "\"}")
192192
193193
194194 func asString (bv) = match bv {
195195 case bv0: String =>
196196 bv0
197197 case _ =>
198198 throw("Sponsored Public Key String expected")
199199 }
200200
201201
202202 func getCaller (i,pubKey) = {
203203 let isSponsored = if ((pubKey != ""))
204204 then valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
205205 else 0
206206 let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
207207 then (isSponsored > 0)
208208 else false)
209209 then toString(addressFromPublicKey(fromBase58String(pubKey)))
210210 else toBase58String(i.caller.bytes)
211211 let get_sponsored_waves = if (if ((pubKey != ""))
212212 then (isSponsored > 0)
213213 else false)
214214 then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
215215 else unit
216216 if ((get_sponsored_waves == get_sponsored_waves))
217217 then $Tuple2(caller, (isSponsored > 0))
218218 else throw("Strict value is not equal to itself.")
219219 }
220220
221221
222222 @Callable(invoke)
223223 func setConf (key,val) = {
224224 let caller = toString(invoke.caller)
225225 if (containsElement([chris, toString(this)], caller))
226226 then [StringEntry(key, val)]
227227 else throw("You are not allowed to change this")
228228 }
229229
230230
231231
232232 @Callable(invoke)
233233 func appRunning (isLive,message) = {
234234 let caller = toString(invoke.caller)
235235 if (containsElement([chris, toString(this)], caller))
236236 then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
237237 else throw("You are not allowed to change this")
238238 }
239239
240240
241241
242242 @Callable(invoke)
243243 func registrationMode (WLonly) = {
244244 let caller = toString(invoke.caller)
245245 if (containsElement([chris, toString(this)], caller))
246246 then [BooleanEntry(whitelistedonlyKey, WLonly)]
247247 else throw("You are not allowed to change this")
248248 }
249249
250250
251251
252252 @Callable(invoke)
253253 func registerUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
254254 then throw(maintenanceMSG)
255255 else {
256256 let $t079187970 = getCaller(invoke, pubKey)
257257 let caller = $t079187970._1
258258 let isSponsored = $t079187970._2
259259 let id = toBase58String(invoke.transactionId)
260260 let timestamp = lastBlock.timestamp
261261 let note = getStringByKey(keyUserNote(caller))
262262 let label = getStringByKey(keyUserLabel(caller))
263263 if (!(validUserData(caller, name, description, thumb, false)))
264264 then throw("Something went wrong")
265265 else {
266266 let json = makeJSON(toBase64String(toBytes(name)), toBase64String(toBytes(thumb)), toString(timestamp))
267267 if (if ((0 > royalties))
268268 then true
269269 else (royalties > 1000))
270270 then throw("Royalties cannot be less than 0% or higher than 10%")
271271 else {
272272 let txToCaller = if (isSponsored)
273273 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
274274 else nil
275275 ([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)
276276 }
277277 }
278278 }
279279
280280
281281
282282 @Callable(invoke)
283283 func updateUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
284284 then throw(maintenanceMSG)
285285 else {
286286 let $t096559759 = getCaller(invoke, pubKey)
287287 let caller = $t096559759._1
288288 let isSponsored = $t096559759._2
289289 let status = getStringByKey(keyUserStatus(caller))
290290 if (!(validUserData(caller, name, description, thumb, true)))
291291 then throw("Something went wrong")
292292 else {
293293 let date = getIntegerByKey(keyUserDate(caller))
294294 let json = makeJSON(toBase64String(toBytes(name)), toBase64String(toBytes(thumb)), toString(date))
295295 if (if ((0 > royalties))
296296 then true
297297 else (royalties > 1000))
298298 then throw("Royalties cannot be less than 0% or higher than 10%")
299299 else {
300300 let txToCaller = if (isSponsored)
301301 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
302302 else nil
303303 ([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)
304304 }
305305 }
306306 }
307307
308308
309309
310310 @Callable(invoke)
311311 func setERC20User (erc20,pubKey) = if (!(dappRunning))
312312 then throw(maintenanceMSG)
313313 else {
314314 let $t01094611049 = getCaller(invoke, pubKey)
315315 let caller = $t01094611049._1
316316 let isSponsored = $t01094611049._2
317317 let status = getStringByKey(keyUserStatus(caller))
318318 if (if ((status != userRegistered))
319319 then (status != userVerified)
320320 else false)
321321 then throw("Not allowed to set ERC20 address")
322322 else {
323323 let firstTwo = take(erc20, 2)
324324 if (if ((firstTwo != "0x"))
325325 then true
326326 else (size(erc20) != 42))
327327 then throw("This is not an erc20 address")
328328 else {
329329 let txToCaller = if (isSponsored)
330330 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
331331 else nil
332332 ([StringEntry(keyUserERC20(caller), erc20)] ++ txToCaller)
333333 }
334334 }
335335 }
336336
337337
338338
339339 @Callable(invoke)
340340 func changeUserStatus (address,status,note,label,wl_certifications,wl_txs,wl_drops,wl_commissions) = {
341341 let caller = toString(invoke.caller)
342342 if ((size(address) == 0))
343343 then throw("Address cannot be empty")
344344 else {
345345 let currentNote = getStringByKey(keyUserNote(address))
346346 let currentLabel = getStringByKey(keyUserLabel(address))
347- let noteToUse = if ((size(note) != 0))
347+ let noteToUse = if (if ((size(note) != 0))
348+ then (note != ".")
349+ else false)
348350 then note
349- else currentNote
350- let labelToUse = if ((size(label) != 0))
351+ else if ((note == "."))
352+ then ""
353+ else currentNote
354+ let labelToUse = if (if ((size(label) != 0))
355+ then (label != ".")
356+ else false)
351357 then label
352- else currentLabel
358+ else if ((label == "."))
359+ then ""
360+ else currentLabel
353361 if (containsElement([chris, toString(this)], caller))
354362 then {
355363 let free_certifications = if ((wl_certifications != 0))
356364 then invoke(signDapp, "whitelistFreeCertifications", [address, wl_certifications, true], nil)
357365 else nil
358366 if ((free_certifications == free_certifications))
359367 then {
360368 let free_txs = if ((wl_txs != 0))
361369 then invoke(whitelistDapp, "whitelistFreeTxs", [address, wl_txs, true], nil)
362370 else nil
363371 if ((free_txs == free_txs))
364372 then {
365373 let free_drops = if ((wl_drops != 0))
366374 then invoke(whitelistDapp, "whitelistFreeDrop", [address, wl_drops, true], nil)
367375 else nil
368376 if ((free_drops == free_drops))
369377 then {
370378 let free_commissions = if ((wl_commissions != 0))
371379 then invoke(whitelistDapp, "whitelist", [address, wl_commissions], nil)
372380 else nil
373381 if ((free_commissions == free_commissions))
374382 then {
375383 let currentStatus = getStringByKey(keyUserStatus(address))
376384 if ((size(status) == 0))
377385 then if ((currentStatus == ""))
378386 then throw("User have no status yet")
379387 else [StringEntry(keyUserNote(address), noteToUse), StringEntry(keyUserLabel(address), labelToUse)]
380388 else {
381389 let statusToSet = validateNewStatus(status, address, currentStatus)
382390 let name = toBase64String(toBytes(getStringByKey(keyUserName(address))))
383391 let thumb = toBase64String(toBytes(getStringByKey(keyUserThumb(address))))
384392 let date = getIntegerByKey(keyUserDate(address))
385393 let json = makeJSON(name, thumb, toString(date))
386394 [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), json), StringEntry(keyUserNote(address), noteToUse), StringEntry(keyUserLabel(address), labelToUse)]
387395 }
388396 }
389397 else throw("Strict value is not equal to itself.")
390398 }
391399 else throw("Strict value is not equal to itself.")
392400 }
393401 else throw("Strict value is not equal to itself.")
394402 }
395403 else throw("Strict value is not equal to itself.")
396404 }
397405 else throw("Not allowed to change user status")
398406 }
399407 }
400408
401409
402410
403411 @Callable(invoke)
404412 func deleteUser (address) = {
405413 let caller = toString(invoke.caller)
406414 let currentStatus = getStringByKey(keyUserStatus(address))
407415 if (containsElement([chris, toString(this)], caller))
408416 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)]
409417 else throw("Not allowed")
410418 }
411419
412420
413421
414422 @Callable(i)
415423 func setAgent (artistAddr,agentAddr,primaryShare,secondaryShare,asPartner) = if (!(dappRunning))
416424 then throw(maintenanceMSG)
417425 else {
418426 let caller = toString(i.caller)
419427 if (if ((0 > primaryShare))
420428 then true
421429 else (primaryShare > 5000))
422430 then throw("Primary commission cannot be less than 0% or higher than 50%")
423431 else if (if ((0 > secondaryShare))
424432 then true
425433 else (secondaryShare > 5000))
426434 then throw("Secondary commission cannot be less than 0% or higher than 50%")
427435 else if (containsElement([chris, toString(this)], caller))
428436 then if (if ((size(artistAddr) != 35))
429437 then true
430438 else (size(agentAddr) != 35))
431439 then throw("Wrong address")
432- else if (asPartner)
433- then [StringEntry(keyArtistAgentAddr(artistAddr), agentAddr), StringEntry(keyAgentArtistAddr(agentAddr, artistAddr), artistAddr), IntegerEntry(keyPrimaryShareAgent(artistAddr), primaryShare), IntegerEntry(keySecondaryShareAgent(artistAddr), secondaryShare)]
434- else [StringEntry(keyArtistPublicAgentAddr(artistAddr), agentAddr), StringEntry(keyPublicAgentArtistAddr(agentAddr, artistAddr), artistAddr), IntegerEntry(keyPrimarySharePublicAgent(artistAddr), primaryShare), IntegerEntry(keySecondarySharePublicAgent(artistAddr), secondaryShare)]
440+ else if (if ((getStringByKey(keyArtistAgentAddr(artistAddr)) != ""))
441+ then true
442+ else (getStringByKey(keyArtistPublicAgentAddr(artistAddr)) != ""))
443+ then throw("Unset agent first to change it")
444+ else if (asPartner)
445+ then [StringEntry(keyArtistAgentAddr(artistAddr), agentAddr), StringEntry(keyAgentArtistAddr(agentAddr, artistAddr), artistAddr), IntegerEntry(keyPrimaryShareAgent(artistAddr), primaryShare), IntegerEntry(keySecondaryShareAgent(artistAddr), secondaryShare)]
446+ else [StringEntry(keyArtistPublicAgentAddr(artistAddr), agentAddr), StringEntry(keyPublicAgentArtistAddr(agentAddr, artistAddr), artistAddr), IntegerEntry(keyPrimarySharePublicAgent(artistAddr), primaryShare), IntegerEntry(keySecondarySharePublicAgent(artistAddr), secondaryShare)]
435447 else throw("You are not allowed")
436448 }
437449
438450
439451
440452 @Callable(i)
441453 func unsetAgent (artistAddr,agentAddr,asPartner) = if (!(dappRunning))
442454 then throw(maintenanceMSG)
443455 else {
444456 let caller = toString(i.caller)
445457 if (containsElement([chris, toString(this)], caller))
446458 then if (if ((size(artistAddr) != 35))
447459 then true
448460 else (size(agentAddr) != 35))
449461 then throw("Wrong address")
450462 else if (asPartner)
451463 then [DeleteEntry(keyArtistAgentAddr(artistAddr)), DeleteEntry(keyAgentArtistAddr(agentAddr, artistAddr)), DeleteEntry(keyPrimaryShareAgent(artistAddr)), DeleteEntry(keySecondaryShareAgent(artistAddr))]
452464 else [DeleteEntry(keyArtistPublicAgentAddr(artistAddr)), DeleteEntry(keyPublicAgentArtistAddr(agentAddr, artistAddr)), DeleteEntry(keyPrimarySharePublicAgent(artistAddr)), DeleteEntry(keySecondarySharePublicAgent(artistAddr))]
453465 else throw("You are not allowed")
454466 }
455467
456468
457469
458470 @Callable(i)
459471 func deleteEntry (entry) = {
460472 let caller = toString(i.caller)
461473 if ((caller == chris))
462474 then [DeleteEntry(entry)]
463475 else throw("no")
464476 }
465477
466478
467479 @Verifier(tx)
468480 func verifier () = match tx {
469481 case inv: InvokeScriptTransaction =>
470482 if (if (if (if ((inv.function == "registerUser"))
471483 then (inv.dApp == this)
472484 else false)
473485 then (inv.fee == 500000)
474486 else false)
475487 then (inv.feeAssetId == unit)
476488 else false)
477489 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
478490 else if (if (if (if ((inv.function == "updateUser"))
479491 then (inv.dApp == this)
480492 else false)
481493 then (inv.fee == 500000)
482494 else false)
483495 then (inv.feeAssetId == unit)
484496 else false)
485497 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
486498 else if (if (if (if ((inv.function == "setERC20User"))
487499 then (inv.dApp == this)
488500 else false)
489501 then (inv.fee == 500000)
490502 else false)
491503 then (inv.feeAssetId == unit)
492504 else false)
493- then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[2])))
505+ then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[1])))
494506 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
495507 case _ =>
496508 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
497509 }
498510

github/deemru/w8io/6500d08 
74.52 ms