tx · GQx1mHqGBJFb52xUMG51GVVpckqqYELhkDJWukJMkqUC

3N3BYKYYK6TKoHtPLZYU8JRn8PcHTnauS9z:  -0.01000000 Waves

2021.12.15 22:24 [1835785] smart account 3N3BYKYYK6TKoHtPLZYU8JRn8PcHTnauS9z > SELF 0.00000000 Waves

{ "type": 13, "id": "GQx1mHqGBJFb52xUMG51GVVpckqqYELhkDJWukJMkqUC", "fee": 1000000, "feeAssetId": null, "timestamp": 1639596345989, "version": 2, "chainId": 84, "sender": "3N3BYKYYK6TKoHtPLZYU8JRn8PcHTnauS9z", "senderPublicKey": "FsjTCE3KV2vD2r7Du9D3J6Ea2T643E6zxzn6y24outXr", "proofs": [ "3E7cnvmdLao1GJwZgYGqiE9pzYSipNasnc7LR4RNbNCX6kvAzUm9gyqhyAm5Xkq1cSVShjFbVkVffAoG4PyiMxcf" ], "script": "base64:AAIDAAAAAAAACOIIARIFCgMBAQESBAoCCAgaDwoBQRIKcmFuZHNDb3VudBoTCgFCEg5yZW1haW5pbmdSYW5kcxoSCgFDEg1kYXRhS2V5c0NvdW50GhEKAUQSDGRhdGFEb25lVHhJZBoPCgFFEgpsYXN0T2Zmc2V0Gg0KAUYSCHNsb3dJZHgxGg0KAUcSCHNsb3dJZHgyGg0KAUgSCGZhc3RJZHgxGg0KAUkSCGZhc3RJZHgyGhAKAUoSC3JhbmRPckVtcHR5GhEKAUsSDGZ1bGxTdGF0ZVN0choYCgFMEhNleHRyYWN0R2FtZURhdGFMaXN0Gg4KAU0SCXNlc3Npb25JZBoPCgFOEgpyYXdEYXRhU3RyGg0KAU8SCG5leHRSYW5kGggKAVASA2RpdhoICgFREgNtaW4aEQoBUhIMY3VyclJhbmRzU3RyGhIKAVMSDXJlbWFpbmluZ0hhc2gaEAoBVBILbmV4dFJhbmRJbnQaEAoBVRILbmV4dFJhbmRTdHIaDgoBVhIJZHVwbGljYXRlGhEKAVcSDGdlbmVyYXRlUmFuZBoJCgFYEgRmcm9tGgcKAVkSAnRvGgwKAVoSB3JzYVNpZ24aDgoBYRIJUlNBUFVCTElDGgoKAmFBEgRyZW03GgsKAmFCEgVyYW5kOBoKCgJhQxIEcmVtOBoLCgJhRBIFcmFuZDkaCgoCYUUSBHJlbTkaDAoCYUYSBnJhbmQxMBoLCgJhRxIFcmVtMTAaDAoCYUgSBnJhbmQxMRoLCgJhSRIFcmVtMTEaFAoCYUoSDnZhbGlkYXRlRHR4S2V5GgoKAmFLEgRkYXRhGhEKAmFMEgtkYXRhS2V5SW5mbxoSCgJhTRIMa2V5U2Vzc2lvbklkGhAKAmFOEgprZXlQb3N0Zml4GhYKAmFPEhBrZXlQb3N0Zml4SW50T3B0GhMKAmFQEg1rZXlQb3N0Zml4SW50Gg0KAmFREgckbWF0Y2gwGgkKAmFSEgNzdHIaHAoCYVMSFnZhbGlkYXRlQW5kR2V0UmFuZHNQbXQaCQoCYVQSA3BtdBoQCgJhVRIKbWluRGF0YVBtdBoMCgJhVhIGYm91bmQxGhAKAmFXEgpiYXNlUHJpY2UxGgoKAmFYEgRkaXYxGgsKAmFZEgVkaWZmMRoMCgJhWhIGYm91bmQyGhUKAmFhEg9sYXN0T2Zmc2V0Qnl0ZXMaEgoCYWISDGN1cnJTbG93SWR4MRoSCgJhYxIMY3VyclNsb3dJZHgyGhIKAmFkEgxjdXJyRmFzdElkeDEaEgoCYWUSDGN1cnJGYXN0SWR4MhoQCgJhZhIKbmV3SW5jTGlzdBoUCgJhZxIObmV3T2Zmc2V0Qnl0ZXMaEQoCYWgSC25ld1Nsb3dJZHgxGhEKAmFpEgtuZXdTbG93SWR4MhoRCgJhahILbmV3RmFzdElkeDEaEQoCYWsSC25ld0Zhc3RJZHgyGg4KAmFsEghieXRlVmVjdBoOCgJhbRIIcmFuZEhhc2gaCwoCYW4SBXJhbmQxGgoKAmFvEgRyZW0xGgsKAmFwEgVyYW5kMhoKCgJhcRIEcmVtMhoLCgJhchIFcmFuZDMaCgoCYXMSBHJlbTMaCwoCYXQSBXJhbmQ0GgoKAmF1EgRyZW00GgsKAmF2EgVyYW5kNRoKCgJhdxIEcmVtNRoLCgJheBIFcmFuZDYaCgoCYXkSBHJlbTYaCwoCYXoSBXJhbmQ3GgsKAWISBlNFUlZFUhoVCgJiQRIPb3JnYW5pemVyUHViS2V5GhEKAmJCEgtyYW5kR2VuSW5mbxocCgJiQxIWbmV3UmVtYWluUmFuZHNDb3VudFN0choOCgJiRBIIbmV3U3RhdGUaEAoCYmESCmJhc2VQcmljZTIaCgoCYmISBGRpdjIaCwoCYmMSBWRpZmYyGgwKAmJkEgZib3VuZDMaEAoCYmUSCmJhc2VQcmljZTMaCgoCYmYSBGRpdjMaCwoCYmcSBWRpZmYzGhEKAmJoEgttaW5SYW5kc1BtdBoMCgJiaRIGbWluUG10GgcKAmJqEgFpGhEKAmJrEgtyYW5nZUxlbmd0aBoUCgJibBIObWF4UmFuZ2VMZW5ndGgaDwoCYm0SCXJhbmRUb0xlbhoTCgJibhINcmFuZHNDb3VudExlbhoWCgJibxIQZHluYW1pY1N0YXR1c0xlbhoTCgJicBINbWF4UmFuZHNDb3VudBoOCgJicRIIcmFuZHNQbXQaDQoCYnISB2RhdGFQbXQaEQoCYnMSC2RhdGFUeENvdW50GhMKAmJ0Eg1yYW5kc0NvdW50U3RyGg8KAmJ1Eglpbml0U3RhdGUaDwoCYnYSCXJzYTU4U2lnbhoUCgJidxIOZHJhd1BhcmFtc0xpc3QaFgoCYngSEHJlbWFpblJhbmRzQ291bnQaDQoCYnkSB2Zyb21TdHIaCwoCYnoSBXRvU3RyGgwKAWMSB1dBVkVMRVQaFQoBZBIQU0VTU0lPTklERklYU0laRRoTCgFlEg5SQU5EQ1lDTEVQUklDRRoVCgFmEhBNQVhSQU5EU1BFUkNZQ0xFGg4KAWcSCVNUQVRFSU5JVBoNCgFoEghEQVRBRE9ORRoSCgFpEg1TVEFURUZJTklTSEVEGg0KAWoSCElkeFN0YXRlGhQKAWsSD0lkeE9yZ2FuaXplclB1YhoQCgFsEgtJZHhSYW5kRnJvbRoOCgFtEglJZHhSYW5kVG8aEgoBbhINSWR4UmFuZHNDb3VudBoYCgFvEhNJZHhSZW1haW5SYW5kc0NvdW50GhUKAXASEElkeERhdGFLZXlzQ291bnQaFAoBcRIPSWR4RGF0YURvbmVUeElkGhIKAXISDUlkeExhc3RPZmZzZXQaEQoBcxIMSWR4Q3VyclJhbmRzGggKAXQSA2FicxoICgF1EgN2YWwaFwoBdhISZm9ybWF0U3RhdGVEYXRhU3RyGg4KAXcSCWRyYXdTdGF0ZRoWCgF4EhFvcmdhbml6ZXJQdWJLZXk1OBoNCgF5EghyYW5kRnJvbRoLCgF6EgZyYW5kVG8AAAAaAAAAAAFhCQACWwAAAAECAAABiE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeGpCbEJqZUxvYU9yY2V0YTM3MWYzWFBpblNDeVhMbDh0RUI1K0ZkVFFqTWEvQ2RaS1o1RldmTHd4WmJTYVNtOWtCV1BsS0F0MTh6d3pPTFhkRXdOR1Z1UmlyZkpIUjBKdTFTMmlnV3RiTGt4cHRRSUhyTnFFQmo0WCttbUpzV3RtdGZacmVYTXhMVXZJVlREL1B2bTQ1TUZua053OHczNXJSa3dZQk16K291NE5jaTlvRUxNZGRDTmtCMHQ5MlBFdzRqTDRzQmJpeHJndzJDRXpBNXFIMU1YejNYYWJwTWxQZEIzeFQrdktxaTJ3TWpzR3Z3L01aSEJVZFZVQnEyekNlYkRBR28wY0hSMjJraGpCbElBMFFhaDBqdGtMSHhMa29kem9RRmlEd0NQMzg4N1RwTjZ1M1R0MmkrN1pWZloxaHB4L0J5eCtzT2NWZTlCRWtWbjB3SURBUUFC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AmF5CQAAygAAAAIFAAAAAmFtCQAAZAAAAAIFAAAAAmFnAAAAAAAAAAAGBAAAAAJhQQMJAQAAAAIhPQAAAAIJAAGRAAAAAgUAAAACYXoAAAAAAAAAAAECAAAAAAkAAGUAAAACBQAAAAJheQAAAAAAAAAAAQUAAAACYXkEAAAAAmFCCQEAAAABTwAAAAUFAAAAAVAFAAAAAVgJAAGRAAAAAgUAAAACYXoAAAAAAAAAAAAFAAAAAmFBCQAAygAAAAIFAAAAAmFtCQAAZAAAAAIFAAAAAmFnAAAAAAAAAAAHBAAAAAJhQwMJAQAAAAIhPQAAAAIJAAGRAAAAAgUAAAACYUIAAAAAAAAAAAECAAAAAAkAAGUAAAACBQAAAAJhQQAAAAAAAAAAAQUAAAACYUEEAAAAAmFECQEAAAABTwAAAAUFAAAAAVAFAAAAAVgJAAGRAAAAAgUAAAACYUIAAAAAAAAAAAAFAAAAAmFDCQAAygAAAAIFAAAAAmFtCQAAZAAAAAIFAAAAAmFnAAAAAAAAAAAIBAAAAAJhRQMJAQAAAAIhPQAAAAIJAAGRAAAAAgUAAAACYUQAAAAAAAAAAAECAAAAAAkAAGUAAAACBQAAAAJhQwAAAAAAAAAAAQUAAAACYUMEAAAAAmFGCQEAAAABTwAAAAUFAAAAAVAFAAAAAVgJAAGRAAAAAgUAAAACYUQAAAAAAAAAAAAFAAAAAmFFCQAAygAAAAIFAAAAAmFtCQAAZAAAAAIFAAAAAmFnAAAAAAAAAAAJBAAAAAJhRwMJAQAAAAIhPQAAAAIJAAGRAAAAAgUAAAACYUYAAAAAAAAAAAECAAAAAAkAAGUAAAACBQAAAAJhRQAAAAAAAAAAAQUAAAACYUUEAAAAAmFICQEAAAABTwAAAAUFAAAAAVAFAAAAAVgJAAGRAAAAAgUAAAACYUYAAAAAAAAAAAAFAAAAAmFHCQAAygAAAAIFAAAAAmFtCQAAZAAAAAIFAAAAAmFnAAAAAAAAAAAKBAAAAAJhSQMJAQAAAAIhPQAAAAIJAAGRAAAAAgUAAAACYUgAAAAAAAAAAAECAAAAAAkAAGUAAAACBQAAAAJhRwAAAAAAAAAAAQUAAAACYUcJAARMAAAAAgkAAZEAAAACBQAAAAJhSAAAAAAAAAAAAAkABEwAAAACAwkAAAAAAAACBQAAAAJhSQAAAAAAAAAAAAIAAAABMAkAAaQAAAABBQAAAAJhSQkABEwAAAACCQABpAAAAAEJAABkAAAAAgUAAAACYWcAAAAAAAAAAAoJAARMAAAAAgkAAaQAAAABBQAAAAJhaAkABEwAAAACCQABpAAAAAEFAAAAAmFpCQAETAAAAAIJAAGkAAAAAQUAAAACYWoJAARMAAAAAgkAAaQAAAABBQAAAAJhawUAAAADbmlsAQAAAAJhSgAAAAMAAAABTQAAAAFDAAAAAmFLBAAAAAJhTAkABLUAAAACCAUAAAACYUsAAAADa2V5AgAAAAFfAwkBAAAAAiE9AAAAAgkAAZAAAAABBQAAAAJhTAAAAAAAAAAAAgkAAAIAAAABAgAAAD5JbnZhbGlkIGRhdGEga2V5IGZvcm1hdC4gSXQgbXVzdCBmb2xsb3cgdG8gJHtzZXNzaW9uSWR9XyR7bnVtfQQAAAACYU0JAAGRAAAAAgUAAAACYUwAAAAAAAAAAAAEAAAAAmFOCQABkQAAAAIFAAAAAmFMAAAAAAAAAAABAwkBAAAAAiE9AAAAAgUAAAABTQUAAAACYU0JAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAsU2V2ZXJhbCBkYXRhIGtleXMgaGF2ZSBkaWZmZXJlbnQgc2Vzc2lvbklkOiAFAAAAAU0CAAAABSBhbmQgBQAAAAJhTQMJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMIBQAAAAJhSwAAAANrZXkJAAACAAAAAQkAASwAAAACAgAAAEFPbmUgb2YgdGhlIGRhdGEga2V5cyBoYXMgYWxyZWFkeSBwcmVzZW50ZWQgaW4gYWNjb3VudCBzdGF0ZToga2V5PQgFAAAAAmFLAAAAA2tleQMJAABmAAAAAgkAATEAAAABBQAAAAJhTgAAAAAAAAAABAkAAAIAAAABAgAAAG1JbnZhbGlkIGRhdGEga2V5IGZvcm1hdC4gSXQgbXVzdCBmb2xsb3cgdG8gJHtzZXNzaW9uSWR9XyR7bnVtfSB3aGVyZSAke251bX0gbGVuZ3RoIGNvdWxkbid0IGJlIGdyZWF0ZXIgdGhhbiA0AwkAAAAAAAACCQABLwAAAAIFAAAAAmFOAAAAAAAAAAABAgAAAAEwCQAAAgAAAAECAAAAYUludmFsaWQgZGF0YSBrZXkgZm9ybWF0LiBJdCBtdXN0IGZvbGxvdyB0byAke3Nlc3Npb25JZH1fJHtudW19IHdoZXJlICR7bnVtfSBjb3VsZG4ndCBzdGFydCBmcm9tIDAEAAAAAmFPCQAEtgAAAAEFAAAAAmFOAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAAmFPBAAAAAJhUAkBAAAAB2V4dHJhY3QAAAABBQAAAAJhTwMDCQAAZgAAAAIAAAAAAAAAAAEFAAAAAmFQBgkAAGYAAAACBQAAAAJhUAUAAAABQwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAPkludmFsaWQgZGF0YSBrZXkgZm9ybWF0LiBJdCBtdXN0IGZvbGxvdyB0byAke3Nlc3Npb25JZH1fJHtudW19AgAAADIgd2hlcmUgJHtudW19IG11c3QgYmUgYSB2YWxpZCBpbnQgdmFsdWUgZnJvbSAxIHRvIAkAAaQAAAABBQAAAAFDAgAAAA8gYnV0IGFjdHVhbE51bT0JAAGkAAAAAQUAAAACYVAEAAAAAmFRCAUAAAACYUsAAAAFdmFsdWUDCQAAAQAAAAIFAAAAAmFRAgAAAAZTdHJpbmcEAAAAAmFSBQAAAAJhUQYJAAACAAAAAQkAASwAAAACBQAAAAFNAgAAADkgZHJhdzogb25seSBTdHJpbmcgdHlwZSBpcyBhY2NlcHRlZCBmb3IgZGF0YSB0cmFuc2FjdGlvbnMJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAPkludmFsaWQgZGF0YSBrZXkgZm9ybWF0LiBJdCBtdXN0IGZvbGxvdyB0byAke3Nlc3Npb25JZH1fJHtudW19AgAAAEYgd2hlcmUgJHtudW19IG11c3QgYmUgYSB2YWxpZCBpbnQgdmFsdWUgZnJvbSAxIHRvIDMxMjUwIGJ1dCBhY3R1YWxOdW09BQAAAAJhTgEAAAACYVMAAAADAAAAAUEAAAACYVQAAAACYVUEAAAAAmFWAAAAAAAAAAPoBAAAAAJhVwkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAA0FAAAAAWMAAAAAAAAAAGQEAAAAAmFYAAAAAAAAAAAyBAAAAAJhWQkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAAgFAAAAAWMAAAAAAAAAAGQEAAAAAmFaAAAAAAAAABOIBAAAAAJiYQkAAGkAAAACCQAAaAAAAAIAAAAAAAAAASkFAAAAAWMAAAAAAAAAAGQEAAAAAmJiAAAAAAAAAAPoBAAAAAJiYwkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAI8FAAAAAWMAAAAAAAAAAGQEAAAAAmJkAAAAAAAAAMNQBAAAAAJiZQkAAGkAAAACCQAAaAAAAAIAAAAAAAAABZMFAAAAAWMAAAAAAAAAAGQEAAAAAmJmAAAAAAAAABOIBAAAAAJiZwkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAsEFAAAAAWMAAAAAAAAAAGQEAAAAAmJoAwkAAGYAAAACBQAAAAJhVgUAAAABQQkAAGQAAAACBQAAAAJhVwkAAGgAAAACCQAAaQAAAAIFAAAAAUEFAAAAAmFYBQAAAAJhWQMJAABmAAAAAgUAAAACYVoFAAAAAUEJAABkAAAAAgUAAAACYmEJAABoAAAAAgkAAGUAAAACCQAAaQAAAAIFAAAAAUEFAAAAAmJiAAAAAAAAAAABBQAAAAJiYwMJAABmAAAAAgUAAAACYmQFAAAAAUEJAABkAAAAAgUAAAACYmUJAABoAAAAAgkAAGUAAAACCQAAaQAAAAIFAAAAAUEFAAAAAmJmAAAAAAAAAAABBQAAAAJiZwkAAAIAAAABAgAAAD1QbGVhc2UgY29udGFjdCBvdXIgc2FsZXMgdGVhbSB0byBnZW5lcmF0ZSBtb3JlIHRoYW4gNTBrIHJhbmRzBAAAAAJiaQkAAGQAAAACBQAAAAJiaAUAAAACYVUDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAAmFUAAAAB2Fzc2V0SWQJAAACAAAAAQIAAAA4T25seSBXQVZFUyBjYW4gYmUgdXNlZCBhcyBhIHBheW1lbnQgZm9yIHJhbmRzIGdlbmVyYXRpb24DCQAAZgAAAAIFAAAAAmJpCAUAAAACYVQAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAClBdHRhY2hlZCBwYXltZW50IGlzIHRvIHNtYWxsIHRvIGdlbmVyYXRlIAkAAaQAAAABBQAAAAFBAgAAAEEgdW5pcXVlIHJhbmRvbXMgbnVtYmVycyBhbmQgdXBsb2FkIGF0IGxlYXN0IDEgZGF0YSB0eDogYWN0dWFsUG10PQkAAaQAAAABCAUAAAACYVQAAAAGYW1vdW50AgAAAA8gYnV0IG1pblBtdCBpcyAJAAGkAAAAAQUAAAACYmkFAAAAAmJoAAAAAgAAAAJiagEAAAAIaW5pdERyYXcAAAADAAAAAXkAAAABegAAAAFBBAAAAAFNCQACWAAAAAEIBQAAAAJiagAAAA10cmFuc2FjdGlvbklkBAAAAAJiawkAAGQAAAACCQAAZQAAAAIFAAAAAXoFAAAAAXkAAAAAAAAAAAEEAAAAAmJsCQAAaQAAAAIFAAAAAmJrAAAAAAAAAAACBAAAAAJibQkAATEAAAABCQABpAAAAAEJAABlAAAAAgUAAAABegAAAAAAAAAAAQQAAAACYm4JAAExAAAAAQkAAaQAAAABBQAAAAFBBAAAAAJibwkAAGQAAAACCQAAZAAAAAIJAABoAAAAAgAAAAAAAAAAAgUAAAACYm0JAABoAAAAAgAAAAAAAAAAAgUAAAACYm4AAAAAAAAAAAQEAAAAAmJwCQAAaQAAAAIJAABlAAAAAgkAAGUAAAACAAAAAAAAABQAAAAAAAAAAACvBQAAAAJibwkAAGQAAAACBQAAAAJibQAAAAAAAAAAAQMDCQAAZwAAAAIAAAAAAAAAAAAFAAAAAXkGCQAAZwAAAAIAAAAAAAAAAAAFAAAAAXoJAAACAAAAAQIAAAAqcmFuZEZyb20gYW5kIHJhbmRUbyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwAwkAAGcAAAACBQAAAAF5BQAAAAF6CQAAAgAAAAECAAAAKHJhbmRGcm9tIG11c3QgYmUgc3RyaWN0IGxlc3MgdGhlbiByYW5kVG8DCQAAZgAAAAIFAAAAAUEFAAAAAmJrCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAXSW1wb3NzaWJsZSB0byBnZW5lcmF0ZSAJAAGkAAAAAQUAAAABQQIAAAArIHVuaXF1ZSBudW1iZXJzIGZvciBwcm92aWRlZCByYW5kb20gcmFuZ2UgWwkAAaQAAAABBQAAAAF5AgAAAAIsIAkAAaQAAAABBQAAAAF6AgAAABNdIHdpdGggYWN0dWFsIHNpemUgCQABpAAAAAEFAAAAAmJrAwkAAGYAAAACBQAAAAFBBQAAAAJibAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAEByYW5kc0NvdW50IG11c3QgYmUgbGVzcyB0aGVuIDUwJSBvZiBwYXNzZWQgcmFuZ2UgbGVuZ3RoOiByYW5nZT1bCQABpAAAAAEFAAAAAXkCAAAAAiwgCQABpAAAAAEFAAAAAXoCAAAAD10sIHJhbmdlTGVuZ3RoPQkAAaQAAAABBQAAAAJiawIAAAAMIHJhbmRzQ291bnQ9CQABpAAAAAEFAAAAAUECAAAAEyBhbGxvd2VkUmFuZHNDb3VudD0JAAGkAAAAAQUAAAACYmwDCQAAZgAAAAIFAAAAAUEFAAAAAmJwCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAADxyYW5kc0NvdW50IGNvdWxkbid0IGJlIGtlcHQgaW4gMSBkYXRhIGVudHJ5OiAxX3JhbmROdW1TcGFjZT0JAAGkAAAAAQkAAGQAAAACBQAAAAJibQAAAAAAAAAAAQIAAAAWIG1heEFsbG93ZWRSYW5kc0NvdW50PQkAAaQAAAABBQAAAAJicAIAAAASIGFjdHVhbFJhbmRzQ291bnQ9CQABpAAAAAEFAAAAAUEDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCAUAAAACYmoAAAAHcGF5bWVudAkAAAIAAAABAgAAADhQbGVhc2UgcHJvdmlkZSBwYXltZW50IHRvIGdlbmVyYXRlIHVuaXF1ZSByYW5kb20gbnVtYmVycwQAAAACYVQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAmJqAAAAB3BheW1lbnQEAAAAAmFVCQAAZAAAAAIJAABoAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAAAWMAAAAAAAAAAAEAAAAAAAAAA+gAAAAAAAAAACEJAABpAAAAAgkAAGgAAAACBQAAAAFjAAAAAAAAAAAEAAAAAAAAAAPoBAAAAAJicQkBAAAAAmFTAAAAAwUAAAABQQUAAAACYVQFAAAAAmFVBAAAAAJicgkAAGUAAAACCAUAAAACYVQAAAAGYW1vdW50BQAAAAJicQQAAAACYnMJAABpAAAAAgUAAAACYnIFAAAAAmFVBAAAAAFDAwkAAGcAAAACAAAAAAAAAHoSCQAAaAAAAAIFAAAAAmJzAAAAAAAAAAAFCQAAaAAAAAIFAAAAAmJzAAAAAAAAAAAFAAAAAAAAAHoSBAAAAAF4CQACWAAAAAEIBQAAAAJiagAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAAmJ0CQABpAAAAAEFAAAAAUEEAAAAAmJ1CQEAAAABdgAAAA4FAAAAAWgFAAAAAXgJAAGkAAAAAQUAAAABeQkAAaQAAAABBQAAAAF6BQAAAAJidAUAAAACYnQJAAGkAAAAAQUAAAABQwkAAlgAAAABCAUAAAACYmoAAAANdHJhbnNhY3Rpb25JZAIAAAABMAIAAAABMAIAAAABMQIAAAABMAIAAAABMQIAAAAACQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAABTQUAAAACYnUFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAFiBQAAAAJicQUAAAAEdW5pdAUAAAADbmlsAAAAAmJqAQAAAAZyYW5kb20AAAACAAAAAU0AAAABWgQAAAACYnYJAAJbAAAAAQUAAAABWgQAAAACYncJAQAAAAFMAAAAAQUAAAABTQQAAAABdwkAAZEAAAACBQAAAAJidwUAAAABagQAAAABeAkAAZEAAAACBQAAAAJidwUAAAABawQAAAACYnQJAAGRAAAAAgUAAAACYncFAAAAAW4EAAAAAmJ4CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAACYncFAAAAAW8EAAAAAmFhCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAACYncFAAAAAXIEAAAAAVIJAAGRAAAAAgUAAAACYncFAAAAAXMEAAAAAmJ5CQABkQAAAAIFAAAAAmJ3BQAAAAFsBAAAAAJiegkAAZEAAAACBQAAAAJidwUAAAABbQQAAAABRAkAAZEAAAACBQAAAAJidwUAAAABcQQAAAABRgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAAmJ3AAAAAAAAAAAJBAAAAAFHCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAACYncAAAAAAAAAAAoEAAAAAUgJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAJidwAAAAAAAAAACwQAAAABSQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAAmJ3AAAAAAAAAAAMBAAAAAFYCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAAAmJ5BAAAAAFZCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAAAmJ6BAAAAAJiQQkAAlkAAAABBQAAAAF4AwkBAAAAAiE9AAAAAgUAAAABdwUAAAABaAkAAAIAAAABCQABLAAAAAIFAAAAAU0CAAAAOyBkcmF3OiBpdCBtdXN0IGJlIGluIFJFQURZIHN0YXRlIHRvIGdlbmVyYXRlIHJhbmRvbSBudW1iZXJzAwkBAAAAASEAAAABCQAB+AAAAAQFAAAABlNIQTI1NgkAAZsAAAABAgAAACxDdGt6RmlSOGZpY2Y5dnlZQjFxSmszTU5iWkRTZUVjQmE5akVuTVpvOHRvcwUAAAACYnYFAAAAAWEJAAACAAAAAQIAAAAVSW52YWxpZCBSU0Egc2lnbmF0dXJlBAAAAAJiQgkBAAAAAVcAAAALBQAAAAFNBQAAAAFYBQAAAAFZBQAAAAJidgUAAAABUgUAAAACYngFAAAAAmFhBQAAAAFGBQAAAAFHBQAAAAFIBQAAAAFJBAAAAAJiQwkAAZEAAAACBQAAAAJiQgAAAAAAAAAAAQQAAAACYkQDCQAAAAAAAAIFAAAAAmJDAgAAAAEwBQAAAAFpBQAAAAFoCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAFNCQEAAAABdgAAAA4FAAAAAmJEBQAAAAF4BQAAAAJieQUAAAACYnoFAAAAAmJ0BQAAAAJiQwkAAZEAAAACBQAAAAJidwUAAAABcAUAAAABRAkAAZEAAAACBQAAAAJiQgAAAAAAAAAAAgkAAZEAAAACBQAAAAJiQgAAAAAAAAAAAwkAAZEAAAACBQAAAAJiQgAAAAAAAAAABAkAAZEAAAACBQAAAAJiQgAAAAAAAAAABQkAAZEAAAACBQAAAAJiQgAAAAAAAAAABgkAAZEAAAACBQAAAAJiQgAAAAAAAAAAAAUAAAADbmlsAAAAAHG+mI8=", "height": 1835785, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5ztxo6bU53dQp1M8GYX7vCo8dAXPaGe9CPBLswg24Lbd Next: 2cjjamSysv3jijYSnmgCrUxGU9cBdVkUM3yVi7XcvGx3 Diff:
OldNewDifferences
263263 let organizerPubKey = fromBase58String(organizerPubKey58)
264264 if ((drawState != DATADONE))
265265 then throw((sessionId + " draw: it must be in READY state to generate random numbers"))
266- else if (!(rsaVerify(SHA256, toBytes(sessionId), rsa58Sign, RSAPUBLIC)))
266+ else if (!(rsaVerify(SHA256, toBytes("CtkzFiR8ficf9vyYB1qJk3MNbZDSeEcBa9jEnMZo8tos"), rsa58Sign, RSAPUBLIC)))
267267 then throw("Invalid RSA signature")
268268 else {
269269 let randGenInfo = generateRand(sessionId, from, to, rsa58Sign, currRandsStr, remainRandsCount, lastOffsetBytes, slowIdx1, slowIdx2, fastIdx1, fastIdx2)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let RSAPUBLIC = fromBase64String("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxjBlBjeLoaOrceta371f3XPinSCyXLl8tEB5+FdTQjMa/CdZKZ5FWfLwxZbSaSm9kBWPlKAt18zwzOLXdEwNGVuRirfJHR0Ju1S2igWtbLkxptQIHrNqEBj4X+mmJsWtmtfZreXMxLUvIVTD/Pvm45MFnkNw8w35rRkwYBMz+ou4Nci9oELMddCNkB0t92PEw4jL4sBbixrgw2CEzA5qH1MXz3XabpMlPdB3xT+vKqi2wMjsGvw/MZHBUdVUBq2zCebDAGo0cHR22khjBlIA0Qah0jtkLHxLkodzoQFiDwCP3887TpN6u3Tt2i+7ZVfZ1hpx/Byx+sOcVe9BEkVn0wIDAQAB")
55
66 let SERVER = addressFromStringValue("3N4vdqMsEsAZSJWfwYJcaCgUzASJTC2BWsP")
77
88 let WAVELET = ((100 * 1000) * 1000)
99
1010 let SESSIONIDFIXSIZE = 44
1111
1212 let RANDCYCLEPRICE = ((5 * WAVELET) / 1000)
1313
1414 let MAXRANDSPERCYCLE = 14
1515
1616 let STATEINIT = "INIT"
1717
1818 let DATADONE = "READY"
1919
2020 let STATEFINISHED = "FINISHED"
2121
2222 let IdxState = 0
2323
2424 let IdxOrganizerPub = 1
2525
2626 let IdxRandFrom = 2
2727
2828 let IdxRandTo = 3
2929
3030 let IdxRandsCount = 4
3131
3232 let IdxRemainRandsCount = 5
3333
3434 let IdxDataKeysCount = 6
3535
3636 let IdxDataDoneTxId = 7
3737
3838 let IdxLastOffset = 8
3939
4040 let IdxCurrRands = 13
4141
4242 func abs (val) = if ((0 > val))
4343 then -(val)
4444 else val
4545
4646
4747 func formatStateDataStr (drawState,organizerPubKey58,randFrom,randTo,randsCount,remainingRands,dataKeysCount,dataDoneTxId,lastOffset,slowIdx1,slowIdx2,fastIdx1,fastIdx2,randOrEmpty) = {
4848 let fullStateStr = ((((((((((((((((((((((((drawState + "_") + organizerPubKey58) + "_") + randFrom) + "_") + randTo) + "_") + randsCount) + "_") + remainingRands) + "_") + dataKeysCount) + "_") + dataDoneTxId) + "_") + lastOffset) + "_") + slowIdx1) + "_") + slowIdx2) + "_") + fastIdx1) + "_") + fastIdx2)
4949 if ((randOrEmpty == ""))
5050 then ((fullStateStr + "_") + "-")
5151 else ((fullStateStr + "_") + randOrEmpty)
5252 }
5353
5454
5555 func extractGameDataList (sessionId) = {
5656 let rawDataStr = getStringValue(this, sessionId)
5757 split(rawDataStr, "_")
5858 }
5959
6060
6161 func nextRand (div,min,currRandsStr,remainingRands,remainingHash) = {
6262 let nextRandInt = ((abs(toInt(remainingHash)) % div) + min)
6363 let nextRandStr = toString(nextRandInt)
6464 let duplicate = isDefined(indexOf(currRandsStr, nextRandStr))
6565 if (if (!(duplicate))
6666 then (remainingRands > 0)
6767 else false)
6868 then [((currRandsStr + "-") + nextRandStr), "yes"]
6969 else [currRandsStr, ""]
7070 }
7171
7272
7373 func generateRand (sessionId,from,to,rsaSign,currRandsStr,remainingRands,lastOffsetBytes,currSlowIdx1,currSlowIdx2,currFastIdx1,currFastIdx2) = {
7474 let newIncList = if (((lastOffsetBytes + 1) > 87))
7575 then if ((currFastIdx2 > 241))
7676 then [0, (currSlowIdx1 + 1), (currSlowIdx2 + 1), 0, 1]
7777 else [0, currSlowIdx1, currSlowIdx2, (currFastIdx1 + 1), (currFastIdx2 + 1)]
7878 else [(lastOffsetBytes + 1), currSlowIdx1, currSlowIdx2, currFastIdx1, currFastIdx2]
7979 let newOffsetBytes = newIncList[0]
8080 let newSlowIdx1 = newIncList[1]
8181 let newSlowIdx2 = newIncList[2]
8282 let newFastIdx1 = newIncList[3]
8383 let newFastIdx2 = newIncList[4]
8484 let byteVect = (((((((take(drop(rsaSign, newSlowIdx1), 1) + take(drop(rsaSign, 1), 1)) + take(drop(rsaSign, newFastIdx1), 1)) + take(drop(rsaSign, 3), 1)) + take(drop(rsaSign, newSlowIdx2), 1)) + take(drop(rsaSign, 5), 1)) + take(drop(rsaSign, 6), 1)) + take(drop(rsaSign, newFastIdx2), 1))
8585 let randHash = ((sha256(byteVect) + blake2b256(byteVect)) + keccak256(byteVect))
8686 let div = ((to - from) + 1)
8787 let rand1 = nextRand(div, from, currRandsStr, remainingRands, drop(randHash, newOffsetBytes))
8888 let rem1 = if ((rand1[1] != ""))
8989 then (remainingRands - 1)
9090 else remainingRands
9191 let rand2 = nextRand(div, from, rand1[0], rem1, drop(randHash, (newOffsetBytes + 1)))
9292 let rem2 = if ((rand2[1] != ""))
9393 then (rem1 - 1)
9494 else rem1
9595 let rand3 = nextRand(div, from, rand2[0], rem2, drop(randHash, (newOffsetBytes + 2)))
9696 let rem3 = if ((rand3[1] != ""))
9797 then (rem2 - 1)
9898 else rem2
9999 let rand4 = nextRand(div, from, rand3[0], rem3, drop(randHash, (newOffsetBytes + 3)))
100100 let rem4 = if ((rand4[1] != ""))
101101 then (rem3 - 1)
102102 else rem3
103103 let rand5 = nextRand(div, from, rand4[0], rem4, drop(randHash, (newOffsetBytes + 4)))
104104 let rem5 = if ((rand5[1] != ""))
105105 then (rem4 - 1)
106106 else rem4
107107 let rand6 = nextRand(div, from, rand5[0], rem5, drop(randHash, (newOffsetBytes + 5)))
108108 let rem6 = if ((rand6[1] != ""))
109109 then (rem5 - 1)
110110 else rem5
111111 let rand7 = nextRand(div, from, rand6[0], rem6, drop(randHash, (newOffsetBytes + 6)))
112112 let rem7 = if ((rand7[1] != ""))
113113 then (rem6 - 1)
114114 else rem6
115115 let rand8 = nextRand(div, from, rand7[0], rem7, drop(randHash, (newOffsetBytes + 7)))
116116 let rem8 = if ((rand8[1] != ""))
117117 then (rem7 - 1)
118118 else rem7
119119 let rand9 = nextRand(div, from, rand8[0], rem8, drop(randHash, (newOffsetBytes + 8)))
120120 let rem9 = if ((rand9[1] != ""))
121121 then (rem8 - 1)
122122 else rem8
123123 let rand10 = nextRand(div, from, rand9[0], rem9, drop(randHash, (newOffsetBytes + 9)))
124124 let rem10 = if ((rand10[1] != ""))
125125 then (rem9 - 1)
126126 else rem9
127127 let rand11 = nextRand(div, from, rand10[0], rem10, drop(randHash, (newOffsetBytes + 10)))
128128 let rem11 = if ((rand11[1] != ""))
129129 then (rem10 - 1)
130130 else rem10
131131 [rand11[0], if ((rem11 == 0))
132132 then "0"
133133 else toString(rem11), toString((newOffsetBytes + 10)), toString(newSlowIdx1), toString(newSlowIdx2), toString(newFastIdx1), toString(newFastIdx2)]
134134 }
135135
136136
137137 func validateDtxKey (sessionId,dataKeysCount,data) = {
138138 let dataKeyInfo = split(data.key, "_")
139139 if ((size(dataKeyInfo) != 2))
140140 then throw("Invalid data key format. It must follow to ${sessionId}_${num}")
141141 else {
142142 let keySessionId = dataKeyInfo[0]
143143 let keyPostfix = dataKeyInfo[1]
144144 if ((sessionId != keySessionId))
145145 then throw(((("Several data keys have different sessionId: " + sessionId) + " and ") + keySessionId))
146146 else if (isDefined(getString(this, data.key)))
147147 then throw(("One of the data keys has already presented in account state: key=" + data.key))
148148 else if ((size(keyPostfix) > 4))
149149 then throw("Invalid data key format. It must follow to ${sessionId}_${num} where ${num} length couldn't be greater than 4")
150150 else if ((take(keyPostfix, 1) == "0"))
151151 then throw("Invalid data key format. It must follow to ${sessionId}_${num} where ${num} couldn't start from 0")
152152 else {
153153 let keyPostfixIntOpt = parseInt(keyPostfix)
154154 if (isDefined(keyPostfixIntOpt))
155155 then {
156156 let keyPostfixInt = extract(keyPostfixIntOpt)
157157 if (if ((1 > keyPostfixInt))
158158 then true
159159 else (keyPostfixInt > dataKeysCount))
160160 then throw((((("Invalid data key format. It must follow to ${sessionId}_${num}" + " where ${num} must be a valid int value from 1 to ") + toString(dataKeysCount)) + " but actualNum=") + toString(keyPostfixInt)))
161161 else match data.value {
162162 case str: String =>
163163 true
164164 case _ =>
165165 throw((sessionId + " draw: only String type is accepted for data transactions"))
166166 }
167167 }
168168 else throw((("Invalid data key format. It must follow to ${sessionId}_${num}" + " where ${num} must be a valid int value from 1 to 31250 but actualNum=") + keyPostfix))
169169 }
170170 }
171171 }
172172
173173
174174 func validateAndGetRandsPmt (randsCount,pmt,minDataPmt) = {
175175 let bound1 = 1000
176176 let basePrice1 = ((13 * WAVELET) / 100)
177177 let div1 = 50
178178 let diff1 = ((8 * WAVELET) / 100)
179179 let bound2 = 5000
180180 let basePrice2 = ((297 * WAVELET) / 100)
181181 let div2 = 1000
182182 let diff2 = ((143 * WAVELET) / 100)
183183 let bound3 = 50000
184184 let basePrice3 = ((1427 * WAVELET) / 100)
185185 let div3 = 5000
186186 let diff3 = ((705 * WAVELET) / 100)
187187 let minRandsPmt = if ((bound1 > randsCount))
188188 then (basePrice1 + ((randsCount / div1) * diff1))
189189 else if ((bound2 > randsCount))
190190 then (basePrice2 + (((randsCount / div2) - 1) * diff2))
191191 else if ((bound3 > randsCount))
192192 then (basePrice3 + (((randsCount / div3) - 1) * diff3))
193193 else throw("Please contact our sales team to generate more than 50k rands")
194194 let minPmt = (minRandsPmt + minDataPmt)
195195 if (isDefined(pmt.assetId))
196196 then throw("Only WAVES can be used as a payment for rands generation")
197197 else if ((minPmt > pmt.amount))
198198 then throw(((((("Attached payment is to small to generate " + toString(randsCount)) + " unique randoms numbers and upload at least 1 data tx: actualPmt=") + toString(pmt.amount)) + " but minPmt is ") + toString(minPmt)))
199199 else minRandsPmt
200200 }
201201
202202
203203 @Callable(i)
204204 func initDraw (randFrom,randTo,randsCount) = {
205205 let sessionId = toBase58String(i.transactionId)
206206 let rangeLength = ((randTo - randFrom) + 1)
207207 let maxRangeLength = (rangeLength / 2)
208208 let randToLen = size(toString((randTo - 1)))
209209 let randsCountLen = size(toString(randsCount))
210210 let dynamicStatusLen = (((2 * randToLen) + (2 * randsCountLen)) + 4)
211211 let maxRandsCount = (((5120 - 175) - dynamicStatusLen) / (randToLen + 1))
212212 if (if ((0 >= randFrom))
213213 then true
214214 else (0 >= randTo))
215215 then throw("randFrom and randTo must be greater than 0")
216216 else if ((randFrom >= randTo))
217217 then throw("randFrom must be strict less then randTo")
218218 else if ((randsCount > rangeLength))
219219 then throw(((((((("Impossible to generate " + toString(randsCount)) + " unique numbers for provided random range [") + toString(randFrom)) + ", ") + toString(randTo)) + "] with actual size ") + toString(rangeLength)))
220220 else if ((randsCount > maxRangeLength))
221221 then throw(((((((((("randsCount must be less then 50% of passed range length: range=[" + toString(randFrom)) + ", ") + toString(randTo)) + "], rangeLength=") + toString(rangeLength)) + " randsCount=") + toString(randsCount)) + " allowedRandsCount=") + toString(maxRangeLength)))
222222 else if ((randsCount > maxRandsCount))
223223 then throw(((((("randsCount couldn't be kept in 1 data entry: 1_randNumSpace=" + toString((randToLen + 1))) + " maxAllowedRandsCount=") + toString(maxRandsCount)) + " actualRandsCount=") + toString(randsCount)))
224224 else if (!(isDefined(i.payment)))
225225 then throw("Please provide payment to generate unique random numbers")
226226 else {
227227 let pmt = extract(i.payment)
228228 let minDataPmt = ((((WAVELET * 1) / 1000) * 33) + ((WAVELET * 4) / 1000))
229229 let randsPmt = validateAndGetRandsPmt(randsCount, pmt, minDataPmt)
230230 let dataPmt = (pmt.amount - randsPmt)
231231 let dataTxCount = (dataPmt / minDataPmt)
232232 let dataKeysCount = if ((31250 >= (dataTxCount * 5)))
233233 then (dataTxCount * 5)
234234 else 31250
235235 let organizerPubKey58 = toBase58String(i.callerPublicKey)
236236 let randsCountStr = toString(randsCount)
237237 let initState = formatStateDataStr(DATADONE, organizerPubKey58, toString(randFrom), toString(randTo), randsCountStr, randsCountStr, toString(dataKeysCount), toBase58String(i.transactionId), "0", "0", "1", "0", "1", "")
238238 ScriptResult(WriteSet([DataEntry(sessionId, initState)]), TransferSet([ScriptTransfer(SERVER, randsPmt, unit)]))
239239 }
240240 }
241241
242242
243243
244244 @Callable(i)
245245 func random (sessionId,rsaSign) = {
246246 let rsa58Sign = fromBase64String(rsaSign)
247247 let drawParamsList = extractGameDataList(sessionId)
248248 let drawState = drawParamsList[IdxState]
249249 let organizerPubKey58 = drawParamsList[IdxOrganizerPub]
250250 let randsCountStr = drawParamsList[IdxRandsCount]
251251 let remainRandsCount = parseIntValue(drawParamsList[IdxRemainRandsCount])
252252 let lastOffsetBytes = parseIntValue(drawParamsList[IdxLastOffset])
253253 let currRandsStr = drawParamsList[IdxCurrRands]
254254 let fromStr = drawParamsList[IdxRandFrom]
255255 let toStr = drawParamsList[IdxRandTo]
256256 let dataDoneTxId = drawParamsList[IdxDataDoneTxId]
257257 let slowIdx1 = parseIntValue(drawParamsList[9])
258258 let slowIdx2 = parseIntValue(drawParamsList[10])
259259 let fastIdx1 = parseIntValue(drawParamsList[11])
260260 let fastIdx2 = parseIntValue(drawParamsList[12])
261261 let from = parseIntValue(fromStr)
262262 let to = parseIntValue(toStr)
263263 let organizerPubKey = fromBase58String(organizerPubKey58)
264264 if ((drawState != DATADONE))
265265 then throw((sessionId + " draw: it must be in READY state to generate random numbers"))
266- else if (!(rsaVerify(SHA256, toBytes(sessionId), rsa58Sign, RSAPUBLIC)))
266+ else if (!(rsaVerify(SHA256, toBytes("CtkzFiR8ficf9vyYB1qJk3MNbZDSeEcBa9jEnMZo8tos"), rsa58Sign, RSAPUBLIC)))
267267 then throw("Invalid RSA signature")
268268 else {
269269 let randGenInfo = generateRand(sessionId, from, to, rsa58Sign, currRandsStr, remainRandsCount, lastOffsetBytes, slowIdx1, slowIdx2, fastIdx1, fastIdx2)
270270 let newRemainRandsCountStr = randGenInfo[1]
271271 let newState = if ((newRemainRandsCountStr == "0"))
272272 then STATEFINISHED
273273 else DATADONE
274274 WriteSet([DataEntry(sessionId, formatStateDataStr(newState, organizerPubKey58, fromStr, toStr, randsCountStr, newRemainRandsCountStr, drawParamsList[IdxDataKeysCount], dataDoneTxId, randGenInfo[2], randGenInfo[3], randGenInfo[4], randGenInfo[5], randGenInfo[6], randGenInfo[0]))])
275275 }
276276 }
277277
278278

github/deemru/w8io/873ac7e 
52.33 ms