drive/state_transition_action/
mod.rs

1/// contract
2pub mod contract;
3/// identity
4pub mod identity;
5
6/// system
7pub mod system;
8// TODO: Must crate only but we need to remove of use it first
9pub mod action_convert_to_operations;
10/// address funds
11pub mod address_funds;
12/// documents_batch
13pub mod batch;
14/// shielded
15pub mod shielded;
16
17use crate::state_transition_action::address_funds::address_credit_withdrawal::AddressCreditWithdrawalTransitionAction;
18use crate::state_transition_action::address_funds::address_funding_from_asset_lock::AddressFundingFromAssetLockTransitionAction;
19use crate::state_transition_action::address_funds::address_funds_transfer::AddressFundsTransferTransitionAction;
20use crate::state_transition_action::batch::BatchTransitionAction;
21use crate::state_transition_action::contract::data_contract_create::DataContractCreateTransitionAction;
22use crate::state_transition_action::contract::data_contract_update::DataContractUpdateTransitionAction;
23use crate::state_transition_action::identity::identity_create::IdentityCreateTransitionAction;
24use crate::state_transition_action::identity::identity_create_from_addresses::IdentityCreateFromAddressesTransitionAction;
25use crate::state_transition_action::identity::identity_credit_transfer::IdentityCreditTransferTransitionAction;
26use crate::state_transition_action::identity::identity_credit_transfer_to_addresses::IdentityCreditTransferToAddressesTransitionAction;
27use crate::state_transition_action::identity::identity_credit_withdrawal::IdentityCreditWithdrawalTransitionAction;
28use crate::state_transition_action::identity::identity_topup::IdentityTopUpTransitionAction;
29use crate::state_transition_action::identity::identity_topup_from_addresses::IdentityTopUpFromAddressesTransitionAction;
30use crate::state_transition_action::identity::identity_update::IdentityUpdateTransitionAction;
31use crate::state_transition_action::identity::masternode_vote::MasternodeVoteTransitionAction;
32use crate::state_transition_action::shielded::shield::ShieldTransitionAction;
33use crate::state_transition_action::shielded::shield_from_asset_lock::ShieldFromAssetLockTransitionAction;
34use crate::state_transition_action::shielded::shielded_transfer::ShieldedTransferTransitionAction;
35use crate::state_transition_action::shielded::shielded_withdrawal::ShieldedWithdrawalTransitionAction;
36use crate::state_transition_action::shielded::unshield::UnshieldTransitionAction;
37use crate::state_transition_action::system::bump_address_input_nonces_action::{
38    BumpAddressInputNonceActionAccessorsV0, BumpAddressInputNoncesAction,
39};
40use crate::state_transition_action::system::bump_identity_data_contract_nonce_action::{
41    BumpIdentityDataContractNonceAction, BumpIdentityDataContractNonceActionAccessorsV0,
42};
43use crate::state_transition_action::system::bump_identity_nonce_action::{
44    BumpIdentityNonceAction, BumpIdentityNonceActionAccessorsV0,
45};
46use crate::state_transition_action::system::partially_use_asset_lock_action::{
47    PartiallyUseAssetLockAction, PartiallyUseAssetLockActionAccessorsV0,
48};
49use derive_more::From;
50use dpp::prelude::UserFeeIncrease;
51
52/// ST action
53#[allow(clippy::large_enum_variant)]
54#[derive(Debug, Clone, From)]
55pub enum StateTransitionAction {
56    /// data contract create
57    DataContractCreateAction(DataContractCreateTransitionAction),
58    /// data contract update
59    DataContractUpdateAction(DataContractUpdateTransitionAction),
60    /// batch
61    BatchAction(BatchTransitionAction),
62    /// identity create
63    IdentityCreateAction(IdentityCreateTransitionAction),
64    /// identity create from addresses
65    IdentityCreateFromAddressesAction(IdentityCreateFromAddressesTransitionAction),
66    /// identity topup
67    IdentityTopUpAction(IdentityTopUpTransitionAction),
68    /// identity topup from addresses
69    IdentityTopUpFromAddressesAction(IdentityTopUpFromAddressesTransitionAction),
70    /// identity credit withdrawal
71    IdentityCreditWithdrawalAction(IdentityCreditWithdrawalTransitionAction),
72    /// identity update
73    IdentityUpdateAction(IdentityUpdateTransitionAction),
74    /// identity credit transfer
75    IdentityCreditTransferAction(IdentityCreditTransferTransitionAction),
76    /// identity credit transfer to addresses
77    IdentityCreditTransferToAddressesAction(IdentityCreditTransferToAddressesTransitionAction),
78    /// address funds transfer
79    AddressFundsTransfer(AddressFundsTransferTransitionAction),
80    /// address credit withdrawal
81    AddressCreditWithdrawal(AddressCreditWithdrawalTransitionAction),
82    /// address funding from asset lock
83    AddressFundingFromAssetLock(AddressFundingFromAssetLockTransitionAction),
84    /// masternode vote action
85    MasternodeVoteAction(MasternodeVoteTransitionAction),
86    /// bump identity nonce action
87    /// this can only come in this form from identity state transitions that do not use asset locks
88    /// it will also only happen if the state validation fails
89    BumpIdentityNonceAction(BumpIdentityNonceAction),
90    /// bump identity contract nonce action
91    /// this can only come in this form from the document contract update state transition
92    /// it will also only happen if the state validation fails
93    BumpIdentityDataContractNonceAction(BumpIdentityDataContractNonceAction),
94    /// partially use the asset lock for funding invalid asset lock transactions like
95    /// identity top up and identity create
96    PartiallyUseAssetLockAction(PartiallyUseAssetLockAction),
97    /// partially use the asset lock for funding invalid asset lock transactions like
98    /// identity top up and identity create
99    BumpAddressInputNoncesAction(BumpAddressInputNoncesAction),
100    /// shield (address -> shielded pool)
101    ShieldAction(ShieldTransitionAction),
102    /// shielded transfer (shielded -> shielded)
103    ShieldedTransferAction(ShieldedTransferTransitionAction),
104    /// unshield (shielded pool -> address)
105    UnshieldAction(UnshieldTransitionAction),
106    /// shield from asset lock (L1 asset lock -> shielded pool)
107    ShieldFromAssetLockAction(ShieldFromAssetLockTransitionAction),
108    /// shielded withdrawal (shielded pool -> L1 core address)
109    ShieldedWithdrawalAction(ShieldedWithdrawalTransitionAction),
110}
111
112impl StateTransitionAction {
113    /// The fee multiplier for the action
114    pub fn user_fee_increase(&self) -> UserFeeIncrease {
115        match self {
116            StateTransitionAction::DataContractCreateAction(action) => action.user_fee_increase(),
117            StateTransitionAction::DataContractUpdateAction(action) => action.user_fee_increase(),
118            StateTransitionAction::BatchAction(action) => action.user_fee_increase(),
119            StateTransitionAction::IdentityCreateAction(action) => action.user_fee_increase(),
120            StateTransitionAction::IdentityTopUpAction(action) => action.user_fee_increase(),
121            StateTransitionAction::IdentityCreditWithdrawalAction(action) => {
122                action.user_fee_increase()
123            }
124            StateTransitionAction::IdentityUpdateAction(action) => action.user_fee_increase(),
125            StateTransitionAction::IdentityCreditTransferAction(action) => {
126                action.user_fee_increase()
127            }
128            StateTransitionAction::BumpIdentityNonceAction(action) => action.user_fee_increase(),
129            StateTransitionAction::BumpIdentityDataContractNonceAction(action) => {
130                action.user_fee_increase()
131            }
132            StateTransitionAction::PartiallyUseAssetLockAction(action) => {
133                action.user_fee_increase()
134            }
135            StateTransitionAction::MasternodeVoteAction(_) => {
136                UserFeeIncrease::default() // 0 (or none)
137            }
138            StateTransitionAction::IdentityCreateFromAddressesAction(action) => {
139                action.user_fee_increase()
140            }
141            StateTransitionAction::IdentityTopUpFromAddressesAction(action) => {
142                action.user_fee_increase()
143            }
144            StateTransitionAction::IdentityCreditTransferToAddressesAction(action) => {
145                action.user_fee_increase()
146            }
147            StateTransitionAction::AddressFundsTransfer(action) => action.user_fee_increase(),
148            StateTransitionAction::AddressCreditWithdrawal(action) => action.user_fee_increase(),
149            StateTransitionAction::AddressFundingFromAssetLock(action) => {
150                action.user_fee_increase()
151            }
152            StateTransitionAction::BumpAddressInputNoncesAction(action) => {
153                action.user_fee_increase()
154            }
155            StateTransitionAction::ShieldAction(action) => action.user_fee_increase(),
156            StateTransitionAction::ShieldedTransferAction(_) => {
157                UserFeeIncrease::default() // 0 (fee is locked by Orchard binding signature)
158            }
159            StateTransitionAction::UnshieldAction(_) => {
160                UserFeeIncrease::default() // 0 (fee is locked by Orchard binding signature)
161            }
162            StateTransitionAction::ShieldFromAssetLockAction(_) => {
163                UserFeeIncrease::default() // 0 (fee comes from asset lock excess)
164            }
165            StateTransitionAction::ShieldedWithdrawalAction(_) => {
166                UserFeeIncrease::default() // 0 (fee is locked by Orchard binding signature)
167            }
168        }
169    }
170}