tx · 5DvTtCo9h85zNJnQ88u22bUB2Q1duA3eNH2fKJ1six5Q

3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A:  -0.01100000 Waves

2022.08.02 23:25 [3232856] smart account 3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A > SELF 0.00000000 Waves

{ "type": 13, "id": "5DvTtCo9h85zNJnQ88u22bUB2Q1duA3eNH2fKJ1six5Q", "fee": 1100000, "feeAssetId": null, "timestamp": 1659471983093, "version": 2, "chainId": 87, "sender": "3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A", "senderPublicKey": "A96wNJF8YTgx1J9Q4nK3oqNoExh6dPSyFAdEkmzN7XDa", "proofs": [ "5bCYFvSvSfJfH9TuC8P1CmVKWHFSrGkqhu3rr2Gw2ZCymz6w2Q3sZ9q5fxZm1depLHCJQvirJDsyk2hphLJt7Ub9" ], "script": "base64:BgIUCAISBAoCAQgSAwoBCBIAEgMKAQgTABJuZnRDcmVhdGlvbkFkZHJlc3MBGgFXk93E0hfnIAr99yESTvDwdmcmgwN41FxMABFlYWdsZUJ1eWVyQWRkcmVzcwEaAVc6UWFHh6QXedxglaC2Zss83iUvrjDv+/YAGXNpZ25BcnROZnRDcmVhdGlvbkFkZHJlc3MBGgFXe2TVW9aeF7mq0+aP/ANcyMQW+Ju6hiniAA5uZnREdWNrV3JhcHBlcgEaAVcUrURSm6X9/2EX/9g65/FnioCcFLgvzx4AEW5mdFNpZ25BcnRXcmFwcGVyARoBV+6hGhXD8bZfRGX/X8gVOcR5RdUYRUcwBwAWbmZ0VWx0cmFTdGFraW5nV3JhcHBlcgEaAVfArcJtMs2Rr6VXRdiH8lPBWo7IvSaKygsAFG5mdFdhdmVzUHVua3NXcmFwcGVyARoBV3maijAaCdWdqMonaCPZG9Wh5zSQxuiDLQAQaW5jdWJhdG9yQWRkcmVzcwEaAVeMtUiffp4V1RiXjht3+wl/Z2La4W1jJUkADmJyZWVkZXJBZGRyZXNzARoBV37nuflxxEx4XH14e4ZxgkMVpnlqD7YfHgAabWFya2V0cGxhY2VDb250cmFjdEFkZHJlc3MBGgFXXYvxX8soIGsfZqPIbtoLqJftD+j9yUTxABN6b21iaWVJc3N1ZXJBZGRyZXNzCQEHQWRkcmVzcwEBGgFXPCJrb4M8vOfQ2wBTO7F4j48kEea4E66TABJwdW5rc0lzc3VlckFkZHJlc3MJAQdBZGRyZXNzAQEaAVdL7E+N6trSBKdJcVFRWraSu0HUX4XC7GgBDGlmU2lnbkFydE5mdAEFYXNzZXQDAwMJAAACCAgFBWFzc2V0Bmlzc3VlcgVieXRlcwUZc2lnbkFydE5mdENyZWF0aW9uQWRkcmVzcwkAAAIIBQVhc3NldAhkZWNpbWFscwAABwkAAAIIBQVhc3NldApyZWlzc3VhYmxlBwcJAAACCAUFYXNzZXQIcXVhbnRpdHkAAQcBCWlmRHVja05mdAEFYXNzZXQDAwMDCQAAAggIBQVhc3NldAZpc3N1ZXIFYnl0ZXMFEGluY3ViYXRvckFkZHJlc3MGCQAAAggIBQVhc3NldAZpc3N1ZXIFYnl0ZXMFDmJyZWVkZXJBZGRyZXNzCQAAAggFBWFzc2V0CGRlY2ltYWxzAAAHCQAAAggFBWFzc2V0CnJlaXNzdWFibGUHBwkAAAIIBQVhc3NldAhxdWFudGl0eQABBwEPaWZXYXZlc1B1bmtzTmZ0AQVhc3NldAMDAwMJAAACCAUFYXNzZXQGaXNzdWVyBRN6b21iaWVJc3N1ZXJBZGRyZXNzBgkAAAIIBQVhc3NldAZpc3N1ZXIFEnB1bmtzSXNzdWVyQWRkcmVzcwkAAAIIBQVhc3NldAhkZWNpbWFscwAABwkAAAIIBQVhc3NldApyZWlzc3VhYmxlBwcJAAACCAUFYXNzZXQIcXVhbnRpdHkAAQcBEWlmVWx0cmFTdGFraW5nTmZ0AQVhc3NldAQKaXNFYWdsZU5GVAQHJG1hdGNoMAkAnQgCCQEHQWRkcmVzcwEFEWVhZ2xlQnV5ZXJBZGRyZXNzCQCsAgIJAKwCAgIEYXJ0XwkA2AQBCAUFYXNzZXQCaWQCBV90eXBlAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkAAAIFAXMCBWVhZ2xlBwQJaXNBbmlhTkZUBAckbWF0Y2gwCQCdCAIJAQdBZGRyZXNzAQUSbmZ0Q3JlYXRpb25BZGRyZXNzCQCsAgIJAKwCAgIEbmZ0XwkA2AQBCAUFYXNzZXQCaWQCB19pc3N1ZXIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwAwkAAAIFAXMCIzNQTWtpNXNIQnNRYjRLZ0RrbmJVd3NMM1lneGFDemFabkNKCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQIMQm9yZWQgQW5pYSAjBwcDBQppc0VhZ2xlTkZUBgUJaXNBbmlhTkZUARRpc05mdEZyb21NYXJrZXRwbGFjZQEFYXNzZXQDAwMJAAACCAgFBWFzc2V0Bmlzc3VlcgVieXRlcwUSbmZ0Q3JlYXRpb25BZGRyZXNzCQAAAggFBWFzc2V0CGRlY2ltYWxzAAAHCQAAAggFBWFzc2V0CnJlaXNzdWFibGUHBwkAAAIIBQVhc3NldAhxdWFudGl0eQABBwERZ2V0QWRkcmVzc0ZvcldyYXABBWFzc2V0BAthbGxvd0Fzc2V0cwkAzAgCAixIcUtxalhaQ0RxY0pGcGhQWTRuUFR1bmk3WldyR0RCM2IyZWJxcXNDSEJncAkAzAgCAixDalVEYVVlOFBHSDR5Mjh4ZFJTY0ZUVnptQmM4TWRXZWJqUkNXc0xWUHp0dwkAzAgCAixCM21naGJ5QzlBS2tKYVlOVDdOVjhrVlF5THNvQW9Uem9MS1lrcjE0czZMbQUDbmlsBAdpc0FsbG93BAckbWF0Y2gwCQDPCAIFC2FsbG93QXNzZXRzCQDYBAEIBQVhc3NldAJpZAMJAAECBQckbWF0Y2gwAgNJbnQEAXQFByRtYXRjaDAGBwMDBQdpc0FsbG93CQERaWZVbHRyYVN0YWtpbmdOZnQBBQVhc3NldAcJAQdBZGRyZXNzAQUWbmZ0VWx0cmFTdGFraW5nV3JhcHBlcgMJAQ9pZldhdmVzUHVua3NOZnQBBQVhc3NldAkBB0FkZHJlc3MBBRRuZnRXYXZlc1B1bmtzV3JhcHBlcgMJAQxpZlNpZ25BcnROZnQBBQVhc3NldAkBB0FkZHJlc3MBBRFuZnRTaWduQXJ0V3JhcHBlcgMJAQlpZkR1Y2tOZnQBBQVhc3NldAkBB0FkZHJlc3MBBQ5uZnREdWNrV3JhcHBlcgUEdW5pdAETZ2V0QWRkcmVzc0ZvclVud3JhcAEGbmZ0U3RyBAlpc1NpZ25BcnQEByRtYXRjaDAJAJ0IAgkBB0FkZHJlc3MBBRFuZnRTaWduQXJ0V3JhcHBlcgkArAICCQCsAgICC3NpZ25BcnROZnRfBQZuZnRTdHICCF9hc3NldElkAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkAZgIJALECAQUBcwAABwQGaXNEdWNrBAckbWF0Y2gwCQCdCAIJAQdBZGRyZXNzAQUObmZ0RHVja1dyYXBwZXIJAKwCAgkArAICAgRuZnRfBQZuZnRTdHICB19kdWNrSWQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQBmAgkAsQIBBQFzAAAHBA5pc1VsdHJhU3Rha2luZwQHJG1hdGNoMAkAnQgCCQEHQWRkcmVzcwEFFm5mdFVsdHJhU3Rha2luZ1dyYXBwZXIJAKwCAgkArAICAgRuZnRfBQZuZnRTdHICCF9hc3NldElkAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkAZgIJALECAQUBcwAABwQMaXNXYXZlc1B1bmtzBAckbWF0Y2gwCQCdCAIJAQdBZGRyZXNzAQUUbmZ0V2F2ZXNQdW5rc1dyYXBwZXIJAKwCAgkArAICAgRuZnRfBQZuZnRTdHICCF9hc3NldElkAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkAZgIJALECAQUBcwAABwMFDmlzVWx0cmFTdGFraW5nCQEHQWRkcmVzcwEFFm5mdFVsdHJhU3Rha2luZ1dyYXBwZXIDBQxpc1dhdmVzUHVua3MJAQdBZGRyZXNzAQUUbmZ0V2F2ZXNQdW5rc1dyYXBwZXIDBQlpc1NpZ25BcnQJAQdBZGRyZXNzAQURbmZ0U2lnbkFydFdyYXBwZXIDBQZpc0R1Y2sJAQdBZGRyZXNzAQUObmZ0RHVja1dyYXBwZXIFBHVuaXQEAWkBDmxvY2tBbmRTZWxsTkZUAgtidXlPdXRQcmljZQ1idXlPdXRBc3NldElkBAdhc3NldElkCQEFdmFsdWUBCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEC3dyYXBBZGRyZXNzCQERZ2V0QWRkcmVzc0ZvcldyYXABBQVhc3NldAQOc3Rha2VkTkZUSWRTdHIDCQEJaXNEZWZpbmVkAQULd3JhcEFkZHJlc3MEDGxvY2tlZE5mdFN0cgQHJG1hdGNoMAkA/AcECQEFdmFsdWUBBQt3cmFwQWRkcmVzcwIEbG9jawUDbmlsCQDMCAIJAJEDAggFAWkIcGF5bWVudHMAAAUDbmlsAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgEJAKwCAgIpU29tdGhpbmcgd3Jvbmcgd2hlbiBsb2NrIE5GVCBpbiBhZGRyZXNzOiAJANgEAQgJAQV2YWx1ZQEFC3dyYXBBZGRyZXNzBWJ5dGVzAwkAAAIFDGxvY2tlZE5mdFN0cgUMbG9ja2VkTmZ0U3RyBQxsb2NrZWROZnRTdHIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JANgEAQgFBWFzc2V0AmlkAwkAZgIJALECAQUOc3Rha2VkTkZUSWRTdHIAAAQDaW52CQD8BwQJAQdBZGRyZXNzAQUabWFya2V0cGxhY2VDb250cmFjdEFkZHJlc3MCB3NlbGxORlQJAMwIAgULYnV5T3V0UHJpY2UJAMwIAgUNYnV5T3V0QXNzZXRJZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEFDnN0YWtlZE5GVElkU3RyAAEFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIaVGhlIGNyZWF0ZWQgTkZUIGlzIGludmFsaWQBaQETY2FuY2VsU2VsbEFuZFVubG9jawEFbmZ0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUFbmZ0SWQEC3dyYXBBZGRyZXNzCQETZ2V0QWRkcmVzc0ZvclVud3JhcAEFBW5mdElkAwkBFGlzTmZ0RnJvbU1hcmtldHBsYWNlAQUFYXNzZXQEDmNhbmNlbGVkTmZ0U3RyBAckbWF0Y2gwCQD8BwQJAQdBZGRyZXNzAQUabWFya2V0cGxhY2VDb250cmFjdEFkZHJlc3MCCmNhbmNlbFNlbGwJAMwIAgUFbmZ0SWQFA25pbAUDbmlsAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECI1NvbXRoaW5nIHdyb25nIHdoZW4gY2FuY2VsIHNlbGwgTkZUAwkAAAIFDmNhbmNlbGVkTmZ0U3RyBQ5jYW5jZWxlZE5mdFN0cgMJAQlpc0RlZmluZWQBBQt3cmFwQWRkcmVzcwQOdW5sb2NrZWROZnRTdHIEByRtYXRjaDAJAPwHBAkBBXZhbHVlAQULd3JhcEFkZHJlc3MCBnVubG9jawUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCAUFYXNzZXQCaWQAAQUDbmlsAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgEJAKwCAgIrU29tdGhpbmcgd3Jvbmcgd2hlbiB1bmxvY2sgTkZUIGluIGFkZHJlc3M6IAkA2AQBCAkBBXZhbHVlAQULd3JhcEFkZHJlc3MFYnl0ZXMDCQAAAgUOdW5sb2NrZWROZnRTdHIFDnVubG9ja2VkTmZ0U3RyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFDnVubG9ja2VkTmZ0U3RyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQUOY2FuY2VsZWROZnRTdHIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECE0l2YWxpZCBORlQgYXR0YWNoZWQBaQEGdW5sb2NrAAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkAwMJARRpc05mdEZyb21NYXJrZXRwbGFjZQEFBWFzc2V0CQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAQcECmFzc2V0SWRTdHIJANgEAQgFBWFzc2V0AmlkBAt3cmFwQWRkcmVzcwkBE2dldEFkZHJlc3NGb3JVbndyYXABBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEFC3dyYXBBZGRyZXNzBA51bmxvY2tlZE5mdFN0cgQHJG1hdGNoMAkA/AcECQEFdmFsdWUBBQt3cmFwQWRkcmVzcwIGdW5sb2NrBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIIBQVhc3NldAJpZAABBQNuaWwDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQkArAICAitTb210aGluZyB3cm9uZyB3aGVuIHVubG9jayBORlQgaW4gYWRkcmVzczogCQDYBAEICQEFdmFsdWUBBQt3cmFwQWRkcmVzcwVieXRlcwMJAAACBQ51bmxvY2tlZE5mdFN0cgUOdW5sb2NrZWROZnRTdHIJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQ51bmxvY2tlZE5mdFN0cgUDbmlsBQ51bmxvY2tlZE5mdFN0cgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCAUFYXNzZXQCaWQFA25pbAkA2AQBCAUFYXNzZXQCaWQJAAIBAhNJdmFsaWQgTkZUIGF0dGFjaGVkAWkBA2J1eQEFbmZ0SWQECWJvdWdodE5mdAQHJG1hdGNoMAkA/AcECQEHQWRkcmVzcwEFGm1hcmtldHBsYWNlQ29udHJhY3RBZGRyZXNzAgZidXlORlQJAMwIAgUFbmZ0SWQFA25pbAgFAWkIcGF5bWVudHMDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIbU29tdGhpbmcgd3Jvbmcgd2hlbiBidXkgTkZUAwkAAAIFCWJvdWdodE5mdAUJYm91Z2h0TmZ0BAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFCWJvdWdodE5mdAMDCQBmAgkAsQIBBQlib3VnaHROZnQAAAkBFGlzTmZ0RnJvbU1hcmtldHBsYWNlAQUFYXNzZXQHBAt3cmFwQWRkcmVzcwkBE2dldEFkZHJlc3NGb3JVbndyYXABBQVuZnRJZAMJAQlpc0RlZmluZWQBBQt3cmFwQWRkcmVzcwQOdW5sb2NrZWROZnRTdHIEByRtYXRjaDAJAPwHBAkBBXZhbHVlAQULd3JhcEFkZHJlc3MCBnVubG9jawUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCAUFYXNzZXQCaWQAAQUDbmlsAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgEJAKwCAgIrU29tdGhpbmcgd3Jvbmcgd2hlbiB1bmxvY2sgTkZUIGluIGFkZHJlc3M6IAkA2AQBCAkBBXZhbHVlAQULd3JhcEFkZHJlc3MFYnl0ZXMDCQAAAgUOdW5sb2NrZWROZnRTdHIFDnVubG9ja2VkTmZ0U3RyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFDnVubG9ja2VkTmZ0U3RyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQUJYm91Z2h0TmZ0BQNuaWwJAAIBAhFJdmFsaWQgYm91Z2h0IE5GVAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXlvXD5D", "height": 3232856, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7uWVLKkqtnihtcqd6hwSHjEZ1oVWTno53pnKyuEcGhhF Next: 4HvrpPj5b96dLVGZTiFeimnHWBANXdcNrAoikJ6KdpXe Diff:
OldNewDifferences
1313
1414 let nftUltraStakingWrapper = base58'3PKVgd6ds1xervK6bPXbEHBqg8ibTcf5HZk'
1515
16+let nftWavesPunksWrapper = base58'3PD1sd55PYzmGUrQ896Qt3uvdbtgjCVpajE'
17+
1618 let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv'
1719
1820 let breederAddress = base58'3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb'
1921
2022 let marketplaceContractAddress = base58'3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc'
23+
24+let zombieIssuerAddress = Address(base58'3P7QrWH1ETLfKAJcFHYPJmQusNbDuW98Hop')
25+
26+let punksIssuerAddress = Address(base58'3P8rLVnwrTf4k5AB3emuduhZZb1yKcitTHy')
2127
2228 func ifSignArtNft (asset) = if (if (if ((asset.issuer.bytes == signArtNftCreationAddress))
2329 then (asset.decimals == 0)
3137 func ifDuckNft (asset) = if (if (if (if ((asset.issuer.bytes == incubatorAddress))
3238 then true
3339 else (asset.issuer.bytes == breederAddress))
40+ then (asset.decimals == 0)
41+ else false)
42+ then (asset.reissuable == false)
43+ else false)
44+ then (asset.quantity == 1)
45+ else false
46+
47+
48+func ifWavesPunksNft (asset) = if (if (if (if ((asset.issuer == zombieIssuerAddress))
49+ then true
50+ else (asset.issuer == punksIssuerAddress))
3451 then (asset.decimals == 0)
3552 else false)
3653 then (asset.reissuable == false)
8198 then ifUltraStakingNft(asset)
8299 else false)
83100 then Address(nftUltraStakingWrapper)
84- else if (ifSignArtNft(asset))
85- then Address(nftSignArtWrapper)
86- else if (ifDuckNft(asset))
87- then Address(nftDuckWrapper)
88- else unit
101+ else if (ifWavesPunksNft(asset))
102+ then Address(nftWavesPunksWrapper)
103+ else if (ifSignArtNft(asset))
104+ then Address(nftSignArtWrapper)
105+ else if (ifDuckNft(asset))
106+ then Address(nftDuckWrapper)
107+ else unit
89108 }
90109
91110
108127 case _ =>
109128 false
110129 }
130+ let isWavesPunks = match getString(Address(nftWavesPunksWrapper), (("nft_" + nftStr) + "_assetId")) {
131+ case s: String =>
132+ (size(s) > 0)
133+ case _ =>
134+ false
135+ }
111136 if (isUltraStaking)
112137 then Address(nftUltraStakingWrapper)
113- else if (isSignArt)
114- then Address(nftSignArtWrapper)
115- else if (isDuck)
116- then Address(nftDuckWrapper)
117- else unit
138+ else if (isWavesPunks)
139+ then Address(nftWavesPunksWrapper)
140+ else if (isSignArt)
141+ then Address(nftSignArtWrapper)
142+ else if (isDuck)
143+ then Address(nftDuckWrapper)
144+ else unit
118145 }
119146
120147
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
16+let nftWavesPunksWrapper = base58'3PD1sd55PYzmGUrQ896Qt3uvdbtgjCVpajE'
17+
1618 let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv'
1719
1820 let breederAddress = base58'3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb'
1921
2022 let marketplaceContractAddress = base58'3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc'
23+
24+let zombieIssuerAddress = Address(base58'3P7QrWH1ETLfKAJcFHYPJmQusNbDuW98Hop')
25+
26+let punksIssuerAddress = Address(base58'3P8rLVnwrTf4k5AB3emuduhZZb1yKcitTHy')
2127
2228 func ifSignArtNft (asset) = if (if (if ((asset.issuer.bytes == signArtNftCreationAddress))
2329 then (asset.decimals == 0)
2430 else false)
2531 then (asset.reissuable == false)
2632 else false)
2733 then (asset.quantity == 1)
2834 else false
2935
3036
3137 func ifDuckNft (asset) = if (if (if (if ((asset.issuer.bytes == incubatorAddress))
3238 then true
3339 else (asset.issuer.bytes == breederAddress))
40+ then (asset.decimals == 0)
41+ else false)
42+ then (asset.reissuable == false)
43+ else false)
44+ then (asset.quantity == 1)
45+ else false
46+
47+
48+func ifWavesPunksNft (asset) = if (if (if (if ((asset.issuer == zombieIssuerAddress))
49+ then true
50+ else (asset.issuer == punksIssuerAddress))
3451 then (asset.decimals == 0)
3552 else false)
3653 then (asset.reissuable == false)
3754 else false)
3855 then (asset.quantity == 1)
3956 else false
4057
4158
4259 func ifUltraStakingNft (asset) = {
4360 let isEagleNFT = match getString(Address(eagleBuyerAddress), (("art_" + toBase58String(asset.id)) + "_type")) {
4461 case s: String =>
4562 (s == "eagle")
4663 case _ =>
4764 false
4865 }
4966 let isAniaNFT = match getString(Address(nftCreationAddress), (("nft_" + toBase58String(asset.id)) + "_issuer")) {
5067 case s: String =>
5168 if ((s == "3PMki5sHBsQb4KgDknbUwsL3YgxaCzaZnCJ"))
5269 then contains(asset.name, "Bored Ania #")
5370 else false
5471 case _ =>
5572 false
5673 }
5774 if (isEagleNFT)
5875 then true
5976 else isAniaNFT
6077 }
6178
6279
6380 func isNftFromMarketplace (asset) = if (if (if ((asset.issuer.bytes == nftCreationAddress))
6481 then (asset.decimals == 0)
6582 else false)
6683 then (asset.reissuable == false)
6784 else false)
6885 then (asset.quantity == 1)
6986 else false
7087
7188
7289 func getAddressForWrap (asset) = {
7390 let allowAssets = ["HqKqjXZCDqcJFphPY4nPTuni7ZWrGDB3b2ebqqsCHBgp", "CjUDaUe8PGH4y28xdRScFTVzmBc8MdWebjRCWsLVPztw", "B3mghbyC9AKkJaYNT7NV8kVQyLsoAoTzoLKYkr14s6Lm"]
7491 let isAllow = match indexOf(allowAssets, toBase58String(asset.id)) {
7592 case t: Int =>
7693 true
7794 case _ =>
7895 false
7996 }
8097 if (if (isAllow)
8198 then ifUltraStakingNft(asset)
8299 else false)
83100 then Address(nftUltraStakingWrapper)
84- else if (ifSignArtNft(asset))
85- then Address(nftSignArtWrapper)
86- else if (ifDuckNft(asset))
87- then Address(nftDuckWrapper)
88- else unit
101+ else if (ifWavesPunksNft(asset))
102+ then Address(nftWavesPunksWrapper)
103+ else if (ifSignArtNft(asset))
104+ then Address(nftSignArtWrapper)
105+ else if (ifDuckNft(asset))
106+ then Address(nftDuckWrapper)
107+ else unit
89108 }
90109
91110
92111 func getAddressForUnwrap (nftStr) = {
93112 let isSignArt = match getString(Address(nftSignArtWrapper), (("signArtNft_" + nftStr) + "_assetId")) {
94113 case s: String =>
95114 (size(s) > 0)
96115 case _ =>
97116 false
98117 }
99118 let isDuck = match getString(Address(nftDuckWrapper), (("nft_" + nftStr) + "_duckId")) {
100119 case s: String =>
101120 (size(s) > 0)
102121 case _ =>
103122 false
104123 }
105124 let isUltraStaking = match getString(Address(nftUltraStakingWrapper), (("nft_" + nftStr) + "_assetId")) {
106125 case s: String =>
107126 (size(s) > 0)
108127 case _ =>
109128 false
110129 }
130+ let isWavesPunks = match getString(Address(nftWavesPunksWrapper), (("nft_" + nftStr) + "_assetId")) {
131+ case s: String =>
132+ (size(s) > 0)
133+ case _ =>
134+ false
135+ }
111136 if (isUltraStaking)
112137 then Address(nftUltraStakingWrapper)
113- else if (isSignArt)
114- then Address(nftSignArtWrapper)
115- else if (isDuck)
116- then Address(nftDuckWrapper)
117- else unit
138+ else if (isWavesPunks)
139+ then Address(nftWavesPunksWrapper)
140+ else if (isSignArt)
141+ then Address(nftSignArtWrapper)
142+ else if (isDuck)
143+ then Address(nftDuckWrapper)
144+ else unit
118145 }
119146
120147
121148 @Callable(i)
122149 func lockAndSellNFT (buyOutPrice,buyOutAssetId) = {
123150 let assetId = value(value(i.payments[0]).assetId)
124151 let asset = value(assetInfo(assetId))
125152 let wrapAddress = getAddressForWrap(asset)
126153 let stakedNFTIdStr = if (isDefined(wrapAddress))
127154 then {
128155 let lockedNftStr = match invoke(value(wrapAddress), "lock", nil, [i.payments[0]]) {
129156 case s: String =>
130157 s
131158 case _ =>
132159 throw(("Somthing wrong when lock NFT in address: " + toBase58String(value(wrapAddress).bytes)))
133160 }
134161 if ((lockedNftStr == lockedNftStr))
135162 then lockedNftStr
136163 else throw("Strict value is not equal to itself.")
137164 }
138165 else toBase58String(asset.id)
139166 if ((size(stakedNFTIdStr) > 0))
140167 then {
141168 let inv = invoke(Address(marketplaceContractAddress), "sellNFT", [buyOutPrice, buyOutAssetId], [AttachedPayment(fromBase58String(stakedNFTIdStr), 1)])
142169 if ((inv == inv))
143170 then nil
144171 else throw("Strict value is not equal to itself.")
145172 }
146173 else throw("The created NFT is invalid")
147174 }
148175
149176
150177
151178 @Callable(i)
152179 func cancelSellAndUnlock (nftId) = {
153180 let asset = value(assetInfo(fromBase58String(nftId)))
154181 let wrapAddress = getAddressForUnwrap(nftId)
155182 if (isNftFromMarketplace(asset))
156183 then {
157184 let canceledNftStr = match invoke(Address(marketplaceContractAddress), "cancelSell", [nftId], nil) {
158185 case s: String =>
159186 s
160187 case _ =>
161188 throw("Somthing wrong when cancel sell NFT")
162189 }
163190 if ((canceledNftStr == canceledNftStr))
164191 then if (isDefined(wrapAddress))
165192 then {
166193 let unlockedNftStr = match invoke(value(wrapAddress), "unlock", nil, [AttachedPayment(asset.id, 1)]) {
167194 case s: String =>
168195 s
169196 case _ =>
170197 throw(("Somthing wrong when unlock NFT in address: " + toBase58String(value(wrapAddress).bytes)))
171198 }
172199 if ((unlockedNftStr == unlockedNftStr))
173200 then [ScriptTransfer(i.caller, 1, fromBase58String(unlockedNftStr))]
174201 else throw("Strict value is not equal to itself.")
175202 }
176203 else [ScriptTransfer(i.caller, 1, fromBase58String(canceledNftStr))]
177204 else throw("Strict value is not equal to itself.")
178205 }
179206 else throw("Ivalid NFT attached")
180207 }
181208
182209
183210
184211 @Callable(i)
185212 func unlock () = {
186213 let asset = value(assetInfo(value(i.payments[0].assetId)))
187214 if (if (isNftFromMarketplace(asset))
188215 then (i.payments[0].amount == 1)
189216 else false)
190217 then {
191218 let assetIdStr = toBase58String(asset.id)
192219 let wrapAddress = getAddressForUnwrap(assetIdStr)
193220 if (isDefined(wrapAddress))
194221 then {
195222 let unlockedNftStr = match invoke(value(wrapAddress), "unlock", nil, [AttachedPayment(asset.id, 1)]) {
196223 case s: String =>
197224 s
198225 case _ =>
199226 throw(("Somthing wrong when unlock NFT in address: " + toBase58String(value(wrapAddress).bytes)))
200227 }
201228 if ((unlockedNftStr == unlockedNftStr))
202229 then $Tuple2([ScriptTransfer(i.caller, 1, fromBase58String(unlockedNftStr))], unlockedNftStr)
203230 else throw("Strict value is not equal to itself.")
204231 }
205232 else $Tuple2([ScriptTransfer(i.caller, 1, asset.id)], toBase58String(asset.id))
206233 }
207234 else throw("Ivalid NFT attached")
208235 }
209236
210237
211238
212239 @Callable(i)
213240 func buy (nftId) = {
214241 let boughtNft = match invoke(Address(marketplaceContractAddress), "buyNFT", [nftId], i.payments) {
215242 case s: String =>
216243 s
217244 case _ =>
218245 throw("Somthing wrong when buy NFT")
219246 }
220247 if ((boughtNft == boughtNft))
221248 then {
222249 let asset = value(assetInfo(fromBase58String(boughtNft)))
223250 if (if ((size(boughtNft) > 0))
224251 then isNftFromMarketplace(asset)
225252 else false)
226253 then {
227254 let wrapAddress = getAddressForUnwrap(nftId)
228255 if (isDefined(wrapAddress))
229256 then {
230257 let unlockedNftStr = match invoke(value(wrapAddress), "unlock", nil, [AttachedPayment(asset.id, 1)]) {
231258 case s: String =>
232259 s
233260 case _ =>
234261 throw(("Somthing wrong when unlock NFT in address: " + toBase58String(value(wrapAddress).bytes)))
235262 }
236263 if ((unlockedNftStr == unlockedNftStr))
237264 then [ScriptTransfer(i.caller, 1, fromBase58String(unlockedNftStr))]
238265 else throw("Strict value is not equal to itself.")
239266 }
240267 else [ScriptTransfer(i.caller, 1, fromBase58String(boughtNft))]
241268 }
242269 else throw("Ivalid bought NFT")
243270 }
244271 else throw("Strict value is not equal to itself.")
245272 }
246273
247274
248275 @Verifier(tx)
249276 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
250277

github/deemru/w8io/3ef1775 
46.30 ms