@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,54 +1,93 @@
1
- const verifyDocumentsUniquenessByIndicesFactory = require('@dashevo/dpp/lib/document/stateTransition/DocumentsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory');
2
-
3
1
  const getDocumentsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentsFixture');
4
2
  const getContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
5
3
  const getDocumentTransitionsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentTransitionsFixture');
6
4
 
7
- const { expectValidationError } = require('@dashevo/dpp/lib/test/expect/expectError');
8
5
  const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
9
6
 
10
- const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
7
+ const sinon = require('sinon');
8
+ const { expectValidationError } = require('../../../../../../../lib/test/expect/expectError');
9
+ const { default: loadWasmDpp } = require('../../../../../../../dist');
11
10
 
12
- const DuplicateUniqueIndexError = require('@dashevo/dpp/lib/errors/consensus/state/document/DuplicateUniqueIndexError');
13
- const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
11
+ let DataContract;
12
+ let Document;
13
+ let ValidationResult;
14
+ let DuplicateUniqueIndexError;
15
+ let validateDocumentsUniquenessByIndices;
16
+ let DocumentCreateTransition;
17
+ let DocumentTransition;
18
+ let Identifier;
19
+ let StateTransitionExecutionContext;
14
20
 
15
21
  describe('validateDocumentsUniquenessByIndices', () => {
22
+ let stateRepositoryMockJs;
16
23
  let stateRepositoryMock;
17
- let validateDocumentsUniquenessByIndices;
18
- let documents;
24
+ let documentsJs;
25
+ let documentTransitionsJs;
19
26
  let documentTransitions;
27
+ let dataContractJs;
20
28
  let dataContract;
29
+ let ownerIdJs;
21
30
  let ownerId;
22
31
  let executionContext;
23
32
 
24
- beforeEach(function beforeEach() {
25
- ({ ownerId } = getDocumentsFixture);
26
-
27
- documents = getDocumentsFixture(dataContract);
28
- documentTransitions = getDocumentTransitionsFixture({
29
- create: documents,
33
+ beforeEach(async function beforeEach() {
34
+ ({
35
+ Document,
36
+ DataContract,
37
+ Identifier,
38
+ DocumentCreateTransition,
39
+ DocumentTransition,
40
+ ValidationResult,
41
+ StateTransitionExecutionContext,
42
+ validateDocumentsUniquenessByIndices,
43
+
44
+ DuplicateUniqueIndexError,
45
+ } = await loadWasmDpp());
46
+
47
+ ({ ownerId: ownerIdJs } = getDocumentsFixture);
48
+ ownerId = Identifier.from(ownerIdJs.toBuffer());
49
+
50
+ dataContractJs = getContractFixture();
51
+ dataContract = new DataContract(dataContractJs.toObject());
52
+
53
+ documentsJs = getDocumentsFixture(dataContractJs);
54
+ documentTransitionsJs = getDocumentTransitionsFixture({
55
+ create: documentsJs,
30
56
  });
31
- dataContract = getContractFixture();
57
+
58
+ documentTransitions = documentTransitionsJs.map(
59
+ (transition) => DocumentTransition.fromTransitionCreate(
60
+ new DocumentCreateTransition(
61
+ transition.toObject(), dataContract.clone(),
62
+ ),
63
+ ),
64
+ );
32
65
 
33
66
  stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
34
67
  stateRepositoryMock.fetchDocuments.resolves([]);
35
68
 
36
- executionContext = new StateTransitionExecutionContext();
69
+ stateRepositoryMockJs = createStateRepositoryMock(this.sinonSandbox);
70
+ stateRepositoryMockJs.fetchDocuments.resolves([]);
37
71
 
38
- validateDocumentsUniquenessByIndices = verifyDocumentsUniquenessByIndicesFactory(
39
- stateRepositoryMock,
40
- );
72
+ executionContext = new StateTransitionExecutionContext();
41
73
  });
42
74
 
43
- it('should return valid result if Documents have no unique indices', async () => {
44
- const [niceDocument] = documents;
75
+ it('should return valid result if Documents have no unique indices - Rust', async () => {
76
+ const [niceDocument] = documentsJs;
45
77
  const noIndexDocumentTransitions = getDocumentTransitionsFixture({
46
78
  create: [niceDocument],
47
79
  });
48
80
 
81
+ const documentTransition = DocumentTransition.fromTransitionCreate(
82
+ new DocumentCreateTransition(
83
+ noIndexDocumentTransitions[0].toObject(), dataContract,
84
+ ),
85
+ );
86
+
49
87
  const result = await validateDocumentsUniquenessByIndices(
88
+ stateRepositoryMock,
50
89
  ownerId,
51
- noIndexDocumentTransitions,
90
+ [documentTransition],
52
91
  dataContract,
53
92
  executionContext,
54
93
  );
@@ -58,36 +97,38 @@ describe('validateDocumentsUniquenessByIndices', () => {
58
97
  expect(stateRepositoryMock.fetchDocuments).to.have.not.been.called();
59
98
  });
60
99
 
61
- it('should return valid result if Document has unique indices and there are no duplicates', async () => {
62
- const [, , , william] = documents;
100
+ it('should return valid result if Document has unique indices and there are no duplicates - Rust', async () => {
101
+ const [, , , william] = documentsJs;
102
+ const williamDocument = new Document(william.toObject(), dataContract);
63
103
 
64
104
  stateRepositoryMock.fetchDocuments
65
105
  .withArgs(
66
106
  dataContract.getId().toBuffer(),
67
- william.getType(),
107
+ williamDocument.getType(),
68
108
  {
69
109
  where: [
70
- ['$ownerId', '==', ownerId],
110
+ ['$ownerId', '==', ownerIdJs],
71
111
  ['firstName', '==', william.get('firstName')],
72
112
  ],
73
113
  },
74
114
  )
75
- .resolves([william]);
115
+ .resolves([williamDocument]);
76
116
 
77
117
  stateRepositoryMock.fetchDocuments
78
118
  .withArgs(
79
- dataContract.getId().toBuffer(),
119
+ dataContractJs.getId().toBuffer(),
80
120
  william.getType(),
81
121
  {
82
122
  where: [
83
- ['$ownerId', '==', ownerId],
123
+ ['$ownerId', '==', ownerIdJs],
84
124
  ['lastName', '==', william.get('lastName')],
85
125
  ],
86
126
  },
87
127
  )
88
- .resolves([william]);
128
+ .resolves([williamDocument]);
89
129
 
90
130
  const result = await validateDocumentsUniquenessByIndices(
131
+ stateRepositoryMock,
91
132
  ownerId,
92
133
  documentTransitions,
93
134
  dataContract,
@@ -98,18 +139,21 @@ describe('validateDocumentsUniquenessByIndices', () => {
98
139
  expect(result.isValid()).to.be.true();
99
140
  });
100
141
 
101
- it('should return invalid result if Document has unique indices and there are duplicates', async () => {
102
- const [, , , william, leon] = documents;
142
+ it('should return invalid result if Document has unique indices and there are duplicates - Rust', async () => {
143
+ let [, , , william, leon] = documentsJs;
103
144
 
104
- const indicesDefinition = dataContract.getDocumentSchema(william.getType()).indices;
145
+ william = new Document(william.toObject(), dataContract.clone());
146
+ leon = new Document(leon.toObject(), dataContract.clone());
147
+
148
+ const indicesDefinition = dataContractJs.getDocumentSchema(william.getType()).indices;
105
149
 
106
150
  stateRepositoryMock.fetchDocuments
107
151
  .withArgs(
108
- dataContract.getId(),
152
+ sinon.match.instanceOf(Identifier),
109
153
  william.getType(),
110
154
  {
111
155
  where: [
112
- ['$ownerId', '==', ownerId],
156
+ ['$ownerId', '==', ownerId.toJSON()],
113
157
  ['firstName', '==', william.get('firstName')],
114
158
  ],
115
159
  },
@@ -118,11 +162,11 @@ describe('validateDocumentsUniquenessByIndices', () => {
118
162
 
119
163
  stateRepositoryMock.fetchDocuments
120
164
  .withArgs(
121
- dataContract.getId(),
165
+ sinon.match.instanceOf(Identifier),
122
166
  william.getType(),
123
167
  {
124
168
  where: [
125
- ['$ownerId', '==', ownerId],
169
+ ['$ownerId', '==', ownerId.toJSON()],
126
170
  ['lastName', '==', william.get('lastName')],
127
171
  ],
128
172
  },
@@ -131,11 +175,11 @@ describe('validateDocumentsUniquenessByIndices', () => {
131
175
 
132
176
  stateRepositoryMock.fetchDocuments
133
177
  .withArgs(
134
- dataContract.getId(),
178
+ sinon.match.instanceOf(Identifier),
135
179
  leon.getType(),
136
180
  {
137
181
  where: [
138
- ['$ownerId', '==', ownerId],
182
+ ['$ownerId', '==', ownerId.toJSON()],
139
183
  ['firstName', '==', leon.get('firstName')],
140
184
  ],
141
185
  },
@@ -144,11 +188,11 @@ describe('validateDocumentsUniquenessByIndices', () => {
144
188
 
145
189
  stateRepositoryMock.fetchDocuments
146
190
  .withArgs(
147
- dataContract.getId(),
191
+ sinon.match.instanceOf(Identifier),
148
192
  leon.getType(),
149
193
  {
150
194
  where: [
151
- ['$ownerId', '==', ownerId],
195
+ ['$ownerId', '==', ownerId.toJSON()],
152
196
  ['lastName', '==', leon.get('lastName')],
153
197
  ],
154
198
  },
@@ -156,25 +200,23 @@ describe('validateDocumentsUniquenessByIndices', () => {
156
200
  .resolves([william]);
157
201
 
158
202
  const result = await validateDocumentsUniquenessByIndices(
203
+ stateRepositoryMock,
159
204
  ownerId,
160
205
  documentTransitions,
161
206
  dataContract,
162
207
  executionContext,
163
208
  );
164
209
 
165
- expectValidationError(result, DuplicateUniqueIndexError, 4);
166
-
210
+ await expectValidationError(result, DuplicateUniqueIndexError, 4);
167
211
  const errors = result.getErrors();
168
-
169
212
  const [error] = result.getErrors();
170
-
171
213
  expect(error.getCode()).to.equal(4009);
172
214
 
173
215
  expect(errors.map((e) => e.getDocumentId())).to.have.deep.members([
174
- documentTransitions[3].getId().toBuffer(),
175
- documentTransitions[3].getId().toBuffer(),
176
- documentTransitions[4].getId().toBuffer(),
177
- documentTransitions[4].getId().toBuffer(),
216
+ documentTransitionsJs[3].getId().toBuffer(),
217
+ documentTransitionsJs[3].getId().toBuffer(),
218
+ documentTransitionsJs[4].getId().toBuffer(),
219
+ documentTransitionsJs[4].getId().toBuffer(),
178
220
  ]);
179
221
 
180
222
  expect(errors.map((e) => e.getDuplicatingProperties())).to.have.deep.members([
@@ -185,38 +227,44 @@ describe('validateDocumentsUniquenessByIndices', () => {
185
227
  ]);
186
228
  });
187
229
 
188
- it('should return valid result if Document has undefined field from index', async () => {
189
- const indexedDocument = documents[7];
230
+ it('should return valid result if Document has undefined field from index - Rust', async () => {
231
+ const indexedDocumentJs = documentsJs[7];
232
+ const indexedDocument = new Document(indexedDocumentJs.toObject(), dataContract.clone());
190
233
  const indexedDocumentTransitions = getDocumentTransitionsFixture({
191
- create: [indexedDocument],
192
- });
234
+ create: [indexedDocumentJs],
235
+ }).map(
236
+ (t) => DocumentTransition.fromTransitionCreate(
237
+ new DocumentCreateTransition(t.toObject(), dataContract.clone()),
238
+ ),
239
+ );
193
240
 
194
- stateRepositoryMock.fetchDocuments
241
+ stateRepositoryMockJs.fetchDocuments
195
242
  .withArgs(
196
- dataContract.getId().toBuffer(),
243
+ sinon.match.instanceOf(Identifier),
197
244
  indexedDocument.getType(),
198
245
  {
199
246
  where: [
200
- ['$ownerId', '==', ownerId],
247
+ ['$ownerId', '==', ownerId.toJSON()],
201
248
  ['firstName', '==', indexedDocument.get('firstName')],
202
249
  ],
203
250
  },
204
251
  )
205
252
  .resolves([indexedDocument]);
206
253
 
207
- stateRepositoryMock.fetchDocuments
254
+ stateRepositoryMockJs.fetchDocuments
208
255
  .withArgs(
209
- dataContract.getId(),
256
+ sinon.match.instanceOf(Identifier),
210
257
  indexedDocument.getType(),
211
258
  {
212
259
  where: [
213
- ['$ownerId', '==', ownerId],
260
+ ['$ownerId', '==', ownerId.toJSON()],
214
261
  ],
215
262
  },
216
263
  )
217
264
  .resolves([indexedDocument]);
218
265
 
219
266
  const result = await validateDocumentsUniquenessByIndices(
267
+ stateRepositoryMock,
220
268
  ownerId,
221
269
  indexedDocumentTransitions,
222
270
  dataContract,
@@ -227,26 +275,34 @@ describe('validateDocumentsUniquenessByIndices', () => {
227
275
  expect(result.isValid()).to.be.true();
228
276
  });
229
277
 
230
- it('should return valid result if Document being created and has createdAt and updatedAt indices', async () => {
231
- const [, , , , , , uniqueDatesDocument] = documents;
232
-
278
+ it('should return valid result if Document being created and has createdAt and updatedAt indices - Rust', async () => {
279
+ const [, , , , , , uniqueDatesDocumentJs] = documentsJs;
280
+ const uniqueDatesDocument = new Document(
281
+ uniqueDatesDocumentJs.toObject(), dataContract.clone(),
282
+ );
233
283
  const uniqueDatesDocumentTransitions = getDocumentTransitionsFixture({
234
- create: [uniqueDatesDocument],
235
- });
284
+ create: [uniqueDatesDocumentJs],
285
+ }).map(
286
+ (t) => DocumentTransition.fromTransitionCreate(
287
+ new DocumentCreateTransition(t.toObject(), dataContract.clone()),
288
+ ),
289
+ );
290
+
236
291
  stateRepositoryMock.fetchDocuments
237
292
  .withArgs(
238
- dataContract.getId().toBuffer(),
239
- uniqueDatesDocument.getType(),
293
+ sinon.match.instanceOf(Identifier),
294
+ uniqueDatesDocumentJs.getType(),
240
295
  {
241
296
  where: [
242
- ['$createdAt', '==', uniqueDatesDocument.getCreatedAt().getTime()],
243
- ['$updatedAt', '==', uniqueDatesDocument.getUpdatedAt().getTime()],
297
+ ['$createdAt', '==', uniqueDatesDocument.getCreatedAt()],
298
+ ['$updatedAt', '==', uniqueDatesDocument.getUpdatedAt()],
244
299
  ],
245
300
  },
246
301
  )
247
302
  .resolves([uniqueDatesDocument]);
248
303
 
249
304
  const result = await validateDocumentsUniquenessByIndices(
305
+ stateRepositoryMock,
250
306
  ownerId,
251
307
  uniqueDatesDocumentTransitions,
252
308
  dataContract,
@@ -256,21 +312,26 @@ describe('validateDocumentsUniquenessByIndices', () => {
256
312
  expect(result.isValid()).to.be.true();
257
313
  });
258
314
 
259
- it('should return invalid result on dry run', async () => {
260
- const [niceDocument] = documents;
315
+ it('should return invalid result on dry run - Rust', async () => {
316
+ const [niceDocument] = documentsJs;
261
317
  const noIndexDocumentTransitions = getDocumentTransitionsFixture({
262
318
  create: [niceDocument],
263
319
  });
264
320
 
265
321
  executionContext.enableDryRun();
322
+ const documentTransition = DocumentTransition.fromTransitionCreate(
323
+ new DocumentCreateTransition(
324
+ noIndexDocumentTransitions[0].toObject(), dataContract,
325
+ ),
326
+ );
266
327
 
267
328
  const result = await validateDocumentsUniquenessByIndices(
329
+ stateRepositoryMock,
268
330
  ownerId,
269
- noIndexDocumentTransitions,
331
+ [documentTransition],
270
332
  dataContract,
271
333
  executionContext,
272
334
  );
273
- executionContext.disableDryRun();
274
335
 
275
336
  expect(result).to.be.an.instanceOf(ValidationResult);
276
337
  expect(result.isValid()).to.be.true();
@@ -1,3 +1,4 @@
1
+ const varint = require('varint');
1
2
  const JSIdentityPublicKey = require('@dashevo/dpp/lib/identity/IdentityPublicKey');
2
3
  const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
3
4
  const JSIdentity = require('@dashevo/dpp/lib/identity/Identity');
@@ -36,7 +37,6 @@ describe('Identity', () => {
36
37
  purpose: KeyPurpose.AUTHENTICATION,
37
38
  securityLevel: KeySecurityLevel.MASTER,
38
39
  readOnly: false,
39
- signature: Buffer.alloc(36).fill('a'),
40
40
  },
41
41
  ],
42
42
  balance: 0,
@@ -45,11 +45,21 @@ describe('Identity', () => {
45
45
 
46
46
  identity = new Identity(rawIdentity);
47
47
 
48
- metadataFixture = new Metadata(42, 0);
48
+ metadataFixture = new Metadata({
49
+ blockHeight: 42,
50
+ coreChainLockedHeight: 0,
51
+ timeMs: 100,
52
+ protocolVersion: 2,
53
+ });
49
54
 
50
55
  identity.setMetadata(metadataFixture);
51
56
 
52
- metadataFixture = new Metadata(42, 0);
57
+ metadataFixture = new Metadata({
58
+ blockHeight: 42,
59
+ coreChainLockedHeight: 0,
60
+ timeMs: 100,
61
+ protocolVersion: 2,
62
+ });
53
63
  });
54
64
 
55
65
  afterEach(() => {
@@ -96,7 +106,6 @@ describe('Identity', () => {
96
106
  data: Buffer.alloc(36).fill('a'),
97
107
  purpose: KeyPurpose.AUTHENTICATION,
98
108
  securityLevel: KeySecurityLevel.MASTER,
99
- signature: Buffer.alloc(36).fill('a'),
100
109
  readOnly: false,
101
110
  };
102
111
 
@@ -145,8 +154,7 @@ describe('Identity', () => {
145
154
  const identityDataToEncode = identity.toObject();
146
155
  delete identityDataToEncode.protocolVersion;
147
156
 
148
- const protocolVersionUInt32 = Buffer.alloc(4);
149
- protocolVersionUInt32.writeUInt32LE(identity.getProtocolVersion(), 0);
157
+ varint.encode(identity.getProtocolVersion());
150
158
 
151
159
  expect(result).to.deep.equal(expectedHash);
152
160
  });
@@ -177,7 +185,6 @@ describe('Identity', () => {
177
185
  data: rawIdentity.publicKeys[0].data.toString('base64'),
178
186
  purpose: KeyPurpose.AUTHENTICATION,
179
187
  securityLevel: KeySecurityLevel.MASTER,
180
- signature: rawIdentity.publicKeys[0].signature.toString('base64'),
181
188
  readOnly: false,
182
189
  },
183
190
  ],
@@ -223,8 +230,18 @@ describe('Identity', () => {
223
230
 
224
231
  describe('#setMetadata', () => {
225
232
  it('should set metadata', () => {
226
- const otherMetadata = new Metadata(43, 1);
227
- const expectedMetadata = new Metadata(43, 1);
233
+ const otherMetadata = new Metadata({
234
+ blockHeight: 43,
235
+ coreChainLockedHeight: 1,
236
+ timeMs: 100,
237
+ protocolVersion: 2,
238
+ });
239
+ const expectedMetadata = new Metadata({
240
+ blockHeight: 43,
241
+ coreChainLockedHeight: 1,
242
+ timeMs: 100,
243
+ protocolVersion: 2,
244
+ });
228
245
 
229
246
  identity.setMetadata(otherMetadata);
230
247