@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,94 +1,90 @@
1
- const bs58 = require('bs58');
2
- const AbstractDocumentTransition = require('@dashevo/dpp/lib/document/stateTransition/DocumentsBatchTransition/documentTransition/AbstractDocumentTransition');
3
-
4
- const generateRandomIdentifier = require('@dashevo/dpp/lib/test/utils/generateRandomIdentifier');
5
-
6
- const DataTrigger = require('@dashevo/dpp/lib/dataTrigger/DataTrigger');
7
- const DataTriggerExecutionResult = require('@dashevo/dpp/lib/dataTrigger/DataTriggerExecutionResult');
8
- const DataTriggerExecutionContext = require('@dashevo/dpp/lib/dataTrigger/DataTriggerExecutionContext');
1
+ const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
2
+ const dpnsSystemIds = require('@dashevo/dpns-contract/lib/systemIds');
9
3
  const getDpnsContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDpnsContractFixture');
10
4
  const dpnsDocumentFixture = require('@dashevo/dpp/lib/test/fixtures/getDpnsDocumentFixture');
11
5
  const getDocumentsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentsFixture');
12
6
  const getDocumentTransitionsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentTransitionsFixture');
13
7
  const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
14
8
 
15
- const dpnsCreateDomainDataTrigger = require('@dashevo/dpp/lib/dataTrigger/dpnsTriggers/createDomainDataTrigger');
16
- const dpnsDeleteDomainDataTrigger = require('@dashevo/dpp/lib/dataTrigger/dpnsTriggers/createDomainDataTrigger');
17
- const dpnsUpdateDomainDataTrigger = require('@dashevo/dpp/lib/dataTrigger/dpnsTriggers/createDomainDataTrigger');
9
+ const IdentifierJs = require('@dashevo/dpp/lib/identifier/Identifier');
18
10
 
19
- const executeDataTriggersFactory = require('@dashevo/dpp/lib/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory');
11
+ const { default: loadWasmDpp } = require('../../../../../../../dist');
20
12
 
21
- const Identifier = require('@dashevo/dpp/lib/identifier/Identifier');
13
+ let DataContract;
14
+ let DocumentTransition;
15
+ let DocumentCreateTransition;
16
+ let DataTriggerExecutionContext;
17
+ let Document;
18
+ let DataTriggerExecutionResult;
19
+ let StateTransitionExecutionContext;
20
+ let getAllDataTriggers;
22
21
 
23
22
  describe('executeDataTriggersFactory', () => {
23
+ let childDocumentJs;
24
24
  let childDocument;
25
25
  let contractMock;
26
-
27
- let dpnsTriggers;
28
-
29
- let domainDocumentType;
30
-
31
- let stateTransitionHeaderMock;
26
+ let stateTransitionExecutionContext;
32
27
  let context;
33
28
  let documentTransitions;
34
- let dpnsCreateDomainDataTriggerMock;
35
- let dpnsUpdateDomainDataTriggerMock;
36
- let dpnsDeleteDomainDataTriggerMock;
37
- let getDataTriggersMock;
38
29
 
39
30
  let executeDataTriggers;
31
+ let dataContractJs;
40
32
  let dataContract;
33
+ let stateRepositoryMock;
41
34
 
42
- beforeEach(function beforeEach() {
43
- dataContract = getDataContractFixture();
44
-
45
- domainDocumentType = 'domain';
35
+ beforeEach(async function beforeEach() {
36
+ ({
37
+ DataContract,
38
+ DocumentTransition,
39
+ DocumentCreateTransition,
40
+ DataTriggerExecutionContext,
41
+ Document,
42
+ DataTriggerExecutionResult,
43
+ StateTransitionExecutionContext,
44
+ executeDataTriggers,
45
+ getAllDataTriggers,
46
+ } = await loadWasmDpp());
46
47
 
47
- dpnsTriggers = [
48
- dpnsCreateDomainDataTrigger,
49
- dpnsDeleteDomainDataTrigger,
50
- dpnsUpdateDomainDataTrigger,
51
- ];
52
-
53
- contractMock = getDpnsContractFixture();
54
-
55
- childDocument = dpnsDocumentFixture.getChildDocumentFixture();
48
+ dataContractJs = getDataContractFixture();
49
+ dataContract = new DataContract(dataContractJs.toObject());
56
50
 
57
- dpnsCreateDomainDataTriggerMock = { execute: this.sinonSandbox.stub() };
58
- dpnsUpdateDomainDataTriggerMock = { execute: this.sinonSandbox.stub() };
59
- dpnsDeleteDomainDataTriggerMock = { execute: this.sinonSandbox.stub() };
51
+ contractMock = new DataContract(getDpnsContractFixture().toObject());
60
52
 
61
- dpnsCreateDomainDataTriggerMock
62
- .execute.resolves(new DataTriggerExecutionResult());
53
+ childDocumentJs = dpnsDocumentFixture.getChildDocumentFixture();
54
+ childDocument = new Document(childDocumentJs.toObject(),
55
+ dataContract.clone());
63
56
 
64
- dpnsUpdateDomainDataTriggerMock
65
- .execute.resolves(new DataTriggerExecutionResult());
57
+ stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
66
58
 
67
- dpnsDeleteDomainDataTriggerMock
68
- .execute.resolves(new DataTriggerExecutionResult());
59
+ contractMock.setId(dpnsSystemIds.contractId);
60
+ stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
61
+ stateRepositoryMock.fetchDocuments.resolves([childDocument]);
69
62
 
70
- const ownerId = bs58.decode('5zcXZpTLWFwZjKjq3ME5KVavtZa9YUaZESVzrndehBhq');
63
+ stateTransitionExecutionContext = new StateTransitionExecutionContext();
64
+ stateTransitionExecutionContext.disableDryRun();
71
65
 
72
66
  context = new DataTriggerExecutionContext(
73
- null, ownerId, contractMock,
67
+ stateRepositoryMock,
68
+ childDocument.getOwnerId(),
69
+ contractMock.clone(),
70
+ stateTransitionExecutionContext,
74
71
  );
75
72
 
76
- documentTransitions = getDocumentTransitionsFixture({
77
- create: [childDocument],
73
+ const documentTransitionsJs = getDocumentTransitionsFixture({
74
+ create: [childDocumentJs],
78
75
  });
79
76
 
80
- getDataTriggersMock = this.sinonSandbox.stub();
81
-
82
- getDataTriggersMock.returns([
83
- dpnsCreateDomainDataTriggerMock,
84
- ]);
85
-
86
- executeDataTriggers = executeDataTriggersFactory(getDataTriggersMock);
77
+ documentTransitions = documentTransitionsJs.map((transition) => {
78
+ const transitionCreate = new DocumentCreateTransition(
79
+ transition.toObject(), dataContract.clone(),
80
+ );
81
+ return DocumentTransition.fromTransitionCreate(transitionCreate);
82
+ });
87
83
  });
88
84
 
89
- it('should return an array of DataTriggerExecutionResult', async () => {
85
+ it('should return an array of DataTriggerExecutionResult - Rust', async () => {
90
86
  const dataTriggerExecutionResults = await executeDataTriggers(
91
- documentTransitions, context,
87
+ documentTransitions, context, getAllDataTriggers(),
92
88
  );
93
89
 
94
90
  expect(dataTriggerExecutionResults).to.have.a.lengthOf(1);
@@ -100,195 +96,97 @@ describe('executeDataTriggersFactory', () => {
100
96
  expect(result.isOk()).to.be.true();
101
97
  });
102
98
 
103
- it('should execute multiple data triggers if there is more than one data trigger for'
104
- + ' the same document and action in the contract', async () => {
105
- getDataTriggersMock.returns([
106
- dpnsCreateDomainDataTriggerMock,
107
- dpnsCreateDomainDataTriggerMock,
108
- dpnsCreateDomainDataTriggerMock,
109
- ]);
99
+ it('should return multiple data triggers if there is more than one data trigger for'
100
+ + ' the same document and action in the contract - Rust', async () => {
101
+ const dataTriggersList = getAllDataTriggers();
102
+ const dataTriggerListWithDuplicates = [
103
+ dataTriggersList[0],
104
+ dataTriggersList[0],
105
+ dataTriggersList[0],
106
+ ];
110
107
 
111
108
  const expectedTriggersCount = 3;
112
- expect(dpnsTriggers.length).to.equal(expectedTriggersCount);
113
-
114
109
  const dataTriggerExecutionResults = await executeDataTriggers(
115
- documentTransitions, context,
110
+ documentTransitions, context, dataTriggerListWithDuplicates,
116
111
  );
117
112
 
118
113
  expect(dataTriggerExecutionResults).to.have.a.lengthOf(expectedTriggersCount);
119
-
120
- dataTriggerExecutionResults.forEach((dataTriggerExecutionResult) => {
121
- expect(dataTriggerExecutionResult.getErrors()).to.have.a.lengthOf(0);
122
- });
123
114
  });
124
115
 
125
- it('should return a result for each passed document with success or error', async function test() {
126
- const doc1 = getDocumentsFixture(dataContract)[0];
127
- const doc2 = getDocumentsFixture(dataContract)[1];
128
-
129
- documentTransitions = getDocumentTransitionsFixture({
130
- create: [doc1, doc1],
131
- replace: [doc2],
132
- });
116
+ it('should return a result for each passed document with success or error - Rust', async () => {
117
+ const documentTransition = documentTransitions[0];
118
+ const rawDocumentTransition = documentTransition.toObject();
119
+ rawDocumentTransition.normalizedLabel = 'a'.repeat(257);
133
120
 
134
- const passingExecutionResult = new DataTriggerExecutionResult();
135
- const executionResultWithErrors = new DataTriggerExecutionResult();
136
-
137
- executionResultWithErrors.addError(new Error('Trigger error'));
138
-
139
- const passingTriggerMockFunction = this.sinonSandbox.stub()
140
- .resolves(passingExecutionResult);
141
- const throwingTriggerMockFunction = this.sinonSandbox.stub()
142
- .resolves(executionResultWithErrors);
143
-
144
- const passingDataTriggerMock = new DataTrigger(
145
- contractMock.getId(),
146
- doc1.getType(),
147
- AbstractDocumentTransition.ACTIONS.CREATE,
148
- passingTriggerMockFunction,
121
+ const invalidDocumentCreateTransition = new DocumentCreateTransition(
122
+ rawDocumentTransition, dataContract.clone(),
149
123
  );
150
-
151
- const throwingDataTriggerMock = new DataTrigger(
152
- contractMock.getId(),
153
- doc2.getType(),
154
- AbstractDocumentTransition.ACTIONS.REPLACE,
155
- throwingTriggerMockFunction,
156
- );
157
-
158
- getDataTriggersMock
159
- .withArgs(contractMock.getId(), doc1.getType(), AbstractDocumentTransition.ACTIONS.CREATE)
160
- .returns([passingDataTriggerMock]);
161
-
162
- getDataTriggersMock
163
- .withArgs(contractMock.getId(), doc2.getType(), AbstractDocumentTransition.ACTIONS.REPLACE)
164
- .returns([throwingDataTriggerMock]);
165
-
166
- context = new DataTriggerExecutionContext(
167
- null, generateRandomIdentifier(), contractMock, stateTransitionHeaderMock,
124
+ const invalidDocumentTransition = DocumentTransition.fromTransitionCreate(
125
+ invalidDocumentCreateTransition,
168
126
  );
169
127
 
170
128
  const dataTriggerExecutionResults = await executeDataTriggers(
171
- documentTransitions, context,
129
+ [documentTransition, invalidDocumentTransition], context, getAllDataTriggers(),
172
130
  );
173
131
 
174
- const expectedResultsCount = 3;
175
-
176
- expect(documentTransitions.length).to.equal(expectedResultsCount);
177
- expect(dataTriggerExecutionResults.length).to.equal(expectedResultsCount);
178
-
179
- const passingResults = dataTriggerExecutionResults.filter((result) => result.isOk());
180
- const failingResults = dataTriggerExecutionResults.filter((result) => !result.isOk());
132
+ expect(dataTriggerExecutionResults).to.have.a.lengthOf(2);
181
133
 
182
- expect(passingResults).to.have.a.lengthOf(2);
183
- expect(failingResults).to.have.a.lengthOf(1);
184
-
185
- expect(failingResults[0].getErrors()).to.have.a.lengthOf(1);
186
- expect(failingResults[0].getErrors()[0].message).to
187
- .equal('Trigger error');
188
-
189
- expect(passingTriggerMockFunction.callCount).to.equal(2);
190
- expect(throwingTriggerMockFunction.callCount).to.equal(1);
134
+ const [validResult, invalidResult] = dataTriggerExecutionResults;
135
+ expect(validResult.isOk()).to.be.true();
136
+ expect(invalidResult.isOk()).to.be.false();
191
137
  });
192
138
 
193
- it("should not call any triggers if documents have no triggers associated with it's type or action", async () => {
194
- getDataTriggersMock
195
- .withArgs(
196
- contractMock.getId(),
197
- domainDocumentType,
198
- AbstractDocumentTransition.ACTIONS.CREATE,
199
- )
200
- .returns([])
201
- .withArgs(
202
- contractMock.getId(),
203
- domainDocumentType,
204
- AbstractDocumentTransition.ACTIONS.DELETE,
205
- )
206
- .returns([dpnsDeleteDomainDataTriggerMock])
207
- .withArgs(
208
- contractMock.getId(),
209
- domainDocumentType,
210
- AbstractDocumentTransition.ACTIONS.REPLACE,
211
- )
212
- .returns([dpnsUpdateDomainDataTriggerMock]);
213
-
214
- await executeDataTriggers(documentTransitions, context);
215
-
216
- expect(dpnsDeleteDomainDataTriggerMock.execute).not.to.be.called();
217
- expect(dpnsUpdateDomainDataTriggerMock.execute).not.to.be.called();
139
+ it("should not call any triggers if documents have no triggers associated with it's type or action - Rust", async () => {
140
+ const dataTriggers = [getAllDataTriggers()[1]];
141
+ const dataTriggerExecutionResults = await executeDataTriggers(
142
+ documentTransitions, context, dataTriggers,
143
+ );
144
+
145
+ expect(dataTriggerExecutionResults).to.have.a.lengthOf(0);
218
146
  });
219
147
 
220
- it("should call only one trigger if there's one document with a trigger and one without", async () => {
148
+ it("should call only one trigger if there's one document with a trigger and one without - Rust", async () => {
221
149
  const dataContractId = getDataContractFixture().getId();
222
- childDocument.dataContractId = dataContractId;
223
- childDocument.dataContract.id = dataContractId;
224
- childDocument.ownerId = Identifier.from(
150
+ childDocumentJs.dataContractId = dataContractId;
151
+ childDocumentJs.dataContract.id = dataContractId;
152
+ childDocumentJs.ownerId = IdentifierJs.from(
225
153
  getDocumentsFixture.ownerId,
226
154
  );
227
155
 
228
- documentTransitions = getDocumentTransitionsFixture({
229
- create: [childDocument].concat(getDocumentsFixture(dataContract)),
156
+ const documentTransitionsJs = getDocumentTransitionsFixture({
157
+ create: [childDocumentJs].concat(getDocumentsFixture(dataContractJs)),
230
158
  });
231
159
 
232
- getDataTriggersMock.resetBehavior();
233
- getDataTriggersMock
234
- .returns([])
235
- .withArgs(
236
- contractMock.getId(),
237
- domainDocumentType,
238
- AbstractDocumentTransition.ACTIONS.CREATE,
239
- )
240
- .returns([dpnsCreateDomainDataTriggerMock])
241
- .withArgs(
242
- contractMock.getId(),
243
- domainDocumentType,
244
- AbstractDocumentTransition.ACTIONS.DELETE,
245
- )
246
- .returns([dpnsDeleteDomainDataTriggerMock])
247
- .withArgs(
248
- contractMock.getId(),
249
- domainDocumentType,
250
- AbstractDocumentTransition.ACTIONS.REPLACE,
251
- )
252
- .returns([dpnsUpdateDomainDataTriggerMock]);
253
-
254
- await executeDataTriggers(documentTransitions, context);
255
-
256
- expect(dpnsCreateDomainDataTriggerMock.execute).to.be.calledOnce();
257
- expect(dpnsDeleteDomainDataTriggerMock.execute).not.to.be.called();
258
- expect(dpnsUpdateDomainDataTriggerMock.execute).not.to.be.called();
160
+ documentTransitions = documentTransitionsJs.map((transition) => {
161
+ const transitionCreate = new DocumentCreateTransition(
162
+ transition.toObject(), dataContract.clone(),
163
+ );
164
+ return DocumentTransition.fromTransitionCreate(transitionCreate);
165
+ });
166
+
167
+ const dataTriggerExecutionResults = await executeDataTriggers(
168
+ documentTransitions, context, getAllDataTriggers(),
169
+ );
170
+
171
+ expect(dataTriggerExecutionResults).to.have.a.lengthOf(1);
259
172
  });
260
173
 
261
- it("should not call any triggers if there's no triggers in the contract", async () => {
262
- documentTransitions = getDocumentTransitionsFixture({
263
- create: getDocumentsFixture(dataContract),
174
+ it("should not call any triggers if there's no triggers in the contract - Rust", async () => {
175
+ const documentTransitionsJs = getDocumentTransitionsFixture({
176
+ create: getDocumentsFixture(dataContractJs),
264
177
  });
265
178
 
266
- getDataTriggersMock.resetBehavior();
267
- getDataTriggersMock
268
- .returns([])
269
- .withArgs(
270
- contractMock.getId(),
271
- domainDocumentType,
272
- AbstractDocumentTransition.ACTIONS.CREATE,
273
- )
274
- .returns([dpnsCreateDomainDataTriggerMock])
275
- .withArgs(
276
- contractMock.getId(),
277
- domainDocumentType,
278
- AbstractDocumentTransition.ACTIONS.DELETE,
279
- )
280
- .returns([dpnsDeleteDomainDataTriggerMock])
281
- .withArgs(
282
- contractMock.getId(),
283
- domainDocumentType,
284
- AbstractDocumentTransition.ACTIONS.REPLACE,
285
- )
286
- .returns([dpnsUpdateDomainDataTriggerMock]);
287
-
288
- await executeDataTriggers(documentTransitions, context);
289
-
290
- expect(dpnsCreateDomainDataTriggerMock.execute).not.to.be.called();
291
- expect(dpnsDeleteDomainDataTriggerMock.execute).not.to.be.called();
292
- expect(dpnsUpdateDomainDataTriggerMock.execute).not.to.be.called();
179
+ documentTransitions = documentTransitionsJs.map((transition) => {
180
+ const transitionCreate = new DocumentCreateTransition(
181
+ transition.toObject(), dataContract.clone(),
182
+ );
183
+ return DocumentTransition.fromTransitionCreate(transitionCreate);
184
+ });
185
+
186
+ const dataTriggerExecutionResults = await executeDataTriggers(
187
+ documentTransitions, context, getAllDataTriggers(),
188
+ );
189
+
190
+ expect(dataTriggerExecutionResults).to.have.a.lengthOf(0);
293
191
  });
294
192
  });