@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.
Files changed (245) hide show
  1. package/.mocharc.yml +1 -1
  2. package/Cargo.toml +5 -2
  3. package/README.md +5 -1
  4. package/dist/index.js +1 -1
  5. package/dist/index.js.LICENSE.txt +9 -0
  6. package/dist/wasm/wasm_dpp.d.ts +3397 -1237
  7. package/karma.conf.js +5 -0
  8. package/lib/identifier/patchIdentifier.ts +5 -4
  9. package/lib/index.ts +1 -1
  10. package/lib/test/bootstrap.js +5 -0
  11. package/lib/test/fixtures/getDataContractFixture.js +267 -0
  12. package/lib/test/fixtures/getDocumentsFixture.js +43 -0
  13. package/lib/test/mocks/createStateRepositoryMock.js +64 -0
  14. package/lib/test/mocks/getBlsAdapterMock.js +51 -0
  15. package/package.json +11 -8
  16. package/src/bls_adapter.rs +17 -1
  17. package/src/buffer.rs +3 -0
  18. package/src/dash_platform_protocol.rs +107 -10
  19. package/src/data_contract/data_contract.rs +59 -10
  20. package/src/data_contract/data_contract_facade.rs +128 -0
  21. package/src/data_contract/errors/invalid_data_contract.rs +16 -16
  22. package/src/data_contract/errors/invalid_document_type.rs +8 -8
  23. package/src/data_contract/errors/mod.rs +10 -16
  24. package/src/data_contract/index.rs +56 -1
  25. package/src/data_contract/mod.rs +4 -0
  26. package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +1 -1
  27. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +41 -10
  28. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +35 -4
  29. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +1 -1
  30. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +20 -7
  31. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +47 -11
  32. package/src/data_contract_factory/data_contract_factory.rs +19 -17
  33. package/src/data_trigger/data_trigger_execution_context.rs +95 -0
  34. package/src/data_trigger/data_trigger_execution_result.rs +48 -0
  35. package/src/data_trigger/execute_data_triggers_factory.rs +60 -0
  36. package/src/data_trigger/get_data_triggers_factory.rs +65 -0
  37. package/src/data_trigger/mod.rs +121 -0
  38. package/src/document/document_facade.rs +125 -0
  39. package/src/document/errors/invalid_document_error.rs +10 -9
  40. package/src/document/errors/invalid_initial_revision_error.rs +1 -1
  41. package/src/document/errors/mismatch_owners_ids_error.rs +14 -4
  42. package/src/document/errors/mod.rs +17 -13
  43. package/src/document/errors/no_documents_supplied_error.rs +4 -4
  44. package/src/document/factory.rs +257 -0
  45. package/src/document/fetch_and_validate_data_contract.rs +77 -0
  46. package/src/document/generate_document_id.rs +17 -0
  47. package/src/document/mod.rs +311 -37
  48. package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +22 -0
  49. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +253 -1
  50. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +60 -1
  51. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +263 -0
  52. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +302 -3
  53. package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
  54. package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_id.rs +40 -0
  55. package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_indices.rs +50 -0
  56. package/src/document/state_transition/document_batch_transition/validation/basic/mod.rs +8 -0
  57. package/src/document/state_transition/document_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs +34 -0
  58. package/src/document/state_transition/document_batch_transition/validation/basic/validate_partial_compound_indices.rs +39 -0
  59. package/src/document/state_transition/document_batch_transition/validation/mod.rs +2 -0
  60. package/src/document/state_transition/document_batch_transition/validation/state/fetch_documents.rs +43 -0
  61. package/src/document/state_transition/document_batch_transition/validation/state/mod.rs +3 -0
  62. package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_batch_transitions_state.rs +27 -0
  63. package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_uniqueness_by_indices.rs +47 -0
  64. package/src/document/validator.rs +52 -0
  65. package/src/errors/compatible_protocol_version_is_not_defined_error.rs +24 -0
  66. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -1
  67. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -1
  68. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +2 -2
  69. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +15 -1
  70. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +16 -2
  71. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -1
  72. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -1
  73. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
  74. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
  75. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
  76. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +2 -2
  77. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +29 -0
  78. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +4 -3
  79. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -1
  80. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -1
  81. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +4 -3
  82. package/src/errors/consensus/basic/identity/mod.rs +2 -0
  83. package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -1
  84. package/src/errors/consensus/basic/json_schema_error.rs +8 -2
  85. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -1
  86. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +9 -9
  87. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +4 -4
  88. package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +35 -0
  89. package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +34 -0
  90. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +10 -7
  91. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +2 -3
  92. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +7 -3
  93. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +2 -3
  94. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +7 -4
  95. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +2 -1
  96. package/src/errors/consensus/state/identity/mod.rs +4 -0
  97. package/src/errors/consensus_error.rs +218 -268
  98. package/src/errors/data_contract_not_present_error.rs +23 -0
  99. package/src/errors/dpp_error.rs +17 -0
  100. package/src/errors/from.rs +22 -0
  101. package/src/errors/js_conversion.rs +52 -5
  102. package/src/errors/mod.rs +6 -0
  103. package/src/errors/protocol_error.rs +14 -3
  104. package/src/identifier/errors.rs +30 -0
  105. package/src/identifier/mod.rs +95 -11
  106. package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
  107. package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
  108. package/src/identity/errors/invalid_identity_error.rs +32 -0
  109. package/src/identity/errors/mod.rs +9 -0
  110. package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
  111. package/src/identity/factory_utils.rs +87 -0
  112. package/src/identity/identity_facade.rs +194 -20
  113. package/src/identity/identity_factory.rs +209 -0
  114. package/src/identity/identity_public_key/mod.rs +51 -40
  115. package/src/identity/mod.rs +31 -17
  116. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
  117. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
  118. package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
  119. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
  120. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
  121. package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
  122. package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
  123. package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
  124. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +337 -0
  125. package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
  126. package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
  127. package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
  128. package/src/identity/state_transition/identity_create_transition/to_object.rs +45 -0
  129. package/src/identity/state_transition/identity_public_key_transitions.rs +207 -0
  130. package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
  131. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +278 -0
  132. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
  133. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
  134. package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
  135. package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
  136. package/src/identity/state_transition/identity_update_transition/apply_identity_update_transition.rs +24 -0
  137. package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +55 -0
  138. package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +448 -0
  139. package/src/identity/state_transition/identity_update_transition/identity_update_transition_basic_validator.rs +94 -0
  140. package/src/identity/state_transition/identity_update_transition/identity_update_transition_state_validator.rs +53 -0
  141. package/src/identity/state_transition/identity_update_transition/mod.rs +9 -0
  142. package/src/identity/state_transition/identity_update_transition/to_object.rs +66 -0
  143. package/src/identity/state_transition/mod.rs +12 -0
  144. package/src/identity/state_transition/validate_public_key_signatures.rs +61 -0
  145. package/src/identity/validation/identity_validator.rs +50 -0
  146. package/src/identity/validation/mod.rs +2 -0
  147. package/src/identity/validation/public_keys_validator.rs +14 -13
  148. package/src/identity_public_key/public_keys_validator.rs +44 -0
  149. package/src/lib.rs +6 -0
  150. package/src/lodash.rs +7 -0
  151. package/src/metadata.rs +54 -10
  152. package/src/state_repository.rs +598 -101
  153. package/src/state_transition/conversion.rs +104 -0
  154. package/src/state_transition/errors/invalid_state_transition_error.rs +32 -0
  155. package/src/state_transition/errors/mod.rs +1 -0
  156. package/src/state_transition/mod.rs +46 -0
  157. package/src/state_transition/state_transition_facade.rs +263 -0
  158. package/src/state_transition/state_transition_factory.rs +216 -0
  159. package/src/state_transition/validation/mod.rs +1 -0
  160. package/src/state_transition/validation/validate_state_transition_key_signature.rs +62 -0
  161. package/src/utils.rs +210 -8
  162. package/src/validation/json_schema_validator.rs +41 -0
  163. package/src/validation/mod.rs +2 -0
  164. package/src/validation/validation_result.rs +29 -5
  165. package/src/version/mod.rs +2 -0
  166. package/src/version/protocol_version.rs +103 -0
  167. package/test/integration/dataContract/DataContractFacade.spec.js +46 -30
  168. package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +45 -127
  169. package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +91 -139
  170. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +577 -503
  171. package/test/integration/document/Document.spec.js +55 -29
  172. package/test/integration/document/DocumentFacade.spec.js +51 -64
  173. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +38 -16
  174. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +341 -396
  175. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +116 -218
  176. package/test/integration/document/validation/validateDocumentFactory.spec.js +123 -171
  177. package/test/integration/identity/IdentityFacade.spec.js +52 -27
  178. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +185 -164
  179. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +84 -114
  180. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +120 -137
  181. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +106 -91
  182. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +50 -16
  183. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +78 -86
  184. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +74 -30
  185. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -147
  186. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +65 -77
  187. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +60 -23
  188. package/test/integration/identity/validation/validateIdentityFactory.spec.js +46 -114
  189. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +9 -3
  190. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +12 -8
  191. package/test/integration/stateTransition/StateTransitionFacade.spec.js +95 -233
  192. package/test/integration/stateTransition/calculateStateTransitionFeeFromOperationsFactory.spec.js +53 -0
  193. package/test/unit/Identifier.spec.js +36 -36
  194. package/test/unit/Metadata.spec.js +17 -3
  195. package/test/unit/dataContract/DataContract.spec.js +9 -4
  196. package/test/unit/dataContract/createDataContract.spec.js +0 -1
  197. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
  198. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +1 -1
  199. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +2 -2
  200. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +3 -3
  201. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +1 -1
  202. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +25 -31
  203. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +3 -3
  204. package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +2 -0
  205. package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
  206. package/test/unit/document/Document.spec.js +147 -155
  207. package/test/unit/document/DocumentFactory.spec.js +153 -153
  208. package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +59 -14
  209. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +131 -62
  210. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +144 -56
  211. package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +38 -8
  212. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +11 -7
  213. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +29 -18
  214. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +38 -29
  215. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +53 -91
  216. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +357 -493
  217. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +133 -72
  218. package/test/unit/identity/Identity.spec.js +26 -9
  219. package/test/unit/identity/IdentityFactory.spec.js +81 -89
  220. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +73 -30
  221. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +38 -38
  222. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +34 -25
  223. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
  224. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +85 -50
  225. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
  226. package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +44 -22
  227. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +58 -103
  228. package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
  229. package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
  230. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
  231. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
  232. package/test/unit/stateTransition/StateTransitionFactory.spec.js +49 -101
  233. package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +23 -25
  234. package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +73 -46
  235. package/test/unit/version/validateProtocolVersionFactory.spec.js +45 -27
  236. package/wasm/package.json +5 -0
  237. package/wasm/wasm_dpp.d.ts +3397 -1237
  238. package/wasm/wasm_dpp.js +7158 -1384
  239. package/wasm/wasm_dpp_bg.js +1 -1
  240. package/wasm/wasm_dpp_bg.wasm +0 -0
  241. package/wasm/wasm_dpp_bg.wasm.d.ts +777 -389
  242. package/webpack.config.js +9 -0
  243. package/src/document/state_transition/document_batch_transition/document_transition/document_update_transition.rs +0 -22
  244. package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +0 -135
  245. 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 = findDuplicateDocuments(rawDocumentTransitions);
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 = findDuplicateDocuments(rawDocumentTransitions);
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 Document = require('@dashevo/dpp/lib/document/Document');
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
- contract = getDataContractFixture();
18
- contract.setDocumentSchema('nonUniqueIndexDocument', {
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
- contract.setDocumentSchema('singleDocument', {
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
- documents = getDocumentsFixture(contract);
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 = contract;
76
+ doc.dataContract = contractJs;
68
77
  // eslint-disable-next-line no-param-reassign
69
- doc.dataContractId = contract.getId();
78
+ doc.dataContractId = contractJs.getId();
70
79
  });
71
80
 
72
81
  const [, , , william] = documents;
73
82
 
74
- let document = new Document({
83
+ let document = new DocumentJs({
75
84
  ...william.toObject(),
76
85
  $type: 'nonUniqueIndexDocument',
77
86
  $entropy: generateEntropy(),
78
- }, contract);
87
+ }, contractJs);
79
88
 
80
89
  document.setEntropy(generateEntropy());
81
90
 
82
91
  documents.push(document);
83
92
 
84
- document = new Document({
93
+ document = new DocumentJs({
85
94
  ...william.toObject(),
86
95
  $type: 'singleDocument',
87
96
  $entropy: generateEntropy(),
88
- }, contract);
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 = findDuplicateDocumentsByIndices(documentTransitions, contract);
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 = findDuplicateDocumentsByIndices(documentTransitions, contract);
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 ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
9
- const { expectValidationError } = require('@dashevo/dpp/lib/test/expect/expectError');
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 documents;
13
+ let documentsJs;
13
14
  let rawDocumentTransitions;
15
+ let dataContractJs;
14
16
  let dataContract;
15
- let ownerId;
16
17
 
17
- beforeEach(() => {
18
- dataContract = getContractFixture();
19
- ownerId = dataContract.getOwnerId();
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 document = getDocumentsFixture(dataContract)[9];
24
- document.set('lastName', undefined);
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
- documents = [document];
35
+ documentsJs = [documentJs];
27
36
  rawDocumentTransitions = getDocumentTransitionsFixture({
28
- create: documents,
37
+ create: documentsJs,
29
38
  }).map((documentTransition) => documentTransition.toObject());
30
39
 
31
- const result = validatePartialCompoundIndices(ownerId, rawDocumentTransitions, dataContract);
40
+ const result = validatePartialCompoundIndices(rawDocumentTransitions, dataContract);
32
41
 
33
- expectValidationError(result, InconsistentCompoundIndexDataError);
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 } = dataContract.getDocuments();
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(dataContract)[8];
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
- documents = [document];
61
+ documentsJs = [document];
53
62
 
54
63
  rawDocumentTransitions = getDocumentTransitionsFixture({
55
- create: documents,
64
+ create: documentsJs,
56
65
  }).map((documentTransition) => documentTransition.toObject());
57
66
 
58
- const result = validatePartialCompoundIndices(ownerId, rawDocumentTransitions, dataContract);
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
- documents = [getDocumentsFixture(dataContract)[8]];
73
+ it('should return valid result if compound index contains all fields - Rust', () => {
74
+ documentsJs = [getDocumentsFixture(dataContractJs)[8]];
66
75
  rawDocumentTransitions = getDocumentTransitionsFixture({
67
- create: documents,
76
+ create: documentsJs,
68
77
  }).map((documentTransition) => documentTransition.toObject());
69
78
 
70
- const result = validatePartialCompoundIndices(ownerId, rawDocumentTransitions, dataContract);
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 generateRandomIdentifier = require('@dashevo/dpp/lib/test/utils/generateRandomIdentifier');
9
- const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
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
- stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
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
- fetchDocuments = fetchDocumentsFactory(stateRepositoryMock);
38
+ stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
22
39
 
23
40
  executionContext = new StateTransitionExecutionContext();
24
41
 
25
- documents = getDocumentsFixture().slice(0, 5);
42
+ documentsJs = getDocumentsFixture().slice(0, 5);
43
+ const dataContractBuffer = documentsJs[0].dataContract.toBuffer();
44
+ const dataContract = DataContract.fromBuffer(dataContractBuffer);
26
45
 
27
- documentTransitions = getDocumentTransitionsFixture({
28
- create: documents,
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 = generateRandomIdentifier().toBuffer();
61
+ it('should fetch specified Documents using StateRepository - Rust', async () => {
62
+ const firstDocumentDataContractId = generateRandomIdentifierJs().toBuffer();
34
63
 
35
- documentTransitions[0].dataContractId = firstDocumentDataContractId;
36
- documents[0].dataContractId = firstDocumentDataContractId;
64
+ documentTransitions[0].setDataContractId(firstDocumentDataContractId);
65
+ documents[0].setDataContractId(firstDocumentDataContractId);
37
66
 
38
67
  stateRepositoryMock.fetchDocuments.withArgs(
39
- documentTransitions[0].getDataContractId(),
68
+ sinon.match.instanceOf(Identifier),
40
69
  documentTransitions[0].getType(),
41
70
  ).resolves([documents[0]]);
42
71
 
43
72
  stateRepositoryMock.fetchDocuments.withArgs(
44
- documentTransitions[1].getDataContractId(),
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
- documentTransitions[3].getDataContractId(),
50
- documentTransitions[3].getType(),
78
+ sinon.match.instanceOf(Identifier),
79
+ documentTransitionsJs[3].getType(),
51
80
  ).resolves([documents[3], documents[4]]);
52
81
 
53
- const fetchedDocuments = await fetchDocuments(documentTransitions, executionContext);
54
-
55
- expect(stateRepositoryMock.fetchDocuments).to.have.been.calledThrice();
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
- const callsArgs = [];
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
  });