tx · BqT1mMvxXNdNpjCsKqKENytH33fPqM7kRVNFYL4qWkoX

3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj:  -0.01300000 Waves

2023.01.30 14:44 [2427659] smart account 3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj > SELF 0.00000000 Waves

{ "type": 13, "id": "BqT1mMvxXNdNpjCsKqKENytH33fPqM7kRVNFYL4qWkoX", "fee": 1300000, "feeAssetId": null, "timestamp": 1675079095441, "version": 2, "chainId": 84, "sender": "3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj", "senderPublicKey": "A2m227AHcq7gWfSU59Q3UJaqkEa7SccFYmJuWHbFrrKE", "proofs": [ "5CYeet6y3wiFY3hc6j84dp5fg52duCmNZKp7KP3eSC9hDpJtWAbHFqCPQY7kahwXoirUA8L1kEph8isMb9LGnAqD" ], "script": "base64:BgJRCAISBAoCCAgSBAoCBAgSAwoBBBIICgYICAgIAQgSCAoGCAgICAEIEgQKAggIEgoKCAgICAgBAQEBEgMKAQgSBgoECAgBARIECgIICBIDCgEIKwAHVkVSU0lPTgIDMS41AQ5nZXRTdHJpbmdCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAQ9nZXRCb29sZWFuQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQNrZXkHAQ9nZXRJbnRlZ2VyQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAAFY2hyaXMJAQ5nZXRTdHJpbmdCeUtleQECDGNvbmZfYWRtaW5fMQAOZGFwcFJ1bm5pbmdLZXkCFGNvbmZfZGFwcF9pc19ydW5uaW5nABFtYWludGVuYW5jZU1TR0tleQIUY29uZl9tYWludGVuYW5jZV9tc2cAEndoaXRlbGlzdGVkb25seUtleQIVY29uZl93aGl0ZWxpc3RlZF9vbmx5AAtkYXBwUnVubmluZwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ5kYXBwUnVubmluZ0tleQYADm1haW50ZW5hbmNlTVNHCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFEW1haW50ZW5hbmNlTVNHS2V5AgAAD3doaXRlbGlzdGVkb25seQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBRJ3aGl0ZWxpc3RlZG9ubHlLZXkGAA13aGl0ZWxpc3REYXBwCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECE2NvbmZfd2hpdGVsaXN0X2RhcHAACHNpZ25EYXBwCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECEWNvbmZfc2lnbndlYl9kYXBwAAt1c2VyQWxsb3dlZAIHQUxMT1dFRAAOdXNlclJlZ2lzdGVyZWQCClJFR0lTVEVSRUQADHVzZXJWZXJpZmllZAIIVkVSSUZJRUQADXVzZXJTdXNwZW5kZWQCCVNVU1BFTkRFRAALdXNlclJlbW92ZWQCB1JFTU9WRUQAEnVzZXJDaGFuZ2VSZXF1aXJlZAIPQ0hBTkdFX1JFUVVJUkVEABB1c2VyVW5yZWdpc3RlcmVkAgxVTlJFR0lTVEVSRUQACXVzZXJSZXNldAIFUkVTRVQBC2tleVVzZXJBZGRyAQZjYWxsZXIJAKwCAgIFdXNlcl8FBmNhbGxlcgELa2V5VXNlck5hbWUBBmNhbGxlcgkArAICAgp1c2VyX25hbWVfBQZjYWxsZXIBC2tleVVzZXJEZXNjAQZjYWxsZXIJAKwCAgIKdXNlcl9kZXNjXwUGY2FsbGVyAQ1rZXlVc2VyU29jaWFsAQZjYWxsZXIJAKwCAgIMdXNlcl9zb2NpYWxfBQZjYWxsZXIBDGtleVVzZXJUaHVtYgEGY2FsbGVyCQCsAgICC3VzZXJfdGh1bWJfBQZjYWxsZXIBDWtleVVzZXJTdGF0dXMBBmNhbGxlcgkArAICAgx1c2VyX3N0YXR1c18FBmNhbGxlcgEQa2V5VXNlclJveWFsdGllcwEGY2FsbGVyCQCsAgICD3VzZXJfcm95YWx0aWVzXwUGY2FsbGVyAQtrZXlVc2VyRGF0ZQEGY2FsbGVyCQCsAgICCnVzZXJfZGF0ZV8FBmNhbGxlcgEMa2V5VXNlckVSQzIwAQZjYWxsZXIJAKwCAgILdXNlcl9FUkMyMF8FBmNhbGxlcgELa2V5VXNlck5vdGUBBmNhbGxlcgkArAICAgp1c2VyX25vdGVfBQZjYWxsZXIBDGtleVVzZXJMYWJlbAEGY2FsbGVyCQCsAgICC3VzZXJfbGFiZWxfBQZjYWxsZXIBEmtleUFydGlzdEFnZW50QWRkcgEKYXJ0aXN0QWRkcgkArAICAg1hcnRpc3RfYWdlbnRfBQphcnRpc3RBZGRyARJrZXlBZ2VudEFydGlzdEFkZHICCWFnZW50QWRkcgphcnRpc3RBZGRyCQCsAgIJAKwCAgkArAICAgZhZ2VudF8FCWFnZW50QWRkcgIBXwUKYXJ0aXN0QWRkcgEPa2V5UHJpbWFyeVNoYXJlAQphcnRpc3RBZGRyCQCsAgICFWFydGlzdF9hZ2VudF9wcmltYXJ5XwUKYXJ0aXN0QWRkcgERa2V5U2Vjb25kYXJ5U2hhcmUBCmFydGlzdEFkZHIJAKwCAgIXYXJ0aXN0X2FnZW50X3NlY29uZGFyeV8FCmFydGlzdEFkZHIBDmNoZWNrV2hpdGVsaXN0AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNd2hpdGVsaXN0RGFwcAUDa2V5AAABC3ZhbGlkYXRlQ0lEAQNjaWQDCQEIY29udGFpbnMCBQNjaWQCAS8DAwkAZgIATAkAsQIBBQNjaWQJAAACCQCxAgEJAJEDAgkAtQkCBQNjaWQCAS8AAAA7BwkAZgIAEAkAsQIBCQCRAwIJALUJAgUDY2lkAgEvAAEHBwENdmFsaWRVc2VyRGF0YQUGY2FsbGVyBG5hbWULZGVzY3JpcHRpb24FdGh1bWIKaXNBblVwZGF0ZQQIdmFsaWRDSUQDCQECIT0CCQCxAgEFBXRodW1iAAAJAQt2YWxpZGF0ZUNJRAEFBXRodW1iBgMJAQEhAQUIdmFsaWRDSUQJAAIBAhxDSUQgZG9uJ3QgbWF0Y2ggcmVxdWlyZW1lbnQhAwMJAAACBQRuYW1lAgAGCQAAAgULZGVzY3JpcHRpb24CAAkAAgECJE5hbWUgYW5kIGRlc2NyaXB0aW9uIGNhbm5vdCBiZSBlbXB0eQMJAGYCCQCxAgEFC2Rlc2NyaXB0aW9uANgECQACAQIZNjAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgMJAGYCCQCxAgEFBG5hbWUALQkAAgECETQ1IENoYXIuIG1heCBuYW1lBAZzdGF0dXMJAQ5nZXRTdHJpbmdCeUtleQEJAQ1rZXlVc2VyU3RhdHVzAQUGY2FsbGVyAwMJAAACBQZzdGF0dXMFDXVzZXJTdXNwZW5kZWQGCQAAAgUGc3RhdHVzBQt1c2VyUmVtb3ZlZAkAAgECG0FjY291bnQgc3VzcGVuZGVkLyByZW1vdmVkLgMDCQEBIQEFCmlzQW5VcGRhdGUJAAACBQZzdGF0dXMFDnVzZXJSZWdpc3RlcmVkBwkAAgECEkFscmVhZHkgcmVnaXN0ZXJlZAMDAwkBASEBBQppc0FuVXBkYXRlCQAAAgUGc3RhdHVzAgAHBQ93aGl0ZWxpc3RlZG9ubHkHCQACAQIjQ2FuJ3QgcmVnaXN0ZXIsIGdldCBhcHByb3ZlZCBmaXJzdC4DAwMFCmlzQW5VcGRhdGUJAAACBQZzdGF0dXMCAAcGAwUKaXNBblVwZGF0ZQkAAAIFBnN0YXR1cwULdXNlckFsbG93ZWQHCQACAQIOUmVnaXN0ZXIgZmlyc3QGARF2YWxpZGF0ZU5ld1N0YXR1cwMGc3RhdHVzB2FkZHJlc3MNY3VycmVudFN0YXR1cwQJYWxsU3RhdHVzCQDMCAIFDHVzZXJWZXJpZmllZAkAzAgCBQ51c2VyUmVnaXN0ZXJlZAkAzAgCBQ11c2VyU3VzcGVuZGVkCQDMCAIFC3VzZXJSZW1vdmVkCQDMCAIFC3VzZXJBbGxvd2VkCQDMCAIFEnVzZXJDaGFuZ2VSZXF1aXJlZAUDbmlsBAtzdGF0dXNUb1NldAMJAQ9jb250YWluc0VsZW1lbnQCBQlhbGxTdGF0dXMFBnN0YXR1cwUGc3RhdHVzAwMJAAACBQZzdGF0dXMFCXVzZXJSZXNldAkAAAIFDWN1cnJlbnRTdGF0dXMFC3VzZXJBbGxvd2VkBwIACQACAQIOVW5rbm93biBzdGF0dXMEEHVzZXJJc1JlZ2lzdGVyZWQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQELa2V5VXNlckRhdGUBBQdhZGRyZXNzAwMJAAACBRB1c2VySXNSZWdpc3RlcmVkAAAJAQIhPQIFC3N0YXR1c1RvU2V0BQt1c2VyQWxsb3dlZAcJAAIBAjFZb3UgY2FudCBzZXQgdGhpcyBzdGF0dXMsIHVzZXIgaXMgbm90IHJlZ2lzdGVyZWQuAwMJAAACBQ1jdXJyZW50U3RhdHVzBQt1c2VyQWxsb3dlZAkAAAIFC3N0YXR1c1RvU2V0BQt1c2VyQWxsb3dlZAcJAAIBAhRVc2VyIGFscmVhZHkgYWxsb3dlZAMDCQAAAgUNY3VycmVudFN0YXR1cwUOdXNlclJlZ2lzdGVyZWQJAAACBQtzdGF0dXNUb1NldAULdXNlckFsbG93ZWQHCQACAQIhVXNlciBhbHJlYWR5IGFsbG93ZWQgJiByZWdpc3RlcmVkAwMJAAACBQ1jdXJyZW50U3RhdHVzBQx1c2VyVmVyaWZpZWQJAAACBQtzdGF0dXNUb1NldAULdXNlckFsbG93ZWQHCQACAQIfVXNlciBhbHJlYWR5IGFsbG93ZWQgJiB2ZXJpZmllZAULc3RhdHVzVG9TZXQBCG1ha2VKU09OAwRuYW1lBXRodW1iBGRhdGUJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD3sidXNlcl9uYW1lIjogIgUEbmFtZQIRIiwgInVzZXJfdGh1bWIiOiIFBXRodW1iAg8iLCJ1c2VyX2RhdGUiOiIFBGRhdGUCAiJ9AQhhc1N0cmluZwECYnYEByRtYXRjaDAFAmJ2AwkAAQIFByRtYXRjaDACBlN0cmluZwQDYnYwBQckbWF0Y2gwBQNidjAJAAIBAiRTcG9uc29yZWQgUHVibGljIEtleSBTdHJpbmcgZXhwZWN0ZWQBCWdldENhbGxlcgIBaQZwdWJLZXkEC2lzU3BvbnNvcmVkAwkBAiE9AgUGcHViS2V5AgAJAQt2YWx1ZU9yRWxzZQIJAQ5jaGVja1doaXRlbGlzdAEJAKwCAgkApQgBCQCnCAEJANkEAQUGcHViS2V5AglfZnJlZV90eHMAAAAABAZjYWxsZXIDAwkAAAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwkApQgBBQR0aGlzCQBmAgULaXNTcG9uc29yZWQAAAcJAKUIAQkApwgBCQDZBAEFBnB1YktleQkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBBNnZXRfc3BvbnNvcmVkX3dhdmVzAwkBAiE9AgUGcHViS2V5AgAJAPwHBAUNd2hpdGVsaXN0RGFwcAIJdXNlRnJlZVR4CQDMCAIJAKUIAQkApwgBCQDZBAEFBnB1YktleQUDbmlsBQNuaWwFBHVuaXQDCQAAAgUTZ2V0X3Nwb25zb3JlZF93YXZlcwUTZ2V0X3Nwb25zb3JlZF93YXZlcwkAlAoCBQZjYWxsZXIJAGYCBQtpc1Nwb25zb3JlZAAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCwZpbnZva2UBB3NldENvbmYCA2tleQN2YWwEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMGaW52b2tlAQphcHBSdW5uaW5nAgZpc0xpdmUHbWVzc2FnZQQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUOZGFwcFJ1bm5pbmdLZXkFBmlzTGl2ZQkAzAgCCQELU3RyaW5nRW50cnkCBRFtYWludGVuYW5jZU1TR0tleQUHbWVzc2FnZQUDbmlsCQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwZpbnZva2UBEHJlZ2lzdHJhdGlvbk1vZGUBBldMb25seQQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUSd2hpdGVsaXN0ZWRvbmx5S2V5BQZXTG9ubHkFA25pbAkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMGaW52b2tlAQxyZWdpc3RlclVzZXIGBG5hbWULZGVzY3JpcHRpb24FdGh1bWIGc29jaWFsCXJveWFsdGllcwZwdWJLZXkDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cECyR0MDc0MDY3NDU4CQEJZ2V0Q2FsbGVyAgUGaW52b2tlBQZwdWJLZXkEBmNhbGxlcggFCyR0MDc0MDY3NDU4Al8xBAtpc1Nwb25zb3JlZAgFCyR0MDc0MDY3NDU4Al8yBAJpZAkA2AQBCAUGaW52b2tlDXRyYW5zYWN0aW9uSWQECXRpbWVzdGFtcAgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBG5vdGUJAQ5nZXRTdHJpbmdCeUtleQEJAQtrZXlVc2VyTm90ZQEFBmNhbGxlcgQFbGFiZWwJAQ5nZXRTdHJpbmdCeUtleQEJAQxrZXlVc2VyTGFiZWwBBQZjYWxsZXIDCQEBIQEJAQ12YWxpZFVzZXJEYXRhBQUGY2FsbGVyBQRuYW1lBQtkZXNjcmlwdGlvbgUFdGh1bWIHCQACAQIUU29tZXRoaW5nIHdlbnQgd3JvbmcEBGpzb24JAQhtYWtlSlNPTgMJANoEAQkAmwMBBQRuYW1lCQDaBAEJAJsDAQUFdGh1bWIJAKQDAQUJdGltZXN0YW1wAwMJAGYCAAAFCXJveWFsdGllcwYJAGYCBQlyb3lhbHRpZXMA6AcJAAIBAjNSb3lhbHRpZXMgY2Fubm90IGJlIGxlc3MgdGhhbiAwJSBvciBoaWdoZXIgdGhhbiAxMCUECnR4VG9DYWxsZXIDBQtpc1Nwb25zb3JlZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAAFBHVuaXQFA25pbAUDbmlsCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQtrZXlVc2VyRGF0ZQEFBmNhbGxlcgUJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlVc2VyQWRkcgEFBmNhbGxlcgkArAICCQCsAgIFAmlkAgFfCQCkAwEFCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5VXNlck5hbWUBBQZjYWxsZXIFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleVVzZXJEZXNjAQUGY2FsbGVyBQtkZXNjcmlwdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VXNlclNvY2lhbAEFBmNhbGxlcgUGc29jaWFsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlVc2VyVGh1bWIBBQZjYWxsZXIFBXRodW1iCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlVc2VyU3RhdHVzAQUGY2FsbGVyBQ51c2VyUmVnaXN0ZXJlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEGtleVVzZXJSb3lhbHRpZXMBBQZjYWxsZXIFCXJveWFsdGllcwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICCEFMTE9XRURfBQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFDnVzZXJSZWdpc3RlcmVkAgFfBQZjYWxsZXIFBGpzb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleVVzZXJOb3RlAQUGY2FsbGVyBQRub3RlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlVc2VyTGFiZWwBBQZjYWxsZXIFBWxhYmVsBQNuaWwFCnR4VG9DYWxsZXIGaW52b2tlAQp1cGRhdGVVc2VyBgRuYW1lC2Rlc2NyaXB0aW9uBXRodW1iBnNvY2lhbAlyb3lhbHRpZXMGcHViS2V5AwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBAskdDA5MTQzOTI0NwkBCWdldENhbGxlcgIFBmludm9rZQUGcHViS2V5BAZjYWxsZXIIBQskdDA5MTQzOTI0NwJfMQQLaXNTcG9uc29yZWQIBQskdDA5MTQzOTI0NwJfMgQGc3RhdHVzCQEOZ2V0U3RyaW5nQnlLZXkBCQENa2V5VXNlclN0YXR1cwEFBmNhbGxlcgMJAQEhAQkBDXZhbGlkVXNlckRhdGEFBQZjYWxsZXIFBG5hbWUFC2Rlc2NyaXB0aW9uBQV0aHVtYgYJAAIBAhRTb21ldGhpbmcgd2VudCB3cm9uZwQEZGF0ZQkBD2dldEludGVnZXJCeUtleQEJAQtrZXlVc2VyRGF0ZQEFBmNhbGxlcgQEanNvbgkBCG1ha2VKU09OAwkA2gQBCQCbAwEFBG5hbWUJANoEAQkAmwMBBQV0aHVtYgkApAMBBQRkYXRlAwMJAGYCAAAFCXJveWFsdGllcwYJAGYCBQlyb3lhbHRpZXMA6AcJAAIBAjNSb3lhbHRpZXMgY2Fubm90IGJlIGxlc3MgdGhhbiAwJSBvciBoaWdoZXIgdGhhbiAxMCUECnR4VG9DYWxsZXIDBQtpc1Nwb25zb3JlZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAAFBHVuaXQFA25pbAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBC2tleVVzZXJOYW1lAQUGY2FsbGVyBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlVc2VyRGVzYwEFBmNhbGxlcgULZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVVzZXJTb2NpYWwBBQZjYWxsZXIFBnNvY2lhbAkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5VXNlclRodW1iAQUGY2FsbGVyBQV0aHVtYgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEGtleVVzZXJSb3lhbHRpZXMBBQZjYWxsZXIFCXJveWFsdGllcwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUGc3RhdHVzAgFfBQZjYWxsZXIFBGpzb24FA25pbAUKdHhUb0NhbGxlcgZpbnZva2UBDHNldEVSQzIwVXNlcgIFZXJjMjAGcHViS2V5AwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBA0kdDAxMDQzNDEwNTM3CQEJZ2V0Q2FsbGVyAgUGaW52b2tlBQZwdWJLZXkEBmNhbGxlcggFDSR0MDEwNDM0MTA1MzcCXzEEC2lzU3BvbnNvcmVkCAUNJHQwMTA0MzQxMDUzNwJfMgQGc3RhdHVzCQEOZ2V0U3RyaW5nQnlLZXkBCQENa2V5VXNlclN0YXR1cwEFBmNhbGxlcgMDCQECIT0CBQZzdGF0dXMFDnVzZXJSZWdpc3RlcmVkCQECIT0CBQZzdGF0dXMFDHVzZXJWZXJpZmllZAcJAAIBAiBOb3QgYWxsb3dlZCB0byBzZXQgRVJDMjAgYWRkcmVzcwQIZmlyc3RUd28JAK8CAgUFZXJjMjAAAgMDCQECIT0CBQhmaXJzdFR3bwICMHgGCQECIT0CCQCxAgEFBWVyYzIwACoJAAIBAhxUaGlzIGlzIG5vdCBhbiBlcmMyMCBhZGRyZXNzBAp0eFRvQ2FsbGVyAwULaXNTcG9uc29yZWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmNhbGxlcgAABQR1bml0BQNuaWwFA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlVc2VyRVJDMjABBQZjYWxsZXIFBWVyYzIwBQNuaWwFCnR4VG9DYWxsZXIGaW52b2tlARBjaGFuZ2VVc2VyU3RhdHVzCAdhZGRyZXNzBnN0YXR1cwRub3RlBWxhYmVsEXdsX2NlcnRpZmljYXRpb25zBndsX3R4cwh3bF9kcm9wcw53bF9jb21taXNzaW9ucwQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkAAAIJALECAQUHYWRkcmVzcwAACQACAQIXQWRkcmVzcyBjYW5ub3QgYmUgZW1wdHkEC2N1cnJlbnROb3RlCQEOZ2V0U3RyaW5nQnlLZXkBCQELa2V5VXNlck5vdGUBBQdhZGRyZXNzBAxjdXJyZW50TGFiZWwJAQ5nZXRTdHJpbmdCeUtleQEJAQxrZXlVc2VyTGFiZWwBBQdhZGRyZXNzBAlub3RlVG9Vc2UDCQECIT0CCQCxAgEFBG5vdGUAAAUEbm90ZQULY3VycmVudE5vdGUECmxhYmVsVG9Vc2UDCQECIT0CCQCxAgEFBWxhYmVsAAAFBWxhYmVsBQxjdXJyZW50TGFiZWwDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyBBNmcmVlX2NlcnRpZmljYXRpb25zAwkBAiE9AgURd2xfY2VydGlmaWNhdGlvbnMAAAkA/AcEBQhzaWduRGFwcAIbd2hpdGVsaXN0RnJlZUNlcnRpZmljYXRpb25zCQDMCAIFB2FkZHJlc3MJAMwIAgURd2xfY2VydGlmaWNhdGlvbnMJAMwIAgYFA25pbAUDbmlsBQNuaWwDCQAAAgUTZnJlZV9jZXJ0aWZpY2F0aW9ucwUTZnJlZV9jZXJ0aWZpY2F0aW9ucwQIZnJlZV90eHMDCQECIT0CBQZ3bF90eHMAAAkA/AcEBQ13aGl0ZWxpc3REYXBwAhB3aGl0ZWxpc3RGcmVlVHhzCQDMCAIFB2FkZHJlc3MJAMwIAgUGd2xfdHhzCQDMCAIGBQNuaWwFA25pbAUDbmlsAwkAAAIFCGZyZWVfdHhzBQhmcmVlX3R4cwQKZnJlZV9kcm9wcwMJAQIhPQIFCHdsX2Ryb3BzAAAJAPwHBAUNd2hpdGVsaXN0RGFwcAIRd2hpdGVsaXN0RnJlZURyb3AJAMwIAgUHYWRkcmVzcwkAzAgCBQh3bF9kcm9wcwkAzAgCBgUDbmlsBQNuaWwFA25pbAMJAAACBQpmcmVlX2Ryb3BzBQpmcmVlX2Ryb3BzBBBmcmVlX2NvbW1pc3Npb25zAwkBAiE9AgUOd2xfY29tbWlzc2lvbnMAAAkA/AcEBQ13aGl0ZWxpc3REYXBwAgl3aGl0ZWxpc3QJAMwIAgUHYWRkcmVzcwkAzAgCBQ53bF9jb21taXNzaW9ucwUDbmlsBQNuaWwFA25pbAMJAAACBRBmcmVlX2NvbW1pc3Npb25zBRBmcmVlX2NvbW1pc3Npb25zBA1jdXJyZW50U3RhdHVzCQEOZ2V0U3RyaW5nQnlLZXkBCQENa2V5VXNlclN0YXR1cwEFB2FkZHJlc3MDCQAAAgkAsQIBBQZzdGF0dXMAAAMJAAACBQ1jdXJyZW50U3RhdHVzAgAJAAIBAhdVc2VyIGhhdmUgbm8gc3RhdHVzIHlldAkAzAgCCQELU3RyaW5nRW50cnkCCQELa2V5VXNlck5vdGUBBQdhZGRyZXNzBQlub3RlVG9Vc2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleVVzZXJMYWJlbAEFB2FkZHJlc3MFCmxhYmVsVG9Vc2UFA25pbAQLc3RhdHVzVG9TZXQJARF2YWxpZGF0ZU5ld1N0YXR1cwMFBnN0YXR1cwUHYWRkcmVzcwUNY3VycmVudFN0YXR1cwQEbmFtZQkA2gQBCQCbAwEJAQ5nZXRTdHJpbmdCeUtleQEJAQtrZXlVc2VyTmFtZQEFB2FkZHJlc3MEBXRodW1iCQDaBAEJAJsDAQkBDmdldFN0cmluZ0J5S2V5AQkBDGtleVVzZXJUaHVtYgEFB2FkZHJlc3MEBGRhdGUJAQ9nZXRJbnRlZ2VyQnlLZXkBCQELa2V5VXNlckRhdGUBBQdhZGRyZXNzBARqc29uCQEIbWFrZUpTT04DBQRuYW1lBQV0aHVtYgkApAMBBQRkYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlVc2VyU3RhdHVzAQUHYWRkcmVzcwULc3RhdHVzVG9TZXQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIFDWN1cnJlbnRTdGF0dXMCAV8FB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFC3N0YXR1c1RvU2V0AgFfBQdhZGRyZXNzBQRqc29uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtrZXlVc2VyTm90ZQEFB2FkZHJlc3MFCW5vdGVUb1VzZQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5VXNlckxhYmVsAQUHYWRkcmVzcwUKbGFiZWxUb1VzZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIhTm90IGFsbG93ZWQgdG8gY2hhbmdlIHVzZXIgc3RhdHVzBmludm9rZQEKZGVsZXRlVXNlcgEHYWRkcmVzcwQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyBA1jdXJyZW50U3RhdHVzCQEOZ2V0U3RyaW5nQnlLZXkBCQENa2V5VXNlclN0YXR1cwEFB2FkZHJlc3MDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlVc2VyRGF0ZQEFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBC2tleVVzZXJBZGRyAQUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQELa2V5VXNlck5hbWUBBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQtrZXlVc2VyRGVzYwEFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleVVzZXJTb2NpYWwBBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlVc2VyVGh1bWIBBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgIKdXNlcl9ub3RlXwUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgUNY3VycmVudFN0YXR1cwIBXwUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5VXNlclJveWFsdGllcwEFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVVzZXJTdGF0dXMBBQdhZGRyZXNzBQt1c2VyUmVtb3ZlZAUDbmlsCQACAQILTm90IGFsbG93ZWQBaQEIc2V0QWdlbnQECmFydGlzdEFkZHIJYWdlbnRBZGRyDHByaW1hcnlTaGFyZQ5zZWNvbmRhcnlTaGFyZQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQGY2FsbGVyCQClCAEIBQFpBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDAwkBAiE9AgkAsQIBBQphcnRpc3RBZGRyACMGCQECIT0CCQCxAgEFCWFnZW50QWRkcgAjCQACAQINV3JvbmcgYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5QXJ0aXN0QWdlbnRBZGRyAQUKYXJ0aXN0QWRkcgUJYWdlbnRBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARJrZXlBZ2VudEFydGlzdEFkZHICBQlhZ2VudEFkZHIFCmFydGlzdEFkZHIFCmFydGlzdEFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlQcmltYXJ5U2hhcmUBBQphcnRpc3RBZGRyBQxwcmltYXJ5U2hhcmUJAMwIAgkBDEludGVnZXJFbnRyeQIJARFrZXlTZWNvbmRhcnlTaGFyZQEFCmFydGlzdEFkZHIFDnNlY29uZGFyeVNoYXJlBQNuaWwJAAIBAhNZb3UgYXJlIG5vdCBhbGxvd2VkAWkBCnVuc2V0QWdlbnQCCmFydGlzdEFkZHIJYWdlbnRBZGRyAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBAZjYWxsZXIJAKUIAQgFAWkGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMDCQECIT0CCQCxAgEFCmFydGlzdEFkZHIAIwYJAQIhPQIJALECAQUJYWdlbnRBZGRyACMJAAIBAg1Xcm9uZyBhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARJrZXlBcnRpc3RBZ2VudEFkZHIBBQphcnRpc3RBZGRyCQDMCAIJAQtEZWxldGVFbnRyeQEJARJrZXlBZ2VudEFydGlzdEFkZHICBQlhZ2VudEFkZHIFCmFydGlzdEFkZHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleVByaW1hcnlTaGFyZQEFCmFydGlzdEFkZHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEWtleVNlY29uZGFyeVNoYXJlAQUKYXJ0aXN0QWRkcgUDbmlsCQACAQITWW91IGFyZSBub3QgYWxsb3dlZAFpAQtkZWxldGVFbnRyeQEFZW50cnkEBmNhbGxlcgkApQgBCAUBaQZjYWxsZXIDCQAAAgUGY2FsbGVyBQVjaHJpcwkAzAgCCQELRGVsZXRlRW50cnkBBQVlbnRyeQUDbmlsCQACAQICbm8BAnR4AQh2ZXJpZmllcgAEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBANpbnYFByRtYXRjaDADAwMDCQAAAggFA2ludghmdW5jdGlvbgIMcmVnaXN0ZXJVc2VyCQAAAggFA2ludgRkQXBwBQR0aGlzBwkAAAIIBQNpbnYDZmVlAKDCHgcJAAACCAUDaW52CmZlZUFzc2V0SWQFBHVuaXQHCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQDZBAEJAQhhc1N0cmluZwEJAJEDAggFA2ludgRhcmdzAAUDAwMDCQAAAggFA2ludghmdW5jdGlvbgIKdXBkYXRlVXNlcgkAAAIIBQNpbnYEZEFwcAUEdGhpcwcJAAACCAUDaW52A2ZlZQCgwh4HCQAAAggFA2ludgpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQEIYXNTdHJpbmcBCQCRAwIIBQNpbnYEYXJncwAFAwMDAwkAAAIIBQNpbnYIZnVuY3Rpb24CDHNldEVSQzIwVXNlcgkAAAIIBQNpbnYEZEFwcAUEdGhpcwcJAAACCAUDaW52A2ZlZQCgwh4HCQAAAggFA2ludgpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQEIYXNTdHJpbmcBCQCRAwIIBQNpbnYEYXJncwACCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5CQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5AhrIDg==", "height": 2427659, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6Cmwdk9yHVTM44W42ZThcWCs9NWpGgHqPJ3WewfqK6AA Next: 2JDTZvDqQHAfid7rfw6CL2yQgNsHJxabq3prHorYEW9m Diff:
OldNewDifferences
239239 func registerUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
240240 then throw(maintenanceMSG)
241241 else {
242- let $t073967448 = getCaller(invoke, pubKey)
243- let caller = $t073967448._1
244- let isSponsored = $t073967448._2
242+ let $t074067458 = getCaller(invoke, pubKey)
243+ let caller = $t074067458._1
244+ let isSponsored = $t074067458._2
245245 let id = toBase58String(invoke.transactionId)
246246 let timestamp = lastBlock.timestamp
247247 let note = getStringByKey(keyUserNote(caller))
269269 func updateUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
270270 then throw(maintenanceMSG)
271271 else {
272- let $t090949198 = getCaller(invoke, pubKey)
273- let caller = $t090949198._1
274- let isSponsored = $t090949198._2
272+ let $t091439247 = getCaller(invoke, pubKey)
273+ let caller = $t091439247._1
274+ let isSponsored = $t091439247._2
275275 let status = getStringByKey(keyUserStatus(caller))
276276 if (!(validUserData(caller, name, description, thumb, true)))
277277 then throw("Something went wrong")
297297 func setERC20User (erc20,pubKey) = if (!(dappRunning))
298298 then throw(maintenanceMSG)
299299 else {
300- let $t01038510488 = getCaller(invoke, pubKey)
301- let caller = $t01038510488._1
302- let isSponsored = $t01038510488._2
300+ let $t01043410537 = getCaller(invoke, pubKey)
301+ let caller = $t01043410537._1
302+ let isSponsored = $t01043410537._2
303303 let status = getStringByKey(keyUserStatus(caller))
304304 if (if ((status != userRegistered))
305305 then (status != userVerified)
357357 then invoke(whitelistDapp, "whitelist", [address, wl_commissions], nil)
358358 else nil
359359 if ((free_commissions == free_commissions))
360- then if ((size(status) == 0))
361- then {
362- let currentStatus = getStringByKey(keyUserStatus(address))
363- if ((currentStatus == ""))
360+ then {
361+ let currentStatus = getStringByKey(keyUserStatus(address))
362+ if ((size(status) == 0))
363+ then if ((currentStatus == ""))
364364 then throw("User have no status yet")
365365 else [StringEntry(keyUserNote(address), noteToUse), StringEntry(keyUserLabel(address), labelToUse)]
366- }
367- else {
368- let currentStatus = getStringByKey(keyUserStatus(address))
369- let statusToSet = validateNewStatus(status, address, currentStatus)
370- let name = toBase64String(toBytes(getStringByKey(keyUserName(address))))
371- let thumb = toBase64String(toBytes(getStringByKey(keyUserThumb(address))))
372- let date = getIntegerByKey(keyUserDate(address))
373- let json = makeJSON(name, thumb, toString(date))
366+ else {
367+ let statusToSet = validateNewStatus(status, address, currentStatus)
368+ let name = toBase64String(toBytes(getStringByKey(keyUserName(address))))
369+ let thumb = toBase64String(toBytes(getStringByKey(keyUserThumb(address))))
370+ let date = getIntegerByKey(keyUserDate(address))
371+ let json = makeJSON(name, thumb, toString(date))
374372 [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), json), StringEntry(keyUserNote(address), noteToUse), StringEntry(keyUserLabel(address), labelToUse)]
375- }
373+ }
374+ }
376375 else throw("Strict value is not equal to itself.")
377376 }
378377 else throw("Strict value is not equal to itself.")
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 keyPrimaryShare (artistAddr) = ("artist_agent_primary_" + artistAddr)
8989
9090
9191 func keySecondaryShare (artistAddr) = ("artist_agent_secondary_" + artistAddr)
9292
9393
9494 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
9595
9696
9797 func validateCID (cid) = if (contains(cid, "/"))
9898 then if (if ((76 > size(cid)))
9999 then (size(split(cid, "/")[0]) == 59)
100100 else false)
101101 then (16 > size(split(cid, "/")[1]))
102102 else false
103103 else false
104104
105105
106106 func validUserData (caller,name,description,thumb,isAnUpdate) = {
107107 let validCID = if ((size(thumb) != 0))
108108 then validateCID(thumb)
109109 else true
110110 if (!(validCID))
111111 then throw("CID don't match requirement!")
112112 else if (if ((name == ""))
113113 then true
114114 else (description == ""))
115115 then throw("Name and description cannot be empty")
116116 else if ((size(description) > 600))
117117 then throw("600 Char. max description")
118118 else if ((size(name) > 45))
119119 then throw("45 Char. max name")
120120 else {
121121 let status = getStringByKey(keyUserStatus(caller))
122122 if (if ((status == userSuspended))
123123 then true
124124 else (status == userRemoved))
125125 then throw("Account suspended/ removed.")
126126 else if (if (!(isAnUpdate))
127127 then (status == userRegistered)
128128 else false)
129129 then throw("Already registered")
130130 else if (if (if (!(isAnUpdate))
131131 then (status == "")
132132 else false)
133133 then whitelistedonly
134134 else false)
135135 then throw("Can't register, get approved first.")
136136 else if (if (if (isAnUpdate)
137137 then (status == "")
138138 else false)
139139 then true
140140 else if (isAnUpdate)
141141 then (status == userAllowed)
142142 else false)
143143 then throw("Register first")
144144 else true
145145 }
146146 }
147147
148148
149149 func validateNewStatus (status,address,currentStatus) = {
150150 let allStatus = [userVerified, userRegistered, userSuspended, userRemoved, userAllowed, userChangeRequired]
151151 let statusToSet = if (containsElement(allStatus, status))
152152 then status
153153 else if (if ((status == userReset))
154154 then (currentStatus == userAllowed)
155155 else false)
156156 then ""
157157 else throw("Unknown status")
158158 let userIsRegistered = getIntegerByKey(keyUserDate(address))
159159 if (if ((userIsRegistered == 0))
160160 then (statusToSet != userAllowed)
161161 else false)
162162 then throw("You cant set this status, user is not registered.")
163163 else if (if ((currentStatus == userAllowed))
164164 then (statusToSet == userAllowed)
165165 else false)
166166 then throw("User already allowed")
167167 else if (if ((currentStatus == userRegistered))
168168 then (statusToSet == userAllowed)
169169 else false)
170170 then throw("User already allowed & registered")
171171 else if (if ((currentStatus == userVerified))
172172 then (statusToSet == userAllowed)
173173 else false)
174174 then throw("User already allowed & verified")
175175 else statusToSet
176176 }
177177
178178
179179 func makeJSON (name,thumb,date) = (((((("{\"user_name\": \"" + name) + "\", \"user_thumb\":\"") + thumb) + "\",\"user_date\":\"") + date) + "\"}")
180180
181181
182182 func asString (bv) = match bv {
183183 case bv0: String =>
184184 bv0
185185 case _ =>
186186 throw("Sponsored Public Key String expected")
187187 }
188188
189189
190190 func getCaller (i,pubKey) = {
191191 let isSponsored = if ((pubKey != ""))
192192 then valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
193193 else 0
194194 let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
195195 then (isSponsored > 0)
196196 else false)
197197 then toString(addressFromPublicKey(fromBase58String(pubKey)))
198198 else toBase58String(i.caller.bytes)
199199 let get_sponsored_waves = if ((pubKey != ""))
200200 then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
201201 else unit
202202 if ((get_sponsored_waves == get_sponsored_waves))
203203 then $Tuple2(caller, (isSponsored > 0))
204204 else throw("Strict value is not equal to itself.")
205205 }
206206
207207
208208 @Callable(invoke)
209209 func setConf (key,val) = {
210210 let caller = toString(invoke.caller)
211211 if (containsElement([chris, toString(this)], caller))
212212 then [StringEntry(key, val)]
213213 else throw("You are not allowed to change this")
214214 }
215215
216216
217217
218218 @Callable(invoke)
219219 func appRunning (isLive,message) = {
220220 let caller = toString(invoke.caller)
221221 if (containsElement([chris, toString(this)], caller))
222222 then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
223223 else throw("You are not allowed to change this")
224224 }
225225
226226
227227
228228 @Callable(invoke)
229229 func registrationMode (WLonly) = {
230230 let caller = toString(invoke.caller)
231231 if (containsElement([chris, toString(this)], caller))
232232 then [BooleanEntry(whitelistedonlyKey, WLonly)]
233233 else throw("You are not allowed to change this")
234234 }
235235
236236
237237
238238 @Callable(invoke)
239239 func registerUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
240240 then throw(maintenanceMSG)
241241 else {
242- let $t073967448 = getCaller(invoke, pubKey)
243- let caller = $t073967448._1
244- let isSponsored = $t073967448._2
242+ let $t074067458 = getCaller(invoke, pubKey)
243+ let caller = $t074067458._1
244+ let isSponsored = $t074067458._2
245245 let id = toBase58String(invoke.transactionId)
246246 let timestamp = lastBlock.timestamp
247247 let note = getStringByKey(keyUserNote(caller))
248248 let label = getStringByKey(keyUserLabel(caller))
249249 if (!(validUserData(caller, name, description, thumb, false)))
250250 then throw("Something went wrong")
251251 else {
252252 let json = makeJSON(toBase64String(toBytes(name)), toBase64String(toBytes(thumb)), toString(timestamp))
253253 if (if ((0 > royalties))
254254 then true
255255 else (royalties > 1000))
256256 then throw("Royalties cannot be less than 0% or higher than 10%")
257257 else {
258258 let txToCaller = if (isSponsored)
259259 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
260260 else nil
261261 ([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)
262262 }
263263 }
264264 }
265265
266266
267267
268268 @Callable(invoke)
269269 func updateUser (name,description,thumb,social,royalties,pubKey) = if (!(dappRunning))
270270 then throw(maintenanceMSG)
271271 else {
272- let $t090949198 = getCaller(invoke, pubKey)
273- let caller = $t090949198._1
274- let isSponsored = $t090949198._2
272+ let $t091439247 = getCaller(invoke, pubKey)
273+ let caller = $t091439247._1
274+ let isSponsored = $t091439247._2
275275 let status = getStringByKey(keyUserStatus(caller))
276276 if (!(validUserData(caller, name, description, thumb, true)))
277277 then throw("Something went wrong")
278278 else {
279279 let date = getIntegerByKey(keyUserDate(caller))
280280 let json = makeJSON(toBase64String(toBytes(name)), toBase64String(toBytes(thumb)), toString(date))
281281 if (if ((0 > royalties))
282282 then true
283283 else (royalties > 1000))
284284 then throw("Royalties cannot be less than 0% or higher than 10%")
285285 else {
286286 let txToCaller = if (isSponsored)
287287 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
288288 else nil
289289 ([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)
290290 }
291291 }
292292 }
293293
294294
295295
296296 @Callable(invoke)
297297 func setERC20User (erc20,pubKey) = if (!(dappRunning))
298298 then throw(maintenanceMSG)
299299 else {
300- let $t01038510488 = getCaller(invoke, pubKey)
301- let caller = $t01038510488._1
302- let isSponsored = $t01038510488._2
300+ let $t01043410537 = getCaller(invoke, pubKey)
301+ let caller = $t01043410537._1
302+ let isSponsored = $t01043410537._2
303303 let status = getStringByKey(keyUserStatus(caller))
304304 if (if ((status != userRegistered))
305305 then (status != userVerified)
306306 else false)
307307 then throw("Not allowed to set ERC20 address")
308308 else {
309309 let firstTwo = take(erc20, 2)
310310 if (if ((firstTwo != "0x"))
311311 then true
312312 else (size(erc20) != 42))
313313 then throw("This is not an erc20 address")
314314 else {
315315 let txToCaller = if (isSponsored)
316316 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
317317 else nil
318318 ([StringEntry(keyUserERC20(caller), erc20)] ++ txToCaller)
319319 }
320320 }
321321 }
322322
323323
324324
325325 @Callable(invoke)
326326 func changeUserStatus (address,status,note,label,wl_certifications,wl_txs,wl_drops,wl_commissions) = {
327327 let caller = toString(invoke.caller)
328328 if ((size(address) == 0))
329329 then throw("Address cannot be empty")
330330 else {
331331 let currentNote = getStringByKey(keyUserNote(address))
332332 let currentLabel = getStringByKey(keyUserLabel(address))
333333 let noteToUse = if ((size(note) != 0))
334334 then note
335335 else currentNote
336336 let labelToUse = if ((size(label) != 0))
337337 then label
338338 else currentLabel
339339 if (containsElement([chris, toString(this)], caller))
340340 then {
341341 let free_certifications = if ((wl_certifications != 0))
342342 then invoke(signDapp, "whitelistFreeCertifications", [address, wl_certifications, true], nil)
343343 else nil
344344 if ((free_certifications == free_certifications))
345345 then {
346346 let free_txs = if ((wl_txs != 0))
347347 then invoke(whitelistDapp, "whitelistFreeTxs", [address, wl_txs, true], nil)
348348 else nil
349349 if ((free_txs == free_txs))
350350 then {
351351 let free_drops = if ((wl_drops != 0))
352352 then invoke(whitelistDapp, "whitelistFreeDrop", [address, wl_drops, true], nil)
353353 else nil
354354 if ((free_drops == free_drops))
355355 then {
356356 let free_commissions = if ((wl_commissions != 0))
357357 then invoke(whitelistDapp, "whitelist", [address, wl_commissions], nil)
358358 else nil
359359 if ((free_commissions == free_commissions))
360- then if ((size(status) == 0))
361- then {
362- let currentStatus = getStringByKey(keyUserStatus(address))
363- if ((currentStatus == ""))
360+ then {
361+ let currentStatus = getStringByKey(keyUserStatus(address))
362+ if ((size(status) == 0))
363+ then if ((currentStatus == ""))
364364 then throw("User have no status yet")
365365 else [StringEntry(keyUserNote(address), noteToUse), StringEntry(keyUserLabel(address), labelToUse)]
366- }
367- else {
368- let currentStatus = getStringByKey(keyUserStatus(address))
369- let statusToSet = validateNewStatus(status, address, currentStatus)
370- let name = toBase64String(toBytes(getStringByKey(keyUserName(address))))
371- let thumb = toBase64String(toBytes(getStringByKey(keyUserThumb(address))))
372- let date = getIntegerByKey(keyUserDate(address))
373- let json = makeJSON(name, thumb, toString(date))
366+ else {
367+ let statusToSet = validateNewStatus(status, address, currentStatus)
368+ let name = toBase64String(toBytes(getStringByKey(keyUserName(address))))
369+ let thumb = toBase64String(toBytes(getStringByKey(keyUserThumb(address))))
370+ let date = getIntegerByKey(keyUserDate(address))
371+ let json = makeJSON(name, thumb, toString(date))
374372 [StringEntry(keyUserStatus(address), statusToSet), DeleteEntry(((currentStatus + "_") + address)), StringEntry(((statusToSet + "_") + address), json), StringEntry(keyUserNote(address), noteToUse), StringEntry(keyUserLabel(address), labelToUse)]
375- }
373+ }
374+ }
376375 else throw("Strict value is not equal to itself.")
377376 }
378377 else throw("Strict value is not equal to itself.")
379378 }
380379 else throw("Strict value is not equal to itself.")
381380 }
382381 else throw("Strict value is not equal to itself.")
383382 }
384383 else throw("Not allowed to change user status")
385384 }
386385 }
387386
388387
389388
390389 @Callable(invoke)
391390 func deleteUser (address) = {
392391 let caller = toString(invoke.caller)
393392 let currentStatus = getStringByKey(keyUserStatus(address))
394393 if (containsElement([chris, toString(this)], caller))
395394 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)]
396395 else throw("Not allowed")
397396 }
398397
399398
400399
401400 @Callable(i)
402401 func setAgent (artistAddr,agentAddr,primaryShare,secondaryShare) = if (!(dappRunning))
403402 then throw(maintenanceMSG)
404403 else {
405404 let caller = toString(i.caller)
406405 if (containsElement([chris, toString(this)], caller))
407406 then if (if ((size(artistAddr) != 35))
408407 then true
409408 else (size(agentAddr) != 35))
410409 then throw("Wrong address")
411410 else [StringEntry(keyArtistAgentAddr(artistAddr), agentAddr), StringEntry(keyAgentArtistAddr(agentAddr, artistAddr), artistAddr), IntegerEntry(keyPrimaryShare(artistAddr), primaryShare), IntegerEntry(keySecondaryShare(artistAddr), secondaryShare)]
412411 else throw("You are not allowed")
413412 }
414413
415414
416415
417416 @Callable(i)
418417 func unsetAgent (artistAddr,agentAddr) = if (!(dappRunning))
419418 then throw(maintenanceMSG)
420419 else {
421420 let caller = toString(i.caller)
422421 if (containsElement([chris, toString(this)], caller))
423422 then if (if ((size(artistAddr) != 35))
424423 then true
425424 else (size(agentAddr) != 35))
426425 then throw("Wrong address")
427426 else [DeleteEntry(keyArtistAgentAddr(artistAddr)), DeleteEntry(keyAgentArtistAddr(agentAddr, artistAddr)), DeleteEntry(keyPrimaryShare(artistAddr)), DeleteEntry(keySecondaryShare(artistAddr))]
428427 else throw("You are not allowed")
429428 }
430429
431430
432431
433432 @Callable(i)
434433 func deleteEntry (entry) = {
435434 let caller = toString(i.caller)
436435 if ((caller == chris))
437436 then [DeleteEntry(entry)]
438437 else throw("no")
439438 }
440439
441440
442441 @Verifier(tx)
443442 func verifier () = match tx {
444443 case inv: InvokeScriptTransaction =>
445444 if (if (if (if ((inv.function == "registerUser"))
446445 then (inv.dApp == this)
447446 else false)
448447 then (inv.fee == 500000)
449448 else false)
450449 then (inv.feeAssetId == unit)
451450 else false)
452451 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
453452 else if (if (if (if ((inv.function == "updateUser"))
454453 then (inv.dApp == this)
455454 else false)
456455 then (inv.fee == 500000)
457456 else false)
458457 then (inv.feeAssetId == unit)
459458 else false)
460459 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
461460 else if (if (if (if ((inv.function == "setERC20User"))
462461 then (inv.dApp == this)
463462 else false)
464463 then (inv.fee == 500000)
465464 else false)
466465 then (inv.feeAssetId == unit)
467466 else false)
468467 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[2])))
469468 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
470469 case _ =>
471470 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
472471 }
473472

github/deemru/w8io/026f985 
87.11 ms