@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,55 +1,47 @@
|
|
|
1
|
-
const lodashClone = require('lodash/cloneDeep');
|
|
2
|
-
|
|
3
|
-
const jsonPatch = require('fast-json-patch');
|
|
4
|
-
const jsonSchemaDiffValidator = require('json-schema-diff-validator');
|
|
5
|
-
|
|
6
|
-
const { getRE2Class } = require('@dashevo/wasm-re2');
|
|
7
|
-
|
|
8
|
-
const createAjv = require('@dashevo/dpp/lib/ajv/createAjv');
|
|
9
|
-
|
|
10
|
-
const JsonSchemaValidator = require('@dashevo/dpp/lib/validation/JsonSchemaValidator');
|
|
11
|
-
|
|
12
1
|
const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
|
|
13
|
-
|
|
14
2
|
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
15
|
-
|
|
16
|
-
const validateDataContractUpdateTransitionBasicFactory = require('@dashevo/dpp/lib/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory');
|
|
17
|
-
|
|
18
|
-
const DataContractUpdateTransition = require('@dashevo/dpp/lib/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition');
|
|
19
|
-
|
|
20
3
|
const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
4
|
+
const { expectJsonSchemaError, expectValidationError } = require('../../../../../../../lib/test/expect/expectError');
|
|
21
5
|
|
|
22
|
-
const {
|
|
23
|
-
expectValidationError,
|
|
24
|
-
expectJsonSchemaError,
|
|
25
|
-
} = require('@dashevo/dpp/lib/test/expect/expectError');
|
|
26
|
-
|
|
27
|
-
const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
|
|
28
|
-
|
|
29
|
-
const SomeConsensusError = require('@dashevo/dpp/lib/test/mocks/SomeConsensusError');
|
|
30
|
-
const DataContractImmutablePropertiesUpdateError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/DataContractImmutablePropertiesUpdateError');
|
|
31
|
-
const IncompatibleDataContractSchemaError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/IncompatibleDataContractSchemaError');
|
|
32
|
-
const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
|
|
6
|
+
const { default: loadWasmDpp } = require('../../../../../../../dist');
|
|
33
7
|
|
|
34
8
|
describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
35
|
-
let
|
|
9
|
+
let DataContractUpdateTransition;
|
|
36
10
|
let validateDataContractUpdateTransitionBasic;
|
|
11
|
+
let ValidationResult;
|
|
12
|
+
let StateTransitionExecutionContext;
|
|
13
|
+
let ProtocolVersionParsingError;
|
|
14
|
+
let DataContractValidator;
|
|
15
|
+
let DataContractFactory;
|
|
16
|
+
let DataContractImmutablePropertiesUpdateError;
|
|
17
|
+
let IncompatibleDataContractSchemaError;
|
|
18
|
+
|
|
19
|
+
let validateStateTransition;
|
|
37
20
|
let stateTransition;
|
|
38
21
|
let rawStateTransition;
|
|
39
22
|
let dataContract;
|
|
40
23
|
let rawDataContract;
|
|
41
|
-
let validateProtocolVersionMock;
|
|
42
|
-
let validateIndicesAreNotChangedMock;
|
|
43
24
|
let stateRepositoryMock;
|
|
44
25
|
let executionContext;
|
|
45
26
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
27
|
+
before(async () => {
|
|
28
|
+
({
|
|
29
|
+
DataContractUpdateTransition,
|
|
30
|
+
validateDataContractUpdateTransitionBasic,
|
|
31
|
+
ValidationResult,
|
|
32
|
+
StateTransitionExecutionContext,
|
|
33
|
+
ProtocolVersionParsingError,
|
|
34
|
+
DataContractValidator,
|
|
35
|
+
DataContractFactory,
|
|
36
|
+
DataContractImmutablePropertiesUpdateError,
|
|
37
|
+
IncompatibleDataContractSchemaError,
|
|
38
|
+
} = await loadWasmDpp());
|
|
39
|
+
});
|
|
49
40
|
|
|
41
|
+
beforeEach(async function beforeEach() {
|
|
50
42
|
dataContract = getDataContractFixture();
|
|
51
43
|
|
|
52
|
-
rawDataContract =
|
|
44
|
+
rawDataContract = dataContract.toObject();
|
|
53
45
|
rawDataContract.version += 1;
|
|
54
46
|
|
|
55
47
|
stateTransition = new DataContractUpdateTransition({
|
|
@@ -61,41 +53,30 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
61
53
|
|
|
62
54
|
rawStateTransition = stateTransition.toObject();
|
|
63
55
|
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
const jsonSchemaValidator = new JsonSchemaValidator(ajv);
|
|
68
|
-
|
|
69
|
-
validateIndicesAreNotChangedMock = this.sinonSandbox.stub();
|
|
70
|
-
validateIndicesAreNotChangedMock.returns(new ValidationResult());
|
|
71
|
-
|
|
56
|
+
const validator = new DataContractValidator();
|
|
57
|
+
const dataContractFactory = new DataContractFactory(protocolVersion.latestVersion, validator);
|
|
58
|
+
const wasmDataContract = await dataContractFactory.createFromBuffer(dataContract.toBuffer());
|
|
72
59
|
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
73
|
-
stateRepositoryMock.fetchDataContract.resolves(
|
|
60
|
+
stateRepositoryMock.fetchDataContract.resolves(wasmDataContract);
|
|
74
61
|
|
|
75
62
|
executionContext = new StateTransitionExecutionContext();
|
|
76
63
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
validateProtocolVersionMock,
|
|
82
|
-
stateRepositoryMock,
|
|
83
|
-
jsonSchemaDiffValidator,
|
|
84
|
-
validateIndicesAreNotChangedMock,
|
|
85
|
-
jsonPatch,
|
|
86
|
-
);
|
|
64
|
+
validateStateTransition = (
|
|
65
|
+
st,
|
|
66
|
+
ctx,
|
|
67
|
+
) => validateDataContractUpdateTransitionBasic(stateRepositoryMock, st, ctx);
|
|
87
68
|
});
|
|
88
69
|
|
|
89
70
|
describe('protocolVersion', () => {
|
|
90
71
|
it('should be present', async () => {
|
|
91
72
|
delete rawStateTransition.protocolVersion;
|
|
92
73
|
|
|
93
|
-
const result = await
|
|
74
|
+
const result = await validateStateTransition(
|
|
94
75
|
rawStateTransition,
|
|
95
76
|
executionContext,
|
|
96
77
|
);
|
|
97
78
|
|
|
98
|
-
expectJsonSchemaError(result);
|
|
79
|
+
await expectJsonSchemaError(result);
|
|
99
80
|
|
|
100
81
|
const [error] = result.getErrors();
|
|
101
82
|
|
|
@@ -107,12 +88,12 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
107
88
|
it('should be an integer', async () => {
|
|
108
89
|
rawStateTransition.protocolVersion = '1';
|
|
109
90
|
|
|
110
|
-
const result = await
|
|
91
|
+
const result = await validateStateTransition(
|
|
111
92
|
rawStateTransition,
|
|
112
93
|
executionContext,
|
|
113
94
|
);
|
|
114
95
|
|
|
115
|
-
expectJsonSchemaError(result);
|
|
96
|
+
await expectJsonSchemaError(result);
|
|
116
97
|
|
|
117
98
|
const [error] = result.getErrors();
|
|
118
99
|
|
|
@@ -123,27 +104,16 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
123
104
|
it('should be valid', async () => {
|
|
124
105
|
rawStateTransition.protocolVersion = -1;
|
|
125
106
|
|
|
126
|
-
const
|
|
127
|
-
const protocolVersionResult = new ValidationResult([
|
|
128
|
-
protocolVersionError,
|
|
129
|
-
]);
|
|
130
|
-
|
|
131
|
-
validateProtocolVersionMock.returns(protocolVersionResult);
|
|
132
|
-
|
|
133
|
-
const result = await validateDataContractUpdateTransitionBasic(
|
|
107
|
+
const result = await validateStateTransition(
|
|
134
108
|
rawStateTransition,
|
|
135
109
|
executionContext,
|
|
136
110
|
);
|
|
137
111
|
|
|
138
|
-
expectValidationError(result
|
|
112
|
+
await expectValidationError(result);
|
|
139
113
|
|
|
140
114
|
const [error] = result.getErrors();
|
|
141
115
|
|
|
142
|
-
expect(error).to.
|
|
143
|
-
|
|
144
|
-
expect(validateProtocolVersionMock).to.be.calledOnceWith(
|
|
145
|
-
rawStateTransition.protocolVersion,
|
|
146
|
-
);
|
|
116
|
+
expect(error).to.be.an.instanceOf(ProtocolVersionParsingError);
|
|
147
117
|
});
|
|
148
118
|
});
|
|
149
119
|
|
|
@@ -151,12 +121,12 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
151
121
|
it('should be present', async () => {
|
|
152
122
|
delete rawStateTransition.type;
|
|
153
123
|
|
|
154
|
-
const result = await
|
|
124
|
+
const result = await validateStateTransition(
|
|
155
125
|
rawStateTransition,
|
|
156
126
|
executionContext,
|
|
157
127
|
);
|
|
158
128
|
|
|
159
|
-
expectJsonSchemaError(result);
|
|
129
|
+
await expectJsonSchemaError(result);
|
|
160
130
|
|
|
161
131
|
const [error] = result.getErrors();
|
|
162
132
|
|
|
@@ -168,12 +138,12 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
168
138
|
it('should be equal to 4', async () => {
|
|
169
139
|
rawStateTransition.type = 666;
|
|
170
140
|
|
|
171
|
-
const result = await
|
|
141
|
+
const result = await validateStateTransition(
|
|
172
142
|
rawStateTransition,
|
|
173
143
|
executionContext,
|
|
174
144
|
);
|
|
175
145
|
|
|
176
|
-
expectJsonSchemaError(result);
|
|
146
|
+
await expectJsonSchemaError(result);
|
|
177
147
|
|
|
178
148
|
const [error] = result.getErrors();
|
|
179
149
|
|
|
@@ -187,12 +157,12 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
187
157
|
it('should be present', async () => {
|
|
188
158
|
delete rawStateTransition.dataContract;
|
|
189
159
|
|
|
190
|
-
const result = await
|
|
160
|
+
const result = await validateStateTransition(
|
|
191
161
|
rawStateTransition,
|
|
192
162
|
executionContext,
|
|
193
163
|
);
|
|
194
164
|
|
|
195
|
-
expectJsonSchemaError(result);
|
|
165
|
+
await expectJsonSchemaError(result);
|
|
196
166
|
|
|
197
167
|
const [error] = result.getErrors();
|
|
198
168
|
|
|
@@ -202,21 +172,18 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
202
172
|
});
|
|
203
173
|
|
|
204
174
|
it('should have no existing documents removed', async () => {
|
|
205
|
-
rawStateTransition.dataContract.documents.indexedDocument
|
|
175
|
+
delete rawStateTransition.dataContract.documents.indexedDocument;
|
|
206
176
|
|
|
207
|
-
const result = await
|
|
177
|
+
const result = await validateStateTransition(
|
|
208
178
|
rawStateTransition,
|
|
209
179
|
executionContext,
|
|
210
180
|
);
|
|
211
181
|
|
|
212
|
-
expectValidationError(result);
|
|
213
|
-
|
|
214
182
|
const [error] = result.getErrors();
|
|
215
183
|
|
|
216
184
|
expect(error).to.be.an.instanceOf(IncompatibleDataContractSchemaError);
|
|
217
185
|
expect(error.getOperation()).to.equal('remove');
|
|
218
186
|
expect(error.getFieldPath()).to.equal('/additionalProperties');
|
|
219
|
-
expect(error.getNewSchema()).to.equal(undefined);
|
|
220
187
|
});
|
|
221
188
|
|
|
222
189
|
it('should allow making backward compatible changes to existing documents', async () => {
|
|
@@ -225,7 +192,7 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
225
192
|
minimum: 0,
|
|
226
193
|
};
|
|
227
194
|
|
|
228
|
-
const result = await
|
|
195
|
+
const result = await validateStateTransition(
|
|
229
196
|
rawStateTransition,
|
|
230
197
|
executionContext,
|
|
231
198
|
);
|
|
@@ -234,9 +201,9 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
234
201
|
});
|
|
235
202
|
|
|
236
203
|
it('should have existing documents schema backward compatible', async () => {
|
|
237
|
-
rawStateTransition.dataContract.documents.indexedDocument.properties.firstName =
|
|
204
|
+
rawStateTransition.dataContract.documents.indexedDocument.properties.firstName.maxLength = 4;
|
|
238
205
|
|
|
239
|
-
const result = await
|
|
206
|
+
const result = await validateStateTransition(
|
|
240
207
|
rawStateTransition,
|
|
241
208
|
executionContext,
|
|
242
209
|
);
|
|
@@ -246,8 +213,8 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
246
213
|
const [error] = result.getErrors();
|
|
247
214
|
|
|
248
215
|
expect(error).to.be.an.instanceOf(IncompatibleDataContractSchemaError);
|
|
249
|
-
expect(error.getOperation()).to.equal('
|
|
250
|
-
expect(error.getFieldPath()).to.equal('/properties/firstName');
|
|
216
|
+
expect(error.getOperation()).to.equal('replace');
|
|
217
|
+
expect(error.getFieldPath()).to.equal('/properties/firstName/maxLength');
|
|
251
218
|
});
|
|
252
219
|
|
|
253
220
|
it('should allow defining new document', async () => {
|
|
@@ -259,9 +226,10 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
259
226
|
},
|
|
260
227
|
},
|
|
261
228
|
required: ['name'],
|
|
229
|
+
additionalProperties: false,
|
|
262
230
|
};
|
|
263
231
|
|
|
264
|
-
const result = await
|
|
232
|
+
const result = await validateStateTransition(
|
|
265
233
|
rawStateTransition,
|
|
266
234
|
executionContext,
|
|
267
235
|
);
|
|
@@ -270,9 +238,9 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
270
238
|
});
|
|
271
239
|
|
|
272
240
|
it('should not have root immutable properties changed', async () => {
|
|
273
|
-
rawStateTransition.dataContract
|
|
241
|
+
rawStateTransition.dataContract.ownerId = Buffer.alloc(32);
|
|
274
242
|
|
|
275
|
-
const result = await
|
|
243
|
+
const result = await validateStateTransition(
|
|
276
244
|
rawStateTransition,
|
|
277
245
|
executionContext,
|
|
278
246
|
);
|
|
@@ -282,30 +250,17 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
282
250
|
const [error] = result.getErrors();
|
|
283
251
|
|
|
284
252
|
expect(error).to.be.an.instanceOf(DataContractImmutablePropertiesUpdateError);
|
|
285
|
-
expect(error.getOperation()).to.equal('
|
|
286
|
-
expect(error.getFieldPath()).to.equal('
|
|
253
|
+
expect(error.getOperation()).to.equal('replace');
|
|
254
|
+
expect(error.getFieldPath()).to.equal('/ownerId');
|
|
287
255
|
});
|
|
288
256
|
|
|
289
257
|
it('should be valid', async () => {
|
|
290
|
-
const
|
|
291
|
-
const dataContractResult = new ValidationResult([
|
|
292
|
-
dataContractError,
|
|
293
|
-
]);
|
|
294
|
-
|
|
295
|
-
validateDataContractMock.returns(dataContractResult);
|
|
296
|
-
|
|
297
|
-
const result = await validateDataContractUpdateTransitionBasic(
|
|
258
|
+
const result = await validateStateTransition(
|
|
298
259
|
rawStateTransition,
|
|
299
260
|
executionContext,
|
|
300
261
|
);
|
|
301
262
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
const [error] = result.getErrors();
|
|
305
|
-
|
|
306
|
-
expect(error).to.equal(dataContractError);
|
|
307
|
-
|
|
308
|
-
expect(validateDataContractMock.getCall(0).args).to.have.deep.members([rawDataContract]);
|
|
263
|
+
expect(result.isValid()).to.be.true();
|
|
309
264
|
});
|
|
310
265
|
});
|
|
311
266
|
|
|
@@ -313,12 +268,12 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
313
268
|
it('should be present', async () => {
|
|
314
269
|
delete rawStateTransition.signature;
|
|
315
270
|
|
|
316
|
-
const result = await
|
|
271
|
+
const result = await validateStateTransition(
|
|
317
272
|
rawStateTransition,
|
|
318
273
|
executionContext,
|
|
319
274
|
);
|
|
320
275
|
|
|
321
|
-
expectJsonSchemaError(result);
|
|
276
|
+
await expectJsonSchemaError(result);
|
|
322
277
|
|
|
323
278
|
const [error] = result.getErrors();
|
|
324
279
|
|
|
@@ -330,53 +285,52 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
330
285
|
it('should be a byte array', async () => {
|
|
331
286
|
rawStateTransition.signature = new Array(65).fill('string');
|
|
332
287
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
expect(byteArrayError.getKeyword()).to.equal('byteArray');
|
|
288
|
+
// Because of how byte arrays are handled in input arguments it fails way before
|
|
289
|
+
// any of validators come in so we cannot provide any sensible error, but at
|
|
290
|
+
// least it won't work with bad type, so we're safe.
|
|
291
|
+
try {
|
|
292
|
+
await validateStateTransition(
|
|
293
|
+
rawStateTransition,
|
|
294
|
+
executionContext,
|
|
295
|
+
);
|
|
296
|
+
expect.fail('wasm bindgen error must be thrown');
|
|
297
|
+
} catch (error) {
|
|
298
|
+
expect(error.message).to.contain('invalid type: string "string", expected u8');
|
|
299
|
+
}
|
|
346
300
|
});
|
|
347
301
|
|
|
348
302
|
it('should be not less than 65 bytes', async () => {
|
|
349
303
|
rawStateTransition.signature = Buffer.alloc(64);
|
|
350
304
|
|
|
351
|
-
const result = await
|
|
305
|
+
const result = await validateStateTransition(
|
|
352
306
|
rawStateTransition,
|
|
353
307
|
executionContext,
|
|
354
308
|
);
|
|
355
309
|
|
|
356
|
-
expectJsonSchemaError(result);
|
|
310
|
+
await expectJsonSchemaError(result);
|
|
357
311
|
|
|
358
312
|
const [error] = result.getErrors();
|
|
359
313
|
|
|
360
314
|
expect(error.getInstancePath()).to.equal('/signature');
|
|
361
315
|
expect(error.getKeyword()).to.equal('minItems');
|
|
362
|
-
expect(error.getParams().
|
|
316
|
+
expect(error.getParams().minItems).to.equal(65);
|
|
363
317
|
});
|
|
364
318
|
|
|
365
319
|
it('should be not longer than 96 bytes', async () => {
|
|
366
320
|
rawStateTransition.signature = Buffer.alloc(97);
|
|
367
321
|
|
|
368
|
-
const result = await
|
|
322
|
+
const result = await validateStateTransition(
|
|
369
323
|
rawStateTransition,
|
|
370
324
|
executionContext,
|
|
371
325
|
);
|
|
372
326
|
|
|
373
|
-
expectJsonSchemaError(result);
|
|
327
|
+
await expectJsonSchemaError(result);
|
|
374
328
|
|
|
375
329
|
const [error] = result.getErrors();
|
|
376
330
|
|
|
377
331
|
expect(error.getInstancePath()).to.equal('/signature');
|
|
378
332
|
expect(error.getKeyword()).to.equal('maxItems');
|
|
379
|
-
expect(error.getParams().
|
|
333
|
+
expect(error.getParams().maxItems).to.equal(96);
|
|
380
334
|
});
|
|
381
335
|
});
|
|
382
336
|
|
|
@@ -384,46 +338,44 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
384
338
|
it('should be an integer', async () => {
|
|
385
339
|
rawStateTransition.signaturePublicKeyId = 1.4;
|
|
386
340
|
|
|
387
|
-
const result = await
|
|
341
|
+
const result = await validateStateTransition(
|
|
388
342
|
rawStateTransition,
|
|
389
343
|
executionContext,
|
|
390
344
|
);
|
|
391
345
|
|
|
392
|
-
expectJsonSchemaError(result, 1);
|
|
346
|
+
await expectJsonSchemaError(result, 1);
|
|
393
347
|
|
|
394
348
|
const [error] = result.getErrors();
|
|
395
349
|
|
|
396
|
-
expect(error.
|
|
350
|
+
expect(error.getInstancePath()).to.equal('/signaturePublicKeyId');
|
|
397
351
|
expect(error.getKeyword()).to.equal('type');
|
|
398
352
|
});
|
|
399
353
|
|
|
400
354
|
it('should not be < 0', async () => {
|
|
401
355
|
rawStateTransition.signaturePublicKeyId = -1;
|
|
402
356
|
|
|
403
|
-
const result = await
|
|
357
|
+
const result = await validateStateTransition(
|
|
404
358
|
rawStateTransition,
|
|
405
359
|
executionContext,
|
|
406
360
|
);
|
|
407
361
|
|
|
408
|
-
expectJsonSchemaError(result, 1);
|
|
362
|
+
await expectJsonSchemaError(result, 1);
|
|
409
363
|
|
|
410
364
|
const [error] = result.getErrors();
|
|
411
365
|
|
|
412
|
-
expect(error.
|
|
366
|
+
expect(error.getInstancePath()).to.equal('/signaturePublicKeyId');
|
|
413
367
|
expect(error.getKeyword()).to.equal('minimum');
|
|
414
368
|
});
|
|
415
369
|
});
|
|
416
370
|
|
|
417
371
|
it('should return valid result', async () => {
|
|
418
|
-
const result = await
|
|
372
|
+
const result = await validateStateTransition(
|
|
419
373
|
rawStateTransition,
|
|
420
374
|
executionContext,
|
|
421
375
|
);
|
|
422
376
|
|
|
423
377
|
expect(result).to.be.an.instanceOf(ValidationResult);
|
|
424
378
|
expect(result.isValid()).to.be.true();
|
|
425
|
-
|
|
426
|
-
expect(validateDataContractMock).to.be.calledOnceWith(rawDataContract);
|
|
427
379
|
});
|
|
428
380
|
|
|
429
381
|
it('should not check Data Contract on dry run', async () => {
|
|
@@ -431,7 +383,7 @@ describe('validateDataContractUpdateTransitionBasicFactory', () => {
|
|
|
431
383
|
|
|
432
384
|
executionContext.enableDryRun();
|
|
433
385
|
|
|
434
|
-
const result = await
|
|
386
|
+
const result = await validateStateTransition(
|
|
435
387
|
rawStateTransition,
|
|
436
388
|
executionContext,
|
|
437
389
|
);
|