tx · HGEAZVpji3VEVbQzGMswap25Qrojeg5eZHAVBHpWYYNT

3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By:  -0.01300000 Waves

2023.01.22 20:44 [3481986] smart account 3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By > SELF 0.00000000 Waves

{ "type": 13, "id": "HGEAZVpji3VEVbQzGMswap25Qrojeg5eZHAVBHpWYYNT", "fee": 1300000, "feeAssetId": null, "timestamp": 1674409458156, "version": 2, "chainId": 87, "sender": "3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By", "senderPublicKey": "A2fujmmHBBAFrVGCyHBHVbzEtHvDsFniNoiovp2N4fES", "proofs": [ "59WXuoPFjyXJXh6wgqXXqz9NycqLye7JyzieFEn6HoVR7W2YmKVFvmrAWn87shKYY2LXZbyYaRP6CNMCkMqUy8cq" ], "script": "base64:BgIpCAISBgoECAgICBILCgkICAgICAEICAgSAwoBCBIAEgQKAggIEgMKAQgOABBpc3N1ZXJzV2hpdGVsaXN0CQDMCAICIzNQM2lWODVlWGZrY0EzRGQxM0VwWkJZdnMxdmtLWDZBWUVOCQDMCAICIzNQSEZBYXZ4ajJlUEpxRkI0NkgyYVJHQTdvUUw2a3oxckpKCQDMCAICIzNQNnBlb3ZBa1ZOM3B4Nlp1djh5Mm5vVFdIRk00UjVXamo4CQDMCAICIzNQNUNRa3ZrOFB1NnJHUDNRYXY0THdza3dhOHBMaE53VGJSCQDMCAICIzNQSEtEQ1FTY3ZTUEh2ZENVZXVjRmt4NVExeE1VUkE5a2JyCQDMCAICIzNQTWtpNXNIQnNRYjRLZ0RrbmJVd3NMM1lneGFDemFabkNKCQDMCAICIzNQMndNQ0RqdHhlTGRmUXJwUjhXVWU1ek5lU2NNNFVhTDNvCQDMCAICIzNQM3BEb3NxNEdDd2ZKa3ZxNHlxS3Z2b1R3bW9xYzlxUG1vCQDMCAICIzNQUGdlWVRXTVJaN1M3alNMcG5WdUtLQjlyNlh1RGszbmRDCQDMCAICIzNQS1ZnZDZkczF4ZXJ2SzZiUFhiRUhCcWc4aWJUY2Y1SFprCQDMCAICIzNQRDFzZDU1UFl6bUdVclE4OTZRdDN1dmRidGdqQ1ZwYWpFCQDMCAICIzNQRmtndkM5eTZ6SHk2NHpFQXNjS0tnYU5ZM3lpcGlMcWJXCQDMCAICIzNQR0dTaUx1d0dtbTdDaGZqRHJtRVpCZDZIeFFKbjhOMU5NCQDMCAICIzNQSkttWG9ISnZWZVFYalNKZGh0a1VjRkR0ZGlRcU1iVVRECQDMCAICIzNQNWJMNlY0b0dUWnRNVGlyajlXeHRieFVudHFYZGpldkFFCQDMCAICIzNQQ3lqcUhodHE5ZjlIbW40TE5zV3dBNjhkRlZzdlE2aU5pCQDMCAICIzNQS0hGWDZXNGFBcjFlMWI4TVVUejVIbWRXVlVjaldoZ1k0CQDMCAICIzNQSlZreDdYUm84NnpVODhzaEx1S0dtYlJyN1JrTVN4akhqCQDMCAICIzNQTHU3Y29NTlY0bmFDeFdrUmVtcWdhNm85elVoUXBweHNBCQDMCAICIzNQR0tFZTR5NTlWM1dMbkh3UEVVYU1XZGJ6eThzYjk4MmZHCQDMCAICIzNQNWQ4YTFIMm0yekZRYWtoYWFvdzN1REU3N1VZTEdkODl2BQNuaWwAEGVkaXRvcnNXaGl0ZUxpc3QJAMwIAgIjM1BHS0VlNHk1OVYzV0xuSHdQRVVhTVdkYnp5OHNiOTgyZkcJAMwIAgIjM1A3TmhtRHQzMWVrUTJKcnl4dG1kZ1oxRFhnVlB3eW9jSksJAMwIAgIjM1BDeWpxSGh0cTlmOUhtbjRMTnNXd0E2OGRGVnN2UTZpTmkJAMwIAgIjM1A2WUFUdHJjVGtNb0VldVpWYVV4bkQ5OUR1SmVHMTV5YW8FA25pbAAWbWludEZyb21Hcm91cFdoaXRlTGlzdAkAzAgCCQEHQWRkcmVzcwEBGgFXXYvxX8soIGsfZqPIbtoLqJftD+j9yUTxCQDMCAIJAQdBZGRyZXNzAQEaAVez1ZJUSQmaKhD7xvifEHar7z8PcqWJFYwFA25pbAAWbmZ0VWx0cmFTdGFraW5nV3JhcHBlcgkBB0FkZHJlc3MBARoBV8Ctwm0yzZGvpVdF2IfyU8Fajsi9JorKCwAUbmZ0V2F2ZXNQdW5rc1dyYXBwZXIJAQdBZGRyZXNzAQEaAVd5moowGgnVnajKJ2gj2RvVoec0kMbogy0AEUxJTUlUX01JTlRfQ09QSUVTAJBOAQ10cnlHZXRJbnRlZ2VyAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAQx0cnlHZXRTdHJpbmcBA2tleQQHJG1hdGNoMAkAnQgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgABCGNoZWNrTkZUAQVhc3NldAMDAwkAAAIICAUFYXNzZXQGaXNzdWVyBWJ5dGVzCAUEdGhpcwVieXRlcwkAAAIIBQVhc3NldAhkZWNpbWFscwAABwkAAAIIBQVhc3NldApyZWlzc3VhYmxlBwcJAAACCAUFYXNzZXQIcXVhbnRpdHkAAQcBD2dldFJhbmRvbU51bWJlcgQIdmFyaWFudHMEdHhJZBRoYXRjaGluZ0ZpbmlzaEhlaWdodAZvZmZzZXQED3JhbmRvbVNlZWRCbG9jawkBBXZhbHVlAQkA7QcBCQBlAgUUaGF0Y2hpbmdGaW5pc2hIZWlnaHQAAQQKcmFuZG9tSGFzaAkA9wMBCQDLAQIFBHR4SWQJAQV2YWx1ZQEIBQ9yYW5kb21TZWVkQmxvY2sDdnJmCQBqAgkAsgkCBQpyYW5kb21IYXNoCQBoAgUGb2Zmc2V0AAgFCHZhcmlhbnRzAQtpc1N1YlN0cmluZwIDc3RyBnN1YlN0cgQHJG1hdGNoMAkAswkCBQNzdHIFBnN1YlN0cgMJAAECBQckbWF0Y2gwAgNJbnQEAXQFByRtYXRjaDAGBwESaXNVbHRyYVN0YWtpbmdOYW1lAQRuYW1lAwkBC2lzU3ViU3RyaW5nAgUEbmFtZQIKQm9yZWQgQW5pYQYDCQELaXNTdWJTdHJpbmcCBQRuYW1lAgxCb3JlZCBBbmlhICMGAwkBC2lzU3ViU3RyaW5nAgUEbmFtZQIQUFVaWkxFIEVhcmx5IEVhZwYHARBpc1dhdmVzUHVua3NOYW1lAQRuYW1lAwkBC2lzU3ViU3RyaW5nAgUEbmFtZQIKTWVtYWxpZW4gIwYDCQELaXNTdWJTdHJpbmcCBQRuYW1lAgxab21iaWVQdW5rICMGAwkBC2lzU3ViU3RyaW5nAgUEbmFtZQIJTWFkUHVuayAjBgMJAQtpc1N1YlN0cmluZwIFBG5hbWUCC1dhdmVzUHVuayAjBgcBC2lzVmFsaWROYW1lAgRuYW1lBmNhbGxlcgMDCQBmAgAECQCxAgEFBG5hbWUGCQBmAgkAsQIBBQRuYW1lABAJAAIBAihOYW1lIG11c3QgYmUgYmV0d2VlbiA0IGFuZCAxNiBjaGFyYWN0ZXJzBAxhbGxvd0NhbGxlcnMJAMwIAgUWbmZ0VWx0cmFTdGFraW5nV3JhcHBlcgkAzAgCBRRuZnRXYXZlc1B1bmtzV3JhcHBlcgUDbmlsBAckbWF0Y2gwCQDPCAIFDGFsbG93Q2FsbGVycwUGY2FsbGVyAwkAAQIFByRtYXRjaDACA0ludAQBdAUHJG1hdGNoMAYDCQEBIQEJARJpc1VsdHJhU3Rha2luZ05hbWUBBQRuYW1lCQEBIQEJARBpc1dhdmVzUHVua3NOYW1lAQUEbmFtZQcGAWkBCWNyZWF0ZU5GVAQHbmZ0TmFtZQduZnREZXNjBWltYWdlDmNvbGxlY3Rpb25OYW1lAwkBASEBCQELaXNWYWxpZE5hbWUCBQduZnROYW1lCAUBaQZjYWxsZXIJAAIBAhBJbnZhbGlkIG5mdCBuYW1lAwkBAiE9AgkAswkCBQVpbWFnZQIIaHR0cHM6Ly8AAAkAAgECHGh0dHBzIGxpbmsgdG8gaW1hZ2UgcmVxdWlyZWQEBWFzc2V0CQDDCAcFB25mdE5hbWUFB25mdERlc2MAAQAABwUEdW5pdAAABAdhc3NldElkCQC4CAEFBWFzc2V0BAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEEGNvbGxlY3Rpb25Eb21haW4JAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwMJAGYCCQCxAgEFDmNvbGxlY3Rpb25OYW1lAAAFDmNvbGxlY3Rpb25OYW1lAgViYXNpYwQGbmZ0TnVtCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FEGNvbGxlY3Rpb25Eb21haW4CBV9zaXplAAEJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIFX2RhdGEJAKwCAgkArAICCQCsAgIJAKwCAgIQeydjb2xsZWN0aW9uJzogJwUQY29sbGVjdGlvbkRvbWFpbgIKJywgJ251bSc6IAkApAMBBQZuZnROdW0CAX0JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICBl9pbWFnZQUFaW1hZ2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICB19pc3N1ZXIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FEGNvbGxlY3Rpb25Eb21haW4CBV9zaXplBQZuZnROdW0JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FEGNvbGxlY3Rpb25Eb21haW4CCV9hc3NldElkXwUKYXNzZXRJZFN0cgUKYXNzZXRJZFN0cgkAzAgCBQVhc3NldAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsBQphc3NldElkU3RyAWkBBG1pbnQJBG5hbWUEZGVzYwpjb2xsZWN0aW9uB3ByZXZpZXcIb3JpZ2luYWwGYW1vdW50CnNvdXJjZUxpc3QNcmFuZEluZGV4TGlzdApwYXJhbXNMaXN0BAduZnREZXNjBQRkZXNjBA5jb2xsZWN0aW9uTmFtZQUKY29sbGVjdGlvbgQLcHJldmlld0ZpbGUDCQBmAgkAsQIBBQdwcmV2aWV3AAAFB3ByZXZpZXcFCG9yaWdpbmFsAwkBASEBCQELaXNWYWxpZE5hbWUCBQRuYW1lCAUBaQZjYWxsZXIJAAIBAhBJbnZhbGlkIG5mdCBuYW1lAwkAAAIJALECAQUOY29sbGVjdGlvbk5hbWUAAAkAAgECGUluY29ycmVjdCBjb2xsZWN0aW9uIG5hbWUDAwkBAiE9AgkAswkCBQhvcmlnaW5hbAIIaHR0cHM6Ly8AAAYJAQIhPQIJALMJAgULcHJldmlld0ZpbGUCCGh0dHBzOi8vAAAJAAIBAhtodHRwcyBsaW5rIHRvIGZpbGUgcmVxdWlyZWQEBWFzc2V0CQDDCAcFBG5hbWUFB25mdERlc2MAAQAABwUEdW5pdAAABAdhc3NldElkCQC4CAEFBWFzc2V0BAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQDCQAAAgUGYW1vdW50AAEEEGNvbGxlY3Rpb25Eb21haW4JAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwMJAGYCCQCxAgEFDmNvbGxlY3Rpb25OYW1lAAAFDmNvbGxlY3Rpb25OYW1lAgViYXNpYwQGbmZ0TnVtCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FEGNvbGxlY3Rpb25Eb21haW4CBV9zaXplAAEJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIFX2RhdGEJAKwCAgkArAICCQCsAgIJAKwCAgIQeydjb2xsZWN0aW9uJzogJwUQY29sbGVjdGlvbkRvbWFpbgIKJywgJ251bSc6IAkApAMBBQZuZnROdW0CAX0JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICBl9pbWFnZQULcHJldmlld0ZpbGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICCV9vcmlnaW5hbAUIb3JpZ2luYWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICB19pc3N1ZXIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FEGNvbGxlY3Rpb25Eb21haW4CBV9zaXplBQZuZnROdW0JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FEGNvbGxlY3Rpb25Eb21haW4CCV9hc3NldElkXwUKYXNzZXRJZFN0cgUKYXNzZXRJZFN0cgkAzAgCBQVhc3NldAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsBQphc3NldElkU3RyAwkAZgIFBmFtb3VudAABAwkAZwIFEUxJTUlUX01JTlRfQ09QSUVTBQZhbW91bnQEEGNvbGxlY3Rpb25Eb21haW4JAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwUOY29sbGVjdGlvbk5hbWUECHJhbmREYXRhAwMJAGYCCQCxAgEFDXJhbmRJbmRleExpc3QAAAkAZgIJALECAQUKc291cmNlTGlzdAAABwMJAQIhPQIJAJADAQkAvQkCBQ1yYW5kSW5kZXhMaXN0AgEsBQZhbW91bnQJAAIBAjxyYW5kb20gbGlzdCBpcyBub3QgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBhdmFpbGFibGUgZWxlbWVudHMDCQAAAgkAsQIBBQpwYXJhbXNMaXN0AAAJAAIBAhRwYXJhbXMgbGlzdCBpcyBlbXB0eQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIGZ3JvdXBfBQphc3NldElkU3RyAgtfc291cmNlTGlzdAUKc291cmNlTGlzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIGZ3JvdXBfBQphc3NldElkU3RyAg5fcmFuZEluZGV4TGlzdAUNcmFuZEluZGV4TGlzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIGZ3JvdXBfBQphc3NldElkU3RyAgtfcGFyYW1zTGlzdAUKcGFyYW1zTGlzdAUDbmlsAwMDCQBmAgkAsQIBBQ1yYW5kSW5kZXhMaXN0AAAJAAACCQCxAgEFCnNvdXJjZUxpc3QAAAcGAwkAAAIJALECAQUNcmFuZEluZGV4TGlzdAAACQBmAgkAsQIBBQpzb3VyY2VMaXN0AAAHCQACAQI2dGhlIGxpc3Qgb2YgcmVzb3VyY2VzIG9yIHJhbmRvbSBzZXF1ZW5jZSBpcyBub3QgZmlsbGVkBQNuaWwJAJQKAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgVfZGF0YQkArAICCQCsAgICEHsnY29sbGVjdGlvbic6ICcFEGNvbGxlY3Rpb25Eb21haW4CAid9CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgZfaW1hZ2UFC3ByZXZpZXdGaWxlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAglfb3JpZ2luYWwFCG9yaWdpbmFsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgdfaXNzdWVyCQClCAEIBQFpBmNhbGxlcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICCF9pc0dyb3VwBgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICBmdyb3VwXwUKYXNzZXRJZFN0cgIFX3NpemUFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICBmdyb3VwXwUKYXNzZXRJZFN0cgIKX2F2YWlsYWJsZQUGYW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgZncm91cF8FCmFzc2V0SWRTdHICEV9jb2xsZWN0aW9uRG9tYWluBRBjb2xsZWN0aW9uRG9tYWluCQDMCAIFBWFzc2V0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkBQNuaWwFCHJhbmREYXRhBQphc3NldElkU3RyCQACAQkArAICAllXaGVuIGNyZWF0aW5nIGEgbXVsdGlwbGUgY29sbGVjdGlvbiwgdGhlIG51bWJlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIGFuZCBsZXNzIG9yIGVxdWFsIAkApAMBBRFMSU1JVF9NSU5UX0NPUElFUwkAAgECFVdyb25nIGFtb3VudCBhcmd1bWVudAFpAQ1taW50RnJvbUdyb3VwAQ9ncm91cEFzc2V0SWRTdHIECmdyb3VwQXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQ9ncm91cEFzc2V0SWRTdHIDCQEIY2hlY2tORlQBBQpncm91cEFzc2V0AwkBCWlzRGVmaW5lZAEJAM8IAgUWbWludEZyb21Hcm91cFdoaXRlTGlzdAgFAWkGY2FsbGVyBAdpc0dyb3VwCQELdmFsdWVPckVsc2UCCQCgCAEJAKwCAgkArAICAgRuZnRfBQ9ncm91cEFzc2V0SWRTdHICCF9pc0dyb3VwBwMFB2lzR3JvdXAECWdyb3VwU2l6ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQCsAgIJAKwCAgIGZ3JvdXBfBQ9ncm91cEFzc2V0SWRTdHICBV9zaXplAAAEDmdyb3VwQXZhaWxhYmxlCQELdmFsdWVPckVsc2UCCQCfCAEJAKwCAgkArAICAgZncm91cF8FD2dyb3VwQXNzZXRJZFN0cgIKX2F2YWlsYWJsZQAAAwMJAGYCBQ5ncm91cEF2YWlsYWJsZQAACQBmAgUJZ3JvdXBTaXplAAAHBBBjb2xsZWN0aW9uRG9tYWluCQEFdmFsdWUBCQCiCAEJAKwCAgkArAICAgZncm91cF8FD2dyb3VwQXNzZXRJZFN0cgIRX2NvbGxlY3Rpb25Eb21haW4ECG9yaWdGaWxlCQEFdmFsdWUBCQCiCAEJAKwCAgkArAICAgRuZnRfBQ9ncm91cEFzc2V0SWRTdHICCV9vcmlnaW5hbAQLcHJldmlld0ZpbGUJAQV2YWx1ZQEJAKIIAQkArAICCQCsAgICBG5mdF8FD2dyb3VwQXNzZXRJZFN0cgIGX2ltYWdlBAtncm91cElzc3VlcgkBBXZhbHVlAQkAoggBCQCsAgIJAKwCAgIEbmZ0XwUPZ3JvdXBBc3NldElkU3RyAgdfaXNzdWVyBAZuZnROdW0JAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgtjb2xsZWN0aW9uXwUQY29sbGVjdGlvbkRvbWFpbgIFX3NpemUAAQQFYXNzZXQJAMMIBwgFCmdyb3VwQXNzZXQEbmFtZQgFCmdyb3VwQXNzZXQLZGVzY3JpcHRpb24AAQAABwUEdW5pdAAABAdhc3NldElkCQC4CAEFBWFzc2V0BAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEEHJhbmRJbmRleExpc3RTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkArAICCQCsAgICBmdyb3VwXwUPZ3JvdXBBc3NldElkU3RyAg5fcmFuZEluZGV4TGlzdAIABA1zb3VyY2VMaXN0U3RyCQELdmFsdWVPckVsc2UCCQCiCAEJAKwCAgkArAICAgZncm91cF8FD2dyb3VwQXNzZXRJZFN0cgILX3NvdXJjZUxpc3QCAAQNcGFyYW1zTGlzdFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQCsAgIJAKwCAgIGZ3JvdXBfBQ9ncm91cEFzc2V0SWRTdHICC19wYXJhbXNMaXN0AgAEC2NvbW1vblN0YXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgVfZGF0YQkArAICCQCsAgIJAKwCAgkArAICAhB7J2NvbGxlY3Rpb24nOiAnBRBjb2xsZWN0aW9uRG9tYWluAgonLCAnbnVtJzogCQCkAwEFBm5mdE51bQIBfQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIHX2lzc3VlcgULZ3JvdXBJc3N1ZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgtjb2xsZWN0aW9uXwUQY29sbGVjdGlvbkRvbWFpbgIFX3NpemUFBm5mdE51bQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICAgtjb2xsZWN0aW9uXwUQY29sbGVjdGlvbkRvbWFpbgIJX2Fzc2V0SWRfBQphc3NldElkU3RyBQphc3NldElkU3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIGZ3JvdXBfBQ9ncm91cEFzc2V0SWRTdHICCl9hdmFpbGFibGUJAGUCBQ5ncm91cEF2YWlsYWJsZQABCQDMCAIFBWFzc2V0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkBQNuaWwDCQBmAgkAsQIBBQ1zb3VyY2VMaXN0U3RyAAADCQAAAgkAsQIBBRByYW5kSW5kZXhMaXN0U3RyAAAJAAIBAhJNaW50IG5vdCBhdmFpbGFibGUEDXJhbmRJbmRleExpc3QJAL0JAgUQcmFuZEluZGV4TGlzdFN0cgIBLAQKc291cmNlTGlzdAkAvQkCBQ1zb3VyY2VMaXN0U3RyAgEsBApwYXJhbXNMaXN0CQC9CQIFDXBhcmFtc0xpc3RTdHICASwEBHJhbmQJAQ9nZXRSYW5kb21OdW1iZXIEBQ5ncm91cEF2YWlsYWJsZQgFAWkNdHJhbnNhY3Rpb25JZAUGaGVpZ2h0AAAECXJhbmRJbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNcmFuZEluZGV4TGlzdAUEcmFuZAISSW52YWxpZCByYW5kIGluZGV4BAtwYXJhbXNFbnRyeQQHJG1hdGNoMAkAkQMCBQpwYXJhbXNMaXN0BQlyYW5kSW5kZXgDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF0BQckbWF0Y2gwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgdfcGFyYW1zBQF0BQNuaWwFA25pbAkAlAoCCQDOCAIJAM4IAgULY29tbW9uU3RhdGUFC3BhcmFtc0VudHJ5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgZfaW1hZ2UJAJEDAgUKc291cmNlTGlzdAUJcmFuZEluZGV4CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgZncm91cF8FD2dyb3VwQXNzZXRJZFN0cgIOX3JhbmRJbmRleExpc3QJALsJAgkA0QgCBQ1yYW5kSW5kZXhMaXN0BQRyYW5kAgEsBQNuaWwFCmFzc2V0SWRTdHIJAJQKAgkAzggCBQtjb21tb25TdGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIGX2ltYWdlBQtwcmV2aWV3RmlsZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIJX29yaWdpbmFsBQhvcmlnRmlsZQUDbmlsBQphc3NldElkU3RyCQACAQISTWludCBub3QgYXZhaWxhYmxlCQACAQIWSW52YWxpZCBORlQgaWRlbnRpZmllcgkAAgECFkludmFsaWQgY2FsbGVyIGFkZHJlc3MJAAIBAgxXcm9uZyBORlQgSWQBaQEHYnVybk5GVAAEB2Fzc2V0SWQJAQV2YWx1ZQEICQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQAAAggJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAQkBCGNoZWNrTkZUAQUFYXNzZXQHBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEBmlzc3VlcgkBDHRyeUdldFN0cmluZwEJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgdfaXNzdWVyBAdpc0dyb3VwCQELdmFsdWVPckVsc2UCCQCgCAEJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAghfaXNHcm91cAcDCQEBIQEFB2lzR3JvdXAEBGRhdGEJAQx0cnlHZXRTdHJpbmcBCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIFX2RhdGEECXBhcnRzRGF0YQkAtQkCBQRkYXRhAgIsIAQPcGFydHNDb2xsZWN0aW9uCQC1CQIJAJEDAgUJcGFydHNEYXRhAAACAjogBBBjb2xsZWN0aW9uRG9tYWluCQCzAgIJALACAgkAkQMCBQ9wYXJ0c0NvbGxlY3Rpb24AAQABAAEEBm5mdE51bQkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FEGNvbGxlY3Rpb25Eb21haW4CBV9zaXplAwkAZgIFBm5mdE51bQAABBB1cGRhdGVDb2xsZWN0aW9uAwkAAAIFBm5mdE51bQABCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FEGNvbGxlY3Rpb25Eb21haW4CBV9zaXplCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICC2NvbGxlY3Rpb25fBRBjb2xsZWN0aW9uRG9tYWluAgVfc2l6ZQkAZQIFBm5mdE51bQABCQDMCAIFEHVwZGF0ZUNvbGxlY3Rpb24JAMwIAgkBBEJ1cm4CBQdhc3NldElkAAEJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICBV9kYXRhCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgZfaW1hZ2UJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICB19wYXJhbXMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICCV9vcmlnaW5hbAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIHX2lzc3VlcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIIX2lzR3JvdXAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBmdyb3VwXwUKYXNzZXRJZFN0cgIFX3NpemUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBmdyb3VwXwUKYXNzZXRJZFN0cgIKX2F2YWlsYWJsZQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIGZ3JvdXBfBQphc3NldElkU3RyAhFfY29sbGVjdGlvbkRvbWFpbgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICAgtjb2xsZWN0aW9uXwUQY29sbGVjdGlvbkRvbWFpbgIJX2Fzc2V0SWRfBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgtjb2xsZWN0aW9uXwUQY29sbGVjdGlvbkRvbWFpbgIIX2Fzc2V0SWQFA25pbAkAAgECFkl2YWxpZCBjb2xsZWN0aW9uIG5hbWUEEGNvbGxlY3Rpb25Eb21haW4JAQV2YWx1ZQEJAKIIAQkArAICCQCsAgICBmdyb3VwXwUKYXNzZXRJZFN0cgIRX2NvbGxlY3Rpb25Eb21haW4JAMwIAgkBBEJ1cm4CBQdhc3NldElkAAEJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICBV9kYXRhCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgZfaW1hZ2UJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICCV9vcmlnaW5hbAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIHX2lzc3VlcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIIX2lzR3JvdXAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBmdyb3VwXwUKYXNzZXRJZFN0cgIFX3NpemUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBmdyb3VwXwUKYXNzZXRJZFN0cgIKX2F2YWlsYWJsZQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIGZ3JvdXBfBQphc3NldElkU3RyAhFfY29sbGVjdGlvbkRvbWFpbgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIGZ3JvdXBfBQphc3NldElkU3RyAgtfc291cmNlTGlzdAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIGZ3JvdXBfBQphc3NldElkU3RyAg5fcmFuZEluZGV4TGlzdAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIGZ3JvdXBfBQphc3NldElkU3RyAgtfcGFyYW1zTGlzdAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FEGNvbGxlY3Rpb25Eb21haW4CCF9hc3NldElkBQNuaWwJAAIBAhNJdmFsaWQgTkZUIGF0dGFjaGVkAWkBDGVkaXRJbWFnZU5GVAICaWQLbmV3SW1hZ2VVcmwDCQAAAgkAzwgCBRBlZGl0b3JzV2hpdGVMaXN0CQClCAEIBQFpBmNhbGxlcgUEdW5pdAkAAgECF0VkaXRpbmcgTkZUcyBpcyBsaW1pdGVkAwkBAiE9AgkAswkCBQtuZXdJbWFnZVVybAIIaHR0cHM6Ly8AAAkAAgECHGh0dHBzIGxpbmsgdG8gaW1hZ2UgcmVxdWlyZWQEBWFzc2V0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQJpZAIOTkZUIG5vdCBmb3VkZWQECWFsZXhhbmRyYQkBB0FkZHJlc3MBARoBV3kzNKWWSa49fxnYw58/cJf/9NlZPGCRhwQNdHN1bmFtaU1lbWJlcgkBB0FkZHJlc3MBARoBVzKMMm1h4DpamC6EoPgEvhzToPKjDFi6SAQNdHN1bmFtaUlzc3VlcgIjM1BQTGVhNTFjdmNtbUxBaE1xVDdyNFZtYXJETWY3WTVpVkgEC2Fzc2V0SXNzdWVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkArAICCQCsAgICBG5mdF8JANgEAQgFBWFzc2V0AmlkAgdfaXNzdWVyAhBJc3N1ZXIgbm90IGZvdW5kAwMDCQAAAggFAWkGY2FsbGVyBQlhbGV4YW5kcmEGCQAAAggFAWkGY2FsbGVyBQ10c3VuYW1pTWVtYmVyCQECIT0CBQthc3NldElzc3VlcgUNdHN1bmFtaUlzc3VlcgcJAAIBAhRVc2Ugb25seSB0c3VuYW1pIE5GVAQKYXNzZXRJZFN0cgkA2AQBCAUFYXNzZXQCaWQECWRhdGFFeGlzdAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgVfZGF0YQITTkZUIGRhdGEgbm90IGZvdWRlZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIGX2ltYWdlBQtuZXdJbWFnZVVybAUDbmlsAWkBDHVwZGF0ZUZvcm1hdAECaWQEBWFzc2V0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQJpZAIQaW52YWxpZCBhc3NldCBJZAQKYXNzZXRJZFN0cgkA2AQBCAUFYXNzZXQCaWQEBGRhdGEJAQx0cnlHZXRTdHJpbmcBCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIFX2RhdGEECXBhcnRzRGF0YQkAtQkCBQRkYXRhAgIsIAQPcGFydHNDb2xsZWN0aW9uCQC1CQIJAJEDAgUJcGFydHNEYXRhAAACAjogBBBjb2xsZWN0aW9uRG9tYWluCQCzAgIJALACAgkAkQMCBQ9wYXJ0c0NvbGxlY3Rpb24AAQABAAEDCQBmAgkAsQIBBRBjb2xsZWN0aW9uRG9tYWluAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICC2NvbGxlY3Rpb25fBRBjb2xsZWN0aW9uRG9tYWluAghfYXNzZXRJZAUKYXNzZXRJZFN0cgUDbmlsCQACAQIXSW52YWxpZCBjb2xsZWN0aW9uIG5hbWUBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5HL50LQ==", "height": 3481986, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: F6g34ALWkF8guF8QnvhhLHU2PdDNENVCTLSU4E6Nystf Next: none Diff:
OldNewDifferences
133133 then collectionName
134134 else "basic"))
135135 let nftNum = (tryGetInteger((("collection_" + collectionDomain) + "_size")) + 1)
136- $Tuple2([StringEntry((("nft_" + assetIdStr) + "_data"), (((("{'collection': '" + collectionDomain) + "', 'num': ") + toString(nftNum)) + "}")), StringEntry((("nft_" + assetIdStr) + "_image"), previewFile), StringEntry((("nft_" + assetIdStr) + "_original"), original), StringEntry((("nft_" + assetIdStr) + "_issuer"), toString(i.caller)), IntegerEntry((("collection_" + collectionDomain) + "_size"), nftNum), StringEntry(((("collection_" + collectionDomain) + "_assetId_") + assetIdStr), assetIdStr), StringEntry((("collection_" + collectionDomain) + "_assetId"), assetIdStr), asset, ScriptTransfer(i.caller, 1, assetId)], assetIdStr)
136+ $Tuple2([StringEntry((("nft_" + assetIdStr) + "_data"), (((("{'collection': '" + collectionDomain) + "', 'num': ") + toString(nftNum)) + "}")), StringEntry((("nft_" + assetIdStr) + "_image"), previewFile), StringEntry((("nft_" + assetIdStr) + "_original"), original), StringEntry((("nft_" + assetIdStr) + "_issuer"), toString(i.caller)), IntegerEntry((("collection_" + collectionDomain) + "_size"), nftNum), StringEntry(((("collection_" + collectionDomain) + "_assetId_") + assetIdStr), assetIdStr), asset, ScriptTransfer(i.caller, 1, assetId)], assetIdStr)
137137 }
138138 else if ((amount > 1))
139139 then if ((LIMIT_MINT_COPIES >= amount))
156156 else false)
157157 then throw("the list of resources or random sequence is not filled")
158158 else nil
159- $Tuple2(([StringEntry((("nft_" + assetIdStr) + "_data"), (("{'collection': '" + collectionDomain) + "'}")), StringEntry((("nft_" + assetIdStr) + "_image"), previewFile), StringEntry((("nft_" + assetIdStr) + "_original"), original), StringEntry((("nft_" + assetIdStr) + "_issuer"), toString(i.caller)), BooleanEntry((("nft_" + assetIdStr) + "_isGroup"), true), IntegerEntry((("group_" + assetIdStr) + "_size"), amount), IntegerEntry((("group_" + assetIdStr) + "_available"), amount), StringEntry((("group_" + assetIdStr) + "_collectionDomain"), collectionDomain), StringEntry((("collection_" + collectionDomain) + "_assetId"), assetIdStr), asset, ScriptTransfer(i.caller, 1, assetId)] ++ randData), assetIdStr)
159+ $Tuple2(([StringEntry((("nft_" + assetIdStr) + "_data"), (("{'collection': '" + collectionDomain) + "'}")), StringEntry((("nft_" + assetIdStr) + "_image"), previewFile), StringEntry((("nft_" + assetIdStr) + "_original"), original), StringEntry((("nft_" + assetIdStr) + "_issuer"), toString(i.caller)), BooleanEntry((("nft_" + assetIdStr) + "_isGroup"), true), IntegerEntry((("group_" + assetIdStr) + "_size"), amount), IntegerEntry((("group_" + assetIdStr) + "_available"), amount), StringEntry((("group_" + assetIdStr) + "_collectionDomain"), collectionDomain), asset, ScriptTransfer(i.caller, 1, assetId)] ++ randData), assetIdStr)
160160 }
161161 else throw(("When creating a multiple collection, the number must be greater than 1 and less or equal " + toString(LIMIT_MINT_COPIES)))
162162 else throw("Wrong amount argument")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let issuersWhitelist = ["3P3iV85eXfkcA3Dd13EpZBYvs1vkKX6AYEN", "3PHFAavxj2ePJqFB46H2aRGA7oQL6kz1rJJ", "3P6peovAkVN3px6Zuv8y2noTWHFM4R5Wjj8", "3P5CQkvk8Pu6rGP3Qav4Lwskwa8pLhNwTbR", "3PHKDCQScvSPHvdCUeucFkx5Q1xMURA9kbr", "3PMki5sHBsQb4KgDknbUwsL3YgxaCzaZnCJ", "3P2wMCDjtxeLdfQrpR8WUe5zNeScM4UaL3o", "3P3pDosq4GCwfJkvq4yqKvvoTwmoqc9qPmo", "3PPgeYTWMRZ7S7jSLpnVuKKB9r6XuDk3ndC", "3PKVgd6ds1xervK6bPXbEHBqg8ibTcf5HZk", "3PD1sd55PYzmGUrQ896Qt3uvdbtgjCVpajE", "3PFkgvC9y6zHy64zEAscKKgaNY3yipiLqbW", "3PGGSiLuwGmm7ChfjDrmEZBd6HxQJn8N1NM", "3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD", "3P5bL6V4oGTZtMTirj9WxtbxUntqXdjevAE", "3PCyjqHhtq9f9Hmn4LNsWwA68dFVsvQ6iNi", "3PKHFX6W4aAr1e1b8MUTz5HmdWVUcjWhgY4", "3PJVkx7XRo86zU88shLuKGmbRr7RkMSxjHj", "3PLu7coMNV4naCxWkRemqga6o9zUhQppxsA", "3PGKEe4y59V3WLnHwPEUaMWdbzy8sb982fG", "3P5d8a1H2m2zFQakhaaow3uDE77UYLGd89v"]
55
66 let editorsWhiteList = ["3PGKEe4y59V3WLnHwPEUaMWdbzy8sb982fG", "3P7NhmDt31ekQ2JryxtmdgZ1DXgVPwyocJK", "3PCyjqHhtq9f9Hmn4LNsWwA68dFVsvQ6iNi", "3P6YATtrcTkMoEeuZVaUxnD99DuJeG15yao"]
77
88 let mintFromGroupWhiteList = [Address(base58'3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc'), Address(base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD')]
99
1010 let nftUltraStakingWrapper = Address(base58'3PKVgd6ds1xervK6bPXbEHBqg8ibTcf5HZk')
1111
1212 let nftWavesPunksWrapper = Address(base58'3PD1sd55PYzmGUrQ896Qt3uvdbtgjCVpajE')
1313
1414 let LIMIT_MINT_COPIES = 10000
1515
1616 func tryGetInteger (key) = match getInteger(this, key) {
1717 case b: Int =>
1818 b
1919 case _ =>
2020 0
2121 }
2222
2323
2424 func tryGetString (key) = match getString(this, key) {
2525 case b: String =>
2626 b
2727 case _ =>
2828 ""
2929 }
3030
3131
3232 func checkNFT (asset) = if (if (if ((asset.issuer.bytes == this.bytes))
3333 then (asset.decimals == 0)
3434 else false)
3535 then (asset.reissuable == false)
3636 else false)
3737 then (asset.quantity == 1)
3838 else false
3939
4040
4141 func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
4242 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
4343 let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
4444 (toInt(randomHash, (offset * 8)) % variants)
4545 }
4646
4747
4848 func isSubString (str,subStr) = match indexOf(str, subStr) {
4949 case t: Int =>
5050 true
5151 case _ =>
5252 false
5353 }
5454
5555
5656 func isUltraStakingName (name) = if (isSubString(name, "Bored Ania"))
5757 then true
5858 else if (isSubString(name, "Bored Ania #"))
5959 then true
6060 else if (isSubString(name, "PUZZLE Early Eag"))
6161 then true
6262 else false
6363
6464
6565 func isWavesPunksName (name) = if (isSubString(name, "Memalien #"))
6666 then true
6767 else if (isSubString(name, "ZombiePunk #"))
6868 then true
6969 else if (isSubString(name, "MadPunk #"))
7070 then true
7171 else if (isSubString(name, "WavesPunk #"))
7272 then true
7373 else false
7474
7575
7676 func isValidName (name,caller) = if (if ((4 > size(name)))
7777 then true
7878 else (size(name) > 16))
7979 then throw("Name must be between 4 and 16 characters")
8080 else {
8181 let allowCallers = [nftUltraStakingWrapper, nftWavesPunksWrapper]
8282 match indexOf(allowCallers, caller) {
8383 case t: Int =>
8484 true
8585 case _ =>
8686 if (!(isUltraStakingName(name)))
8787 then !(isWavesPunksName(name))
8888 else false
8989 }
9090 }
9191
9292
9393 @Callable(i)
9494 func createNFT (nftName,nftDesc,image,collectionName) = if (!(isValidName(nftName, i.caller)))
9595 then throw("Invalid nft name")
9696 else if ((indexOf(image, "https://") != 0))
9797 then throw("https link to image required")
9898 else {
9999 let asset = Issue(nftName, nftDesc, 1, 0, false, unit, 0)
100100 let assetId = calculateAssetId(asset)
101101 let assetIdStr = toBase58String(assetId)
102102 let collectionDomain = ((toString(i.caller) + "_") + (if ((size(collectionName) > 0))
103103 then collectionName
104104 else "basic"))
105105 let nftNum = (tryGetInteger((("collection_" + collectionDomain) + "_size")) + 1)
106106 $Tuple2([StringEntry((("nft_" + assetIdStr) + "_data"), (((("{'collection': '" + collectionDomain) + "', 'num': ") + toString(nftNum)) + "}")), StringEntry((("nft_" + assetIdStr) + "_image"), image), StringEntry((("nft_" + assetIdStr) + "_issuer"), toString(i.caller)), IntegerEntry((("collection_" + collectionDomain) + "_size"), nftNum), StringEntry(((("collection_" + collectionDomain) + "_assetId_") + assetIdStr), assetIdStr), asset, ScriptTransfer(i.caller, 1, assetId)], assetIdStr)
107107 }
108108
109109
110110
111111 @Callable(i)
112112 func mint (name,desc,collection,preview,original,amount,sourceList,randIndexList,paramsList) = {
113113 let nftDesc = desc
114114 let collectionName = collection
115115 let previewFile = if ((size(preview) > 0))
116116 then preview
117117 else original
118118 if (!(isValidName(name, i.caller)))
119119 then throw("Invalid nft name")
120120 else if ((size(collectionName) == 0))
121121 then throw("Incorrect collection name")
122122 else if (if ((indexOf(original, "https://") != 0))
123123 then true
124124 else (indexOf(previewFile, "https://") != 0))
125125 then throw("https link to file required")
126126 else {
127127 let asset = Issue(name, nftDesc, 1, 0, false, unit, 0)
128128 let assetId = calculateAssetId(asset)
129129 let assetIdStr = toBase58String(assetId)
130130 if ((amount == 1))
131131 then {
132132 let collectionDomain = ((toString(i.caller) + "_") + (if ((size(collectionName) > 0))
133133 then collectionName
134134 else "basic"))
135135 let nftNum = (tryGetInteger((("collection_" + collectionDomain) + "_size")) + 1)
136- $Tuple2([StringEntry((("nft_" + assetIdStr) + "_data"), (((("{'collection': '" + collectionDomain) + "', 'num': ") + toString(nftNum)) + "}")), StringEntry((("nft_" + assetIdStr) + "_image"), previewFile), StringEntry((("nft_" + assetIdStr) + "_original"), original), StringEntry((("nft_" + assetIdStr) + "_issuer"), toString(i.caller)), IntegerEntry((("collection_" + collectionDomain) + "_size"), nftNum), StringEntry(((("collection_" + collectionDomain) + "_assetId_") + assetIdStr), assetIdStr), StringEntry((("collection_" + collectionDomain) + "_assetId"), assetIdStr), asset, ScriptTransfer(i.caller, 1, assetId)], assetIdStr)
136+ $Tuple2([StringEntry((("nft_" + assetIdStr) + "_data"), (((("{'collection': '" + collectionDomain) + "', 'num': ") + toString(nftNum)) + "}")), StringEntry((("nft_" + assetIdStr) + "_image"), previewFile), StringEntry((("nft_" + assetIdStr) + "_original"), original), StringEntry((("nft_" + assetIdStr) + "_issuer"), toString(i.caller)), IntegerEntry((("collection_" + collectionDomain) + "_size"), nftNum), StringEntry(((("collection_" + collectionDomain) + "_assetId_") + assetIdStr), assetIdStr), asset, ScriptTransfer(i.caller, 1, assetId)], assetIdStr)
137137 }
138138 else if ((amount > 1))
139139 then if ((LIMIT_MINT_COPIES >= amount))
140140 then {
141141 let collectionDomain = ((toString(i.caller) + "_") + collectionName)
142142 let randData = if (if ((size(randIndexList) > 0))
143143 then (size(sourceList) > 0)
144144 else false)
145145 then if ((size(split_51C(randIndexList, ",")) != amount))
146146 then throw("random list is not equal to the number of available elements")
147147 else if ((size(paramsList) == 0))
148148 then throw("params list is empty")
149149 else [StringEntry((("group_" + assetIdStr) + "_sourceList"), sourceList), StringEntry((("group_" + assetIdStr) + "_randIndexList"), randIndexList), StringEntry((("group_" + assetIdStr) + "_paramsList"), paramsList)]
150150 else if (if (if ((size(randIndexList) > 0))
151151 then (size(sourceList) == 0)
152152 else false)
153153 then true
154154 else if ((size(randIndexList) == 0))
155155 then (size(sourceList) > 0)
156156 else false)
157157 then throw("the list of resources or random sequence is not filled")
158158 else nil
159- $Tuple2(([StringEntry((("nft_" + assetIdStr) + "_data"), (("{'collection': '" + collectionDomain) + "'}")), StringEntry((("nft_" + assetIdStr) + "_image"), previewFile), StringEntry((("nft_" + assetIdStr) + "_original"), original), StringEntry((("nft_" + assetIdStr) + "_issuer"), toString(i.caller)), BooleanEntry((("nft_" + assetIdStr) + "_isGroup"), true), IntegerEntry((("group_" + assetIdStr) + "_size"), amount), IntegerEntry((("group_" + assetIdStr) + "_available"), amount), StringEntry((("group_" + assetIdStr) + "_collectionDomain"), collectionDomain), StringEntry((("collection_" + collectionDomain) + "_assetId"), assetIdStr), asset, ScriptTransfer(i.caller, 1, assetId)] ++ randData), assetIdStr)
159+ $Tuple2(([StringEntry((("nft_" + assetIdStr) + "_data"), (("{'collection': '" + collectionDomain) + "'}")), StringEntry((("nft_" + assetIdStr) + "_image"), previewFile), StringEntry((("nft_" + assetIdStr) + "_original"), original), StringEntry((("nft_" + assetIdStr) + "_issuer"), toString(i.caller)), BooleanEntry((("nft_" + assetIdStr) + "_isGroup"), true), IntegerEntry((("group_" + assetIdStr) + "_size"), amount), IntegerEntry((("group_" + assetIdStr) + "_available"), amount), StringEntry((("group_" + assetIdStr) + "_collectionDomain"), collectionDomain), asset, ScriptTransfer(i.caller, 1, assetId)] ++ randData), assetIdStr)
160160 }
161161 else throw(("When creating a multiple collection, the number must be greater than 1 and less or equal " + toString(LIMIT_MINT_COPIES)))
162162 else throw("Wrong amount argument")
163163 }
164164 }
165165
166166
167167
168168 @Callable(i)
169169 func mintFromGroup (groupAssetIdStr) = {
170170 let groupAsset = value(assetInfo(fromBase58String(groupAssetIdStr)))
171171 if (checkNFT(groupAsset))
172172 then if (isDefined(indexOf(mintFromGroupWhiteList, i.caller)))
173173 then {
174174 let isGroup = valueOrElse(getBoolean((("nft_" + groupAssetIdStr) + "_isGroup")), false)
175175 if (isGroup)
176176 then {
177177 let groupSize = valueOrElse(getInteger((("group_" + groupAssetIdStr) + "_size")), 0)
178178 let groupAvailable = valueOrElse(getInteger((("group_" + groupAssetIdStr) + "_available")), 0)
179179 if (if ((groupAvailable > 0))
180180 then (groupSize > 0)
181181 else false)
182182 then {
183183 let collectionDomain = value(getString((("group_" + groupAssetIdStr) + "_collectionDomain")))
184184 let origFile = value(getString((("nft_" + groupAssetIdStr) + "_original")))
185185 let previewFile = value(getString((("nft_" + groupAssetIdStr) + "_image")))
186186 let groupIssuer = value(getString((("nft_" + groupAssetIdStr) + "_issuer")))
187187 let nftNum = (tryGetInteger((("collection_" + collectionDomain) + "_size")) + 1)
188188 let asset = Issue(groupAsset.name, groupAsset.description, 1, 0, false, unit, 0)
189189 let assetId = calculateAssetId(asset)
190190 let assetIdStr = toBase58String(assetId)
191191 let randIndexListStr = valueOrElse(getString((("group_" + groupAssetIdStr) + "_randIndexList")), "")
192192 let sourceListStr = valueOrElse(getString((("group_" + groupAssetIdStr) + "_sourceList")), "")
193193 let paramsListStr = valueOrElse(getString((("group_" + groupAssetIdStr) + "_paramsList")), "")
194194 let commonState = [StringEntry((("nft_" + assetIdStr) + "_data"), (((("{'collection': '" + collectionDomain) + "', 'num': ") + toString(nftNum)) + "}")), StringEntry((("nft_" + assetIdStr) + "_issuer"), groupIssuer), IntegerEntry((("collection_" + collectionDomain) + "_size"), nftNum), StringEntry(((("collection_" + collectionDomain) + "_assetId_") + assetIdStr), assetIdStr), IntegerEntry((("group_" + groupAssetIdStr) + "_available"), (groupAvailable - 1)), asset, ScriptTransfer(i.caller, 1, assetId)]
195195 if ((size(sourceListStr) > 0))
196196 then if ((size(randIndexListStr) == 0))
197197 then throw("Mint not available")
198198 else {
199199 let randIndexList = split_51C(randIndexListStr, ",")
200200 let sourceList = split_51C(sourceListStr, ",")
201201 let paramsList = split_51C(paramsListStr, ",")
202202 let rand = getRandomNumber(groupAvailable, i.transactionId, height, 0)
203203 let randIndex = valueOrErrorMessage(parseInt(randIndexList[rand]), "Invalid rand index")
204204 let paramsEntry = match paramsList[randIndex] {
205205 case t: String =>
206206 [StringEntry((("nft_" + assetIdStr) + "_params"), t)]
207207 case _ =>
208208 nil
209209 }
210210 $Tuple2(((commonState ++ paramsEntry) ++ [StringEntry((("nft_" + assetIdStr) + "_image"), sourceList[randIndex]), StringEntry((("group_" + groupAssetIdStr) + "_randIndexList"), makeString_11C(removeByIndex(randIndexList, rand), ","))]), assetIdStr)
211211 }
212212 else $Tuple2((commonState ++ [StringEntry((("nft_" + assetIdStr) + "_image"), previewFile), StringEntry((("nft_" + assetIdStr) + "_original"), origFile)]), assetIdStr)
213213 }
214214 else throw("Mint not available")
215215 }
216216 else throw("Invalid NFT identifier")
217217 }
218218 else throw("Invalid caller address")
219219 else throw("Wrong NFT Id")
220220 }
221221
222222
223223
224224 @Callable(i)
225225 func burnNFT () = {
226226 let assetId = value(value(i.payments[0]).assetId)
227227 let asset = value(assetInfo(assetId))
228228 if (if ((value(i.payments[0]).amount == 1))
229229 then checkNFT(asset)
230230 else false)
231231 then {
232232 let assetIdStr = toBase58String(assetId)
233233 let issuer = tryGetString((("nft_" + assetIdStr) + "_issuer"))
234234 let isGroup = valueOrElse(getBoolean((("nft_" + assetIdStr) + "_isGroup")), false)
235235 if (!(isGroup))
236236 then {
237237 let data = tryGetString((("nft_" + assetIdStr) + "_data"))
238238 let partsData = split(data, ", ")
239239 let partsCollection = split(partsData[0], ": ")
240240 let collectionDomain = dropRight(drop(partsCollection[1], 1), 1)
241241 let nftNum = tryGetInteger((("collection_" + collectionDomain) + "_size"))
242242 if ((nftNum > 0))
243243 then {
244244 let updateCollection = if ((nftNum == 1))
245245 then DeleteEntry((("collection_" + collectionDomain) + "_size"))
246246 else IntegerEntry((("collection_" + collectionDomain) + "_size"), (nftNum - 1))
247247 [updateCollection, Burn(assetId, 1), DeleteEntry((("nft_" + assetIdStr) + "_data")), DeleteEntry((("nft_" + assetIdStr) + "_image")), DeleteEntry((("nft_" + assetIdStr) + "_params")), DeleteEntry((("nft_" + assetIdStr) + "_original")), DeleteEntry((("nft_" + assetIdStr) + "_issuer")), DeleteEntry((("nft_" + assetIdStr) + "_isGroup")), DeleteEntry((("group_" + assetIdStr) + "_size")), DeleteEntry((("group_" + assetIdStr) + "_available")), DeleteEntry((("group_" + assetIdStr) + "_collectionDomain")), DeleteEntry(((("collection_" + collectionDomain) + "_assetId_") + assetIdStr)), DeleteEntry((("collection_" + collectionDomain) + "_assetId"))]
248248 }
249249 else throw("Ivalid collection name")
250250 }
251251 else {
252252 let collectionDomain = value(getString((("group_" + assetIdStr) + "_collectionDomain")))
253253 [Burn(assetId, 1), DeleteEntry((("nft_" + assetIdStr) + "_data")), DeleteEntry((("nft_" + assetIdStr) + "_image")), DeleteEntry((("nft_" + assetIdStr) + "_original")), DeleteEntry((("nft_" + assetIdStr) + "_issuer")), DeleteEntry((("nft_" + assetIdStr) + "_isGroup")), DeleteEntry((("group_" + assetIdStr) + "_size")), DeleteEntry((("group_" + assetIdStr) + "_available")), DeleteEntry((("group_" + assetIdStr) + "_collectionDomain")), DeleteEntry((("group_" + assetIdStr) + "_sourceList")), DeleteEntry((("group_" + assetIdStr) + "_randIndexList")), DeleteEntry((("group_" + assetIdStr) + "_paramsList")), DeleteEntry((("collection_" + collectionDomain) + "_assetId"))]
254254 }
255255 }
256256 else throw("Ivalid NFT attached")
257257 }
258258
259259
260260
261261 @Callable(i)
262262 func editImageNFT (id,newImageUrl) = if ((indexOf(editorsWhiteList, toString(i.caller)) == unit))
263263 then throw("Editing NFTs is limited")
264264 else if ((indexOf(newImageUrl, "https://") != 0))
265265 then throw("https link to image required")
266266 else {
267267 let asset = valueOrErrorMessage(assetInfo(fromBase58String(id)), "NFT not fouded")
268268 let alexandra = Address(base58'3PCyjqHhtq9f9Hmn4LNsWwA68dFVsvQ6iNi')
269269 let tsunamiMember = Address(base58'3P6YATtrcTkMoEeuZVaUxnD99DuJeG15yao')
270270 let tsunamiIssuer = "3PPLea51cvcmmLAhMqT7r4VmarDMf7Y5iVH"
271271 let assetIssuer = valueOrErrorMessage(getString((("nft_" + toBase58String(asset.id)) + "_issuer")), "Issuer not found")
272272 if (if (if ((i.caller == alexandra))
273273 then true
274274 else (i.caller == tsunamiMember))
275275 then (assetIssuer != tsunamiIssuer)
276276 else false)
277277 then throw("Use only tsunami NFT")
278278 else {
279279 let assetIdStr = toBase58String(asset.id)
280280 let dataExist = valueOrErrorMessage(getString((("nft_" + assetIdStr) + "_data")), "NFT data not fouded")
281281 [StringEntry((("nft_" + assetIdStr) + "_image"), newImageUrl)]
282282 }
283283 }
284284
285285
286286
287287 @Callable(i)
288288 func updateFormat (id) = {
289289 let asset = valueOrErrorMessage(assetInfo(fromBase58String(id)), "invalid asset Id")
290290 let assetIdStr = toBase58String(asset.id)
291291 let data = tryGetString((("nft_" + assetIdStr) + "_data"))
292292 let partsData = split(data, ", ")
293293 let partsCollection = split(partsData[0], ": ")
294294 let collectionDomain = dropRight(drop(partsCollection[1], 1), 1)
295295 if ((size(collectionDomain) > 0))
296296 then [StringEntry((("collection_" + collectionDomain) + "_assetId"), assetIdStr)]
297297 else throw("Invalid collection name")
298298 }
299299
300300
301301 @Verifier(tx)
302302 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
303303

github/deemru/w8io/3ef1775 
70.46 ms