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}