tx · 4q4iaH37rXyK24Nbm6i4tF7bhhVfKwBKoSbhkBx5vxMA

3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A:  -0.01000000 Waves

2022.12.31 13:01 [3449792] smart account 3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A > SELF 0.00000000 Waves

{ "type": 13, "id": "4q4iaH37rXyK24Nbm6i4tF7bhhVfKwBKoSbhkBx5vxMA", "fee": 1000000, "feeAssetId": null, "timestamp": 1672480888421, "version": 2, "chainId": 87, "sender": "3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A", "senderPublicKey": "A96wNJF8YTgx1J9Q4nK3oqNoExh6dPSyFAdEkmzN7XDa", "proofs": [ "3V1qV4C1Pbw194RYRZ3bJDwh76yt6kh6RQZo6Y3kdQ6aqSBeqUQ7eWi9ti2ssPaYGmYXGUk4TH72u8b4b9oZycaX" ], "script": "base64:BgIVCAISBQoDAQgIEgMKAQgSABIDCgEIGgASbmZ0Q3JlYXRpb25BZGRyZXNzARoBV5PdxNIX5yAK/fchEk7w8HZnJoMDeNRcTAARZWFnbGVCdXllckFkZHJlc3MBGgFXOlFhR4ekF3ncYJWgtmbLPN4lL64w7/v2ABlzaWduQXJ0TmZ0Q3JlYXRpb25BZGRyZXNzARoBV3tk1VvWnhe5qtPmj/wDXMjEFvibuoYp4gAObmZ0RHVja1dyYXBwZXIBGgFXFK1EUpul/f9hF//YOufxZ4qAnBS4L88eABFuZnRTaWduQXJ0V3JhcHBlcgEaAVfuoRoVw/G2X0Rl/1/IFTnEeUXVGEVHMAcAFm5mdFVsdHJhU3Rha2luZ1dyYXBwZXIBGgFXwK3CbTLNka+lV0XYh/JTwVqOyL0misoLABRuZnRXYXZlc1B1bmtzV3JhcHBlcgEaAVd5moowGgnVnajKJ2gj2RvVoec0kMbogy0AFG5mdFdhdmVzTGFuZHNXcmFwcGVyARoBV3P7lvq2A+DsHJ59ULYOpvcQd/BBgIBaBgAQaW5jdWJhdG9yQWRkcmVzcwEaAVeMtUiffp4V1RiXjht3+wl/Z2La4W1jJUkADmJyZWVkZXJBZGRyZXNzARoBV37nuflxxEx4XH14e4ZxgkMVpnlqD7YfHgAabWFya2V0cGxhY2VDb250cmFjdEFkZHJlc3MBGgFXXYvxX8soIGsfZqPIbtoLqJftD+j9yUTxABN6b21iaWVJc3N1ZXJBZGRyZXNzCQEHQWRkcmVzcwEBGgFXPCJrb4M8vOfQ2wBTO7F4j48kEea4E66TABJwdW5rc0lzc3VlckFkZHJlc3MJAQdBZGRyZXNzAQEaAVdL7E+N6trSBKdJcVFRWraSu0HUX4XC7GgAE2FsaWVuc0lzc3VlckFkZHJlc3MJAQdBZGRyZXNzAQEaAVdry0+k26a6aqg1+8p1EXR1zqjPhy4X0hgAFW1hZFB1bmtzSXNzdWVyQWRkcmVzcwkBB0FkZHJlc3MBARoBV7YVkAcYYmCX66dIlynyqzXNfuQCqg2G2QAWbWFkUHVua3MySXNzdWVyQWRkcmVzcwkBB0FkZHJlc3MBARoBV0ZNahDUFfD9r3USTGD3gDwr+HZkIHELBQAPd2xJc3N1ZXJBZGRyZXNzCQEHQWRkcmVzcwEBGgFXztmK5zoMBJMhvzzn9a1idLTYqEfhLTqoAQ9pZldhdmVzTGFuZHNORlQBBWFzc2V0AwMDCQAAAggFBWFzc2V0Bmlzc3VlcgUPd2xJc3N1ZXJBZGRyZXNzCQAAAggFBWFzc2V0CGRlY2ltYWxzAAAHCQAAAggFBWFzc2V0CnJlaXNzdWFibGUHBwkAAAIIBQVhc3NldAhxdWFudGl0eQABBwEMaWZTaWduQXJ0TmZ0AQVhc3NldAMDAwkAAAIICAUFYXNzZXQGaXNzdWVyBWJ5dGVzBRlzaWduQXJ0TmZ0Q3JlYXRpb25BZGRyZXNzCQAAAggFBWFzc2V0CGRlY2ltYWxzAAAHCQAAAggFBWFzc2V0CnJlaXNzdWFibGUHBwkAAAIIBQVhc3NldAhxdWFudGl0eQABBwEJaWZEdWNrTmZ0AQVhc3NldAMDAwMJAAACCAgFBWFzc2V0Bmlzc3VlcgVieXRlcwUQaW5jdWJhdG9yQWRkcmVzcwYJAAACCAgFBWFzc2V0Bmlzc3VlcgVieXRlcwUOYnJlZWRlckFkZHJlc3MJAAACCAUFYXNzZXQIZGVjaW1hbHMAAAcJAAACCAUFYXNzZXQKcmVpc3N1YWJsZQcHCQAAAggFBWFzc2V0CHF1YW50aXR5AAEHAQ9pZldhdmVzUHVua3NOZnQBBWFzc2V0AwMDCQBnAgkBC3ZhbHVlT3JFbHNlAgkAzwgCCQDMCAIFE3pvbWJpZUlzc3VlckFkZHJlc3MJAMwIAgUScHVua3NJc3N1ZXJBZGRyZXNzCQDMCAIFE2FsaWVuc0lzc3VlckFkZHJlc3MJAMwIAgUVbWFkUHVua3NJc3N1ZXJBZGRyZXNzCQDMCAIFFm1hZFB1bmtzMklzc3VlckFkZHJlc3MFA25pbAgFBWFzc2V0Bmlzc3VlcgD///////////8BAAAJAAACCAUFYXNzZXQIZGVjaW1hbHMAAAcJAAACCAUFYXNzZXQKcmVpc3N1YWJsZQcHCQAAAggFBWFzc2V0CHF1YW50aXR5AAEHARFpZlVsdHJhU3Rha2luZ05mdAEFYXNzZXQECmlzRWFnbGVORlQEByRtYXRjaDAJAJ0IAgkBB0FkZHJlc3MBBRFlYWdsZUJ1eWVyQWRkcmVzcwkArAICCQCsAgICBGFydF8JANgEAQgFBWFzc2V0AmlkAgVfdHlwZQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAAACBQFzAgVlYWdsZQcECWlzQW5pYU5GVAQHJG1hdGNoMAkAnQgCCQEHQWRkcmVzcwEFEm5mdENyZWF0aW9uQWRkcmVzcwkArAICCQCsAgICBG5mdF8JANgEAQgFBWFzc2V0AmlkAgdfaXNzdWVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAMJAAACBQFzAiMzUE1raTVzSEJzUWI0S2dEa25iVXdzTDNZZ3hhQ3phWm5DSgkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUCDEJvcmVkIEFuaWEgIwcHAwUKaXNFYWdsZU5GVAYFCWlzQW5pYU5GVAEUaXNOZnRGcm9tTWFya2V0cGxhY2UBBWFzc2V0AwMDCQAAAggIBQVhc3NldAZpc3N1ZXIFYnl0ZXMFEm5mdENyZWF0aW9uQWRkcmVzcwkAAAIIBQVhc3NldAhkZWNpbWFscwAABwkAAAIIBQVhc3NldApyZWlzc3VhYmxlBwcJAAACCAUFYXNzZXQIcXVhbnRpdHkAAQcBEWdldEFkZHJlc3NGb3JXcmFwAQVhc3NldAMJARFpZlVsdHJhU3Rha2luZ05mdAEFBWFzc2V0CQEHQWRkcmVzcwEFFm5mdFVsdHJhU3Rha2luZ1dyYXBwZXIDCQEPaWZXYXZlc1B1bmtzTmZ0AQUFYXNzZXQJAQdBZGRyZXNzAQUUbmZ0V2F2ZXNQdW5rc1dyYXBwZXIDCQEMaWZTaWduQXJ0TmZ0AQUFYXNzZXQJAQdBZGRyZXNzAQURbmZ0U2lnbkFydFdyYXBwZXIDCQEJaWZEdWNrTmZ0AQUFYXNzZXQJAQdBZGRyZXNzAQUObmZ0RHVja1dyYXBwZXIDCQEPaWZXYXZlc0xhbmRzTkZUAQUFYXNzZXQJAQdBZGRyZXNzAQUUbmZ0V2F2ZXNMYW5kc1dyYXBwZXIFBHVuaXQBE2dldEFkZHJlc3NGb3JVbndyYXABBm5mdFN0cgQJaXNTaWduQXJ0BAckbWF0Y2gwCQCdCAIJAQdBZGRyZXNzAQURbmZ0U2lnbkFydFdyYXBwZXIJAKwCAgkArAICAgtzaWduQXJ0TmZ0XwUGbmZ0U3RyAghfYXNzZXRJZAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAGYCCQCxAgEFAXMAAAcEBmlzRHVjawQHJG1hdGNoMAkAnQgCCQEHQWRkcmVzcwEFDm5mdER1Y2tXcmFwcGVyCQCsAgIJAKwCAgIEbmZ0XwUGbmZ0U3RyAgdfZHVja0lkAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkAZgIJALECAQUBcwAABwQOaXNVbHRyYVN0YWtpbmcEByRtYXRjaDAJAJ0IAgkBB0FkZHJlc3MBBRZuZnRVbHRyYVN0YWtpbmdXcmFwcGVyCQCsAgIJAKwCAgIEbmZ0XwUGbmZ0U3RyAghfYXNzZXRJZAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAGYCCQCxAgEFAXMAAAcEDGlzV2F2ZXNQdW5rcwQHJG1hdGNoMAkAnQgCCQEHQWRkcmVzcwEFFG5mdFdhdmVzUHVua3NXcmFwcGVyCQCsAgIJAKwCAgIEbmZ0XwUGbmZ0U3RyAghfYXNzZXRJZAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAGYCCQCxAgEFAXMAAAcEDGlzV2F2ZXNMYW5kcwQHJG1hdGNoMAkAnQgCCQEHQWRkcmVzcwEFFG5mdFdhdmVzTGFuZHNXcmFwcGVyCQCsAgIJAKwCAgIEbmZ0XwUGbmZ0U3RyAghfYXNzZXRJZAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAGYCCQCxAgEFAXMAAAcDBQ5pc1VsdHJhU3Rha2luZwkBB0FkZHJlc3MBBRZuZnRVbHRyYVN0YWtpbmdXcmFwcGVyAwUMaXNXYXZlc1B1bmtzCQEHQWRkcmVzcwEFFG5mdFdhdmVzUHVua3NXcmFwcGVyAwUJaXNTaWduQXJ0CQEHQWRkcmVzcwEFEW5mdFNpZ25BcnRXcmFwcGVyAwUGaXNEdWNrCQEHQWRkcmVzcwEFDm5mdER1Y2tXcmFwcGVyAwUMaXNXYXZlc0xhbmRzCQEHQWRkcmVzcwEFFG5mdFdhdmVzTGFuZHNXcmFwcGVyBQR1bml0AQljaGVja0NhbGwBAWkDCQECIT0CCAUBaQZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgkAAgECJ0NhbGwgZnJvbSBhbm90aGVyIGNvbnRyYWN0IGlzIGZvcmJpZGRlbgYEAWkBDmxvY2tBbmRTZWxsTkZUAwtidXlPdXRQcmljZQ1idXlPdXRBc3NldElkDXNlbGxlckNvbW1lbnQEC2lzVmFsaWRDYWxsCQEJY2hlY2tDYWxsAQUBaQQHYXNzZXRJZAkBBXZhbHVlAQgJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAt3cmFwQWRkcmVzcwkBEWdldEFkZHJlc3NGb3JXcmFwAQUFYXNzZXQEDnN0YWtlZE5GVElkU3RyAwkBCWlzRGVmaW5lZAEFC3dyYXBBZGRyZXNzBAxsb2NrZWROZnRTdHIEByRtYXRjaDAJAPwHBAkBBXZhbHVlAQULd3JhcEFkZHJlc3MCBGxvY2sFA25pbAkAzAgCCQCRAwIIBQFpCHBheW1lbnRzAAAFA25pbAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBCQCsAgICKVNvbXRoaW5nIHdyb25nIHdoZW4gbG9jayBORlQgaW4gYWRkcmVzczogCQDYBAEICQEFdmFsdWUBBQt3cmFwQWRkcmVzcwVieXRlcwMJAAACBQxsb2NrZWROZnRTdHIFDGxvY2tlZE5mdFN0cgUMbG9ja2VkTmZ0U3RyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDYBAEIBQVhc3NldAJpZAMDBQtpc1ZhbGlkQ2FsbAkAZgIJALECAQUOc3Rha2VkTkZUSWRTdHIAAAcEA2ludgkA/AcECQEHQWRkcmVzcwEFGm1hcmtldHBsYWNlQ29udHJhY3RBZGRyZXNzAgdzZWxsTkZUCQDMCAIFC2J1eU91dFByaWNlCQDMCAIFDWJ1eU91dEFzc2V0SWQJAMwIAgUNc2VsbGVyQ29tbWVudAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEFDnN0YWtlZE5GVElkU3RyAAEFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIaVGhlIGNyZWF0ZWQgTkZUIGlzIGludmFsaWQBaQETY2FuY2VsU2VsbEFuZFVubG9jawEFbmZ0SWQEC2lzVmFsaWRDYWxsCQEJY2hlY2tDYWxsAQUBaQQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQVuZnRJZAQLd3JhcEFkZHJlc3MJARNnZXRBZGRyZXNzRm9yVW53cmFwAQUFbmZ0SWQDAwULaXNWYWxpZENhbGwJARRpc05mdEZyb21NYXJrZXRwbGFjZQEFBWFzc2V0BwQOY2FuY2VsZWROZnRTdHIEByRtYXRjaDAJAPwHBAkBB0FkZHJlc3MBBRptYXJrZXRwbGFjZUNvbnRyYWN0QWRkcmVzcwIKY2FuY2VsU2VsbAkAzAgCBQVuZnRJZAUDbmlsBQNuaWwDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIjU29tdGhpbmcgd3Jvbmcgd2hlbiBjYW5jZWwgc2VsbCBORlQDCQAAAgUOY2FuY2VsZWROZnRTdHIFDmNhbmNlbGVkTmZ0U3RyAwkBCWlzRGVmaW5lZAEFC3dyYXBBZGRyZXNzBA51bmxvY2tlZE5mdFN0cgQHJG1hdGNoMAkA/AcECQEFdmFsdWUBBQt3cmFwQWRkcmVzcwIGdW5sb2NrBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIIBQVhc3NldAJpZAABBQNuaWwDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQkArAICAitTb210aGluZyB3cm9uZyB3aGVuIHVubG9jayBORlQgaW4gYWRkcmVzczogCQDYBAEICQEFdmFsdWUBBQt3cmFwQWRkcmVzcwVieXRlcwMJAAACBQ51bmxvY2tlZE5mdFN0cgUOdW5sb2NrZWROZnRTdHIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQUOdW5sb2NrZWROZnRTdHIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQ5jYW5jZWxlZE5mdFN0cgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQITSXZhbGlkIE5GVCBhdHRhY2hlZAFpAQZ1bmxvY2sABAtpc1ZhbGlkQ2FsbAkBCWNoZWNrQ2FsbAEFAWkEBWFzc2V0CQEFdmFsdWUBCQDsBwEJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAMDAwULaXNWYWxpZENhbGwJARRpc05mdEZyb21NYXJrZXRwbGFjZQEFBWFzc2V0BwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAEHBAphc3NldElkU3RyCQDYBAEIBQVhc3NldAJpZAQLd3JhcEFkZHJlc3MJARNnZXRBZGRyZXNzRm9yVW53cmFwAQUKYXNzZXRJZFN0cgMJAQlpc0RlZmluZWQBBQt3cmFwQWRkcmVzcwQOdW5sb2NrZWROZnRTdHIEByRtYXRjaDAJAPwHBAkBBXZhbHVlAQULd3JhcEFkZHJlc3MCBnVubG9jawUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCAUFYXNzZXQCaWQAAQUDbmlsAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgEJAKwCAgIrU29tdGhpbmcgd3Jvbmcgd2hlbiB1bmxvY2sgTkZUIGluIGFkZHJlc3M6IAkA2AQBCAkBBXZhbHVlAQULd3JhcEFkZHJlc3MFYnl0ZXMDCQAAAgUOdW5sb2NrZWROZnRTdHIFDnVubG9ja2VkTmZ0U3RyCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQUOdW5sb2NrZWROZnRTdHIFA25pbAUOdW5sb2NrZWROZnRTdHIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQgFBWFzc2V0AmlkBQNuaWwJANgEAQgFBWFzc2V0AmlkCQACAQITSXZhbGlkIE5GVCBhdHRhY2hlZAFpAQNidXkBBW5mdElkBAtpc1ZhbGlkQ2FsbAkBCWNoZWNrQ2FsbAEFAWkECWJvdWdodE5mdAQHJG1hdGNoMAkA/AcECQEHQWRkcmVzcwEFGm1hcmtldHBsYWNlQ29udHJhY3RBZGRyZXNzAgZidXlORlQJAMwIAgUFbmZ0SWQFA25pbAgFAWkIcGF5bWVudHMDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIbU29tdGhpbmcgd3Jvbmcgd2hlbiBidXkgTkZUAwkAAAIFCWJvdWdodE5mdAUJYm91Z2h0TmZ0BAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFCWJvdWdodE5mdAMDAwULaXNWYWxpZENhbGwJAGYCCQCxAgEFCWJvdWdodE5mdAAABwkBFGlzTmZ0RnJvbU1hcmtldHBsYWNlAQUFYXNzZXQHBAt3cmFwQWRkcmVzcwkBE2dldEFkZHJlc3NGb3JVbndyYXABBQVuZnRJZAMJAQlpc0RlZmluZWQBBQt3cmFwQWRkcmVzcwQOdW5sb2NrZWROZnRTdHIEByRtYXRjaDAJAPwHBAkBBXZhbHVlAQULd3JhcEFkZHJlc3MCBnVubG9jawUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCAUFYXNzZXQCaWQAAQUDbmlsAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgEJAKwCAgIrU29tdGhpbmcgd3Jvbmcgd2hlbiB1bmxvY2sgTkZUIGluIGFkZHJlc3M6IAkA2AQBCAkBBXZhbHVlAQULd3JhcEFkZHJlc3MFYnl0ZXMDCQAAAgUOdW5sb2NrZWROZnRTdHIFDnVubG9ja2VkTmZ0U3RyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFDnVubG9ja2VkTmZ0U3RyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQUJYm91Z2h0TmZ0BQNuaWwJAAIBAhFJdmFsaWQgYm91Z2h0IE5GVAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXk0fhnD", "height": 3449792, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: JUffBCBPyRN5SGKM4omW3Tz6eaeaKP5LtSuiH7cvW2y Next: H5K9gmGNazEoWU2VmzSsjmFb7FdQ9u73nSjQ6vs1U8zN Diff:
OldNewDifferences
161161 }
162162
163163
164+func checkCall (i) = if ((i.caller != i.originCaller))
165+ then throw("Call from another contract is forbidden")
166+ else true
167+
168+
164169 @Callable(i)
165170 func lockAndSellNFT (buyOutPrice,buyOutAssetId,sellerComment) = {
171+ let isValidCall = checkCall(i)
166172 let assetId = value(value(i.payments[0]).assetId)
167173 let asset = value(assetInfo(assetId))
168174 let wrapAddress = getAddressForWrap(asset)
179185 else throw("Strict value is not equal to itself.")
180186 }
181187 else toBase58String(asset.id)
182- if ((size(stakedNFTIdStr) > 0))
188+ if (if (isValidCall)
189+ then (size(stakedNFTIdStr) > 0)
190+ else false)
183191 then {
184192 let inv = invoke(Address(marketplaceContractAddress), "sellNFT", [buyOutPrice, buyOutAssetId, sellerComment], [AttachedPayment(fromBase58String(stakedNFTIdStr), 1)])
185193 if ((inv == inv))
193201
194202 @Callable(i)
195203 func cancelSellAndUnlock (nftId) = {
204+ let isValidCall = checkCall(i)
196205 let asset = value(assetInfo(fromBase58String(nftId)))
197206 let wrapAddress = getAddressForUnwrap(nftId)
198- if (isNftFromMarketplace(asset))
207+ if (if (isValidCall)
208+ then isNftFromMarketplace(asset)
209+ else false)
199210 then {
200211 let canceledNftStr = match invoke(Address(marketplaceContractAddress), "cancelSell", [nftId], nil) {
201212 case s: String =>
226237
227238 @Callable(i)
228239 func unlock () = {
240+ let isValidCall = checkCall(i)
229241 let asset = value(assetInfo(value(i.payments[0].assetId)))
230- if (if (isNftFromMarketplace(asset))
242+ if (if (if (isValidCall)
243+ then isNftFromMarketplace(asset)
244+ else false)
231245 then (i.payments[0].amount == 1)
232246 else false)
233247 then {
254268
255269 @Callable(i)
256270 func buy (nftId) = {
271+ let isValidCall = checkCall(i)
257272 let boughtNft = match invoke(Address(marketplaceContractAddress), "buyNFT", [nftId], i.payments) {
258273 case s: String =>
259274 s
263278 if ((boughtNft == boughtNft))
264279 then {
265280 let asset = value(assetInfo(fromBase58String(boughtNft)))
266- if (if ((size(boughtNft) > 0))
281+ if (if (if (isValidCall)
282+ then (size(boughtNft) > 0)
283+ else false)
267284 then isNftFromMarketplace(asset)
268285 else false)
269286 then {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let nftCreationAddress = base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By'
55
66 let eagleBuyerAddress = base58'3P7FFQkgALLZDJpCf3smY517wjgPMswGoRP'
77
88 let signArtNftCreationAddress = base58'3PDBLdsUrcsiPxNbt8g2gQVoefKgzt3kJzV'
99
1010 let nftDuckWrapper = base58'3P3pDosq4GCwfJkvq4yqKvvoTwmoqc9qPmo'
1111
1212 let nftSignArtWrapper = base58'3PPgeYTWMRZ7S7jSLpnVuKKB9r6XuDk3ndC'
1313
1414 let nftUltraStakingWrapper = base58'3PKVgd6ds1xervK6bPXbEHBqg8ibTcf5HZk'
1515
1616 let nftWavesPunksWrapper = base58'3PD1sd55PYzmGUrQ896Qt3uvdbtgjCVpajE'
1717
1818 let nftWavesLandsWrapper = base58'3PCW9q51iwFiaDZB8SSRgc7jqjYgTgQy5T3'
1919
2020 let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv'
2121
2222 let breederAddress = base58'3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb'
2323
2424 let marketplaceContractAddress = base58'3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc'
2525
2626 let zombieIssuerAddress = Address(base58'3P7QrWH1ETLfKAJcFHYPJmQusNbDuW98Hop')
2727
2828 let punksIssuerAddress = Address(base58'3P8rLVnwrTf4k5AB3emuduhZZb1yKcitTHy')
2929
3030 let aliensIssuerAddress = Address(base58'3PBkrb5LrGDvCwkx4VHZzZkqMNvvGqrJJWj')
3131
3232 let madPunksIssuerAddress = Address(base58'3PJXfYMavRVzBDXqsFfwkLdEV7yuF5RToya')
3333
3434 let madPunks2IssuerAddress = Address(base58'3P8LcmWrr9SFrxwheZQENov5fPHEWtiwroN')
3535
3636 let wlIssuerAddress = Address(base58'3PLncXtS1U83D6cQbFD3H8rBHPLgzxSFKZ1')
3737
3838 func ifWavesLandsNFT (asset) = if (if (if ((asset.issuer == wlIssuerAddress))
3939 then (asset.decimals == 0)
4040 else false)
4141 then (asset.reissuable == false)
4242 else false)
4343 then (asset.quantity == 1)
4444 else false
4545
4646
4747 func ifSignArtNft (asset) = if (if (if ((asset.issuer.bytes == signArtNftCreationAddress))
4848 then (asset.decimals == 0)
4949 else false)
5050 then (asset.reissuable == false)
5151 else false)
5252 then (asset.quantity == 1)
5353 else false
5454
5555
5656 func ifDuckNft (asset) = if (if (if (if ((asset.issuer.bytes == incubatorAddress))
5757 then true
5858 else (asset.issuer.bytes == breederAddress))
5959 then (asset.decimals == 0)
6060 else false)
6161 then (asset.reissuable == false)
6262 else false)
6363 then (asset.quantity == 1)
6464 else false
6565
6666
6767 func ifWavesPunksNft (asset) = if (if (if ((valueOrElse(indexOf([zombieIssuerAddress, punksIssuerAddress, aliensIssuerAddress, madPunksIssuerAddress, madPunks2IssuerAddress], asset.issuer), -1) >= 0))
6868 then (asset.decimals == 0)
6969 else false)
7070 then (asset.reissuable == false)
7171 else false)
7272 then (asset.quantity == 1)
7373 else false
7474
7575
7676 func ifUltraStakingNft (asset) = {
7777 let isEagleNFT = match getString(Address(eagleBuyerAddress), (("art_" + toBase58String(asset.id)) + "_type")) {
7878 case s: String =>
7979 (s == "eagle")
8080 case _ =>
8181 false
8282 }
8383 let isAniaNFT = match getString(Address(nftCreationAddress), (("nft_" + toBase58String(asset.id)) + "_issuer")) {
8484 case s: String =>
8585 if ((s == "3PMki5sHBsQb4KgDknbUwsL3YgxaCzaZnCJ"))
8686 then contains(asset.name, "Bored Ania #")
8787 else false
8888 case _ =>
8989 false
9090 }
9191 if (isEagleNFT)
9292 then true
9393 else isAniaNFT
9494 }
9595
9696
9797 func isNftFromMarketplace (asset) = if (if (if ((asset.issuer.bytes == nftCreationAddress))
9898 then (asset.decimals == 0)
9999 else false)
100100 then (asset.reissuable == false)
101101 else false)
102102 then (asset.quantity == 1)
103103 else false
104104
105105
106106 func getAddressForWrap (asset) = if (ifUltraStakingNft(asset))
107107 then Address(nftUltraStakingWrapper)
108108 else if (ifWavesPunksNft(asset))
109109 then Address(nftWavesPunksWrapper)
110110 else if (ifSignArtNft(asset))
111111 then Address(nftSignArtWrapper)
112112 else if (ifDuckNft(asset))
113113 then Address(nftDuckWrapper)
114114 else if (ifWavesLandsNFT(asset))
115115 then Address(nftWavesLandsWrapper)
116116 else unit
117117
118118
119119 func getAddressForUnwrap (nftStr) = {
120120 let isSignArt = match getString(Address(nftSignArtWrapper), (("signArtNft_" + nftStr) + "_assetId")) {
121121 case s: String =>
122122 (size(s) > 0)
123123 case _ =>
124124 false
125125 }
126126 let isDuck = match getString(Address(nftDuckWrapper), (("nft_" + nftStr) + "_duckId")) {
127127 case s: String =>
128128 (size(s) > 0)
129129 case _ =>
130130 false
131131 }
132132 let isUltraStaking = match getString(Address(nftUltraStakingWrapper), (("nft_" + nftStr) + "_assetId")) {
133133 case s: String =>
134134 (size(s) > 0)
135135 case _ =>
136136 false
137137 }
138138 let isWavesPunks = match getString(Address(nftWavesPunksWrapper), (("nft_" + nftStr) + "_assetId")) {
139139 case s: String =>
140140 (size(s) > 0)
141141 case _ =>
142142 false
143143 }
144144 let isWavesLands = match getString(Address(nftWavesLandsWrapper), (("nft_" + nftStr) + "_assetId")) {
145145 case s: String =>
146146 (size(s) > 0)
147147 case _ =>
148148 false
149149 }
150150 if (isUltraStaking)
151151 then Address(nftUltraStakingWrapper)
152152 else if (isWavesPunks)
153153 then Address(nftWavesPunksWrapper)
154154 else if (isSignArt)
155155 then Address(nftSignArtWrapper)
156156 else if (isDuck)
157157 then Address(nftDuckWrapper)
158158 else if (isWavesLands)
159159 then Address(nftWavesLandsWrapper)
160160 else unit
161161 }
162162
163163
164+func checkCall (i) = if ((i.caller != i.originCaller))
165+ then throw("Call from another contract is forbidden")
166+ else true
167+
168+
164169 @Callable(i)
165170 func lockAndSellNFT (buyOutPrice,buyOutAssetId,sellerComment) = {
171+ let isValidCall = checkCall(i)
166172 let assetId = value(value(i.payments[0]).assetId)
167173 let asset = value(assetInfo(assetId))
168174 let wrapAddress = getAddressForWrap(asset)
169175 let stakedNFTIdStr = if (isDefined(wrapAddress))
170176 then {
171177 let lockedNftStr = match invoke(value(wrapAddress), "lock", nil, [i.payments[0]]) {
172178 case s: String =>
173179 s
174180 case _ =>
175181 throw(("Somthing wrong when lock NFT in address: " + toBase58String(value(wrapAddress).bytes)))
176182 }
177183 if ((lockedNftStr == lockedNftStr))
178184 then lockedNftStr
179185 else throw("Strict value is not equal to itself.")
180186 }
181187 else toBase58String(asset.id)
182- if ((size(stakedNFTIdStr) > 0))
188+ if (if (isValidCall)
189+ then (size(stakedNFTIdStr) > 0)
190+ else false)
183191 then {
184192 let inv = invoke(Address(marketplaceContractAddress), "sellNFT", [buyOutPrice, buyOutAssetId, sellerComment], [AttachedPayment(fromBase58String(stakedNFTIdStr), 1)])
185193 if ((inv == inv))
186194 then nil
187195 else throw("Strict value is not equal to itself.")
188196 }
189197 else throw("The created NFT is invalid")
190198 }
191199
192200
193201
194202 @Callable(i)
195203 func cancelSellAndUnlock (nftId) = {
204+ let isValidCall = checkCall(i)
196205 let asset = value(assetInfo(fromBase58String(nftId)))
197206 let wrapAddress = getAddressForUnwrap(nftId)
198- if (isNftFromMarketplace(asset))
207+ if (if (isValidCall)
208+ then isNftFromMarketplace(asset)
209+ else false)
199210 then {
200211 let canceledNftStr = match invoke(Address(marketplaceContractAddress), "cancelSell", [nftId], nil) {
201212 case s: String =>
202213 s
203214 case _ =>
204215 throw("Somthing wrong when cancel sell NFT")
205216 }
206217 if ((canceledNftStr == canceledNftStr))
207218 then if (isDefined(wrapAddress))
208219 then {
209220 let unlockedNftStr = match invoke(value(wrapAddress), "unlock", nil, [AttachedPayment(asset.id, 1)]) {
210221 case s: String =>
211222 s
212223 case _ =>
213224 throw(("Somthing wrong when unlock NFT in address: " + toBase58String(value(wrapAddress).bytes)))
214225 }
215226 if ((unlockedNftStr == unlockedNftStr))
216227 then [ScriptTransfer(i.caller, 1, fromBase58String(unlockedNftStr))]
217228 else throw("Strict value is not equal to itself.")
218229 }
219230 else [ScriptTransfer(i.caller, 1, fromBase58String(canceledNftStr))]
220231 else throw("Strict value is not equal to itself.")
221232 }
222233 else throw("Ivalid NFT attached")
223234 }
224235
225236
226237
227238 @Callable(i)
228239 func unlock () = {
240+ let isValidCall = checkCall(i)
229241 let asset = value(assetInfo(value(i.payments[0].assetId)))
230- if (if (isNftFromMarketplace(asset))
242+ if (if (if (isValidCall)
243+ then isNftFromMarketplace(asset)
244+ else false)
231245 then (i.payments[0].amount == 1)
232246 else false)
233247 then {
234248 let assetIdStr = toBase58String(asset.id)
235249 let wrapAddress = getAddressForUnwrap(assetIdStr)
236250 if (isDefined(wrapAddress))
237251 then {
238252 let unlockedNftStr = match invoke(value(wrapAddress), "unlock", nil, [AttachedPayment(asset.id, 1)]) {
239253 case s: String =>
240254 s
241255 case _ =>
242256 throw(("Somthing wrong when unlock NFT in address: " + toBase58String(value(wrapAddress).bytes)))
243257 }
244258 if ((unlockedNftStr == unlockedNftStr))
245259 then $Tuple2([ScriptTransfer(i.caller, 1, fromBase58String(unlockedNftStr))], unlockedNftStr)
246260 else throw("Strict value is not equal to itself.")
247261 }
248262 else $Tuple2([ScriptTransfer(i.caller, 1, asset.id)], toBase58String(asset.id))
249263 }
250264 else throw("Ivalid NFT attached")
251265 }
252266
253267
254268
255269 @Callable(i)
256270 func buy (nftId) = {
271+ let isValidCall = checkCall(i)
257272 let boughtNft = match invoke(Address(marketplaceContractAddress), "buyNFT", [nftId], i.payments) {
258273 case s: String =>
259274 s
260275 case _ =>
261276 throw("Somthing wrong when buy NFT")
262277 }
263278 if ((boughtNft == boughtNft))
264279 then {
265280 let asset = value(assetInfo(fromBase58String(boughtNft)))
266- if (if ((size(boughtNft) > 0))
281+ if (if (if (isValidCall)
282+ then (size(boughtNft) > 0)
283+ else false)
267284 then isNftFromMarketplace(asset)
268285 else false)
269286 then {
270287 let wrapAddress = getAddressForUnwrap(nftId)
271288 if (isDefined(wrapAddress))
272289 then {
273290 let unlockedNftStr = match invoke(value(wrapAddress), "unlock", nil, [AttachedPayment(asset.id, 1)]) {
274291 case s: String =>
275292 s
276293 case _ =>
277294 throw(("Somthing wrong when unlock NFT in address: " + toBase58String(value(wrapAddress).bytes)))
278295 }
279296 if ((unlockedNftStr == unlockedNftStr))
280297 then [ScriptTransfer(i.caller, 1, fromBase58String(unlockedNftStr))]
281298 else throw("Strict value is not equal to itself.")
282299 }
283300 else [ScriptTransfer(i.caller, 1, fromBase58String(boughtNft))]
284301 }
285302 else throw("Ivalid bought NFT")
286303 }
287304 else throw("Strict value is not equal to itself.")
288305 }
289306
290307
291308 @Verifier(tx)
292309 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
293310

github/deemru/w8io/3ef1775 
49.31 ms