async fn broadcast_tx(
        &self,
        client: &mut TxClient<Channel>,
        blob_tx: BlobTx,
    ) -> anyhow::Result<String> {
        let request = BroadcastTxRequest {
            tx_bytes: Bytes::from(blob_tx.encode_to_vec()),
            mode: i32::from(BroadcastMode::Sync),
        };

        let mut tx_response = client
            .broadcast_tx(request)
            .await
            .map_err(|status| {
                anyhow::anyhow!(
                    "failed to broadcast the tx, code: {}, message: {}",
                    status.code(),
                    status.message()
                )
            })?
            .into_inner()
            .tx_response
            .ok_or_else(|| anyhow::anyhow!("empty broadcast tx response"))?;

        if tx_response.code != 0 {
            return Err(anyhow::format_err!(
                "failed to broadcast the tx, tx_hash: {}, code: {}, namespace: {}, log: {}",
                tx_response.txhash,
                tx_response.code,
                tx_response.codespace,
                tx_response.raw_log,
            ));
        }

        tx_response.txhash.make_ascii_lowercase();
        Ok(tx_response.txhash)
    }
Broadcasts the transaction and returns the transaction hash.
core/node/da_clients/src/celestia/sdk.rs