Skip to main content

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