@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,25 +1,29 @@
|
|
|
1
|
-
const findDuplicateDocuments = require('@dashevo/dpp/lib/document/stateTransition/DocumentsBatchTransition/validation/basic/findDuplicatesById');
|
|
2
|
-
|
|
3
1
|
const getDocumentTransitionsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentTransitionsFixture');
|
|
2
|
+
const { default: loadWasmDpp } = require('../../../../../../../dist');
|
|
3
|
+
|
|
4
|
+
let findDuplicatesById;
|
|
4
5
|
|
|
5
6
|
describe('findDuplicatesById', () => {
|
|
6
7
|
let rawDocumentTransitions;
|
|
7
8
|
|
|
8
|
-
beforeEach(() => {
|
|
9
|
+
beforeEach(async () => {
|
|
10
|
+
({
|
|
11
|
+
findDuplicatesById,
|
|
12
|
+
} = await loadWasmDpp());
|
|
9
13
|
rawDocumentTransitions = getDocumentTransitionsFixture().map((t) => t.toObject());
|
|
10
14
|
});
|
|
11
15
|
|
|
12
|
-
it('should return empty array if there are no duplicated Documents', () => {
|
|
13
|
-
const result =
|
|
16
|
+
it('should return empty array if there are no duplicated Documents - Rust', () => {
|
|
17
|
+
const result = findDuplicatesById(rawDocumentTransitions);
|
|
14
18
|
|
|
15
19
|
expect(result).to.be.an('array');
|
|
16
20
|
expect(result).to.have.lengthOf(0);
|
|
17
21
|
});
|
|
18
22
|
|
|
19
|
-
it('should return duplicated Documents', () => {
|
|
23
|
+
it('should return duplicated Documents - Rust', () => {
|
|
20
24
|
rawDocumentTransitions.push(rawDocumentTransitions[0]);
|
|
21
25
|
|
|
22
|
-
const result =
|
|
26
|
+
const result = findDuplicatesById(rawDocumentTransitions);
|
|
23
27
|
|
|
24
28
|
expect(result).to.be.an('array');
|
|
25
29
|
expect(result).to.have.lengthOf(2);
|
|
@@ -1,21 +1,28 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
const findDuplicateDocumentsByIndices = require('@dashevo/dpp/lib/document/stateTransition/DocumentsBatchTransition/validation/basic/findDuplicatesByIndices');
|
|
1
|
+
const DocumentJs = require('@dashevo/dpp/lib/document/Document');
|
|
4
2
|
|
|
5
3
|
const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
6
4
|
const getDocumentsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentsFixture');
|
|
7
5
|
const getDocumentTransitionsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentTransitionsFixture');
|
|
8
6
|
|
|
9
7
|
const { generate: generateEntropy } = require('@dashevo/dpp/lib/util/entropyGenerator');
|
|
8
|
+
const { default: loadWasmDpp } = require('../../../../../../../dist');
|
|
9
|
+
|
|
10
|
+
let DataContract;
|
|
11
|
+
let findDuplicatesByIndices;
|
|
10
12
|
|
|
11
13
|
describe('findDuplicatesByIndices', () => {
|
|
12
14
|
let documents;
|
|
15
|
+
let contractJs;
|
|
13
16
|
let contract;
|
|
14
17
|
let documentTransitions;
|
|
15
18
|
|
|
16
|
-
beforeEach(() => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
beforeEach(async () => {
|
|
20
|
+
({
|
|
21
|
+
DataContract,
|
|
22
|
+
findDuplicatesByIndices,
|
|
23
|
+
} = await loadWasmDpp());
|
|
24
|
+
contractJs = getDataContractFixture();
|
|
25
|
+
contractJs.setDocumentSchema('nonUniqueIndexDocument', {
|
|
19
26
|
indices: [
|
|
20
27
|
{
|
|
21
28
|
name: 'ownerIdLastName',
|
|
@@ -38,7 +45,7 @@ describe('findDuplicatesByIndices', () => {
|
|
|
38
45
|
additionalProperties: false,
|
|
39
46
|
});
|
|
40
47
|
|
|
41
|
-
|
|
48
|
+
contractJs.setDocumentSchema('singleDocument', {
|
|
42
49
|
indices: [
|
|
43
50
|
{
|
|
44
51
|
name: 'ownerIdLastName',
|
|
@@ -61,31 +68,33 @@ describe('findDuplicatesByIndices', () => {
|
|
|
61
68
|
additionalProperties: false,
|
|
62
69
|
});
|
|
63
70
|
|
|
64
|
-
|
|
71
|
+
contract = DataContract.fromBuffer(contractJs.toBuffer());
|
|
72
|
+
|
|
73
|
+
documents = getDocumentsFixture(contractJs);
|
|
65
74
|
documents.forEach((doc) => {
|
|
66
75
|
// eslint-disable-next-line no-param-reassign
|
|
67
|
-
doc.dataContract =
|
|
76
|
+
doc.dataContract = contractJs;
|
|
68
77
|
// eslint-disable-next-line no-param-reassign
|
|
69
|
-
doc.dataContractId =
|
|
78
|
+
doc.dataContractId = contractJs.getId();
|
|
70
79
|
});
|
|
71
80
|
|
|
72
81
|
const [, , , william] = documents;
|
|
73
82
|
|
|
74
|
-
let document = new
|
|
83
|
+
let document = new DocumentJs({
|
|
75
84
|
...william.toObject(),
|
|
76
85
|
$type: 'nonUniqueIndexDocument',
|
|
77
86
|
$entropy: generateEntropy(),
|
|
78
|
-
},
|
|
87
|
+
}, contractJs);
|
|
79
88
|
|
|
80
89
|
document.setEntropy(generateEntropy());
|
|
81
90
|
|
|
82
91
|
documents.push(document);
|
|
83
92
|
|
|
84
|
-
document = new
|
|
93
|
+
document = new DocumentJs({
|
|
85
94
|
...william.toObject(),
|
|
86
95
|
$type: 'singleDocument',
|
|
87
96
|
$entropy: generateEntropy(),
|
|
88
|
-
},
|
|
97
|
+
}, contractJs);
|
|
89
98
|
|
|
90
99
|
document.setEntropy(generateEntropy());
|
|
91
100
|
|
|
@@ -96,7 +105,7 @@ describe('findDuplicatesByIndices', () => {
|
|
|
96
105
|
}).map((t) => t.toObject());
|
|
97
106
|
});
|
|
98
107
|
|
|
99
|
-
it('should return duplicate documents if they are present', () => {
|
|
108
|
+
it('should return duplicate documents if they are present - Rust', () => {
|
|
100
109
|
const [, , , , leon] = documents;
|
|
101
110
|
|
|
102
111
|
leon.set('lastName', 'Birkin');
|
|
@@ -105,7 +114,9 @@ describe('findDuplicatesByIndices', () => {
|
|
|
105
114
|
create: documents,
|
|
106
115
|
}).map((t) => t.toObject());
|
|
107
116
|
|
|
108
|
-
const duplicates =
|
|
117
|
+
const duplicates = findDuplicatesByIndices(documentTransitions, contract);
|
|
118
|
+
|
|
119
|
+
expect(duplicates.length).to.equal(2);
|
|
109
120
|
expect(duplicates).to.have.deep.members(
|
|
110
121
|
[
|
|
111
122
|
documentTransitions[3],
|
|
@@ -114,8 +125,8 @@ describe('findDuplicatesByIndices', () => {
|
|
|
114
125
|
);
|
|
115
126
|
});
|
|
116
127
|
|
|
117
|
-
it('should return an empty array of there are no duplicates', () => {
|
|
118
|
-
const duplicates =
|
|
128
|
+
it('should return an empty array of there are no duplicates - Rust', () => {
|
|
129
|
+
const duplicates = findDuplicatesByIndices(documentTransitions, contract);
|
|
119
130
|
|
|
120
131
|
expect(duplicates.length).to.equal(0);
|
|
121
132
|
});
|
|
@@ -1,42 +1,51 @@
|
|
|
1
|
-
const validatePartialCompoundIndices = require('@dashevo/dpp/lib/document/stateTransition/DocumentsBatchTransition/validation/basic/validatePartialCompoundIndices');
|
|
2
|
-
const InconsistentCompoundIndexDataError = require('@dashevo/dpp/lib/errors/consensus/basic/document/InconsistentCompoundIndexDataError');
|
|
3
|
-
|
|
4
1
|
const getDocumentsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentsFixture');
|
|
5
2
|
const getContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
6
3
|
const getDocumentTransitionsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentTransitionsFixture');
|
|
7
4
|
|
|
8
|
-
const
|
|
9
|
-
|
|
5
|
+
const { default: loadWasmDpp } = require('../../../../../../../dist');
|
|
6
|
+
|
|
7
|
+
let DataContract;
|
|
8
|
+
let validatePartialCompoundIndices;
|
|
9
|
+
let InconsistentCompoundIndexDataError;
|
|
10
|
+
let ValidationResult;
|
|
10
11
|
|
|
11
12
|
describe('validatePartialCompoundIndices', () => {
|
|
12
|
-
let
|
|
13
|
+
let documentsJs;
|
|
13
14
|
let rawDocumentTransitions;
|
|
15
|
+
let dataContractJs;
|
|
14
16
|
let dataContract;
|
|
15
|
-
let ownerId;
|
|
16
17
|
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
beforeEach(async () => {
|
|
19
|
+
({
|
|
20
|
+
DataContract,
|
|
21
|
+
validatePartialCompoundIndices,
|
|
22
|
+
ValidationResult,
|
|
23
|
+
// Errors:
|
|
24
|
+
InconsistentCompoundIndexDataError,
|
|
25
|
+
} = await loadWasmDpp());
|
|
26
|
+
|
|
27
|
+
dataContractJs = getContractFixture();
|
|
28
|
+
dataContract = DataContract.fromBuffer(dataContractJs.toBuffer());
|
|
20
29
|
});
|
|
21
30
|
|
|
22
|
-
it('should return invalid result if compound index contains not all fields', () => {
|
|
23
|
-
const
|
|
24
|
-
|
|
31
|
+
it('should return invalid result if compound index contains not all fields - Rust', () => {
|
|
32
|
+
const documentJs = getDocumentsFixture(dataContractJs)[9];
|
|
33
|
+
documentJs.set('lastName', undefined);
|
|
25
34
|
|
|
26
|
-
|
|
35
|
+
documentsJs = [documentJs];
|
|
27
36
|
rawDocumentTransitions = getDocumentTransitionsFixture({
|
|
28
|
-
create:
|
|
37
|
+
create: documentsJs,
|
|
29
38
|
}).map((documentTransition) => documentTransition.toObject());
|
|
30
39
|
|
|
31
|
-
const result = validatePartialCompoundIndices(
|
|
40
|
+
const result = validatePartialCompoundIndices(rawDocumentTransitions, dataContract);
|
|
32
41
|
|
|
33
|
-
|
|
42
|
+
expect(result.isValid()).is.false();
|
|
34
43
|
|
|
35
44
|
const [error] = result.getErrors();
|
|
36
|
-
|
|
45
|
+
expect(error).is.instanceOf(InconsistentCompoundIndexDataError);
|
|
37
46
|
expect(error.getCode()).to.equal(1021);
|
|
38
47
|
|
|
39
|
-
const { optionalUniqueIndexedDocument } =
|
|
48
|
+
const { optionalUniqueIndexedDocument } = dataContractJs.getDocuments();
|
|
40
49
|
|
|
41
50
|
expect(error.getIndexedProperties()).to.deep.equal(
|
|
42
51
|
optionalUniqueIndexedDocument.indices[1].properties.map((i) => Object.keys(i)[0]),
|
|
@@ -45,29 +54,29 @@ describe('validatePartialCompoundIndices', () => {
|
|
|
45
54
|
expect(error.getDocumentType()).to.equal('optionalUniqueIndexedDocument');
|
|
46
55
|
});
|
|
47
56
|
|
|
48
|
-
it('should return valid result if compound index contains no fields', () => {
|
|
49
|
-
const document = getDocumentsFixture(
|
|
50
|
-
document.setData({
|
|
57
|
+
it('should return valid result if compound index contains no fields - Rust', () => {
|
|
58
|
+
const document = getDocumentsFixture(dataContractJs)[8];
|
|
59
|
+
document.setData({});
|
|
51
60
|
|
|
52
|
-
|
|
61
|
+
documentsJs = [document];
|
|
53
62
|
|
|
54
63
|
rawDocumentTransitions = getDocumentTransitionsFixture({
|
|
55
|
-
create:
|
|
64
|
+
create: documentsJs,
|
|
56
65
|
}).map((documentTransition) => documentTransition.toObject());
|
|
57
66
|
|
|
58
|
-
const result = validatePartialCompoundIndices(
|
|
67
|
+
const result = validatePartialCompoundIndices(rawDocumentTransitions, dataContract);
|
|
59
68
|
|
|
60
69
|
expect(result).to.be.an.instanceOf(ValidationResult);
|
|
61
70
|
expect(result.isValid()).to.be.true();
|
|
62
71
|
});
|
|
63
72
|
|
|
64
|
-
it('should return valid result if compound index contains all fields', () => {
|
|
65
|
-
|
|
73
|
+
it('should return valid result if compound index contains all fields - Rust', () => {
|
|
74
|
+
documentsJs = [getDocumentsFixture(dataContractJs)[8]];
|
|
66
75
|
rawDocumentTransitions = getDocumentTransitionsFixture({
|
|
67
|
-
create:
|
|
76
|
+
create: documentsJs,
|
|
68
77
|
}).map((documentTransition) => documentTransition.toObject());
|
|
69
78
|
|
|
70
|
-
const result = validatePartialCompoundIndices(
|
|
79
|
+
const result = validatePartialCompoundIndices(rawDocumentTransitions, dataContract);
|
|
71
80
|
|
|
72
81
|
expect(result).to.be.an.instanceOf(ValidationResult);
|
|
73
82
|
expect(result.isValid()).to.be.true();
|
|
@@ -1,128 +1,90 @@
|
|
|
1
1
|
const getDocumentsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentsFixture');
|
|
2
2
|
const getDocumentTransitionsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentTransitionsFixture');
|
|
3
3
|
|
|
4
|
-
const fetchDocumentsFactory = require('@dashevo/dpp/lib/document/stateTransition/DocumentsBatchTransition/validation/state/fetchDocumentsFactory');
|
|
5
|
-
|
|
6
4
|
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
7
5
|
|
|
8
|
-
const
|
|
9
|
-
|
|
6
|
+
const generateRandomIdentifierJs = require('@dashevo/dpp/lib/test/utils/generateRandomIdentifier');
|
|
7
|
+
|
|
8
|
+
const sinon = require('sinon');
|
|
9
|
+
const { default: loadWasmDpp } = require('../../../../../../../dist');
|
|
10
|
+
|
|
11
|
+
let Identifier;
|
|
12
|
+
let DataContract;
|
|
13
|
+
let Document;
|
|
14
|
+
let fetchDocuments;
|
|
15
|
+
let DocumentTransition;
|
|
16
|
+
let DocumentCreateTransition;
|
|
17
|
+
let StateTransitionExecutionContext;
|
|
10
18
|
|
|
11
19
|
describe('fetchDocumentsFactory', () => {
|
|
12
|
-
let fetchDocuments;
|
|
13
20
|
let stateRepositoryMock;
|
|
21
|
+
let documentTransitionsJs;
|
|
14
22
|
let documentTransitions;
|
|
23
|
+
let documentsJs;
|
|
15
24
|
let documents;
|
|
16
25
|
let executionContext;
|
|
17
26
|
|
|
18
|
-
beforeEach(function beforeEach() {
|
|
19
|
-
|
|
27
|
+
beforeEach(async function beforeEach() {
|
|
28
|
+
({
|
|
29
|
+
Identifier,
|
|
30
|
+
Document,
|
|
31
|
+
DataContract,
|
|
32
|
+
DocumentTransition,
|
|
33
|
+
DocumentCreateTransition,
|
|
34
|
+
StateTransitionExecutionContext,
|
|
35
|
+
fetchDocuments,
|
|
36
|
+
} = await loadWasmDpp());
|
|
20
37
|
|
|
21
|
-
|
|
38
|
+
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
22
39
|
|
|
23
40
|
executionContext = new StateTransitionExecutionContext();
|
|
24
41
|
|
|
25
|
-
|
|
42
|
+
documentsJs = getDocumentsFixture().slice(0, 5);
|
|
43
|
+
const dataContractBuffer = documentsJs[0].dataContract.toBuffer();
|
|
44
|
+
const dataContract = DataContract.fromBuffer(dataContractBuffer);
|
|
26
45
|
|
|
27
|
-
|
|
28
|
-
|
|
46
|
+
documents = documentsJs.map((document) => new Document(
|
|
47
|
+
document.toObject(), dataContract.clone(),
|
|
48
|
+
));
|
|
49
|
+
documentTransitionsJs = getDocumentTransitionsFixture({
|
|
50
|
+
create: documentsJs,
|
|
29
51
|
});
|
|
52
|
+
documentTransitions = documentTransitionsJs.map(
|
|
53
|
+
(transition) => DocumentTransition.fromTransitionCreate(
|
|
54
|
+
new DocumentCreateTransition(
|
|
55
|
+
transition.toObject(), dataContract.clone(),
|
|
56
|
+
),
|
|
57
|
+
),
|
|
58
|
+
);
|
|
30
59
|
});
|
|
31
60
|
|
|
32
|
-
it('should fetch specified Documents using StateRepository', async () => {
|
|
33
|
-
const firstDocumentDataContractId =
|
|
61
|
+
it('should fetch specified Documents using StateRepository - Rust', async () => {
|
|
62
|
+
const firstDocumentDataContractId = generateRandomIdentifierJs().toBuffer();
|
|
34
63
|
|
|
35
|
-
documentTransitions[0].
|
|
36
|
-
documents[0].
|
|
64
|
+
documentTransitions[0].setDataContractId(firstDocumentDataContractId);
|
|
65
|
+
documents[0].setDataContractId(firstDocumentDataContractId);
|
|
37
66
|
|
|
38
67
|
stateRepositoryMock.fetchDocuments.withArgs(
|
|
39
|
-
|
|
68
|
+
sinon.match.instanceOf(Identifier),
|
|
40
69
|
documentTransitions[0].getType(),
|
|
41
70
|
).resolves([documents[0]]);
|
|
42
71
|
|
|
43
72
|
stateRepositoryMock.fetchDocuments.withArgs(
|
|
44
|
-
|
|
73
|
+
sinon.match.instanceOf(Identifier),
|
|
45
74
|
documentTransitions[1].getType(),
|
|
46
75
|
).resolves([documents[1], documents[2]]);
|
|
47
76
|
|
|
48
77
|
stateRepositoryMock.fetchDocuments.withArgs(
|
|
49
|
-
|
|
50
|
-
|
|
78
|
+
sinon.match.instanceOf(Identifier),
|
|
79
|
+
documentTransitionsJs[3].getType(),
|
|
51
80
|
).resolves([documents[3], documents[4]]);
|
|
52
81
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const callArgsOne = [
|
|
58
|
-
documents[0].getDataContractId(),
|
|
59
|
-
documents[0].getType(),
|
|
60
|
-
{
|
|
61
|
-
where: [
|
|
62
|
-
['$id', 'in', [documents[0].getId()]],
|
|
63
|
-
],
|
|
64
|
-
orderBy: [
|
|
65
|
-
[
|
|
66
|
-
'$id',
|
|
67
|
-
'asc',
|
|
68
|
-
],
|
|
69
|
-
],
|
|
70
|
-
},
|
|
71
|
-
executionContext,
|
|
72
|
-
];
|
|
73
|
-
|
|
74
|
-
const callArgsTwo = [
|
|
75
|
-
documents[1].getDataContractId(),
|
|
76
|
-
documents[1].getType(),
|
|
77
|
-
{
|
|
78
|
-
where: [
|
|
79
|
-
['$id', 'in', [
|
|
80
|
-
documents[1].getId(),
|
|
81
|
-
documents[2].getId(),
|
|
82
|
-
]],
|
|
83
|
-
],
|
|
84
|
-
orderBy: [
|
|
85
|
-
[
|
|
86
|
-
'$id',
|
|
87
|
-
'asc',
|
|
88
|
-
],
|
|
89
|
-
],
|
|
90
|
-
},
|
|
91
|
-
executionContext,
|
|
92
|
-
];
|
|
93
|
-
|
|
94
|
-
const callArgsThree = [
|
|
95
|
-
documents[3].getDataContractId(),
|
|
96
|
-
documents[3].getType(),
|
|
97
|
-
{
|
|
98
|
-
where: [
|
|
99
|
-
['$id', 'in', [
|
|
100
|
-
documents[3].getId(),
|
|
101
|
-
documents[4].getId(),
|
|
102
|
-
]],
|
|
103
|
-
],
|
|
104
|
-
orderBy: [
|
|
105
|
-
[
|
|
106
|
-
'$id',
|
|
107
|
-
'asc',
|
|
108
|
-
],
|
|
109
|
-
],
|
|
110
|
-
},
|
|
82
|
+
await fetchDocuments(
|
|
83
|
+
stateRepositoryMock,
|
|
84
|
+
documentTransitions,
|
|
111
85
|
executionContext,
|
|
112
|
-
|
|
86
|
+
);
|
|
113
87
|
|
|
114
|
-
|
|
115
|
-
for (let i = 0; i < stateRepositoryMock.fetchDocuments.callCount; i++) {
|
|
116
|
-
const call = stateRepositoryMock.fetchDocuments.getCall(i);
|
|
117
|
-
callsArgs.push(call.args);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
expect(callsArgs).to.have.deep.members([
|
|
121
|
-
callArgsOne,
|
|
122
|
-
callArgsTwo,
|
|
123
|
-
callArgsThree,
|
|
124
|
-
]);
|
|
125
|
-
|
|
126
|
-
expect(fetchedDocuments).to.deep.equal(documents);
|
|
88
|
+
expect(stateRepositoryMock.fetchDocuments).to.have.been.calledThrice();
|
|
127
89
|
});
|
|
128
90
|
});
|