Skip to main content

drive/state_transition_action/action_convert_to_operations/
mod.rs

1//! Translation of State Transitions to Drive Operations
2//!
3//! This module defines general, commonly used functions in Drive.
4//!
5
6mod address_funds;
7mod batch;
8mod contract;
9mod identity;
10mod shielded;
11mod system;
12
13use crate::error::Error;
14use crate::state_transition_action::StateTransitionAction;
15use crate::util::batch::DriveOperation;
16use dpp::block::epoch::Epoch;
17use dpp::version::PlatformVersion;
18
19/// A converter that will get High Level Drive Operations from State transitions
20pub trait DriveHighLevelOperationConverter {
21    /// This will get a list of atomic drive operations from a high level operations
22    fn into_high_level_drive_operations<'a>(
23        self,
24        epoch: &Epoch,
25        platform_version: &PlatformVersion,
26    ) -> Result<Vec<DriveOperation<'a>>, Error>;
27}
28
29impl DriveHighLevelOperationConverter for StateTransitionAction {
30    fn into_high_level_drive_operations<'a>(
31        self,
32        epoch: &Epoch,
33        platform_version: &PlatformVersion,
34    ) -> Result<Vec<DriveOperation<'a>>, Error> {
35        match self {
36            StateTransitionAction::DataContractCreateAction(data_contract_create_transition) => {
37                data_contract_create_transition
38                    .into_high_level_drive_operations(epoch, platform_version)
39            }
40            StateTransitionAction::DataContractUpdateAction(data_contract_update_transition) => {
41                data_contract_update_transition
42                    .into_high_level_drive_operations(epoch, platform_version)
43            }
44            StateTransitionAction::BatchAction(documents_batch_transition) => {
45                documents_batch_transition.into_high_level_drive_operations(epoch, platform_version)
46            }
47            StateTransitionAction::IdentityCreateAction(identity_create_transition) => {
48                identity_create_transition.into_high_level_drive_operations(epoch, platform_version)
49            }
50            StateTransitionAction::IdentityTopUpAction(identity_top_up_transition) => {
51                identity_top_up_transition.into_high_level_drive_operations(epoch, platform_version)
52            }
53            StateTransitionAction::IdentityCreditWithdrawalAction(
54                identity_credit_withdrawal_transition,
55            ) => identity_credit_withdrawal_transition
56                .into_high_level_drive_operations(epoch, platform_version),
57            StateTransitionAction::IdentityUpdateAction(identity_update_transition) => {
58                identity_update_transition.into_high_level_drive_operations(epoch, platform_version)
59            }
60            StateTransitionAction::IdentityKeyLimitsUpdateAction(
61                identity_key_limits_update_transition,
62            ) => identity_key_limits_update_transition
63                .into_high_level_drive_operations(epoch, platform_version),
64            StateTransitionAction::IdentityCreditTransferAction(
65                identity_credit_transfer_transition,
66            ) => identity_credit_transfer_transition
67                .into_high_level_drive_operations(epoch, platform_version),
68            StateTransitionAction::MasternodeVoteAction(masternode_vote_transition) => {
69                masternode_vote_transition.into_high_level_drive_operations(epoch, platform_version)
70            }
71            StateTransitionAction::BumpIdentityNonceAction(bump_identity_nonce_transition) => {
72                bump_identity_nonce_transition
73                    .into_high_level_drive_operations(epoch, platform_version)
74            }
75            StateTransitionAction::BumpIdentityDataContractNonceAction(
76                bump_identity_data_contract_nonce_transition,
77            ) => bump_identity_data_contract_nonce_transition
78                .into_high_level_drive_operations(epoch, platform_version),
79            StateTransitionAction::PartiallyUseAssetLockAction(
80                partially_used_asset_lock_action,
81            ) => partially_used_asset_lock_action
82                .into_high_level_drive_operations(epoch, platform_version),
83            StateTransitionAction::IdentityCreateFromAddressesAction(
84                identity_create_from_addresses_transition,
85            ) => identity_create_from_addresses_transition
86                .into_high_level_drive_operations(epoch, platform_version),
87
88            StateTransitionAction::IdentityTopUpFromAddressesAction(
89                identity_top_up_from_addresses_transition,
90            ) => identity_top_up_from_addresses_transition
91                .into_high_level_drive_operations(epoch, platform_version),
92
93            StateTransitionAction::IdentityCreditTransferToAddressesAction(
94                identity_credit_transfer_to_addresses_transition,
95            ) => identity_credit_transfer_to_addresses_transition
96                .into_high_level_drive_operations(epoch, platform_version),
97
98            StateTransitionAction::AddressFundsTransfer(address_funds_transfer_transition) => {
99                address_funds_transfer_transition
100                    .into_high_level_drive_operations(epoch, platform_version)
101            }
102            StateTransitionAction::BumpAddressInputNoncesAction(
103                bump_address_input_nonces_action,
104            ) => bump_address_input_nonces_action
105                .into_high_level_drive_operations(epoch, platform_version),
106            StateTransitionAction::AddressCreditWithdrawal(address_credit_withdrawal) => {
107                address_credit_withdrawal.into_high_level_drive_operations(epoch, platform_version)
108            }
109
110            StateTransitionAction::AddressFundingFromAssetLock(address_funding_from_asset_lock) => {
111                address_funding_from_asset_lock
112                    .into_high_level_drive_operations(epoch, platform_version)
113            }
114            StateTransitionAction::ShieldAction(shield_action) => {
115                shield_action.into_high_level_drive_operations(epoch, platform_version)
116            }
117            StateTransitionAction::ShieldFromIdentityAction(action) => {
118                action.into_high_level_drive_operations(epoch, platform_version)
119            }
120            StateTransitionAction::IdentityTopUpFromShieldedPoolAction(action) => {
121                action.into_high_level_drive_operations(epoch, platform_version)
122            }
123            StateTransitionAction::ShieldedTransferAction(shielded_transfer_action) => {
124                shielded_transfer_action.into_high_level_drive_operations(epoch, platform_version)
125            }
126            StateTransitionAction::UnshieldAction(unshield_action) => {
127                unshield_action.into_high_level_drive_operations(epoch, platform_version)
128            }
129            StateTransitionAction::ShieldFromAssetLockAction(shield_from_asset_lock_action) => {
130                shield_from_asset_lock_action
131                    .into_high_level_drive_operations(epoch, platform_version)
132            }
133            StateTransitionAction::ShieldedWithdrawalAction(shielded_withdrawal_action) => {
134                shielded_withdrawal_action.into_high_level_drive_operations(epoch, platform_version)
135            }
136            StateTransitionAction::IdentityCreateFromShieldedPoolAction(
137                identity_create_from_shielded_pool_action,
138            ) => identity_create_from_shielded_pool_action
139                .into_high_level_drive_operations(epoch, platform_version),
140        }
141    }
142}