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::basic::contract_group::{
9 ContractGroupMemberNotInContractError, ContractGroupMembershipsOverLimitError,
10 DuplicateContractGroupMembershipError, InvalidContractGroupAdminsError,
11 InvalidContractGroupDescriptionLengthError, InvalidContractGroupNameLengthError,
12 RedundantContractGroupMembershipError,
13};
14use crate::consensus::basic::contract_moderation::{
15 ContractModerationReasonTooLongError, ContractModerationSelfTargetError,
16 DocumentActionFeesWithoutModerationError, InvalidContractModerationConfigError,
17 InvalidContractModerationDocumentFieldsError, InvalidContractModerationReasonDocumentsError,
18};
19use crate::consensus::basic::data_contract::data_contract_max_depth_exceed_error::DataContractMaxDepthExceedError;
20use crate::consensus::basic::data_contract::{
21 ContestedUniqueIndexOnMutableDocumentTypeError, ContestedUniqueIndexWithUniqueIndexError,
22 DataContractHaveNewUniqueIndexError, DataContractImmutablePropertiesUpdateError,
23 DataContractInvalidIndexDefinitionUpdateError, DataContractInvalidRequiredFieldsUpdateError,
24 DataContractTokenConfigurationUpdateError, DataContractUniqueIndicesChangedError,
25 DecimalsOverLimitError, DuplicateIndexError, DuplicateIndexNameError,
26 GroupExceedsMaxMembersError, GroupHasTooFewMembersError, GroupMemberHasPowerOfZeroError,
27 GroupMemberHasPowerOverLimitError, GroupNonUnilateralMemberPowerHasLessThanRequiredPowerError,
28 GroupPositionDoesNotExistError, GroupRequiredPowerIsInvalidError,
29 GroupTotalPowerLessThanRequiredError, IncompatibleDataContractSchemaError,
30 IncompatibleDocumentTypeSchemaError, IncompatibleRe2PatternError, InvalidCompoundIndexError,
31 InvalidDataContractIdError, InvalidDataContractVersionError, InvalidDocumentTypeNameError,
32 InvalidDocumentTypeRequiredSecurityLevelError, InvalidIndexPropertyTypeError,
33 InvalidIndexedPropertyConstraintError, InvalidKeywordCharacterError,
34 InvalidTokenBaseSupplyError, InvalidTokenDistributionFunctionDivideByZeroError,
35 InvalidTokenDistributionFunctionIncoherenceError,
36 InvalidTokenDistributionFunctionInvalidParameterError,
37 InvalidTokenDistributionFunctionInvalidParameterTupleError, InvalidTokenLanguageCodeError,
38 InvalidTokenNameCharacterError, InvalidTokenNameLengthError, MainGroupIsNotDefinedError,
39 NewTokensDestinationIdentityOptionRequiredError, NonContiguousContractGroupPositionsError,
40 NonContiguousContractTokenPositionsError, PreProgrammedDistributionAmountOverLimitError,
41 RedundantDocumentPaidForByTokenWithContractId, SystemPropertyIndexAlreadyPresentError,
42 TokenShieldedPoolIncompatibleRulesError, UndefinedIndexPropertyError,
43 UniqueIndicesLimitReachedError, UnknownDocumentCreationRestrictionModeError,
44 UnknownGasFeesPaidByError, UnknownSecurityLevelError, UnknownStorageKeyRequirementsError,
45 UnknownTradeModeError, UnknownTransferableTypeError,
46};
47use crate::consensus::basic::data_contract::{
48 InvalidJsonSchemaRefError, TokenPaymentByBurningOnlyAllowedOnInternalTokenError,
49 UnknownDocumentActionTokenEffectError,
50};
51use crate::consensus::basic::decode::{
52 ProtocolVersionParsingError, SerializedObjectParsingError, VersionError,
53};
54use crate::consensus::basic::document::{
55 ContestedDocumentsTemporarilyNotAllowedError, DataContractNotPresentError,
56 DocumentCreationNotAllowedError, DocumentFieldMaxSizeExceededError,
57 DocumentPropertyConstraintViolatedError, DocumentPropertyMaxBytesExceededError,
58 DocumentPropertyNotDistinctError, DocumentPropertyNotGeneratedError,
59 DocumentReferencePreimageInvalidError, DocumentTransitionsAreAbsentError,
60 DuplicateDocumentTransitionsWithIdsError, DuplicateDocumentTransitionsWithIndicesError,
61 InconsistentCompoundIndexDataError, InvalidDocumentTransitionActionError,
62 InvalidDocumentTransitionIdError, InvalidDocumentTypeError, InvalidEncryptedPropertyShapeError,
63 MaxDocumentsTransitionsExceededError, MissingDataContractIdBasicError,
64 MissingDocumentTransitionActionError, MissingDocumentTransitionTypeError,
65 MissingDocumentTypeError, MissingPositionsInDocumentTypePropertiesError, NonceOutOfBoundsError,
66};
67use crate::consensus::basic::identity::ContractGroupBoundKeyNotAllowedInShieldedIdentityCreationError;
68use crate::consensus::basic::identity::IdentityKeyLimitsUpdateEmptyError;
69use crate::consensus::basic::identity::IdentityPublicKeyLimitsNotAllowedInShieldedIdentityCreationError;
70use crate::consensus::basic::identity::{
71 DataContractBoundsNotPresentError, DisablingKeyIdAlsoBeingAddedInSameTransitionError,
72 DuplicatedIdentityPublicKeyBasicError, DuplicatedIdentityPublicKeyIdBasicError,
73 IdentityAssetLockProofLockedTransactionMismatchError,
74 IdentityAssetLockStateTransitionReplayError, IdentityAssetLockTransactionIsNotFoundError,
75 IdentityAssetLockTransactionOutPointAlreadyConsumedError,
76 IdentityAssetLockTransactionOutPointNotEnoughBalanceError,
77 IdentityAssetLockTransactionOutputNotFoundError,
78 IdentityAssetLockTransactionTooManyInputsError, IdentityCreditTransferToSelfError,
79 IdentityPublicKeyLimitsNotAllowedError, InvalidAssetLockProofCoreChainHeightError,
80 InvalidAssetLockProofTransactionHeightError, InvalidAssetLockTransactionOutputReturnSizeError,
81 InvalidCreditWithdrawalTransitionCoreFeeError,
82 InvalidCreditWithdrawalTransitionOutputScriptError,
83 InvalidIdentityAssetLockProofChainLockValidationError,
84 InvalidIdentityAssetLockTransactionError, InvalidIdentityAssetLockTransactionOutputError,
85 InvalidIdentityCreditTransferAmountError, InvalidIdentityCreditWithdrawalTransitionAmountError,
86 InvalidIdentityKeySignatureError, InvalidIdentityPublicKeyBudgetError,
87 InvalidIdentityPublicKeyDataError, InvalidIdentityPublicKeySecurityLevelError,
88 InvalidIdentityUpdateTransitionDisableKeysError, InvalidIdentityUpdateTransitionEmptyError,
89 InvalidInstantAssetLockProofError, InvalidInstantAssetLockProofSignatureError,
90 InvalidKeyPurposeForContractBoundsError, MissingMasterPublicKeyError,
91 NotImplementedCreditWithdrawalTransitionPoolingError, TooManyMasterPublicKeyError,
92 WithdrawalOutputScriptNotAllowedWhenSigningWithOwnerKeyError,
93};
94use crate::consensus::basic::invalid_identifier_error::InvalidIdentifierError;
95use crate::consensus::basic::moderation_charter::{
96 ModerationCharterMalformedFieldError, ModerationCharterRewardSplitNotOneHundredError,
97};
98use crate::consensus::basic::state_transition::{
99 FeeStrategyDuplicateError, FeeStrategyEmptyError, FeeStrategyIndexOutOfBoundsError,
100 FeeStrategyTooManyStepsError, InputBelowMinimumError, InputOutputBalanceMismatchError,
101 InputWitnessCountMismatchError, InputsNotLessThanOutputsError, InsufficientFundingAmountError,
102 InvalidRemainderOutputCountError, InvalidStateTransitionTypeError,
103 MissingStateTransitionTypeError, OutputAddressAlsoInputError, OutputBelowMinimumError,
104 OutputsNotGreaterThanInputsError, ShieldedEmptyProofError,
105 ShieldedEncryptedNoteSizeMismatchError, ShieldedImplicitFeeCapExceededError,
106 ShieldedInvalidDenominationError, ShieldedInvalidValueBalanceError, ShieldedNoActionsError,
107 ShieldedTooManyActionsError, ShieldedZeroAnchorError, StateTransitionMaxSizeExceededError,
108 StateTransitionNotActiveError, TransitionNoInputsError, TransitionNoOutputsError,
109 TransitionOverMaxInputsError, TransitionOverMaxOutputsError, WithdrawalBalanceMismatchError,
110 WithdrawalBelowMinAmountError,
111};
112use crate::consensus::basic::{
113 IncompatibleProtocolVersionError, UnsupportedFeatureError, UnsupportedProtocolVersionError,
114};
115use crate::consensus::ConsensusError;
116
117use super::data_contract::{
118 DuplicateKeywordsError, InvalidDescriptionLengthError, InvalidKeywordLengthError,
119 TooManyKeywordsError,
120};
121use crate::consensus::basic::group::GroupActionNotAllowedOnTransitionError;
122use crate::consensus::basic::overflow_error::OverflowError;
123use crate::consensus::basic::token::{
124 ChoosingTokenMintRecipientNotAllowedError, ContractHasNoTokensError,
125 DestinationIdentityForTokenMintingNotSetError, InvalidActionIdError, InvalidTokenAmountError,
126 InvalidTokenConfigUpdateNoChangeError, InvalidTokenDistributionBlockIntervalTooShortError,
127 InvalidTokenDistributionEpochIntervalTooShortError,
128 InvalidTokenDistributionTimeIntervalNotMinuteAlignedError,
129 InvalidTokenDistributionTimeIntervalTooShortError, InvalidTokenIdError,
130 InvalidTokenNoteTooBigError, InvalidTokenOncePerIdentityDistributionAmountError,
131 InvalidTokenPositionError, MissingDefaultLocalizationError,
132 TokenNoteOnlyAllowedWhenProposerError, TokenPricingScheduleEmptyError,
133 TokenTransferToOurselfError,
134};
135use crate::consensus::basic::unsupported_version_error::UnsupportedVersionError;
136use crate::consensus::basic::value_error::ValueError;
137use crate::consensus::basic::{
138 json_schema_compilation_error::JsonSchemaCompilationError, json_schema_error::JsonSchemaError,
139};
140use crate::consensus::state::identity::master_public_key_update_error::MasterPublicKeyUpdateError;
141use crate::data_contract::errors::DataContractError;
142
143#[allow(clippy::large_enum_variant)]
144#[derive(
145 Error,
146 Debug,
147 PlatformSerialize,
148 PlatformDeserializeTrusted,
149 PlatformDeserializeUntrusted,
150 Encode,
151 Decode,
152 PartialEq,
153 Clone,
154 DecodeUntrusted,
155)]
156pub enum BasicError {
157 #[error(transparent)]
164 ProtocolVersionParsingError(ProtocolVersionParsingError),
165
166 #[error(transparent)]
167 VersionError(VersionError),
168
169 #[error(transparent)]
170 ContractError(DataContractError),
171
172 #[error(transparent)]
173 UnknownSecurityLevelError(UnknownSecurityLevelError),
174
175 #[error(transparent)]
176 UnknownStorageKeyRequirementsError(UnknownStorageKeyRequirementsError),
177
178 #[error(transparent)]
179 UnknownTransferableTypeError(UnknownTransferableTypeError),
180
181 #[error(transparent)]
182 UnknownTradeModeError(UnknownTradeModeError),
183
184 #[error(transparent)]
185 UnknownDocumentCreationRestrictionModeError(UnknownDocumentCreationRestrictionModeError),
186
187 #[error(transparent)]
188 SerializedObjectParsingError(SerializedObjectParsingError),
189
190 #[error(transparent)]
191 UnsupportedProtocolVersionError(UnsupportedProtocolVersionError),
192
193 #[error(transparent)]
194 UnsupportedVersionError(UnsupportedVersionError),
195
196 #[error(transparent)]
197 IncompatibleProtocolVersionError(IncompatibleProtocolVersionError),
198
199 #[error(transparent)]
201 JsonSchemaCompilationError(JsonSchemaCompilationError),
202
203 #[error(transparent)]
204 JsonSchemaError(JsonSchemaError),
205
206 #[error(transparent)]
207 InvalidIdentifierError(InvalidIdentifierError),
208
209 #[error(transparent)]
210 ValueError(ValueError),
211
212 #[error(transparent)]
214 DataContractMaxDepthExceedError(DataContractMaxDepthExceedError),
215
216 #[error(transparent)]
217 DuplicateIndexError(DuplicateIndexError),
218
219 #[error(transparent)]
220 IncompatibleRe2PatternError(IncompatibleRe2PatternError),
221
222 #[error(transparent)]
223 InvalidCompoundIndexError(InvalidCompoundIndexError),
224
225 #[error(transparent)]
226 InvalidDataContractIdError(InvalidDataContractIdError),
227
228 #[error(transparent)]
229 InvalidIndexedPropertyConstraintError(InvalidIndexedPropertyConstraintError),
230
231 #[error(transparent)]
232 InvalidIndexPropertyTypeError(InvalidIndexPropertyTypeError),
233
234 #[error(transparent)]
235 InvalidJsonSchemaRefError(InvalidJsonSchemaRefError),
236
237 #[error(transparent)]
238 SystemPropertyIndexAlreadyPresentError(SystemPropertyIndexAlreadyPresentError),
239
240 #[error(transparent)]
241 UndefinedIndexPropertyError(UndefinedIndexPropertyError),
242
243 #[error(transparent)]
244 UniqueIndicesLimitReachedError(UniqueIndicesLimitReachedError),
245
246 #[error(transparent)]
247 DuplicateIndexNameError(DuplicateIndexNameError),
248
249 #[error(transparent)]
250 InvalidDataContractVersionError(InvalidDataContractVersionError),
251
252 #[error(transparent)]
253 IncompatibleDataContractSchemaError(IncompatibleDataContractSchemaError),
254
255 #[error(transparent)]
256 DataContractImmutablePropertiesUpdateError(DataContractImmutablePropertiesUpdateError),
257
258 #[error(transparent)]
259 DataContractUniqueIndicesChangedError(DataContractUniqueIndicesChangedError),
260
261 #[error(transparent)]
262 DataContractInvalidIndexDefinitionUpdateError(DataContractInvalidIndexDefinitionUpdateError),
263
264 #[error(transparent)]
265 DataContractHaveNewUniqueIndexError(DataContractHaveNewUniqueIndexError),
266
267 #[error(transparent)]
269 DataContractNotPresentError(DataContractNotPresentError),
270
271 #[error(transparent)]
272 DocumentCreationNotAllowedError(DocumentCreationNotAllowedError),
273
274 #[error(transparent)]
275 DataContractBoundsNotPresentError(DataContractBoundsNotPresentError),
276
277 #[error(transparent)]
278 DuplicateDocumentTransitionsWithIdsError(DuplicateDocumentTransitionsWithIdsError),
279
280 #[error(transparent)]
281 DuplicateDocumentTransitionsWithIndicesError(DuplicateDocumentTransitionsWithIndicesError),
282
283 #[error(transparent)]
284 NonceOutOfBoundsError(NonceOutOfBoundsError),
285
286 #[error(transparent)]
287 InconsistentCompoundIndexDataError(InconsistentCompoundIndexDataError),
288
289 #[error(transparent)]
290 InvalidDocumentTransitionActionError(InvalidDocumentTransitionActionError),
291
292 #[error(transparent)]
293 InvalidDocumentTransitionIdError(InvalidDocumentTransitionIdError),
294
295 #[error(transparent)]
296 InvalidDocumentTypeError(InvalidDocumentTypeError),
297
298 #[error(transparent)]
299 MissingPositionsInDocumentTypePropertiesError(MissingPositionsInDocumentTypePropertiesError),
300
301 #[error(transparent)]
302 MissingDataContractIdBasicError(MissingDataContractIdBasicError),
303
304 #[error(transparent)]
305 MissingDocumentTransitionActionError(MissingDocumentTransitionActionError),
306
307 #[error(transparent)]
308 MissingDocumentTransitionTypeError(MissingDocumentTransitionTypeError),
309
310 #[error(transparent)]
311 MissingDocumentTypeError(MissingDocumentTypeError),
312
313 #[error(transparent)]
314 MaxDocumentsTransitionsExceededError(MaxDocumentsTransitionsExceededError),
315
316 #[error(transparent)]
318 DuplicatedIdentityPublicKeyBasicError(DuplicatedIdentityPublicKeyBasicError),
319
320 #[error(transparent)]
321 DuplicatedIdentityPublicKeyIdBasicError(DuplicatedIdentityPublicKeyIdBasicError),
322
323 #[error(transparent)]
324 DisablingKeyIdAlsoBeingAddedInSameTransitionError(
325 DisablingKeyIdAlsoBeingAddedInSameTransitionError,
326 ),
327
328 #[error(transparent)]
329 IdentityAssetLockProofLockedTransactionMismatchError(
330 IdentityAssetLockProofLockedTransactionMismatchError,
331 ),
332
333 #[error(transparent)]
334 IdentityAssetLockTransactionIsNotFoundError(IdentityAssetLockTransactionIsNotFoundError),
335
336 #[error(transparent)]
337 IdentityAssetLockTransactionOutPointAlreadyConsumedError(
338 IdentityAssetLockTransactionOutPointAlreadyConsumedError,
339 ),
340
341 #[error(transparent)]
342 IdentityAssetLockTransactionOutPointNotEnoughBalanceError(
343 IdentityAssetLockTransactionOutPointNotEnoughBalanceError,
344 ),
345
346 #[error(transparent)]
347 IdentityAssetLockStateTransitionReplayError(IdentityAssetLockStateTransitionReplayError),
348
349 #[error(transparent)]
350 IdentityAssetLockTransactionOutputNotFoundError(
351 IdentityAssetLockTransactionOutputNotFoundError,
352 ),
353
354 #[error(transparent)]
355 InvalidAssetLockProofCoreChainHeightError(InvalidAssetLockProofCoreChainHeightError),
356
357 #[error(transparent)]
358 InvalidIdentityAssetLockProofChainLockValidationError(
359 InvalidIdentityAssetLockProofChainLockValidationError,
360 ),
361
362 #[error(transparent)]
363 InvalidAssetLockProofTransactionHeightError(InvalidAssetLockProofTransactionHeightError),
364
365 #[error(transparent)]
366 InvalidAssetLockTransactionOutputReturnSizeError(
367 InvalidAssetLockTransactionOutputReturnSizeError,
368 ),
369
370 #[error(transparent)]
371 InvalidIdentityAssetLockTransactionError(InvalidIdentityAssetLockTransactionError),
372
373 #[error(transparent)]
374 InvalidIdentityAssetLockTransactionOutputError(InvalidIdentityAssetLockTransactionOutputError),
375
376 #[error(transparent)]
377 InvalidIdentityPublicKeyDataError(InvalidIdentityPublicKeyDataError),
378
379 #[error(transparent)]
380 InvalidInstantAssetLockProofError(InvalidInstantAssetLockProofError),
381
382 #[error(transparent)]
383 InvalidInstantAssetLockProofSignatureError(InvalidInstantAssetLockProofSignatureError),
384
385 #[error(transparent)]
386 MissingMasterPublicKeyError(MissingMasterPublicKeyError),
387
388 #[error(transparent)]
389 TooManyMasterPublicKeyError(TooManyMasterPublicKeyError),
390
391 #[error(transparent)]
392 MasterPublicKeyUpdateError(MasterPublicKeyUpdateError),
393
394 #[error(transparent)]
395 InvalidDocumentTypeRequiredSecurityLevelError(InvalidDocumentTypeRequiredSecurityLevelError),
396
397 #[error(transparent)]
398 InvalidIdentityPublicKeySecurityLevelError(InvalidIdentityPublicKeySecurityLevelError),
399
400 #[error(transparent)]
401 InvalidIdentityKeySignatureError(InvalidIdentityKeySignatureError),
402
403 #[error(transparent)]
404 InvalidIdentityCreditTransferAmountError(InvalidIdentityCreditTransferAmountError),
405
406 #[error(transparent)]
407 InvalidCreditWithdrawalTransitionOutputScriptError(
408 InvalidCreditWithdrawalTransitionOutputScriptError,
409 ),
410
411 #[error(transparent)]
412 WithdrawalOutputScriptNotAllowedWhenSigningWithOwnerKeyError(
413 WithdrawalOutputScriptNotAllowedWhenSigningWithOwnerKeyError,
414 ),
415
416 #[error(transparent)]
417 InvalidCreditWithdrawalTransitionCoreFeeError(InvalidCreditWithdrawalTransitionCoreFeeError),
418
419 #[error(transparent)]
420 InvalidIdentityCreditWithdrawalTransitionAmountError(
421 InvalidIdentityCreditWithdrawalTransitionAmountError,
422 ),
423
424 #[error(transparent)]
425 InvalidIdentityUpdateTransitionEmptyError(InvalidIdentityUpdateTransitionEmptyError),
426
427 #[error(transparent)]
428 InvalidIdentityUpdateTransitionDisableKeysError(
429 InvalidIdentityUpdateTransitionDisableKeysError,
430 ),
431
432 #[error(transparent)]
433 NotImplementedCreditWithdrawalTransitionPoolingError(
434 NotImplementedCreditWithdrawalTransitionPoolingError,
435 ),
436
437 #[error(transparent)]
439 InvalidStateTransitionTypeError(InvalidStateTransitionTypeError),
440
441 #[error(transparent)]
442 MissingStateTransitionTypeError(MissingStateTransitionTypeError),
443
444 #[error(transparent)]
445 DocumentFieldMaxSizeExceededError(DocumentFieldMaxSizeExceededError),
446
447 #[error(transparent)]
448 StateTransitionMaxSizeExceededError(StateTransitionMaxSizeExceededError),
449
450 #[error(transparent)]
451 DocumentTransitionsAreAbsentError(DocumentTransitionsAreAbsentError),
452
453 #[error(transparent)]
454 IdentityCreditTransferToSelfError(IdentityCreditTransferToSelfError),
455
456 #[error(transparent)]
457 InvalidDocumentTypeNameError(InvalidDocumentTypeNameError),
458
459 #[error(transparent)]
460 IncompatibleDocumentTypeSchemaError(IncompatibleDocumentTypeSchemaError),
461
462 #[error(transparent)]
463 ContestedUniqueIndexOnMutableDocumentTypeError(ContestedUniqueIndexOnMutableDocumentTypeError),
464
465 #[error(transparent)]
466 ContestedUniqueIndexWithUniqueIndexError(ContestedUniqueIndexWithUniqueIndexError),
467
468 #[error(transparent)]
469 OverflowError(OverflowError),
470
471 #[error(transparent)]
472 UnsupportedFeatureError(UnsupportedFeatureError),
473
474 #[error(transparent)]
475 ContestedDocumentsTemporarilyNotAllowedError(ContestedDocumentsTemporarilyNotAllowedError),
476
477 #[error(transparent)]
478 DataContractTokenConfigurationUpdateError(DataContractTokenConfigurationUpdateError),
479
480 #[error(transparent)]
481 NonContiguousContractTokenPositionsError(NonContiguousContractTokenPositionsError),
482
483 #[error(transparent)]
484 NonContiguousContractGroupPositionsError(NonContiguousContractGroupPositionsError),
485
486 #[error(transparent)]
487 InvalidTokenBaseSupplyError(InvalidTokenBaseSupplyError),
488
489 #[error(transparent)]
490 InvalidTokenIdError(InvalidTokenIdError),
491
492 #[error(transparent)]
493 InvalidTokenAmountError(InvalidTokenAmountError),
494
495 #[error(transparent)]
496 InvalidTokenPositionError(InvalidTokenPositionError),
497
498 #[error(transparent)]
499 InvalidTokenConfigUpdateNoChangeError(InvalidTokenConfigUpdateNoChangeError),
500
501 #[error(transparent)]
502 InvalidTokenDistributionFunctionDivideByZeroError(
503 InvalidTokenDistributionFunctionDivideByZeroError,
504 ),
505
506 #[error(transparent)]
507 InvalidTokenDistributionFunctionInvalidParameterError(
508 InvalidTokenDistributionFunctionInvalidParameterError,
509 ),
510
511 #[error(transparent)]
512 InvalidTokenDistributionFunctionInvalidParameterTupleError(
513 InvalidTokenDistributionFunctionInvalidParameterTupleError,
514 ),
515
516 #[error(transparent)]
517 InvalidTokenDistributionFunctionIncoherenceError(
518 InvalidTokenDistributionFunctionIncoherenceError,
519 ),
520
521 #[error(transparent)]
522 TokenTransferToOurselfError(TokenTransferToOurselfError),
523
524 #[error(transparent)]
525 InvalidTokenNoteTooBigError(InvalidTokenNoteTooBigError),
526
527 #[error(transparent)]
528 ContractHasNoTokensError(ContractHasNoTokensError),
529
530 #[error(transparent)]
531 GroupPositionDoesNotExistError(GroupPositionDoesNotExistError),
532
533 #[error(transparent)]
534 InvalidActionIdError(InvalidActionIdError),
535
536 #[error(transparent)]
537 DestinationIdentityForTokenMintingNotSetError(DestinationIdentityForTokenMintingNotSetError),
538
539 #[error(transparent)]
540 ChoosingTokenMintRecipientNotAllowedError(ChoosingTokenMintRecipientNotAllowedError),
541
542 #[error(transparent)]
543 GroupActionNotAllowedOnTransitionError(GroupActionNotAllowedOnTransitionError),
544
545 #[error(transparent)]
546 GroupExceedsMaxMembersError(GroupExceedsMaxMembersError),
547
548 #[error(transparent)]
549 GroupMemberHasPowerOfZeroError(GroupMemberHasPowerOfZeroError),
550
551 #[error(transparent)]
552 GroupMemberHasPowerOverLimitError(GroupMemberHasPowerOverLimitError),
553
554 #[error(transparent)]
555 GroupTotalPowerLessThanRequiredError(GroupTotalPowerLessThanRequiredError),
556
557 #[error(transparent)]
558 GroupNonUnilateralMemberPowerHasLessThanRequiredPowerError(
559 GroupNonUnilateralMemberPowerHasLessThanRequiredPowerError,
560 ),
561
562 #[error(transparent)]
563 MissingDefaultLocalizationError(MissingDefaultLocalizationError),
564
565 #[error(transparent)]
566 UnknownGasFeesPaidByError(UnknownGasFeesPaidByError),
567
568 #[error(transparent)]
569 UnknownDocumentActionTokenEffectError(UnknownDocumentActionTokenEffectError),
570
571 #[error(transparent)]
572 TokenPaymentByBurningOnlyAllowedOnInternalTokenError(
573 TokenPaymentByBurningOnlyAllowedOnInternalTokenError,
574 ),
575
576 #[error(transparent)]
577 TooManyKeywordsError(TooManyKeywordsError),
578
579 #[error(transparent)]
580 DuplicateKeywordsError(DuplicateKeywordsError),
581
582 #[error(transparent)]
583 InvalidKeywordLengthError(InvalidKeywordLengthError),
584
585 #[error(transparent)]
586 InvalidDescriptionLengthError(InvalidDescriptionLengthError),
587
588 #[error(transparent)]
589 NewTokensDestinationIdentityOptionRequiredError(
590 NewTokensDestinationIdentityOptionRequiredError,
591 ),
592
593 #[error(transparent)]
594 InvalidKeywordCharacterError(InvalidKeywordCharacterError),
595
596 #[error(transparent)]
597 InvalidTokenNameCharacterError(InvalidTokenNameCharacterError),
598
599 #[error(transparent)]
600 DecimalsOverLimitError(DecimalsOverLimitError),
601
602 #[error(transparent)]
603 InvalidTokenNameLengthError(InvalidTokenNameLengthError),
604
605 #[error(transparent)]
606 InvalidTokenLanguageCodeError(InvalidTokenLanguageCodeError),
607
608 #[error(transparent)]
609 MainGroupIsNotDefinedError(MainGroupIsNotDefinedError),
610
611 #[error(transparent)]
612 GroupRequiredPowerIsInvalidError(GroupRequiredPowerIsInvalidError),
613
614 #[error(transparent)]
615 TokenNoteOnlyAllowedWhenProposerError(TokenNoteOnlyAllowedWhenProposerError),
616
617 #[error(transparent)]
618 InvalidTokenDistributionBlockIntervalTooShortError(
619 InvalidTokenDistributionBlockIntervalTooShortError,
620 ),
621
622 #[error(transparent)]
623 InvalidTokenDistributionTimeIntervalTooShortError(
624 InvalidTokenDistributionTimeIntervalTooShortError,
625 ),
626
627 #[error(transparent)]
628 InvalidTokenDistributionTimeIntervalNotMinuteAlignedError(
629 InvalidTokenDistributionTimeIntervalNotMinuteAlignedError,
630 ),
631
632 #[error(transparent)]
633 RedundantDocumentPaidForByTokenWithContractId(RedundantDocumentPaidForByTokenWithContractId),
634
635 #[error(transparent)]
636 GroupHasTooFewMembersError(GroupHasTooFewMembersError),
637
638 #[error(transparent)]
639 InvalidKeyPurposeForContractBoundsError(InvalidKeyPurposeForContractBoundsError),
640
641 #[error(transparent)]
642 StateTransitionNotActiveError(StateTransitionNotActiveError),
643
644 #[error(transparent)]
645 TransitionOverMaxInputsError(TransitionOverMaxInputsError),
646
647 #[error(transparent)]
648 TransitionOverMaxOutputsError(TransitionOverMaxOutputsError),
649
650 #[error(transparent)]
651 InputWitnessCountMismatchError(InputWitnessCountMismatchError),
652
653 #[error(transparent)]
654 TransitionNoInputsError(TransitionNoInputsError),
655
656 #[error(transparent)]
657 TransitionNoOutputsError(TransitionNoOutputsError),
658
659 #[error(transparent)]
660 InvalidRemainderOutputCountError(InvalidRemainderOutputCountError),
661
662 #[error(transparent)]
663 FeeStrategyEmptyError(FeeStrategyEmptyError),
664
665 #[error(transparent)]
666 FeeStrategyDuplicateError(FeeStrategyDuplicateError),
667
668 #[error(transparent)]
669 FeeStrategyIndexOutOfBoundsError(FeeStrategyIndexOutOfBoundsError),
670
671 #[error(transparent)]
672 FeeStrategyTooManyStepsError(FeeStrategyTooManyStepsError),
673
674 #[error(transparent)]
675 InputBelowMinimumError(InputBelowMinimumError),
676
677 #[error(transparent)]
678 OutputBelowMinimumError(OutputBelowMinimumError),
679
680 #[error(transparent)]
681 InputOutputBalanceMismatchError(InputOutputBalanceMismatchError),
682
683 #[error(transparent)]
684 OutputsNotGreaterThanInputsError(OutputsNotGreaterThanInputsError),
685
686 #[error(transparent)]
687 WithdrawalBalanceMismatchError(WithdrawalBalanceMismatchError),
688
689 #[error(transparent)]
690 WithdrawalBelowMinAmountError(WithdrawalBelowMinAmountError),
691
692 #[error(transparent)]
693 InsufficientFundingAmountError(InsufficientFundingAmountError),
694
695 #[error(transparent)]
696 InputsNotLessThanOutputsError(InputsNotLessThanOutputsError),
697
698 #[error(transparent)]
699 OutputAddressAlsoInputError(OutputAddressAlsoInputError),
700
701 #[error(transparent)]
702 ShieldedNoActionsError(ShieldedNoActionsError),
703
704 #[error(transparent)]
705 ShieldedTooManyActionsError(ShieldedTooManyActionsError),
706
707 #[error(transparent)]
708 ShieldedEmptyProofError(ShieldedEmptyProofError),
709
710 #[error(transparent)]
711 ShieldedZeroAnchorError(ShieldedZeroAnchorError),
712
713 #[error(transparent)]
714 ShieldedInvalidValueBalanceError(ShieldedInvalidValueBalanceError),
715
716 #[error(transparent)]
717 ShieldedEncryptedNoteSizeMismatchError(ShieldedEncryptedNoteSizeMismatchError),
718
719 #[error(transparent)]
720 IdentityAssetLockTransactionTooManyInputsError(IdentityAssetLockTransactionTooManyInputsError),
721
722 #[error(transparent)]
727 ShieldedImplicitFeeCapExceededError(ShieldedImplicitFeeCapExceededError),
728
729 #[error(transparent)]
730 ShieldedInvalidDenominationError(ShieldedInvalidDenominationError),
731
732 #[error(transparent)]
733 TokenPricingScheduleEmptyError(TokenPricingScheduleEmptyError),
734
735 #[error(transparent)]
736 DataContractInvalidRequiredFieldsUpdateError(DataContractInvalidRequiredFieldsUpdateError),
737
738 #[error(transparent)]
740 ContractGroupMembershipsOverLimitError(ContractGroupMembershipsOverLimitError),
741
742 #[error(transparent)]
743 DuplicateContractGroupMembershipError(DuplicateContractGroupMembershipError),
744
745 #[error(transparent)]
746 RedundantContractGroupMembershipError(RedundantContractGroupMembershipError),
747
748 #[error(transparent)]
749 ContractGroupMemberNotInContractError(ContractGroupMemberNotInContractError),
750
751 #[error(transparent)]
752 InvalidContractGroupAdminsError(InvalidContractGroupAdminsError),
753
754 #[error(transparent)]
755 InvalidContractGroupNameLengthError(InvalidContractGroupNameLengthError),
756
757 #[error(transparent)]
758 InvalidContractGroupDescriptionLengthError(InvalidContractGroupDescriptionLengthError),
759
760 #[error(transparent)]
762 ContractGroupBoundKeyNotAllowedInShieldedIdentityCreationError(
763 ContractGroupBoundKeyNotAllowedInShieldedIdentityCreationError,
764 ),
765
766 #[error(transparent)]
768 IdentityPublicKeyLimitsNotAllowedError(IdentityPublicKeyLimitsNotAllowedError),
769
770 #[error(transparent)]
771 InvalidIdentityPublicKeyBudgetError(InvalidIdentityPublicKeyBudgetError),
772
773 #[error(transparent)]
774 IdentityPublicKeyLimitsNotAllowedInShieldedIdentityCreationError(
775 IdentityPublicKeyLimitsNotAllowedInShieldedIdentityCreationError,
776 ),
777
778 #[error(transparent)]
780 IdentityKeyLimitsUpdateEmptyError(IdentityKeyLimitsUpdateEmptyError),
781
782 #[error(transparent)]
784 InvalidTokenOncePerIdentityDistributionAmountError(
785 InvalidTokenOncePerIdentityDistributionAmountError,
786 ),
787
788 #[error(transparent)]
790 PreProgrammedDistributionAmountOverLimitError(PreProgrammedDistributionAmountOverLimitError),
791
792 #[error(transparent)]
794 InvalidContractModerationConfigError(InvalidContractModerationConfigError),
795
796 #[error(transparent)]
797 ContractModerationSelfTargetError(ContractModerationSelfTargetError),
798
799 #[error(transparent)]
800 ContractModerationReasonTooLongError(ContractModerationReasonTooLongError),
801
802 #[error(transparent)]
804 DocumentActionFeesWithoutModerationError(DocumentActionFeesWithoutModerationError),
805
806 #[error(transparent)]
808 InvalidContractModerationReasonDocumentsError(InvalidContractModerationReasonDocumentsError),
809
810 #[error(transparent)]
811 DocumentPropertyNotDistinctError(DocumentPropertyNotDistinctError),
812
813 #[error(transparent)]
815 InvalidEncryptedPropertyShapeError(InvalidEncryptedPropertyShapeError),
816
817 #[error(transparent)]
819 ModerationCharterMalformedFieldError(ModerationCharterMalformedFieldError),
820
821 #[error(transparent)]
822 ModerationCharterRewardSplitNotOneHundredError(ModerationCharterRewardSplitNotOneHundredError),
823
824 #[error(transparent)]
826 DocumentPropertyMaxBytesExceededError(DocumentPropertyMaxBytesExceededError),
827
828 #[error(transparent)]
830 DocumentPropertyConstraintViolatedError(DocumentPropertyConstraintViolatedError),
831
832 #[error(transparent)]
836 InvalidTokenDistributionEpochIntervalTooShortError(
837 InvalidTokenDistributionEpochIntervalTooShortError,
838 ),
839
840 #[error(transparent)]
843 DocumentPropertyNotGeneratedError(DocumentPropertyNotGeneratedError),
844
845 #[error(transparent)]
847 InvalidContractModerationDocumentFieldsError(InvalidContractModerationDocumentFieldsError),
848
849 #[error(transparent)]
852 DocumentReferencePreimageInvalidError(DocumentReferencePreimageInvalidError),
853
854 #[error(transparent)]
856 TokenShieldedPoolIncompatibleRulesError(TokenShieldedPoolIncompatibleRulesError),
857}
858
859impl From<BasicError> for ConsensusError {
860 fn from(error: BasicError) -> Self {
861 Self::BasicError(error)
862 }
863}
864
865#[cfg(test)]
866mod tests {
867 use super::*;
868 use crate::consensus::basic::document::PropertyConstraintViolation;
869 use platform_value::Identifier;
870
871 fn discriminant_of(error: BasicError) -> u32 {
876 let bytes = bincode::encode_to_vec(error, bincode::config::standard())
877 .expect("expected to encode the basic error");
878 let (discriminant, _): (u32, usize) =
879 bincode::decode_from_slice(&bytes, bincode::config::standard())
880 .expect("expected to decode the discriminant");
881 discriminant
882 }
883
884 #[test]
885 fn basic_error_tail_discriminants_are_frozen() {
886 assert_eq!(
888 discriminant_of(BasicError::IdentityKeyLimitsUpdateEmptyError(
889 IdentityKeyLimitsUpdateEmptyError::new(1)
890 )),
891 185
892 );
893 assert_eq!(
895 discriminant_of(
896 BasicError::InvalidTokenOncePerIdentityDistributionAmountError(
897 InvalidTokenOncePerIdentityDistributionAmountError::new(0, 1)
898 )
899 ),
900 186
901 );
902 assert_eq!(
904 discriminant_of(BasicError::PreProgrammedDistributionAmountOverLimitError(
905 PreProgrammedDistributionAmountOverLimitError::new(0, 100)
906 )),
907 187
908 );
909 assert_eq!(
911 discriminant_of(BasicError::InvalidContractModerationConfigError(
912 InvalidContractModerationConfigError::new("reason".to_string())
913 )),
914 188
915 );
916 assert_eq!(
917 discriminant_of(BasicError::ContractModerationSelfTargetError(
918 ContractModerationSelfTargetError::new(Identifier::from([1; 32]))
919 )),
920 189
921 );
922 assert_eq!(
923 discriminant_of(BasicError::ContractModerationReasonTooLongError(
924 ContractModerationReasonTooLongError::new(1025, 1024)
925 )),
926 190
927 );
928 assert_eq!(
930 discriminant_of(BasicError::DocumentActionFeesWithoutModerationError(
931 DocumentActionFeesWithoutModerationError::new("post".to_string())
932 )),
933 191
934 );
935 assert_eq!(
937 discriminant_of(BasicError::InvalidContractModerationReasonDocumentsError(
938 InvalidContractModerationReasonDocumentsError::new("x".to_string())
939 )),
940 192
941 );
942 assert_eq!(
945 discriminant_of(BasicError::DocumentPropertyNotDistinctError(
946 DocumentPropertyNotDistinctError::new(
947 "post".to_string(),
948 "delegateId".to_string(),
949 "$ownerId".to_string(),
950 )
951 )),
952 193
953 );
954 assert_eq!(
956 discriminant_of(BasicError::InvalidEncryptedPropertyShapeError(
957 InvalidEncryptedPropertyShapeError::new(
958 "encryptedMessage".to_string(),
959 "ecdh-secp256k1-aes256-cbc".to_string(),
960 47,
961 32,
962 16
963 )
964 )),
965 194
966 );
967 assert_eq!(
969 discriminant_of(BasicError::ModerationCharterMalformedFieldError(
970 ModerationCharterMalformedFieldError::new(
971 "rewardSplit".to_string(),
972 "reason".to_string()
973 )
974 )),
975 195
976 );
977 assert_eq!(
978 discriminant_of(BasicError::ModerationCharterRewardSplitNotOneHundredError(
979 ModerationCharterRewardSplitNotOneHundredError::new(10, 40, 40)
980 )),
981 196
982 );
983 assert_eq!(
985 discriminant_of(BasicError::DocumentPropertyMaxBytesExceededError(
986 DocumentPropertyMaxBytesExceededError::new("description".to_string(), 4097, 4096)
987 )),
988 197
989 );
990 assert_eq!(
992 discriminant_of(BasicError::DocumentPropertyConstraintViolatedError(
993 DocumentPropertyConstraintViolatedError::new(
994 "order".to_string(),
995 "depositCoversOrder".to_string(),
996 PropertyConstraintViolation::NotMet,
997 )
998 )),
999 198
1000 );
1001 assert_eq!(
1003 discriminant_of(
1004 BasicError::InvalidTokenDistributionEpochIntervalTooShortError(
1005 InvalidTokenDistributionEpochIntervalTooShortError::new(0)
1006 )
1007 ),
1008 199
1009 );
1010 assert_eq!(
1013 discriminant_of(BasicError::DocumentPropertyNotGeneratedError(
1014 DocumentPropertyNotGeneratedError::new(
1015 "domain".to_string(),
1016 "normalizedLabel".to_string(),
1017 "sys.stringTransformations.homographSafeASCII".to_string(),
1018 vec!["label".to_string()],
1019 )
1020 )),
1021 200
1022 );
1023 assert_eq!(
1025 discriminant_of(BasicError::InvalidContractModerationDocumentFieldsError(
1026 InvalidContractModerationDocumentFieldsError::new("no field".to_string())
1027 )),
1028 201
1029 );
1030 assert_eq!(
1033 discriminant_of(BasicError::DocumentReferencePreimageInvalidError(
1034 DocumentReferencePreimageInvalidError::new(
1035 "domain".to_string(),
1036 "$creatorId".to_string(),
1037 "normalizedLabel".to_string(),
1038 "reason".to_string(),
1039 )
1040 )),
1041 202
1042 );
1043 assert_eq!(
1046 discriminant_of(BasicError::TokenShieldedPoolIncompatibleRulesError(
1047 TokenShieldedPoolIncompatibleRulesError::new(0, "freezeRules".to_string())
1048 )),
1049 203
1050 );
1051 }
1052
1053 #[test]
1057 fn should_keep_the_discriminants_shipped_in_4_1() {
1058 assert_eq!(
1059 discriminant_of(BasicError::RedundantDocumentPaidForByTokenWithContractId(
1060 RedundantDocumentPaidForByTokenWithContractId::new(Identifier::from([1; 32]))
1061 )),
1062 140
1063 );
1064 assert_eq!(
1066 discriminant_of(BasicError::TokenPricingScheduleEmptyError(
1067 TokenPricingScheduleEmptyError::new(Identifier::from([1; 32]))
1068 )),
1069 172
1070 );
1071 }
1072}