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