fn spawn_frontier_tasks<RuntimeApi, Executor>(
    task_manager: &TaskManager,
    client: Arc<TFullClient<Block, RuntimeApi, NativeElseWasmExecutor<Executor>>>,
    backend: Arc<TFullBackend<Block>>,
    frontier_backend: Backend<Block>,
    filter_pool: FilterPool,
    overrides: Arc<OverrideHandle<Block>>,
    fee_history_cache: FeeHistoryCache,
    fee_history_cache_limit: FeeHistoryCacheLimit,
    sync: Arc<SyncingService<Block>>,
    pubsub_notification_sinks: Arc<EthereumBlockNotificationSinks<EthereumBlockNotification<Block>>>
)where
    RuntimeApi: ConstructRuntimeApi<Block, TFullClient<Block, RuntimeApi, NativeElseWasmExecutor<Executor>>> + Send + Sync + 'static,
    RuntimeApi::RuntimeApi: TaggedTransactionQueue<Block> + Metadata<Block> + SessionKeys<Block> + ApiExt<Block, StateBackend = StateBackendFor<TFullBackend<Block>, Block>> + OffchainWorkerApi<Block> + BlockBuilder<Block> + CollectCollationInfo<Block> + EthereumRuntimeRPCApi<Block>,
    Executor: NativeExecutionDispatch + 'static,