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