pub async fn insert_l1_batch_da(
        &mut self,
        number: L1BatchNumber,
        blob_id: &str,
        sent_at: chrono::NaiveDateTime,
        pubdata_type: PubdataType,
        da_inclusion_data: Option<&[u8]>,
        l2_validator_address: Option<Address>,
    ) -> DalResult<()> {
        let instrumentation = Instrumented::new("insert_l1_batch_da")
            .with_arg("number", &number)
            .with_arg("blob_id", &blob_id)
            .with_arg("sent_at", &sent_at)
            .with_arg("pubdata_type", &pubdata_type)
            .with_arg("da_inclusion_data", &da_inclusion_data)
            .with_arg("l2_validator_address", &l2_validator_address);

        let query = sqlx::query!(
            r#"
            INSERT INTO
            data_availability (
                l1_batch_number,
                blob_id,
                inclusion_data,
                client_type,
                l2_da_validator_address,
                sent_at,
                created_at,
                updated_at
            )
            VALUES
            ($1, $2, $3, $4, $5, $6, NOW(), NOW())
            ON CONFLICT DO NOTHING
            "#,
            i64::from(number.0),
            blob_id,
            da_inclusion_data,
            pubdata_type.to_string(),
            l2_validator_address.map(|addr| addr.as_bytes().to_vec()),
            sent_at,
        );

        let update_result = instrumentation
            .clone()
            .with(query)
            .report_latency()
            .execute(self.storage)
            .await?;

        if update_result.rows_affected() == 0 {
            let err = instrumentation.constraint_error(anyhow::anyhow!(
                "L1 batch #{number}: batch DA was attempted to be inserted twice"
            ));
            return Err(err);
        }

        Ok(())
    }
Inserts the blob_id for the given L1 batch.
core/lib/dal/src/data_availability_dal.rs