pub async fn start_cross_chain_message_listener<Client, TxPool, TxnListener, CClient, CBlock, Block, Executor, SO>(
    chain_id: ChainId,
    consensus_client: Arc<CClient>,
    client: Arc<Client>,
    tx_pool: Arc<TxPool>,
    network: Arc<dyn NetworkPeers + Send + Sync>,
    listener: TxnListener,
    domain_executor: Arc<Executor>,
    sync_oracle: SO,
)
where TxPool: TransactionPool + 'static, Client: ProvideRuntimeApi<<TxPool as TransactionPool>::Block> + HeaderBackend<<TxPool as TransactionPool>::Block>, CBlock: BlockT, Block: BlockT, CClient: ProvideRuntimeApi<CBlock> + HeaderBackend<CBlock> + AuxStore, CClient::Api: DomainsApi<CBlock, Block::Header> + RelayerApi<CBlock, NumberFor<CBlock>, NumberFor<CBlock>, CBlock::Hash>, TxnListener: Stream<Item = ChainMsg> + Unpin, Executor: CodeExecutor + RuntimeVersionOf, SO: SyncOracle + Send,