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::ContractUserModerationAction(
61                contract_user_moderation_transition,
62            ) => contract_user_moderation_transition
63                .into_high_level_drive_operations(epoch, platform_version),
64            StateTransitionAction::ContractFeeClaimAction(contract_fee_claim_transition) => {
65                contract_fee_claim_transition
66                    .into_high_level_drive_operations(epoch, platform_version)
67            }
68            StateTransitionAction::IdentityKeyLimitsUpdateAction(
69                identity_key_limits_update_transition,
70            ) => identity_key_limits_update_transition
71                .into_high_level_drive_operations(epoch, platform_version),
72            StateTransitionAction::IdentityCreditTransferAction(
73                identity_credit_transfer_transition,
74            ) => identity_credit_transfer_transition
75                .into_high_level_drive_operations(epoch, platform_version),
76            StateTransitionAction::MasternodeVoteAction(masternode_vote_transition) => {
77                masternode_vote_transition.into_high_level_drive_operations(epoch, platform_version)
78            }
79            StateTransitionAction::BumpIdentityNonceAction(bump_identity_nonce_transition) => {
80                bump_identity_nonce_transition
81                    .into_high_level_drive_operations(epoch, platform_version)
82            }
83            StateTransitionAction::BumpIdentityDataContractNonceAction(
84                bump_identity_data_contract_nonce_transition,
85            ) => bump_identity_data_contract_nonce_transition
86                .into_high_level_drive_operations(epoch, platform_version),
87            StateTransitionAction::PartiallyUseAssetLockAction(
88                partially_used_asset_lock_action,
89            ) => partially_used_asset_lock_action
90                .into_high_level_drive_operations(epoch, platform_version),
91            StateTransitionAction::IdentityCreateFromAddressesAction(
92                identity_create_from_addresses_transition,
93            ) => identity_create_from_addresses_transition
94                .into_high_level_drive_operations(epoch, platform_version),
95
96            StateTransitionAction::IdentityTopUpFromAddressesAction(
97                identity_top_up_from_addresses_transition,
98            ) => identity_top_up_from_addresses_transition
99                .into_high_level_drive_operations(epoch, platform_version),
100
101            StateTransitionAction::IdentityCreditTransferToAddressesAction(
102                identity_credit_transfer_to_addresses_transition,
103            ) => identity_credit_transfer_to_addresses_transition
104                .into_high_level_drive_operations(epoch, platform_version),
105
106            StateTransitionAction::AddressFundsTransfer(address_funds_transfer_transition) => {
107                address_funds_transfer_transition
108                    .into_high_level_drive_operations(epoch, platform_version)
109            }
110            StateTransitionAction::BumpAddressInputNoncesAction(
111                bump_address_input_nonces_action,
112            ) => bump_address_input_nonces_action
113                .into_high_level_drive_operations(epoch, platform_version),
114            StateTransitionAction::AddressCreditWithdrawal(address_credit_withdrawal) => {
115                address_credit_withdrawal.into_high_level_drive_operations(epoch, platform_version)
116            }
117
118            StateTransitionAction::AddressFundingFromAssetLock(address_funding_from_asset_lock) => {
119                address_funding_from_asset_lock
120                    .into_high_level_drive_operations(epoch, platform_version)
121            }
122            StateTransitionAction::ShieldAction(shield_action) => {
123                shield_action.into_high_level_drive_operations(epoch, platform_version)
124            }
125            StateTransitionAction::ShieldFromIdentityAction(action) => {
126                action.into_high_level_drive_operations(epoch, platform_version)
127            }
128            StateTransitionAction::IdentityTopUpFromShieldedPoolAction(action) => {
129                action.into_high_level_drive_operations(epoch, platform_version)
130            }
131            StateTransitionAction::TokenShieldedTransferWithShieldedFeeAction(action) => {
132                action.into_high_level_drive_operations(epoch, platform_version)
133            }
134            StateTransitionAction::TokenUnshieldWithShieldedFeeAction(action) => {
135                action.into_high_level_drive_operations(epoch, platform_version)
136            }
137            StateTransitionAction::TokenPurchaseFromShieldedPoolAction(action) => {
138                action.into_high_level_drive_operations(epoch, platform_version)
139            }
140            StateTransitionAction::ShieldedTransferAction(shielded_transfer_action) => {
141                shielded_transfer_action.into_high_level_drive_operations(epoch, platform_version)
142            }
143            StateTransitionAction::UnshieldAction(unshield_action) => {
144                unshield_action.into_high_level_drive_operations(epoch, platform_version)
145            }
146            StateTransitionAction::ShieldFromAssetLockAction(shield_from_asset_lock_action) => {
147                shield_from_asset_lock_action
148                    .into_high_level_drive_operations(epoch, platform_version)
149            }
150            StateTransitionAction::ShieldedWithdrawalAction(shielded_withdrawal_action) => {
151                shielded_withdrawal_action.into_high_level_drive_operations(epoch, platform_version)
152            }
153            StateTransitionAction::IdentityCreateFromShieldedPoolAction(
154                identity_create_from_shielded_pool_action,
155            ) => identity_create_from_shielded_pool_action
156                .into_high_level_drive_operations(epoch, platform_version),
157        }
158    }
159}