fn start_consensus(
    client: Arc<TFullClient<OpaqueBlock, RuntimeApi, NativeElseWasmExecutor<ParachainNativeExecutor>>>,
    block_import: ParachainBlockImport<OpaqueBlock, Arc<TFullClient<OpaqueBlock, RuntimeApi, NativeElseWasmExecutor<ParachainNativeExecutor>>>, TFullBackend<OpaqueBlock>>,
    prometheus_registry: Option<&Registry>,
    telemetry: Option<TelemetryHandle>,
    task_manager: &TaskManager,
    relay_chain_interface: Arc<dyn RelayChainInterface>,
    transaction_pool: Arc<FullPool<OpaqueBlock, TFullClient<OpaqueBlock, RuntimeApi, NativeElseWasmExecutor<ParachainNativeExecutor>>>>,
    sync_oracle: Arc<SyncingService<OpaqueBlock>>,
    keystore: KeystorePtr,
    relay_chain_slot_duration: Duration,
    para_id: ParaId,
    collator_key: CollatorPair,
    overseer_handle: OverseerHandle,
    announce_block: Arc<dyn Fn(OpaqueHash, Option<Vec<u8>>) + Send + Sync>
) -> Result<(), Error>