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::IdentityCreditTransferAction(
61                identity_credit_transfer_transition,
62            ) => identity_credit_transfer_transition
63                .into_high_level_drive_operations(epoch, platform_version),
64            StateTransitionAction::MasternodeVoteAction(masternode_vote_transition) => {
65                masternode_vote_transition.into_high_level_drive_operations(epoch, platform_version)
66            }
67            StateTransitionAction::BumpIdentityNonceAction(bump_identity_nonce_transition) => {
68                bump_identity_nonce_transition
69                    .into_high_level_drive_operations(epoch, platform_version)
70            }
71            StateTransitionAction::BumpIdentityDataContractNonceAction(
72                bump_identity_data_contract_nonce_transition,
73            ) => bump_identity_data_contract_nonce_transition
74                .into_high_level_drive_operations(epoch, platform_version),
75            StateTransitionAction::PartiallyUseAssetLockAction(
76                partially_used_asset_lock_action,
77            ) => partially_used_asset_lock_action
78                .into_high_level_drive_operations(epoch, platform_version),
79            StateTransitionAction::IdentityCreateFromAddressesAction(
80                identity_create_from_addresses_transition,
81            ) => identity_create_from_addresses_transition
82                .into_high_level_drive_operations(epoch, platform_version),
83
84            StateTransitionAction::IdentityTopUpFromAddressesAction(
85                identity_top_up_from_addresses_transition,
86            ) => identity_top_up_from_addresses_transition
87                .into_high_level_drive_operations(epoch, platform_version),
88
89            StateTransitionAction::IdentityCreditTransferToAddressesAction(
90                identity_credit_transfer_to_addresses_transition,
91            ) => identity_credit_transfer_to_addresses_transition
92                .into_high_level_drive_operations(epoch, platform_version),
93
94            StateTransitionAction::AddressFundsTransfer(address_funds_transfer_transition) => {
95                address_funds_transfer_transition
96                    .into_high_level_drive_operations(epoch, platform_version)
97            }
98            StateTransitionAction::BumpAddressInputNoncesAction(
99                bump_address_input_nonces_action,
100            ) => bump_address_input_nonces_action
101                .into_high_level_drive_operations(epoch, platform_version),
102            StateTransitionAction::AddressCreditWithdrawal(address_credit_withdrawal) => {
103                address_credit_withdrawal.into_high_level_drive_operations(epoch, platform_version)
104            }
105
106            StateTransitionAction::AddressFundingFromAssetLock(address_funding_from_asset_lock) => {
107                address_funding_from_asset_lock
108                    .into_high_level_drive_operations(epoch, platform_version)
109            }
110            StateTransitionAction::ShieldAction(shield_action) => {
111                shield_action.into_high_level_drive_operations(epoch, platform_version)
112            }
113            StateTransitionAction::ShieldedTransferAction(shielded_transfer_action) => {
114                shielded_transfer_action.into_high_level_drive_operations(epoch, platform_version)
115            }
116            StateTransitionAction::UnshieldAction(unshield_action) => {
117                unshield_action.into_high_level_drive_operations(epoch, platform_version)
118            }
119            StateTransitionAction::ShieldFromAssetLockAction(shield_from_asset_lock_action) => {
120                shield_from_asset_lock_action
121                    .into_high_level_drive_operations(epoch, platform_version)
122            }
123            StateTransitionAction::ShieldedWithdrawalAction(shielded_withdrawal_action) => {
124                shielded_withdrawal_action.into_high_level_drive_operations(epoch, platform_version)
125            }
126        }
127    }
128}