drive/util/grove_operations/batch_refresh_reference/
mod.rs

1mod v0;
2
3use crate::drive::Drive;
4use crate::error::drive::DriveError;
5use crate::error::Error;
6use crate::fees::op::LowLevelDriveOperation;
7use dpp::version::drive_versions::DriveVersion;
8use grovedb::Element;
9
10impl Drive {
11    /// Pushes an "refresh reference" operation to `drive_operations`.
12    ///
13    /// # Parameters
14    /// * `path`: The path of the reference to be refreshed.
15    /// * `key`: The key of the reference to be refreshed.
16    /// * `document_reference`: The element to be referenced.
17    /// * `trust_refresh_reference`: Flag to trust the refresh reference.
18    /// * `drive_operations`: The list of drive operations to append to.
19    /// * `drive_version`: The drive version to select the correct function version to run.
20    ///
21    /// # Returns
22    /// * `Ok(())` if the reference was successfully refreshed.
23    /// * `Err(DriveError::UnknownVersionMismatch)` if the drive version does not match known versions.
24    /// * `Err(DriveError::CorruptedCodeExecution)` if expected a reference on refresh.
25    pub fn batch_refresh_reference(
26        &self,
27        path: Vec<Vec<u8>>,
28        key: Vec<u8>,
29        document_reference: Element,
30        trust_refresh_reference: bool,
31        drive_operations: &mut Vec<LowLevelDriveOperation>,
32        drive_version: &DriveVersion,
33    ) -> Result<(), Error> {
34        match drive_version.grove_methods.batch.batch_refresh_reference {
35            0 => self.batch_refresh_reference_v0(
36                path,
37                key,
38                document_reference,
39                trust_refresh_reference,
40                drive_operations,
41            ),
42            version => Err(Error::Drive(DriveError::UnknownVersionMismatch {
43                method: "batch_refresh_reference".to_string(),
44                known_versions: vec![0],
45                received: version,
46            })),
47        }
48    }
49}