async def get(self, tx_hash): self.set_header("Access-Control-Allow-Origin", "*") self.set_header("Access-Control-Allow-Headers", "x-requested-with") self.set_header('Access-Control-Allow-Methods', 'GET') format = self.get_query_argument('format', 'rpc').lower() try: tx = await ToshiEthJsonRPC(None, self.application, self.request).get_transaction(tx_hash) except JsonRPCError as e: raise JSONHTTPError(400, body={'errors': [e.data]}) if tx is None and format != 'sofa': raise JSONHTTPError( 404, body={'error': [{ 'id': 'not_found', 'message': 'Not Found' }]}) if format == 'sofa': async with self.db: row = await self.db.fetchrow( "SELECT * FROM transactions where hash = $1 ORDER BY transaction_id DESC", tx_hash) if row is None: raise JSONHTTPError(404, body={ 'error': [{ 'id': 'not_found', 'message': 'Not Found' }] }) if tx is None: tx = transaction_to_json( database_transaction_to_rlp_transaction(row)) if row['status'] == 'error': tx['error'] = True payment = SofaPayment.from_transaction( tx, networkId=self.application.config['ethereum']['network_id']) message = payment.render() self.set_header('Content-Type', 'text/plain') self.write(message.encode('utf-8')) else: self.write(tx)
async def get_transaction(self, tx_hash): if not validate_transaction_hash(tx_hash): raise JsonRPCInvalidParamsError(data={'id': 'invalid_transaction_hash', 'message': 'Invalid Transaction Hash'}) tx = await self.eth.eth_getTransactionByHash(tx_hash) if tx is None: async with self.db: tx = await self.db.fetchrow( "SELECT * FROM transactions WHERE " "hash = $1 AND (status != 'error' OR status IS NULL) " "ORDER BY transaction_id DESC", tx_hash) if tx: tx = database_transaction_to_rlp_transaction(tx) tx = transaction_to_json(tx) return tx