tx · 2STwB3JAFjWg3H8bPMF9NxT4DCWFu1UvMQQb8gcGv1Rq

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.02300000 Waves

2022.11.30 06:34 [2339313] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "2STwB3JAFjWg3H8bPMF9NxT4DCWFu1UvMQQb8gcGv1Rq", "fee": 2300000, "feeAssetId": null, "timestamp": 1669779325115, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "4pJat5bEUMGJLfqzKr1pxDj8ZwXhdqNbwW9XnAzZtFz1YzjzxfEQzrD7fJm5mbKrXYK3ZRghGnkdWkaZ4djp22vB" ], "script": "base64:BgJcCAISBAoCCAgSDwoNCAgICAgICAgICAgIARIOCgwICAgICAgICAgICAESBgoECAgICBIECgIICBIHCgUIAQEIARIECgIICBIECgIICBIGCgQICAgIEgYKBAgICAhKAQ5nZXRTdHJpbmdCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAAh1bml0VGVzdAcACW9yYWNsZUZlZQkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAg9jb25mX29yYWNsZV9mZWUACHNpZ25EYXBwCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECEWNvbmZfc2lnbndlYl9kYXBwAAtmZWVSZWNlaXZlcgkBDmdldFN0cmluZ0J5S2V5AQIRY29uZl9mZWVfcmVjZWl2ZXIACHVzZXJEYXBwAwUIdW5pdFRlc3QJAQV2YWx1ZQEJAKYIAQIjM010NFJHTUV5alNXWUFvY1RQcWQ1NXdkSFFRQjNQVTJVQ20JAQV2YWx1ZQEJAKYIAQkBDmdldFN0cmluZ0J5S2V5AQIPY29uZl91c2Vyc19kYXBwAA13aGl0ZWxpc3REYXBwCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECE2NvbmZfd2hpdGVsaXN0X2RhcHAAC3NpZ25Bc3NldElkCQDZBAEJAQ5nZXRTdHJpbmdCeUtleQECGGNvbmZfYWNjZXB0ZWRfYXNzZXRfU0lHTgALdXNkbkFzc2V0SWQJANkEAQkBDmdldFN0cmluZ0J5S2V5AQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0ROAAt1c2R0QXNzZXRJZAkA2QQBCQEOZ2V0U3RyaW5nQnlLZXkBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRFQADHdhdmVzQXNzZXRJZAEAAAVjaHJpcwkBDmdldFN0cmluZ0J5S2V5AQIMY29uZl9hZG1pbl8xARlnZXRJbnRlZ2VyQnlLZXlGcm9tT3JhY2xlAQNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQlvcmFjbGVGZWUFA2tleQIfSW50ZWdlciB1bmRlZmluZSBvciAwIGluIG9yYWNsZQEPZ2V0SW50ZWdlckJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABDmNoZWNrV2hpdGVsaXN0AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNd2hpdGVsaXN0RGFwcAUDa2V5AAABD2dldEJvb2xlYW5CeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFA2tleQcAB3NpZ25DdXQABwALdXNkbldhdmVDdXQACgAOZGVmYXVsdExpY2VuY2UJAQ5nZXRTdHJpbmdCeUtleQECFGNvbmZfZGVmYXVsdF9saWNlbmNlABJkZWZhdWx0SGFzaExpY2VuY2UJAQ5nZXRTdHJpbmdCeUtleQECGWNvbmZfZGVmYXVsdF9saWNlbmNlX2hhc2gAC2RhcHBSdW5uaW5nCQELdmFsdWVPckVsc2UCCQCbCAIFCHVzZXJEYXBwAhRjb25mX2RhcHBfaXNfcnVubmluZwYADm1haW50ZW5hbmNlTVNHCQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwAhRjb25mX21haW50ZW5hbmNlX21zZwIAAA11c2VyU3VzcGVuZGVkAglTVVNQRU5ERUQAC3VzZXJSZW1vdmVkAgdSRU1PVkVEABB1c2VyVW5yZWdpc3RlcmVkAgxVTlJFR0lTVEVSRUQAC3VzZXJBbGxvd2VkAgdBTExPV0VEABljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlCQEZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQEJAKwCAgISY2VydGlmaWNhdGlvbl9mZWVfCQDYBAEFC3NpZ25Bc3NldElkARRjaGVja1NpZ25DZXJ0aWZpY2F0ZQMGc2lnbklEBU93bmVyCnNoYTI1Nkhhc2gEByRtYXRjaDAJAJ0IAgUIc2lnbkRhcHAJAKwCAgkArAICCQCsAgICCGRhdGFfZmNfBQZzaWduSUQCAV8FBU93bmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAMJAQhjb250YWlucwIFAWEFCnNoYTI1Nkhhc2gGBwcBC3ZhbGlkYXRlQ0lEAQNjaWQDCQEIY29udGFpbnMCBQNjaWQCAS8DAwkAZgIATAkAsQIBBQNjaWQJAAACCQCxAgEJAJEDAgkAtQkCBQNjaWQCAS8AAAA7BwkAZgIAEAkAsQIBCQCRAwIJALUJAgUDY2lkAgEvAAEHBwEMdmFsaWRhdGVIYXNoAQRoYXNoCQAAAgkAsQIBBQRoYXNoAEABDWtleVVzZXJTdGF0dXMBBmNhbGxlcgkArAICAgx1c2VyX3N0YXR1c18FBmNhbGxlcgEHa2V5RGF0ZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfZGF0ZV8FBWFydElkAgFfBQZjYWxsZXIBB2tleU5hbWUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X25hbWVfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlEZXNjAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF9kZXNjXwUFYXJ0SWQCAV8FBmNhbGxlcgENa2V5RGlzcGxheUNpZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhBhcnRfZGlzcGxheV9jaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQ1rZXlFeHBvcnRIYXNoAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICEGFydF9leHBvcnRfaGFzaF8FBWFydElkAgFfBQZjYWxsZXIBDGtleUV4cG9ydENpZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAg9hcnRfZXhwb3J0X2NpZF8FBWFydElkAgFfBQZjYWxsZXIBCmtleU1heE1pbnQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIMYXJ0X21heG1pbnRfBQVhcnRJZAIBXwUGY2FsbGVyAQlrZXlTaWduSUQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgILYXJ0X3NpZ25pZF8FBWFydElkAgFfBQZjYWxsZXIBCWtleUlzc3VlZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAgthcnRfaXNzdWVkXwUFYXJ0SWQCAV8FBmNhbGxlcgEJa2V5T25TYWxlAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICC2FydF9vbnNhbGVfBQVhcnRJZAIBXwUGY2FsbGVyAQ5rZXlMaWNlbmNlSGFzaAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhFhcnRfbGljZW5jZV9oYXNoXwUFYXJ0SWQCAV8FBmNhbGxlcgENa2V5TGljZW5jZUNpZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhBhcnRfbGljZW5jZV9jaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlUYWdzAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF90YWdzXwUFYXJ0SWQCAV8FBmNhbGxlcgEHa2V5VHlwZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfdHlwZV8FBWFydElkAgFfBQZjYWxsZXIBB2tleU5vdGUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X25vdGVfBQVhcnRJZAIBXwUGY2FsbGVyAQprZXlDcmF3bGVyAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICEGFydF9jcmF3bGVyX2NpZF8FBWFydElkAgFfBQZjYWxsZXIBDGtleVJveWFsdGllcwIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAg5hcnRfcm95YWx0aWVzXwUFYXJ0SWQCAV8FBmNhbGxlcgEIa2V5UHJpY2UCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIKYXJ0X3ByaWNlXwUFYXJ0SWQCAV8FBmNhbGxlcgEKa2V5RW5kU2FsZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAgxhcnRfZW5kc2FsZV8FBWFydElkAgFfBQZjYWxsZXIBEmtleUFzc2V0SWRBY2NlcHRlZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhJhcnRfYXNzZXRBY2NlcHRlZF8FBWFydElkAgFfBQZjYWxsZXIBB2tleUZsYWcCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X2ZsYWdfBQVhcnRJZAIBXwUGY2FsbGVyARJrZXlBcnRpc3RBZ2VudEFkZHIBCmFydGlzdEFkZHIJAKwCAgINYXJ0aXN0X2FnZW50XwUKYXJ0aXN0QWRkcgEPa2V5UHJpbWFyeVNoYXJlAQphcnRpc3RBZGRyCQCsAgICFWFydGlzdF9hZ2VudF9wcmltYXJ5XwUKYXJ0aXN0QWRkcgERa2V5SGFzaEJ5VHhpZEFkZHICBmNhbGxlcgR0eGlkCQCsAgIJAKwCAgkArAICAhNnZXRfaGFzaGJ5dHhpZGFkZHJfBQR0eGlkAgFfBQZjYWxsZXIBDmtleU93bmVyQnlIYXNoAQpzaGEyNTZIYXNoCQCsAgICEmdldF9vd25lcl9ieV9oYXNoXwUKc2hhMjU2SGFzaAENa2V5aWRCeVNpZ25pZAIGY2FsbGVyBnNpZ25JZAkArAICCQCsAgIJAKwCAgISZ2V0X2FydGlkYnlzaWduaWRfBQZzaWduSWQCAV8FBmNhbGxlcgESa2V5VHhpZEJ5SGFzaE93bmVyAgpzaGEyNTZIYXNoBmNhbGxlcgkArAICAhdnZXRfdHhpZF9ieV9oYXNoX293bmVyXwkA2AQBCQDUFgEJAJsDAQkArAICBQpzaGEyNTZIYXNoBQZjYWxsZXIBDnZhbGlkYXRlQWxsQ0lEAwpjaWREaXNwbGF5CWNpZEV4cG9ydApjaWRMaWNlbmNlAwkBASEBCQELdmFsaWRhdGVDSUQBBQpjaWREaXNwbGF5CQACAQIRV3JvbmcgRGlzcGxheSBDSUQDCQEBIQEJAQt2YWxpZGF0ZUNJRAEFCWNpZEV4cG9ydAkAAgECEFdyb25nIEV4cG9ydCBDSUQDAwkBAiE9AgUKY2lkTGljZW5jZQIACQEBIQEJAQt2YWxpZGF0ZUNJRAEFCmNpZExpY2VuY2UHCQACAQIRV3JvbmcgTGljZW5jZSBDSUQGAQ92YWxpZGF0ZUFsbEhhc2gCDHNoYTI1NkV4cG9ydA1zaGEyNTZMaWNlbmNlAwkBASEBCQEMdmFsaWRhdGVIYXNoAQUMc2hhMjU2RXhwb3J0CQACAQIYRXhwb3J0IEhhc2ggNjQgY2hhci4gbWF4AwkBASEBCQEMdmFsaWRhdGVIYXNoAQUNc2hhMjU2TGljZW5jZQkAAgECGUxpY2VuY2UgSGFzaCA2NCBjaGFyLiBtYXgGAQ52YWxpZGF0ZVN0cmluZwIDc3RyA21heAMJAAACCQCxAgEFA3N0cgAACQACAQIYRmllbGQgY2Fubm90IGJlIGlzIGVtcHR5AwkAZgIJALECAQUDc3RyBQNtYXgJAAIBCQCsAgIFA3N0cgIMIGlzIHRvbyBsb25nBgEMdmFsaWRhdGVVc2VyAQZjYWxsZXIECnVzZXJTdGF0dXMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHAJAQ1rZXlVc2VyU3RhdHVzAQUGY2FsbGVyBRB1c2VyVW5yZWdpc3RlcmVkAwMJAAACBQp1c2VyU3RhdHVzBRB1c2VyVW5yZWdpc3RlcmVkBgkAAAIFCnVzZXJTdGF0dXMFC3VzZXJBbGxvd2VkAi5SZWdpc3RlciB0aGlzIGFjY291bnQgZmlyc3Qgd2l0aCAiQWNjb3VudCIgdGFiAwkAAAIFCnVzZXJTdGF0dXMFDXVzZXJTdXNwZW5kZWQCEUFjY291bnQgc3VzcGVuZGVkAwkAAAIFCnVzZXJTdGF0dXMFC3VzZXJSZW1vdmVkAg9BY2NvdW50IHJlbW92ZWQCAAEKc2V0TEljZW5jZQIKY2lkTGljZW5jZQ1zaGEyNTZMaWNlbmNlBANjaWQDCQAAAgkAsQIBBQpjaWRMaWNlbmNlAAAFDmRlZmF1bHRMaWNlbmNlBQpjaWRMaWNlbmNlBARoYXNoAwkAAAIJALECAQUNc2hhMjU2TGljZW5jZQAABRJkZWZhdWx0SGFzaExpY2VuY2UFDXNoYTI1NkxpY2VuY2UJAJQKAgUDY2lkBQRoYXNoARN2YWxpZGF0ZUFydHdvcmtEYXRhCgZjYWxsZXIKY2lkRGlzcGxheQljaWRFeHBvcnQKbGljZW5jZUNJRAxzaGEyNTZFeHBvcnQLbGljZW5jZUhhc2gEbmFtZQtkZXNjcmlwdGlvbgR0YWdzCXJveWFsdGllcwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQAAAgkAsQIBBQpjaWREaXNwbGF5AAAJAAIBAhtEaXNwbGF5IENJRCBjYW5ub3QgYmUgZW1wdHkDCQEBIQEJAQ52YWxpZGF0ZUFsbENJRAMFCmNpZERpc3BsYXkFCWNpZEV4cG9ydAUKbGljZW5jZUNJRAkAAgECEFByb2JsZW0gd2l0aCBDSUQDCQEBIQEJAQ92YWxpZGF0ZUFsbEhhc2gCBQxzaGEyNTZFeHBvcnQFC2xpY2VuY2VIYXNoCQACAQITUHJvYmxlbSB3aXRoIEhhc2hlcwMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgUEbmFtZQBkCQACAQISMTAwIENoYXIuIG1heCBuYW1lAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQtkZXNjcmlwdGlvbgDoBwkAAgECGjEwMDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAwMJAGYCAAAFCXJveWFsdGllcwYJAGYCBQlyb3lhbHRpZXMA6AcJAAIBAjNSb3lhbHRpZXMgY2Fubm90IGJlIGxlc3MgdGhhbiAwJSBvciBoaWdoZXIgdGhhbiAxMCUDCQBmAgkAkAMBCQC1CQIFBHRhZ3MCASwABQkAAgECCzUgdGFncyBtYXguAgABCWlzUGF5bWVudAEBaQMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhNObyBwYXltZW50IGF0dGFjaGVkBAdwYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEBmFtb3VudAkBBXZhbHVlAQgFB3BheW1lbnQGYW1vdW50CQCUCgIFB3BheW1lbnQFBmFtb3VudAEPdmFsaWRhdGVQYXltZW50AQFpBAskdDA5MDE1OTA1MQkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQskdDA5MDE1OTA1MQJfMQQGYW1vdW50CAULJHQwOTAxNTkwNTECXzIEB2Fzc2V0SWQDAwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAAACCAUHcGF5bWVudAdhc3NldElkBQtzaWduQXNzZXRJZAcIBQdwYXltZW50B2Fzc2V0SWQJAAIBAitPbmx5IFNJR04gdG9rZW4gYWNjZXB0ZWQgYXMgdHJhbnNhY3Rpb24gZmVlAwkBAiE9AgUGYW1vdW50BRljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlCQACAQkArAICAhlQYXltZW50IGFtb3VudCBzaG91bGQgYmUgCQCkAwEFGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UJAJQKAgUGYW1vdW50BQdhc3NldElkAQtpc0FydE1pbnRlZAIJYWRkclRvVXNlBWFydElkBAckbWF0Y2gwCQCaCAIFBHRoaXMJAQlrZXlJc3N1ZWQCBQlhZGRyVG9Vc2UFBWFydElkAwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAMJAQIhPQIFAWIAAAYHBwEUdmFsaWRhdGVQcmljZUFzc2V0SWQDAWkMcHJpY2VBc3NldElkDGFydHdvcmtQcmljZQQLJHQwOTY1ODk2OTQJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAULJHQwOTY1ODk2OTQCXzEEBmFtb3VudAgFCyR0MDk2NTg5Njk0Al8yBAdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAUEdW5pdAMDCQBmAgkAsQIBBQxwcmljZUFzc2V0SWQAAAkAAAIJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAUMcHJpY2VBc3NldElkBwgFB3BheW1lbnQHYXNzZXRJZAkAAgECDldyb25nIGFzc2V0IGlkAwMJAAACBQdhc3NldElkBQR1bml0CQECIT0CBQxwcmljZUFzc2V0SWQCAAcJAAIBAg5Xcm9uZyBhc3NldCBpZAMJAQIhPQIFDGFydHdvcmtQcmljZQUGYW1vdW50CQACAQITUGF5bWVudCBkb24ndCBtYXRjaAkAlAoCBQZhbW91bnQFB2Fzc2V0SWQBEGFjY2VwdGVkQXNzZXRJZHMBB2Fzc2V0SWQDAwMDAwkBAiE9AgUHYXNzZXRJZAkA2AQBBQtzaWduQXNzZXRJZAkBAiE9AgUHYXNzZXRJZAkA2AQBBQx3YXZlc0Fzc2V0SWQHCQECIT0CBQdhc3NldElkAgVXQVZFUwcJAQIhPQIFB2Fzc2V0SWQJANgEAQULdXNkbkFzc2V0SWQHCQECIT0CBQdhc3NldElkCQDYBAEFC3VzZHRBc3NldElkBwkAAgECJk9ubHkgU0lHTiwgVVNETixVU0RUIG9yIFdBVkVTIGFjY2VwdGVkBgEPdmFsaWRhdGVNaW5TZWxsAgdhc3NldElkBXByaWNlBAxtaW5TZWxsV2F2ZXMDBQh1bml0VGVzdAAKCQEZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQECDndhdmVzX21pbl9zZWxsBAttaW5TZWxsVXNkbgDAhD0EC21pblNlbGxTaWduAwUIdW5pdFRlc3QAAQkAaAIFGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UAAgMDAwMDAwkAAAIFB2Fzc2V0SWQJANgEAQULdXNkbkFzc2V0SWQJAGYCBQttaW5TZWxsVXNkbgUFcHJpY2UHCQECIT0CBQVwcmljZQAABwYDAwkAAAIFB2Fzc2V0SWQJANgEAQULdXNkdEFzc2V0SWQJAGYCBQttaW5TZWxsVXNkbgUFcHJpY2UHCQECIT0CBQVwcmljZQAABwYDAwkAAAIFB2Fzc2V0SWQJANgEAQULc2lnbkFzc2V0SWQJAGYCBQttaW5TZWxsU2lnbgUFcHJpY2UHCQECIT0CBQVwcmljZQAABwYDAwMJAAACBQdhc3NldElkCQDYBAEFDHdhdmVzQXNzZXRJZAYJAAACBQdhc3NldElkAgVXQVZFUwkAZgIFDG1pblNlbGxXYXZlcwUFcHJpY2UHCQECIT0CBQVwcmljZQAABwkAAgECGFdyb25nIG1pbmltdW0gc2VsbCBwcmljZQYBDWdldEJpZEFzc2V0SWQBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAEWZ2V0UHJpY2VBc3NldElkRnJvbUJpZAEKYmlkRGF0YUtleQQHYmlkRGF0YQkBDmdldFN0cmluZ0J5S2V5AQkArAICBQpiaWREYXRhS2V5AgVfT1BFTgMJAAACBQdiaWREYXRhAgAJAAIBAg1CaWQgbm90IGZvdW5kBApiaWREYXRhQXJyCQC1CQIFB2JpZERhdGECAV8ECWJpZEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmJpZERhdGFBcnIAAQQKYmlkQXNzZXRJZAkBDWdldEJpZEFzc2V0SWQBCQCRAwIFCmJpZERhdGFBcnIAAAMJAGcCAAAFCWJpZEFtb3VudAkAAgECDFdyb25nIGFtb3VudAkAlAoCBQliaWRBbW91bnQFCmJpZEFzc2V0SWQBDGlkQ2FsbGVyRGF0ZQEBaQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwkAlQoDCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJANgEAQgIBQFpBmNhbGxlcgVieXRlcwgFCWxhc3RCbG9jawl0aW1lc3RhbXABB2J1eU1pbnQFAWkFYXJ0SWQGaXNzdWVyBWJpZElkCGJpZE93bmVyBA0kdDAxMjE1NjEyMjE4CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxMjE1NjEyMjE4Al8xBAZjYWxsZXIIBQ0kdDAxMjE1NjEyMjE4Al8yBARkYXRlCAUNJHQwMTIxNTYxMjIxOAJfMwQFaXNCaWQDAwMJAAACCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMFBmlzc3VlcgkBAiE9AgUIYmlkT3duZXICAAcJAQIhPQIFBWJpZElkAgAHBgcECGJsb2NrRW5kCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCmtleUVuZFNhbGUCBQZjYWxsZXIFBWFydElkAwMDCQECIT0CBQhibG9ja0VuZAAACQBnAgUGaGVpZ2h0BQhibG9ja0VuZAcJAQEhAQUFaXNCaWQHCQACAQILU2FsZSBlbmRlZC4EDmNhbGxlcklzSXNzdWVyCQAAAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBQZpc3N1ZXIECHRvdGFsTkZUCQEPZ2V0SW50ZWdlckJ5S2V5AQIQdG90YWxfbmZ0X2lzc3VlZAQGc2lnbklECQEOZ2V0U3RyaW5nQnlLZXkBCQEJa2V5U2lnbklEAgUGaXNzdWVyBQVhcnRJZAQLYXJ0d29ya05hbWUJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlOYW1lAgUGaXNzdWVyBQVhcnRJZAMJAAACBQthcnR3b3JrTmFtZQIACQACAQIRQXJ0IGRvZXNuJ3QgZXhpc3QECGlzT25TYWxlCQEPZ2V0Qm9vbGVhbkJ5S2V5AQkBCWtleU9uU2FsZQIFBmlzc3VlcgUFYXJ0SWQECmFtb3VudFNvbGQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEJa2V5SXNzdWVkAgUGaXNzdWVyBQVhcnRJZAQMYXJ0d29ya1ByaWNlAwUOY2FsbGVySXNJc3N1ZXIJAGgCBRljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlAAIJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEIa2V5UHJpY2UCBQZpc3N1ZXIFBWFydElkBAxwcmljZUFzc2V0SWQDBQ5jYWxsZXJJc0lzc3VlcgkA2AQBBQtzaWduQXNzZXRJZAkBDmdldFN0cmluZ0J5S2V5AQkBEmtleUFzc2V0SWRBY2NlcHRlZAIFBmlzc3VlcgUFYXJ0SWQECm1heENhblNlbGwJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEKa2V5TWF4TWludAIFBmlzc3VlcgUFYXJ0SWQDAwMJAQEhAQUFaXNCaWQJAQEhAQUOY2FsbGVySXNJc3N1ZXIHAwMJAGcCAAAFDGFydHdvcmtQcmljZQYJAQEhAQUIaXNPblNhbGUGCQBnAgAABQptYXhDYW5TZWxsBwkAAgECEEFydCBub3QgZm9yIHNhbGUDAwMJAQEhAQUFaXNCaWQFDmNhbGxlcklzSXNzdWVyBwkAZwIAAAUKbWF4Q2FuU2VsbAcJAAIBAhRNYXggaXNzdWFibGUgbm90IHNldAQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGaXNzdWVyAwMFBWlzQmlkCQECIT0CBQljaGVja1VzZXICAAcJAAIBBQljaGVja1VzZXIECmJpZERhdGFLZXkJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIEYmlkXwUFYXJ0SWQCAV8FBmlzc3VlcgIBXwUIYmlkT3duZXICAV8FBWJpZElkBA0kdDAxMzk5NzE0MTY4AwUFaXNCaWQJARZnZXRQcmljZUFzc2V0SWRGcm9tQmlkAQUKYmlkRGF0YUtleQkBFHZhbGlkYXRlUHJpY2VBc3NldElkAwUBaQUMcHJpY2VBc3NldElkBQxhcnR3b3JrUHJpY2UEBmFtb3VudAgFDSR0MDEzOTk3MTQxNjgCXzEEB2Fzc2V0SWQIBQ0kdDAxMzk5NzE0MTY4Al8yBAVhZ2VudAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBEmtleUFydGlzdEFnZW50QWRkcgEFBmlzc3VlcgULZmVlUmVjZWl2ZXIECmFnZW50U2hhcmUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUIdXNlckRhcHAJAQ9rZXlQcmltYXJ5U2hhcmUBBQZpc3N1ZXIAAAQNaXNXaGl0ZWxpc3RlZAkBDmNoZWNrV2hpdGVsaXN0AQUGaXNzdWVyBANjdXQDCQBmAgUNaXNXaGl0ZWxpc3RlZAUGaGVpZ2h0AAADCQAAAgUHYXNzZXRJZAULc2lnbkFzc2V0SWQFB3NpZ25DdXQFC3VzZG5XYXZlQ3V0BA1hbW91bnRGb3JTaWduCQBrAwUGYW1vdW50BQNjdXQAZAQOYW1vdW50Rm9yQWdlbnQDAwMJAQIhPQIFBWFnZW50BQtmZWVSZWNlaXZlcgkAZgIFCmFnZW50U2hhcmUAAAcJAGYCBQZoZWlnaHQFDWlzV2hpdGVsaXN0ZWQHCQBrAwUGYW1vdW50BQphZ2VudFNoYXJlAGQAAAQQYW1vdW50Rm9yQ3JlYXRvcgkAZQIFBmFtb3VudAUNYW1vdW50Rm9yU2lnbgMJAAACBQphbW91bnRTb2xkBQptYXhDYW5TZWxsCQACAQIMQXJ0IHNvbGQgb3V0BA1uZXdBbW91bnRTb2xkCQBkAgUKYW1vdW50U29sZAABBAlpc3N1ZU1ldGEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglDcmVhdG9yOiAFBmlzc3VlcgIKLAogQXJ0SUQ6IAUFYXJ0SWQCCywKIFNpZ25JRDogBQZzaWduSUQCESwKIEFydHdvcmsgbmFtZTogBQthcnR3b3JrTmFtZQIKLAogSXNzdWU6IAkApAMBBQ1uZXdBbW91bnRTb2xkAgEvCQCkAwEFCm1heENhblNlbGwECGlzc3VlTkZUCQDCCAUJAKwCAgIDU0FfCQCkAwEJAGQCBQh0b3RhbE5GVAABBQlpc3N1ZU1ldGEAAQAABwQFaWRORlQJALgIAQUIaXNzdWVORlQECnNlbGxTdGF0dXMDAwkAAAIFDW5ld0Ftb3VudFNvbGQFCm1heENhblNlbGwGCQEBIQEFCGlzT25TYWxlBwYECnJlY2VpdmVORlQDAwMJAAACBQZjYWxsZXIFBmlzc3VlcgkBAiE9AgUIYmlkT3duZXICAAcJAQIhPQIFBWJpZElkAgAHCQERQGV4dHJOYXRpdmUoMTA2MikBBQhiaWRPd25lcggFAWkGY2FsbGVyBAphc3NldElkQmlkAwkBASEBCQEJaXNEZWZpbmVkAQUHYXNzZXRJZAIFV0FWRVMJANgEAQkBBXZhbHVlAQUHYXNzZXRJZAQHYmlkRGF0YQkBDmdldFN0cmluZ0J5S2V5AQkArAICBQpiaWREYXRhS2V5AgVfT1BFTgQJYmlkRGVsT2xkCQELRGVsZXRlRW50cnkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOBAliaWRVcGRhdGUJAQtTdHJpbmdFbnRyeQIJAKwCAgUKYmlkRGF0YUtleQIHX0NMT1NFRAkArAICCQCsAgIFB2JpZERhdGECAV8JAKQDAQUEZGF0ZQQHc29sZEtleQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglhcnRfc29sZF8JAKQDAQUNbmV3QW1vdW50U29sZAIEX29mXwkApAMBBQptYXhDYW5TZWxsAgFfBQVhcnRJZAIBXwUGaXNzdWVyBAlzb2xkVmFsdWUDCQEBIQEFBWlzQmlkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBmNhbGxlcgIBXwkApAMBBQRkYXRlAgFfBQJpZAIBXwkApAMBBQxhcnR3b3JrUHJpY2UCAV8FDHByaWNlQXNzZXRJZAIBXwkA2AQBBQVpZE5GVAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEFCnJlY2VpdmVORlQCAV8JAKQDAQUEZGF0ZQIBXwUCaWQCAV8JAKQDAQUGYW1vdW50AgFfBQphc3NldElkQmlkAgFfCQDYBAEFBWlkTkZUBAhzb2xkRGF0YQkBC1N0cmluZ0VudHJ5AgUHc29sZEtleQUJc29sZFZhbHVlBAtjb21taXNzaW9ucwMJAQIhPQIFDmFtb3VudEZvckFnZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyCQBlAgUNYW1vdW50Rm9yU2lnbgUOYW1vdW50Rm9yQWdlbnQFB2Fzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBWFnZW50BQ5hbW91bnRGb3JBZ2VudAUHYXNzZXRJZAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtmZWVSZWNlaXZlcgUNYW1vdW50Rm9yU2lnbgUHYXNzZXRJZAUDbmlsBAZidXlSZXMJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCWtleUlzc3VlZAIFBmlzc3VlcgUFYXJ0SWQFDW5ld0Ftb3VudFNvbGQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgRuZnRfCQDYBAEFBWlkTkZUBQdzb2xkS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhB0b3RhbF9uZnRfaXNzdWVkCQBkAgUIdG90YWxORlQAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCmtleUVuZFNhbGUCBQZpc3N1ZXIFBWFydElkAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQlrZXlPblNhbGUCBQZpc3N1ZXIFBWFydElkBQpzZWxsU3RhdHVzCQDMCAIFCGlzc3VlTkZUCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZpc3N1ZXIFEGFtb3VudEZvckNyZWF0b3IFB2Fzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUKcmVjZWl2ZU5GVAABBQVpZE5GVAUDbmlsBQtjb21taXNzaW9ucwMFBWlzQmlkCQDMCAIFCHNvbGREYXRhCQDMCAIFCWJpZFVwZGF0ZQkAzAgCBQliaWREZWxPbGQFBmJ1eVJlcwkAzAgCBQhzb2xkRGF0YQUGYnV5UmVzCgZpbnZva2UBB3NldENvbmYCA2tleQN2YWwEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDCQEIY29udGFpbnMCBQNrZXkCBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMBaQEKYWRkQXJ0d29yaw0Kc2hhMjU2SGFzaAZzaWduSUQEbmFtZQtkZXNjcmlwdGlvbgR0YWdzBHR5cGUKY2lkRGlzcGxheQxzaGEyNTZFeHBvcnQJY2lkRXhwb3J0DXNoYTI1NkxpY2VuY2UKY2lkTGljZW5jZQdjcmF3bGVyCXJveWFsdGllcwQNJHQwMTgwNTQxODA5NwkBDGlkQ2FsbGVyRGF0ZQEFAWkEBWFydElkCAUNJHQwMTgwNTQxODA5NwJfMQQGY2FsbGVyCAUNJHQwMTgwNTQxODA5NwJfMgQEZGF0ZQgFDSR0MDE4MDU0MTgwOTcCXzMDCQEBIQEJAQx2YWxpZGF0ZUhhc2gBBQpzaGEyNTZIYXNoCQACAQIkSGFzaCBzaG91bGQgYmUgNjQgY2hhcmFjdGVycyBtYXhpbXVtBA0kdDAxODIwMjE4MjcxCQEKc2V0TEljZW5jZQIFCmNpZExpY2VuY2UFDXNoYTI1NkxpY2VuY2UECmxpY2VuY2VDSUQIBQ0kdDAxODIwMjE4MjcxAl8xBAtsaWNlbmNlSGFzaAgFDSR0MDE4MjAyMTgyNzECXzIED3ZhbGlkYXRlQXJ0d29yawkBE3ZhbGlkYXRlQXJ0d29ya0RhdGEKBQZjYWxsZXIFCmNpZERpc3BsYXkFCWNpZEV4cG9ydAUKbGljZW5jZUNJRAUMc2hhMjU2RXhwb3J0BQtsaWNlbmNlSGFzaAUEbmFtZQULZGVzY3JpcHRpb24FBHRhZ3MFCXJveWFsdGllcwMJAQIhPQIFD3ZhbGlkYXRlQXJ0d29yawIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBA0kdDAxODUwNjE4NTQ4CQEPdmFsaWRhdGVQYXltZW50AQUBaQQGYW1vdW50CAUNJHQwMTg1MDYxODU0OAJfMQQHYXNzZXRJZAgFDSR0MDE4NTA2MTg1NDgCXzIDCQEBIQEJAQlpc0RlZmluZWQBBQZhbW91bnQJAAIBAhRTb21ldGhpbmcgd2VudCB3cm9uZwQKZW50cnlFeGlzdAkBDmdldFN0cmluZ0J5S2V5AQkBEmtleVR4aWRCeUhhc2hPd25lcgIFCnNoYTI1Nkhhc2gFBmNhbGxlcgMJAQIhPQIFCmVudHJ5RXhpc3QCAAkAAgECFFlvdSBhbHJlYWR5IGFkZGVkIGl0BAloYXNoRXhpc3QJAQ5nZXRTdHJpbmdCeUtleQEJAQ5rZXlPd25lckJ5SGFzaAEFCnNoYTI1Nkhhc2gDCQECIT0CBQloYXNoRXhpc3QCAAkAAgECF0hhc2ggYWxyZWFkeSByZWdpc3RlcmVkBA9pc1NpZ25DZXJ0aWZpZWQJARRjaGVja1NpZ25DZXJ0aWZpY2F0ZQMFBnNpZ25JRAUGY2FsbGVyBQpzaGEyNTZIYXNoAwkBASEBBQ9pc1NpZ25DZXJ0aWZpZWQJAAIBAixTaWduIENlcnRpZmljYXRlIG5vdCBmb3VuZCBmb3IgdGhpcyBhZGRyZXNzLgkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5T3duZXJCeUhhc2gBBQpzaGEyNTZIYXNoBQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEmtleVR4aWRCeUhhc2hPd25lcgIFCnNoYTI1Nkhhc2gFBmNhbGxlcgUFYXJ0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQdrZXlEYXRlAgUGY2FsbGVyBQVhcnRJZAUEZGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5TmFtZQIFBmNhbGxlcgUFYXJ0SWQFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleURlc2MCBQZjYWxsZXIFBWFydElkBQtkZXNjcmlwdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5RGlzcGxheUNpZAIFBmNhbGxlcgUFYXJ0SWQFCmNpZERpc3BsYXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV4cG9ydENpZAIFBmNhbGxlcgUFYXJ0SWQFCWNpZEV4cG9ydAkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5RXhwb3J0SGFzaAIFBmNhbGxlcgUFYXJ0SWQFDHNoYTI1NkV4cG9ydAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5TGljZW5jZUhhc2gCBQZjYWxsZXIFBWFydElkBQtsaWNlbmNlSGFzaAkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5TGljZW5jZUNpZAIFBmNhbGxlcgUFYXJ0SWQFCmxpY2VuY2VDSUQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleVR5cGUCBQZjYWxsZXIFBWFydElkBQR0eXBlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlUYWdzAgUGY2FsbGVyBQVhcnRJZAUEdGFncwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCmtleU1heE1pbnQCBQZjYWxsZXIFBWFydElkAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCWtleVNpZ25JRAIFBmNhbGxlcgUFYXJ0SWQFBnNpZ25JRAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCWtleUlzc3VlZAIFBmNhbGxlcgUFYXJ0SWQAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCWtleU9uU2FsZQIFBmNhbGxlcgUFYXJ0SWQHCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlpZEJ5U2lnbmlkAgUGY2FsbGVyBQZzaWduSUQFBWFydElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlIYXNoQnlUeGlkQWRkcgIFBmNhbGxlcgUFYXJ0SWQFCnNoYTI1Nkhhc2gJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCmtleUNyYXdsZXICBQZjYWxsZXIFBWFydElkBQdjcmF3bGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEMa2V5Um95YWx0aWVzAgUGY2FsbGVyBQVhcnRJZAUJcm95YWx0aWVzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtmZWVSZWNlaXZlcgUGYW1vdW50BQdhc3NldElkBQNuaWwBaQENdXBkYXRlQXJ0d29yawwEdHhpZARuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MEdHlwZQpjaWREaXNwbGF5DHNoYTI1NkV4cG9ydAljaWRFeHBvcnQNc2hhMjU2TGljZW5jZQpjaWRMaWNlbmNlB2NyYXdsZXIJcm95YWx0aWVzAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBAZjYWxsZXIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQNJHQwMjE0NDQyMTUxMwkBCnNldExJY2VuY2UCBQpjaWRMaWNlbmNlBQ1zaGEyNTZMaWNlbmNlBApsaWNlbmNlQ0lECAUNJHQwMjE0NDQyMTUxMwJfMQQLbGljZW5jZUhhc2gIBQ0kdDAyMTQ0NDIxNTEzAl8yBA92YWxpZGF0ZUFydHdvcmsJARN2YWxpZGF0ZUFydHdvcmtEYXRhCgUGY2FsbGVyBQpjaWREaXNwbGF5BQljaWRFeHBvcnQFCmxpY2VuY2VDSUQFDHNoYTI1NkV4cG9ydAULbGljZW5jZUhhc2gFBG5hbWUFC2Rlc2NyaXB0aW9uBQR0YWdzBQlyb3lhbHRpZXMDCQECIT0CBQ92YWxpZGF0ZUFydHdvcmsCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQKZW50cnlFeGlzdAkBDmdldFN0cmluZ0J5S2V5AQkBB2tleU5hbWUCBQZjYWxsZXIFBHR4aWQDCQAAAgUKZW50cnlFeGlzdAIACQACAQIPRW50cnkgbm90IGZvdW5kBARmbGFnCQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5RmxhZwIFBmNhbGxlcgUEdHhpZAMJAAACBQRmbGFnAgdJTExFR0FMCQACAQIdQ2Fubm90IHVwZGF0ZSBJTExFR0FMIGFydHdvcmsDCQEBIQEJAQtpc0FydE1pbnRlZAIFBmNhbGxlcgUEdHhpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5TmFtZQIFBmNhbGxlcgUEdHhpZAUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5RGVzYwIFBmNhbGxlcgUEdHhpZAULZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleURpc3BsYXlDaWQCBQZjYWxsZXIFBHR4aWQFCmNpZERpc3BsYXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV4cG9ydENpZAIFBmNhbGxlcgUEdHhpZAUJY2lkRXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlFeHBvcnRIYXNoAgUGY2FsbGVyBQR0eGlkBQxzaGEyNTZFeHBvcnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleUxpY2VuY2VDaWQCBQZjYWxsZXIFBHR4aWQFCmxpY2VuY2VDSUQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleUxpY2VuY2VIYXNoAgUGY2FsbGVyBQR0eGlkBQtsaWNlbmNlSGFzaAkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5VGFncwIFBmNhbGxlcgUEdHhpZAUEdGFncwkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5VHlwZQIFBmNhbGxlcgUEdHhpZAUEdHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5Q3Jhd2xlcgIFBmNhbGxlcgUEdHhpZAUHY3Jhd2xlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDGtleVJveWFsdGllcwIFBmNhbGxlcgUEdHhpZAUJcm95YWx0aWVzBQNuaWwJAAIBAg5BbHJlYWR5IG1pbnRlZAFpAQtmbGFnQXJ0d29yawQFYXJ0SWQEYWRkcgRmbGFnBG5vdGUEDSR0MDIzMDQ2MjMwODAJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDIzMDQ2MjMwODACXzEEBmNhbGxlcggFDSR0MDIzMDQ2MjMwODACXzIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIHQ09OU0VOVAkAzAgCAgAJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQRmbGFnCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlGbGFnAgUEYWRkcgUFYXJ0SWQFBGZsYWcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleU5vdGUCBQRhZGRyBQVhcnRJZAUEbm90ZQUDbmlsCQACAQkArAICAg5Vbmtub3cgc3RhdHVzIAUEZmxhZwkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQBaQENZGVsZXRlQXJ0d29yawIFYXJ0SWQEYWRkcgQNJHQwMjM1MzAyMzU2NAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMjM1MzAyMzU2NAJfMQQGY2FsbGVyCAUNJHQwMjM1MzAyMzU2NAJfMgQJYWRkclRvVXNlAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgUEYWRkcgUGY2FsbGVyBAplbnRyeUV4aXN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlOYW1lAgUJYWRkclRvVXNlBQVhcnRJZAIgTm8gYXJ0IG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MDCQAAAgUKZW50cnlFeGlzdAIACQACAQIgTm8gYXJ0IG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MECnNoYTI1Nkhhc2gJAQ5nZXRTdHJpbmdCeUtleQEJARFrZXlIYXNoQnlUeGlkQWRkcgIFCWFkZHJUb1VzZQUFYXJ0SWQDCQAAAgUKc2hhMjU2SGFzaAIACQACAQIlTm8gYXJ0IGhhc2ggbWF0Y2hpbmcgZm9yIHRoaXMgYWRkcmVzcwQGc2lnbklECQEOZ2V0U3RyaW5nQnlLZXkBCQEJa2V5U2lnbklEAgUJYWRkclRvVXNlBQVhcnRJZAMJAAACBQZzaWduSUQCAAkAAgECE05vIFNJR04gSUQgbWF0Y2hpbmcEDGRhdGFUb0RlbGV0ZQkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5RGF0ZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleU5hbWUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlEZXNjAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5RGlzcGxheUNpZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV4cG9ydENpZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleUV4cG9ydEhhc2gCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ5rZXlMaWNlbmNlSGFzaAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleUxpY2VuY2VDaWQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlUeXBlAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5VGFncwIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCmtleU1heE1pbnQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQlrZXlTaWduSUQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQlrZXlJc3N1ZWQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQlrZXlPblNhbGUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlGbGFnAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEIa2V5UHJpY2UCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARJrZXlBc3NldElkQWNjZXB0ZWQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ5rZXlPd25lckJ5SGFzaAEFCnNoYTI1Nkhhc2gJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleWlkQnlTaWduaWQCBQlhZGRyVG9Vc2UFBnNpZ25JRAkAzAgCCQELRGVsZXRlRW50cnkBCQESa2V5VHhpZEJ5SGFzaE93bmVyAgUKc2hhMjU2SGFzaAUJYWRkclRvVXNlCQDMCAIJAQtEZWxldGVFbnRyeQEJAQprZXlFbmRTYWxlAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5Tm90ZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCmtleUNyYXdsZXICBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlSb3lhbHRpZXMCBQlhZGRyVG9Vc2UFBWFydElkBQNuaWwDCQEBIQEJAQtpc0FydE1pbnRlZAIFCWFkZHJUb1VzZQUFYXJ0SWQDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cFDGRhdGFUb0RlbGV0ZQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIFDGRhdGFUb0RlbGV0ZQkAAgECKEFydCBhbHJlYWR5IG1pbnRlZCwgeW91IGNhbm5vdCBkZWxldGUgaXQBaQELc2VsbEFydHdvcmsFBWFydElkBXByaWNlB21heE1pbnQHYXNzZXRJZAhibG9ja0VuZAQNJHQwMjY0MzkyNjQ3MwkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMjY0MzkyNjQ3MwJfMQQGY2FsbGVyCAUNJHQwMjY0MzkyNjQ3MwJfMgQLYXJ0d29ya05hbWUJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlOYW1lAgUGY2FsbGVyBQVhcnRJZAMJAAACBQthcnR3b3JrTmFtZQIACQACAQIjVGhpcyBhcnQgZG9lc24ndCBtYXRjaCB5b3VyIGFjY291bnQEBGZsYWcJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlGbGFnAgUGY2FsbGVyBQVhcnRJZAMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAICD0NIQU5HRV9SRVFVSVJFRAkAzAgCAgdGTEFHR0VECQDMCAICB0lMTEVHQUwFA25pbAUEZmxhZwkAAgECD0ZsYWdnZWQgYXJ0d29yawQGYmlkTmJyCQEPZ2V0SW50ZWdlckJ5S2V5AQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FBWFydElkAwkAZgIAAAUIYmxvY2tFbmQJAAIBAgxOZWdhdGl2ZSBlbmQDAwkAZgIFCGJsb2NrRW5kAAADCQECIT0CBQdtYXhNaW50AAEGCQECIT0CBQVwcmljZQAABwkAAgECOlRpbWVkIG9mZmVyIG9ubHkgYWxsb3dlZCBmb3IgdW5pcXVlIGVkaXRpb24gYW5kIG9mZmVyIG9ubHkECmJhc2VIZWlnaHQDCQAAAgUIYmxvY2tFbmQAAAAABQZoZWlnaHQDCQEBIQEJARBhY2NlcHRlZEFzc2V0SWRzAQUHYXNzZXRJZAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQMJAQEhAQkBD3ZhbGlkYXRlTWluU2VsbAIFB2Fzc2V0SWQFBXByaWNlCQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJAQlrZXlJc3N1ZWQCBQZjYWxsZXIFBWFydElkBAptYXhDYW5TZWxsCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCmtleU1heE1pbnQCBQZjYWxsZXIFBWFydElkAwkAZgIFB21heE1pbnQAZAkAAgECHDEwMCBlZGl0aW9ucyBtYXggcGVyIGFydHdvcmsDAwkBAiE9AgUKYW1vdW50U29sZAAACQAAAgUKYW1vdW50U29sZAUKbWF4Q2FuU2VsbAcJAAIBAhRNYXggZWRpdGlvbiByZWFjaGVkLgMDCQBmAgUKYW1vdW50U29sZAAACQECIT0CBQptYXhDYW5TZWxsBQdtYXhNaW50BwkAAgECJkNhbm5vdCBjaGFuZ2UgbWF4aW11bSBpc3N1YWJsZSBhbnltb3JlAwMJAGYCBQZiaWROYnIAAAkBAiE9AgUKbWF4Q2FuU2VsbAUHbWF4TWludAcJAAIBAjFDYW5ub3QgY2hhbmdlIG1heGltdW0gaXNzdWFibGUgd2l0aCBhY3RpdmUgb3JkZXJzBApzZWxsU3RhdHVzAwMJAGYCBQVwcmljZQAACQBmAgUHbWF4TWludAAABwYHCQDMCAIJAQxCb29sZWFuRW50cnkCCQEJa2V5T25TYWxlAgUGY2FsbGVyBQVhcnRJZAUKc2VsbFN0YXR1cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCGtleVByaWNlAgUGY2FsbGVyBQVhcnRJZAUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlNYXhNaW50AgUGY2FsbGVyBQVhcnRJZAUHbWF4TWludAkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5QXNzZXRJZEFjY2VwdGVkAgUGY2FsbGVyBQVhcnRJZAUHYXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCmtleUVuZFNhbGUCBQZjYWxsZXIFBWFydElkCQBkAgUKYmFzZUhlaWdodAUIYmxvY2tFbmQFA25pbAFpAQpidXlBcnR3b3JrAgVhcnRJZAZpc3N1ZXIJAQdidXlNaW50BQUBaQUFYXJ0SWQFBmlzc3VlcgIAAgABaQEGc2V0QmlkAgVhcnRJZAZpc3N1ZXIEDSR0MDI4NzgzMjg4MjMJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDI4NzgzMjg4MjMCXzEEBmNhbGxlcggFDSR0MDI4NzgzMjg4MjMCXzIEBGRhdGUIBQ0kdDAyODc4MzI4ODIzAl8zBA0kdDAyODgyOTI4ODY1CQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFDSR0MDI4ODI5Mjg4NjUCXzEEBmFtb3VudAgFDSR0MDI4ODI5Mjg4NjUCXzIEB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkAgVXQVZFUwkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBAhibG9ja0VuZAkBD2dldEludGVnZXJCeUtleQEJAQprZXlFbmRTYWxlAgUGaXNzdWVyBQVhcnRJZAMDCQECIT0CBQhibG9ja0VuZAAACQBnAgUGaGVpZ2h0BQhibG9ja0VuZAcJAAIBAgtTYWxlIGVuZGVkLgQGYmlkTmJyCQEPZ2V0SW50ZWdlckJ5S2V5AQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FBWFydElkAwkBASEBCQEQYWNjZXB0ZWRBc3NldElkcwEFB2Fzc2V0SWQJAAIBAhJhc3NldCBub3QgYWNjZXB0ZWQDCQEBIQEJAQ92YWxpZGF0ZU1pblNlbGwCBQdhc3NldElkBQZhbW91bnQJAAIBAg5Xcm9uZyBtaW4gc2VsbAQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJAQlrZXlJc3N1ZWQCBQZpc3N1ZXIFBWFydElkBAptYXhDYW5TZWxsCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCmtleU1heE1pbnQCBQZpc3N1ZXIFBWFydElkAwkAZwIAAAUKbWF4Q2FuU2VsbAkAAgECI05vIG1heCBlZGl0aW9uIHNldCBmb3IgdGhpcyBhcnR3b3JrAwkAZwIFCmFtb3VudFNvbGQFCm1heENhblNlbGwJAAIBAhhTb2xkIG91dCwgeW91IGNhbm5vdCBiaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FBWFydElkAgFfBQZpc3N1ZXICAV8FBmNhbGxlcgIBXwUCaWQCBV9PUEVOCQCsAgIJAKwCAgkArAICCQCsAgIFB2Fzc2V0SWQCAV8JAKQDAQUGYW1vdW50AgFfCQCkAwEFBGRhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQVhcnRJZAkAZAIFBmJpZE5icgABBQNuaWwBaQEJYWNjZXB0QmlkBAVhcnRJZAZpc3N1ZXIFYmlkSWQIYmlkT3duZXIEBmNhbGxlcgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAwkBAiE9AgUGY2FsbGVyBQZpc3N1ZXIJAAIBAhlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uCQEHYnV5TWludAUFAWkFBWFydElkBQZpc3N1ZXIFBWJpZElkBQhiaWRPd25lcgFpAQljYW5jZWxCaWQEBWFydElkBmlzc3VlcgViaWRJZAhiaWRPd25lcgQNJHQwMzAzMjUzMDM4NwkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMzAzMjUzMDM4NwJfMQQGY2FsbGVyCAUNJHQwMzAzMjUzMDM4NwJfMgQEZGF0ZQgFDSR0MDMwMzI1MzAzODcCXzMDAwkBAiE9AgUGY2FsbGVyBQhiaWRPd25lcgkBAiE9AgUGY2FsbGVyBQZpc3N1ZXIHCQACAQIZWW91IGNhbm5vdCBkbyB0aGlzIGFjdGlvbgQNcmV0dXJuTW9uZXlUbwMJAAACBQZjYWxsZXIFBmlzc3VlcgUIYmlkT3duZXIFBmNhbGxlcgQGYmlkTmJyCQEPZ2V0SW50ZWdlckJ5S2V5AQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FBWFydElkBApiaWREYXRhS2V5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FBWFydElkAgFfBQZpc3N1ZXICAV8FCGJpZE93bmVyAgFfBQViaWRJZAQHYmlkRGF0YQkBDmdldFN0cmluZ0J5S2V5AQkArAICBQpiaWREYXRhS2V5AgVfT1BFTgMJAAACBQdiaWREYXRhAgAJAAIBAg1CaWQgbm90IGZvdW5kBApiaWREYXRhQXJyCQC1CQIFB2JpZERhdGECAV8EB2Fzc2V0SWQJAQ1nZXRCaWRBc3NldElkAQkAkQMCBQpiaWREYXRhQXJyAAAECWJpZFN0YXR1cwIIQ0FOQ0VMRUQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQpiaWREYXRhS2V5AgVfT1BFTgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUKYmlkRGF0YUtleQIBXwUJYmlkU3RhdHVzCQCsAgIJAKwCAgUHYmlkRGF0YQIBXwkApAMBBQRkYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUFYXJ0SWQJAGUCBQZiaWROYnIAAQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUNcmV0dXJuTW9uZXlUbwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmJpZERhdGFBcnIAAQUHYXNzZXRJZAUDbmlsAI1CPN4=", "height": 2339313, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4Bip3vgWYfW6sYoP6r4SXJSeUwTpV7BNmvuiXTBecU2R Next: 12U6rLtD2LtYDVW6imTaGDWpkVzUcSupNdR36hbPRGPy Diff:
OldNewDifferences
6161 let userAllowed = "ALLOWED"
6262
6363 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
64-
65-func getArtworkRoyalties (key) = valueOrElse(getInteger(this, key), 1000)
66-
6764
6865 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
6966 case a: String =>
221218 }
222219
223220
224-func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags) = {
221+func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags,royalties) = {
225222 let checkUser = validateUser(caller)
226223 if ((checkUser != ""))
227224 then throw(checkUser)
235232 then throw("100 Char. max name")
236233 else if (!(validateString(description, 1000)))
237234 then throw("1000 Char. max description")
238- else if ((size(split(tags, ",")) > 5))
239- then throw("5 tags max.")
240- else ""
235+ else if (if ((0 > royalties))
236+ then true
237+ else (royalties > 1000))
238+ then throw("Royalties cannot be less than 0% or higher than 10%")
239+ else if ((size(split(tags, ",")) > 5))
240+ then throw("5 tags max.")
241+ else ""
241242 }
242243
243244
251252
252253
253254 func validatePayment (i) = {
254- let $t088868922 = isPayment(i)
255- let payment = $t088868922._1
256- let amount = $t088868922._2
255+ let $t090159051 = isPayment(i)
256+ let payment = $t090159051._1
257+ let amount = $t090159051._2
257258 let assetId = if (if (isDefined(payment.assetId))
258259 then (payment.assetId == signAssetId)
259260 else false)
276277
277278
278279 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
279- let $t095299565 = isPayment(i)
280- let payment = $t095299565._1
281- let amount = $t095299565._2
280+ let $t096589694 = isPayment(i)
281+ let payment = $t096589694._1
282+ let amount = $t096589694._2
282283 let assetId = if (!(isDefined(payment.assetId)))
283284 then unit
284285 else if (if ((size(priceAssetId) > 0))
373374
374375
375376 func buyMint (i,artId,issuer,bidId,bidOwner) = {
376- let $t01202712089 = idCallerDate(i)
377- let id = $t01202712089._1
378- let caller = $t01202712089._2
379- let date = $t01202712089._3
377+ let $t01215612218 = idCallerDate(i)
378+ let id = $t01215612218._1
379+ let caller = $t01215612218._2
380+ let date = $t01215612218._3
380381 let isBid = if (if (if ((toBase58String(i.caller.bytes) == issuer))
381382 then (bidOwner != "")
382383 else false)
432433 then throw(checkUser)
433434 else {
434435 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
435- let $t01386814039 = if (isBid)
436+ let $t01399714168 = if (isBid)
436437 then getPriceAssetIdFromBid(bidDataKey)
437438 else validatePriceAssetId(i, priceAssetId, artworkPrice)
438- let amount = $t01386814039._1
439- let assetId = $t01386814039._2
439+ let amount = $t01399714168._1
440+ let assetId = $t01399714168._2
440441 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
441442 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShare(issuer)), 0)
442443 let isWhitelisted = checkWhitelist(issuer)
491492 let commissions = if ((amountForAgent != 0))
492493 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
493494 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
494- let nft_royalties = getArtworkRoyalties(keyRoyalties(issuer, artId))
495- let buyRes = ([IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry(("royalties_" + toBase58String(idNFT)), nft_royalties), IntegerEntry("total_nft_issued", (totalNFT + 1)), IntegerEntry(keyEndSale(issuer, artId), 0), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(receiveNFT, 1, idNFT)] ++ commissions)
495+ let buyRes = ([IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), IntegerEntry(keyEndSale(issuer, artId), 0), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(receiveNFT, 1, idNFT)] ++ commissions)
496496 if (isBid)
497497 then [soldData, bidUpdate, bidDelOld] :: buyRes
498498 else soldData :: buyRes
517517
518518
519519 @Callable(i)
520-func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = {
521- let $t01805918102 = idCallerDate(i)
522- let artId = $t01805918102._1
523- let caller = $t01805918102._2
524- let date = $t01805918102._3
520+func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties) = {
521+ let $t01805418097 = idCallerDate(i)
522+ let artId = $t01805418097._1
523+ let caller = $t01805418097._2
524+ let date = $t01805418097._3
525525 if (!(validateHash(sha256Hash)))
526526 then throw("Hash should be 64 characters maximum")
527527 else {
528- let $t01820718276 = setLIcence(cidLicence, sha256Licence)
529- let licenceCID = $t01820718276._1
530- let licenceHash = $t01820718276._2
531- let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
528+ let $t01820218271 = setLIcence(cidLicence, sha256Licence)
529+ let licenceCID = $t01820218271._1
530+ let licenceHash = $t01820218271._2
531+ let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
532532 if ((validateArtwork != ""))
533533 then throw("Something went wrong!")
534534 else {
535- let $t01850018542 = validatePayment(i)
536- let amount = $t01850018542._1
537- let assetId = $t01850018542._2
535+ let $t01850618548 = validatePayment(i)
536+ let amount = $t01850618548._1
537+ let assetId = $t01850618548._2
538538 if (!(isDefined(amount)))
539539 then throw("Something went wrong")
540540 else {
549549 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
550550 if (!(isSignCertified))
551551 then throw("Sign Certificate not found for this address.")
552- else [StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), StringEntry(keyCrawler(caller, artId), crawler), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
552+ else [StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), StringEntry(keyCrawler(caller, artId), crawler), IntegerEntry(keyRoyalties(caller, artId), royalties), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
553553 }
554554 }
555555 }
560560
561561
562562 @Callable(i)
563-func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = if (!(dappRunning))
563+func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties) = if (!(dappRunning))
564564 then throw(maintenanceMSG)
565565 else {
566566 let caller = toBase58String(i.caller.bytes)
567- let $t02132221391 = setLIcence(cidLicence, sha256Licence)
568- let licenceCID = $t02132221391._1
569- let licenceHash = $t02132221391._2
570- let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
567+ let $t02144421513 = setLIcence(cidLicence, sha256Licence)
568+ let licenceCID = $t02144421513._1
569+ let licenceHash = $t02144421513._2
570+ let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
571571 if ((validateArtwork != ""))
572572 then throw("Something went wrong!")
573573 else {
579579 if ((flag == "ILLEGAL"))
580580 then throw("Cannot update ILLEGAL artwork")
581581 else if (!(isArtMinted(caller, txid)))
582- then [StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type), StringEntry(keyCrawler(caller, txid), crawler)]
582+ then [StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type), StringEntry(keyCrawler(caller, txid), crawler), IntegerEntry(keyRoyalties(caller, txid), royalties)]
583583 else throw("Already minted")
584584 }
585585 }
589589
590590 @Callable(i)
591591 func flagArtwork (artId,addr,flag,note) = {
592- let $t02284722881 = idCallerDate(i)
593- let id = $t02284722881._1
594- let caller = $t02284722881._2
592+ let $t02304623080 = idCallerDate(i)
593+ let id = $t02304623080._1
594+ let caller = $t02304623080._2
595595 if (containsElement([chris, toString(this)], caller))
596596 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
597597 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
603603
604604 @Callable(i)
605605 func deleteArtwork (artId,addr) = {
606- let $t02333123365 = idCallerDate(i)
607- let id = $t02333123365._1
608- let caller = $t02333123365._2
606+ let $t02353023564 = idCallerDate(i)
607+ let id = $t02353023564._1
608+ let caller = $t02353023564._2
609609 let addrToUse = if (containsElement([chris, toString(this)], caller))
610610 then addr
611611 else caller
621621 if ((signID == ""))
622622 then throw("No SIGN ID matching")
623623 else {
624- let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addrToUse, artId)), DeleteEntry(keyPrice(addrToUse, artId)), DeleteEntry(keyAssetIdAccepted(addrToUse, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse)), DeleteEntry(keyEndSale(addrToUse, artId)), DeleteEntry(keyNote(addrToUse, artId)), DeleteEntry(keyCrawler(addrToUse, artId))]
624+ let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addrToUse, artId)), DeleteEntry(keyPrice(addrToUse, artId)), DeleteEntry(keyAssetIdAccepted(addrToUse, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse)), DeleteEntry(keyEndSale(addrToUse, artId)), DeleteEntry(keyNote(addrToUse, artId)), DeleteEntry(keyCrawler(addrToUse, artId)), DeleteEntry(keyRoyalties(addrToUse, artId))]
625625 if (!(isArtMinted(addrToUse, artId)))
626626 then if (!(dappRunning))
627627 then throw(maintenanceMSG)
638638
639639 @Callable(i)
640640 func sellArtwork (artId,price,maxMint,assetId,blockEnd) = {
641- let $t02618626220 = idCallerDate(i)
642- let id = $t02618626220._1
643- let caller = $t02618626220._2
641+ let $t02643926473 = idCallerDate(i)
642+ let id = $t02643926473._1
643+ let caller = $t02643926473._2
644644 let artworkName = getStringByKey(keyName(caller, artId))
645645 if ((artworkName == ""))
646646 then throw("This art doesn't match your account")
711711
712712 @Callable(i)
713713 func setBid (artId,issuer) = {
714- let $t02853028570 = idCallerDate(i)
715- let id = $t02853028570._1
716- let caller = $t02853028570._2
717- let date = $t02853028570._3
718- let $t02857628612 = isPayment(i)
719- let payment = $t02857628612._1
720- let amount = $t02857628612._2
714+ let $t02878328823 = idCallerDate(i)
715+ let id = $t02878328823._1
716+ let caller = $t02878328823._2
717+ let date = $t02878328823._3
718+ let $t02882928865 = isPayment(i)
719+ let payment = $t02882928865._1
720+ let amount = $t02882928865._2
721721 let assetId = if (!(isDefined(payment.assetId)))
722722 then "WAVES"
723723 else toBase58String(value(payment.assetId))
758758
759759 @Callable(i)
760760 func cancelBid (artId,issuer,bidId,bidOwner) = {
761- let $t03007230134 = idCallerDate(i)
762- let id = $t03007230134._1
763- let caller = $t03007230134._2
764- let date = $t03007230134._3
761+ let $t03032530387 = idCallerDate(i)
762+ let id = $t03032530387._1
763+ let caller = $t03032530387._2
764+ let date = $t03032530387._3
765765 if (if ((caller != bidOwner))
766766 then (caller != issuer)
767767 else false)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringByKey (key) = valueOrElse(getString(this, key), "")
55
66
77 let unitTest = false
88
99 let oracleFee = value(addressFromString(getStringByKey("conf_oracle_fee")))
1010
1111 let signDapp = value(addressFromString(getStringByKey("conf_signweb_dapp")))
1212
1313 let feeReceiver = getStringByKey("conf_fee_receiver")
1414
1515 let userDapp = if (unitTest)
1616 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1717 else value(addressFromString(getStringByKey("conf_users_dapp")))
1818
1919 let whitelistDapp = value(addressFromString(getStringByKey("conf_whitelist_dapp")))
2020
2121 let signAssetId = fromBase58String(getStringByKey("conf_accepted_asset_SIGN"))
2222
2323 let usdnAssetId = fromBase58String(getStringByKey("conf_accepted_asset_USDN"))
2424
2525 let usdtAssetId = fromBase58String(getStringByKey("conf_accepted_asset_USDT"))
2626
2727 let wavesAssetId = base58''
2828
2929 let chris = getStringByKey("conf_admin_1")
3030
3131 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
3232
3333
3434 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
3535
3636
3737 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
3838
3939
4040 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
4141
4242
4343 let signCut = 7
4444
4545 let usdnWaveCut = 10
4646
4747 let defaultLicence = getStringByKey("conf_default_licence")
4848
4949 let defaultHashLicence = getStringByKey("conf_default_licence_hash")
5050
5151 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
5252
5353 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
5454
5555 let userSuspended = "SUSPENDED"
5656
5757 let userRemoved = "REMOVED"
5858
5959 let userUnregistered = "UNREGISTERED"
6060
6161 let userAllowed = "ALLOWED"
6262
6363 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
64-
65-func getArtworkRoyalties (key) = valueOrElse(getInteger(this, key), 1000)
66-
6764
6865 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
6966 case a: String =>
7067 if (contains(a, sha256Hash))
7168 then true
7269 else false
7370 case _ =>
7471 false
7572 }
7673
7774
7875 func validateCID (cid) = if (contains(cid, "/"))
7976 then if (if ((76 > size(cid)))
8077 then (size(split(cid, "/")[0]) == 59)
8178 else false)
8279 then (16 > size(split(cid, "/")[1]))
8380 else false
8481 else false
8582
8683
8784 func validateHash (hash) = (size(hash) == 64)
8885
8986
9087 func keyUserStatus (caller) = ("user_status_" + caller)
9188
9289
9390 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
9491
9592
9693 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
9794
9895
9996 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
10097
10198
10299 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
103100
104101
105102 func keyExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
106103
107104
108105 func keyExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
109106
110107
111108 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
112109
113110
114111 func keySignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
115112
116113
117114 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
118115
119116
120117 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
121118
122119
123120 func keyLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
124121
125122
126123 func keyLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
127124
128125
129126 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
130127
131128
132129 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
133130
134131
135132 func keyNote (caller,artId) = ((("art_note_" + artId) + "_") + caller)
136133
137134
138135 func keyCrawler (caller,artId) = ((("art_crawler_cid_" + artId) + "_") + caller)
139136
140137
141138 func keyRoyalties (caller,artId) = ((("art_royalties_" + artId) + "_") + caller)
142139
143140
144141 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
145142
146143
147144 func keyEndSale (caller,artId) = ((("art_endsale_" + artId) + "_") + caller)
148145
149146
150147 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
151148
152149
153150 func keyFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
154151
155152
156153 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
157154
158155
159156 func keyPrimaryShare (artistAddr) = ("artist_agent_primary_" + artistAddr)
160157
161158
162159 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
163160
164161
165162 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
166163
167164
168165 func keyidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
169166
170167
171168 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
172169
173170
174171 func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
175172 then throw("Wrong Display CID")
176173 else if (!(validateCID(cidExport)))
177174 then throw("Wrong Export CID")
178175 else if (if ((cidLicence != ""))
179176 then !(validateCID(cidLicence))
180177 else false)
181178 then throw("Wrong Licence CID")
182179 else true
183180
184181
185182 func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
186183 then throw("Export Hash 64 char. max")
187184 else if (!(validateHash(sha256Licence)))
188185 then throw("Licence Hash 64 char. max")
189186 else true
190187
191188
192189 func validateString (str,max) = if ((size(str) == 0))
193190 then throw("Field cannot be is empty")
194191 else if ((size(str) > max))
195192 then throw((str + " is too long"))
196193 else true
197194
198195
199196 func validateUser (caller) = {
200197 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
201198 if (if ((userStatus == userUnregistered))
202199 then true
203200 else (userStatus == userAllowed))
204201 then "Register this account first with \"Account\" tab"
205202 else if ((userStatus == userSuspended))
206203 then "Account suspended"
207204 else if ((userStatus == userRemoved))
208205 then "Account removed"
209206 else ""
210207 }
211208
212209
213210 func setLIcence (cidLicence,sha256Licence) = {
214211 let cid = if ((size(cidLicence) == 0))
215212 then defaultLicence
216213 else cidLicence
217214 let hash = if ((size(sha256Licence) == 0))
218215 then defaultHashLicence
219216 else sha256Licence
220217 $Tuple2(cid, hash)
221218 }
222219
223220
224-func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags) = {
221+func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags,royalties) = {
225222 let checkUser = validateUser(caller)
226223 if ((checkUser != ""))
227224 then throw(checkUser)
228225 else if ((size(cidDisplay) == 0))
229226 then throw("Display CID cannot be empty")
230227 else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
231228 then throw("Problem with CID")
232229 else if (!(validateAllHash(sha256Export, licenceHash)))
233230 then throw("Problem with Hashes")
234231 else if (!(validateString(name, 100)))
235232 then throw("100 Char. max name")
236233 else if (!(validateString(description, 1000)))
237234 then throw("1000 Char. max description")
238- else if ((size(split(tags, ",")) > 5))
239- then throw("5 tags max.")
240- else ""
235+ else if (if ((0 > royalties))
236+ then true
237+ else (royalties > 1000))
238+ then throw("Royalties cannot be less than 0% or higher than 10%")
239+ else if ((size(split(tags, ",")) > 5))
240+ then throw("5 tags max.")
241+ else ""
241242 }
242243
243244
244245 func isPayment (i) = if ((size(i.payments) == 0))
245246 then throw("No payment attached")
246247 else {
247248 let payment = value(i.payments[0])
248249 let amount = value(payment.amount)
249250 $Tuple2(payment, amount)
250251 }
251252
252253
253254 func validatePayment (i) = {
254- let $t088868922 = isPayment(i)
255- let payment = $t088868922._1
256- let amount = $t088868922._2
255+ let $t090159051 = isPayment(i)
256+ let payment = $t090159051._1
257+ let amount = $t090159051._2
257258 let assetId = if (if (isDefined(payment.assetId))
258259 then (payment.assetId == signAssetId)
259260 else false)
260261 then payment.assetId
261262 else throw("Only SIGN token accepted as transaction fee")
262263 if ((amount != currentCertificationPrice))
263264 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
264265 else $Tuple2(amount, assetId)
265266 }
266267
267268
268269 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
269270 case b: Int =>
270271 if ((b != 0))
271272 then true
272273 else false
273274 case _ =>
274275 false
275276 }
276277
277278
278279 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
279- let $t095299565 = isPayment(i)
280- let payment = $t095299565._1
281- let amount = $t095299565._2
280+ let $t096589694 = isPayment(i)
281+ let payment = $t096589694._1
282+ let amount = $t096589694._2
282283 let assetId = if (!(isDefined(payment.assetId)))
283284 then unit
284285 else if (if ((size(priceAssetId) > 0))
285286 then (toBase58String(value(payment.assetId)) == priceAssetId)
286287 else false)
287288 then payment.assetId
288289 else throw("Wrong asset id")
289290 if (if ((assetId == unit))
290291 then (priceAssetId != "")
291292 else false)
292293 then throw("Wrong asset id")
293294 else if ((artworkPrice != amount))
294295 then throw("Payment don't match")
295296 else $Tuple2(amount, assetId)
296297 }
297298
298299
299300 func acceptedAssetIds (assetId) = if (if (if (if (if ((assetId != toBase58String(signAssetId)))
300301 then (assetId != toBase58String(wavesAssetId))
301302 else false)
302303 then (assetId != "WAVES")
303304 else false)
304305 then (assetId != toBase58String(usdnAssetId))
305306 else false)
306307 then (assetId != toBase58String(usdtAssetId))
307308 else false)
308309 then throw("Only SIGN, USDN,USDT or WAVES accepted")
309310 else true
310311
311312
312313 func validateMinSell (assetId,price) = {
313314 let minSellWaves = if (unitTest)
314315 then 10
315316 else getIntegerByKeyFromOracle("waves_min_sell")
316317 let minSellUsdn = 1000000
317318 let minSellSign = if (unitTest)
318319 then 1
319320 else (currentCertificationPrice * 2)
320321 if (if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
321322 then (minSellUsdn > price)
322323 else false)
323324 then (price != 0)
324325 else false)
325326 then true
326327 else if (if ((assetId == toBase58String(usdtAssetId)))
327328 then (minSellUsdn > price)
328329 else false)
329330 then (price != 0)
330331 else false)
331332 then true
332333 else if (if ((assetId == toBase58String(signAssetId)))
333334 then (minSellSign > price)
334335 else false)
335336 then (price != 0)
336337 else false)
337338 then true
338339 else if (if (if ((assetId == toBase58String(wavesAssetId)))
339340 then true
340341 else (assetId == "WAVES"))
341342 then (minSellWaves > price)
342343 else false)
343344 then (price != 0)
344345 else false)
345346 then throw("Wrong minimum sell price")
346347 else true
347348 }
348349
349350
350351 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
351352 then unit
352353 else fromBase58String(assetId)
353354
354355
355356 func getPriceAssetIdFromBid (bidDataKey) = {
356357 let bidData = getStringByKey((bidDataKey + "_OPEN"))
357358 if ((bidData == ""))
358359 then throw("Bid not found")
359360 else {
360361 let bidDataArr = split(bidData, "_")
361362 let bidAmount = parseIntValue(bidDataArr[1])
362363 let bidAssetId = getBidAssetId(bidDataArr[0])
363364 if ((0 >= bidAmount))
364365 then throw("Wrong amount")
365366 else $Tuple2(bidAmount, bidAssetId)
366367 }
367368 }
368369
369370
370371 func idCallerDate (i) = if (!(dappRunning))
371372 then throw(maintenanceMSG)
372373 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
373374
374375
375376 func buyMint (i,artId,issuer,bidId,bidOwner) = {
376- let $t01202712089 = idCallerDate(i)
377- let id = $t01202712089._1
378- let caller = $t01202712089._2
379- let date = $t01202712089._3
377+ let $t01215612218 = idCallerDate(i)
378+ let id = $t01215612218._1
379+ let caller = $t01215612218._2
380+ let date = $t01215612218._3
380381 let isBid = if (if (if ((toBase58String(i.caller.bytes) == issuer))
381382 then (bidOwner != "")
382383 else false)
383384 then (bidId != "")
384385 else false)
385386 then true
386387 else false
387388 let blockEnd = getIntegerByKey(keyEndSale(caller, artId))
388389 if (if (if ((blockEnd != 0))
389390 then (height >= blockEnd)
390391 else false)
391392 then !(isBid)
392393 else false)
393394 then throw("Sale ended.")
394395 else {
395396 let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
396397 let totalNFT = getIntegerByKey("total_nft_issued")
397398 let signID = getStringByKey(keySignID(issuer, artId))
398399 let artworkName = getStringByKey(keyName(issuer, artId))
399400 if ((artworkName == ""))
400401 then throw("Art doesn't exist")
401402 else {
402403 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
403404 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
404405 let artworkPrice = if (callerIsIssuer)
405406 then (currentCertificationPrice * 2)
406407 else getIntegerByKey(keyPrice(issuer, artId))
407408 let priceAssetId = if (callerIsIssuer)
408409 then toBase58String(signAssetId)
409410 else getStringByKey(keyAssetIdAccepted(issuer, artId))
410411 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
411412 if (if (if (!(isBid))
412413 then !(callerIsIssuer)
413414 else false)
414415 then if (if ((0 >= artworkPrice))
415416 then true
416417 else !(isOnSale))
417418 then true
418419 else (0 >= maxCanSell)
419420 else false)
420421 then throw("Art not for sale")
421422 else if (if (if (!(isBid))
422423 then callerIsIssuer
423424 else false)
424425 then (0 >= maxCanSell)
425426 else false)
426427 then throw("Max issuable not set")
427428 else {
428429 let checkUser = validateUser(issuer)
429430 if (if (isBid)
430431 then (checkUser != "")
431432 else false)
432433 then throw(checkUser)
433434 else {
434435 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
435- let $t01386814039 = if (isBid)
436+ let $t01399714168 = if (isBid)
436437 then getPriceAssetIdFromBid(bidDataKey)
437438 else validatePriceAssetId(i, priceAssetId, artworkPrice)
438- let amount = $t01386814039._1
439- let assetId = $t01386814039._2
439+ let amount = $t01399714168._1
440+ let assetId = $t01399714168._2
440441 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
441442 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShare(issuer)), 0)
442443 let isWhitelisted = checkWhitelist(issuer)
443444 let cut = if ((isWhitelisted > height))
444445 then 0
445446 else if ((assetId == signAssetId))
446447 then signCut
447448 else usdnWaveCut
448449 let amountForSign = fraction(amount, cut, 100)
449450 let amountForAgent = if (if (if ((agent != feeReceiver))
450451 then (agentShare > 0)
451452 else false)
452453 then (height > isWhitelisted)
453454 else false)
454455 then fraction(amount, agentShare, 100)
455456 else 0
456457 let amountForCreator = (amount - amountForSign)
457458 if ((amountSold == maxCanSell))
458459 then throw("Art sold out")
459460 else {
460461 let newAmountSold = (amountSold + 1)
461462 let issueMeta = ((((((((((("Creator: " + issuer) + ",
462463 ArtID: ") + artId) + ",
463464 SignID: ") + signID) + ",
464465 Artwork name: ") + artworkName) + ",
465466 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
466467 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
467468 let idNFT = calculateAssetId(issueNFT)
468469 let sellStatus = if (if ((newAmountSold == maxCanSell))
469470 then true
470471 else !(isOnSale))
471472 then false
472473 else true
473474 let receiveNFT = if (if (if ((caller == issuer))
474475 then (bidOwner != "")
475476 else false)
476477 then (bidId != "")
477478 else false)
478479 then addressFromStringValue(bidOwner)
479480 else i.caller
480481 let assetIdBid = if (!(isDefined(assetId)))
481482 then "WAVES"
482483 else toBase58String(value(assetId))
483484 let bidData = getStringByKey((bidDataKey + "_OPEN"))
484485 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
485486 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
486487 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
487488 let soldValue = if (!(isBid))
488489 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
489490 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
490491 let soldData = StringEntry(soldKey, soldValue)
491492 let commissions = if ((amountForAgent != 0))
492493 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
493494 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
494- let nft_royalties = getArtworkRoyalties(keyRoyalties(issuer, artId))
495- let buyRes = ([IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry(("royalties_" + toBase58String(idNFT)), nft_royalties), IntegerEntry("total_nft_issued", (totalNFT + 1)), IntegerEntry(keyEndSale(issuer, artId), 0), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(receiveNFT, 1, idNFT)] ++ commissions)
495+ let buyRes = ([IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), IntegerEntry(keyEndSale(issuer, artId), 0), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(receiveNFT, 1, idNFT)] ++ commissions)
496496 if (isBid)
497497 then [soldData, bidUpdate, bidDelOld] :: buyRes
498498 else soldData :: buyRes
499499 }
500500 }
501501 }
502502 }
503503 }
504504 }
505505
506506
507507 @Callable(invoke)
508508 func setConf (key,val) = {
509509 let caller = toString(invoke.caller)
510510 if (containsElement([chris, toString(this)], caller))
511511 then if (contains(key, "conf_"))
512512 then [StringEntry(key, val)]
513513 else throw("Entries starting with conf_ only")
514514 else throw("You are not allowed to change this")
515515 }
516516
517517
518518
519519 @Callable(i)
520-func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = {
521- let $t01805918102 = idCallerDate(i)
522- let artId = $t01805918102._1
523- let caller = $t01805918102._2
524- let date = $t01805918102._3
520+func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties) = {
521+ let $t01805418097 = idCallerDate(i)
522+ let artId = $t01805418097._1
523+ let caller = $t01805418097._2
524+ let date = $t01805418097._3
525525 if (!(validateHash(sha256Hash)))
526526 then throw("Hash should be 64 characters maximum")
527527 else {
528- let $t01820718276 = setLIcence(cidLicence, sha256Licence)
529- let licenceCID = $t01820718276._1
530- let licenceHash = $t01820718276._2
531- let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
528+ let $t01820218271 = setLIcence(cidLicence, sha256Licence)
529+ let licenceCID = $t01820218271._1
530+ let licenceHash = $t01820218271._2
531+ let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
532532 if ((validateArtwork != ""))
533533 then throw("Something went wrong!")
534534 else {
535- let $t01850018542 = validatePayment(i)
536- let amount = $t01850018542._1
537- let assetId = $t01850018542._2
535+ let $t01850618548 = validatePayment(i)
536+ let amount = $t01850618548._1
537+ let assetId = $t01850618548._2
538538 if (!(isDefined(amount)))
539539 then throw("Something went wrong")
540540 else {
541541 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
542542 if ((entryExist != ""))
543543 then throw("You already added it")
544544 else {
545545 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
546546 if ((hashExist != ""))
547547 then throw("Hash already registered")
548548 else {
549549 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
550550 if (!(isSignCertified))
551551 then throw("Sign Certificate not found for this address.")
552- else [StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), StringEntry(keyCrawler(caller, artId), crawler), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
552+ else [StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), StringEntry(keyCrawler(caller, artId), crawler), IntegerEntry(keyRoyalties(caller, artId), royalties), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
553553 }
554554 }
555555 }
556556 }
557557 }
558558 }
559559
560560
561561
562562 @Callable(i)
563-func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = if (!(dappRunning))
563+func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties) = if (!(dappRunning))
564564 then throw(maintenanceMSG)
565565 else {
566566 let caller = toBase58String(i.caller.bytes)
567- let $t02132221391 = setLIcence(cidLicence, sha256Licence)
568- let licenceCID = $t02132221391._1
569- let licenceHash = $t02132221391._2
570- let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
567+ let $t02144421513 = setLIcence(cidLicence, sha256Licence)
568+ let licenceCID = $t02144421513._1
569+ let licenceHash = $t02144421513._2
570+ let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
571571 if ((validateArtwork != ""))
572572 then throw("Something went wrong!")
573573 else {
574574 let entryExist = getStringByKey(keyName(caller, txid))
575575 if ((entryExist == ""))
576576 then throw("Entry not found")
577577 else {
578578 let flag = getStringByKey(keyFlag(caller, txid))
579579 if ((flag == "ILLEGAL"))
580580 then throw("Cannot update ILLEGAL artwork")
581581 else if (!(isArtMinted(caller, txid)))
582- then [StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type), StringEntry(keyCrawler(caller, txid), crawler)]
582+ then [StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type), StringEntry(keyCrawler(caller, txid), crawler), IntegerEntry(keyRoyalties(caller, txid), royalties)]
583583 else throw("Already minted")
584584 }
585585 }
586586 }
587587
588588
589589
590590 @Callable(i)
591591 func flagArtwork (artId,addr,flag,note) = {
592- let $t02284722881 = idCallerDate(i)
593- let id = $t02284722881._1
594- let caller = $t02284722881._2
592+ let $t02304623080 = idCallerDate(i)
593+ let id = $t02304623080._1
594+ let caller = $t02304623080._2
595595 if (containsElement([chris, toString(this)], caller))
596596 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
597597 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
598598 else throw(("Unknow status " + flag))
599599 else throw("You are not allowed")
600600 }
601601
602602
603603
604604 @Callable(i)
605605 func deleteArtwork (artId,addr) = {
606- let $t02333123365 = idCallerDate(i)
607- let id = $t02333123365._1
608- let caller = $t02333123365._2
606+ let $t02353023564 = idCallerDate(i)
607+ let id = $t02353023564._1
608+ let caller = $t02353023564._2
609609 let addrToUse = if (containsElement([chris, toString(this)], caller))
610610 then addr
611611 else caller
612612 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
613613 if ((entryExist == ""))
614614 then throw("No art matching for this address")
615615 else {
616616 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
617617 if ((sha256Hash == ""))
618618 then throw("No art hash matching for this address")
619619 else {
620620 let signID = getStringByKey(keySignID(addrToUse, artId))
621621 if ((signID == ""))
622622 then throw("No SIGN ID matching")
623623 else {
624- let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addrToUse, artId)), DeleteEntry(keyPrice(addrToUse, artId)), DeleteEntry(keyAssetIdAccepted(addrToUse, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse)), DeleteEntry(keyEndSale(addrToUse, artId)), DeleteEntry(keyNote(addrToUse, artId)), DeleteEntry(keyCrawler(addrToUse, artId))]
624+ let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addrToUse, artId)), DeleteEntry(keyPrice(addrToUse, artId)), DeleteEntry(keyAssetIdAccepted(addrToUse, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse)), DeleteEntry(keyEndSale(addrToUse, artId)), DeleteEntry(keyNote(addrToUse, artId)), DeleteEntry(keyCrawler(addrToUse, artId)), DeleteEntry(keyRoyalties(addrToUse, artId))]
625625 if (!(isArtMinted(addrToUse, artId)))
626626 then if (!(dappRunning))
627627 then throw(maintenanceMSG)
628628 else dataToDelete
629629 else if (containsElement([chris, toString(this)], caller))
630630 then dataToDelete
631631 else throw("Art already minted, you cannot delete it")
632632 }
633633 }
634634 }
635635 }
636636
637637
638638
639639 @Callable(i)
640640 func sellArtwork (artId,price,maxMint,assetId,blockEnd) = {
641- let $t02618626220 = idCallerDate(i)
642- let id = $t02618626220._1
643- let caller = $t02618626220._2
641+ let $t02643926473 = idCallerDate(i)
642+ let id = $t02643926473._1
643+ let caller = $t02643926473._2
644644 let artworkName = getStringByKey(keyName(caller, artId))
645645 if ((artworkName == ""))
646646 then throw("This art doesn't match your account")
647647 else {
648648 let flag = getStringByKey(keyFlag(caller, artId))
649649 if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
650650 then throw("Flagged artwork")
651651 else {
652652 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
653653 if ((0 > blockEnd))
654654 then throw("Negative end")
655655 else if (if ((blockEnd > 0))
656656 then if ((maxMint != 1))
657657 then true
658658 else (price != 0)
659659 else false)
660660 then throw("Timed offer only allowed for unique edition and offer only")
661661 else {
662662 let baseHeight = if ((blockEnd == 0))
663663 then 0
664664 else height
665665 if (!(acceptedAssetIds(assetId)))
666666 then throw("Something went wrong!")
667667 else if (!(validateMinSell(assetId, price)))
668668 then throw("Something went wrong!")
669669 else {
670670 let checkUser = validateUser(caller)
671671 if ((checkUser != ""))
672672 then throw(checkUser)
673673 else {
674674 let amountSold = getIntegerByKey(keyIssued(caller, artId))
675675 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
676676 if ((maxMint > 100))
677677 then throw("100 editions max per artwork")
678678 else if (if ((amountSold != 0))
679679 then (amountSold == maxCanSell)
680680 else false)
681681 then throw("Max edition reached.")
682682 else if (if ((amountSold > 0))
683683 then (maxCanSell != maxMint)
684684 else false)
685685 then throw("Cannot change maximum issuable anymore")
686686 else if (if ((bidNbr > 0))
687687 then (maxCanSell != maxMint)
688688 else false)
689689 then throw("Cannot change maximum issuable with active orders")
690690 else {
691691 let sellStatus = if (if ((price > 0))
692692 then (maxMint > 0)
693693 else false)
694694 then true
695695 else false
696696 [BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), StringEntry(keyAssetIdAccepted(caller, artId), assetId), IntegerEntry(keyEndSale(caller, artId), (baseHeight + blockEnd))]
697697 }
698698 }
699699 }
700700 }
701701 }
702702 }
703703 }
704704
705705
706706
707707 @Callable(i)
708708 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
709709
710710
711711
712712 @Callable(i)
713713 func setBid (artId,issuer) = {
714- let $t02853028570 = idCallerDate(i)
715- let id = $t02853028570._1
716- let caller = $t02853028570._2
717- let date = $t02853028570._3
718- let $t02857628612 = isPayment(i)
719- let payment = $t02857628612._1
720- let amount = $t02857628612._2
714+ let $t02878328823 = idCallerDate(i)
715+ let id = $t02878328823._1
716+ let caller = $t02878328823._2
717+ let date = $t02878328823._3
718+ let $t02882928865 = isPayment(i)
719+ let payment = $t02882928865._1
720+ let amount = $t02882928865._2
721721 let assetId = if (!(isDefined(payment.assetId)))
722722 then "WAVES"
723723 else toBase58String(value(payment.assetId))
724724 let blockEnd = getIntegerByKey(keyEndSale(issuer, artId))
725725 if (if ((blockEnd != 0))
726726 then (height >= blockEnd)
727727 else false)
728728 then throw("Sale ended.")
729729 else {
730730 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
731731 if (!(acceptedAssetIds(assetId)))
732732 then throw("asset not accepted")
733733 else if (!(validateMinSell(assetId, amount)))
734734 then throw("Wrong min sell")
735735 else {
736736 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
737737 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
738738 if ((0 >= maxCanSell))
739739 then throw("No max edition set for this artwork")
740740 else if ((amountSold >= maxCanSell))
741741 then throw("Sold out, you cannot bid")
742742 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
743743 }
744744 }
745745 }
746746
747747
748748
749749 @Callable(i)
750750 func acceptBid (artId,issuer,bidId,bidOwner) = {
751751 let caller = toBase58String(i.caller.bytes)
752752 if ((caller != issuer))
753753 then throw("You cannot do this action")
754754 else buyMint(i, artId, issuer, bidId, bidOwner)
755755 }
756756
757757
758758
759759 @Callable(i)
760760 func cancelBid (artId,issuer,bidId,bidOwner) = {
761- let $t03007230134 = idCallerDate(i)
762- let id = $t03007230134._1
763- let caller = $t03007230134._2
764- let date = $t03007230134._3
761+ let $t03032530387 = idCallerDate(i)
762+ let id = $t03032530387._1
763+ let caller = $t03032530387._2
764+ let date = $t03032530387._3
765765 if (if ((caller != bidOwner))
766766 then (caller != issuer)
767767 else false)
768768 then throw("You cannot do this action")
769769 else {
770770 let returnMoneyTo = if ((caller == issuer))
771771 then bidOwner
772772 else caller
773773 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
774774 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
775775 let bidData = getStringByKey((bidDataKey + "_OPEN"))
776776 if ((bidData == ""))
777777 then throw("Bid not found")
778778 else {
779779 let bidDataArr = split(bidData, "_")
780780 let assetId = getBidAssetId(bidDataArr[0])
781781 let bidStatus = "CANCELED"
782782 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(returnMoneyTo)), parseIntValue(bidDataArr[1]), assetId)]
783783 }
784784 }
785785 }
786786
787787

github/deemru/w8io/169f3d6 
105.34 ms