tx · ERyukAmXp8XLQTQMQu4sZpBZMnZoQfWFSnYjxqMJT1Y6

3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc:  -0.01400000 Waves

2022.12.31 12:59 [3449790] smart account 3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc > SELF 0.00000000 Waves

{ "type": 13, "id": "ERyukAmXp8XLQTQMQu4sZpBZMnZoQfWFSnYjxqMJT1Y6", "fee": 1400000, "feeAssetId": null, "timestamp": 1672480787520, "version": 2, "chainId": 87, "sender": "3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc", "senderPublicKey": "3pJsmGRpWHpqyaAjeX7BacMEfYx32LMNN4qwxQqASBmi", "proofs": [ "3x7eKDrsXKRFkwVbtq1s9BUWiRdpsEXyifo8xFtXEFu4nLEFrnSdBBCo4yRNNt89GvMZTsCC31HQNuuR7UNUNEnn" ], "script": "base64:BgIzCAISBQoDAQgIEgMKAQgSAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEgQKAggIEgQKAggIFAANY3JlYXRlTmZ0RGFwcAEaAVeT3cTSF+cgCv33IRJO8PB2ZyaDA3jUXEwAEG1hcmtldEZlZUFkZHJlc3MJAQdBZGRyZXNzAQEaAVfFZH+L2ULU1XLKUQvN1YRZ5quq9mW5UkgACkRBT0FkZHJlc3MJAQdBZGRyZXNzAQEaAVdOteUSRP6tBL+BzkCfn2vRKZLAsQRY3d4AEnB1enpsZVN0YWtlQWRkcmVzcwEaAVeUaIz57qK5qp/W9Y68qY9nGpwG9BYpibsAEHByb3h5RGFwcEFkZHJlc3MBGgFXM9+Gr0O+rRJs8z14r3WPA1a1W7U2WvQXAAxhZG1pbkFkZHJlc3MJAQdBZGRyZXNzAQEaAVez1ZJUSQmaKhD7xvifEHar7z8PcqWJFYwADm5mdER1Y2tXcmFwcGVyARoBVxStRFKbpf3/YRf/2Drn8WeKgJwUuC/PHgARbmZ0U2lnbkFydFdyYXBwZXIBGgFX7qEaFcPxtl9EZf9fyBU5xHlF1RhFRzAHAA5kdWNrRmVlQWRkcmVzcwEaAVcuggocfnMh8yGFPd6ZstDuF43Wf/PPG4UADGR1Y2tzUGVyY2VudAAeAA5yb3lhbHR5UGVyY2VudAAHAQVpc05GVAEFYXNzZXQDAwkAAAIIBQVhc3NldAhkZWNpbWFscwAACQAAAggFBWFzc2V0CnJlaXNzdWFibGUHBwkAAAIIBQVhc3NldAhxdWFudGl0eQABBwEIY2hlY2tORlQBBWFzc2V0AwMDCQAAAggIBQVhc3NldAZpc3N1ZXIFYnl0ZXMFDWNyZWF0ZU5mdERhcHAJAAACCAUFYXNzZXQIZGVjaW1hbHMAAAcJAAACCAUFYXNzZXQKcmVpc3N1YWJsZQcHCQAAAggFBWFzc2V0CHF1YW50aXR5AAEHAQ10cnlHZXRJbnRlZ2VyAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAQx0cnlHZXRTdHJpbmcBA2tleQQHJG1hdGNoMAkAnQgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgABD3RyeUdldEFzc2V0SW5mbwIHYXNzZXRJZAhlcnJvck1zZwQHJG1hdGNoMAkA7AcBCQDZBAEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEAWEFByRtYXRjaDAFAWEJAAIBBQhlcnJvck1zZwEOZ2V0QXNzZXRTdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAgVXQVZFUwENZ2V0QXNzZXRCeXRlcwEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwUEdW5pdAkA2QQBBQphc3NldElkU3RyARJhbGxUcmFuc2ZlcnNGb3JCaWQCBW5mdElkB2V4Y2x1ZGUECmF1Y3Rpb25LZXkJAKwCAgkArAICAghhdWN0aW9uXwUFbmZ0SWQCBV9iaWRzBAthdWN0aW9uRGF0YQkBDHRyeUdldFN0cmluZwEFCmF1Y3Rpb25LZXkECWV4Y2x1ZGVJZAMJAGYCCQCxAgEFB2V4Y2x1ZGUAAAUHZXhjbHVkZQIAAwkAAAIJALECAQULYXVjdGlvbkRhdGEAAAUDbmlsCgEVZ2V0UmV0dXJuVHJhbnNhY3Rpb25zAgVhY2N1bQRuZXh0BA1iZXRQYXJzZWREYXRhCQC1CQIFBG5leHQCAV8ECGJldE93bmVyCQCRAwIFDWJldFBhcnNlZERhdGEAAAQJYmV0QW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUNYmV0UGFyc2VkRGF0YQABBApiZXRBc3NldElkAwkAAAIJAJEDAgUNYmV0UGFyc2VkRGF0YQACAgVXQVZFUwUEdW5pdAkA2QQBCQCRAwIFDWJldFBhcnNlZERhdGEAAgMDCQBmAgkAsQIBBQlleGNsdWRlSWQAAAkAAAIFCWV4Y2x1ZGVJZAUEbmV4dAcFBWFjY3VtCQDNCAIFBWFjY3VtCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUIYmV0T3duZXIFCWJldEFtb3VudAUKYmV0QXNzZXRJZAoAAiRsCQC1CQIFC2F1Y3Rpb25EYXRhAgEsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARVnZXRSZXR1cm5UcmFuc2FjdGlvbnMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDI2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgEMaXNBZGRyZXNzQmFuAQdhZGRyZXNzBAckbWF0Y2gwCQCgCAEJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIHX2Jhbm5lZAMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAF0BQckbWF0Y2gwBQF0BwkBaQEHc2VsbE5GVAMLYnV5T3V0UHJpY2UNYnV5T3V0QXNzZXRJZA1zZWxsZXJDb21tZW50BANwbXQDAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAEHCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAhlORlQgbm90IGxpc3RlZCBhcyBwYXltZW50BAZpc0ZyZWUJAAACBQ1idXlPdXRBc3NldElkAgRmcmVlBAtidXlPdXRBc3NldAMFBmlzRnJlZQUEdW5pdAkBDWdldEFzc2V0Qnl0ZXMBBQ1idXlPdXRBc3NldElkAwkBDGlzQWRkcmVzc0JhbgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQACAQIOWW91IGFyZSBiYW5uZWQDCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBAVuZnRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBANuZnQEByRtYXRjaDAJAOwHAQUFbmZ0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEAWEFByRtYXRjaDAFAWEJAAIBAg5DYW4ndCBmaW5kIE5GVAMJAQhjaGVja05GVAEFA25mdAMDBQZpc0ZyZWUGCQBmAgULYnV5T3V0UHJpY2UAAAQMYXNzZXROYW1lU3RyCQDYBAEIBQNuZnQCaWQECW5mdElzc3VlcgQHJG1hdGNoMAkAnQgCCQEHQWRkcmVzcwEFDWNyZWF0ZU5mdERhcHAJAKwCAgkArAICAgRuZnRfBQxhc3NldE5hbWVTdHICB19pc3N1ZXIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwBQFhCQClCAEIBQFpBmNhbGxlcgQPcm95YWx0eVJlY2VpdmVyAwkBAiE9AgUJbmZ0SXNzdWVyCQDYBAEFEW5mdFNpZ25BcnRXcmFwcGVyBQluZnRJc3N1ZXIJAJEDAgkAvAkCCQCRAwIJALwJAggJAQV2YWx1ZQEJAOwHAQUFbmZ0SWQLZGVzY3JpcHRpb24CAS4AAAIBIAACCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUMYXNzZXROYW1lU3RyAgxfYnV5T3V0UHJpY2UDBQZpc0ZyZWUAAAULYnV5T3V0UHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FDGFzc2V0TmFtZVN0cgIOX2J1eU91dEFzc2V0SWQDBQZpc0ZyZWUCBGZyZWUJAQ5nZXRBc3NldFN0cmluZwEFC2J1eU91dEFzc2V0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgRuZnRfBQxhc3NldE5hbWVTdHICEF9yb3lhbHR5UmVjZWl2ZXIFD3JveWFsdHlSZWNlaXZlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUMYXNzZXROYW1lU3RyAg5fc2VsbGVyQ29tbWVudAUNc2VsbGVyQ29tbWVudAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUMYXNzZXROYW1lU3RyAgdfc2VsbGVyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwkApQgBCAUBaQxvcmlnaW5DYWxsZXICBV9uZnRfBQxhc3NldE5hbWVTdHIFDGFzc2V0TmFtZVN0cgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwkApQgBCAUBaQxvcmlnaW5DYWxsZXICBV9uZnRfBQxhc3NldE5hbWVTdHICDF9zdGFydFNhbGVBdAUGaGVpZ2h0BQNuaWwJAAIBAh9QcmljZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvCQACAQIaTkZUIGlzc3VlZCBieSBhbm90aGVyIGRhcHAJAAIBAiZORlQgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSB0cmFuc2FjdGlvbgFpAQZidXlORlQBBW5mdElkBANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAhxBdHRhY2hlZCBwYXltZW50IGlzIHJlcXVpcmVkBAtidXlPdXRQcmljZQkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCDF9idXlPdXRQcmljZQQQYnV5T3V0QXNzZXRJZFN0cgkBDHRyeUdldFN0cmluZwEJAKwCAgkArAICAgRuZnRfBQVuZnRJZAIOX2J1eU91dEFzc2V0SWQED3JveWFsdHlSZWNlaXZlcgkBDHRyeUdldFN0cmluZwEJAKwCAgkArAICAgRuZnRfBQVuZnRJZAIQX3JveWFsdHlSZWNlaXZlcgQJc2VsbGVyU3RyCQEMdHJ5R2V0U3RyaW5nAQkArAICCQCsAgICBG5mdF8FBW5mdElkAgdfc2VsbGVyBAZpc0ZyZWUJAAACBRBidXlPdXRBc3NldElkU3RyAgRmcmVlBAhuZnRBc3NldAkBD3RyeUdldEFzc2V0SW5mbwIFBW5mdElkAg1ORlQgbm90IGZvdW5kBA1idXlPdXRBc3NldElkAwMFBmlzRnJlZQYJAAACBRBidXlPdXRBc3NldElkU3RyAgVXQVZFUwUEdW5pdAQHJG1hdGNoMAkA7AcBCQDZBAEFEGJ1eU91dEFzc2V0SWRTdHIDCQABAgUHJG1hdGNoMAIFQXNzZXQEAWEFByRtYXRjaDAIBQFhAmlkCQACAQIWQnV5b3V0IGFzc2V0IG5vdCBmb3VuZAQKYXVjdGlvbktleQkArAICCQCsAgICCGF1Y3Rpb25fCQDYBAEIBQhuZnRBc3NldAJpZAIFX2JpZHMDAwMFBmlzRnJlZQkAAAIFC2J1eU91dFByaWNlAAAHBgMJAGYCBQtidXlPdXRQcmljZQAACQBnAggFA3BtdAZhbW91bnQFC2J1eU91dFByaWNlBwQJZHVja05mdElkCQELdmFsdWVPckVsc2UCCQCdCAIJAQdBZGRyZXNzAQUObmZ0RHVja1dyYXBwZXIJAKwCAgkArAICAgRuZnRfBQVuZnRJZAIHX2R1Y2tJZAIABAx0cmFuc2ZlckZlZXMDCQBmAgkAsQIBBQlkdWNrTmZ0SWQAAAQHZHVja0ZlZQkAawMFC2J1eU91dFByaWNlBQxkdWNrc1BlcmNlbnQAZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUJc2VsbGVyU3RyCQBlAgULYnV5T3V0UHJpY2UFB2R1Y2tGZWUFDWJ1eU91dEFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQ5kdWNrRmVlQWRkcmVzcwUHZHVja0ZlZQUNYnV5T3V0QXNzZXRJZAUDbmlsBAtyb3lhbHR5UGFydAkAawMFC2J1eU91dFByaWNlBQ5yb3lhbHR5UGVyY2VudABkBAltYXJrZXRGZWUJAGsDBQtidXlPdXRQcmljZQABAGQEBkRBT0ZlZQkAawMFC2J1eU91dFByaWNlAAIAZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUJc2VsbGVyU3RyCQBlAgkAZQIFC2J1eU91dFByaWNlBQtyb3lhbHR5UGFydAUJbWFya2V0RmVlBQ1idXlPdXRBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQ9yb3lhbHR5UmVjZWl2ZXIFC3JveWFsdHlQYXJ0BQ1idXlPdXRBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFEG1hcmtldEZlZUFkZHJlc3MFCW1hcmtldEZlZQUNYnV5T3V0QXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQpEQU9BZGRyZXNzBQZEQU9GZWUFDWJ1eU91dEFzc2V0SWQFA25pbAMDBQZpc0ZyZWUGCQAAAggFA3BtdAdhc3NldElkBQ1idXlPdXRBc3NldElkBAdpc0dyb3VwCQELdmFsdWVPckVsc2UCCQCbCAIJAQdBZGRyZXNzAQUNY3JlYXRlTmZ0RGFwcAkArAICCQCsAgICBG5mdF8FBW5mdElkAghfaXNHcm91cAcDCQEBIQEFB2lzR3JvdXAJAJQKAgkAzggCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEIBQhuZnRBc3NldAJpZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCDF9idXlPdXRQcmljZQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCDl9idXlPdXRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBQVuZnRJZAIQX3JveWFsdHlSZWNlaXZlcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCDl9zZWxsZXJDb21tZW50CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBQVuZnRJZAIHX3NlbGxlcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUJc2VsbGVyU3RyAgVfbmZ0XwUFbmZ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUJc2VsbGVyU3RyAgVfbmZ0XwUFbmZ0SWQCDF9zdGFydFNhbGVBdAkAzAgCCQELRGVsZXRlRW50cnkBBQphdWN0aW9uS2V5BQNuaWwFDHRyYW5zZmVyRmVlcwkBEmFsbFRyYW5zZmVyc0ZvckJpZAIJANgEAQgFCG5mdEFzc2V0AmlkAgAJANgEAQgFCG5mdEFzc2V0AmlkBAtuZXdORlRJZFN0cgQHJG1hdGNoMAkA/AcECQEHQWRkcmVzcwEFDWNyZWF0ZU5mdERhcHACDW1pbnRGcm9tR3JvdXAJAMwIAgUFbmZ0SWQFA25pbAUDbmlsAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECJVNvbXRoaW5nIHdyb25nIHdoZW4gbWludCBtdWx0aXBsZSBORlQDCQAAAgULbmV3TkZUSWRTdHIFC25ld05GVElkU3RyBA5ncm91cEF2YWlsYWJsZQkBBXZhbHVlAQkAmggCCQEHQWRkcmVzcwEFDWNyZWF0ZU5mdERhcHAJAKwCAgkArAICAgZncm91cF8FBW5mdElkAgpfYXZhaWxhYmxlAwkAAAIFDmdyb3VwQXZhaWxhYmxlBQ5ncm91cEF2YWlsYWJsZQMJAAACBQ5ncm91cEF2YWlsYWJsZQAABANpbnYJAPwHBAkBB0FkZHJlc3MBBQ1jcmVhdGVOZnREYXBwAgdidXJuTkZUBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUFbmZ0SWQAAQUDbmlsAwkAAAIFA2ludgUDaW52CQCUCgIJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtuZXdORlRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCDF9idXlPdXRQcmljZQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCDl9idXlPdXRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBQVuZnRJZAIQX3JveWFsdHlSZWNlaXZlcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCDl9zZWxsZXJDb21tZW50CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBQVuZnRJZAIHX3NlbGxlcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUJc2VsbGVyU3RyAgVfbmZ0XwUFbmZ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUJc2VsbGVyU3RyAgVfbmZ0XwUFbmZ0SWQCDF9zdGFydFNhbGVBdAkAzAgCCQELRGVsZXRlRW50cnkBBQphdWN0aW9uS2V5BQNuaWwFDHRyYW5zZmVyRmVlcwULbmV3TkZUSWRTdHIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFC25ld05GVElkU3RyBQNuaWwFDHRyYW5zZmVyRmVlcwULbmV3TkZUSWRTdHIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAjJUaGUgYnV5b3V0IGFzc2V0IGRvZXMgbm90IG1hdGNoIHRoZSBwdXJjaGFzZSBhc3NldAkAAgECKFBheW1lbnQgYW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8BaQEKY2FuY2VsU2VsbAEFbmZ0SWQECXNlbGxlclN0cgkBDHRyeUdldFN0cmluZwEJAKwCAgkArAICAgRuZnRfBQVuZnRJZAIHX3NlbGxlcgQIbmZ0QXNzZXQJAQ90cnlHZXRBc3NldEluZm8CBQVuZnRJZAINTkZUIG5vdCBmb3VuZAQKYXVjdGlvbktleQkArAICCQCsAgICCGF1Y3Rpb25fCQDYBAEIBQhuZnRBc3NldAJpZAIFX2JpZHMDAwkAZgIJALECAQUJc2VsbGVyU3RyAAADCQAAAgUJc2VsbGVyU3RyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgYJAAACBQxhZG1pbkFkZHJlc3MIBQFpDG9yaWdpbkNhbGxlcgcJAJQKAgkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCAUIbmZ0QXNzZXQCaWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FBW5mdElkAgxfYnV5T3V0UHJpY2UJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FBW5mdElkAg5fYnV5T3V0QXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCEF9yb3lhbHR5UmVjZWl2ZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FBW5mdElkAg5fc2VsbGVyQ29tbWVudAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCB19zZWxsZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FCXNlbGxlclN0cgIFX25mdF8FBW5mdElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgIIYWRkcmVzc18FCXNlbGxlclN0cgIFX25mdF8FBW5mdElkAgxfc3RhcnRTYWxlQXQJAMwIAgkBC0RlbGV0ZUVudHJ5AQUKYXVjdGlvbktleQUDbmlsCQESYWxsVHJhbnNmZXJzRm9yQmlkAgkA2AQBCAUIbmZ0QXNzZXQCaWQCAAUFbmZ0SWQJAAIBAhRZb3UgYXJlIG5vdCBhIHNlbGxlcgFpAQNiYW4BB2FkZHJlc3MDCQAAAggFAWkGY2FsbGVyBQxhZG1pbkFkZHJlc3MJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIHX2Jhbm5lZAYFA25pbAkAAgECFEFsbG93IG9ubHkgZm9yIGFkbWluAWkBBXVuQmFuAQdhZGRyZXNzAwkAAAIIBQFpBmNhbGxlcgUMYWRtaW5BZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAghhZGRyZXNzXwUHYWRkcmVzcwIHX2Jhbm5lZAUDbmlsCQACAQIUQWxsb3cgb25seSBmb3IgYWRtaW4BaQEEbGlrZQEFbmZ0SWQECG5mdEFzc2V0CQDsBwEJANkEAQUFbmZ0SWQECWR1Y2tOZnRJZAkBC3ZhbHVlT3JFbHNlAgkAnQgCCQEHQWRkcmVzcwEFDm5mdER1Y2tXcmFwcGVyCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCB19kdWNrSWQCAAQMc2lnbkFydE5mdElkCQELdmFsdWVPckVsc2UCCQCdCAIJAQdBZGRyZXNzAQURbmZ0U2lnbkFydFdyYXBwZXIJAKwCAgkArAICAgtzaWduQXJ0TmZ0XwUFbmZ0SWQCCF9hc3NldElkAgAEDHVwZGF0ZWROZnRJZAMJAGYCCQCxAgEFCWR1Y2tOZnRJZAAABQlkdWNrTmZ0SWQDCQBmAgkAsQIBBQxzaWduQXJ0TmZ0SWQAAAUMc2lnbkFydE5mdElkBQVuZnRJZAMDCQEJaXNEZWZpbmVkAQUIbmZ0QXNzZXQJAQhjaGVja05GVAEJAQV2YWx1ZQEFCG5mdEFzc2V0BwQNY2FsbGVyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEC2NvdW50U3Rha2VkBAckbWF0Y2gwCQCaCAIJAQdBZGRyZXNzAQUScHV6emxlU3Rha2VBZGRyZXNzCQCsAgIFDWNhbGxlckFkZHJlc3MCB19zdGFrZWQDCQABAgUHJG1hdGNoMAIDSW50BAFjBQckbWF0Y2gwBQFjAAADCQBnAgULY291bnRTdGFrZWQAgMLXLwQLbmZ0TGlrZXNLZXkJAKwCAgkArAICAgRuZnRfBQx1cGRhdGVkTmZ0SWQCBl9saWtlcwQNbmZ0TGlrZXNWYWx1ZQkBDHRyeUdldFN0cmluZwEJAKwCAgkArAICAgRuZnRfBQx1cGRhdGVkTmZ0SWQCBl9saWtlcwMJAQEhAQkBCWlzRGVmaW5lZAEJALMJAgUNbmZ0TGlrZXNWYWx1ZQUNY2FsbGVyQWRkcmVzcwQNbmV3TGlrZXNWYWx1ZQMJAAACCQCxAgEFDW5mdExpa2VzVmFsdWUAAAkApQgBCAUBaQZjYWxsZXIJAKwCAgkArAICBQ1uZnRMaWtlc1ZhbHVlAgEsBQ1jYWxsZXJBZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIFC25mdExpa2VzS2V5BQ1uZXdMaWtlc1ZhbHVlBQNuaWwJAAIBAhZZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkCQACAQIrWW91IGNhbiBsaWtlIGlmIHlvdSBzdGFrZSAxIG9yIG1vcmUgUHV6emxlcwkAAgECDkludmFsaWQgTkZUIGlkAWkBCHBsYWNlQmlkAQVuZnRJZAQHaXNHcm91cAkBC3ZhbHVlT3JFbHNlAgkAmwgCCQEHQWRkcmVzcwEFDWNyZWF0ZU5mdERhcHAJAKwCAgkArAICAgRuZnRfBQVuZnRJZAIIX2lzR3JvdXAHAwUHaXNHcm91cAkAAgECPFRoaXMgZnVuY3Rpb24gaXMgbm90IHRlbXBvcmFyaWx5IGF2YWlsYWJsZSBmb3IgbXVsdGlwbGUgTkZUcwMDCQBmAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAAMJAQEhAQkBCWlzRGVmaW5lZAEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAYJAQEhAQkBBWlzTkZUAQkBBXZhbHVlAQkA7AcBCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQHBAhuZnRBc3NldAkBD3RyeUdldEFzc2V0SW5mbwIFBW5mdElkAg1ORlQgbm90IGZvdW5kBAluZnRBbW91bnQEByRtYXRjaDAJAPAHAgUEdGhpcwgFCG5mdEFzc2V0AmlkAwkAAQIFByRtYXRjaDACA0ludAQBYwUHJG1hdGNoMAUBYwAABAlzZWxsZXJTdHIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgkArAICAgRuZnRfBQVuZnRJZAIHX3NlbGxlcgMJAQIhPQIFCXNlbGxlclN0cgkApQgBCAUBaQZjYWxsZXIDAwkAAAIFCW5mdEFtb3VudAABCQEIY2hlY2tORlQBBQhuZnRBc3NldAcECWNhbGxlclN0cgkApQgBCAUBaQZjYWxsZXIEC2Fzc2V0QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAphdWN0aW9uS2V5CQCsAgIJAKwCAgIIYXVjdGlvbl8JANgEAQgFCG5mdEFzc2V0AmlkAgVfYmlkcwQLYXVjdGlvbkRhdGEJAQx0cnlHZXRTdHJpbmcBBQphdWN0aW9uS2V5BAlhZGRlZERhdGEJAKwCAgkArAICCQCsAgIJAKwCAgUJY2FsbGVyU3RyAgFfCQCkAwEFC2Fzc2V0QW1vdW50AgFfBQphc3NldElkU3RyAwkAZgIAFQkAZAIJAJADAQkAtQkCBQthdWN0aW9uRGF0YQIBLAABBAVleGlzdAkBCGNvbnRhaW5zAgULYXVjdGlvbkRhdGEJAKUIAQgFAWkGY2FsbGVyAwkBASEBBQVleGlzdAQLdXBkYXRlZERhdGEEByRtYXRjaDAJAKIIAQUKYXVjdGlvbktleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAKwCAgkArAICBQFzAgEsBQlhZGRlZERhdGEFCWFkZGVkRGF0YQkAzAgCCQELU3RyaW5nRW50cnkCBQphdWN0aW9uS2V5BQt1cGRhdGVkRGF0YQUDbmlsCQACAQIUWW91IGhhdmUgYWxyZWFkeSBiaWQJAAIBAi1Zb3UgY2Fubm90IGNyZWF0ZSBtb3JlIHRoYW4gMjcgYmV0cyBmb3IgMSBORlQJAAIBAg9JbnZhbGlkIE5GVCBJZC4JAAIBAhFTZWxsZXIgY2Fubm90IGJpZAkAAgECFFBheW1lbnQgbm90IGF0dGFjaGVkAWkBCWNhbmNlbEJpZAIFbmZ0SWQFYmV0SWQECG5mdEFzc2V0CQEPdHJ5R2V0QXNzZXRJbmZvAgUFbmZ0SWQCDU5GVCBub3QgZm91bmQECmF1Y3Rpb25LZXkJAKwCAgkArAICAghhdWN0aW9uXwkA2AQBCAUIbmZ0QXNzZXQCaWQCBV9iaWRzBAthdWN0aW9uRGF0YQkBDHRyeUdldFN0cmluZwEFCmF1Y3Rpb25LZXkDCQBmAgkAsQIBBQthdWN0aW9uRGF0YQAABAljYWxsZXJTdHIJAKUIAQgFAWkGY2FsbGVyBARiZXRzCQC1CQIFC2F1Y3Rpb25EYXRhAgEsBAhiZXRJbmRleAQHJG1hdGNoMAkAzwgCBQRiZXRzBQViZXRJZAMJAAECBQckbWF0Y2gwAgNJbnQEA2lkeAUHJG1hdGNoMAUDaWR4CQACAQITQmV0IG5vdCBmb3VuZCBieSBpZAQHYmV0RGF0YQkAkQMCBQRiZXRzBQhiZXRJbmRleAQNYmV0UGFyc2VkRGF0YQkAtQkCBQdiZXREYXRhAgFfBAhiZXRPd25lcgkAkQMCBQ1iZXRQYXJzZWREYXRhAAAECWJldEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDWJldFBhcnNlZERhdGEAAQQKYmV0QXNzZXRJZAMJAAACCQCRAwIFDWJldFBhcnNlZERhdGEAAgIFV0FWRVMFBHVuaXQJANkEAQkAkQMCBQ1iZXRQYXJzZWREYXRhAAIDCQAAAgUIYmV0T3duZXIFCWNhbGxlclN0cgQHbmV3QmV0cwkA0QgCBQRiZXRzBQhiZXRJbmRleAQOdXBkYXRlRGF0YUxpc3QDCQAAAgkAkAMBBQduZXdCZXRzAAAJAMwIAgkBC0RlbGV0ZUVudHJ5AQUKYXVjdGlvbktleQUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIFCmF1Y3Rpb25LZXkJALkJAgUHbmV3QmV0cwIBLAUDbmlsCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQliZXRBbW91bnQFCmJldEFzc2V0SWQFA25pbAUOdXBkYXRlRGF0YUxpc3QJAAIBAhRUaGlzIGlzIG5vdCB5b3VyIGJldAkAAgECDUJldCBub3QgZm91bmQBaQEJYWNjZXB0QmlkAgVuZnRJZAViZXRJZAQIbmZ0QXNzZXQJAQ90cnlHZXRBc3NldEluZm8CBQVuZnRJZAINTkZUIG5vdCBmb3VuZAMJAAACCQDwBwIFBHRoaXMIBQhuZnRBc3NldAJpZAABBAlzZWxsZXJTdHIJAQx0cnlHZXRTdHJpbmcBCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCB19zZWxsZXIECmF1Y3Rpb25LZXkJAKwCAgkArAICAghhdWN0aW9uXwkA2AQBCAUIbmZ0QXNzZXQCaWQCBV9iaWRzAwkAAAIFCXNlbGxlclN0cgkApQgBCAUBaQZjYWxsZXIEC2F1Y3Rpb25EYXRhCQEMdHJ5R2V0U3RyaW5nAQUKYXVjdGlvbktleQMJAGYCCQCxAgEFC2F1Y3Rpb25EYXRhAAAEBGJldHMJALUJAgULYXVjdGlvbkRhdGECASwEDWJldFBhcnNlZERhdGEJALUJAgUFYmV0SWQCAV8ECGJldE93bmVyCQCRAwIFDWJldFBhcnNlZERhdGEAAAQJYmV0QW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUNYmV0UGFyc2VkRGF0YQABBApiZXRBc3NldElkAwkAAAIJAJEDAgUNYmV0UGFyc2VkRGF0YQACAgVXQVZFUwUEdW5pdAkA2QQBCQCRAwIFDWJldFBhcnNlZERhdGEAAgQPcm95YWx0eVJlY2VpdmVyCQEMdHJ5R2V0U3RyaW5nAQkArAICCQCsAgICBG5mdF8FBW5mdElkAhBfcm95YWx0eVJlY2VpdmVyBAtyb3lhbHR5UGFydAkAawMFCWJldEFtb3VudAUOcm95YWx0eVBlcmNlbnQAZAQJbWFya2V0RmVlCQBrAwUJYmV0QW1vdW50AAEAZAQGREFPRmVlCQBrAwUJYmV0QW1vdW50AAIAZAQOdW5sb2NrZWROZnRTdHIEByRtYXRjaDAJAPwHBAkBB0FkZHJlc3MBBRBwcm94eURhcHBBZGRyZXNzAgZ1bmxvY2sFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQVuZnRJZAABBQNuaWwDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQkArAICAitTb210aGluZyB3cm9uZyB3aGVuIHVubG9jayBORlQgaW4gYWRkcmVzczogCQDYBAEFEHByb3h5RGFwcEFkZHJlc3MDCQAAAgUOdW5sb2NrZWROZnRTdHIFDnVubG9ja2VkTmZ0U3RyAwMJAQ9jb250YWluc0VsZW1lbnQCBQRiZXRzBQViZXRJZAkAZgIFCWJldEFtb3VudAAABwkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQhiZXRPd25lcgABCQDZBAEFDnVubG9ja2VkTmZ0U3RyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIJAGUCBQliZXRBbW91bnQFC3JveWFsdHlQYXJ0BQltYXJrZXRGZWUFCmJldEFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFD3JveWFsdHlSZWNlaXZlcgULcm95YWx0eVBhcnQFCmJldEFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUQbWFya2V0RmVlQWRkcmVzcwUJbWFya2V0RmVlBQpiZXRBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCkRBT0FkZHJlc3MFBkRBT0ZlZQUKYmV0QXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCDF9idXlPdXRQcmljZQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCDl9idXlPdXRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBQVuZnRJZAIQX3JveWFsdHlSZWNlaXZlcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUFbmZ0SWQCDl9zZWxsZXJDb21tZW50CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBQVuZnRJZAIHX3NlbGxlcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUJc2VsbGVyU3RyAgVfbmZ0XwUFbmZ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwUJc2VsbGVyU3RyAgVfbmZ0XwUFbmZ0SWQCDF9zdGFydFNhbGVBdAkAzAgCCQELRGVsZXRlRW50cnkBBQphdWN0aW9uS2V5BQNuaWwJARJhbGxUcmFuc2ZlcnNGb3JCaWQCCQDYBAEIBQhuZnRBc3NldAJpZAUFYmV0SWQJAAIBAhNCZXQgbm90IGZvdW5kIGJ5IElkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQINQmV0IG5vdCBmb3VuZAkAAgECFFlvdSBhcmUgbm90IGEgc2VsbGVyCQACAQIZTkZUIG5vdCBmb3VuZCBvbiBjb250cmFjdAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXnMVgv9", "height": 3449790, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8zmgViw2ysB3xjhRvzEKP32hhj3v3WSGA8posYuTzadh Next: C8rmsQ7yP8UPFMHASxXytiK8UnhW9u89kqidYc8C3tEm Diff:
OldNewDifferences
1010 let puzzleStakeAddress = base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS'
1111
1212 let proxyDappAddress = base58'3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A'
13+
14+let adminAddress = Address(base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD')
1315
1416 let nftDuckWrapper = base58'3P3pDosq4GCwfJkvq4yqKvvoTwmoqc9qPmo'
1517
113115 }
114116
115117
118+func isAddressBan (address) = match getBoolean((("address_" + address) + "_banned")) {
119+ case t: Boolean =>
120+ t
121+ case _ =>
122+ false
123+}
124+
125+
116126 @Callable(i)
117127 func sellNFT (buyOutPrice,buyOutAssetId,sellerComment) = {
118128 let pmt = if (if ((size(i.payments) == 1))
124134 let buyOutAsset = if (isFree)
125135 then unit
126136 else getAssetBytes(buyOutAssetId)
127- if (isDefined(pmt.assetId))
128- then {
129- let nftId = value(pmt.assetId)
130- let nft = match assetInfo(nftId) {
131- case a: Asset =>
132- a
133- case _ =>
134- throw("Can't find NFT")
135- }
136- if (checkNFT(nft))
137- then if (if (isFree)
138- then true
139- else (buyOutPrice > 0))
140- then {
141- let assetNameStr = toBase58String(nft.id)
142- let nftIssuer = match getString(Address(createNftDapp), (("nft_" + assetNameStr) + "_issuer")) {
143- case a: String =>
144- a
145- case _ =>
146- toString(i.caller)
147- }
148- let royaltyReceiver = if ((nftIssuer != toBase58String(nftSignArtWrapper)))
149- then nftIssuer
150- else split_4C(split_4C(value(assetInfo(nftId)).description, ".")[0], " ")[2]
137+ if (isAddressBan(toString(i.originCaller)))
138+ then throw("You are banned")
139+ else if (isDefined(pmt.assetId))
140+ then {
141+ let nftId = value(pmt.assetId)
142+ let nft = match assetInfo(nftId) {
143+ case a: Asset =>
144+ a
145+ case _ =>
146+ throw("Can't find NFT")
147+ }
148+ if (checkNFT(nft))
149+ then if (if (isFree)
150+ then true
151+ else (buyOutPrice > 0))
152+ then {
153+ let assetNameStr = toBase58String(nft.id)
154+ let nftIssuer = match getString(Address(createNftDapp), (("nft_" + assetNameStr) + "_issuer")) {
155+ case a: String =>
156+ a
157+ case _ =>
158+ toString(i.caller)
159+ }
160+ let royaltyReceiver = if ((nftIssuer != toBase58String(nftSignArtWrapper)))
161+ then nftIssuer
162+ else split_4C(split_4C(value(assetInfo(nftId)).description, ".")[0], " ")[2]
151163 [IntegerEntry((("nft_" + assetNameStr) + "_buyOutPrice"), if (isFree)
152- then 0
153- else buyOutPrice), StringEntry((("nft_" + assetNameStr) + "_buyOutAssetId"), if (isFree)
154- then "free"
155- else getAssetString(buyOutAsset)), StringEntry((("nft_" + assetNameStr) + "_royaltyReceiver"), royaltyReceiver), StringEntry((("nft_" + assetNameStr) + "_sellerComment"), sellerComment), StringEntry((("nft_" + assetNameStr) + "_seller"), toString(i.originCaller)), StringEntry(((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr), assetNameStr), IntegerEntry((((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr) + "_startSaleAt"), height)]
156- }
157- else throw("Price must be greater than zero")
158- else throw("NFT issued by another dapp")
159- }
160- else throw("NFT is not attached to the transaction")
164+ then 0
165+ else buyOutPrice), StringEntry((("nft_" + assetNameStr) + "_buyOutAssetId"), if (isFree)
166+ then "free"
167+ else getAssetString(buyOutAsset)), StringEntry((("nft_" + assetNameStr) + "_royaltyReceiver"), royaltyReceiver), StringEntry((("nft_" + assetNameStr) + "_sellerComment"), sellerComment), StringEntry((("nft_" + assetNameStr) + "_seller"), toString(i.originCaller)), StringEntry(((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr), assetNameStr), IntegerEntry((((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr) + "_startSaleAt"), height)]
168+ }
169+ else throw("Price must be greater than zero")
170+ else throw("NFT issued by another dapp")
171+ }
172+ else throw("NFT is not attached to the transaction")
161173 }
162174
163175
248260 let nftAsset = tryGetAssetInfo(nftId, "NFT not found")
249261 let auctionKey = (("auction_" + toBase58String(nftAsset.id)) + "_bids")
250262 if (if ((size(sellerStr) > 0))
251- then (sellerStr == toString(i.originCaller))
263+ then if ((sellerStr == toString(i.originCaller)))
264+ then true
265+ else (adminAddress == i.originCaller)
252266 else false)
253267 then $Tuple2(([ScriptTransfer(i.caller, 1, nftAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_sellerComment")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt")), DeleteEntry(auctionKey)] ++ allTransfersForBid(toBase58String(nftAsset.id), "")), nftId)
254268 else throw("You are not a seller")
255269 }
270+
271+
272+
273+@Callable(i)
274+func ban (address) = if ((i.caller == adminAddress))
275+ then [BooleanEntry((("address_" + address) + "_banned"), true)]
276+ else throw("Allow only for admin")
277+
278+
279+
280+@Callable(i)
281+func unBan (address) = if ((i.caller == adminAddress))
282+ then [DeleteEntry((("address_" + address) + "_banned"))]
283+ else throw("Allow only for admin")
256284
257285
258286
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let createNftDapp = base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By'
55
66 let marketFeeAddress = Address(base58'3PKvcEmyHvo2PRsKhpKrDjmSNmnsuHn3UBR')
77
88 let DAOAddress = Address(base58'3P975LUuqc7uBPiSxp3nemf2FZh62zfirSh')
99
1010 let puzzleStakeAddress = base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS'
1111
1212 let proxyDappAddress = base58'3P6fAxtw12pjFhayEfpcUWxgu2BHVCeP78A'
13+
14+let adminAddress = Address(base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD')
1315
1416 let nftDuckWrapper = base58'3P3pDosq4GCwfJkvq4yqKvvoTwmoqc9qPmo'
1517
1618 let nftSignArtWrapper = base58'3PPgeYTWMRZ7S7jSLpnVuKKB9r6XuDk3ndC'
1719
1820 let duckFeeAddress = base58'3P6AobNbcQ3ZjcRY37mJPKN8PP9Giz8kgeY'
1921
2022 let ducksPercent = 30
2123
2224 let royaltyPercent = 7
2325
2426 func isNFT (asset) = if (if ((asset.decimals == 0))
2527 then (asset.reissuable == false)
2628 else false)
2729 then (asset.quantity == 1)
2830 else false
2931
3032
3133 func checkNFT (asset) = if (if (if ((asset.issuer.bytes == createNftDapp))
3234 then (asset.decimals == 0)
3335 else false)
3436 then (asset.reissuable == false)
3537 else false)
3638 then (asset.quantity == 1)
3739 else false
3840
3941
4042 func tryGetInteger (key) = match getInteger(this, key) {
4143 case b: Int =>
4244 b
4345 case _ =>
4446 0
4547 }
4648
4749
4850 func tryGetString (key) = match getString(this, key) {
4951 case b: String =>
5052 b
5153 case _ =>
5254 ""
5355 }
5456
5557
5658 func tryGetAssetInfo (assetId,errorMsg) = match assetInfo(fromBase58String(assetId)) {
5759 case a: Asset =>
5860 a
5961 case _ =>
6062 throw(errorMsg)
6163 }
6264
6365
6466 func getAssetString (assetId) = match assetId {
6567 case b: ByteVector =>
6668 toBase58String(b)
6769 case _ =>
6870 "WAVES"
6971 }
7072
7173
7274 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
7375 then unit
7476 else fromBase58String(assetIdStr)
7577
7678
7779 func allTransfersForBid (nftId,exclude) = {
7880 let auctionKey = (("auction_" + nftId) + "_bids")
7981 let auctionData = tryGetString(auctionKey)
8082 let excludeId = if ((size(exclude) > 0))
8183 then exclude
8284 else ""
8385 if ((size(auctionData) == 0))
8486 then nil
8587 else {
8688 func getReturnTransactions (accum,next) = {
8789 let betParsedData = split(next, "_")
8890 let betOwner = betParsedData[0]
8991 let betAmount = parseIntValue(betParsedData[1])
9092 let betAssetId = if ((betParsedData[2] == "WAVES"))
9193 then unit
9294 else fromBase58String(betParsedData[2])
9395 if (if ((size(excludeId) > 0))
9496 then (excludeId == next)
9597 else false)
9698 then accum
9799 else (accum :+ ScriptTransfer(Address(fromBase58String(betOwner)), betAmount, betAssetId))
98100 }
99101
100102 let $l = split(auctionData, ",")
101103 let $s = size($l)
102104 let $acc0 = nil
103105 func $f0_1 ($a,$i) = if (($i >= $s))
104106 then $a
105107 else getReturnTransactions($a, $l[$i])
106108
107109 func $f0_2 ($a,$i) = if (($i >= $s))
108110 then $a
109111 else throw("List size exceeds 26")
110112
111113 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26)
112114 }
113115 }
114116
115117
118+func isAddressBan (address) = match getBoolean((("address_" + address) + "_banned")) {
119+ case t: Boolean =>
120+ t
121+ case _ =>
122+ false
123+}
124+
125+
116126 @Callable(i)
117127 func sellNFT (buyOutPrice,buyOutAssetId,sellerComment) = {
118128 let pmt = if (if ((size(i.payments) == 1))
119129 then (i.payments[0].amount == 1)
120130 else false)
121131 then i.payments[0]
122132 else throw("NFT not listed as payment")
123133 let isFree = (buyOutAssetId == "free")
124134 let buyOutAsset = if (isFree)
125135 then unit
126136 else getAssetBytes(buyOutAssetId)
127- if (isDefined(pmt.assetId))
128- then {
129- let nftId = value(pmt.assetId)
130- let nft = match assetInfo(nftId) {
131- case a: Asset =>
132- a
133- case _ =>
134- throw("Can't find NFT")
135- }
136- if (checkNFT(nft))
137- then if (if (isFree)
138- then true
139- else (buyOutPrice > 0))
140- then {
141- let assetNameStr = toBase58String(nft.id)
142- let nftIssuer = match getString(Address(createNftDapp), (("nft_" + assetNameStr) + "_issuer")) {
143- case a: String =>
144- a
145- case _ =>
146- toString(i.caller)
147- }
148- let royaltyReceiver = if ((nftIssuer != toBase58String(nftSignArtWrapper)))
149- then nftIssuer
150- else split_4C(split_4C(value(assetInfo(nftId)).description, ".")[0], " ")[2]
137+ if (isAddressBan(toString(i.originCaller)))
138+ then throw("You are banned")
139+ else if (isDefined(pmt.assetId))
140+ then {
141+ let nftId = value(pmt.assetId)
142+ let nft = match assetInfo(nftId) {
143+ case a: Asset =>
144+ a
145+ case _ =>
146+ throw("Can't find NFT")
147+ }
148+ if (checkNFT(nft))
149+ then if (if (isFree)
150+ then true
151+ else (buyOutPrice > 0))
152+ then {
153+ let assetNameStr = toBase58String(nft.id)
154+ let nftIssuer = match getString(Address(createNftDapp), (("nft_" + assetNameStr) + "_issuer")) {
155+ case a: String =>
156+ a
157+ case _ =>
158+ toString(i.caller)
159+ }
160+ let royaltyReceiver = if ((nftIssuer != toBase58String(nftSignArtWrapper)))
161+ then nftIssuer
162+ else split_4C(split_4C(value(assetInfo(nftId)).description, ".")[0], " ")[2]
151163 [IntegerEntry((("nft_" + assetNameStr) + "_buyOutPrice"), if (isFree)
152- then 0
153- else buyOutPrice), StringEntry((("nft_" + assetNameStr) + "_buyOutAssetId"), if (isFree)
154- then "free"
155- else getAssetString(buyOutAsset)), StringEntry((("nft_" + assetNameStr) + "_royaltyReceiver"), royaltyReceiver), StringEntry((("nft_" + assetNameStr) + "_sellerComment"), sellerComment), StringEntry((("nft_" + assetNameStr) + "_seller"), toString(i.originCaller)), StringEntry(((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr), assetNameStr), IntegerEntry((((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr) + "_startSaleAt"), height)]
156- }
157- else throw("Price must be greater than zero")
158- else throw("NFT issued by another dapp")
159- }
160- else throw("NFT is not attached to the transaction")
164+ then 0
165+ else buyOutPrice), StringEntry((("nft_" + assetNameStr) + "_buyOutAssetId"), if (isFree)
166+ then "free"
167+ else getAssetString(buyOutAsset)), StringEntry((("nft_" + assetNameStr) + "_royaltyReceiver"), royaltyReceiver), StringEntry((("nft_" + assetNameStr) + "_sellerComment"), sellerComment), StringEntry((("nft_" + assetNameStr) + "_seller"), toString(i.originCaller)), StringEntry(((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr), assetNameStr), IntegerEntry((((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr) + "_startSaleAt"), height)]
168+ }
169+ else throw("Price must be greater than zero")
170+ else throw("NFT issued by another dapp")
171+ }
172+ else throw("NFT is not attached to the transaction")
161173 }
162174
163175
164176
165177 @Callable(i)
166178 func buyNFT (nftId) = {
167179 let pmt = if ((size(i.payments) == 1))
168180 then i.payments[0]
169181 else throw("Attached payment is required")
170182 let buyOutPrice = tryGetInteger((("nft_" + nftId) + "_buyOutPrice"))
171183 let buyOutAssetIdStr = tryGetString((("nft_" + nftId) + "_buyOutAssetId"))
172184 let royaltyReceiver = tryGetString((("nft_" + nftId) + "_royaltyReceiver"))
173185 let sellerStr = tryGetString((("nft_" + nftId) + "_seller"))
174186 let isFree = (buyOutAssetIdStr == "free")
175187 let nftAsset = tryGetAssetInfo(nftId, "NFT not found")
176188 let buyOutAssetId = if (if (isFree)
177189 then true
178190 else (buyOutAssetIdStr == "WAVES"))
179191 then unit
180192 else match assetInfo(fromBase58String(buyOutAssetIdStr)) {
181193 case a: Asset =>
182194 a.id
183195 case _ =>
184196 throw("Buyout asset not found")
185197 }
186198 let auctionKey = (("auction_" + toBase58String(nftAsset.id)) + "_bids")
187199 if (if (if (isFree)
188200 then (buyOutPrice == 0)
189201 else false)
190202 then true
191203 else if ((buyOutPrice > 0))
192204 then (pmt.amount >= buyOutPrice)
193205 else false)
194206 then {
195207 let duckNftId = valueOrElse(getString(Address(nftDuckWrapper), (("nft_" + nftId) + "_duckId")), "")
196208 let transferFees = if ((size(duckNftId) > 0))
197209 then {
198210 let duckFee = fraction(buyOutPrice, ducksPercent, 100)
199211 [ScriptTransfer(Address(fromBase58String(sellerStr)), (buyOutPrice - duckFee), buyOutAssetId), ScriptTransfer(Address(duckFeeAddress), duckFee, buyOutAssetId)]
200212 }
201213 else {
202214 let royaltyPart = fraction(buyOutPrice, royaltyPercent, 100)
203215 let marketFee = fraction(buyOutPrice, 1, 100)
204216 let DAOFee = fraction(buyOutPrice, 2, 100)
205217 [ScriptTransfer(Address(fromBase58String(sellerStr)), ((buyOutPrice - royaltyPart) - marketFee), buyOutAssetId), ScriptTransfer(Address(fromBase58String(royaltyReceiver)), royaltyPart, buyOutAssetId), ScriptTransfer(marketFeeAddress, marketFee, buyOutAssetId), ScriptTransfer(DAOAddress, DAOFee, buyOutAssetId)]
206218 }
207219 if (if (isFree)
208220 then true
209221 else (pmt.assetId == buyOutAssetId))
210222 then {
211223 let isGroup = valueOrElse(getBoolean(Address(createNftDapp), (("nft_" + nftId) + "_isGroup")), false)
212224 if (!(isGroup))
213225 then $Tuple2((([ScriptTransfer(i.caller, 1, nftAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_sellerComment")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt")), DeleteEntry(auctionKey)] ++ transferFees) ++ allTransfersForBid(toBase58String(nftAsset.id), "")), toBase58String(nftAsset.id))
214226 else {
215227 let newNFTIdStr = match invoke(Address(createNftDapp), "mintFromGroup", [nftId], nil) {
216228 case s: String =>
217229 s
218230 case _ =>
219231 throw("Somthing wrong when mint multiple NFT")
220232 }
221233 if ((newNFTIdStr == newNFTIdStr))
222234 then {
223235 let groupAvailable = value(getInteger(Address(createNftDapp), (("group_" + nftId) + "_available")))
224236 if ((groupAvailable == groupAvailable))
225237 then if ((groupAvailable == 0))
226238 then {
227239 let inv = invoke(Address(createNftDapp), "burnNFT", nil, [AttachedPayment(fromBase58String(nftId), 1)])
228240 if ((inv == inv))
229241 then $Tuple2(([ScriptTransfer(i.caller, 1, fromBase58String(newNFTIdStr)), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_sellerComment")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt")), DeleteEntry(auctionKey)] ++ transferFees), newNFTIdStr)
230242 else throw("Strict value is not equal to itself.")
231243 }
232244 else $Tuple2(([ScriptTransfer(i.caller, 1, fromBase58String(newNFTIdStr))] ++ transferFees), newNFTIdStr)
233245 else throw("Strict value is not equal to itself.")
234246 }
235247 else throw("Strict value is not equal to itself.")
236248 }
237249 }
238250 else throw("The buyout asset does not match the purchase asset")
239251 }
240252 else throw("Payment amount must be greater than zero")
241253 }
242254
243255
244256
245257 @Callable(i)
246258 func cancelSell (nftId) = {
247259 let sellerStr = tryGetString((("nft_" + nftId) + "_seller"))
248260 let nftAsset = tryGetAssetInfo(nftId, "NFT not found")
249261 let auctionKey = (("auction_" + toBase58String(nftAsset.id)) + "_bids")
250262 if (if ((size(sellerStr) > 0))
251- then (sellerStr == toString(i.originCaller))
263+ then if ((sellerStr == toString(i.originCaller)))
264+ then true
265+ else (adminAddress == i.originCaller)
252266 else false)
253267 then $Tuple2(([ScriptTransfer(i.caller, 1, nftAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_sellerComment")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt")), DeleteEntry(auctionKey)] ++ allTransfersForBid(toBase58String(nftAsset.id), "")), nftId)
254268 else throw("You are not a seller")
255269 }
270+
271+
272+
273+@Callable(i)
274+func ban (address) = if ((i.caller == adminAddress))
275+ then [BooleanEntry((("address_" + address) + "_banned"), true)]
276+ else throw("Allow only for admin")
277+
278+
279+
280+@Callable(i)
281+func unBan (address) = if ((i.caller == adminAddress))
282+ then [DeleteEntry((("address_" + address) + "_banned"))]
283+ else throw("Allow only for admin")
256284
257285
258286
259287 @Callable(i)
260288 func like (nftId) = {
261289 let nftAsset = assetInfo(fromBase58String(nftId))
262290 let duckNftId = valueOrElse(getString(Address(nftDuckWrapper), (("nft_" + nftId) + "_duckId")), "")
263291 let signArtNftId = valueOrElse(getString(Address(nftSignArtWrapper), (("signArtNft_" + nftId) + "_assetId")), "")
264292 let updatedNftId = if ((size(duckNftId) > 0))
265293 then duckNftId
266294 else if ((size(signArtNftId) > 0))
267295 then signArtNftId
268296 else nftId
269297 if (if (isDefined(nftAsset))
270298 then checkNFT(value(nftAsset))
271299 else false)
272300 then {
273301 let callerAddress = toString(i.caller)
274302 let countStaked = match getInteger(Address(puzzleStakeAddress), (callerAddress + "_staked")) {
275303 case c: Int =>
276304 c
277305 case _ =>
278306 0
279307 }
280308 if ((countStaked >= 100000000))
281309 then {
282310 let nftLikesKey = (("nft_" + updatedNftId) + "_likes")
283311 let nftLikesValue = tryGetString((("nft_" + updatedNftId) + "_likes"))
284312 if (!(isDefined(indexOf(nftLikesValue, callerAddress))))
285313 then {
286314 let newLikesValue = if ((size(nftLikesValue) == 0))
287315 then toString(i.caller)
288316 else ((nftLikesValue + ",") + callerAddress)
289317 [StringEntry(nftLikesKey, newLikesValue)]
290318 }
291319 else throw("You have already voted")
292320 }
293321 else throw("You can like if you stake 1 or more Puzzles")
294322 }
295323 else throw("Invalid NFT id")
296324 }
297325
298326
299327
300328 @Callable(i)
301329 func placeBid (nftId) = {
302330 let isGroup = valueOrElse(getBoolean(Address(createNftDapp), (("nft_" + nftId) + "_isGroup")), false)
303331 if (isGroup)
304332 then throw("This function is not temporarily available for multiple NFTs")
305333 else if (if ((i.payments[0].amount > 0))
306334 then if (!(isDefined(i.payments[0].assetId)))
307335 then true
308336 else !(isNFT(value(assetInfo(value(i.payments[0].assetId)))))
309337 else false)
310338 then {
311339 let nftAsset = tryGetAssetInfo(nftId, "NFT not found")
312340 let nftAmount = match assetBalance(this, nftAsset.id) {
313341 case c: Int =>
314342 c
315343 case _ =>
316344 0
317345 }
318346 let sellerStr = getStringValue((("nft_" + nftId) + "_seller"))
319347 if ((sellerStr != toString(i.caller)))
320348 then if (if ((nftAmount == 1))
321349 then checkNFT(nftAsset)
322350 else false)
323351 then {
324352 let callerStr = toString(i.caller)
325353 let assetAmount = i.payments[0].amount
326354 let assetIdStr = getAssetString(i.payments[0].assetId)
327355 let auctionKey = (("auction_" + toBase58String(nftAsset.id)) + "_bids")
328356 let auctionData = tryGetString(auctionKey)
329357 let addedData = ((((callerStr + "_") + toString(assetAmount)) + "_") + assetIdStr)
330358 if ((21 > (size(split(auctionData, ",")) + 1)))
331359 then {
332360 let exist = contains(auctionData, toString(i.caller))
333361 if (!(exist))
334362 then {
335363 let updatedData = match getString(auctionKey) {
336364 case s: String =>
337365 ((s + ",") + addedData)
338366 case _ =>
339367 addedData
340368 }
341369 [StringEntry(auctionKey, updatedData)]
342370 }
343371 else throw("You have already bid")
344372 }
345373 else throw("You cannot create more than 27 bets for 1 NFT")
346374 }
347375 else throw("Invalid NFT Id.")
348376 else throw("Seller cannot bid")
349377 }
350378 else throw("Payment not attached")
351379 }
352380
353381
354382
355383 @Callable(i)
356384 func cancelBid (nftId,betId) = {
357385 let nftAsset = tryGetAssetInfo(nftId, "NFT not found")
358386 let auctionKey = (("auction_" + toBase58String(nftAsset.id)) + "_bids")
359387 let auctionData = tryGetString(auctionKey)
360388 if ((size(auctionData) > 0))
361389 then {
362390 let callerStr = toString(i.caller)
363391 let bets = split(auctionData, ",")
364392 let betIndex = match indexOf(bets, betId) {
365393 case idx: Int =>
366394 idx
367395 case _ =>
368396 throw("Bet not found by id")
369397 }
370398 let betData = bets[betIndex]
371399 let betParsedData = split(betData, "_")
372400 let betOwner = betParsedData[0]
373401 let betAmount = parseIntValue(betParsedData[1])
374402 let betAssetId = if ((betParsedData[2] == "WAVES"))
375403 then unit
376404 else fromBase58String(betParsedData[2])
377405 if ((betOwner == callerStr))
378406 then {
379407 let newBets = removeByIndex(bets, betIndex)
380408 let updateDataList = if ((size(newBets) == 0))
381409 then [DeleteEntry(auctionKey)]
382410 else [StringEntry(auctionKey, makeString(newBets, ","))]
383411 ([ScriptTransfer(i.caller, betAmount, betAssetId)] ++ updateDataList)
384412 }
385413 else throw("This is not your bet")
386414 }
387415 else throw("Bet not found")
388416 }
389417
390418
391419
392420 @Callable(i)
393421 func acceptBid (nftId,betId) = {
394422 let nftAsset = tryGetAssetInfo(nftId, "NFT not found")
395423 if ((assetBalance(this, nftAsset.id) == 1))
396424 then {
397425 let sellerStr = tryGetString((("nft_" + nftId) + "_seller"))
398426 let auctionKey = (("auction_" + toBase58String(nftAsset.id)) + "_bids")
399427 if ((sellerStr == toString(i.caller)))
400428 then {
401429 let auctionData = tryGetString(auctionKey)
402430 if ((size(auctionData) > 0))
403431 then {
404432 let bets = split(auctionData, ",")
405433 let betParsedData = split(betId, "_")
406434 let betOwner = betParsedData[0]
407435 let betAmount = parseIntValue(betParsedData[1])
408436 let betAssetId = if ((betParsedData[2] == "WAVES"))
409437 then unit
410438 else fromBase58String(betParsedData[2])
411439 let royaltyReceiver = tryGetString((("nft_" + nftId) + "_royaltyReceiver"))
412440 let royaltyPart = fraction(betAmount, royaltyPercent, 100)
413441 let marketFee = fraction(betAmount, 1, 100)
414442 let DAOFee = fraction(betAmount, 2, 100)
415443 let unlockedNftStr = match invoke(Address(proxyDappAddress), "unlock", nil, [AttachedPayment(fromBase58String(nftId), 1)]) {
416444 case s: String =>
417445 s
418446 case _ =>
419447 throw(("Somthing wrong when unlock NFT in address: " + toBase58String(proxyDappAddress)))
420448 }
421449 if ((unlockedNftStr == unlockedNftStr))
422450 then if (if (containsElement(bets, betId))
423451 then (betAmount > 0)
424452 else false)
425453 then ([ScriptTransfer(Address(fromBase58String(betOwner)), 1, fromBase58String(unlockedNftStr)), ScriptTransfer(i.caller, ((betAmount - royaltyPart) - marketFee), betAssetId), ScriptTransfer(Address(fromBase58String(royaltyReceiver)), royaltyPart, betAssetId), ScriptTransfer(marketFeeAddress, marketFee, betAssetId), ScriptTransfer(DAOAddress, DAOFee, betAssetId), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_sellerComment")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt")), DeleteEntry(auctionKey)] ++ allTransfersForBid(toBase58String(nftAsset.id), betId))
426454 else throw("Bet not found by Id")
427455 else throw("Strict value is not equal to itself.")
428456 }
429457 else throw("Bet not found")
430458 }
431459 else throw("You are not a seller")
432460 }
433461 else throw("NFT not found on contract")
434462 }
435463
436464
437465 @Verifier(tx)
438466 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
439467

github/deemru/w8io/3ef1775 
78.28 ms