@dashevo/wasm-dpp 0.24.0-dev.12 → 0.24.0-dev.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mocharc.yml +1 -1
- package/Cargo.toml +5 -2
- package/README.md +5 -1
- package/dist/index.js +1 -1
- package/dist/index.js.LICENSE.txt +9 -0
- package/dist/wasm/wasm_dpp.d.ts +3397 -1237
- package/karma.conf.js +5 -0
- package/lib/identifier/patchIdentifier.ts +5 -4
- package/lib/index.ts +1 -1
- package/lib/test/bootstrap.js +5 -0
- package/lib/test/fixtures/getDataContractFixture.js +267 -0
- package/lib/test/fixtures/getDocumentsFixture.js +43 -0
- package/lib/test/mocks/createStateRepositoryMock.js +64 -0
- package/lib/test/mocks/getBlsAdapterMock.js +51 -0
- package/package.json +11 -8
- package/src/bls_adapter.rs +17 -1
- package/src/buffer.rs +3 -0
- package/src/dash_platform_protocol.rs +107 -10
- package/src/data_contract/data_contract.rs +59 -10
- package/src/data_contract/data_contract_facade.rs +128 -0
- package/src/data_contract/errors/invalid_data_contract.rs +16 -16
- package/src/data_contract/errors/invalid_document_type.rs +8 -8
- package/src/data_contract/errors/mod.rs +10 -16
- package/src/data_contract/index.rs +56 -1
- package/src/data_contract/mod.rs +4 -0
- package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +1 -1
- package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +41 -10
- package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +35 -4
- package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +1 -1
- package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +20 -7
- package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +47 -11
- package/src/data_contract_factory/data_contract_factory.rs +19 -17
- package/src/data_trigger/data_trigger_execution_context.rs +95 -0
- package/src/data_trigger/data_trigger_execution_result.rs +48 -0
- package/src/data_trigger/execute_data_triggers_factory.rs +60 -0
- package/src/data_trigger/get_data_triggers_factory.rs +65 -0
- package/src/data_trigger/mod.rs +121 -0
- package/src/document/document_facade.rs +125 -0
- package/src/document/errors/invalid_document_error.rs +10 -9
- package/src/document/errors/invalid_initial_revision_error.rs +1 -1
- package/src/document/errors/mismatch_owners_ids_error.rs +14 -4
- package/src/document/errors/mod.rs +17 -13
- package/src/document/errors/no_documents_supplied_error.rs +4 -4
- package/src/document/factory.rs +257 -0
- package/src/document/fetch_and_validate_data_contract.rs +77 -0
- package/src/document/generate_document_id.rs +17 -0
- package/src/document/mod.rs +311 -37
- package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +22 -0
- package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +253 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +60 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +263 -0
- package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +302 -3
- package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_id.rs +40 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_indices.rs +50 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/mod.rs +8 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs +34 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/validate_partial_compound_indices.rs +39 -0
- package/src/document/state_transition/document_batch_transition/validation/mod.rs +2 -0
- package/src/document/state_transition/document_batch_transition/validation/state/fetch_documents.rs +43 -0
- package/src/document/state_transition/document_batch_transition/validation/state/mod.rs +3 -0
- package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_batch_transitions_state.rs +27 -0
- package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_uniqueness_by_indices.rs +47 -0
- package/src/document/validator.rs +52 -0
- package/src/errors/compatible_protocol_version_is_not_defined_error.rs +24 -0
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -1
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -1
- package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +2 -2
- package/src/errors/consensus/basic/document/invalid_document_type_error.rs +15 -1
- package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +16 -2
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -1
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -1
- package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
- package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
- package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +2 -2
- package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +29 -0
- package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +4 -3
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -1
- package/src/errors/consensus/basic/identity/missing_public_key_error.rs +4 -3
- package/src/errors/consensus/basic/identity/mod.rs +2 -0
- package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -1
- package/src/errors/consensus/basic/json_schema_error.rs +8 -2
- package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -1
- package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +9 -9
- package/src/errors/consensus/state/document/invalid_document_revision_error.rs +4 -4
- package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +35 -0
- package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +34 -0
- package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +10 -7
- package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +2 -3
- package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +7 -3
- package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +2 -3
- package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +7 -4
- package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +2 -1
- package/src/errors/consensus/state/identity/mod.rs +4 -0
- package/src/errors/consensus_error.rs +218 -268
- package/src/errors/data_contract_not_present_error.rs +23 -0
- package/src/errors/dpp_error.rs +17 -0
- package/src/errors/from.rs +22 -0
- package/src/errors/js_conversion.rs +52 -5
- package/src/errors/mod.rs +6 -0
- package/src/errors/protocol_error.rs +14 -3
- package/src/identifier/errors.rs +30 -0
- package/src/identifier/mod.rs +95 -11
- package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
- package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
- package/src/identity/errors/invalid_identity_error.rs +32 -0
- package/src/identity/errors/mod.rs +9 -0
- package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
- package/src/identity/factory_utils.rs +87 -0
- package/src/identity/identity_facade.rs +194 -20
- package/src/identity/identity_factory.rs +209 -0
- package/src/identity/identity_public_key/mod.rs +51 -40
- package/src/identity/mod.rs +31 -17
- package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
- package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
- package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
- package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
- package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
- package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
- package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
- package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +337 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
- package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
- package/src/identity/state_transition/identity_create_transition/to_object.rs +45 -0
- package/src/identity/state_transition/identity_public_key_transitions.rs +207 -0
- package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +278 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
- package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
- package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
- package/src/identity/state_transition/identity_update_transition/apply_identity_update_transition.rs +24 -0
- package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +55 -0
- package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +448 -0
- package/src/identity/state_transition/identity_update_transition/identity_update_transition_basic_validator.rs +94 -0
- package/src/identity/state_transition/identity_update_transition/identity_update_transition_state_validator.rs +53 -0
- package/src/identity/state_transition/identity_update_transition/mod.rs +9 -0
- package/src/identity/state_transition/identity_update_transition/to_object.rs +66 -0
- package/src/identity/state_transition/mod.rs +12 -0
- package/src/identity/state_transition/validate_public_key_signatures.rs +61 -0
- package/src/identity/validation/identity_validator.rs +50 -0
- package/src/identity/validation/mod.rs +2 -0
- package/src/identity/validation/public_keys_validator.rs +14 -13
- package/src/identity_public_key/public_keys_validator.rs +44 -0
- package/src/lib.rs +6 -0
- package/src/lodash.rs +7 -0
- package/src/metadata.rs +54 -10
- package/src/state_repository.rs +598 -101
- package/src/state_transition/conversion.rs +104 -0
- package/src/state_transition/errors/invalid_state_transition_error.rs +32 -0
- package/src/state_transition/errors/mod.rs +1 -0
- package/src/state_transition/mod.rs +46 -0
- package/src/state_transition/state_transition_facade.rs +263 -0
- package/src/state_transition/state_transition_factory.rs +216 -0
- package/src/state_transition/validation/mod.rs +1 -0
- package/src/state_transition/validation/validate_state_transition_key_signature.rs +62 -0
- package/src/utils.rs +210 -8
- package/src/validation/json_schema_validator.rs +41 -0
- package/src/validation/mod.rs +2 -0
- package/src/validation/validation_result.rs +29 -5
- package/src/version/mod.rs +2 -0
- package/src/version/protocol_version.rs +103 -0
- package/test/integration/dataContract/DataContractFacade.spec.js +46 -30
- package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +45 -127
- package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +91 -139
- package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +577 -503
- package/test/integration/document/Document.spec.js +55 -29
- package/test/integration/document/DocumentFacade.spec.js +51 -64
- package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +38 -16
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +341 -396
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +116 -218
- package/test/integration/document/validation/validateDocumentFactory.spec.js +123 -171
- package/test/integration/identity/IdentityFacade.spec.js +52 -27
- package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +185 -164
- package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +84 -114
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +120 -137
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +106 -91
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +50 -16
- package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +78 -86
- package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +74 -30
- package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -147
- package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +65 -77
- package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +60 -23
- package/test/integration/identity/validation/validateIdentityFactory.spec.js +46 -114
- package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +9 -3
- package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +12 -8
- package/test/integration/stateTransition/StateTransitionFacade.spec.js +95 -233
- package/test/integration/stateTransition/calculateStateTransitionFeeFromOperationsFactory.spec.js +53 -0
- package/test/unit/Identifier.spec.js +36 -36
- package/test/unit/Metadata.spec.js +17 -3
- package/test/unit/dataContract/DataContract.spec.js +9 -4
- package/test/unit/dataContract/createDataContract.spec.js +0 -1
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +1 -1
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +2 -2
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +3 -3
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +1 -1
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +25 -31
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +3 -3
- package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +2 -0
- package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
- package/test/unit/document/Document.spec.js +147 -155
- package/test/unit/document/DocumentFactory.spec.js +153 -153
- package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +59 -14
- package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +131 -62
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +144 -56
- package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +38 -8
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +11 -7
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +29 -18
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +38 -29
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +53 -91
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +357 -493
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +133 -72
- package/test/unit/identity/Identity.spec.js +26 -9
- package/test/unit/identity/IdentityFactory.spec.js +81 -89
- package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +73 -30
- package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +38 -38
- package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +34 -25
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +85 -50
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +44 -22
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +58 -103
- package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
- package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
- package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
- package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
- package/test/unit/stateTransition/StateTransitionFactory.spec.js +49 -101
- package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +23 -25
- package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +73 -46
- package/test/unit/version/validateProtocolVersionFactory.spec.js +45 -27
- package/wasm/package.json +5 -0
- package/wasm/wasm_dpp.d.ts +3397 -1237
- package/wasm/wasm_dpp.js +7158 -1384
- package/wasm/wasm_dpp_bg.js +1 -1
- package/wasm/wasm_dpp_bg.wasm +0 -0
- package/wasm/wasm_dpp_bg.wasm.d.ts +777 -389
- package/webpack.config.js +9 -0
- package/src/document/state_transition/document_batch_transition/document_transition/document_update_transition.rs +0 -22
- package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +0 -135
- package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +0 -54
|
@@ -1,50 +1,77 @@
|
|
|
1
|
+
const identitySchema = require('@dashevo/dpp/schema/identity/identity.json');
|
|
1
2
|
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
2
|
-
const validateIdentityUpdateTransitionStateFactory = require('@dashevo/dpp/lib/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory');
|
|
3
3
|
const getIdentityUpdateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityUpdateTransitionFixture');
|
|
4
|
-
const IdentityPublicKey = require('@dashevo/dpp/lib/identity/IdentityPublicKey');
|
|
5
4
|
const getIdentityFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityFixture');
|
|
6
5
|
const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
|
|
7
|
-
const { expectValidationError } = require('@dashevo/dpp/lib/test/expect/expectError');
|
|
8
|
-
const InvalidIdentityRevisionError = require('@dashevo/dpp/lib/errors/consensus/state/identity/InvalidIdentityRevisionError');
|
|
9
|
-
const IdentityPublicKeyIsReadOnlyError = require('@dashevo/dpp/lib/errors/consensus/state/identity/IdentityPublicKeyIsReadOnlyError');
|
|
10
|
-
const IdentityPublicKeyDisabledAtWindowViolationError = require('@dashevo/dpp/lib/errors/consensus/state/identity/IdentityPublicKeyDisabledAtWindowViolationError');
|
|
11
|
-
const InvalidIdentityPublicKeyIdError = require('@dashevo/dpp/lib/errors/consensus/state/identity/InvalidIdentityPublicKeyIdError');
|
|
12
6
|
const SomeConsensusError = require('@dashevo/dpp/lib/test/mocks/SomeConsensusError');
|
|
13
|
-
|
|
14
|
-
const
|
|
7
|
+
|
|
8
|
+
const { default: loadWasmDpp } = require('../../../../../../../dist');
|
|
9
|
+
const { expectValidationError } = require('../../../../../../../lib/test/expect/expectError');
|
|
10
|
+
const generateRandomIdentifierAsync = require('../../../../../../../lib/test/utils/generateRandomIdentifierAsync');
|
|
11
|
+
const getBlsAdapterMock = require('../../../../../../../lib/test/mocks/getBlsAdapterMock');
|
|
15
12
|
|
|
16
13
|
describe('validateIdentityUpdateTransitionStateFactory', () => {
|
|
17
14
|
let validateIdentityUpdateTransitionState;
|
|
18
15
|
let stateRepositoryMock;
|
|
19
16
|
let stateTransition;
|
|
20
17
|
let identity;
|
|
18
|
+
let rawIdentity;
|
|
21
19
|
let validatePublicKeysMock;
|
|
22
|
-
let fakeTime;
|
|
23
20
|
let blockTime;
|
|
24
|
-
let validateRequiredPurposeAndSecurityLevelMock;
|
|
25
21
|
let executionContext;
|
|
26
22
|
|
|
23
|
+
let Identity;
|
|
24
|
+
let IdentityPublicKey;
|
|
25
|
+
let IdentityUpdateTransition;
|
|
26
|
+
let InvalidIdentityRevisionError;
|
|
27
|
+
let IdentityPublicKeyIsReadOnlyError;
|
|
28
|
+
let IdentityPublicKeyIsDisabledError;
|
|
29
|
+
let InvalidIdentityPublicKeyIdError;
|
|
30
|
+
let MissingMasterPublicKeyError;
|
|
31
|
+
let IdentityPublicKeyDisabledAtWindowViolationError;
|
|
32
|
+
let MaxIdentityPublicKeyLimitReachedError;
|
|
33
|
+
let StateTransitionExecutionContext;
|
|
34
|
+
let IdentityUpdateTransitionStateValidator;
|
|
35
|
+
|
|
36
|
+
before(async () => {
|
|
37
|
+
({
|
|
38
|
+
Identity,
|
|
39
|
+
IdentityPublicKey,
|
|
40
|
+
IdentityUpdateTransition,
|
|
41
|
+
InvalidIdentityRevisionError,
|
|
42
|
+
IdentityPublicKeyIsReadOnlyError,
|
|
43
|
+
IdentityPublicKeyIsDisabledError,
|
|
44
|
+
InvalidIdentityPublicKeyIdError,
|
|
45
|
+
IdentityPublicKeyDisabledAtWindowViolationError,
|
|
46
|
+
MaxIdentityPublicKeyLimitReachedError,
|
|
47
|
+
StateTransitionExecutionContext,
|
|
48
|
+
IdentityUpdateTransitionStateValidator,
|
|
49
|
+
MissingMasterPublicKeyError,
|
|
50
|
+
} = await loadWasmDpp());
|
|
51
|
+
});
|
|
52
|
+
|
|
27
53
|
beforeEach(async function beforeEach() {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
.returns(new ValidationResult());
|
|
54
|
+
rawIdentity = getIdentityFixture().toObject();
|
|
55
|
+
// Patch identity id to be acceptable by wasm-dpp
|
|
56
|
+
rawIdentity.id = await generateRandomIdentifierAsync();
|
|
57
|
+
identity = new Identity(rawIdentity);
|
|
33
58
|
|
|
34
59
|
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
35
60
|
stateRepositoryMock.fetchIdentity.resolves(identity);
|
|
36
61
|
|
|
37
62
|
blockTime = Date.now();
|
|
63
|
+
const blsAdapter = await getBlsAdapterMock();
|
|
38
64
|
|
|
65
|
+
stateRepositoryMock.fetchLatestPlatformBlockTime = this.sinonSandbox.stub();
|
|
39
66
|
stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTime);
|
|
40
67
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
68
|
+
const validator = new IdentityUpdateTransitionStateValidator(stateRepositoryMock, blsAdapter);
|
|
69
|
+
validateIdentityUpdateTransitionState = (st) => validator.validate(st);
|
|
70
|
+
|
|
71
|
+
stateTransition = new IdentityUpdateTransition(
|
|
72
|
+
getIdentityUpdateTransitionFixture().toObject(),
|
|
45
73
|
);
|
|
46
74
|
|
|
47
|
-
stateTransition = getIdentityUpdateTransitionFixture();
|
|
48
75
|
stateTransition.setRevision(identity.getRevision() + 1);
|
|
49
76
|
stateTransition.setPublicKeyIdsToDisable(undefined);
|
|
50
77
|
stateTransition.setPublicKeysDisabledAt(undefined);
|
|
@@ -55,46 +82,47 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
|
|
|
55
82
|
|
|
56
83
|
const privateKey = '9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2';
|
|
57
84
|
|
|
58
|
-
await stateTransition.signByPrivateKey(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
afterEach(() => {
|
|
64
|
-
fakeTime.reset();
|
|
85
|
+
await stateTransition.signByPrivateKey(
|
|
86
|
+
Buffer.from(privateKey, 'hex'), IdentityPublicKey.TYPES.ECDSA_SECP256K1,
|
|
87
|
+
);
|
|
65
88
|
});
|
|
66
89
|
|
|
67
90
|
it('should return InvalidIdentityRevisionError if new revision is not incremented by 1', async () => {
|
|
68
|
-
stateTransition.setRevision(
|
|
91
|
+
stateTransition.setRevision(rawIdentity.revision + 2);
|
|
69
92
|
|
|
70
93
|
const result = await validateIdentityUpdateTransitionState(stateTransition);
|
|
71
94
|
|
|
72
|
-
expectValidationError(result, InvalidIdentityRevisionError);
|
|
95
|
+
await expectValidationError(result, InvalidIdentityRevisionError);
|
|
73
96
|
|
|
74
97
|
const [error] = result.getErrors();
|
|
75
|
-
expect(error.getIdentityId()).to.deep.equal(stateTransition.getIdentityId());
|
|
76
|
-
expect(error.getCurrentRevision()).to.equal(
|
|
98
|
+
expect(error.getIdentityId()).to.deep.equal(stateTransition.getIdentityId().toBuffer());
|
|
99
|
+
expect(error.getCurrentRevision()).to.equal(rawIdentity.revision);
|
|
77
100
|
});
|
|
78
101
|
|
|
79
102
|
it('should return IdentityPublicKeyIsReadOnlyError if disabling public key is readOnly', async () => {
|
|
80
|
-
identity.
|
|
103
|
+
const keys = identity.getPublicKeys();
|
|
104
|
+
keys[0].setReadOnly(true);
|
|
105
|
+
identity.setPublicKeys(keys);
|
|
106
|
+
|
|
81
107
|
stateTransition.setPublicKeyIdsToDisable([0]);
|
|
82
108
|
|
|
83
109
|
const result = await validateIdentityUpdateTransitionState(stateTransition);
|
|
84
110
|
|
|
85
|
-
expectValidationError(result, IdentityPublicKeyIsReadOnlyError);
|
|
111
|
+
await expectValidationError(result, IdentityPublicKeyIsReadOnlyError);
|
|
86
112
|
|
|
87
113
|
const [error] = result.getErrors();
|
|
88
114
|
expect(error.getPublicKeyIndex()).to.equal(0);
|
|
89
115
|
});
|
|
90
116
|
|
|
91
117
|
it('should return IdentityPublicKeyIsDisabledError if disabling public key is already disabled', async () => {
|
|
92
|
-
identity.
|
|
118
|
+
const keys = identity.getPublicKeys();
|
|
119
|
+
keys[0].setDisabledAt(new Date().getTime());
|
|
120
|
+
identity.setPublicKeys(keys);
|
|
93
121
|
stateTransition.setPublicKeyIdsToDisable([0]);
|
|
94
122
|
|
|
95
123
|
const result = await validateIdentityUpdateTransitionState(stateTransition);
|
|
96
124
|
|
|
97
|
-
expectValidationError(result, IdentityPublicKeyIsDisabledError);
|
|
125
|
+
await expectValidationError(result, IdentityPublicKeyIsDisabledError);
|
|
98
126
|
|
|
99
127
|
const [error] = result.getErrors();
|
|
100
128
|
expect(error.getPublicKeyIndex()).to.equal(0);
|
|
@@ -103,7 +131,8 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
|
|
|
103
131
|
it('should return invalid result if disabledAt has violated time window', async () => {
|
|
104
132
|
stateTransition.setPublicKeyIdsToDisable([1]);
|
|
105
133
|
// blockTime - 10 minutes
|
|
106
|
-
|
|
134
|
+
const disabledAt = new Date(blockTime - 1000 * 60 * 60 * 10);
|
|
135
|
+
stateTransition.setPublicKeysDisabledAt(disabledAt);
|
|
107
136
|
|
|
108
137
|
const timeWindowStart = new Date(blockTime);
|
|
109
138
|
timeWindowStart.setMinutes(
|
|
@@ -117,12 +146,12 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
|
|
|
117
146
|
|
|
118
147
|
const result = await validateIdentityUpdateTransitionState(stateTransition);
|
|
119
148
|
|
|
120
|
-
expectValidationError(result, IdentityPublicKeyDisabledAtWindowViolationError);
|
|
149
|
+
await expectValidationError(result, IdentityPublicKeyDisabledAtWindowViolationError);
|
|
121
150
|
|
|
122
151
|
const [error] = result.getErrors();
|
|
123
|
-
expect(error.getDisabledAt()).to.deep.equal(
|
|
124
|
-
expect(error.getTimeWindowStart()).to.
|
|
125
|
-
expect(error.getTimeWindowEnd()).to.
|
|
152
|
+
expect(error.getDisabledAt()).to.deep.equal(disabledAt);
|
|
153
|
+
expect(error.getTimeWindowStart()).to.be.instanceOf(Date);
|
|
154
|
+
expect(error.getTimeWindowEnd()).to.be.instanceOf(Date);
|
|
126
155
|
});
|
|
127
156
|
|
|
128
157
|
it('should throw InvalidIdentityPublicKeyIdError if identity does not contain public key with disabling ID', async () => {
|
|
@@ -131,13 +160,13 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
|
|
|
131
160
|
|
|
132
161
|
const result = await validateIdentityUpdateTransitionState(stateTransition);
|
|
133
162
|
|
|
134
|
-
expectValidationError(result, InvalidIdentityPublicKeyIdError);
|
|
163
|
+
await expectValidationError(result, InvalidIdentityPublicKeyIdError);
|
|
135
164
|
|
|
136
165
|
const [error] = result.getErrors();
|
|
137
166
|
expect(error.getId()).to.equal(3);
|
|
138
167
|
});
|
|
139
168
|
|
|
140
|
-
it('should pass when disabling public key', async ()
|
|
169
|
+
it('should pass when disabling public key', async function () {
|
|
141
170
|
stateTransition.setPublicKeyIdsToDisable([1]);
|
|
142
171
|
stateTransition.setPublicKeysDisabledAt(new Date());
|
|
143
172
|
stateTransition.setPublicKeysToAdd(undefined);
|
|
@@ -146,17 +175,18 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
|
|
|
146
175
|
|
|
147
176
|
expect(result.isValid()).to.be.true();
|
|
148
177
|
|
|
178
|
+
const { match } = this.sinonSandbox;
|
|
149
179
|
expect(stateRepositoryMock.fetchIdentity)
|
|
150
180
|
.to.be.calledOnceWithExactly(
|
|
151
|
-
stateTransition.getIdentityId(),
|
|
152
|
-
|
|
181
|
+
match((val) => val.toBuffer().equals(stateTransition.getIdentityId().toBuffer())),
|
|
182
|
+
match.instanceOf(StateTransitionExecutionContext),
|
|
153
183
|
);
|
|
154
184
|
|
|
155
185
|
expect(stateRepositoryMock.fetchLatestPlatformBlockTime)
|
|
156
186
|
.to.be.calledOnce();
|
|
157
187
|
});
|
|
158
188
|
|
|
159
|
-
it('should pass when adding public key', async ()
|
|
189
|
+
it('should pass when adding public key', async function () {
|
|
160
190
|
stateTransition.setPublicKeyIdsToDisable(undefined);
|
|
161
191
|
stateTransition.setPublicKeysDisabledAt(undefined);
|
|
162
192
|
|
|
@@ -164,23 +194,18 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
|
|
|
164
194
|
|
|
165
195
|
expect(result.isValid()).to.be.true();
|
|
166
196
|
|
|
197
|
+
const { match } = this.sinonSandbox;
|
|
167
198
|
expect(stateRepositoryMock.fetchIdentity)
|
|
168
199
|
.to.be.calledOnceWithExactly(
|
|
169
|
-
stateTransition.getIdentityId(),
|
|
170
|
-
|
|
200
|
+
match((val) => val.toBuffer().equals(stateTransition.getIdentityId().toBuffer())),
|
|
201
|
+
match.instanceOf(StateTransitionExecutionContext),
|
|
171
202
|
);
|
|
172
203
|
|
|
173
204
|
expect(stateRepositoryMock.fetchLatestPlatformBlockTime)
|
|
174
205
|
.to.not.be.called();
|
|
175
|
-
|
|
176
|
-
expect(validatePublicKeysMock).to.be.calledOnceWithExactly(
|
|
177
|
-
[...identity.getPublicKeys(), ...stateTransition.getPublicKeysToAdd()].map(
|
|
178
|
-
(pk) => pk.toObject(),
|
|
179
|
-
),
|
|
180
|
-
);
|
|
181
206
|
});
|
|
182
207
|
|
|
183
|
-
it('should pass when both adding and disabling public keys', async ()
|
|
208
|
+
it('should pass when both adding and disabling public keys', async function () {
|
|
184
209
|
stateTransition.setPublicKeyIdsToDisable([1]);
|
|
185
210
|
stateTransition.setPublicKeysDisabledAt(new Date());
|
|
186
211
|
|
|
@@ -188,10 +213,11 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
|
|
|
188
213
|
|
|
189
214
|
expect(result.isValid()).to.be.true();
|
|
190
215
|
|
|
216
|
+
const { match } = this.sinonSandbox;
|
|
191
217
|
expect(stateRepositoryMock.fetchIdentity)
|
|
192
218
|
.to.be.calledOnceWithExactly(
|
|
193
|
-
stateTransition.getIdentityId(),
|
|
194
|
-
|
|
219
|
+
match((val) => val.toBuffer().equals(stateTransition.getIdentityId().toBuffer())),
|
|
220
|
+
match.instanceOf(StateTransitionExecutionContext),
|
|
195
221
|
);
|
|
196
222
|
|
|
197
223
|
expect(stateRepositoryMock.fetchLatestPlatformBlockTime)
|
|
@@ -199,43 +225,36 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
|
|
|
199
225
|
});
|
|
200
226
|
|
|
201
227
|
it('should validate purpose and security level', async () => {
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
stateTransition.setPublicKeysDisabledAt(now);
|
|
206
|
-
|
|
207
|
-
const publicKeysError = new SomeConsensusError('test');
|
|
228
|
+
const identityKeys = identity.getPublicKeys();
|
|
229
|
+
identityKeys.forEach((key) => key.setSecurityLevel(1));
|
|
230
|
+
identity.setPublicKeys(identityKeys);
|
|
208
231
|
|
|
209
|
-
|
|
210
|
-
|
|
232
|
+
const keysToAdd = stateTransition.getPublicKeysToAdd();
|
|
233
|
+
keysToAdd.forEach((key) => key.setSecurityLevel(1));
|
|
234
|
+
stateTransition.setPublicKeysToAdd(keysToAdd);
|
|
211
235
|
|
|
212
236
|
const result = await validateIdentityUpdateTransitionState(stateTransition);
|
|
213
237
|
|
|
214
|
-
expectValidationError(result,
|
|
215
|
-
|
|
216
|
-
expect(validateRequiredPurposeAndSecurityLevelMock).to.be.calledOnceWithExactly([
|
|
217
|
-
identity.getPublicKeys()[0].toObject(),
|
|
218
|
-
{ ...identity.getPublicKeys()[1].toObject(), disabledAt: now.getTime() },
|
|
219
|
-
stateTransition.getPublicKeysToAdd()[0].toObject(),
|
|
220
|
-
]);
|
|
238
|
+
await expectValidationError(result, MissingMasterPublicKeyError);
|
|
221
239
|
});
|
|
222
240
|
|
|
223
241
|
it('should validate public keys to add', async () => {
|
|
224
|
-
|
|
242
|
+
// Reach max allowed public keys to fail validation
|
|
243
|
+
const { maxItems } = identitySchema.properties.publicKeys;
|
|
225
244
|
|
|
226
|
-
|
|
245
|
+
const firstKey = identity.getPublicKeys()[0].toObject();
|
|
246
|
+
const keys = Array.from({ length: maxItems + 1 })
|
|
247
|
+
.map((_, index) => new IdentityPublicKey({ ...firstKey, id: index }));
|
|
248
|
+
identity.setPublicKeys(keys);
|
|
227
249
|
|
|
228
250
|
const result = await validateIdentityUpdateTransitionState(stateTransition);
|
|
229
251
|
|
|
230
|
-
expectValidationError(result,
|
|
231
|
-
|
|
232
|
-
expect(validatePublicKeysMock).to.be.calledOnceWithExactly(
|
|
233
|
-
[...identity.getPublicKeys(), ...stateTransition.getPublicKeysToAdd()]
|
|
234
|
-
.map((pk) => pk.toObject()),
|
|
235
|
-
);
|
|
252
|
+
await expectValidationError(result, MaxIdentityPublicKeyLimitReachedError);
|
|
236
253
|
});
|
|
237
254
|
|
|
238
|
-
|
|
255
|
+
// TODO: remove?
|
|
256
|
+
// Skipped, because two tests above are seem to be enough
|
|
257
|
+
it.skip('should validate resulting identity public keys', async () => {
|
|
239
258
|
const publicKeysError = new SomeConsensusError('test');
|
|
240
259
|
|
|
241
260
|
validatePublicKeysMock.returns(new ValidationResult([publicKeysError]));
|
|
@@ -253,29 +272,25 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
|
|
|
253
272
|
);
|
|
254
273
|
});
|
|
255
274
|
|
|
256
|
-
it('should return valid result on dry run', async ()
|
|
275
|
+
it('should return valid result on dry run', async function () {
|
|
257
276
|
stateTransition.setPublicKeyIdsToDisable([3]);
|
|
258
277
|
stateTransition.setPublicKeysDisabledAt(new Date());
|
|
259
278
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
validateRequiredPurposeAndSecurityLevelMock.onCall(0)
|
|
263
|
-
.returns(new ValidationResult([publicKeysError]));
|
|
279
|
+
// Make code that executes after dry run check to fail
|
|
280
|
+
stateRepositoryMock.fetchLatestPlatformBlockTime.resolves({});
|
|
264
281
|
|
|
265
282
|
stateTransition.getExecutionContext().enableDryRun();
|
|
266
|
-
|
|
267
283
|
const result = await validateIdentityUpdateTransitionState(stateTransition);
|
|
268
284
|
|
|
269
285
|
stateTransition.getExecutionContext().disableDryRun();
|
|
270
286
|
|
|
271
287
|
expect(result.isValid()).to.be.true();
|
|
272
288
|
|
|
273
|
-
|
|
274
|
-
expect(validateRequiredPurposeAndSecurityLevelMock).to.not.be.called();
|
|
289
|
+
const { match } = this.sinonSandbox;
|
|
275
290
|
expect(stateRepositoryMock.fetchIdentity)
|
|
276
291
|
.to.be.calledOnceWithExactly(
|
|
277
|
-
stateTransition.getIdentityId(),
|
|
278
|
-
|
|
292
|
+
match((val) => val.toBuffer().equals(stateTransition.getIdentityId().toBuffer())),
|
|
293
|
+
match.instanceOf(StateTransitionExecutionContext),
|
|
279
294
|
);
|
|
280
295
|
|
|
281
296
|
expect(stateRepositoryMock.fetchLatestPlatformBlockTime)
|
|
@@ -1,26 +1,60 @@
|
|
|
1
|
-
const validatePublicKeys = require(
|
|
2
|
-
'@dashevo/dpp/lib/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState',
|
|
3
|
-
);
|
|
4
|
-
const { expectValidationError } = require('@dashevo/dpp/lib/test/expect/expectError');
|
|
5
|
-
const DuplicatedIdentityPublicKeyIdError = require('@dashevo/dpp/lib/errors/consensus/state/identity/DuplicatedIdentityPublicKeyIdError');
|
|
6
|
-
const DuplicatedIdentityPublicKeyError = require('@dashevo/dpp/lib/errors/consensus/state/identity/DuplicatedIdentityPublicKeyError');
|
|
7
1
|
const identitySchema = require('@dashevo/dpp/schema/identity/identity.json');
|
|
8
|
-
const
|
|
9
|
-
|
|
2
|
+
const { expectValidationError } = require('../../../../../../../lib/test/expect/expectError');
|
|
3
|
+
|
|
4
|
+
const { default: loadWasmDpp } = require('../../../../../../../dist');
|
|
10
5
|
|
|
11
6
|
describe('validatePublicKeysState', () => {
|
|
7
|
+
let IdentityUpdatePublicKeysValidator;
|
|
8
|
+
let DuplicatedIdentityPublicKeyIdStateError;
|
|
9
|
+
let DuplicatedIdentityPublicKeyStateError;
|
|
10
|
+
let IdentityPublicKey;
|
|
11
|
+
let MaxIdentityPublicKeyLimitReachedError;
|
|
12
|
+
|
|
13
|
+
let validatePublicKeys;
|
|
12
14
|
let rawPublicKeys;
|
|
13
15
|
|
|
16
|
+
before(async () => {
|
|
17
|
+
({
|
|
18
|
+
IdentityPublicKey,
|
|
19
|
+
IdentityUpdatePublicKeysValidator,
|
|
20
|
+
DuplicatedIdentityPublicKeyStateError,
|
|
21
|
+
DuplicatedIdentityPublicKeyIdStateError,
|
|
22
|
+
MaxIdentityPublicKeyLimitReachedError,
|
|
23
|
+
} = await loadWasmDpp());
|
|
24
|
+
});
|
|
25
|
+
|
|
14
26
|
beforeEach(() => {
|
|
15
|
-
|
|
27
|
+
rawPublicKeys = [
|
|
28
|
+
{
|
|
29
|
+
id: 0,
|
|
30
|
+
type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
|
|
31
|
+
data: Buffer.from('AuryIuMtRrl/VviQuyLD1l4nmxi9ogPzC9LT7tdpo0di', 'base64'),
|
|
32
|
+
purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
|
|
33
|
+
securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
|
|
34
|
+
signature: Buffer.alloc(0),
|
|
35
|
+
readOnly: false,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 1,
|
|
39
|
+
type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
|
|
40
|
+
data: Buffer.from('A8AK95PYMVX5VQKzOhcVQRCUbc9pyg3RiL7jttEMDU+L', 'base64'),
|
|
41
|
+
purpose: IdentityPublicKey.PURPOSES.ENCRYPTION,
|
|
42
|
+
securityLevel: IdentityPublicKey.SECURITY_LEVELS.MEDIUM,
|
|
43
|
+
signature: Buffer.alloc(0),
|
|
44
|
+
readOnly: false,
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const validator = new IdentityUpdatePublicKeysValidator();
|
|
49
|
+
validatePublicKeys = (keys) => validator.validate(keys);
|
|
16
50
|
});
|
|
17
51
|
|
|
18
|
-
it('should return invalid result if there are duplicate key ids', () => {
|
|
52
|
+
it('should return invalid result if there are duplicate key ids', async () => {
|
|
19
53
|
rawPublicKeys[1].id = rawPublicKeys[0].id;
|
|
20
54
|
|
|
21
55
|
const result = validatePublicKeys(rawPublicKeys);
|
|
22
56
|
|
|
23
|
-
expectValidationError(result,
|
|
57
|
+
await expectValidationError(result, DuplicatedIdentityPublicKeyIdStateError);
|
|
24
58
|
|
|
25
59
|
const [error] = result.getErrors();
|
|
26
60
|
|
|
@@ -28,12 +62,12 @@ describe('validatePublicKeysState', () => {
|
|
|
28
62
|
expect(error.getDuplicatedIds()).to.deep.equal([rawPublicKeys[1].id]);
|
|
29
63
|
});
|
|
30
64
|
|
|
31
|
-
it('should return invalid result if there are duplicate keys', () => {
|
|
65
|
+
it('should return invalid result if there are duplicate keys', async () => {
|
|
32
66
|
rawPublicKeys[1].data = rawPublicKeys[0].data;
|
|
33
67
|
|
|
34
68
|
const result = validatePublicKeys(rawPublicKeys);
|
|
35
69
|
|
|
36
|
-
expectValidationError(result,
|
|
70
|
+
await expectValidationError(result, DuplicatedIdentityPublicKeyStateError);
|
|
37
71
|
|
|
38
72
|
const [error] = result.getErrors();
|
|
39
73
|
|
|
@@ -47,7 +81,7 @@ describe('validatePublicKeysState', () => {
|
|
|
47
81
|
expect(result.isValid()).to.be.true();
|
|
48
82
|
});
|
|
49
83
|
|
|
50
|
-
it('should return invalid result if number of public keys is bigger than 32', () => {
|
|
84
|
+
it('should return invalid result if number of public keys is bigger than 32', async () => {
|
|
51
85
|
const { maxItems } = identitySchema.properties.publicKeys;
|
|
52
86
|
const numToAdd = maxItems - rawPublicKeys.length;
|
|
53
87
|
|
|
@@ -57,10 +91,10 @@ describe('validatePublicKeysState', () => {
|
|
|
57
91
|
|
|
58
92
|
const result = validatePublicKeys(rawPublicKeys);
|
|
59
93
|
|
|
60
|
-
expectValidationError(result, MaxIdentityPublicKeyLimitReachedError);
|
|
94
|
+
await expectValidationError(result, MaxIdentityPublicKeyLimitReachedError);
|
|
61
95
|
|
|
62
96
|
const [error] = result.getErrors();
|
|
63
97
|
expect(error.getCode()).to.equal(4020);
|
|
64
|
-
expect(error.
|
|
98
|
+
expect(error.getMaxItems()).to.equal(maxItems);
|
|
65
99
|
});
|
|
66
100
|
});
|