2022.05.25 23:13 [3133167] smart account 3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc > SELF 0.00000000 Waves
{ "type": 13, "id": "2VhduB9rLHP67b9ZrCNAb2gVA1KyXkm1MXMWQoevk3L2", "fee": 1400000, "feeAssetId": null, "timestamp": 1653509633274, "version": 2, "chainId": 87, "sender": "3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc", "senderPublicKey": "3pJsmGRpWHpqyaAjeX7BacMEfYx32LMNN4qwxQqASBmi", "proofs": [ "4fE8nUoXx9w3ZsRwqrp115oz5cZyVCTUrDW9vp6Hp3ihPEWgfq3WSyThgXZJ9qfyqAj7XMQ3c5HcaF82Fx4ccfiY" ], "script": "base64:AAIFAAAAAAAAACgIAhIECgIBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEgQKAggIEgQKAggIAAAADgAAAAANY3JlYXRlTmZ0RGFwcAEAAAAaAVeT3cTSF+cgCv33IRJO8PB2ZyaDA3jUXEwAAAAAEG1hcmtldEZlZUFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVeKrBYoVkFMTY2p7+L8gNbzfcTXyPMneqoAAAAAEnB1enpsZVN0YWtlQWRkcmVzcwEAAAAaAVeUaIz57qK5qp/W9Y68qY9nGpwG9BYpibsAAAAADm5mdER1Y2tXcmFwcGVyAQAAABoBVxStRFKbpf3/YRf/2Drn8WeKgJwUuC/PHgAAAAARbmZ0U2lnbkFydFdyYXBwZXIBAAAAGgFX7qEaFcPxtl9EZf9fyBU5xHlF1RhFRzAHAAAAAA5yb3lhbHR5UGVyY2VudAAAAAAAAAAABwEAAAAFaXNORlQAAAABAAAABWFzc2V0AwMJAAAAAAAAAggFAAAABWFzc2V0AAAACGRlY2ltYWxzAAAAAAAAAAAACQAAAAAAAAIIBQAAAAVhc3NldAAAAApyZWlzc3VhYmxlBwcJAAAAAAAAAggFAAAABWFzc2V0AAAACHF1YW50aXR5AAAAAAAAAAABBwEAAAAIY2hlY2tORlQAAAABAAAABWFzc2V0AwMDCQAAAAAAAAIICAUAAAAFYXNzZXQAAAAGaXNzdWVyAAAABWJ5dGVzBQAAAA1jcmVhdGVOZnREYXBwCQAAAAAAAAIIBQAAAAVhc3NldAAAAAhkZWNpbWFscwAAAAAAAAAAAAcJAAAAAAAAAggFAAAABWFzc2V0AAAACnJlaXNzdWFibGUHBwkAAAAAAAACCAUAAAAFYXNzZXQAAAAIcXVhbnRpdHkAAAAAAAAAAAEHAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIAAAAAAAAAAAABAAAADHRyeUdldFN0cmluZwAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAgAAAAABAAAAD3RyeUdldEFzc2V0SW5mbwAAAAIAAAAHYXNzZXRJZAAAAAhlcnJvck1zZwQAAAAHJG1hdGNoMAkAA+wAAAABCQACWQAAAAEFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABUFzc2V0BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAEFAAAACGVycm9yTXNnAQAAAA5nZXRBc3NldFN0cmluZwAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAABYgUAAAAHJG1hdGNoMAkAAlgAAAABBQAAAAFiAgAAAAVXQVZFUwEAAAANZ2V0QXNzZXRCeXRlcwAAAAEAAAAKYXNzZXRJZFN0cgMJAAAAAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQUAAAAKYXNzZXRJZFN0cgEAAAATZ2V0QWxsRGVsZXRlRW50cmllcwAAAAIAAAAFbmZ0SWQAAAAHZXhjbHVkZQQAAAAKYXVjdGlvbktleQkAASwAAAACCQABLAAAAAICAAAACGF1Y3Rpb25fBQAAAAVuZnRJZAIAAAAFX2JldHMEAAAAC2F1Y3Rpb25EYXRhCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQUAAAAKYXVjdGlvbktleQQAAAAJZXhjbHVkZUlkAwkAAGYAAAACCQABMQAAAAEFAAAAB2V4Y2x1ZGUAAAAAAAAAAAAFAAAAB2V4Y2x1ZGUCAAAAAAMJAAAAAAAAAgkAATEAAAABBQAAAAthdWN0aW9uRGF0YQAAAAAAAAAAAAUAAAADbmlsCgEAAAAVZ2V0UmV0dXJuVHJhbnNhY3Rpb25zAAAAAgAAAAVhY2N1bQAAAARuZXh0BAAAAA1iZXRQYXJzZWREYXRhCQAEtQAAAAIFAAAABG5leHQCAAAAAV8EAAAACGJldE93bmVyCQABkQAAAAIFAAAADWJldFBhcnNlZERhdGEAAAAAAAAAAAAEAAAACWJldEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADWJldFBhcnNlZERhdGEAAAAAAAAAAAEEAAAACmJldEFzc2V0SWQDCQAAAAAAAAIJAAGRAAAAAgUAAAANYmV0UGFyc2VkRGF0YQAAAAAAAAAAAgIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQkAAZEAAAACBQAAAA1iZXRQYXJzZWREYXRhAAAAAAAAAAACAwMJAABmAAAAAgkAATEAAAABBQAAAAlleGNsdWRlSWQAAAAAAAAAAAAJAAAAAAAAAgUAAAAJZXhjbHVkZUlkBQAAAARuZXh0BwUAAAAFYWNjdW0JAARNAAAAAgUAAAAFYWNjdW0JAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAhiZXRPd25lcgUAAAAJYmV0QW1vdW50BQAAAApiZXRBc3NldElkCgAAAAACJGwJAAS1AAAAAgUAAAALYXVjdGlvbkRhdGECAAAAASwKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwBQAAAANuaWwKAQAAAAUkZjBfMQAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAQAAABVnZXRSZXR1cm5UcmFuc2FjdGlvbnMAAAACBQAAAAIkYQkAAZEAAAACBQAAAAIkbAUAAAACJGkKAQAAAAUkZjBfMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAAUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQAAAAUkZjBfMgAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHAAAAAAAAAAAIAAAAAAAAAAAJAAAAAAAAAAAKAAAAAAAAAAALAAAAAAAAAAAMAAAAAAAAAAANAAAAAAAAAAAOAAAAAAAAAAAPAAAAAAAAAAAQAAAAAAAAAAARAAAAAAAAAAASAAAAAAAAAAATAAAAAAAAAAAUAAAAAAAAAAAVAAAAAAAAAAAWAAAAAAAAAAAXAAAAAAAAAAAYAAAAAAAAAAAZAAAAAAAAAAAaAAAAAAAAAAAbAAAAAAAAAAAcAAAAAAAAAAAdAAAAAAAAAAAeAAAAAAAAAAAfAAAAAAAAAAAgAAAAAAAAAAAhAAAAAAAAAAAiAAAAAAAAAAAjAAAAAAAAAAAkAAAAAAAAAAAlAAAAAAAAAAAmAAAAAAAAAAAnAAAAAAAAAAAoAAAAAAAAAAApAAAAAAAAAAAqAAAAAAAAAAArAAAAAAAAAAAsAAAAAAAAAAAtAAAAAAAAAAAuAAAAAAAAAAAvAAAAAAAAAAAwAAAAAAAAAAAxAAAAAAAAAAAyAAAABwAAAAFpAQAAAAdzZWxsTkZUAAAAAgAAAAtidXlPdXRQcmljZQAAAA1idXlPdXRBc3NldElkBAAAAANwbXQDAwkAAAAAAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAAAAAAAAAAAAQcJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAJAAACAAAAAQIAAAAZTkZUIG5vdCBsaXN0ZWQgYXMgcGF5bWVudAQAAAALYnV5T3V0QXNzZXQJAQAAAA1nZXRBc3NldEJ5dGVzAAAAAQUAAAANYnV5T3V0QXNzZXRJZAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAABW5mdElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAAA25mdAQAAAAHJG1hdGNoMAkAA+wAAAABBQAAAAVuZnRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAFQXNzZXQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAOQ2FuJ3QgZmluZCBORlQDCQEAAAAIY2hlY2tORlQAAAABBQAAAANuZnQDCQAAZgAAAAIFAAAAC2J1eU91dFByaWNlAAAAAAAAAAAABAAAAAxhc3NldE5hbWVTdHIJAAJYAAAAAQgFAAAAA25mdAAAAAJpZAQAAAAJbmZ0SXNzdWVyBAAAAAckbWF0Y2gwCQAEHQAAAAIJAQAAAAdBZGRyZXNzAAAAAQUAAAANY3JlYXRlTmZ0RGFwcAkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAADGFzc2V0TmFtZVN0cgIAAAAHX2lzc3VlcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAPcm95YWx0eVJlY2VpdmVyAwkBAAAAAiE9AAAAAgUAAAAJbmZ0SXNzdWVyCQACWAAAAAEFAAAAEW5mdFNpZ25BcnRXcmFwcGVyBQAAAAluZnRJc3N1ZXIJAAGRAAAAAgkABLUAAAACCQABkQAAAAIJAAS1AAAAAggJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAFbmZ0SWQAAAALZGVzY3JpcHRpb24CAAAAASAAAAAAAAAAAAICAAAAAS4AAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAxhc3NldE5hbWVTdHICAAAADF9idXlPdXRQcmljZQUAAAALYnV5T3V0UHJpY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAADGFzc2V0TmFtZVN0cgIAAAAOX2J1eU91dEFzc2V0SWQJAQAAAA5nZXRBc3NldFN0cmluZwAAAAEFAAAAC2J1eU91dEFzc2V0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAxhc3NldE5hbWVTdHICAAAAEF9yb3lhbHR5UmVjZWl2ZXIFAAAAD3JveWFsdHlSZWNlaXZlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAMYXNzZXROYW1lU3RyAgAAAAdfc2VsbGVyCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXICAAAABV9uZnRfBQAAAAxhc3NldE5hbWVTdHIFAAAADGFzc2V0TmFtZVN0cgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXICAAAABV9uZnRfBQAAAAxhc3NldE5hbWVTdHICAAAADF9zdGFydFNhbGVBdAUAAAAGaGVpZ2h0BQAAAANuaWwJAAACAAAAAQIAAAAfUHJpY2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybwkAAAIAAAABAgAAABpORlQgaXNzdWVkIGJ5IGFub3RoZXIgZGFwcAkAAAIAAAABAgAAACZORlQgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSB0cmFuc2FjdGlvbgAAAAFpAQAAAAZidXlORlQAAAABAAAABW5mdElkBAAAAANwbXQDCQAAAAAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAJAAACAAAAAQIAAAAcQXR0YWNoZWQgcGF5bWVudCBpcyByZXF1aXJlZAQAAAALYnV5T3V0UHJpY2UJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAAxfYnV5T3V0UHJpY2UEAAAADWJ1eU91dEFzc2V0SWQJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAADl9idXlPdXRBc3NldElkBAAAAA9yb3lhbHR5UmVjZWl2ZXIJAQAAAAx0cnlHZXRTdHJpbmcAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAAEF9yb3lhbHR5UmVjZWl2ZXIEAAAACXNlbGxlclN0cgkBAAAADHRyeUdldFN0cmluZwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAHX3NlbGxlcgQAAAAIbmZ0QXNzZXQJAQAAAA90cnlHZXRBc3NldEluZm8AAAACBQAAAAVuZnRJZAIAAAANTkZUIG5vdCBmb3VuZAQAAAALYnV5T3V0QXNzZXQJAQAAAA90cnlHZXRBc3NldEluZm8AAAACBQAAAA1idXlPdXRBc3NldElkAgAAABZCdXlvdXQgYXNzZXQgbm90IGZvdW5kAwMJAABmAAAAAgUAAAALYnV5T3V0UHJpY2UAAAAAAAAAAAAJAABnAAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAAC2J1eU91dFByaWNlBwQAAAALcm95YWx0eVBhcnQJAABrAAAAAwUAAAALYnV5T3V0UHJpY2UFAAAADnJveWFsdHlQZXJjZW50AAAAAAAAAABkBAAAAAltYXJrZXRGZWUJAABrAAAAAwUAAAALYnV5T3V0UHJpY2UAAAAAAAAAAAMAAAAAAAAAAGQDCQAAAAAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAgFAAAAC2J1eU91dEFzc2V0AAAAAmlkCQAFFAAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAAABCAUAAAAIbmZ0QXNzZXQAAAACaWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAACXNlbGxlclN0cgkAAGUAAAACCQAAZQAAAAIFAAAAC2J1eU91dFByaWNlBQAAAAtyb3lhbHR5UGFydAUAAAAJbWFya2V0RmVlCAUAAAALYnV5T3V0QXNzZXQAAAACaWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAD3JveWFsdHlSZWNlaXZlcgUAAAALcm95YWx0eVBhcnQIBQAAAAtidXlPdXRBc3NldAAAAAJpZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABBtYXJrZXRGZWVBZGRyZXNzBQAAAAltYXJrZXRGZWUIBQAAAAtidXlPdXRBc3NldAAAAAJpZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAADF9idXlPdXRQcmljZQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAADl9idXlPdXRBc3NldElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAQX3JveWFsdHlSZWNlaXZlcgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAAB19zZWxsZXIJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAACXNlbGxlclN0cgIAAAAFX25mdF8FAAAABW5mdElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAACXNlbGxlclN0cgIAAAAFX25mdF8FAAAABW5mdElkAgAAAAxfc3RhcnRTYWxlQXQFAAAAA25pbAkAAlgAAAABCAUAAAAIbmZ0QXNzZXQAAAACaWQJAAACAAAAAQIAAAAyVGhlIGJ1eW91dCBhc3NldCBkb2VzIG5vdCBtYXRjaCB0aGUgcHVyY2hhc2UgYXNzZXQJAAACAAAAAQIAAAAoUGF5bWVudCBhbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybwAAAAFpAQAAAApjYW5jZWxTZWxsAAAAAQAAAAVuZnRJZAQAAAAJc2VsbGVyU3RyCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAAdfc2VsbGVyBAAAAAhuZnRBc3NldAkBAAAAD3RyeUdldEFzc2V0SW5mbwAAAAIFAAAABW5mdElkAgAAAA1ORlQgbm90IGZvdW5kBAAAAAphdWN0aW9uS2V5CQABLAAAAAIJAAEsAAAAAgIAAAAIYXVjdGlvbl8JAAJYAAAAAQgFAAAACG5mdEFzc2V0AAAAAmlkAgAAAAVfYmV0cwMDCQAAZgAAAAIJAAExAAAAAQUAAAAJc2VsbGVyU3RyAAAAAAAAAAAACQAAAAAAAAIFAAAACXNlbGxlclN0cgkABCUAAAABCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIHCQAFFAAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAAABCAUAAAAIbmZ0QXNzZXQAAAACaWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAAxfYnV5T3V0UHJpY2UJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAA5fYnV5T3V0QXNzZXRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAAEF9yb3lhbHR5UmVjZWl2ZXIJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAAdfc2VsbGVyCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAlzZWxsZXJTdHICAAAABV9uZnRfBQAAAAVuZnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAlzZWxsZXJTdHICAAAABV9uZnRfBQAAAAVuZnRJZAIAAAAMX3N0YXJ0U2FsZUF0CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAACmF1Y3Rpb25LZXkFAAAAA25pbAUAAAAFbmZ0SWQJAAACAAAAAQIAAAAUWW91IGFyZSBub3QgYSBzZWxsZXIAAAABaQEAAAAEbGlrZQAAAAEAAAAFbmZ0SWQEAAAACG5mdEFzc2V0CQAD7AAAAAEJAAJZAAAAAQUAAAAFbmZ0SWQEAAAACWlzRHVja05mdAkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgkBAAAAB0FkZHJlc3MAAAABBQAAAA5uZnREdWNrV3JhcHBlcgkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAAdfZHVja0lkBAAAAAxpc1NpZ25BcnROZnQJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIJAQAAAAdBZGRyZXNzAAAAAQUAAAARbmZ0U2lnbkFydFdyYXBwZXIJAAEsAAAAAgkAASwAAAACAgAAAAtzaWduQXJ0TmZ0XwUAAAAFbmZ0SWQCAAAACF9hc3NldElkAwMDAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAACG5mdEFzc2V0CQEAAAABIQAAAAEFAAAACWlzRHVja05mdAcJAQAAAAEhAAAAAQUAAAAMaXNTaWduQXJ0TmZ0BwkBAAAACGNoZWNrTkZUAAAAAQkBAAAABXZhbHVlAAAAAQUAAAAIbmZ0QXNzZXQHBAAAAA1jYWxsZXJBZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAALY291bnRTdGFrZWQEAAAAByRtYXRjaDAJAAQaAAAAAgkBAAAAB0FkZHJlc3MAAAABBQAAABJwdXp6bGVTdGFrZUFkZHJlc3MJAAEsAAAAAgUAAAANY2FsbGVyQWRkcmVzcwIAAAAHX3N0YWtlZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFjBQAAAAckbWF0Y2gwBQAAAAFjAAAAAAAAAAAAAwkAAGcAAAACBQAAAAtjb3VudFN0YWtlZAAAAAAABfXhAAQAAAALbmZ0TGlrZXNLZXkJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAGX2xpa2VzBAAAAA1uZnRMaWtlc1ZhbHVlCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAAZfbGlrZXMDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQAEswAAAAIFAAAADW5mdExpa2VzVmFsdWUFAAAADWNhbGxlckFkZHJlc3MEAAAADW5ld0xpa2VzVmFsdWUDCQAAAAAAAAIJAAExAAAAAQUAAAANbmZ0TGlrZXNWYWx1ZQAAAAAAAAAAAAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAAEsAAAAAgkAASwAAAACBQAAAA1uZnRMaWtlc1ZhbHVlAgAAAAEsBQAAAA1jYWxsZXJBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAC25mdExpa2VzS2V5BQAAAA1uZXdMaWtlc1ZhbHVlBQAAAANuaWwJAAACAAAAAQIAAAAWWW91IGhhdmUgYWxyZWFkeSB2b3RlZAkAAAIAAAABAgAAACtZb3UgY2FuIGxpa2UgaWYgeW91IHN0YWtlIDEgb3IgbW9yZSBQdXp6bGVzCQAAAgAAAAECAAAADkludmFsaWQgTkZUIGlkAAAAAWkBAAAABmFkZEJldAAAAAEAAAAFbmZ0SWQDAwkAAGYAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQAAAAAAAAAAAADCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBgkBAAAAASEAAAABCQEAAAAFaXNORlQAAAABCQEAAAAFdmFsdWUAAAABCQAD7AAAAAEJAQAAAAV2YWx1ZQAAAAEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQHBAAAAAhuZnRBc3NldAkBAAAAD3RyeUdldEFzc2V0SW5mbwAAAAIFAAAABW5mdElkAgAAAA1ORlQgbm90IGZvdW5kBAAAAAluZnRBbW91bnQEAAAAByRtYXRjaDAJAAPwAAAAAgUAAAAEdGhpcwgFAAAACG5mdEFzc2V0AAAAAmlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWMFAAAAByRtYXRjaDAFAAAAAWMAAAAAAAAAAAADAwkAAAAAAAACBQAAAAluZnRBbW91bnQAAAAAAAAAAAEJAQAAAAhjaGVja05GVAAAAAEFAAAACG5mdEFzc2V0BwQAAAAJY2FsbGVyU3RyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAALYXNzZXRBbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAQAAAAKYXNzZXRJZFN0cgkBAAAADmdldEFzc2V0U3RyaW5nAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAKYXVjdGlvbktleQkAASwAAAACCQABLAAAAAICAAAACGF1Y3Rpb25fCQACWAAAAAEIBQAAAAhuZnRBc3NldAAAAAJpZAIAAAAFX2JldHMEAAAAC2F1Y3Rpb25EYXRhCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQUAAAAKYXVjdGlvbktleQQAAAAJYWRkZWREYXRhCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAACWNhbGxlclN0cgIAAAABXwkAAaQAAAABBQAAAAthc3NldEFtb3VudAIAAAABXwUAAAAKYXNzZXRJZFN0cgMJAABmAAAAAgAAAAAAAAAAMgkAAGQAAAACCQABkAAAAAEJAAS1AAAAAgUAAAALYXVjdGlvbkRhdGECAAAAASwAAAAAAAAAAAEEAAAABWV4aXN0CQEAAAAIY29udGFpbnMAAAACBQAAAAthdWN0aW9uRGF0YQUAAAAJYWRkZWREYXRhAwkBAAAAASEAAAABBQAAAAVleGlzdAQAAAALdXBkYXRlZERhdGEEAAAAByRtYXRjaDAJAAQiAAAAAQUAAAAKYXVjdGlvbktleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQABLAAAAAIJAAEsAAAAAgUAAAABcwIAAAABLAUAAAAJYWRkZWREYXRhBQAAAAlhZGRlZERhdGEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAKYXVjdGlvbktleQUAAAALdXBkYXRlZERhdGEFAAAAA25pbAkAAAIAAAABAgAAAApCZXQgZXhpc3RzCQAAAgAAAAECAAAALVlvdSBjYW5ub3QgY3JlYXRlIG1vcmUgdGhhbiA1MCBiZXRzIGZvciAxIE5GVAkAAAIAAAABAgAAAA9JbnZhbGlkIE5GVCBJZC4JAAACAAAAAQIAAAAUUGF5bWVudCBub3QgYXR0YWNoZWQAAAABaQEAAAAJZGVsZXRlQmV0AAAAAgAAAAVuZnRJZAAAAAViZXRJZAQAAAAIbmZ0QXNzZXQJAQAAAA90cnlHZXRBc3NldEluZm8AAAACBQAAAAVuZnRJZAIAAAANTkZUIG5vdCBmb3VuZAQAAAAKYXVjdGlvbktleQkAASwAAAACCQABLAAAAAICAAAACGF1Y3Rpb25fCQACWAAAAAEIBQAAAAhuZnRBc3NldAAAAAJpZAIAAAAFX2JldHMEAAAAC2F1Y3Rpb25EYXRhCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQUAAAAKYXVjdGlvbktleQMJAABmAAAAAgkAATEAAAABBQAAAAthdWN0aW9uRGF0YQAAAAAAAAAAAAQAAAAJY2FsbGVyU3RyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAEYmV0cwkABLUAAAACBQAAAAthdWN0aW9uRGF0YQIAAAABLAQAAAAIYmV0SW5kZXgEAAAAByRtYXRjaDAJAARPAAAAAgUAAAAEYmV0cwUAAAAFYmV0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAADaWR4BQAAAAckbWF0Y2gwBQAAAANpZHgJAAACAAAAAQIAAAATQmV0IG5vdCBmb3VuZCBieSBpZAQAAAAHYmV0RGF0YQkAAZEAAAACBQAAAARiZXRzBQAAAAhiZXRJbmRleAQAAAANYmV0UGFyc2VkRGF0YQkABLUAAAACBQAAAAdiZXREYXRhAgAAAAFfBAAAAAhiZXRPd25lcgkAAZEAAAACBQAAAA1iZXRQYXJzZWREYXRhAAAAAAAAAAAABAAAAAliZXRBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA1iZXRQYXJzZWREYXRhAAAAAAAAAAABBAAAAApiZXRBc3NldElkAwkAAAAAAAACCQABkQAAAAIFAAAADWJldFBhcnNlZERhdGEAAAAAAAAAAAICAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEJAAGRAAAAAgUAAAANYmV0UGFyc2VkRGF0YQAAAAAAAAAAAgMJAAAAAAAAAgUAAAAIYmV0T3duZXIFAAAACWNhbGxlclN0cgQAAAAHbmV3QmV0cwkABFEAAAACBQAAAARiZXRzBQAAAAhiZXRJbmRleAQAAAAOdXBkYXRlRGF0YUxpc3QDCQAAAAAAAAIJAAGQAAAAAQUAAAAHbmV3QmV0cwAAAAAAAAAAAAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAphdWN0aW9uS2V5BQAAAANuaWwJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAKYXVjdGlvbktleQkABLkAAAACBQAAAAduZXdCZXRzAgAAAAEsBQAAAANuaWwJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACWJldEFtb3VudAUAAAAKYmV0QXNzZXRJZAUAAAADbmlsBQAAAA51cGRhdGVEYXRhTGlzdAkAAAIAAAABAgAAABRUaGlzIGlzIG5vdCB5b3VyIGJldAkAAAIAAAABAgAAAA1CZXQgbm90IGZvdW5kAAAAAWkBAAAACmFwcHJvdmVCZXQAAAACAAAABW5mdElkAAAABWJldElkBAAAAAhuZnRBc3NldAkBAAAAD3RyeUdldEFzc2V0SW5mbwAAAAIFAAAABW5mdElkAgAAAA1ORlQgbm90IGZvdW5kAwkAAAAAAAACCQAD8AAAAAIFAAAABHRoaXMIBQAAAAhuZnRBc3NldAAAAAJpZAAAAAAAAAAAAQQAAAAJc2VsbGVyU3RyCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAAAdfc2VsbGVyBAAAAAphdWN0aW9uS2V5CQABLAAAAAIJAAEsAAAAAgIAAAAIYXVjdGlvbl8JAAJYAAAAAQgFAAAACG5mdEFzc2V0AAAAAmlkAgAAAAVfYmV0cwMJAAAAAAAAAgUAAAAJc2VsbGVyU3RyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAALYXVjdGlvbkRhdGEJAQAAAAx0cnlHZXRTdHJpbmcAAAABBQAAAAphdWN0aW9uS2V5AwkAAGYAAAACCQABMQAAAAEFAAAAC2F1Y3Rpb25EYXRhAAAAAAAAAAAABAAAAARiZXRzCQAEtQAAAAIFAAAAC2F1Y3Rpb25EYXRhAgAAAAEsBAAAAA1iZXRQYXJzZWREYXRhCQAEtQAAAAIFAAAABWJldElkAgAAAAFfBAAAAAhiZXRPd25lcgkAAZEAAAACBQAAAA1iZXRQYXJzZWREYXRhAAAAAAAAAAAABAAAAAliZXRBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA1iZXRQYXJzZWREYXRhAAAAAAAAAAABBAAAAApiZXRBc3NldElkAwkAAAAAAAACCQABkQAAAAIFAAAADWJldFBhcnNlZERhdGEAAAAAAAAAAAICAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEJAAGRAAAAAgUAAAANYmV0UGFyc2VkRGF0YQAAAAAAAAAAAgQAAAAPcm95YWx0eVJlY2VpdmVyCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAABG5mdF8FAAAABW5mdElkAgAAABBfcm95YWx0eVJlY2VpdmVyBAAAAAtyb3lhbHR5UGFydAkAAGsAAAADBQAAAAliZXRBbW91bnQFAAAADnJveWFsdHlQZXJjZW50AAAAAAAAAABkBAAAAAltYXJrZXRGZWUJAABrAAAAAwUAAAAJYmV0QW1vdW50AAAAAAAAAAADAAAAAAAAAABkAwMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAARiZXRzBQAAAAViZXRJZAkAAGYAAAACBQAAAAliZXRBbW91bnQAAAAAAAAAAAAHCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAACGJldE93bmVyAAAAAAAAAAABCAUAAAAIbmZ0QXNzZXQAAAACaWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyCQAAZQAAAAIJAABlAAAAAgUAAAAJYmV0QW1vdW50BQAAAAtyb3lhbHR5UGFydAUAAAAJbWFya2V0RmVlBQAAAApiZXRBc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAA9yb3lhbHR5UmVjZWl2ZXIFAAAAC3JveWFsdHlQYXJ0BQAAAApiZXRBc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEG1hcmtldEZlZUFkZHJlc3MFAAAACW1hcmtldEZlZQUAAAAKYmV0QXNzZXRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAADF9idXlPdXRQcmljZQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAADl9idXlPdXRBc3NldElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAARuZnRfBQAAAAVuZnRJZAIAAAAQX3JveWFsdHlSZWNlaXZlcgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAEbmZ0XwUAAAAFbmZ0SWQCAAAAB19zZWxsZXIJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAACXNlbGxlclN0cgIAAAAFX25mdF8FAAAABW5mdElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAACXNlbGxlclN0cgIAAAAFX25mdF8FAAAABW5mdElkAgAAAAxfc3RhcnRTYWxlQXQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAKYXVjdGlvbktleQUAAAADbmlsCQEAAAATZ2V0QWxsRGVsZXRlRW50cmllcwAAAAIJAAJYAAAAAQgFAAAACG5mdEFzc2V0AAAAAmlkBQAAAAViZXRJZAkAAAIAAAABAgAAABNCZXQgbm90IGZvdW5kIGJ5IElkCQAAAgAAAAECAAAADUJldCBub3QgZm91bmQJAAACAAAAAQIAAAAUWW91IGFyZSBub3QgYSBzZWxsZXIJAAACAAAAAQIAAAAZTkZUIG5vdCBmb3VuZCBvbiBjb250cmFjdAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5zV3lEg==", "height": 3133167, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DkPx3GwNSY4A4oWbzLtB89aH8nw2wHh1JuWeccxM1nW4 Next: 2DYfQumRSXxQMtjjM5v7SzvsVdqgFaCC7MKLwM8yU5Q5 Diff:
Old | New | Differences | |
---|---|---|---|
175 | 175 | func cancelSell (nftId) = { | |
176 | 176 | let sellerStr = tryGetString((("nft_" + nftId) + "_seller")) | |
177 | 177 | let nftAsset = tryGetAssetInfo(nftId, "NFT not found") | |
178 | + | let auctionKey = (("auction_" + toBase58String(nftAsset.id)) + "_bets") | |
178 | 179 | if (if ((size(sellerStr) > 0)) | |
179 | 180 | then (sellerStr == toString(i.originCaller)) | |
180 | 181 | else false) | |
181 | - | then $Tuple2([ScriptTransfer(i.caller, 1, nftAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt"))], nftId) | |
182 | + | then $Tuple2([ScriptTransfer(i.caller, 1, nftAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt")), DeleteEntry(auctionKey)], nftId) | |
182 | 183 | else throw("You are not a seller") | |
183 | 184 | } | |
184 | 185 | ||
293 | 294 | let betAssetId = if ((betParsedData[2] == "WAVES")) | |
294 | 295 | then unit | |
295 | 296 | else fromBase58String(betParsedData[2]) | |
296 | - | let updatedData = if ((betIndex == 0)) | |
297 | - | then drop(auctionData, size(betData)) | |
298 | - | else makeString(split(auctionData, betData), "") | |
299 | 297 | if ((betOwner == callerStr)) | |
300 | 298 | then { | |
301 | - | let updateDataList = if ((size(updatedData) == 0)) | |
299 | + | let newBets = removeByIndex(bets, betIndex) | |
300 | + | let updateDataList = if ((size(newBets) == 0)) | |
302 | 301 | then [DeleteEntry(auctionKey)] | |
303 | - | else [StringEntry(auctionKey, | |
302 | + | else [StringEntry(auctionKey, makeString(newBets, ","))] | |
304 | 303 | ([ScriptTransfer(i.caller, betAmount, betAssetId)] ++ updateDataList) | |
305 | 304 | } | |
306 | 305 | else throw("This is not your bet") |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let createNftDapp = base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By' | |
5 | 5 | ||
6 | 6 | let marketFeeAddress = Address(base58'3PEa88W5it7LVPVwtpZDfYajQQWkxFNG8qf') | |
7 | 7 | ||
8 | 8 | let puzzleStakeAddress = base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS' | |
9 | 9 | ||
10 | 10 | let nftDuckWrapper = base58'3P3pDosq4GCwfJkvq4yqKvvoTwmoqc9qPmo' | |
11 | 11 | ||
12 | 12 | let nftSignArtWrapper = base58'3PPgeYTWMRZ7S7jSLpnVuKKB9r6XuDk3ndC' | |
13 | 13 | ||
14 | 14 | let royaltyPercent = 7 | |
15 | 15 | ||
16 | 16 | func isNFT (asset) = if (if ((asset.decimals == 0)) | |
17 | 17 | then (asset.reissuable == false) | |
18 | 18 | else false) | |
19 | 19 | then (asset.quantity == 1) | |
20 | 20 | else false | |
21 | 21 | ||
22 | 22 | ||
23 | 23 | func checkNFT (asset) = if (if (if ((asset.issuer.bytes == createNftDapp)) | |
24 | 24 | then (asset.decimals == 0) | |
25 | 25 | else false) | |
26 | 26 | then (asset.reissuable == false) | |
27 | 27 | else false) | |
28 | 28 | then (asset.quantity == 1) | |
29 | 29 | else false | |
30 | 30 | ||
31 | 31 | ||
32 | 32 | func tryGetInteger (key) = match getInteger(this, key) { | |
33 | 33 | case b: Int => | |
34 | 34 | b | |
35 | 35 | case _ => | |
36 | 36 | 0 | |
37 | 37 | } | |
38 | 38 | ||
39 | 39 | ||
40 | 40 | func tryGetString (key) = match getString(this, key) { | |
41 | 41 | case b: String => | |
42 | 42 | b | |
43 | 43 | case _ => | |
44 | 44 | "" | |
45 | 45 | } | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | func tryGetAssetInfo (assetId,errorMsg) = match assetInfo(fromBase58String(assetId)) { | |
49 | 49 | case a: Asset => | |
50 | 50 | a | |
51 | 51 | case _ => | |
52 | 52 | throw(errorMsg) | |
53 | 53 | } | |
54 | 54 | ||
55 | 55 | ||
56 | 56 | func getAssetString (assetId) = match assetId { | |
57 | 57 | case b: ByteVector => | |
58 | 58 | toBase58String(b) | |
59 | 59 | case _ => | |
60 | 60 | "WAVES" | |
61 | 61 | } | |
62 | 62 | ||
63 | 63 | ||
64 | 64 | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
65 | 65 | then unit | |
66 | 66 | else fromBase58String(assetIdStr) | |
67 | 67 | ||
68 | 68 | ||
69 | 69 | func getAllDeleteEntries (nftId,exclude) = { | |
70 | 70 | let auctionKey = (("auction_" + nftId) + "_bets") | |
71 | 71 | let auctionData = tryGetString(auctionKey) | |
72 | 72 | let excludeId = if ((size(exclude) > 0)) | |
73 | 73 | then exclude | |
74 | 74 | else "" | |
75 | 75 | if ((size(auctionData) == 0)) | |
76 | 76 | then nil | |
77 | 77 | else { | |
78 | 78 | func getReturnTransactions (accum,next) = { | |
79 | 79 | let betParsedData = split(next, "_") | |
80 | 80 | let betOwner = betParsedData[0] | |
81 | 81 | let betAmount = parseIntValue(betParsedData[1]) | |
82 | 82 | let betAssetId = if ((betParsedData[2] == "WAVES")) | |
83 | 83 | then unit | |
84 | 84 | else fromBase58String(betParsedData[2]) | |
85 | 85 | if (if ((size(excludeId) > 0)) | |
86 | 86 | then (excludeId == next) | |
87 | 87 | else false) | |
88 | 88 | then accum | |
89 | 89 | else (accum :+ ScriptTransfer(Address(fromBase58String(betOwner)), betAmount, betAssetId)) | |
90 | 90 | } | |
91 | 91 | ||
92 | 92 | let $l = split(auctionData, ",") | |
93 | 93 | let $s = size($l) | |
94 | 94 | let $acc0 = nil | |
95 | 95 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
96 | 96 | then $a | |
97 | 97 | else getReturnTransactions($a, $l[$i]) | |
98 | 98 | ||
99 | 99 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
100 | 100 | then $a | |
101 | 101 | else throw("List size exceeds 50") | |
102 | 102 | ||
103 | 103 | $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($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), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
104 | 104 | } | |
105 | 105 | } | |
106 | 106 | ||
107 | 107 | ||
108 | 108 | @Callable(i) | |
109 | 109 | func sellNFT (buyOutPrice,buyOutAssetId) = { | |
110 | 110 | let pmt = if (if ((size(i.payments) == 1)) | |
111 | 111 | then (i.payments[0].amount == 1) | |
112 | 112 | else false) | |
113 | 113 | then i.payments[0] | |
114 | 114 | else throw("NFT not listed as payment") | |
115 | 115 | let buyOutAsset = getAssetBytes(buyOutAssetId) | |
116 | 116 | if (isDefined(pmt.assetId)) | |
117 | 117 | then { | |
118 | 118 | let nftId = value(pmt.assetId) | |
119 | 119 | let nft = match assetInfo(nftId) { | |
120 | 120 | case a: Asset => | |
121 | 121 | a | |
122 | 122 | case _ => | |
123 | 123 | throw("Can't find NFT") | |
124 | 124 | } | |
125 | 125 | if (checkNFT(nft)) | |
126 | 126 | then if ((buyOutPrice > 0)) | |
127 | 127 | then { | |
128 | 128 | let assetNameStr = toBase58String(nft.id) | |
129 | 129 | let nftIssuer = match getString(Address(createNftDapp), (("nft_" + assetNameStr) + "_issuer")) { | |
130 | 130 | case a: String => | |
131 | 131 | a | |
132 | 132 | case _ => | |
133 | 133 | toString(i.caller) | |
134 | 134 | } | |
135 | 135 | let royaltyReceiver = if ((nftIssuer != toBase58String(nftSignArtWrapper))) | |
136 | 136 | then nftIssuer | |
137 | 137 | else split(split(value(assetInfo(nftId)).description, " ")[2], ".")[0] | |
138 | 138 | [IntegerEntry((("nft_" + assetNameStr) + "_buyOutPrice"), buyOutPrice), StringEntry((("nft_" + assetNameStr) + "_buyOutAssetId"), getAssetString(buyOutAsset)), StringEntry((("nft_" + assetNameStr) + "_royaltyReceiver"), royaltyReceiver), StringEntry((("nft_" + assetNameStr) + "_seller"), toString(i.originCaller)), StringEntry(((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr), assetNameStr), IntegerEntry((((("address_" + toString(i.originCaller)) + "_nft_") + assetNameStr) + "_startSaleAt"), height)] | |
139 | 139 | } | |
140 | 140 | else throw("Price must be greater than zero") | |
141 | 141 | else throw("NFT issued by another dapp") | |
142 | 142 | } | |
143 | 143 | else throw("NFT is not attached to the transaction") | |
144 | 144 | } | |
145 | 145 | ||
146 | 146 | ||
147 | 147 | ||
148 | 148 | @Callable(i) | |
149 | 149 | func buyNFT (nftId) = { | |
150 | 150 | let pmt = if ((size(i.payments) == 1)) | |
151 | 151 | then i.payments[0] | |
152 | 152 | else throw("Attached payment is required") | |
153 | 153 | let buyOutPrice = tryGetInteger((("nft_" + nftId) + "_buyOutPrice")) | |
154 | 154 | let buyOutAssetId = tryGetString((("nft_" + nftId) + "_buyOutAssetId")) | |
155 | 155 | let royaltyReceiver = tryGetString((("nft_" + nftId) + "_royaltyReceiver")) | |
156 | 156 | let sellerStr = tryGetString((("nft_" + nftId) + "_seller")) | |
157 | 157 | let nftAsset = tryGetAssetInfo(nftId, "NFT not found") | |
158 | 158 | let buyOutAsset = tryGetAssetInfo(buyOutAssetId, "Buyout asset not found") | |
159 | 159 | if (if ((buyOutPrice > 0)) | |
160 | 160 | then (pmt.amount >= buyOutPrice) | |
161 | 161 | else false) | |
162 | 162 | then { | |
163 | 163 | let royaltyPart = fraction(buyOutPrice, royaltyPercent, 100) | |
164 | 164 | let marketFee = fraction(buyOutPrice, 3, 100) | |
165 | 165 | if ((pmt.assetId == buyOutAsset.id)) | |
166 | 166 | then $Tuple2([ScriptTransfer(i.caller, 1, nftAsset.id), ScriptTransfer(Address(fromBase58String(sellerStr)), ((buyOutPrice - royaltyPart) - marketFee), buyOutAsset.id), ScriptTransfer(Address(fromBase58String(royaltyReceiver)), royaltyPart, buyOutAsset.id), ScriptTransfer(marketFeeAddress, marketFee, buyOutAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt"))], toBase58String(nftAsset.id)) | |
167 | 167 | else throw("The buyout asset does not match the purchase asset") | |
168 | 168 | } | |
169 | 169 | else throw("Payment amount must be greater than zero") | |
170 | 170 | } | |
171 | 171 | ||
172 | 172 | ||
173 | 173 | ||
174 | 174 | @Callable(i) | |
175 | 175 | func cancelSell (nftId) = { | |
176 | 176 | let sellerStr = tryGetString((("nft_" + nftId) + "_seller")) | |
177 | 177 | let nftAsset = tryGetAssetInfo(nftId, "NFT not found") | |
178 | + | let auctionKey = (("auction_" + toBase58String(nftAsset.id)) + "_bets") | |
178 | 179 | if (if ((size(sellerStr) > 0)) | |
179 | 180 | then (sellerStr == toString(i.originCaller)) | |
180 | 181 | else false) | |
181 | - | then $Tuple2([ScriptTransfer(i.caller, 1, nftAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt"))], nftId) | |
182 | + | then $Tuple2([ScriptTransfer(i.caller, 1, nftAsset.id), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt")), DeleteEntry(auctionKey)], nftId) | |
182 | 183 | else throw("You are not a seller") | |
183 | 184 | } | |
184 | 185 | ||
185 | 186 | ||
186 | 187 | ||
187 | 188 | @Callable(i) | |
188 | 189 | func like (nftId) = { | |
189 | 190 | let nftAsset = assetInfo(fromBase58String(nftId)) | |
190 | 191 | let isDuckNft = isDefined(getString(Address(nftDuckWrapper), (("nft_" + nftId) + "_duckId"))) | |
191 | 192 | let isSignArtNft = isDefined(getString(Address(nftSignArtWrapper), (("signArtNft_" + nftId) + "_assetId"))) | |
192 | 193 | if (if (if (if (isDefined(nftAsset)) | |
193 | 194 | then !(isDuckNft) | |
194 | 195 | else false) | |
195 | 196 | then !(isSignArtNft) | |
196 | 197 | else false) | |
197 | 198 | then checkNFT(value(nftAsset)) | |
198 | 199 | else false) | |
199 | 200 | then { | |
200 | 201 | let callerAddress = toString(i.caller) | |
201 | 202 | let countStaked = match getInteger(Address(puzzleStakeAddress), (callerAddress + "_staked")) { | |
202 | 203 | case c: Int => | |
203 | 204 | c | |
204 | 205 | case _ => | |
205 | 206 | 0 | |
206 | 207 | } | |
207 | 208 | if ((countStaked >= 100000000)) | |
208 | 209 | then { | |
209 | 210 | let nftLikesKey = (("nft_" + nftId) + "_likes") | |
210 | 211 | let nftLikesValue = tryGetString((("nft_" + nftId) + "_likes")) | |
211 | 212 | if (!(isDefined(indexOf(nftLikesValue, callerAddress)))) | |
212 | 213 | then { | |
213 | 214 | let newLikesValue = if ((size(nftLikesValue) == 0)) | |
214 | 215 | then toString(i.caller) | |
215 | 216 | else ((nftLikesValue + ",") + callerAddress) | |
216 | 217 | [StringEntry(nftLikesKey, newLikesValue)] | |
217 | 218 | } | |
218 | 219 | else throw("You have already voted") | |
219 | 220 | } | |
220 | 221 | else throw("You can like if you stake 1 or more Puzzles") | |
221 | 222 | } | |
222 | 223 | else throw("Invalid NFT id") | |
223 | 224 | } | |
224 | 225 | ||
225 | 226 | ||
226 | 227 | ||
227 | 228 | @Callable(i) | |
228 | 229 | func addBet (nftId) = if (if ((i.payments[0].amount > 0)) | |
229 | 230 | then if (!(isDefined(i.payments[0].assetId))) | |
230 | 231 | then true | |
231 | 232 | else !(isNFT(value(assetInfo(value(i.payments[0].assetId))))) | |
232 | 233 | else false) | |
233 | 234 | then { | |
234 | 235 | let nftAsset = tryGetAssetInfo(nftId, "NFT not found") | |
235 | 236 | let nftAmount = match assetBalance(this, nftAsset.id) { | |
236 | 237 | case c: Int => | |
237 | 238 | c | |
238 | 239 | case _ => | |
239 | 240 | 0 | |
240 | 241 | } | |
241 | 242 | if (if ((nftAmount == 1)) | |
242 | 243 | then checkNFT(nftAsset) | |
243 | 244 | else false) | |
244 | 245 | then { | |
245 | 246 | let callerStr = toString(i.caller) | |
246 | 247 | let assetAmount = i.payments[0].amount | |
247 | 248 | let assetIdStr = getAssetString(i.payments[0].assetId) | |
248 | 249 | let auctionKey = (("auction_" + toBase58String(nftAsset.id)) + "_bets") | |
249 | 250 | let auctionData = tryGetString(auctionKey) | |
250 | 251 | let addedData = ((((callerStr + "_") + toString(assetAmount)) + "_") + assetIdStr) | |
251 | 252 | if ((50 > (size(split(auctionData, ",")) + 1))) | |
252 | 253 | then { | |
253 | 254 | let exist = contains(auctionData, addedData) | |
254 | 255 | if (!(exist)) | |
255 | 256 | then { | |
256 | 257 | let updatedData = match getString(auctionKey) { | |
257 | 258 | case s: String => | |
258 | 259 | ((s + ",") + addedData) | |
259 | 260 | case _ => | |
260 | 261 | addedData | |
261 | 262 | } | |
262 | 263 | [StringEntry(auctionKey, updatedData)] | |
263 | 264 | } | |
264 | 265 | else throw("Bet exists") | |
265 | 266 | } | |
266 | 267 | else throw("You cannot create more than 50 bets for 1 NFT") | |
267 | 268 | } | |
268 | 269 | else throw("Invalid NFT Id.") | |
269 | 270 | } | |
270 | 271 | else throw("Payment not attached") | |
271 | 272 | ||
272 | 273 | ||
273 | 274 | ||
274 | 275 | @Callable(i) | |
275 | 276 | func deleteBet (nftId,betId) = { | |
276 | 277 | let nftAsset = tryGetAssetInfo(nftId, "NFT not found") | |
277 | 278 | let auctionKey = (("auction_" + toBase58String(nftAsset.id)) + "_bets") | |
278 | 279 | let auctionData = tryGetString(auctionKey) | |
279 | 280 | if ((size(auctionData) > 0)) | |
280 | 281 | then { | |
281 | 282 | let callerStr = toString(i.caller) | |
282 | 283 | let bets = split(auctionData, ",") | |
283 | 284 | let betIndex = match indexOf(bets, betId) { | |
284 | 285 | case idx: Int => | |
285 | 286 | idx | |
286 | 287 | case _ => | |
287 | 288 | throw("Bet not found by id") | |
288 | 289 | } | |
289 | 290 | let betData = bets[betIndex] | |
290 | 291 | let betParsedData = split(betData, "_") | |
291 | 292 | let betOwner = betParsedData[0] | |
292 | 293 | let betAmount = parseIntValue(betParsedData[1]) | |
293 | 294 | let betAssetId = if ((betParsedData[2] == "WAVES")) | |
294 | 295 | then unit | |
295 | 296 | else fromBase58String(betParsedData[2]) | |
296 | - | let updatedData = if ((betIndex == 0)) | |
297 | - | then drop(auctionData, size(betData)) | |
298 | - | else makeString(split(auctionData, betData), "") | |
299 | 297 | if ((betOwner == callerStr)) | |
300 | 298 | then { | |
301 | - | let updateDataList = if ((size(updatedData) == 0)) | |
299 | + | let newBets = removeByIndex(bets, betIndex) | |
300 | + | let updateDataList = if ((size(newBets) == 0)) | |
302 | 301 | then [DeleteEntry(auctionKey)] | |
303 | - | else [StringEntry(auctionKey, | |
302 | + | else [StringEntry(auctionKey, makeString(newBets, ","))] | |
304 | 303 | ([ScriptTransfer(i.caller, betAmount, betAssetId)] ++ updateDataList) | |
305 | 304 | } | |
306 | 305 | else throw("This is not your bet") | |
307 | 306 | } | |
308 | 307 | else throw("Bet not found") | |
309 | 308 | } | |
310 | 309 | ||
311 | 310 | ||
312 | 311 | ||
313 | 312 | @Callable(i) | |
314 | 313 | func approveBet (nftId,betId) = { | |
315 | 314 | let nftAsset = tryGetAssetInfo(nftId, "NFT not found") | |
316 | 315 | if ((assetBalance(this, nftAsset.id) == 1)) | |
317 | 316 | then { | |
318 | 317 | let sellerStr = tryGetString((("nft_" + nftId) + "_seller")) | |
319 | 318 | let auctionKey = (("auction_" + toBase58String(nftAsset.id)) + "_bets") | |
320 | 319 | if ((sellerStr == toString(i.caller))) | |
321 | 320 | then { | |
322 | 321 | let auctionData = tryGetString(auctionKey) | |
323 | 322 | if ((size(auctionData) > 0)) | |
324 | 323 | then { | |
325 | 324 | let bets = split(auctionData, ",") | |
326 | 325 | let betParsedData = split(betId, "_") | |
327 | 326 | let betOwner = betParsedData[0] | |
328 | 327 | let betAmount = parseIntValue(betParsedData[1]) | |
329 | 328 | let betAssetId = if ((betParsedData[2] == "WAVES")) | |
330 | 329 | then unit | |
331 | 330 | else fromBase58String(betParsedData[2]) | |
332 | 331 | let royaltyReceiver = tryGetString((("nft_" + nftId) + "_royaltyReceiver")) | |
333 | 332 | let royaltyPart = fraction(betAmount, royaltyPercent, 100) | |
334 | 333 | let marketFee = fraction(betAmount, 3, 100) | |
335 | 334 | if (if (containsElement(bets, betId)) | |
336 | 335 | then (betAmount > 0) | |
337 | 336 | else false) | |
338 | 337 | then ([ScriptTransfer(Address(fromBase58String(betOwner)), 1, nftAsset.id), ScriptTransfer(i.caller, ((betAmount - royaltyPart) - marketFee), betAssetId), ScriptTransfer(Address(fromBase58String(royaltyReceiver)), royaltyPart, betAssetId), ScriptTransfer(marketFeeAddress, marketFee, betAssetId), DeleteEntry((("nft_" + nftId) + "_buyOutPrice")), DeleteEntry((("nft_" + nftId) + "_buyOutAssetId")), DeleteEntry((("nft_" + nftId) + "_royaltyReceiver")), DeleteEntry((("nft_" + nftId) + "_seller")), DeleteEntry(((("address_" + sellerStr) + "_nft_") + nftId)), DeleteEntry((((("address_" + sellerStr) + "_nft_") + nftId) + "_startSaleAt")), DeleteEntry(auctionKey)] ++ getAllDeleteEntries(toBase58String(nftAsset.id), betId)) | |
339 | 338 | else throw("Bet not found by Id") | |
340 | 339 | } | |
341 | 340 | else throw("Bet not found") | |
342 | 341 | } | |
343 | 342 | else throw("You are not a seller") | |
344 | 343 | } | |
345 | 344 | else throw("NFT not found on contract") | |
346 | 345 | } | |
347 | 346 | ||
348 | 347 | ||
349 | 348 | @Verifier(tx) | |
350 | 349 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
351 | 350 |
github/deemru/w8io/786bc32 56.88 ms ◑