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