pub(crate) async fn prepare(&self, blobs: Vec<Blob>) -> anyhow::Result<BlobTx> {
        let (gas_per_blob_byte, tx_size_cost_per_byte, min_gas_price, base_account) = tokio::try_join!(
            self.get_gas_per_blob_byte(),
            self.fetch_tx_size_cost_per_byte(),
            self.fetch_min_gas_price(),
            self.fetch_account(),
        )?;

        let msg_pay_for_blobs = new_msg_pay_for_blobs(blobs.as_slice(), self.address.clone())?;

        let gas_limit = estimate_gas(
            &msg_pay_for_blobs.blob_sizes,
            gas_per_blob_byte,
            tx_size_cost_per_byte,
        );
        let fee = calculate_fee(min_gas_price, gas_limit);

        let signed_tx = new_signed_tx(
            &msg_pay_for_blobs,
            &base_account,
            gas_limit,
            fee,
            self.chain_id.clone(),
            &self.signing_key,
        );

        Ok(new_blob_tx(&signed_tx, blobs.iter()))
    }
Prepares a blob transaction for the given blobs.
core/node/da_clients/src/celestia/sdk.rs