tx · 5rEDt5C5KF4SQefPB5Xw1KSyPQJj7pYx6Px6RbouyJjV

3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By:  -0.01200000 Waves

2022.12.08 18:00 [3416984] smart account 3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By > SELF 0.00000000 Waves

{ "type": 13, "id": "5rEDt5C5KF4SQefPB5Xw1KSyPQJj7pYx6Px6RbouyJjV", "fee": 1200000, "feeAssetId": null, "timestamp": 1670511639089, "version": 2, "chainId": 87, "sender": "3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By", "senderPublicKey": "A2fujmmHBBAFrVGCyHBHVbzEtHvDsFniNoiovp2N4fES", "proofs": [ "8T6PYbjcDRQF8y9ckUsEDYqgwEr8iPb7Lv5vwQFGwx69ywgtnukrivyqaVzwabD658kn2BUUw7uQ8jfuSXv5RMm" ], "script": "base64:BgIjCAISBgoECAgICBIKCggICAgICAEICBIDCgEIEgASBAoCCAgOABptYXJrZXRwbGFjZUNvbnRyYWN0QWRkcmVzcwkBB0FkZHJlc3MBARoBV12L8V/LKCBrH2ajyG7aC6iX7Q/o/clE8QAQaXNzdWVyc1doaXRlbGlzdAkAzAgCAiMzUDNpVjg1ZVhma2NBM0RkMTNFcFpCWXZzMXZrS1g2QVlFTgkAzAgCAiMzUEhGQWF2eGoyZVBKcUZCNDZIMmFSR0E3b1FMNmt6MXJKSgkAzAgCAiMzUDZwZW92QWtWTjNweDZadXY4eTJub1RXSEZNNFI1V2pqOAkAzAgCAiMzUDVDUWt2azhQdTZyR1AzUWF2NEx3c2t3YThwTGhOd1RiUgkAzAgCAiMzUEhLRENRU2N2U1BIdmRDVWV1Y0ZreDVRMXhNVVJBOWticgkAzAgCAiMzUE1raTVzSEJzUWI0S2dEa25iVXdzTDNZZ3hhQ3phWm5DSgkAzAgCAiMzUDJ3TUNEanR4ZUxkZlFycFI4V1VlNXpOZVNjTTRVYUwzbwkAzAgCAiMzUDNwRG9zcTRHQ3dmSmt2cTR5cUt2dm9Ud21vcWM5cVBtbwkAzAgCAiMzUFBnZVlUV01SWjdTN2pTTHBuVnVLS0I5cjZYdURrM25kQwkAzAgCAiMzUEtWZ2Q2ZHMxeGVydks2YlBYYkVIQnFnOGliVGNmNUhaawkAzAgCAiMzUEQxc2Q1NVBZem1HVXJRODk2UXQzdXZkYnRnakNWcGFqRQkAzAgCAiMzUEZrZ3ZDOXk2ekh5NjR6RUFzY0tLZ2FOWTN5aXBpTHFiVwkAzAgCAiMzUEdHU2lMdXdHbW03Q2hmakRybUVaQmQ2SHhRSm44TjFOTQkAzAgCAiMzUEpLbVhvSEp2VmVRWGpTSmRodGtVY0ZEdGRpUXFNYlVURAkAzAgCAiMzUDViTDZWNG9HVFp0TVRpcmo5V3h0YnhVbnRxWGRqZXZBRQkAzAgCAiMzUEN5anFIaHRxOWY5SG1uNExOc1d3QTY4ZEZWc3ZRNmlOaQkAzAgCAiMzUEtIRlg2VzRhQXIxZTFiOE1VVHo1SG1kV1ZVY2pXaGdZNAkAzAgCAiMzUEpWa3g3WFJvODZ6VTg4c2hMdUtHbWJScjdSa01TeGpIagkAzAgCAiMzUEx1N2NvTU5WNG5hQ3hXa1JlbXFnYTZvOXpVaFFwcHhzQQkAzAgCAiMzUEdLRWU0eTU5VjNXTG5Id1BFVWFNV2Rienk4c2I5ODJmRwkAzAgCAiMzUDVkOGExSDJtMnpGUWFraGFhb3czdURFNzdVWUxHZDg5dgUDbmlsABBlZGl0b3JzV2hpdGVMaXN0CQDMCAICIzNQR0tFZTR5NTlWM1dMbkh3UEVVYU1XZGJ6eThzYjk4MmZHCQDMCAICIzNQN05obUR0MzFla1EySnJ5eHRtZGdaMURYZ1ZQd3lvY0pLCQDMCAICIzNQQ3lqcUhodHE5ZjlIbW40TE5zV3dBNjhkRlZzdlE2aU5pBQNuaWwAFm5mdFVsdHJhU3Rha2luZ1dyYXBwZXIJAQdBZGRyZXNzAQEaAVfArcJtMs2Rr6VXRdiH8lPBWo7IvSaKygsAFG5mdFdhdmVzUHVua3NXcmFwcGVyCQEHQWRkcmVzcwEBGgFXeZqKMBoJ1Z2oyidoI9kb1aHnNJDG6IMtABFMSU1JVF9NSU5UX0NPUElFUwCQTgENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEMdHJ5R2V0U3RyaW5nAQNrZXkEByRtYXRjaDAJAJ0IAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgIAAQhjaGVja05GVAEFYXNzZXQDAwMJAAACCAgFBWFzc2V0Bmlzc3VlcgVieXRlcwgFBHRoaXMFYnl0ZXMJAAACCAUFYXNzZXQIZGVjaW1hbHMAAAcJAAACCAUFYXNzZXQKcmVpc3N1YWJsZQcHCQAAAggFBWFzc2V0CHF1YW50aXR5AAEHAQ9nZXRSYW5kb21OdW1iZXIECHZhcmlhbnRzBHR4SWQUaGF0Y2hpbmdGaW5pc2hIZWlnaHQGb2Zmc2V0BA9yYW5kb21TZWVkQmxvY2sJAQV2YWx1ZQEJAO0HAQkAZQIFFGhhdGNoaW5nRmluaXNoSGVpZ2h0AAEECnJhbmRvbUhhc2gJAPcDAQkAywECBQR0eElkCQEFdmFsdWUBCAUPcmFuZG9tU2VlZEJsb2NrA3ZyZgkAagIJALIJAgUKcmFuZG9tSGFzaAkAaAIFBm9mZnNldAAIBQh2YXJpYW50cwELaXNTdWJTdHJpbmcCA3N0cgZzdWJTdHIEByRtYXRjaDAJALMJAgUDc3RyBQZzdWJTdHIDCQABAgUHJG1hdGNoMAIDSW50BAF0BQckbWF0Y2gwBgcBEmlzVWx0cmFTdGFraW5nTmFtZQEEbmFtZQMJAQtpc1N1YlN0cmluZwIFBG5hbWUCCkJvcmVkIEFuaWEGAwkBC2lzU3ViU3RyaW5nAgUEbmFtZQIMQm9yZWQgQW5pYSAjBgMJAQtpc1N1YlN0cmluZwIFBG5hbWUCEFBVWlpMRSBFYXJseSBFYWcGBwEQaXNXYXZlc1B1bmtzTmFtZQEEbmFtZQMJAQtpc1N1YlN0cmluZwIFBG5hbWUCCk1lbWFsaWVuICMGAwkBC2lzU3ViU3RyaW5nAgUEbmFtZQIMWm9tYmllUHVuayAjBgMJAQtpc1N1YlN0cmluZwIFBG5hbWUCCU1hZFB1bmsgIwYDCQELaXNTdWJTdHJpbmcCBQRuYW1lAgtXYXZlc1B1bmsgIwYHAQtpc1ZhbGlkTmFtZQIEbmFtZQZjYWxsZXIDAwkAZgIABAkAsQIBBQRuYW1lBgkAZgIJALECAQUEbmFtZQAQCQACAQIoTmFtZSBtdXN0IGJlIGJldHdlZW4gNCBhbmQgMTYgY2hhcmFjdGVycwQMYWxsb3dDYWxsZXJzCQDMCAIFFm5mdFVsdHJhU3Rha2luZ1dyYXBwZXIJAMwIAgUUbmZ0V2F2ZXNQdW5rc1dyYXBwZXIFA25pbAQHJG1hdGNoMAkAzwgCBQxhbGxvd0NhbGxlcnMFBmNhbGxlcgMJAAECBQckbWF0Y2gwAgNJbnQEAXQFByRtYXRjaDAGAwkBASEBCQESaXNVbHRyYVN0YWtpbmdOYW1lAQUEbmFtZQkBASEBCQEQaXNXYXZlc1B1bmtzTmFtZQEFBG5hbWUHBQFpAQljcmVhdGVORlQEB25mdE5hbWUHbmZ0RGVzYwVpbWFnZQ5jb2xsZWN0aW9uTmFtZQMJAQEhAQkBC2lzVmFsaWROYW1lAgUHbmZ0TmFtZQgFAWkGY2FsbGVyCQACAQIQSW52YWxpZCBuZnQgbmFtZQMJAQIhPQIJALMJAgUFaW1hZ2UCCGh0dHBzOi8vAAAJAAIBAhxodHRwcyBsaW5rIHRvIGltYWdlIHJlcXVpcmVkBAVhc3NldAkAwwgHBQduZnROYW1lBQduZnREZXNjAAEAAAcFBHVuaXQAAAQHYXNzZXRJZAkAuAgBBQVhc3NldAQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBBBjb2xsZWN0aW9uRG9tYWluCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8DCQBmAgkAsQIBBQ5jb2xsZWN0aW9uTmFtZQAABQ5jb2xsZWN0aW9uTmFtZQIFYmFzaWMEBm5mdE51bQkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICC2NvbGxlY3Rpb25fBRBjb2xsZWN0aW9uRG9tYWluAgVfc2l6ZQABCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICBV9kYXRhCQCsAgIJAKwCAgkArAICCQCsAgICEHsnY29sbGVjdGlvbic6ICcFEGNvbGxlY3Rpb25Eb21haW4CCicsICdudW0nOiAJAKQDAQUGbmZ0TnVtAgF9CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgZfaW1hZ2UFBWltYWdlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgdfaXNzdWVyCQClCAEIBQFpBmNhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICC2NvbGxlY3Rpb25fBRBjb2xsZWN0aW9uRG9tYWluAgVfc2l6ZQUGbmZ0TnVtCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgICC2NvbGxlY3Rpb25fBRBjb2xsZWN0aW9uRG9tYWluAglfYXNzZXRJZF8FCmFzc2V0SWRTdHIFCmFzc2V0SWRTdHIJAMwIAgUFYXNzZXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQFA25pbAUKYXNzZXRJZFN0cgFpAQRtaW50CARuYW1lBGRlc2MKY29sbGVjdGlvbgdwcmV2aWV3CG9yaWdpbmFsBmFtb3VudApzb3VyY2VMaXN0DXJhbmRJbmRleExpc3QEB25mdERlc2MFBGRlc2MEDmNvbGxlY3Rpb25OYW1lBQpjb2xsZWN0aW9uBAtwcmV2aWV3RmlsZQMJAGYCCQCxAgEFB3ByZXZpZXcAAAUHcHJldmlldwUIb3JpZ2luYWwDCQEBIQEJAQtpc1ZhbGlkTmFtZQIFBG5hbWUIBQFpBmNhbGxlcgkAAgECEEludmFsaWQgbmZ0IG5hbWUDCQAAAgkAsQIBBQ5jb2xsZWN0aW9uTmFtZQAACQACAQIZSW5jb3JyZWN0IGNvbGxlY3Rpb24gbmFtZQMDCQECIT0CCQCzCQIFCG9yaWdpbmFsAghodHRwczovLwAABgkBAiE9AgkAswkCBQtwcmV2aWV3RmlsZQIIaHR0cHM6Ly8AAAkAAgECG2h0dHBzIGxpbmsgdG8gZmlsZSByZXF1aXJlZAQFYXNzZXQJAMMIBwUEbmFtZQUHbmZ0RGVzYwABAAAHBQR1bml0AAAEB2Fzc2V0SWQJALgIAQUFYXNzZXQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAMJAAACBQZhbW91bnQAAQQQY29sbGVjdGlvbkRvbWFpbgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfAwkAZgIJALECAQUOY29sbGVjdGlvbk5hbWUAAAUOY29sbGVjdGlvbk5hbWUCBWJhc2ljBAZuZnROdW0JAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgtjb2xsZWN0aW9uXwUQY29sbGVjdGlvbkRvbWFpbgIFX3NpemUAAQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgVfZGF0YQkArAICCQCsAgIJAKwCAgkArAICAhB7J2NvbGxlY3Rpb24nOiAnBRBjb2xsZWN0aW9uRG9tYWluAgonLCAnbnVtJzogCQCkAwEFBm5mdE51bQIBfQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIGX2ltYWdlBQtwcmV2aWV3RmlsZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIJX29yaWdpbmFsBQhvcmlnaW5hbAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIHX2lzc3VlcgkApQgBCAUBaQZjYWxsZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgtjb2xsZWN0aW9uXwUQY29sbGVjdGlvbkRvbWFpbgIFX3NpemUFBm5mdE51bQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICAgtjb2xsZWN0aW9uXwUQY29sbGVjdGlvbkRvbWFpbgIJX2Fzc2V0SWRfBQphc3NldElkU3RyBQphc3NldElkU3RyCQDMCAIFBWFzc2V0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkBQNuaWwFCmFzc2V0SWRTdHIDCQBmAgUGYW1vdW50AAEDCQBnAgURTElNSVRfTUlOVF9DT1BJRVMFBmFtb3VudAQQY29sbGVjdGlvbkRvbWFpbgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfBQ5jb2xsZWN0aW9uTmFtZQQIcmFuZERhdGEDAwkAZgIJALECAQUNcmFuZEluZGV4TGlzdAAACQBmAgkAsQIBBQpzb3VyY2VMaXN0AAAHAwkBAiE9AgkAkAMBCQC1CQIFDXJhbmRJbmRleExpc3QCASwFBmFtb3VudAkAAgECPHJhbmRvbSBsaXN0IGlzIG5vdCBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBlbGVtZW50cwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIGZ3JvdXBfBQphc3NldElkU3RyAgtfc291cmNlTGlzdAUKc291cmNlTGlzdAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIGZ3JvdXBfBQphc3NldElkU3RyAg5fcmFuZEluZGV4TGlzdAUNcmFuZEluZGV4TGlzdAUDbmlsAwMDCQBmAgkAsQIBBQ1yYW5kSW5kZXhMaXN0AAAJAAACCQCxAgEFCnNvdXJjZUxpc3QAAAcGAwkAAAIJALECAQUNcmFuZEluZGV4TGlzdAAACQBmAgkAsQIBBQpzb3VyY2VMaXN0AAAHCQACAQI2dGhlIGxpc3Qgb2YgcmVzb3VyY2VzIG9yIHJhbmRvbSBzZXF1ZW5jZSBpcyBub3QgZmlsbGVkBQNuaWwJAJQKAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgVfZGF0YQkArAICCQCsAgICEHsnY29sbGVjdGlvbic6ICcFEGNvbGxlY3Rpb25Eb21haW4CAid9CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgZfaW1hZ2UFC3ByZXZpZXdGaWxlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAglfb3JpZ2luYWwFCG9yaWdpbmFsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgdfaXNzdWVyCQClCAEIBQFpBmNhbGxlcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICCF9pc0dyb3VwBgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICBmdyb3VwXwUKYXNzZXRJZFN0cgIFX3NpemUFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICBmdyb3VwXwUKYXNzZXRJZFN0cgIKX2F2YWlsYWJsZQUGYW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgZncm91cF8FCmFzc2V0SWRTdHICEV9jb2xsZWN0aW9uRG9tYWluBRBjb2xsZWN0aW9uRG9tYWluCQDMCAIFBWFzc2V0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkBQNuaWwFCHJhbmREYXRhBQphc3NldElkU3RyCQACAQkArAICAllXaGVuIGNyZWF0aW5nIGEgbXVsdGlwbGUgY29sbGVjdGlvbiwgdGhlIG51bWJlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIGFuZCBsZXNzIG9yIGVxdWFsIAkApAMBBRFMSU1JVF9NSU5UX0NPUElFUwkAAgECFVdyb25nIGFtb3VudCBhcmd1bWVudAFpAQ1taW50RnJvbUdyb3VwAQ9ncm91cEFzc2V0SWRTdHIECmdyb3VwQXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQ9ncm91cEFzc2V0SWRTdHIDCQEIY2hlY2tORlQBBQpncm91cEFzc2V0AwkAAAIIBQFpBmNhbGxlcgUabWFya2V0cGxhY2VDb250cmFjdEFkZHJlc3MEB2lzR3JvdXAJAQt2YWx1ZU9yRWxzZQIJAKAIAQkArAICCQCsAgICBG5mdF8FD2dyb3VwQXNzZXRJZFN0cgIIX2lzR3JvdXAHAwUHaXNHcm91cAQJZ3JvdXBTaXplCQELdmFsdWVPckVsc2UCCQCfCAEJAKwCAgkArAICAgZncm91cF8FD2dyb3VwQXNzZXRJZFN0cgIFX3NpemUAAAQOZ3JvdXBBdmFpbGFibGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkArAICCQCsAgICBmdyb3VwXwUPZ3JvdXBBc3NldElkU3RyAgpfYXZhaWxhYmxlAAADAwkAZgIFDmdyb3VwQXZhaWxhYmxlAAAJAGYCBQlncm91cFNpemUAAAcEEGNvbGxlY3Rpb25Eb21haW4JAQV2YWx1ZQEJAKIIAQkArAICCQCsAgICBmdyb3VwXwUPZ3JvdXBBc3NldElkU3RyAhFfY29sbGVjdGlvbkRvbWFpbgQIb3JpZ0ZpbGUJAQV2YWx1ZQEJAKIIAQkArAICCQCsAgICBG5mdF8FD2dyb3VwQXNzZXRJZFN0cgIJX29yaWdpbmFsBAtwcmV2aWV3RmlsZQkBBXZhbHVlAQkAoggBCQCsAgIJAKwCAgIEbmZ0XwUPZ3JvdXBBc3NldElkU3RyAgZfaW1hZ2UEBm5mdE51bQkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICC2NvbGxlY3Rpb25fBRBjb2xsZWN0aW9uRG9tYWluAgVfc2l6ZQABBAVhc3NldAkAwwgHCAUKZ3JvdXBBc3NldARuYW1lCAUKZ3JvdXBBc3NldAtkZXNjcmlwdGlvbgABAAAHBQR1bml0AAAEB2Fzc2V0SWQJALgIAQUFYXNzZXQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQQcmFuZEluZGV4TGlzdFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQCsAgIJAKwCAgIGZ3JvdXBfBQ9ncm91cEFzc2V0SWRTdHICDl9yYW5kSW5kZXhMaXN0AgAEDXNvdXJjZUxpc3RTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkArAICCQCsAgICBmdyb3VwXwUPZ3JvdXBBc3NldElkU3RyAgtfc291cmNlTGlzdAIABAtjb21tb25TdGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIFX2RhdGEJAKwCAgkArAICCQCsAgIJAKwCAgIQeydjb2xsZWN0aW9uJzogJwUQY29sbGVjdGlvbkRvbWFpbgIKJywgJ251bSc6IAkApAMBBQZuZnROdW0CAX0JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICB19pc3N1ZXIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FEGNvbGxlY3Rpb25Eb21haW4CBV9zaXplBQZuZnROdW0JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FEGNvbGxlY3Rpb25Eb21haW4CCV9hc3NldElkXwUKYXNzZXRJZFN0cgUKYXNzZXRJZFN0cgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICBmdyb3VwXwUPZ3JvdXBBc3NldElkU3RyAgpfYXZhaWxhYmxlCQBlAgUOZ3JvdXBBdmFpbGFibGUAAQkAzAgCBQVhc3NldAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsAwkAZgIJALECAQUNc291cmNlTGlzdFN0cgAAAwkAAAIJALECAQUQcmFuZEluZGV4TGlzdFN0cgAACQACAQISTWludCBub3QgYXZhaWxhYmxlBA1yYW5kSW5kZXhMaXN0CQC1CQIFEHJhbmRJbmRleExpc3RTdHICASwECnNvdXJjZUxpc3QJALUJAgUNc291cmNlTGlzdFN0cgIBLAQEcmFuZAkBD2dldFJhbmRvbU51bWJlcgQFDmdyb3VwQXZhaWxhYmxlCAUBaQ10cmFuc2FjdGlvbklkBQZoZWlnaHQAAAQJcmFuZEluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1yYW5kSW5kZXhMaXN0BQRyYW5kAhJJbnZhbGlkIHJhbmQgaW5kZXgJAJQKAgkAzggCBQtjb21tb25TdGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIGX2ltYWdlCQCRAwIFCnNvdXJjZUxpc3QFCXJhbmRJbmRleAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIGZ3JvdXBfBQ9ncm91cEFzc2V0SWRTdHICDl9yYW5kSW5kZXhMaXN0CQC5CQIJANEIAgUNcmFuZEluZGV4TGlzdAUEcmFuZAIBLAUDbmlsBQphc3NldElkU3RyCQCUCgIJAM4IAgULY29tbW9uU3RhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICBl9pbWFnZQULcHJldmlld0ZpbGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICCV9vcmlnaW5hbAUIb3JpZ0ZpbGUFA25pbAUKYXNzZXRJZFN0cgkAAgECEk1pbnQgbm90IGF2YWlsYWJsZQkAAgECFkludmFsaWQgTkZUIGlkZW50aWZpZXIJAAIBAhZJbnZhbGlkIGNhbGxlciBhZGRyZXNzCQACAQIMV3JvbmcgTkZUIElkAWkBB2J1cm5ORlQABAdhc3NldElkCQEFdmFsdWUBCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDAwkAAAIICQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAEJAQhjaGVja05GVAEFBWFzc2V0BwQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBAZpc3N1ZXIJAQx0cnlHZXRTdHJpbmcBCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIHX2lzc3VlcgQEZGF0YQkBDHRyeUdldFN0cmluZwEJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgVfZGF0YQQJcGFydHNEYXRhCQC1CQIFBGRhdGECAiwgBA9wYXJ0c0NvbGxlY3Rpb24JALUJAgkAkQMCBQlwYXJ0c0RhdGEAAAICOiAEEGNvbGxlY3Rpb25Eb21haW4JALMCAgkAsAICCQCRAwIFD3BhcnRzQ29sbGVjdGlvbgABAAEAAQQHaXNHcm91cAkBC3ZhbHVlT3JFbHNlAgkAoAgBCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIIX2lzR3JvdXAHAwkBASEBBQdpc0dyb3VwBAZuZnROdW0JAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICC2NvbGxlY3Rpb25fBRBjb2xsZWN0aW9uRG9tYWluAgVfc2l6ZQMJAGYCBQZuZnROdW0AAAQQdXBkYXRlQ29sbGVjdGlvbgMJAAACBQZuZnROdW0AAQkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICC2NvbGxlY3Rpb25fBRBjb2xsZWN0aW9uRG9tYWluAgVfc2l6ZQkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgtjb2xsZWN0aW9uXwUQY29sbGVjdGlvbkRvbWFpbgIFX3NpemUJAGUCBQZuZnROdW0AAQkAzAgCBRB1cGRhdGVDb2xsZWN0aW9uCQDMCAIJAQRCdXJuAgUHYXNzZXRJZAABCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgVfZGF0YQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIGX2ltYWdlCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAglfb3JpZ2luYWwJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICB19pc3N1ZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICCF9pc0dyb3VwCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgZncm91cF8FCmFzc2V0SWRTdHICBV9zaXplCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgZncm91cF8FCmFzc2V0SWRTdHICCl9hdmFpbGFibGUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBmdyb3VwXwUKYXNzZXRJZFN0cgIRX2NvbGxlY3Rpb25Eb21haW4JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FEGNvbGxlY3Rpb25Eb21haW4CCV9hc3NldElkXwUKYXNzZXRJZFN0cgUDbmlsCQACAQIWSXZhbGlkIGNvbGxlY3Rpb24gbmFtZQkAzAgCCQEEQnVybgIFB2Fzc2V0SWQAAQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIFX2RhdGEJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICBl9pbWFnZQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIJX29yaWdpbmFsCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAgdfaXNzdWVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBQphc3NldElkU3RyAghfaXNHcm91cAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIGZ3JvdXBfBQphc3NldElkU3RyAgVfc2l6ZQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIGZ3JvdXBfBQphc3NldElkU3RyAgpfYXZhaWxhYmxlCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgZncm91cF8FCmFzc2V0SWRTdHICEV9jb2xsZWN0aW9uRG9tYWluCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgZncm91cF8FCmFzc2V0SWRTdHICC19zb3VyY2VMaXN0CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgZncm91cF8FCmFzc2V0SWRTdHICDl9yYW5kSW5kZXhMaXN0BQNuaWwJAAIBAhNJdmFsaWQgTkZUIGF0dGFjaGVkAWkBDGVkaXRJbWFnZU5GVAICaWQLbmV3SW1hZ2VVcmwDCQAAAgkAzwgCBRBlZGl0b3JzV2hpdGVMaXN0CQClCAEIBQFpBmNhbGxlcgUEdW5pdAkAAgECF0VkaXRpbmcgTkZUcyBpcyBsaW1pdGVkAwkBAiE9AgkAswkCBQtuZXdJbWFnZVVybAIIaHR0cHM6Ly8AAAkAAgECHGh0dHBzIGxpbmsgdG8gaW1hZ2UgcmVxdWlyZWQEBWFzc2V0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQJpZAIOTkZUIG5vdCBmb3VkZWQECWFsZXhhbmRyYQkBB0FkZHJlc3MBARoBV3kzNKWWSa49fxnYw58/cJf/9NlZPGCRhwQNdHN1bmFtaUlzc3VlcgkBB0FkZHJlc3MBARoBV+rYzkzwGGpdiSkuJ2HgRKdeMHMz+1kJ/AMDCQAAAggFAWkGY2FsbGVyBQlhbGV4YW5kcmEJAQIhPQIIBQVhc3NldAZpc3N1ZXIFDXRzdW5hbWlJc3N1ZXIHCQACAQIUVXNlIG9ubHkgdHN1bmFtaSBORlQECmFzc2V0SWRTdHIJANgEAQgFBWFzc2V0AmlkBAlkYXRhRXhpc3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQCsAgIJAKwCAgIEbmZ0XwUKYXNzZXRJZFN0cgIFX2RhdGECE05GVCBkYXRhIG5vdCBmb3VkZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FCmFzc2V0SWRTdHICBl9pbWFnZQULbmV3SW1hZ2VVcmwFA25pbAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXmjjM3x", "height": 3416984, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: D9iEXJY3LDVaCXSdEFB14Eo9uGhCZGQuKURAfa2mo3Hi Next: 9EM4ot5dea7mAFFw46TTrZpZDPBdgrR2dx2buomoaLWA Diff:
OldNewDifferences
55
66 let issuersWhitelist = ["3P3iV85eXfkcA3Dd13EpZBYvs1vkKX6AYEN", "3PHFAavxj2ePJqFB46H2aRGA7oQL6kz1rJJ", "3P6peovAkVN3px6Zuv8y2noTWHFM4R5Wjj8", "3P5CQkvk8Pu6rGP3Qav4Lwskwa8pLhNwTbR", "3PHKDCQScvSPHvdCUeucFkx5Q1xMURA9kbr", "3PMki5sHBsQb4KgDknbUwsL3YgxaCzaZnCJ", "3P2wMCDjtxeLdfQrpR8WUe5zNeScM4UaL3o", "3P3pDosq4GCwfJkvq4yqKvvoTwmoqc9qPmo", "3PPgeYTWMRZ7S7jSLpnVuKKB9r6XuDk3ndC", "3PKVgd6ds1xervK6bPXbEHBqg8ibTcf5HZk", "3PD1sd55PYzmGUrQ896Qt3uvdbtgjCVpajE", "3PFkgvC9y6zHy64zEAscKKgaNY3yipiLqbW", "3PGGSiLuwGmm7ChfjDrmEZBd6HxQJn8N1NM", "3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD", "3P5bL6V4oGTZtMTirj9WxtbxUntqXdjevAE", "3PCyjqHhtq9f9Hmn4LNsWwA68dFVsvQ6iNi", "3PKHFX6W4aAr1e1b8MUTz5HmdWVUcjWhgY4", "3PJVkx7XRo86zU88shLuKGmbRr7RkMSxjHj", "3PLu7coMNV4naCxWkRemqga6o9zUhQppxsA", "3PGKEe4y59V3WLnHwPEUaMWdbzy8sb982fG", "3P5d8a1H2m2zFQakhaaow3uDE77UYLGd89v"]
77
8-let editorsWhiteList = ["3PGKEe4y59V3WLnHwPEUaMWdbzy8sb982fG", "3P7NhmDt31ekQ2JryxtmdgZ1DXgVPwyocJK"]
8+let editorsWhiteList = ["3PGKEe4y59V3WLnHwPEUaMWdbzy8sb982fG", "3P7NhmDt31ekQ2JryxtmdgZ1DXgVPwyocJK", "3PCyjqHhtq9f9Hmn4LNsWwA68dFVsvQ6iNi"]
99
1010 let nftUltraStakingWrapper = Address(base58'3PKVgd6ds1xervK6bPXbEHBqg8ibTcf5HZk')
1111
251251 then throw("https link to image required")
252252 else {
253253 let asset = valueOrErrorMessage(assetInfo(fromBase58String(id)), "NFT not fouded")
254- let assetIdStr = toBase58String(asset.id)
255- let dataExist = valueOrErrorMessage(getString((("nft_" + assetIdStr) + "_data")), "NFT data not fouded")
254+ let alexandra = Address(base58'3PCyjqHhtq9f9Hmn4LNsWwA68dFVsvQ6iNi')
255+ let tsunamiIssuer = Address(base58'3PPLea51cvcmmLAhMqT7r4VmarDMf7Y5iVH')
256+ if (if ((i.caller == alexandra))
257+ then (asset.issuer != tsunamiIssuer)
258+ else false)
259+ then throw("Use only tsunami NFT")
260+ else {
261+ let assetIdStr = toBase58String(asset.id)
262+ let dataExist = valueOrErrorMessage(getString((("nft_" + assetIdStr) + "_data")), "NFT data not fouded")
256263 [StringEntry((("nft_" + assetIdStr) + "_image"), newImageUrl)]
264+ }
257265 }
258266
259267
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let marketplaceContractAddress = Address(base58'3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc')
55
66 let issuersWhitelist = ["3P3iV85eXfkcA3Dd13EpZBYvs1vkKX6AYEN", "3PHFAavxj2ePJqFB46H2aRGA7oQL6kz1rJJ", "3P6peovAkVN3px6Zuv8y2noTWHFM4R5Wjj8", "3P5CQkvk8Pu6rGP3Qav4Lwskwa8pLhNwTbR", "3PHKDCQScvSPHvdCUeucFkx5Q1xMURA9kbr", "3PMki5sHBsQb4KgDknbUwsL3YgxaCzaZnCJ", "3P2wMCDjtxeLdfQrpR8WUe5zNeScM4UaL3o", "3P3pDosq4GCwfJkvq4yqKvvoTwmoqc9qPmo", "3PPgeYTWMRZ7S7jSLpnVuKKB9r6XuDk3ndC", "3PKVgd6ds1xervK6bPXbEHBqg8ibTcf5HZk", "3PD1sd55PYzmGUrQ896Qt3uvdbtgjCVpajE", "3PFkgvC9y6zHy64zEAscKKgaNY3yipiLqbW", "3PGGSiLuwGmm7ChfjDrmEZBd6HxQJn8N1NM", "3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD", "3P5bL6V4oGTZtMTirj9WxtbxUntqXdjevAE", "3PCyjqHhtq9f9Hmn4LNsWwA68dFVsvQ6iNi", "3PKHFX6W4aAr1e1b8MUTz5HmdWVUcjWhgY4", "3PJVkx7XRo86zU88shLuKGmbRr7RkMSxjHj", "3PLu7coMNV4naCxWkRemqga6o9zUhQppxsA", "3PGKEe4y59V3WLnHwPEUaMWdbzy8sb982fG", "3P5d8a1H2m2zFQakhaaow3uDE77UYLGd89v"]
77
8-let editorsWhiteList = ["3PGKEe4y59V3WLnHwPEUaMWdbzy8sb982fG", "3P7NhmDt31ekQ2JryxtmdgZ1DXgVPwyocJK"]
8+let editorsWhiteList = ["3PGKEe4y59V3WLnHwPEUaMWdbzy8sb982fG", "3P7NhmDt31ekQ2JryxtmdgZ1DXgVPwyocJK", "3PCyjqHhtq9f9Hmn4LNsWwA68dFVsvQ6iNi"]
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) = {
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)
136136 $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(randIndexList, ",")) != amount))
146146 then throw("random list is not equal to the number of available elements")
147147 else [StringEntry((("group_" + assetIdStr) + "_sourceList"), sourceList), StringEntry((("group_" + assetIdStr) + "_randIndexList"), randIndexList)]
148148 else if (if (if ((size(randIndexList) > 0))
149149 then (size(sourceList) == 0)
150150 else false)
151151 then true
152152 else if ((size(randIndexList) == 0))
153153 then (size(sourceList) > 0)
154154 else false)
155155 then throw("the list of resources or random sequence is not filled")
156156 else nil
157157 $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)
158158 }
159159 else throw(("When creating a multiple collection, the number must be greater than 1 and less or equal " + toString(LIMIT_MINT_COPIES)))
160160 else throw("Wrong amount argument")
161161 }
162162 }
163163
164164
165165
166166 @Callable(i)
167167 func mintFromGroup (groupAssetIdStr) = {
168168 let groupAsset = value(assetInfo(fromBase58String(groupAssetIdStr)))
169169 if (checkNFT(groupAsset))
170170 then if ((i.caller == marketplaceContractAddress))
171171 then {
172172 let isGroup = valueOrElse(getBoolean((("nft_" + groupAssetIdStr) + "_isGroup")), false)
173173 if (isGroup)
174174 then {
175175 let groupSize = valueOrElse(getInteger((("group_" + groupAssetIdStr) + "_size")), 0)
176176 let groupAvailable = valueOrElse(getInteger((("group_" + groupAssetIdStr) + "_available")), 0)
177177 if (if ((groupAvailable > 0))
178178 then (groupSize > 0)
179179 else false)
180180 then {
181181 let collectionDomain = value(getString((("group_" + groupAssetIdStr) + "_collectionDomain")))
182182 let origFile = value(getString((("nft_" + groupAssetIdStr) + "_original")))
183183 let previewFile = value(getString((("nft_" + groupAssetIdStr) + "_image")))
184184 let nftNum = (tryGetInteger((("collection_" + collectionDomain) + "_size")) + 1)
185185 let asset = Issue(groupAsset.name, groupAsset.description, 1, 0, false, unit, 0)
186186 let assetId = calculateAssetId(asset)
187187 let assetIdStr = toBase58String(assetId)
188188 let randIndexListStr = valueOrElse(getString((("group_" + groupAssetIdStr) + "_randIndexList")), "")
189189 let sourceListStr = valueOrElse(getString((("group_" + groupAssetIdStr) + "_sourceList")), "")
190190 let commonState = [StringEntry((("nft_" + assetIdStr) + "_data"), (((("{'collection': '" + collectionDomain) + "', 'num': ") + toString(nftNum)) + "}")), StringEntry((("nft_" + assetIdStr) + "_issuer"), toString(i.caller)), IntegerEntry((("collection_" + collectionDomain) + "_size"), nftNum), StringEntry(((("collection_" + collectionDomain) + "_assetId_") + assetIdStr), assetIdStr), IntegerEntry((("group_" + groupAssetIdStr) + "_available"), (groupAvailable - 1)), asset, ScriptTransfer(i.caller, 1, assetId)]
191191 if ((size(sourceListStr) > 0))
192192 then if ((size(randIndexListStr) == 0))
193193 then throw("Mint not available")
194194 else {
195195 let randIndexList = split(randIndexListStr, ",")
196196 let sourceList = split(sourceListStr, ",")
197197 let rand = getRandomNumber(groupAvailable, i.transactionId, height, 0)
198198 let randIndex = valueOrErrorMessage(parseInt(randIndexList[rand]), "Invalid rand index")
199199 $Tuple2((commonState ++ [StringEntry((("nft_" + assetIdStr) + "_image"), sourceList[randIndex]), StringEntry((("group_" + groupAssetIdStr) + "_randIndexList"), makeString(removeByIndex(randIndexList, rand), ","))]), assetIdStr)
200200 }
201201 else $Tuple2((commonState ++ [StringEntry((("nft_" + assetIdStr) + "_image"), previewFile), StringEntry((("nft_" + assetIdStr) + "_original"), origFile)]), assetIdStr)
202202 }
203203 else throw("Mint not available")
204204 }
205205 else throw("Invalid NFT identifier")
206206 }
207207 else throw("Invalid caller address")
208208 else throw("Wrong NFT Id")
209209 }
210210
211211
212212
213213 @Callable(i)
214214 func burnNFT () = {
215215 let assetId = value(value(i.payments[0]).assetId)
216216 let asset = value(assetInfo(assetId))
217217 if (if ((value(i.payments[0]).amount == 1))
218218 then checkNFT(asset)
219219 else false)
220220 then {
221221 let assetIdStr = toBase58String(assetId)
222222 let issuer = tryGetString((("nft_" + assetIdStr) + "_issuer"))
223223 let data = tryGetString((("nft_" + assetIdStr) + "_data"))
224224 let partsData = split(data, ", ")
225225 let partsCollection = split(partsData[0], ": ")
226226 let collectionDomain = dropRight(drop(partsCollection[1], 1), 1)
227227 let isGroup = valueOrElse(getBoolean((("nft_" + assetIdStr) + "_isGroup")), false)
228228 if (!(isGroup))
229229 then {
230230 let nftNum = tryGetInteger((("collection_" + collectionDomain) + "_size"))
231231 if ((nftNum > 0))
232232 then {
233233 let updateCollection = if ((nftNum == 1))
234234 then DeleteEntry((("collection_" + collectionDomain) + "_size"))
235235 else IntegerEntry((("collection_" + collectionDomain) + "_size"), (nftNum - 1))
236236 [updateCollection, 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(((("collection_" + collectionDomain) + "_assetId_") + assetIdStr))]
237237 }
238238 else throw("Ivalid collection name")
239239 }
240240 else [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"))]
241241 }
242242 else throw("Ivalid NFT attached")
243243 }
244244
245245
246246
247247 @Callable(i)
248248 func editImageNFT (id,newImageUrl) = if ((indexOf(editorsWhiteList, toString(i.caller)) == unit))
249249 then throw("Editing NFTs is limited")
250250 else if ((indexOf(newImageUrl, "https://") != 0))
251251 then throw("https link to image required")
252252 else {
253253 let asset = valueOrErrorMessage(assetInfo(fromBase58String(id)), "NFT not fouded")
254- let assetIdStr = toBase58String(asset.id)
255- let dataExist = valueOrErrorMessage(getString((("nft_" + assetIdStr) + "_data")), "NFT data not fouded")
254+ let alexandra = Address(base58'3PCyjqHhtq9f9Hmn4LNsWwA68dFVsvQ6iNi')
255+ let tsunamiIssuer = Address(base58'3PPLea51cvcmmLAhMqT7r4VmarDMf7Y5iVH')
256+ if (if ((i.caller == alexandra))
257+ then (asset.issuer != tsunamiIssuer)
258+ else false)
259+ then throw("Use only tsunami NFT")
260+ else {
261+ let assetIdStr = toBase58String(asset.id)
262+ let dataExist = valueOrErrorMessage(getString((("nft_" + assetIdStr) + "_data")), "NFT data not fouded")
256263 [StringEntry((("nft_" + assetIdStr) + "_image"), newImageUrl)]
264+ }
257265 }
258266
259267
260268 @Verifier(tx)
261269 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
262270

github/deemru/w8io/3ef1775 
276.78 ms