drive/util/batch/drive_op_batch/
group.rs

1use crate::drive::Drive;
2use crate::error::Error;
3use crate::fees::op::LowLevelDriveOperation;
4use crate::util::batch::drive_op_batch::DriveLowLevelOperationConverter;
5use dpp::block::block_info::BlockInfo;
6use dpp::data_contract::group::GroupMemberPower;
7use dpp::data_contract::GroupContractPosition;
8use dpp::group::group_action::GroupAction;
9use dpp::identifier::Identifier;
10use grovedb::batch::KeyInfoPath;
11use grovedb::{EstimatedLayerInformation, TransactionArg};
12use platform_version::version::PlatformVersion;
13use std::collections::HashMap;
14
15/// Group operations requiring many people to agree to something for the action to occur.
16#[derive(Clone, Debug)]
17pub enum GroupOperationType {
18    /// Adds a group action
19    AddGroupAction {
20        /// The contract id
21        contract_id: Identifier,
22        /// The group contract position
23        group_contract_position: GroupContractPosition,
24        /// Initialize with the action info
25        initialize_with_insert_action_info: Option<GroupAction>,
26        /// The action id
27        action_id: Identifier,
28        /// The identity that is signing
29        signer_identity_id: Identifier,
30        /// The signer's power in the group
31        signer_power: GroupMemberPower,
32        /// Should we close the group action and mark it as complete?
33        closes_group_action: bool,
34    },
35}
36
37impl DriveLowLevelOperationConverter for GroupOperationType {
38    fn into_low_level_drive_operations(
39        self,
40        drive: &Drive,
41        estimated_costs_only_with_layer_info: &mut Option<
42            HashMap<KeyInfoPath, EstimatedLayerInformation>,
43        >,
44        block_info: &BlockInfo,
45        transaction: TransactionArg,
46        platform_version: &PlatformVersion,
47    ) -> Result<Vec<LowLevelDriveOperation>, Error> {
48        match self {
49            GroupOperationType::AddGroupAction {
50                contract_id,
51                group_contract_position,
52                initialize_with_insert_action_info,
53                action_id,
54                signer_identity_id,
55                signer_power,
56                closes_group_action,
57            } => drive.add_group_action_operations(
58                contract_id,
59                group_contract_position,
60                initialize_with_insert_action_info,
61                closes_group_action,
62                action_id,
63                signer_identity_id,
64                signer_power,
65                block_info,
66                estimated_costs_only_with_layer_info,
67                transaction,
68                platform_version,
69            ),
70        }
71    }
72}