tx · 7Rd8SLGRSrp7YcbTCV3bNUU2jCGZcBuBRW7HrBR79JaX

3N81pyrgpVVtvALPxj1xUa5j6ebuQmMhhKB:  -0.01000000 Waves

2018.12.11 16:03 [400114] smart account 3N81pyrgpVVtvALPxj1xUa5j6ebuQmMhhKB > SELF 0.00000000 Waves

{ "type": 13, "id": "7Rd8SLGRSrp7YcbTCV3bNUU2jCGZcBuBRW7HrBR79JaX", "fee": 1000000, "feeAssetId": null, "timestamp": 1544533385299, "version": 1, "sender": "3N81pyrgpVVtvALPxj1xUa5j6ebuQmMhhKB", "senderPublicKey": "G1pJURv71JZjY1Eym2U1S2pTkcFs29vHASQLGNF3h1Gx", "proofs": [ "5rHJaVstAKjkwqPFEYU4Yv4cbStvEoCNoo9phnWDLNbNyCFPd1JjUvjafF8SzUVAvByk1s7CUSHnouwBJrqd1t99" ], "script": "base64:AQQAAAAQY2FzaW5vc1B1YmxpY0tleQEAAAAgy6dEaVQlC3o3wKOeMfu4ZC5uyLkpVeXvuwyAPolh+EUEAAAAFmVuY3R5cHRlZENhc2lub3NDaG9pY2UBAAAAICOeoNb5oEIGpPgjtrZ035m8dNPjpSvKT5DA0V3MPZxPBAAAAANiZXQAAAAAAAvrwgAEAAAACmNhc2lub3NGZWUAAAAAAAAPQkAEAAAAGW1heWJlRGF0YVBsYXllcnNQdWJsaWNLZXkJAAQdAAAAAggFAAAAAnR4AAAABnNlbmRlcgIAAAAQcGxheWVyc1B1YmxpY0tleQQAAAAUZGF0YVBsYXllcnNQdWJsaWNLZXkJAAJZAAAAAQkBAAAAB2V4dHJhY3QAAAABBQAAABltYXliZURhdGFQbGF5ZXJzUHVibGljS2V5BAAAAAxkYXRhTG9ja2VkQXQJAQAAAAdleHRyYWN0AAAAAQkABBoAAAACCAUAAAACdHgAAAAGc2VuZGVyAgAAAAhsb2NrZWRBdAQAAAAZbWF5YmVEYXRhUGxheWVyUmFuZ2VTdGFydAkABBoAAAACCAUAAAACdHgAAAAGc2VuZGVyAgAAABFwbGF5ZXJzUmFuZ2VTdGFydAQAAAAVZGF0YVBsYXllcnNSYW5nZVN0YXJ0CQEAAAAHZXh0cmFjdAAAAAEFAAAAGW1heWJlRGF0YVBsYXllclJhbmdlU3RhcnQEAAAAF21heWJlRGF0YVBsYXllclJhbmdlRW5kCQAEGgAAAAIIBQAAAAJ0eAAAAAZzZW5kZXICAAAAD3BsYXllcnNSYW5nZUVuZAQAAAATZGF0YVBsYXllcnNSYW5nZUVuZAkBAAAAB2V4dHJhY3QAAAABBQAAABdtYXliZURhdGFQbGF5ZXJSYW5nZUVuZAQAAAAWbWF5YmVEYXRhQ2FzaW5vc0Nob2ljZQkABBoAAAACCAUAAAACdHgAAAAGc2VuZGVyAgAAAA1jYXNpbm9zQ2hvaWNlBAAAABFkYXRhQ2FzaW5vc0Nob2ljZQkBAAAAB2V4dHJhY3QAAAABBQAAABZtYXliZURhdGFDYXNpbm9zQ2hvaWNlBAAAAA90aW1lb3V0SW5CbG9ja3MAAAAAAAAAAHgEAAAAEmRhdGFUcmFuc2FjdGlvbkZlZQAAAAAAAAehIAQAAAAWdHJhbnNmZXJUcmFuc2FjdGlvbkZlZQAAAAAAAAehIAQAAAAabWFzc1RyYW5zZmVyVHJhbnNhY3Rpb25GZWUAAAAAAAAJJ8AEAAAACG1heFByaXplAAAAAAJUC+QABAAAABlleHBlY3RlZENhc2lub3NJbml0aWFsQmV0AwkAAGYAAAACCQAAaAAAAAIFAAAAA2JldAAAAAAAAAAAZAUAAAAIbWF4UHJpemUJAABlAAAAAgUAAAAIbWF4UHJpemUFAAAAA2JldAkAAGgAAAACBQAAAANiZXQAAAAAAAAAAGMEAAAADG1heFJhbmdlU2l6ZQAAAAAAAAAAYQQAAAAOY2FzaW5vc0FkZHJlc3MJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAAEGNhc2lub3NQdWJsaWNLZXkEAAAADnBsYXllcnNBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAABRkYXRhUGxheWVyc1B1YmxpY0tleQQAAAAOYWNjb3VudEJhbGFuY2UJAQAAAAx3YXZlc0JhbGFuY2UAAAABCAUAAAACdHgAAAAGc2VuZGVyBAAAAA5zZW5kZXJJc0Nhc2lubwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAEGNhc2lub3NQdWJsaWNLZXkEAAAADnNlbmRlcklzUGxheWVyCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAUZGF0YVBsYXllcnNQdWJsaWNLZXkEAAAADmlzSW5pdGlhbFN0YXRlAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAZbWF5YmVEYXRhUGxheWVyc1B1YmxpY0tleQkAAGcAAAACBQAAAA5hY2NvdW50QmFsYW5jZQkAAGQAAAACCQAAZAAAAAIFAAAAGWV4cGVjdGVkQ2FzaW5vc0luaXRpYWxCZXQJAABoAAAAAgUAAAASZGF0YVRyYW5zYWN0aW9uRmVlAAAAAAAAAAADBQAAABptYXNzVHJhbnNmZXJUcmFuc2FjdGlvbkZlZQcEAAAAGWRhdGFJc1ZhbGlkRm9yTG9ja2VkU3RhdGUDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAZbWF5YmVEYXRhUGxheWVyc1B1YmxpY0tleQkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAZbWF5YmVEYXRhUGxheWVyUmFuZ2VTdGFydAcEAAAAEmxvY2tlZFN0YXRlVGltZW91dAkAAGYAAAACBQAAAAZoZWlnaHQJAABkAAAAAgUAAAAMZGF0YUxvY2tlZEF0BQAAAA90aW1lb3V0SW5CbG9ja3MEAAAADWlzTG9ja2VkU3RhdGUDBQAAABlkYXRhSXNWYWxpZEZvckxvY2tlZFN0YXRlCQEAAAABIQAAAAEFAAAAEmxvY2tlZFN0YXRlVGltZW91dAcEAAAAG2lzVXNlckRlY2lkZWROb3RUb1BsYXlTdGF0ZQMFAAAAGWRhdGFJc1ZhbGlkRm9yTG9ja2VkU3RhdGUFAAAAEmxvY2tlZFN0YXRlVGltZW91dAcEAAAAIWRhdGFJc1ZhbGlkRm9yUGxheWVyUmV2ZWFsZWRTdGF0ZQMJAQAAAAlpc0RlZmluZWQAAAABBQAAABltYXliZURhdGFQbGF5ZXJSYW5nZVN0YXJ0CQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABBQAAABZtYXliZURhdGFDYXNpbm9zQ2hvaWNlBwQAAAAacGxheWVyUmV2ZWFsZWRTdGF0ZVRpbWVvdXQDCQAAZgAAAAIFAAAABmhlaWdodAkAAGQAAAACBQAAAAxkYXRhTG9ja2VkQXQJAABoAAAAAgUAAAAPdGltZW91dEluQmxvY2tzAAAAAAAAAAACCQAAZwAAAAIFAAAADmFjY291bnRCYWxhbmNlCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACBQAAABlleHBlY3RlZENhc2lub3NJbml0aWFsQmV0BQAAAANiZXQFAAAAEmRhdGFUcmFuc2FjdGlvbkZlZQUAAAAabWFzc1RyYW5zZmVyVHJhbnNhY3Rpb25GZWUHBAAAAB5pc1BsYXllclJldmVhbGVkSGlzQ2hvaWNlU3RhdGUDBQAAACFkYXRhSXNWYWxpZEZvclBsYXllclJldmVhbGVkU3RhdGUJAQAAAAEhAAAAAQUAAAAacGxheWVyUmV2ZWFsZWRTdGF0ZVRpbWVvdXQHBAAAAB1pc0Nhc2lub0RlY2lkZWROb3RUb1BsYXlTdGF0ZQMFAAAAIWRhdGFJc1ZhbGlkRm9yUGxheWVyUmV2ZWFsZWRTdGF0ZQUAAAAacGxheWVyUmV2ZWFsZWRTdGF0ZVRpbWVvdXQHBAAAACVpc0RhdGFWYWxpZEZvcldpbm5lcklzRGV0ZXJtaW5lZFN0YXRlCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAWbWF5YmVEYXRhQ2FzaW5vc0Nob2ljZQQAAAAoaXNCYWxhbmNlVmFsaWRGb3JXaW5uZXJJc0RldGVybWluZWRTdGF0ZQkAAGcAAAACBQAAAA5hY2NvdW50QmFsYW5jZQkAAGQAAAACCQAAZAAAAAIFAAAAGWV4cGVjdGVkQ2FzaW5vc0luaXRpYWxCZXQFAAAAA2JldAUAAAAabWFzc1RyYW5zZmVyVHJhbnNhY3Rpb25GZWUEAAAAGWlzV2lubmVySXNEZXRlcm1pbmVkU3RhdGUDBQAAACVpc0RhdGFWYWxpZEZvcldpbm5lcklzRGV0ZXJtaW5lZFN0YXRlBQAAAChpc0JhbGFuY2VWYWxpZEZvcldpbm5lcklzRGV0ZXJtaW5lZFN0YXRlBwQAAAAgaXNQbGF5ZXJEZWNpZGVkTm90VG9TZW5kQmV0U3RhdGUDBQAAACVpc0RhdGFWYWxpZEZvcldpbm5lcklzRGV0ZXJtaW5lZFN0YXRlCQEAAAABIQAAAAEFAAAAKGlzQmFsYW5jZVZhbGlkRm9yV2lubmVySXNEZXRlcm1pbmVkU3RhdGUHBAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPRGF0YVRyYW5zYWN0aW9uBAAAAANkdHgFAAAAByRtYXRjaDAEAAAAC3BheWxvYWRTaXplCQABkAAAAAEIBQAAAANkdHgAAAAEZGF0YQQAAAAQZmlyc3RQYXlsb2FkTmFtZQgJAAGRAAAAAggFAAAAA2R0eAAAAARkYXRhAAAAAAAAAAAAAAAAA2tleQQAAAARc2Vjb25kUGF5bG9hZE5hbWUICQABkQAAAAIIBQAAAANkdHgAAAAEZGF0YQAAAAAAAAAAAQAAAANrZXkEAAAAFWZpcnN0UGF5bG9hZEFzSW50ZWdlcgkBAAAAB2V4dHJhY3QAAAABCQAEEAAAAAIIBQAAAANkdHgAAAAEZGF0YQUAAAAQZmlyc3RQYXlsb2FkTmFtZQQAAAAVc2Vjb25kUGF5bG9hZEFzU3RyaW5nCQEAAAAHZXh0cmFjdAAAAAEJAAQTAAAAAggFAAAAA2R0eAAAAARkYXRhBQAAABFzZWNvbmRQYXlsb2FkTmFtZQQAAAAWc2Vjb25kUGF5bG9hZEFzSW50ZWdlcgkBAAAAB2V4dHJhY3QAAAABCQAEEAAAAAIIBQAAAANkdHgAAAAEZGF0YQUAAAARc2Vjb25kUGF5bG9hZE5hbWUEAAAAB2ZlZUlzT2sJAAAAAAAAAggFAAAAA2R0eAAAAANmZWUFAAAAEmRhdGFUcmFuc2FjdGlvbkZlZQMDBQAAAA5pc0luaXRpYWxTdGF0ZQYFAAAAG2lzVXNlckRlY2lkZWROb3RUb1BsYXlTdGF0ZQQAAAAXdmFsaWRMb2NrZWRBdElzUHJvdmlkZWQDCQAAAAAAAAIFAAAAEGZpcnN0UGF5bG9hZE5hbWUCAAAACGxvY2tlZEF0AwkAAAAAAAACBQAAABVmaXJzdFBheWxvYWRBc0ludGVnZXIFAAAABmhlaWdodAYJAAAAAAAAAgUAAAAVZmlyc3RQYXlsb2FkQXNJbnRlZ2VyCQAAZQAAAAIFAAAABmhlaWdodAAAAAAAAAAAAQcEAAAAGnBsYXllcnNQdWJsaWNLZXlJc1Byb3ZpZGVkCQAAAAAAAAIFAAAAEXNlY29uZFBheWxvYWROYW1lAgAAABBwbGF5ZXJzUHVibGljS2V5BAAAABZub090aGVyRGF0YVdhc1Byb3ZpZGVkCQAAAAAAAAIFAAAAC3BheWxvYWRTaXplAAAAAAAAAAACAwMDAwUAAAAOc2VuZGVySXNDYXNpbm8FAAAAB2ZlZUlzT2sHBQAAABd2YWxpZExvY2tlZEF0SXNQcm92aWRlZAcFAAAAGnBsYXllcnNQdWJsaWNLZXlJc1Byb3ZpZGVkBwUAAAAWbm9PdGhlckRhdGFXYXNQcm92aWRlZAcDBQAAAA1pc0xvY2tlZFN0YXRlBAAAABl2YWxpZFJhbmdlU3RhcnRJc1Byb3ZpZGVkAwMJAAAAAAAAAgUAAAAQZmlyc3RQYXlsb2FkTmFtZQIAAAARcGxheWVyc1JhbmdlU3RhcnQJAABnAAAAAgUAAAAVZmlyc3RQYXlsb2FkQXNJbnRlZ2VyAAAAAAAAAAABBwkAAGcAAAACAAAAAAAAAABkBQAAABVmaXJzdFBheWxvYWRBc0ludGVnZXIHBAAAABd2YWxpZFJhbmdlRW5kSXNQcm92aWRlZAMDAwkAAAAAAAACBQAAABFzZWNvbmRQYXlsb2FkTmFtZQIAAAAPcGxheWVyc1JhbmdlRW5kCQAAZwAAAAIFAAAAFnNlY29uZFBheWxvYWRBc0ludGVnZXIAAAAAAAAAAAEHCQAAZwAAAAIAAAAAAAAAAGQFAAAAFnNlY29uZFBheWxvYWRBc0ludGVnZXIHCQAAZwAAAAIFAAAAFnNlY29uZFBheWxvYWRBc0ludGVnZXIFAAAAFWZpcnN0UGF5bG9hZEFzSW50ZWdlcgcEAAAACXJhbmdlU2l6ZQkAAGQAAAACCQAAZQAAAAIFAAAAFnNlY29uZFBheWxvYWRBc0ludGVnZXIFAAAAFWZpcnN0UGF5bG9hZEFzSW50ZWdlcgAAAAAAAAAAAQQAAAAQcmFuZ2VTaXplSXNWYWxpZAMDCQAAZwAAAAIFAAAACXJhbmdlU2l6ZQAAAAAAAAAAAQkAAGcAAAACBQAAAAxtYXhSYW5nZVNpemUFAAAACXJhbmdlU2l6ZQcJAABnAAAAAgUAAAAIbWF4UHJpemUJAABpAAAAAgkAAGgAAAACBQAAAANiZXQAAAAAAAAAAGQFAAAACXJhbmdlU2l6ZQcEAAAAFm5vT3RoZXJEYXRhV2FzUHJvdmlkZWQJAAAAAAAAAgUAAAALcGF5bG9hZFNpemUAAAAAAAAAAAIDAwMDAwUAAAAOc2VuZGVySXNQbGF5ZXIFAAAAB2ZlZUlzT2sHBQAAABl2YWxpZFJhbmdlU3RhcnRJc1Byb3ZpZGVkBwUAAAAXdmFsaWRSYW5nZUVuZElzUHJvdmlkZWQHBQAAABByYW5nZVNpemVJc1ZhbGlkBwUAAAAWbm9PdGhlckRhdGFXYXNQcm92aWRlZAcDBQAAAB5pc1BsYXllclJldmVhbGVkSGlzQ2hvaWNlU3RhdGUEAAAAHHZhbGlkQ2FzaW5vQ2hvaWNlV2FzUHJvdmlkZWQDCQAAAAAAAAIFAAAAEGZpcnN0UGF5bG9hZE5hbWUCAAAADWNhc2lub3NDaG9pY2UDCQAAZwAAAAIFAAAAFWZpcnN0UGF5bG9hZEFzSW50ZWdlcgAAAAAAAAAAAQkAAGcAAAACAAAAAAAAAABkBQAAABVmaXJzdFBheWxvYWRBc0ludGVnZXIHBwQAAAAWY2FzaW5vc1NhbHRXYXNQcm92aWRlZAkAAAAAAAACBQAAABFzZWNvbmRQYXlsb2FkTmFtZQIAAAALY2FzaW5vc1NhbHQEAAAAImNob2ljZUFuZFNhbHRNYXRjaGVzSGFyZGNvZGVkVmFsdWUJAAAAAAAAAgkAAfUAAAABCQABmwAAAAEJAAEsAAAAAgkAAaQAAAABBQAAABVmaXJzdFBheWxvYWRBc0ludGVnZXIFAAAAFXNlY29uZFBheWxvYWRBc1N0cmluZwUAAAAWZW5jdHlwdGVkQ2FzaW5vc0Nob2ljZQQAAAAWbm9PdGhlckRhdGFXYXNQcm92aWRlZAkAAAAAAAACBQAAAAtwYXlsb2FkU2l6ZQAAAAAAAAAAAgMDAwMDBQAAAA5zZW5kZXJJc0Nhc2lubwUAAAAHZmVlSXNPawcFAAAAHHZhbGlkQ2FzaW5vQ2hvaWNlV2FzUHJvdmlkZWQHBQAAABZjYXNpbm9zU2FsdFdhc1Byb3ZpZGVkBwUAAAAiY2hvaWNlQW5kU2FsdE1hdGNoZXNIYXJkY29kZWRWYWx1ZQcFAAAAFm5vT3RoZXJEYXRhV2FzUHJvdmlkZWQHBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAADdHR4BQAAAAckbWF0Y2gwBAAAAAdmZWVJc09rCQAAAAAAAAIIBQAAAAN0dHgAAAADZmVlBQAAABZ0cmFuc2ZlclRyYW5zYWN0aW9uRmVlAwUAAAAdaXNDYXNpbm9EZWNpZGVkTm90VG9QbGF5U3RhdGUEAAAAEXJlY2lwaWVudElzUGxheWVyCQAAAAAAAAIIBQAAAAN0dHgAAAAJcmVjaXBpZW50BQAAAA5wbGF5ZXJzQWRkcmVzcwQAAAAPYW1vdW50SXNDb3JyZW50CQAAAAAAAAIIBQAAAAN0dHgAAAAGYW1vdW50CQAAaAAAAAIFAAAAA2JldAAAAAAAAAAAAgMDBQAAAAdmZWVJc09rBQAAABFyZWNpcGllbnRJc1BsYXllcgcFAAAAD2Ftb3VudElzQ29ycmVudAcDBQAAACBpc1BsYXllckRlY2lkZWROb3RUb1NlbmRCZXRTdGF0ZQQAAAARcmVjaXBpZW50SXNDYXNpbm8JAAAAAAAAAggFAAAAA3R0eAAAAAlyZWNpcGllbnQFAAAADmNhc2lub3NBZGRyZXNzBAAAAA9hbW91bnRJc0NvcnJlY3QJAAAAAAAAAggFAAAAA3R0eAAAAAZhbW91bnQFAAAAA2JldAMDBQAAAAdmZWVJc09rBQAAABFyZWNpcGllbnRJc0Nhc2lubwcFAAAAD2Ftb3VudElzQ29ycmVjdAcHAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABdNYXNzVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAADbXR4BQAAAAckbWF0Y2gwBAAAAAdmZWVJc09rCQAAAAAAAAIIBQAAAANtdHgAAAADZmVlBQAAABptYXNzVHJhbnNmZXJUcmFuc2FjdGlvbkZlZQMFAAAAGWlzV2lubmVySXNEZXRlcm1pbmVkU3RhdGUEAAAACXBsYXllcldvbgMJAABnAAAAAgUAAAARZGF0YUNhc2lub3NDaG9pY2UFAAAAFWRhdGFQbGF5ZXJzUmFuZ2VTdGFydAkAAGcAAAACBQAAABNkYXRhUGxheWVyc1JhbmdlRW5kBQAAABFkYXRhQ2FzaW5vc0Nob2ljZQcEAAAAEnBsYXllcnNSYW5nZUxlbmd0aAkAAGQAAAACCQAAZQAAAAIFAAAAE2RhdGFQbGF5ZXJzUmFuZ2VFbmQFAAAAFWRhdGFQbGF5ZXJzUmFuZ2VTdGFydAAAAAAAAAAAAQQAAAALd2lubmVyc1BhcnQJAABpAAAAAgkAAGgAAAACAAAAAAAAAABkBQAAAANiZXQFAAAAEnBsYXllcnNSYW5nZUxlbmd0aAQAAAALY2FzaW5vc1BhcnQJAABlAAAAAgkAAGQAAAACBQAAABlleHBlY3RlZENhc2lub3NJbml0aWFsQmV0BQAAAANiZXQFAAAAC3dpbm5lcnNQYXJ0BAAAAA13aW5uZXJBZGRyZXNzAwUAAAAJcGxheWVyV29uBQAAAA5wbGF5ZXJzQWRkcmVzcwUAAAAOY2FzaW5vc0FkZHJlc3MEAAAAEXByaXplR29lc1RvV2lubmVyAwkAAAAAAAACCAkAAZEAAAACCAUAAAADbXR4AAAACXRyYW5zZmVycwAAAAAAAAAAAAAAAAlyZWNpcGllbnQFAAAADXdpbm5lckFkZHJlc3MJAAAAAAAAAggJAAGRAAAAAggFAAAAA210eAAAAAl0cmFuc2ZlcnMAAAAAAAAAAAAAAAAGYW1vdW50CQAAZQAAAAIFAAAAC3dpbm5lcnNQYXJ0BQAAAApjYXNpbm9zRmVlBwQAAAAPZmVlR29lc1RvQ2FzaW5vAwkAAAAAAAACCAkAAZEAAAACCAUAAAADbXR4AAAACXRyYW5zZmVycwAAAAAAAAAAAQAAAAlyZWNpcGllbnQFAAAADmNhc2lub3NBZGRyZXNzCQAAAAAAAAIICQABkQAAAAIIBQAAAANtdHgAAAAJdHJhbnNmZXJzAAAAAAAAAAABAAAABmFtb3VudAkAAGQAAAACBQAAAAtjYXNpbm9zUGFydAUAAAAKY2FzaW5vc0ZlZQcEAAAAFXRoZXJlQXJlVHdvUmVjaXBpZW50cwkAAAAAAAACCAUAAAADbXR4AAAADXRyYW5zZmVyQ291bnQAAAAAAAAAAAIDAwMFAAAAB2ZlZUlzT2sFAAAAEXByaXplR29lc1RvV2lubmVyBwUAAAAPZmVlR29lc1RvQ2FzaW5vBwUAAAAVdGhlcmVBcmVUd29SZWNpcGllbnRzBwcHfAks4Q==", "chainId": 84, "height": 400114, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 1 #-}
2+{-# CONTENT_TYPE EXPRESSION #-}
3+let casinosPublicKey = base58'EhyhHkMbyNu8PwHoiJVCq2SciN9FmM5KvBeSN2NkTmeL'
4+let enctyptedCasinosChoice = base58'3Q3ZYTpxSj9etnpagL4PMYdRptWLuFLQtBNUHMRSyPDp'
5+let bet = 200000000
6+let casinosFee = 1000000
7+let maybeDataPlayersPublicKey = getString(tx.sender, "playersPublicKey")
8+let dataPlayersPublicKey = fromBase58String(extract(maybeDataPlayersPublicKey))
9+let dataLockedAt = extract(getInteger(tx.sender, "lockedAt"))
10+let maybeDataPlayerRangeStart = getInteger(tx.sender, "playersRangeStart")
11+let dataPlayersRangeStart = extract(maybeDataPlayerRangeStart)
12+let maybeDataPlayerRangeEnd = getInteger(tx.sender, "playersRangeEnd")
13+let dataPlayersRangeEnd = extract(maybeDataPlayerRangeEnd)
14+let maybeDataCasinosChoice = getInteger(tx.sender, "casinosChoice")
15+let dataCasinosChoice = extract(maybeDataCasinosChoice)
16+let timeoutInBlocks = 120
17+let dataTransactionFee = 500000
18+let transferTransactionFee = 500000
19+let massTransferTransactionFee = 600000
20+let maxPrize = 10000000000
21+let expectedCasinosInitialBet = if (((bet * 100) > maxPrize))
22+ then (maxPrize - bet)
23+ else (bet * 99)
24+let maxRangeSize = 97
25+let casinosAddress = addressFromPublicKey(casinosPublicKey)
26+let playersAddress = addressFromPublicKey(dataPlayersPublicKey)
27+let accountBalance = wavesBalance(tx.sender)
28+let senderIsCasino = sigVerify(tx.bodyBytes, tx.proofs[0], casinosPublicKey)
29+let senderIsPlayer = sigVerify(tx.bodyBytes, tx.proofs[0], dataPlayersPublicKey)
30+let isInitialState = if (!(isDefined(maybeDataPlayersPublicKey)))
31+ then (accountBalance >= ((expectedCasinosInitialBet + (dataTransactionFee * 3)) + massTransferTransactionFee))
32+ else false
33+let dataIsValidForLockedState = if (isDefined(maybeDataPlayersPublicKey))
34+ then !(isDefined(maybeDataPlayerRangeStart))
35+ else false
36+let lockedStateTimeout = (height > (dataLockedAt + timeoutInBlocks))
37+let isLockedState = if (dataIsValidForLockedState)
38+ then !(lockedStateTimeout)
39+ else false
40+let isUserDecidedNotToPlayState = if (dataIsValidForLockedState)
41+ then lockedStateTimeout
42+ else false
43+let dataIsValidForPlayerRevealedState = if (isDefined(maybeDataPlayerRangeStart))
44+ then !(isDefined(maybeDataCasinosChoice))
45+ else false
46+let playerRevealedStateTimeout = if ((height > (dataLockedAt + (timeoutInBlocks * 2))))
47+ then (accountBalance >= (((expectedCasinosInitialBet + bet) + dataTransactionFee) + massTransferTransactionFee))
48+ else false
49+let isPlayerRevealedHisChoiceState = if (dataIsValidForPlayerRevealedState)
50+ then !(playerRevealedStateTimeout)
51+ else false
52+let isCasinoDecidedNotToPlayState = if (dataIsValidForPlayerRevealedState)
53+ then playerRevealedStateTimeout
54+ else false
55+let isDataValidForWinnerIsDeterminedState = isDefined(maybeDataCasinosChoice)
56+let isBalanceValidForWinnerIsDeterminedState = (accountBalance >= ((expectedCasinosInitialBet + bet) + massTransferTransactionFee))
57+let isWinnerIsDeterminedState = if (isDataValidForWinnerIsDeterminedState)
58+ then isBalanceValidForWinnerIsDeterminedState
59+ else false
60+let isPlayerDecidedNotToSendBetState = if (isDataValidForWinnerIsDeterminedState)
61+ then !(isBalanceValidForWinnerIsDeterminedState)
62+ else false
63+match tx {
64+ case dtx: DataTransaction =>
65+ let payloadSize = size(dtx.data)
66+ let firstPayloadName = dtx.data[0].key
67+ let secondPayloadName = dtx.data[1].key
68+ let firstPayloadAsInteger = extract(getInteger(dtx.data, firstPayloadName))
69+ let secondPayloadAsString = extract(getString(dtx.data, secondPayloadName))
70+ let secondPayloadAsInteger = extract(getInteger(dtx.data, secondPayloadName))
71+ let feeIsOk = (dtx.fee == dataTransactionFee)
72+ if (if (isInitialState)
73+ then true
74+ else isUserDecidedNotToPlayState)
75+ then {
76+ let validLockedAtIsProvided = if ((firstPayloadName == "lockedAt"))
77+ then if ((firstPayloadAsInteger == height))
78+ then true
79+ else (firstPayloadAsInteger == (height - 1))
80+ else false
81+ let playersPublicKeyIsProvided = (secondPayloadName == "playersPublicKey")
82+ let noOtherDataWasProvided = (payloadSize == 2)
83+ if (if (if (if (senderIsCasino)
84+ then feeIsOk
85+ else false)
86+ then validLockedAtIsProvided
87+ else false)
88+ then playersPublicKeyIsProvided
89+ else false)
90+ then noOtherDataWasProvided
91+ else false
92+ }
93+ else if (isLockedState)
94+ then {
95+ let validRangeStartIsProvided = if (if ((firstPayloadName == "playersRangeStart"))
96+ then (firstPayloadAsInteger >= 1)
97+ else false)
98+ then (100 >= firstPayloadAsInteger)
99+ else false
100+ let validRangeEndIsProvided = if (if (if ((secondPayloadName == "playersRangeEnd"))
101+ then (secondPayloadAsInteger >= 1)
102+ else false)
103+ then (100 >= secondPayloadAsInteger)
104+ else false)
105+ then (secondPayloadAsInteger >= firstPayloadAsInteger)
106+ else false
107+ let rangeSize = ((secondPayloadAsInteger - firstPayloadAsInteger) + 1)
108+ let rangeSizeIsValid = if (if ((rangeSize >= 1))
109+ then (maxRangeSize >= rangeSize)
110+ else false)
111+ then (maxPrize >= ((bet * 100) / rangeSize))
112+ else false
113+ let noOtherDataWasProvided = (payloadSize == 2)
114+ if (if (if (if (if (senderIsPlayer)
115+ then feeIsOk
116+ else false)
117+ then validRangeStartIsProvided
118+ else false)
119+ then validRangeEndIsProvided
120+ else false)
121+ then rangeSizeIsValid
122+ else false)
123+ then noOtherDataWasProvided
124+ else false
125+ }
126+ else if (isPlayerRevealedHisChoiceState)
127+ then {
128+ let validCasinoChoiceWasProvided = if ((firstPayloadName == "casinosChoice"))
129+ then if ((firstPayloadAsInteger >= 1))
130+ then (100 >= firstPayloadAsInteger)
131+ else false
132+ else false
133+ let casinosSaltWasProvided = (secondPayloadName == "casinosSalt")
134+ let choiceAndSaltMatchesHardcodedValue = (keccak256(toBytes((toString(firstPayloadAsInteger) + secondPayloadAsString))) == enctyptedCasinosChoice)
135+ let noOtherDataWasProvided = (payloadSize == 2)
136+ if (if (if (if (if (senderIsCasino)
137+ then feeIsOk
138+ else false)
139+ then validCasinoChoiceWasProvided
140+ else false)
141+ then casinosSaltWasProvided
142+ else false)
143+ then choiceAndSaltMatchesHardcodedValue
144+ else false)
145+ then noOtherDataWasProvided
146+ else false
147+ }
148+ else false
149+ case ttx: TransferTransaction =>
150+ let feeIsOk = (ttx.fee == transferTransactionFee)
151+ if (isCasinoDecidedNotToPlayState)
152+ then {
153+ let recipientIsPlayer = (ttx.recipient == playersAddress)
154+ let amountIsCorrent = (ttx.amount == (bet * 2))
155+ if (if (feeIsOk)
156+ then recipientIsPlayer
157+ else false)
158+ then amountIsCorrent
159+ else false
160+ }
161+ else if (isPlayerDecidedNotToSendBetState)
162+ then {
163+ let recipientIsCasino = (ttx.recipient == casinosAddress)
164+ let amountIsCorrect = (ttx.amount == bet)
165+ if (if (feeIsOk)
166+ then recipientIsCasino
167+ else false)
168+ then amountIsCorrect
169+ else false
170+ }
171+ else false
172+ case mtx: MassTransferTransaction =>
173+ let feeIsOk = (mtx.fee == massTransferTransactionFee)
174+ if (isWinnerIsDeterminedState)
175+ then {
176+ let playerWon = if ((dataCasinosChoice >= dataPlayersRangeStart))
177+ then (dataPlayersRangeEnd >= dataCasinosChoice)
178+ else false
179+ let playersRangeLength = ((dataPlayersRangeEnd - dataPlayersRangeStart) + 1)
180+ let winnersPart = ((100 * bet) / playersRangeLength)
181+ let casinosPart = ((expectedCasinosInitialBet + bet) - winnersPart)
182+ let winnerAddress = if (playerWon)
183+ then playersAddress
184+ else casinosAddress
185+ let prizeGoesToWinner = if ((mtx.transfers[0].recipient == winnerAddress))
186+ then (mtx.transfers[0].amount == (winnersPart - casinosFee))
187+ else false
188+ let feeGoesToCasino = if ((mtx.transfers[1].recipient == casinosAddress))
189+ then (mtx.transfers[1].amount == (casinosPart + casinosFee))
190+ else false
191+ let thereAreTwoRecipients = (mtx.transferCount == 2)
192+ if (if (if (feeIsOk)
193+ then prizeGoesToWinner
194+ else false)
195+ then feeGoesToCasino
196+ else false)
197+ then thereAreTwoRecipients
198+ else false
199+ }
200+ else false
201+ case _ =>
202+ false
203+}

github/deemru/w8io/026f985 
16.46 ms