Change the code below so that it sends requests and receives responses even faster than it does now. The functionality of the code should not change

# Возращает адреса созданных токенов в указанном интревале блоков!!!

import asyncio
import requests
import aiohttp

bscscan_api_key = '<TRUFFLEHOG_REDACTED_BSCSCAN>'

# Modify the existing functions to use async and aiohttp…

async def get_external_transactions(block_number):
    async with aiohttp.ClientSession() as session:
        url = f'https://api.bscscan.com/api?module=proxy&action=eth_getBlockByNumber&tag={block_number}&boolean=true&apikey={bscscan_api_key}'

        try:
            async with session.get(url) as response:
                data = await response.json()
        except Exception as e:
            print(f'Error in API request: {e}')
            return []

        if data['result'] is None:
            print(f"Error: Cannot find the block")
            return []

        return data['result']['transactions']


async def get_contract_address(tx_hash):
    async with aiohttp.ClientSession() as session:
        url = f'https://api.bscscan.com/api?module=proxy&action=eth_getTransactionReceipt&txhash={tx_hash}&apikey={bscscan_api_key}'

        try:
            async with session.get(url) as response:
                data = await response.json()
        except Exception as e:
            print(f'Error in API request: {e}')
            return None

        if data['result'] is None:
            return None

        return data['result']['contractAddress']

async def get_contract_name(contract_address):
            async with aiohttp.ClientSession() as session:
                method_signature = '0x06fdde03'
                url = f'https://api.bscscan.com/api?module=proxy&action=eth_call&to={contract_address}&data={method_signature}&tag=latest&apikey={bscscan_api_key}'

                try:
                    async with session.get(url) as response:
                        data = await response.json()
                except Exception as e:
                    print(f'Error in API request: {e}')
                    return None

                if not data.get('result') or data['result'][:2] == '0x':
                    return None

            return bytes.fromhex(data['result'][2:]).decode('utf - 8')


async def display_transactions(block_start, block_end):
    for block_number_int in range(block_start, block_end + 1):
        block_number = hex(block_number_int)
        transactions = await get_external_transactions(block_number)  # Add the ‘await’ keyword here

        if not transactions:
            print(f'No transactions found in block {block_number_int}')
        else:
            print(f'ransactions in block {block_number_int}:')
            for tx in transactions:
                if tx['to'] is None:
                    contract_address = await get_contract_address(tx['hash'])
                    contract_name = await get_contract_name(contract_address)
                    print(f"New contract creation: Contract Address: {contract_address} - Contract Name: {contract_name}")
            print("\n")  # Print an empty line between blocks

async def main():
    block_start = 28524001  # Replace with your desired starting block number
    block_end = 28525888  # Replace with your desired ending block number

    await display_transactions(block_start, block_end)

asyncio.run(main())