async def send_raw_transaction(request): try: data = request.params['data'] except KeyError: raise RpcInvalidParamsError(message='Missed data') with suppress(Exception): data = data.encode('utf-8') try: transaction = base64.b64decode(data) except Exception: raise RpcGenericServerDefinedError( error_code=-32050, message='Decode payload of tranasaction failed' ) try: tr_pb = Transaction() tr_pb.ParseFromString(transaction) except DecodeError: raise RpcGenericServerDefinedError( error_code=-32050, message='Failed to parse transaction proto' ) try: tr_head_pb = TransactionHeader() tr_head_pb.ParseFromString(tr_pb.header) except DecodeError: raise RpcGenericServerDefinedError( error_code=-32050, message='Failed to parse transaction head proto' ) prefix, public_key = tr_head_pb.signer_public_key[:2], \ tr_head_pb.signer_public_key[2:] if prefix in ('02', '03') and len(public_key) != 64: raise RpcGenericServerDefinedError( error_code=-32050, message='Signer public key format is not valid' ) client = PubKeyClient() response = client.send_raw_transaction(tr_pb) return response['data']
def post(payload): tr = payload['transaction'] with suppress(Exception): tr = tr.encode('utf-8') try: transaction = base64.b64decode(tr) except Exception: return {'error': 'Decode payload of tranasaction failed'}, 400 try: tr_pb = Transaction() tr_pb.ParseFromString(transaction) except DecodeError: return {'error': 'Failed to parse transaction proto'}, 400 client = PubKeyClient() try: result = client._send_raw_transaction(tr_pb) return {'batch_id': result['batch_id']}, 200 except Exception as e: return {'error': 'Send batch with transaction failed: %s' % e}, 400
async def send_raw_transaction(request): try: data = request.params['data'] except KeyError: raise RpcInvalidParamsError(message='Missed data') try: transaction = base64.b64decode(data.encode('utf-8')) except Exception: raise RpcGenericServerDefinedError( error_code=-32050, message='Decode payload of tranasaction failed' ) try: tr_pb = Transaction() tr_pb.ParseFromString(transaction) except DecodeError: raise RpcGenericServerDefinedError( error_code=-32050, message='Failed to parse transaction proto' ) try: tr_head_pb = TransactionHeader() tr_head_pb.ParseFromString(tr_pb.header) except DecodeError: raise RpcGenericServerDefinedError( error_code=-32050, message='Failed to parse transaction head proto' ) try: tr_payload_pb = TransactionPayload() tr_payload_pb.ParseFromString(tr_pb.payload) except DecodeError: raise RpcGenericServerDefinedError( error_code=-32050, message='Failed to parse transaction payload proto' ) prefix, public_key = tr_head_pb.signer_public_key[:2], \ tr_head_pb.signer_public_key[2:] if prefix in ('02', '03') and len(public_key) != 64: raise RpcGenericServerDefinedError( error_code=-32050, message='Signer public key format is not valid' ) try: handler = TP_HANDLERS[tr_head_pb.family_name] except KeyError: raise RpcGenericServerDefinedError( error_code=-32050, message='Validation handler not set for this method' ) validator = _get_proto_validator(handler, tr_payload_pb) if validator and not validator.validate(): logger.debug('Form "send_raw_transaction" validator errors: ' f'{validator.errors}') raise RpcGenericServerDefinedError( error_code=-32050, message=f'Invalid "{validator.get_pb_class().__name__}" ' 'structure' ) client = PubKeyClient() response = await client.send_raw_transaction(tr_pb) return response['data']