def METHOD_NAME(
    tx_to_address: str,
    tx_data: bytes,
    tx_type: int,
    access_list: List[AccessList],
    call_beacon_root_contract: bool,
) -> Transaction:
    """
    Prepares transaction to call the beacon root precompile caller account.
    """
    to = BEACON_ROOT_CONTRACT_ADDRESS if call_beacon_root_contract else tx_to_address
    kwargs: Dict = {
        "ty": tx_type,
        "nonce": 0,
        "data": tx_data,
        "to": to,
        "value": 0,
        "gas_limit": 1000000,
    }
    if tx_type > 0:
        kwargs["access_list"] = access_list
    if tx_type <= 1:
        kwargs["gas_price"] = 7
    else:
        kwargs["max_fee_per_gas"] = 7
        kwargs["max_priority_fee_per_gas"] = 0
    if tx_type == 3:
        kwargs["max_fee_per_blob_gas"] = 1
        kwargs["blob_versioned_hashes"] = add_kzg_version([0], BLOB_COMMITMENT_VERSION_KZG)
    if tx_type > 3:
        raise Exception(f"Unexpected transaction type: '{tx_type}'. Test requires update.")
    return Transaction(**kwargs)