1use crate::errors::ProtocolError;
2use bincode::{Decode, DecodeUntrusted, Encode};
3use platform_serialization_derive::{
4 PlatformDeserializeTrusted, PlatformDeserializeUntrusted, PlatformSerialize,
5};
6use thiserror::Error;
7
8use crate::consensus::state::address_funds::{AddressDoesNotExistError, AddressInvalidNonceError, AddressNotEnoughFundsError, AddressesNotEnoughFundsError};
9use crate::consensus::state::shielded::insufficient_pool_notes_error::InsufficientPoolNotesError;
10use crate::consensus::state::shielded::insufficient_shielded_fee_error::InsufficientShieldedFeeError;
11use crate::consensus::state::shielded::invalid_anchor_error::InvalidAnchorError;
12use crate::consensus::state::shielded::invalid_shielded_proof_error::InvalidShieldedProofError;
13use crate::consensus::state::shielded::nullifier_already_spent_error::NullifierAlreadySpentError;
14use crate::consensus::state::contract_moderation::{
15 ContractModeratedDocumentTypeNotYetUsableError, ContractModerationAbilityNotGrantedError,
16 ContractModerationTeamNotSeatedError, DocumentNotSettledError,
17 ContractTeamActionAlreadyCompletedError, ContractTeamActionAlreadySignedError,
18 ContractTeamActionDocumentChangedError, ContractTeamActionDoesNotExistError,
19 ContractTeamMemberAddedAfterDocumentError,
20 DocumentTypeNotDeletableOnceSettledError, SettledDeletionNotRestorableError,
21 ModerationCharterAddedModeratorLimitReachedError, ModerationReasonNotListedError,
22 ContractModerationNotEnabledError, ContractModerationTargetNotAllowedError,
23 ContractFeeClaimNotAllowedError, ContractFeesAlreadyClaimedThisEpochError,
24 ContractFeesNothingToClaimError, ContractModerationCounterpartyBarredError,
25 ContractModerationTargetNotFoundError,
26 ContractModeratorIdentityNotFoundError,
27 ContractSuspensionNotInFutureError, ContractUserAlreadyBannedError, ContractUserBannedError,
28 ContractUserNotBannedError, ContractUserNotSuspendedError, ContractUserNotWarnedError,
29 ContractUserSuspendedError, ContractUserWarningLimitReachedError,
30 ContractDocumentAlreadyRestoredError, ContractDocumentRemovalNotFoundError,
31 DocumentFieldNotChangeableByModeratorsError, DocumentModerationWindowElapsedError,
32 DocumentModeratorFieldNotWritableError, DocumentRestoreHashMismatchError,
33 DocumentRestoreWindowElapsedError, DocumentTypeNotDeletableByModeratorsError,
34 IdentityNotContractModeratorError,
35};
36use crate::consensus::state::contract_group::{
37 ContractGroupAlreadyExistsError, ContractGroupNotFoundError,
38 ContractGroupAdminNotFoundError, IdentityNotContractGroupOwnerOrAdminError,
39};
40use crate::consensus::state::data_contract::data_contract_already_present_error::DataContractAlreadyPresentError;
41use crate::consensus::state::data_contract::data_contract_config_update_error::DataContractConfigUpdateError;
42use crate::consensus::state::data_contract::data_contract_is_readonly_error::DataContractIsReadonlyError;
43use crate::consensus::state::data_trigger::DataTriggerError;
44use crate::consensus::state::document::document_action_fee_agreement_mismatch_error::DocumentActionFeeAgreementMismatchError;
45use crate::consensus::state::document::document_action_fee_moderators_share_mismatch_error::DocumentActionFeeModeratorsShareMismatchError;
46use crate::consensus::state::document::document_expired_error::DocumentExpiredError;
47use crate::consensus::state::document::document_action_fee_agreement_not_set_error::DocumentActionFeeAgreementNotSetError;
48use crate::consensus::state::document::document_action_fee_multiplier_not_tolerated_error::DocumentActionFeeMultiplierNotToleratedError;
49use crate::consensus::state::document::document_already_present_error::DocumentAlreadyPresentError;
50use crate::consensus::state::document::document_not_found_error::DocumentNotFoundError;
51use crate::consensus::state::document::document_owner_id_mismatch_error::DocumentOwnerIdMismatchError;
52use crate::consensus::state::document::document_timestamp_window_violation_error::DocumentTimestampWindowViolationError;
53use crate::consensus::state::document::document_timestamps_mismatch_error::DocumentTimestampsMismatchError;
54use crate::consensus::state::document::duplicate_unique_index_error::DuplicateUniqueIndexError;
55use crate::consensus::state::document::invalid_document_revision_error::InvalidDocumentRevisionError;
56use crate::consensus::state::identity::duplicated_identity_public_key_id_state_error::DuplicatedIdentityPublicKeyIdStateError;
57use crate::consensus::state::identity::duplicated_identity_public_key_state_error::DuplicatedIdentityPublicKeyStateError;
58use crate::consensus::state::identity::identity_public_key_is_disabled_error::IdentityPublicKeyIsDisabledError;
59use crate::consensus::state::identity::identity_public_key_is_read_only_error::IdentityPublicKeyIsReadOnlyError;
60use crate::consensus::state::identity::invalid_identity_public_key_id_error::InvalidIdentityPublicKeyIdError;
61use crate::consensus::state::identity::invalid_identity_revision_error::InvalidIdentityRevisionError;
62use crate::consensus::state::identity::max_identity_public_key_limit_reached_error::MaxIdentityPublicKeyLimitReachedError;
63use crate::consensus::state::identity::missing_identity_public_key_ids_error::MissingIdentityPublicKeyIdsError;
64use crate::consensus::state::identity::{IdentityAlreadyExistsError, IdentityInsufficientBalanceError, RecipientIdentityDoesNotExistError};
65use crate::consensus::ConsensusError;
66use crate::consensus::state::data_contract::data_contract_not_found_error::DataContractNotFoundError;
67use crate::consensus::state::data_contract::data_contract_update_action_not_allowed_error::DataContractUpdateActionNotAllowedError;
68use crate::consensus::state::data_contract::data_contract_update_permission_error::DataContractUpdatePermissionError;
69use crate::consensus::state::data_contract::document_type_update_error::DocumentTypeUpdateError;
70use crate::consensus::state::document::document_contest_currently_locked_error::DocumentContestCurrentlyLockedError;
71use crate::consensus::state::document::document_contest_document_with_same_id_already_present_error::DocumentContestDocumentWithSameIdAlreadyPresentError;
72use crate::consensus::state::document::document_contest_identity_already_contestant::DocumentContestIdentityAlreadyContestantError;
73use crate::consensus::state::document::document_contest_maximum_contenders_reached_error::DocumentContestMaximumContendersReachedError;
74use crate::consensus::state::document::document_contest_index_mismatch_error::DocumentContestIndexMismatchError;
75use crate::consensus::state::document::document_contest_not_joinable_error::DocumentContestNotJoinableError;
76use crate::consensus::state::document::document_contest_not_paid_for_error::DocumentContestNotPaidForError;
77use crate::consensus::state::document::document_contest_not_required_error::DocumentContestNotRequiredError;
78use crate::consensus::state::document::referenced_document_type_deletable_error::ReferencedDocumentTypeDeletableError;
79use crate::consensus::state::document::referenced_document_type_not_deletable_error::ReferencedDocumentTypeNotDeletableError;
80use crate::consensus::state::document::referenced_document_type_not_found_error::ReferencedDocumentTypeNotFoundError;
81use crate::consensus::state::document::referenced_contract_requirement_not_met_error::ReferencedContractRequirementNotMetError;
82use crate::consensus::state::document::referenced_document_requirement_not_met_error::ReferencedDocumentRequirementNotMetError;
83use crate::consensus::state::document::referenced_document_removed_error::ReferencedDocumentRemovedError;
84use crate::consensus::state::document::referenced_document_type_moderated_error::ReferencedDocumentTypeModeratedError;
85use crate::consensus::state::document::referenced_document_type_index_only_error::ReferencedDocumentTypeIndexOnlyError;
86use crate::consensus::state::document::document_delete_constraint_violated_error::DocumentDeleteConstraintViolatedError;
87use crate::consensus::state::document::referenced_document_type_not_moderated_error::ReferencedDocumentTypeNotModeratedError;
88use crate::consensus::state::document::referenced_document_lookup_invalid_error::ReferencedDocumentLookupInvalidError;
89use crate::consensus::state::document::referenced_document_list_invalid_error::ReferencedDocumentListInvalidError;
90use crate::consensus::state::document::referenced_entity_not_found_error::ReferencedEntityNotFoundError;
91use crate::consensus::state::document::referenced_identity_key_disabled_error::ReferencedIdentityKeyDisabledError;
92use crate::consensus::state::document::referenced_identity_key_not_found_error::ReferencedIdentityKeyNotFoundError;
93use crate::consensus::state::document::referenced_identity_key_requirement_not_met_error::ReferencedIdentityKeyRequirementNotMetError;
94use crate::consensus::state::document::referenced_document_property_agreement_invalid_error::ReferencedDocumentPropertyAgreementInvalidError;
95use crate::consensus::state::document::referenced_document_property_mismatch_error::ReferencedDocumentPropertyMismatchError;
96use crate::consensus::state::document::referenced_key_id_property_invalid_error::ReferencedKeyIdPropertyInvalidError;
97use crate::consensus::state::document::document_incorrect_purchase_price_error::DocumentIncorrectPurchasePriceError;
98use crate::consensus::state::document::document_not_for_sale_error::DocumentNotForSaleError;
99use crate::consensus::state::group::{GroupActionAlreadyCompletedError, GroupActionAlreadySignedByIdentityError, GroupActionDoesNotExistError, IdentityMemberOfGroupNotFoundError, IdentityNotMemberOfGroupError, ModificationOfGroupActionMainParametersNotPermittedError};
100use crate::consensus::state::identity::identity_for_token_configuration_not_found_error::IdentityInTokenConfigurationNotFoundError;
101use crate::consensus::state::identity::identity_public_key_already_exists_for_unique_contract_bounds_error::IdentityPublicKeyAlreadyExistsForUniqueContractBoundsError;
102use crate::consensus::state::identity::identity_public_key_already_expired_error::IdentityPublicKeyAlreadyExpiredError;
103use crate::consensus::state::identity::identity_public_key_budget_exceeded_error::IdentityPublicKeyBudgetExceededError;
104use crate::consensus::state::identity::identity_public_key_limit_not_raised_error::IdentityPublicKeyLimitNotRaisedError;
105use crate::consensus::state::document::document_immutable_property_changed_error::DocumentImmutablePropertyChangedError;
106use crate::consensus::state::identity::identity_public_key_limit_not_set_error::IdentityPublicKeyLimitNotSetError;
107use crate::consensus::state::identity::gas_sponsor_insufficient_balance_error::GasSponsorInsufficientBalanceError;
108use crate::consensus::state::token::{GasFeesPaidByNotAllowedError, InconsistentGasFeesPaidByInBatchError};
109use crate::consensus::state::identity::identity_to_freeze_does_not_exist_error::IdentityToFreezeDoesNotExistError;
110use crate::consensus::state::identity::invalid_identity_contract_nonce_error::InvalidIdentityNonceError;
111use crate::consensus::state::identity::missing_transfer_key_error::MissingTransferKeyError;
112use crate::consensus::state::identity::no_transfer_key_for_core_withdrawal_available_error::NoTransferKeyForCoreWithdrawalAvailableError;
113use crate::consensus::state::prefunded_specialized_balances::prefunded_specialized_balance_insufficient_error::PrefundedSpecializedBalanceInsufficientError;
114use crate::consensus::state::prefunded_specialized_balances::prefunded_specialized_balance_not_found_error::PrefundedSpecializedBalanceNotFoundError;
115use crate::consensus::state::token::{IdentityDoesNotHaveEnoughTokenBalanceError, IdentityTokenAccountFrozenError, IdentityTokenAccountNotFrozenError, InvalidGroupPositionError, NewAuthorizedActionTakerGroupDoesNotExistError, NewAuthorizedActionTakerIdentityDoesNotExistError, NewAuthorizedActionTakerMainGroupNotSetError, NewTokensDestinationIdentityDoesNotExistError, TokenMintPastMaxSupplyError, TokenSettingMaxSupplyToLessThanCurrentSupplyError, UnauthorizedTokenActionError, IdentityTokenAccountAlreadyFrozenError, TokenAlreadyPausedError, TokenIsPausedError, TokenNotPausedError, InvalidTokenClaimPropertyMismatch, InvalidTokenClaimNoCurrentRewards, InvalidTokenClaimWrongClaimant, PreProgrammedDistributionTimestampInPastError, TokenTransferRecipientIdentityNotExistError, IdentityHasNotAgreedToPayRequiredTokenAmountError, RequiredTokenPaymentInfoNotSetError, IdentityTryingToPayWithWrongTokenError, TokenDirectPurchaseUserPriceTooLow, TokenAmountUnderMinimumSaleAmount, TokenNotForDirectSale, InvalidTokenPositionStateError, TokenOncePerIdentityDistributionAlreadyClaimedError, TokenShieldedPoolNotEnabledError, TokenShieldedPaymentAmountMismatchError, TokenShieldedPaymentNotRequiredError};
116use crate::consensus::state::voting::masternode_incorrect_voter_identity_id_error::MasternodeIncorrectVoterIdentityIdError;
117use crate::consensus::state::voting::masternode_incorrect_voting_address_error::MasternodeIncorrectVotingAddressError;
118use crate::consensus::state::voting::masternode_not_found_error::MasternodeNotFoundError;
119use crate::consensus::state::voting::masternode_vote_already_present_error::MasternodeVoteAlreadyPresentError;
120use crate::consensus::state::voting::masternode_voted_too_many_times::MasternodeVotedTooManyTimesError;
121use crate::consensus::state::voting::vote_poll_not_available_for_voting_error::VotePollNotAvailableForVotingError;
122use crate::consensus::state::voting::vote_choice_not_allowed_for_vote_poll_error::VoteChoiceNotAllowedForVotePollError;
123use crate::consensus::state::voting::vote_poll_not_found_error::VotePollNotFoundError;
124
125use super::document::document_timestamps_are_equal_error::DocumentTimestampsAreEqualError;
126
127#[derive(
128 Error,
129 Debug,
130 PartialEq,
131 Encode,
132 Decode,
133 PlatformSerialize,
134 PlatformDeserializeTrusted,
135 PlatformDeserializeUntrusted,
136 Clone,
137 DecodeUntrusted,
138)]
139pub enum StateError {
140 #[error(transparent)]
146 DataContractAlreadyPresentError(DataContractAlreadyPresentError),
147
148 #[error(transparent)]
149 DataTriggerError(DataTriggerError),
150
151 #[error(transparent)]
152 DocumentAlreadyPresentError(DocumentAlreadyPresentError),
153
154 #[error(transparent)]
155 DocumentContestCurrentlyLockedError(DocumentContestCurrentlyLockedError),
156
157 #[error(transparent)]
158 DocumentContestNotJoinableError(DocumentContestNotJoinableError),
159
160 #[error(transparent)]
161 DocumentContestIdentityAlreadyContestantError(DocumentContestIdentityAlreadyContestantError),
162
163 #[error(transparent)]
164 DocumentContestNotPaidForError(DocumentContestNotPaidForError),
165
166 #[error(transparent)]
167 DocumentContestDocumentWithSameIdAlreadyPresentError(
168 DocumentContestDocumentWithSameIdAlreadyPresentError,
169 ),
170
171 #[error(transparent)]
172 DocumentNotFoundError(DocumentNotFoundError),
173
174 #[error(transparent)]
175 DocumentNotForSaleError(DocumentNotForSaleError),
176
177 #[error(transparent)]
178 DocumentIncorrectPurchasePriceError(DocumentIncorrectPurchasePriceError),
179
180 #[error(transparent)]
181 DocumentOwnerIdMismatchError(DocumentOwnerIdMismatchError),
182
183 #[error(transparent)]
184 DocumentTimestampsMismatchError(DocumentTimestampsMismatchError),
185
186 #[error(transparent)]
187 DocumentTimestampWindowViolationError(DocumentTimestampWindowViolationError),
188
189 #[error(transparent)]
190 DuplicateUniqueIndexError(DuplicateUniqueIndexError),
191
192 #[error(transparent)]
193 InvalidDocumentRevisionError(InvalidDocumentRevisionError),
194
195 #[error(transparent)]
196 IdentityAlreadyExistsError(IdentityAlreadyExistsError),
197
198 #[error(transparent)]
199 IdentityPublicKeyAlreadyExistsForUniqueContractBoundsError(
200 IdentityPublicKeyAlreadyExistsForUniqueContractBoundsError,
201 ),
202
203 #[error(transparent)]
204 IdentityPublicKeyIsReadOnlyError(IdentityPublicKeyIsReadOnlyError),
205
206 #[error(transparent)]
207 MissingIdentityPublicKeyIdsError(MissingIdentityPublicKeyIdsError),
208
209 #[error(transparent)]
210 MissingTransferKeyError(MissingTransferKeyError),
211
212 #[error(transparent)]
213 NoTransferKeyForCoreWithdrawalAvailableError(NoTransferKeyForCoreWithdrawalAvailableError),
214
215 #[error(transparent)]
216 InvalidIdentityPublicKeyIdError(InvalidIdentityPublicKeyIdError),
217
218 #[error(transparent)]
219 InvalidIdentityRevisionError(InvalidIdentityRevisionError),
220
221 #[error(transparent)]
222 InvalidIdentityNonceError(InvalidIdentityNonceError),
223
224 #[error(transparent)]
225 MaxIdentityPublicKeyLimitReachedError(MaxIdentityPublicKeyLimitReachedError),
226
227 #[error(transparent)]
228 DuplicatedIdentityPublicKeyStateError(DuplicatedIdentityPublicKeyStateError),
229
230 #[error(transparent)]
231 DuplicatedIdentityPublicKeyIdStateError(DuplicatedIdentityPublicKeyIdStateError),
232
233 #[error(transparent)]
234 IdentityPublicKeyIsDisabledError(IdentityPublicKeyIsDisabledError),
235
236 #[error(transparent)]
237 IdentityInsufficientBalanceError(IdentityInsufficientBalanceError),
238
239 #[error(transparent)]
240 DocumentTimestampsAreEqualError(DocumentTimestampsAreEqualError),
241
242 #[error(transparent)]
243 DataContractIsReadonlyError(DataContractIsReadonlyError),
244
245 #[error(transparent)]
246 DataContractConfigUpdateError(DataContractConfigUpdateError),
247
248 #[error(transparent)]
249 DocumentTypeUpdateError(DocumentTypeUpdateError),
250
251 #[error(transparent)]
252 PrefundedSpecializedBalanceInsufficientError(PrefundedSpecializedBalanceInsufficientError),
253
254 #[error(transparent)]
255 PrefundedSpecializedBalanceNotFoundError(PrefundedSpecializedBalanceNotFoundError),
256
257 #[error(transparent)]
258 DataContractUpdatePermissionError(DataContractUpdatePermissionError),
259
260 #[error(transparent)]
261 MasternodeNotFoundError(MasternodeNotFoundError),
262
263 #[error(transparent)]
264 MasternodeIncorrectVoterIdentityIdError(MasternodeIncorrectVoterIdentityIdError),
265
266 #[error(transparent)]
267 MasternodeIncorrectVotingAddressError(MasternodeIncorrectVotingAddressError),
268
269 #[error(transparent)]
270 VotePollNotFoundError(VotePollNotFoundError),
271
272 #[error(transparent)]
273 VotePollNotAvailableForVotingError(VotePollNotAvailableForVotingError),
274
275 #[error(transparent)]
276 MasternodeVotedTooManyTimesError(MasternodeVotedTooManyTimesError),
277
278 #[error(transparent)]
279 MasternodeVoteAlreadyPresentError(MasternodeVoteAlreadyPresentError),
280
281 #[error(transparent)]
282 RecipientIdentityDoesNotExistError(RecipientIdentityDoesNotExistError),
283
284 #[error(transparent)]
285 IdentityDoesNotHaveEnoughTokenBalanceError(IdentityDoesNotHaveEnoughTokenBalanceError),
286
287 #[error(transparent)]
288 UnauthorizedTokenActionError(UnauthorizedTokenActionError),
289
290 #[error(transparent)]
291 IdentityTokenAccountFrozenError(IdentityTokenAccountFrozenError),
292
293 #[error(transparent)]
294 IdentityTokenAccountNotFrozenError(IdentityTokenAccountNotFrozenError),
295
296 #[error(transparent)]
297 IdentityNotMemberOfGroupError(IdentityNotMemberOfGroupError),
298
299 #[error(transparent)]
300 GroupActionDoesNotExistError(GroupActionDoesNotExistError),
301
302 #[error(transparent)]
303 GroupActionAlreadyCompletedError(GroupActionAlreadyCompletedError),
304
305 #[error(transparent)]
306 GroupActionAlreadySignedByIdentityError(GroupActionAlreadySignedByIdentityError),
307
308 #[error(transparent)]
309 DataContractUpdateActionNotAllowedError(DataContractUpdateActionNotAllowedError),
310
311 #[error(transparent)]
312 TokenSettingMaxSupplyToLessThanCurrentSupplyError(
313 TokenSettingMaxSupplyToLessThanCurrentSupplyError,
314 ),
315
316 #[error(transparent)]
317 TokenMintPastMaxSupplyError(TokenMintPastMaxSupplyError),
318
319 #[error(transparent)]
320 InvalidTokenClaimPropertyMismatch(InvalidTokenClaimPropertyMismatch),
321
322 #[error(transparent)]
323 InvalidTokenClaimNoCurrentRewards(InvalidTokenClaimNoCurrentRewards),
324
325 #[error(transparent)]
326 InvalidTokenClaimWrongClaimant(InvalidTokenClaimWrongClaimant),
327
328 #[error(transparent)]
329 NewTokensDestinationIdentityDoesNotExistError(NewTokensDestinationIdentityDoesNotExistError),
330
331 #[error(transparent)]
332 NewAuthorizedActionTakerIdentityDoesNotExistError(
333 NewAuthorizedActionTakerIdentityDoesNotExistError,
334 ),
335
336 #[error(transparent)]
337 NewAuthorizedActionTakerGroupDoesNotExistError(NewAuthorizedActionTakerGroupDoesNotExistError),
338
339 #[error(transparent)]
340 NewAuthorizedActionTakerMainGroupNotSetError(NewAuthorizedActionTakerMainGroupNotSetError),
341
342 #[error(transparent)]
343 InvalidGroupPositionError(InvalidGroupPositionError),
344
345 #[error(transparent)]
346 TokenIsPausedError(TokenIsPausedError),
347
348 #[error(transparent)]
349 IdentityTokenAccountAlreadyFrozenError(IdentityTokenAccountAlreadyFrozenError),
350
351 #[error(transparent)]
352 TokenAlreadyPausedError(TokenAlreadyPausedError),
353
354 #[error(transparent)]
355 TokenNotPausedError(TokenNotPausedError),
356
357 #[error(transparent)]
358 TokenTransferRecipientIdentityNotExistError(TokenTransferRecipientIdentityNotExistError),
359
360 #[error(transparent)]
361 PreProgrammedDistributionTimestampInPastError(PreProgrammedDistributionTimestampInPastError),
362
363 #[error(transparent)]
364 IdentityHasNotAgreedToPayRequiredTokenAmountError(
365 IdentityHasNotAgreedToPayRequiredTokenAmountError,
366 ),
367
368 #[error(transparent)]
369 RequiredTokenPaymentInfoNotSetError(RequiredTokenPaymentInfoNotSetError),
370
371 #[error(transparent)]
372 IdentityTryingToPayWithWrongTokenError(IdentityTryingToPayWithWrongTokenError),
373
374 #[error(transparent)]
375 TokenDirectPurchaseUserPriceTooLow(TokenDirectPurchaseUserPriceTooLow),
376
377 #[error(transparent)]
378 TokenAmountUnderMinimumSaleAmount(TokenAmountUnderMinimumSaleAmount),
379
380 #[error(transparent)]
381 TokenNotForDirectSale(TokenNotForDirectSale),
382
383 #[error(transparent)]
384 IdentityInTokenConfigurationNotFoundError(IdentityInTokenConfigurationNotFoundError),
385
386 #[error(transparent)]
387 IdentityMemberOfGroupNotFoundError(IdentityMemberOfGroupNotFoundError),
388
389 #[error(transparent)]
390 ModificationOfGroupActionMainParametersNotPermittedError(
391 ModificationOfGroupActionMainParametersNotPermittedError,
392 ),
393
394 #[error(transparent)]
395 IdentityToFreezeDoesNotExistError(IdentityToFreezeDoesNotExistError),
396
397 #[error(transparent)]
398 DataContractNotFoundError(DataContractNotFoundError),
399
400 #[error(transparent)]
401 InvalidTokenPositionStateError(InvalidTokenPositionStateError),
402
403 #[error(transparent)]
404 AddressDoesNotExistError(AddressDoesNotExistError),
405
406 #[error(transparent)]
407 AddressNotEnoughFundsError(AddressNotEnoughFundsError),
408
409 #[error(transparent)]
410 AddressesNotEnoughFundsError(AddressesNotEnoughFundsError),
411
412 #[error(transparent)]
413 AddressInvalidNonceError(AddressInvalidNonceError),
414
415 #[error(transparent)]
416 InvalidAnchorError(InvalidAnchorError),
417
418 #[error(transparent)]
419 NullifierAlreadySpentError(NullifierAlreadySpentError),
420
421 #[error(transparent)]
422 InvalidShieldedProofError(InvalidShieldedProofError),
423
424 #[error(transparent)]
425 InsufficientPoolNotesError(InsufficientPoolNotesError),
426
427 #[error(transparent)]
428 InsufficientShieldedFeeError(InsufficientShieldedFeeError),
429
430 #[error(transparent)]
431 DocumentContestIndexMismatchError(DocumentContestIndexMismatchError),
432
433 #[error(transparent)]
434 DocumentContestNotRequiredError(DocumentContestNotRequiredError),
435
436 #[error(transparent)]
437 ReferencedEntityNotFoundError(ReferencedEntityNotFoundError),
438
439 #[error(transparent)]
440 ReferencedDocumentTypeNotFoundError(ReferencedDocumentTypeNotFoundError),
441
442 #[error(transparent)]
443 ReferencedDocumentTypeDeletableError(ReferencedDocumentTypeDeletableError),
444
445 #[error(transparent)]
446 ReferencedIdentityKeyNotFoundError(ReferencedIdentityKeyNotFoundError),
447
448 #[error(transparent)]
449 ReferencedIdentityKeyDisabledError(ReferencedIdentityKeyDisabledError),
450
451 #[error(transparent)]
452 ReferencedKeyIdPropertyInvalidError(ReferencedKeyIdPropertyInvalidError),
453
454 #[error(transparent)]
455 ReferencedDocumentPropertyAgreementInvalidError(
456 ReferencedDocumentPropertyAgreementInvalidError,
457 ),
458
459 #[error(transparent)]
460 ReferencedDocumentPropertyMismatchError(ReferencedDocumentPropertyMismatchError),
461
462 #[error(transparent)]
464 ContractGroupAlreadyExistsError(ContractGroupAlreadyExistsError),
465
466 #[error(transparent)]
467 ContractGroupNotFoundError(ContractGroupNotFoundError),
468
469 #[error(transparent)]
470 IdentityNotContractGroupOwnerOrAdminError(IdentityNotContractGroupOwnerOrAdminError),
471
472 #[error(transparent)]
473 ContractGroupAdminNotFoundError(ContractGroupAdminNotFoundError),
474
475 #[error(transparent)]
477 IdentityPublicKeyBudgetExceededError(IdentityPublicKeyBudgetExceededError),
478
479 #[error(transparent)]
480 IdentityPublicKeyAlreadyExpiredError(IdentityPublicKeyAlreadyExpiredError),
481
482 #[error(transparent)]
484 IdentityPublicKeyLimitNotSetError(IdentityPublicKeyLimitNotSetError),
485
486 #[error(transparent)]
487 IdentityPublicKeyLimitNotRaisedError(IdentityPublicKeyLimitNotRaisedError),
488
489 #[error(transparent)]
491 DocumentImmutablePropertyChangedError(DocumentImmutablePropertyChangedError),
492
493 #[error(transparent)]
495 TokenOncePerIdentityDistributionAlreadyClaimedError(
496 TokenOncePerIdentityDistributionAlreadyClaimedError,
497 ),
498
499 #[error(transparent)]
501 GasFeesPaidByNotAllowedError(GasFeesPaidByNotAllowedError),
502
503 #[error(transparent)]
504 InconsistentGasFeesPaidByInBatchError(InconsistentGasFeesPaidByInBatchError),
505
506 #[error(transparent)]
507 GasSponsorInsufficientBalanceError(GasSponsorInsufficientBalanceError),
508
509 #[error(transparent)]
511 ContractModerationNotEnabledError(ContractModerationNotEnabledError),
512
513 #[error(transparent)]
514 IdentityNotContractModeratorError(IdentityNotContractModeratorError),
515
516 #[error(transparent)]
517 ContractModerationTargetNotAllowedError(ContractModerationTargetNotAllowedError),
518
519 #[error(transparent)]
520 ContractUserAlreadyBannedError(ContractUserAlreadyBannedError),
521
522 #[error(transparent)]
523 ContractUserNotBannedError(ContractUserNotBannedError),
524
525 #[error(transparent)]
526 ContractUserNotSuspendedError(ContractUserNotSuspendedError),
527
528 #[error(transparent)]
529 ContractSuspensionNotInFutureError(ContractSuspensionNotInFutureError),
530
531 #[error(transparent)]
532 ContractUserBannedError(ContractUserBannedError),
533
534 #[error(transparent)]
535 ContractUserSuspendedError(ContractUserSuspendedError),
536
537 #[error(transparent)]
538 ContractModerationTargetNotFoundError(ContractModerationTargetNotFoundError),
539
540 #[error(transparent)]
541 ContractModeratorIdentityNotFoundError(ContractModeratorIdentityNotFoundError),
542
543 #[error(transparent)]
544 ContractModerationCounterpartyBarredError(ContractModerationCounterpartyBarredError),
545
546 #[error(transparent)]
548 ContractFeesAlreadyClaimedThisEpochError(ContractFeesAlreadyClaimedThisEpochError),
549
550 #[error(transparent)]
551 ContractFeesNothingToClaimError(ContractFeesNothingToClaimError),
552
553 #[error(transparent)]
554 ContractFeeClaimNotAllowedError(ContractFeeClaimNotAllowedError),
555
556 #[error(transparent)]
559 ReferencedDocumentTypeNotDeletableError(ReferencedDocumentTypeNotDeletableError),
560
561 #[error(transparent)]
563 DocumentTypeNotDeletableByModeratorsError(DocumentTypeNotDeletableByModeratorsError),
564
565 #[error(transparent)]
567 DocumentActionFeeAgreementNotSetError(DocumentActionFeeAgreementNotSetError),
568
569 #[error(transparent)]
570 DocumentActionFeeAgreementMismatchError(DocumentActionFeeAgreementMismatchError),
571
572 #[error(transparent)]
573 DocumentActionFeeMultiplierNotToleratedError(DocumentActionFeeMultiplierNotToleratedError),
574
575 #[error(transparent)]
577 DocumentModerationWindowElapsedError(DocumentModerationWindowElapsedError),
578
579 #[error(transparent)]
581 ContractUserNotWarnedError(ContractUserNotWarnedError),
582
583 #[error(transparent)]
584 ContractUserWarningLimitReachedError(ContractUserWarningLimitReachedError),
585 #[error(transparent)]
587 ContractDocumentRemovalNotFoundError(ContractDocumentRemovalNotFoundError),
588
589 #[error(transparent)]
590 DocumentRestoreWindowElapsedError(DocumentRestoreWindowElapsedError),
591
592 #[error(transparent)]
593 DocumentRestoreHashMismatchError(DocumentRestoreHashMismatchError),
594
595 #[error(transparent)]
596 ContractDocumentAlreadyRestoredError(ContractDocumentAlreadyRestoredError),
597
598 #[error(transparent)]
600 ContractModeratedDocumentTypeNotYetUsableError(ContractModeratedDocumentTypeNotYetUsableError),
601
602 #[error(transparent)]
604 VoteChoiceNotAllowedForVotePollError(VoteChoiceNotAllowedForVotePollError),
605
606 #[error(transparent)]
608 ReferencedContractRequirementNotMetError(ReferencedContractRequirementNotMetError),
609
610 #[error(transparent)]
612 ReferencedIdentityKeyRequirementNotMetError(ReferencedIdentityKeyRequirementNotMetError),
613
614 #[error(transparent)]
616 ReferencedDocumentLookupInvalidError(ReferencedDocumentLookupInvalidError),
617
618 #[error(transparent)]
620 ReferencedDocumentListInvalidError(ReferencedDocumentListInvalidError),
621
622 #[error(transparent)]
624 ContractModerationAbilityNotGrantedError(ContractModerationAbilityNotGrantedError),
625
626 #[error(transparent)]
627 ModerationCharterAddedModeratorLimitReachedError(
628 ModerationCharterAddedModeratorLimitReachedError,
629 ),
630
631 #[error(transparent)]
632 DocumentActionFeeModeratorsShareMismatchError(DocumentActionFeeModeratorsShareMismatchError),
633
634 #[error(transparent)]
637 ModerationReasonNotListedError(ModerationReasonNotListedError),
638
639 #[error(transparent)]
646 DocumentExpiredError(DocumentExpiredError),
647
648 #[error(transparent)]
651 DocumentContestMaximumContendersReachedError(DocumentContestMaximumContendersReachedError),
652
653 #[error(transparent)]
656 DocumentFieldNotChangeableByModeratorsError(DocumentFieldNotChangeableByModeratorsError),
657
658 #[error(transparent)]
659 DocumentModeratorFieldNotWritableError(DocumentModeratorFieldNotWritableError),
660
661 #[error(transparent)]
664 ReferencedDocumentRequirementNotMetError(ReferencedDocumentRequirementNotMetError),
665
666 #[error(transparent)]
671 ReferencedDocumentTypeNotModeratedError(ReferencedDocumentTypeNotModeratedError),
672
673 #[error(transparent)]
674 ReferencedDocumentTypeModeratedError(ReferencedDocumentTypeModeratedError),
675
676 #[error(transparent)]
677 ReferencedDocumentRemovedError(ReferencedDocumentRemovedError),
678
679 #[error(transparent)]
683 DocumentTypeNotDeletableOnceSettledError(DocumentTypeNotDeletableOnceSettledError),
684
685 #[error(transparent)]
686 ContractModerationTeamNotSeatedError(ContractModerationTeamNotSeatedError),
687
688 #[error(transparent)]
689 DocumentNotSettledError(DocumentNotSettledError),
690
691 #[error(transparent)]
692 ContractTeamActionDoesNotExistError(ContractTeamActionDoesNotExistError),
693
694 #[error(transparent)]
695 ContractTeamActionAlreadySignedError(ContractTeamActionAlreadySignedError),
696
697 #[error(transparent)]
698 SettledDeletionNotRestorableError(SettledDeletionNotRestorableError),
699
700 #[error(transparent)]
701 ContractTeamActionAlreadyCompletedError(ContractTeamActionAlreadyCompletedError),
702
703 #[error(transparent)]
704 ContractTeamActionDocumentChangedError(ContractTeamActionDocumentChangedError),
705
706 #[error(transparent)]
708 TokenShieldedPoolNotEnabledError(TokenShieldedPoolNotEnabledError),
709
710 #[error(transparent)]
711 TokenShieldedPaymentAmountMismatchError(TokenShieldedPaymentAmountMismatchError),
712
713 #[error(transparent)]
714 TokenShieldedPaymentNotRequiredError(TokenShieldedPaymentNotRequiredError),
715
716 #[error(transparent)]
720 ContractTeamMemberAddedAfterDocumentError(ContractTeamMemberAddedAfterDocumentError),
721
722 #[error(transparent)]
725 ReferencedDocumentTypeIndexOnlyError(ReferencedDocumentTypeIndexOnlyError),
726
727 #[error(transparent)]
730 DocumentDeleteConstraintViolatedError(DocumentDeleteConstraintViolatedError),
731}
732
733impl From<StateError> for ConsensusError {
734 fn from(error: StateError) -> Self {
735 Self::StateError(error)
736 }
737}
738
739#[cfg(test)]
740mod tests {
741 use super::*;
742 use crate::consensus::basic::document::PropertyConstraintViolation;
743 use crate::consensus::state::contract_moderation::ContractModerationCounterpartyRole;
744 use crate::consensus::state::identity::identity_public_key_limit_not_set_error::KeyLimit;
745 use crate::data_contract::config::moderation::{ContractModerationList, ModerationAbility};
746 use crate::data_contract::document_type::action_fees::agreement::{
747 AgreedFeeMultiplier, DocumentActionFeeAgreement,
748 };
749 use crate::data_contract::document_type::action_fees::{
750 ActionFeePricing, ContractFeePot, DocumentActionFee,
751 };
752 use crate::data_contract::document_type::{
753 DocumentPropertyReferenceTarget, DocumentReferenceLookup, ListElementReference,
754 LookupKeySource,
755 };
756 use crate::tokens::gas_fees_paid_by::GasFeesPaidBy;
757 use crate::voting::vote_choices::resource_vote_choice::ResourceVoteChoice;
758 use crate::voting::vote_polls::contested_document_resource_vote_poll::ContestedDocumentResourceVotePoll;
759 use crate::voting::vote_polls::VotePoll;
760 use platform_value::Identifier;
761 use std::collections::BTreeMap;
762
763 fn discriminant_of(error: StateError) -> u32 {
772 let bytes = bincode::encode_to_vec(error, bincode::config::standard())
773 .expect("expected to encode the state error");
774 let (discriminant, _): (u32, usize) =
775 bincode::decode_from_slice(&bytes, bincode::config::standard())
776 .expect("expected to decode the discriminant");
777 discriminant
778 }
779
780 #[test]
788 fn should_keep_the_encoding_of_a_reference_error_for_an_id_reference() {
789 let id_reference = DocumentPropertyReferenceTarget::PermanentDocument {
790 contract_id: None,
791 document_type_name: "note".to_string(),
792 property_agreement: BTreeMap::new(),
793 };
794 let error = StateError::ReferencedEntityNotFoundError(ReferencedEntityNotFoundError::new(
795 Identifier::from([1; 32]),
796 id_reference.clone(),
797 "noteId".to_string(),
798 ));
799 let bytes = bincode::encode_to_vec(error, bincode::config::standard())
800 .expect("expected to encode the state error");
801 assert_eq!(
804 hex::encode(bytes),
805 concat!(
806 "5d",
807 "0101010101010101010101010101010101010101010101010101010101010101",
808 "03",
809 "00",
810 "046e6f7465",
811 "00",
812 "066e6f74654964",
813 )
814 );
815
816 let target_variant = |target: &DocumentPropertyReferenceTarget| {
817 bincode::encode_to_vec(target, bincode::config::standard())
818 .expect("expected to encode the target")[0]
819 };
820 assert_eq!(target_variant(&id_reference), 3);
821 assert_eq!(
822 target_variant(&DocumentPropertyReferenceTarget::PermanentDocumentLookup {
823 contract_id: None,
824 document_type_name: "note".to_string(),
825 property_agreement: BTreeMap::new(),
826 lookup: DocumentReferenceLookup {
827 keys: [("$ownerId".to_string(), LookupKeySource::ReferenceValue)].into(),
828 minimum_age_blocks: None,
829 consume: false,
830 },
831 }),
832 6
833 );
834 assert_eq!(
837 target_variant(&DocumentPropertyReferenceTarget::ListElement(
838 ListElementReference {
839 contract_id: None,
840 document_type_name: "electedCharter".to_string(),
841 property_agreement: [("electedCharterId".to_string(), "$id".to_string())]
842 .into(),
843 in_list: "members".to_string(),
844 }
845 )),
846 9
847 );
848 assert_eq!(
850 target_variant(&DocumentPropertyReferenceTarget::DeletableDocumentLookup {
851 contract_id: None,
852 document_type_name: "note".to_string(),
853 property_agreement: BTreeMap::new(),
854 lookup: DocumentReferenceLookup {
855 keys: [("$ownerId".to_string(), LookupKeySource::ReferenceValue)].into(),
856 minimum_age_blocks: None,
857 consume: false,
858 },
859 }),
860 10
861 );
862 }
863
864 #[test]
865 fn state_error_discriminants_are_frozen() {
866 assert_eq!(
867 discriminant_of(StateError::DataContractAlreadyPresentError(
868 DataContractAlreadyPresentError::new(Identifier::from([1; 32]))
869 )),
870 0
871 );
872 assert_eq!(
873 discriminant_of(StateError::DocumentNotFoundError(
874 DocumentNotFoundError::new(Identifier::from([1; 32]))
875 )),
876 8
877 );
878 assert_eq!(
879 discriminant_of(StateError::InsufficientShieldedFeeError(
880 InsufficientShieldedFeeError::new("fee".to_string())
881 )),
882 90
883 );
884 assert_eq!(
885 discriminant_of(StateError::DocumentContestIndexMismatchError(
886 DocumentContestIndexMismatchError::new(
887 Identifier::from([1; 32]),
888 "expected".to_string(),
889 "provided".to_string(),
890 )
891 )),
892 91
893 );
894 assert_eq!(
895 discriminant_of(StateError::DocumentContestNotRequiredError(
896 DocumentContestNotRequiredError::new(
897 Identifier::from([1; 32]),
898 "provided".to_string(),
899 )
900 )),
901 92
902 );
903 assert_eq!(
904 discriminant_of(StateError::ReferencedEntityNotFoundError(
905 ReferencedEntityNotFoundError::new(
906 Identifier::from([1; 32]),
907 crate::data_contract::document_type::DocumentPropertyReferenceTarget::Identity,
908 "toUserId".to_string(),
909 )
910 )),
911 93
912 );
913 assert_eq!(
914 discriminant_of(StateError::ReferencedDocumentTypeNotFoundError(
915 ReferencedDocumentTypeNotFoundError::new(
916 Identifier::from([1; 32]),
917 "note".to_string(),
918 "parentNoteId".to_string(),
919 )
920 )),
921 94
922 );
923 assert_eq!(
924 discriminant_of(StateError::ReferencedDocumentTypeDeletableError(
925 ReferencedDocumentTypeDeletableError::new(
926 Identifier::from([1; 32]),
927 "note".to_string(),
928 "parentNoteId".to_string(),
929 )
930 )),
931 95
932 );
933 assert_eq!(
934 discriminant_of(StateError::ReferencedIdentityKeyNotFoundError(
935 ReferencedIdentityKeyNotFoundError::new(
936 Identifier::from([1; 32]),
937 2,
938 "toUserId".to_string(),
939 )
940 )),
941 96
942 );
943 assert_eq!(
944 discriminant_of(StateError::ReferencedIdentityKeyDisabledError(
945 ReferencedIdentityKeyDisabledError::new(
946 Identifier::from([1; 32]),
947 2,
948 "toUserId".to_string(),
949 )
950 )),
951 97
952 );
953 assert_eq!(
954 discriminant_of(StateError::ReferencedKeyIdPropertyInvalidError(
955 ReferencedKeyIdPropertyInvalidError::new(
956 "recipientKeyIndex".to_string(),
957 "toUserId".to_string(),
958 "missing".to_string(),
959 )
960 )),
961 98
962 );
963 assert_eq!(
964 discriminant_of(StateError::ReferencedDocumentPropertyAgreementInvalidError(
965 ReferencedDocumentPropertyAgreementInvalidError::new(
966 "like.postId".to_string(),
967 "hashtag".to_string(),
968 "hashtag".to_string(),
969 "missing".to_string(),
970 )
971 )),
972 99
973 );
974 assert_eq!(
975 discriminant_of(StateError::ReferencedDocumentPropertyMismatchError(
976 ReferencedDocumentPropertyMismatchError::new(
977 "postId".to_string(),
978 "hashtag".to_string(),
979 "hashtag".to_string(),
980 )
981 )),
982 100
983 );
984 let group_id = Identifier::from([1u8; 32]);
986 let identity_id = Identifier::from([2u8; 32]);
987 assert_eq!(
988 discriminant_of(StateError::ContractGroupAlreadyExistsError(
989 ContractGroupAlreadyExistsError::new(group_id)
990 )),
991 101
992 );
993 assert_eq!(
994 discriminant_of(StateError::ContractGroupNotFoundError(
995 ContractGroupNotFoundError::new(group_id)
996 )),
997 102
998 );
999 assert_eq!(
1000 discriminant_of(StateError::IdentityNotContractGroupOwnerOrAdminError(
1001 IdentityNotContractGroupOwnerOrAdminError::new(identity_id, group_id)
1002 )),
1003 103
1004 );
1005 assert_eq!(
1006 discriminant_of(StateError::ContractGroupAdminNotFoundError(
1007 ContractGroupAdminNotFoundError::new(group_id, identity_id)
1008 )),
1009 104
1010 );
1011 assert_eq!(
1013 discriminant_of(StateError::IdentityPublicKeyBudgetExceededError(
1014 IdentityPublicKeyBudgetExceededError::new(identity_id, 1, 2, 3)
1015 )),
1016 105
1017 );
1018 assert_eq!(
1019 discriminant_of(StateError::IdentityPublicKeyAlreadyExpiredError(
1020 IdentityPublicKeyAlreadyExpiredError::new(1, 2, 3)
1021 )),
1022 106
1023 );
1024 assert_eq!(
1026 discriminant_of(StateError::IdentityPublicKeyLimitNotSetError(
1027 IdentityPublicKeyLimitNotSetError::new(1, KeyLimit::Budget)
1028 )),
1029 107
1030 );
1031 assert_eq!(
1032 discriminant_of(StateError::IdentityPublicKeyLimitNotRaisedError(
1033 IdentityPublicKeyLimitNotRaisedError::new(1, KeyLimit::Expiry, 2, 3)
1034 )),
1035 108
1036 );
1037 assert_eq!(
1039 discriminant_of(StateError::DocumentImmutablePropertyChangedError(
1040 DocumentImmutablePropertyChangedError::new(
1041 identity_id,
1042 "post".to_string(),
1043 "author".to_string()
1044 )
1045 )),
1046 109
1047 );
1048 assert_eq!(
1050 discriminant_of(
1051 StateError::TokenOncePerIdentityDistributionAlreadyClaimedError(
1052 TokenOncePerIdentityDistributionAlreadyClaimedError::new(
1053 group_id,
1054 identity_id,
1055 1
1056 )
1057 )
1058 ),
1059 110
1060 );
1061 assert_eq!(
1063 discriminant_of(StateError::GasFeesPaidByNotAllowedError(
1064 GasFeesPaidByNotAllowedError::new(
1065 "post".to_string(),
1066 "create".to_string(),
1067 GasFeesPaidBy::ContractOwner,
1068 GasFeesPaidBy::DocumentOwner,
1069 )
1070 )),
1071 111
1072 );
1073 assert_eq!(
1074 discriminant_of(StateError::InconsistentGasFeesPaidByInBatchError(
1075 InconsistentGasFeesPaidByInBatchError::new(Some(identity_id), None)
1076 )),
1077 112
1078 );
1079 assert_eq!(
1080 discriminant_of(StateError::GasSponsorInsufficientBalanceError(
1081 GasSponsorInsufficientBalanceError::new(identity_id, 1, 2)
1082 )),
1083 113
1084 );
1085 assert_eq!(
1087 discriminant_of(StateError::ContractModerationNotEnabledError(
1088 ContractModerationNotEnabledError::new(group_id, ContractModerationList::Banlist,)
1089 )),
1090 114
1091 );
1092 assert_eq!(
1093 discriminant_of(StateError::IdentityNotContractModeratorError(
1094 IdentityNotContractModeratorError::new(group_id, identity_id)
1095 )),
1096 115
1097 );
1098 assert_eq!(
1099 discriminant_of(StateError::ContractModerationTargetNotAllowedError(
1100 ContractModerationTargetNotAllowedError::new(group_id, identity_id)
1101 )),
1102 116
1103 );
1104 assert_eq!(
1105 discriminant_of(StateError::ContractUserAlreadyBannedError(
1106 ContractUserAlreadyBannedError::new(group_id, identity_id)
1107 )),
1108 117
1109 );
1110 assert_eq!(
1111 discriminant_of(StateError::ContractUserNotBannedError(
1112 ContractUserNotBannedError::new(group_id, identity_id)
1113 )),
1114 118
1115 );
1116 assert_eq!(
1117 discriminant_of(StateError::ContractUserNotSuspendedError(
1118 ContractUserNotSuspendedError::new(group_id, identity_id)
1119 )),
1120 119
1121 );
1122 assert_eq!(
1123 discriminant_of(StateError::ContractSuspensionNotInFutureError(
1124 ContractSuspensionNotInFutureError::new(group_id, identity_id, 1, 2)
1125 )),
1126 120
1127 );
1128 assert_eq!(
1129 discriminant_of(StateError::ContractUserBannedError(
1130 ContractUserBannedError::new(group_id, identity_id)
1131 )),
1132 121
1133 );
1134 assert_eq!(
1135 discriminant_of(StateError::ContractUserSuspendedError(
1136 ContractUserSuspendedError::new(group_id, identity_id, 1)
1137 )),
1138 122
1139 );
1140 assert_eq!(
1141 discriminant_of(StateError::ContractModerationTargetNotFoundError(
1142 ContractModerationTargetNotFoundError::new(group_id, identity_id)
1143 )),
1144 123
1145 );
1146 assert_eq!(
1147 discriminant_of(StateError::ContractModeratorIdentityNotFoundError(
1148 ContractModeratorIdentityNotFoundError::new(group_id, identity_id)
1149 )),
1150 124
1151 );
1152 assert_eq!(
1153 discriminant_of(StateError::ContractModerationCounterpartyBarredError(
1154 ContractModerationCounterpartyBarredError::new(
1155 group_id,
1156 identity_id,
1157 ContractModerationCounterpartyRole::Recipient,
1158 )
1159 )),
1160 125
1161 );
1162 assert_eq!(
1164 discriminant_of(StateError::ContractFeesAlreadyClaimedThisEpochError(
1165 ContractFeesAlreadyClaimedThisEpochError::new(
1166 group_id,
1167 ContractFeePot::Moderators,
1168 7
1169 )
1170 )),
1171 126
1172 );
1173 assert_eq!(
1174 discriminant_of(StateError::ContractFeesNothingToClaimError(
1175 ContractFeesNothingToClaimError::new(group_id, ContractFeePot::Owner)
1176 )),
1177 127
1178 );
1179 assert_eq!(
1180 discriminant_of(StateError::ContractFeeClaimNotAllowedError(
1181 ContractFeeClaimNotAllowedError::new(group_id, ContractFeePot::Owner, identity_id)
1182 )),
1183 128
1184 );
1185 assert_eq!(
1187 discriminant_of(StateError::ReferencedDocumentTypeNotDeletableError(
1188 ReferencedDocumentTypeNotDeletableError::new(
1189 group_id,
1190 "note".to_string(),
1191 "noteId".to_string()
1192 )
1193 )),
1194 129
1195 );
1196 assert_eq!(
1198 discriminant_of(StateError::DocumentTypeNotDeletableByModeratorsError(
1199 DocumentTypeNotDeletableByModeratorsError::new(group_id, "post".to_string())
1200 )),
1201 130
1202 );
1203 let declared_fee = DocumentActionFee {
1205 owner: 1,
1206 moderators: 2,
1207 };
1208 let agreed_fee_multiplier = AgreedFeeMultiplier {
1209 known_permille: 1000,
1210 increase_tolerance_percent: 20,
1211 };
1212 assert_eq!(
1213 discriminant_of(StateError::DocumentActionFeeAgreementNotSetError(
1214 DocumentActionFeeAgreementNotSetError::new(
1215 "post".to_string(),
1216 "create".to_string(),
1217 ActionFeePricing::Fixed,
1218 declared_fee,
1219 )
1220 )),
1221 131
1222 );
1223 assert_eq!(
1224 discriminant_of(StateError::DocumentActionFeeAgreementMismatchError(
1225 DocumentActionFeeAgreementMismatchError::new(
1226 "post".to_string(),
1227 "create".to_string(),
1228 ActionFeePricing::Fixed,
1229 declared_fee,
1230 &DocumentActionFeeAgreement::for_declared_fee(
1231 ActionFeePricing::FeeMultiplier,
1232 declared_fee,
1233 agreed_fee_multiplier,
1234 ),
1235 )
1236 )),
1237 132
1238 );
1239 assert_eq!(
1240 discriminant_of(StateError::DocumentActionFeeMultiplierNotToleratedError(
1241 DocumentActionFeeMultiplierNotToleratedError::new(
1242 "post".to_string(),
1243 "create".to_string(),
1244 agreed_fee_multiplier,
1245 1500,
1246 )
1247 )),
1248 133
1249 );
1250 assert_eq!(
1252 discriminant_of(StateError::DocumentModerationWindowElapsedError(
1253 DocumentModerationWindowElapsedError::new(group_id, identity_id, 1, 2, 3)
1254 )),
1255 134
1256 );
1257 assert_eq!(
1259 discriminant_of(StateError::ContractUserNotWarnedError(
1260 ContractUserNotWarnedError::new(group_id, identity_id)
1261 )),
1262 135
1263 );
1264 assert_eq!(
1265 discriminant_of(StateError::ContractUserWarningLimitReachedError(
1266 ContractUserWarningLimitReachedError::new(group_id, identity_id, 16)
1267 )),
1268 136
1269 );
1270 assert_eq!(
1272 discriminant_of(StateError::ContractDocumentRemovalNotFoundError(
1273 ContractDocumentRemovalNotFoundError::new(
1274 group_id,
1275 "post".to_string(),
1276 identity_id
1277 )
1278 )),
1279 137
1280 );
1281 assert_eq!(
1282 discriminant_of(StateError::DocumentRestoreWindowElapsedError(
1283 DocumentRestoreWindowElapsedError::new(group_id, identity_id, 1, 2, 3)
1284 )),
1285 138
1286 );
1287 assert_eq!(
1288 discriminant_of(StateError::DocumentRestoreHashMismatchError(
1289 DocumentRestoreHashMismatchError::new(group_id, identity_id, [1; 32], [2; 32])
1290 )),
1291 139
1292 );
1293 assert_eq!(
1294 discriminant_of(StateError::ContractDocumentAlreadyRestoredError(
1295 ContractDocumentAlreadyRestoredError::new(group_id, identity_id, identity_id, 4)
1296 )),
1297 140
1298 );
1299 assert_eq!(
1301 discriminant_of(StateError::ContractModeratedDocumentTypeNotYetUsableError(
1302 ContractModeratedDocumentTypeNotYetUsableError::new(group_id, "post".to_string())
1303 )),
1304 141
1305 );
1306 assert_eq!(
1308 discriminant_of(StateError::VoteChoiceNotAllowedForVotePollError(
1309 VoteChoiceNotAllowedForVotePollError::new(
1310 VotePoll::ContestedDocumentResourceVotePoll(
1311 ContestedDocumentResourceVotePoll {
1312 contract_id: Identifier::new([7; 32]),
1313 document_type_name: "domain".to_string(),
1314 index_name: "parentNameAndLabel".to_string(),
1315 index_values: vec![],
1316 }
1317 ),
1318 ResourceVoteChoice::Lock,
1319 )
1320 )),
1321 142
1322 );
1323 assert_eq!(
1325 discriminant_of(StateError::ReferencedContractRequirementNotMetError(
1326 ReferencedContractRequirementNotMetError::new(
1327 group_id,
1328 "moderation".to_string(),
1329 "elected".to_string(),
1330 "targetContractId".to_string(),
1331 )
1332 )),
1333 143
1334 );
1335 assert_eq!(
1337 discriminant_of(StateError::ReferencedIdentityKeyRequirementNotMetError(
1338 ReferencedIdentityKeyRequirementNotMetError::new(
1339 "joinRequest".to_string(),
1340 "recipientId".to_string(),
1341 group_id,
1342 2,
1343 "purpose".to_string(),
1344 "decryption".to_string(),
1345 "encryption".to_string(),
1346 )
1347 )),
1348 144
1349 );
1350 assert_eq!(
1352 discriminant_of(StateError::ReferencedDocumentLookupInvalidError(
1353 ReferencedDocumentLookupInvalidError::new(
1354 "electedCharter.members".to_string(),
1355 "bySubmittedCharter".to_string(),
1356 "is not unique".to_string(),
1357 )
1358 )),
1359 145
1360 );
1361 assert_eq!(
1363 discriminant_of(StateError::ReferencedDocumentListInvalidError(
1364 ReferencedDocumentListInvalidError::new(
1365 "resignation.memberId".to_string(),
1366 "members".to_string(),
1367 "is not a typed array of identifiers".to_string(),
1368 )
1369 )),
1370 146
1371 );
1372 assert_eq!(
1375 discriminant_of(StateError::ContractModerationAbilityNotGrantedError(
1376 ContractModerationAbilityNotGrantedError::new(
1377 group_id,
1378 ModerationAbility::DeleteDocuments,
1379 Some("post".to_string()),
1380 )
1381 )),
1382 147
1383 );
1384 assert_eq!(
1385 discriminant_of(
1386 StateError::ModerationCharterAddedModeratorLimitReachedError(
1387 ModerationCharterAddedModeratorLimitReachedError::new(group_id, identity_id, 2)
1388 )
1389 ),
1390 148
1391 );
1392 assert_eq!(
1393 discriminant_of(StateError::DocumentActionFeeModeratorsShareMismatchError(
1394 DocumentActionFeeModeratorsShareMismatchError::new(
1395 "post".to_string(),
1396 "create".to_string(),
1397 100,
1398 50,
1399 Some(60),
1400 )
1401 )),
1402 149
1403 );
1404
1405 assert_eq!(
1408 discriminant_of(StateError::ModerationReasonNotListedError(
1409 ModerationReasonNotListedError::new(group_id, identity_id, None)
1410 )),
1411 150
1412 );
1413 assert_eq!(
1416 discriminant_of(StateError::DocumentExpiredError(DocumentExpiredError::new(
1417 group_id,
1418 "note".to_string(),
1419 identity_id,
1420 1_000,
1421 2_000,
1422 ))),
1423 151
1424 );
1425 assert_eq!(
1428 discriminant_of(StateError::DocumentContestMaximumContendersReachedError(
1429 DocumentContestMaximumContendersReachedError::new(
1430 ContestedDocumentResourceVotePoll::default(),
1431 1_000,
1432 )
1433 )),
1434 152
1435 );
1436 assert_eq!(
1438 discriminant_of(StateError::DocumentFieldNotChangeableByModeratorsError(
1439 DocumentFieldNotChangeableByModeratorsError::new(
1440 group_id,
1441 "report".to_string(),
1442 "status".to_string(),
1443 )
1444 )),
1445 153
1446 );
1447 assert_eq!(
1448 discriminant_of(StateError::DocumentModeratorFieldNotWritableError(
1449 DocumentModeratorFieldNotWritableError::new(
1450 group_id,
1451 "report".to_string(),
1452 identity_id,
1453 "status".to_string(),
1454 identity_id,
1455 )
1456 )),
1457 154
1458 );
1459 assert_eq!(
1462 discriminant_of(StateError::ReferencedDocumentRequirementNotMetError(
1463 ReferencedDocumentRequirementNotMetError::new(
1464 identity_id,
1465 "minimumAgeSeconds".to_string(),
1466 "60".to_string(),
1467 "$creatorId".to_string(),
1468 )
1469 )),
1470 155
1471 );
1472 assert_eq!(
1474 discriminant_of(StateError::ReferencedDocumentTypeNotModeratedError(
1475 ReferencedDocumentTypeNotModeratedError::new(
1476 identity_id,
1477 "post".to_string(),
1478 "replyTo".to_string(),
1479 )
1480 )),
1481 156
1482 );
1483 assert_eq!(
1484 discriminant_of(StateError::ReferencedDocumentTypeModeratedError(
1485 ReferencedDocumentTypeModeratedError::new(
1486 identity_id,
1487 "post".to_string(),
1488 "replyTo".to_string(),
1489 )
1490 )),
1491 157
1492 );
1493 assert_eq!(
1494 discriminant_of(StateError::ReferencedDocumentRemovedError(
1495 ReferencedDocumentRemovedError::new(
1496 identity_id,
1497 "replyTo".to_string(),
1498 "threadId".to_string(),
1499 )
1500 )),
1501 158
1502 );
1503 assert_eq!(
1506 discriminant_of(StateError::DocumentTypeNotDeletableOnceSettledError(
1507 DocumentTypeNotDeletableOnceSettledError::new(group_id, "post".to_string())
1508 )),
1509 159
1510 );
1511 assert_eq!(
1512 discriminant_of(StateError::ContractModerationTeamNotSeatedError(
1513 ContractModerationTeamNotSeatedError::new(group_id)
1514 )),
1515 160
1516 );
1517 assert_eq!(
1518 discriminant_of(StateError::DocumentNotSettledError(
1519 DocumentNotSettledError::new(group_id, identity_id, 1_000, 60, 2_000)
1520 )),
1521 161
1522 );
1523 assert_eq!(
1524 discriminant_of(StateError::ContractTeamActionDoesNotExistError(
1525 ContractTeamActionDoesNotExistError::new(group_id, identity_id)
1526 )),
1527 162
1528 );
1529 assert_eq!(
1530 discriminant_of(StateError::ContractTeamActionAlreadySignedError(
1531 ContractTeamActionAlreadySignedError::new(group_id, identity_id, identity_id)
1532 )),
1533 163
1534 );
1535 assert_eq!(
1536 discriminant_of(StateError::SettledDeletionNotRestorableError(
1537 SettledDeletionNotRestorableError::new(group_id, identity_id, 1_000)
1538 )),
1539 164
1540 );
1541 assert_eq!(
1542 discriminant_of(StateError::ContractTeamActionAlreadyCompletedError(
1543 ContractTeamActionAlreadyCompletedError::new(group_id, identity_id)
1544 )),
1545 165
1546 );
1547 assert_eq!(
1548 discriminant_of(StateError::ContractTeamActionDocumentChangedError(
1549 ContractTeamActionDocumentChangedError::new(group_id, identity_id, identity_id)
1550 )),
1551 166
1552 );
1553 assert_eq!(
1555 discriminant_of(StateError::TokenShieldedPoolNotEnabledError(
1556 TokenShieldedPoolNotEnabledError::new(Identifier::from([1; 32]))
1557 )),
1558 167
1559 );
1560 assert_eq!(
1561 discriminant_of(StateError::TokenShieldedPaymentAmountMismatchError(
1562 TokenShieldedPaymentAmountMismatchError::new(
1563 Identifier::from([1; 32]),
1564 10,
1565 9,
1566 "create".to_string(),
1567 )
1568 )),
1569 168
1570 );
1571 assert_eq!(
1572 discriminant_of(StateError::TokenShieldedPaymentNotRequiredError(
1573 TokenShieldedPaymentNotRequiredError::new(
1574 Identifier::from([1; 32]),
1575 "create".to_string(),
1576 )
1577 )),
1578 169
1579 );
1580 assert_eq!(
1582 discriminant_of(StateError::ContractTeamMemberAddedAfterDocumentError(
1583 ContractTeamMemberAddedAfterDocumentError::new(
1584 group_id,
1585 identity_id,
1586 2_000,
1587 identity_id,
1588 1_000
1589 )
1590 )),
1591 170
1592 );
1593 assert_eq!(
1595 discriminant_of(StateError::ReferencedDocumentTypeIndexOnlyError(
1596 ReferencedDocumentTypeIndexOnlyError::new(
1597 identity_id,
1598 "like".to_string(),
1599 "replyTo".to_string(),
1600 )
1601 )),
1602 171
1603 );
1604 assert_eq!(
1607 discriminant_of(StateError::DocumentDeleteConstraintViolatedError(
1608 DocumentDeleteConstraintViolatedError::new(
1609 identity_id,
1610 "poll".to_string(),
1611 "noVotes".to_string(),
1612 PropertyConstraintViolation::NotMet,
1613 )
1614 )),
1615 172
1616 );
1617 }
1618}