@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,35 +1,40 @@
1
- const { getRE2Class } = require('@dashevo/wasm-re2');
2
-
3
1
  const DashCoreLib = require('@dashevo/dashcore-lib');
4
2
 
5
- const createAjv = require('@dashevo/dpp/lib/ajv/createAjv');
6
-
7
3
  const getInstantAssetLockFixture = require('@dashevo/dpp/lib/test/fixtures/getInstantAssetLockProofFixture');
8
- const JsonSchemaValidator = require('@dashevo/dpp/lib/validation/JsonSchemaValidator');
9
4
  const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
10
- const InvalidIdentityAssetLockProofError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidInstantAssetLockProofError');
11
- const IdentityAssetLockProofLockedTransactionMismatchError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/IdentityAssetLockProofLockedTransactionMismatchError');
12
- const InvalidIdentityAssetLockProofSignatureError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidInstantAssetLockProofSignatureError');
13
5
 
14
- const { expectValidationError, expectJsonSchemaError } = require(
15
- '@dashevo/dpp/lib/test/expect/expectError',
16
- );
6
+ const { expect } = require('chai');
7
+ const { expectJsonSchemaError, expectValidationError } = require('../../../../../../lib/test/expect/expectError');
17
8
 
18
- const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
19
- const InvalidIdentityAssetLockTransactionError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidIdentityAssetLockTransactionError');
20
- const validateInstantAssetLockProofStructureFactory = require('@dashevo/dpp/lib/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory');
9
+ const { default: loadWasmDpp } = require('../../../../../../dist');
21
10
 
22
11
  describe('validateInstantAssetLockProofStructureFactory', () => {
23
12
  let rawProof;
24
13
  let transaction;
25
14
  let stateRepositoryMock;
26
- let instantLockFromBufferMock;
27
- let instantLockMock;
15
+ let executionContext;
16
+
17
+ let StateTransitionExecutionContext;
18
+ let ValidationResult;
19
+ let InvalidInstantAssetLockProofError;
20
+ let IdentityAssetLockProofLockedTransactionMismatchError;
21
+ let InvalidInstantAssetLockProofSignatureError;
22
+ let InvalidIdentityAssetLockTransactionError;
23
+ let InstantAssetLockProofStructureValidator;
24
+
28
25
  let validateInstantAssetLockProofStructure;
29
- let jsonSchemaValidator;
30
- let validateAssetLockTransactionResult;
31
- let publicKeyHash;
32
- let validateAssetLockTransactionMock;
26
+
27
+ before(async () => {
28
+ ({
29
+ StateTransitionExecutionContext,
30
+ ValidationResult,
31
+ InvalidInstantAssetLockProofError,
32
+ IdentityAssetLockProofLockedTransactionMismatchError,
33
+ InvalidInstantAssetLockProofSignatureError,
34
+ InvalidIdentityAssetLockTransactionError,
35
+ InstantAssetLockProofStructureValidator,
36
+ } = await loadWasmDpp());
37
+ });
33
38
 
34
39
  beforeEach(async function beforeEach() {
35
40
  const assetLock = getInstantAssetLockFixture();
@@ -37,50 +42,26 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
37
42
 
38
43
  rawProof = assetLock.toObject();
39
44
 
40
- const RE2 = await getRE2Class();
41
- const ajv = createAjv(RE2);
42
-
43
- jsonSchemaValidator = new JsonSchemaValidator(ajv);
44
-
45
45
  stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
46
46
  stateRepositoryMock.verifyInstantLock.resolves(true);
47
+ stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.resolves(false);
47
48
 
48
- instantLockMock = {
49
- txid: transaction.id,
50
- verify: this.sinonSandbox.stub().resolves(true),
51
- };
49
+ executionContext = new StateTransitionExecutionContext();
52
50
 
53
- instantLockFromBufferMock = this.sinonSandbox.stub(DashCoreLib.InstantLock, 'fromBuffer').returns(instantLockMock);
54
-
55
- publicKeyHash = Buffer.from('152073ca2300a86b510fa2f123d3ea7da3af68dc', 'hex');
56
-
57
- validateAssetLockTransactionResult = new ValidationResult();
58
- validateAssetLockTransactionResult.setData({
59
- publicKeyHash,
60
- transaction,
61
- });
62
- validateAssetLockTransactionMock = this.sinonSandbox.stub().resolves(
63
- validateAssetLockTransactionResult,
64
- );
65
-
66
- validateInstantAssetLockProofStructure = validateInstantAssetLockProofStructureFactory(
67
- jsonSchemaValidator,
68
- stateRepositoryMock,
69
- validateAssetLockTransactionMock,
51
+ const validator = new InstantAssetLockProofStructureValidator(stateRepositoryMock);
52
+ validateInstantAssetLockProofStructure = (proof, context) => validator.validate(
53
+ proof,
54
+ context,
70
55
  );
71
56
  });
72
57
 
73
- afterEach(() => {
74
- instantLockFromBufferMock.restore();
75
- });
76
-
77
58
  describe('type', () => {
78
59
  it('should be present', async () => {
79
60
  delete rawProof.type;
80
61
 
81
- const result = await validateInstantAssetLockProofStructure(rawProof);
62
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
82
63
 
83
- expectJsonSchemaError(result);
64
+ await expectJsonSchemaError(result);
84
65
 
85
66
  const [error] = result.getErrors();
86
67
 
@@ -89,16 +70,14 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
89
70
  expect(error.getParams().missingProperty).to.equal('type');
90
71
 
91
72
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
92
- expect(instantLockMock.verify).to.not.be.called();
93
- expect(validateAssetLockTransactionMock).to.not.be.called();
94
73
  });
95
74
 
96
75
  it('should be equal to 0', async () => {
97
76
  rawProof.type = -1;
98
77
 
99
- const result = await validateInstantAssetLockProofStructure(rawProof);
78
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
100
79
 
101
- expectJsonSchemaError(result);
80
+ await expectJsonSchemaError(result);
102
81
 
103
82
  const [error] = result.getErrors();
104
83
 
@@ -106,8 +85,6 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
106
85
  expect(error.getKeyword()).to.equal('const');
107
86
 
108
87
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
109
- expect(instantLockMock.verify).to.not.be.called();
110
- expect(validateAssetLockTransactionMock).to.not.be.called();
111
88
  });
112
89
  });
113
90
 
@@ -115,9 +92,9 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
115
92
  it('should be present', async () => {
116
93
  delete rawProof.instantLock;
117
94
 
118
- const result = await validateInstantAssetLockProofStructure(rawProof);
95
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
119
96
 
120
- expectJsonSchemaError(result);
97
+ await expectJsonSchemaError(result);
121
98
 
122
99
  const [error] = result.getErrors();
123
100
 
@@ -126,35 +103,29 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
126
103
  expect(error.getParams().missingProperty).to.equal('instantLock');
127
104
 
128
105
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
129
- expect(instantLockMock.verify).to.not.be.called();
130
- expect(validateAssetLockTransactionMock).to.not.be.called();
131
106
  });
132
107
 
133
108
  it('should be a byte array', async () => {
134
109
  rawProof.instantLock = new Array(165).fill('string');
135
110
 
136
- const result = await validateInstantAssetLockProofStructure(rawProof);
111
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
137
112
 
138
- expectJsonSchemaError(result, 2);
113
+ await expectJsonSchemaError(result, 165);
139
114
 
140
- const [error, byteArrayError] = result.getErrors();
115
+ const [error] = result.getErrors();
141
116
 
142
117
  expect(error.getInstancePath()).to.equal('/instantLock/0');
143
118
  expect(error.getKeyword()).to.equal('type');
144
119
 
145
- expect(byteArrayError.getKeyword()).to.equal('byteArray');
146
-
147
120
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
148
- expect(instantLockMock.verify).to.not.be.called();
149
- expect(validateAssetLockTransactionMock).to.not.be.called();
150
121
  });
151
122
 
152
123
  it('should not be shorter than 160 bytes', async () => {
153
124
  rawProof.instantLock = Buffer.alloc(159);
154
125
 
155
- const result = await validateInstantAssetLockProofStructure(rawProof);
126
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
156
127
 
157
- expectJsonSchemaError(result);
128
+ await expectJsonSchemaError(result);
158
129
 
159
130
  const [error] = result.getErrors();
160
131
 
@@ -162,16 +133,14 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
162
133
  expect(error.getKeyword()).to.equal('minItems');
163
134
 
164
135
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
165
- expect(instantLockMock.verify).to.not.be.called();
166
- expect(validateAssetLockTransactionMock).to.not.be.called();
167
136
  });
168
137
 
169
138
  it('should not be longer than 100 Kb', async () => {
170
139
  rawProof.instantLock = Buffer.alloc(100001);
171
140
 
172
- const result = await validateInstantAssetLockProofStructure(rawProof);
141
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
173
142
 
174
- expectJsonSchemaError(result);
143
+ await expectJsonSchemaError(result);
175
144
 
176
145
  const [error] = result.getErrors();
177
146
 
@@ -179,37 +148,34 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
179
148
  expect(error.getKeyword()).to.equal('maxItems');
180
149
 
181
150
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
182
- expect(instantLockMock.verify).to.not.be.called();
183
- expect(validateAssetLockTransactionMock).to.not.be.called();
184
151
  });
185
152
 
186
153
  it('should be valid', async () => {
187
- const instantLockError = new Error('something is wrong');
188
-
189
- instantLockFromBufferMock.throws(instantLockError);
190
-
191
154
  rawProof.instantLock = Buffer.alloc(200);
192
155
 
193
- const result = await validateInstantAssetLockProofStructure(rawProof);
194
- expectValidationError(result, InvalidIdentityAssetLockProofError);
156
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
157
+ await expectValidationError(result, InvalidInstantAssetLockProofError);
195
158
 
196
159
  const [error] = result.getErrors();
197
160
 
198
161
  expect(error.getCode()).to.equal(1041);
199
- expect(error.getValidationError()).to.equal(instantLockError);
200
162
 
201
163
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
202
- expect(instantLockMock.verify).to.not.be.called();
203
- expect(validateAssetLockTransactionMock).to.not.be.called();
204
164
  });
205
165
 
206
166
  it('should lock the same transaction', async () => {
207
167
  const txId = Buffer.alloc(32);
208
- instantLockMock.txid = txId.toString('hex');
209
168
 
210
- const result = await validateInstantAssetLockProofStructure(rawProof);
169
+ const instantLockParsed = new DashCoreLib.InstantLock(rawProof.instantLock);
170
+ instantLockParsed.txid = txId.toString('hex');
171
+ rawProof.instantLock = instantLockParsed.toBuffer();
172
+
173
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
211
174
 
212
- expectValidationError(result, IdentityAssetLockProofLockedTransactionMismatchError);
175
+ await expectValidationError(
176
+ result,
177
+ IdentityAssetLockProofLockedTransactionMismatchError,
178
+ );
213
179
 
214
180
  const [error] = result.getErrors();
215
181
 
@@ -217,24 +183,24 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
217
183
  expect(error.getInstantLockTransactionId()).to.deep.equal(txId);
218
184
  expect(error.getAssetLockTransactionId()).to.deep.equal(Buffer.from(transaction.id, 'hex'));
219
185
 
220
- // expect(stateRepositoryMock.verifyInstantLock).to.be.calledOnce();
221
- expect(instantLockMock.verify).to.not.be.called();
222
- expect(validateAssetLockTransactionMock).to.be.calledOnce();
186
+ expect(stateRepositoryMock.verifyInstantLock).to.be.calledOnce();
223
187
  });
224
188
 
225
189
  it('should have valid signature', async () => {
226
190
  stateRepositoryMock.verifyInstantLock.resolves(false);
227
191
 
228
- const result = await validateInstantAssetLockProofStructure(rawProof);
192
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
229
193
 
230
- expectValidationError(result, InvalidIdentityAssetLockProofSignatureError);
194
+ await expectValidationError(
195
+ result,
196
+ InvalidInstantAssetLockProofSignatureError,
197
+ );
231
198
 
232
199
  const [error] = result.getErrors();
233
200
 
234
201
  expect(error.getCode()).to.equal(1042);
235
202
 
236
203
  expect(stateRepositoryMock.verifyInstantLock).to.be.calledOnce();
237
- expect(validateAssetLockTransactionMock).to.not.be.called();
238
204
  });
239
205
  });
240
206
 
@@ -242,9 +208,9 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
242
208
  it('should be present', async () => {
243
209
  delete rawProof.transaction;
244
210
 
245
- const result = await validateInstantAssetLockProofStructure(rawProof);
211
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
246
212
 
247
- expectJsonSchemaError(result);
213
+ await expectJsonSchemaError(result);
248
214
 
249
215
  const [error] = result.getErrors();
250
216
 
@@ -253,88 +219,66 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
253
219
  expect(error.getParams().missingProperty).to.equal('transaction');
254
220
 
255
221
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
256
- expect(instantLockMock.verify).to.not.be.called();
257
- expect(validateAssetLockTransactionMock).to.not.be.called();
258
222
  });
259
223
 
260
224
  it('should be a byte array', async () => {
261
225
  rawProof.transaction = new Array(65).fill('string');
262
226
 
263
- const result = await validateInstantAssetLockProofStructure(rawProof);
227
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
264
228
 
265
- expectJsonSchemaError(result, 2);
229
+ await expectJsonSchemaError(result, 65);
266
230
 
267
- const [error, byteArrayError] = result.getErrors();
231
+ const [error] = result.getErrors();
268
232
 
269
233
  expect(error.getInstancePath()).to.equal('/transaction/0');
270
234
  expect(error.getKeyword()).to.equal('type');
271
235
 
272
- expect(byteArrayError.getKeyword()).to.equal('byteArray');
273
-
274
236
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
275
- expect(instantLockMock.verify).to.not.be.called();
276
- expect(validateAssetLockTransactionMock).to.not.be.called();
277
237
  });
278
238
 
279
239
  it('should not be shorter than 1 byte', async () => {
280
240
  rawProof.transaction = Buffer.alloc(0);
281
241
 
282
- const result = await validateInstantAssetLockProofStructure(rawProof);
242
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
283
243
 
284
- expectJsonSchemaError(result);
244
+ await expectJsonSchemaError(result);
285
245
 
286
246
  const [error] = result.getErrors();
287
247
 
288
- expect(error.instancePath).to.equal('/transaction');
248
+ expect(error.getInstancePath()).to.equal('/transaction');
289
249
  expect(error.getKeyword()).to.equal('minItems');
290
250
 
291
251
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
292
- expect(instantLockMock.verify).to.not.be.called();
293
- expect(validateAssetLockTransactionMock).to.not.be.called();
294
252
  });
295
253
 
296
254
  it('should not be longer than 100 Kb', async () => {
297
255
  rawProof.transaction = Buffer.alloc(100001);
298
256
 
299
- const result = await validateInstantAssetLockProofStructure(rawProof);
257
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
300
258
 
301
- expectJsonSchemaError(result);
259
+ await expectJsonSchemaError(result);
302
260
 
303
261
  const [error] = result.getErrors();
304
262
 
305
- expect(error.instancePath).to.equal('/transaction');
263
+ expect(error.getInstancePath()).to.equal('/transaction');
306
264
  expect(error.getKeyword()).to.equal('maxItems');
307
265
 
308
266
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
309
- expect(instantLockMock.verify).to.not.be.called();
310
- expect(validateAssetLockTransactionMock).to.not.be.called();
311
267
  });
312
268
 
313
269
  it('should should be valid', async () => {
314
- const validationError = new Error('parsing failed');
315
-
316
- const consensusError = new InvalidIdentityAssetLockTransactionError(validationError.message);
270
+ rawProof.transaction = Buffer.alloc(1000);
317
271
 
318
- consensusError.setValidationError(validationError);
272
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
319
273
 
320
- validateAssetLockTransactionResult.addError(consensusError);
321
- validateAssetLockTransactionMock.resolves(validateAssetLockTransactionResult);
322
-
323
- const result = await validateInstantAssetLockProofStructure(rawProof);
324
-
325
- expectValidationError(result, InvalidIdentityAssetLockTransactionError);
274
+ await expectValidationError(result, InvalidIdentityAssetLockTransactionError);
326
275
 
327
276
  const [error] = result.getErrors();
328
277
 
329
278
  expect(error.getCode()).to.equal(1038);
279
+ expect(error.getValidationError()).to.exist();
330
280
 
331
- expect(error).to.equal(consensusError);
332
-
333
- expect(error.getValidationError()).to.equal(validationError);
334
-
335
- // expect(stateRepositoryMock.verifyInstantLock).to.be.calledOnce();
336
- expect(instantLockMock.verify).to.not.be.called();
337
- expect(validateAssetLockTransactionMock).to.be.calledOnce();
281
+ expect(stateRepositoryMock.verifyInstantLock).to.be.calledOnce();
338
282
  });
339
283
  });
340
284
 
@@ -342,60 +286,62 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
342
286
  it('should be present', async () => {
343
287
  delete rawProof.outputIndex;
344
288
 
345
- const result = await validateInstantAssetLockProofStructure(rawProof);
289
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
346
290
 
347
- expectJsonSchemaError(result);
291
+ await expectJsonSchemaError(result);
348
292
 
349
293
  const [error] = result.getErrors();
350
294
 
351
- expect(error.instancePath).to.equal('');
295
+ expect(error.getInstancePath()).to.equal('');
352
296
  expect(error.getKeyword()).to.equal('required');
353
297
  expect(error.getParams().missingProperty).to.equal('outputIndex');
354
298
 
355
299
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
356
- expect(instantLockMock.verify).to.not.be.called();
357
300
  });
358
301
 
359
302
  it('should be an integer', async () => {
360
303
  rawProof.outputIndex = 1.1;
361
304
 
362
- const result = await validateInstantAssetLockProofStructure(rawProof);
305
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
363
306
 
364
- expectJsonSchemaError(result, 1);
307
+ await expectJsonSchemaError(result, 1);
365
308
 
366
309
  const [error] = result.getErrors();
367
310
 
368
- expect(error.instancePath).to.equal('/outputIndex');
311
+ expect(error.getInstancePath()).to.equal('/outputIndex');
369
312
  expect(error.getKeyword()).to.equal('type');
370
313
 
371
314
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
372
- expect(instantLockMock.verify).to.not.be.called();
373
315
  });
374
316
 
375
317
  it('should not be less than 0', async () => {
376
318
  rawProof.outputIndex = -1;
377
319
 
378
- const result = await validateInstantAssetLockProofStructure(rawProof);
320
+ const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
379
321
 
380
- expectJsonSchemaError(result);
322
+ await expectJsonSchemaError(result);
381
323
 
382
324
  const [error] = result.getErrors();
383
325
 
384
- expect(error.instancePath).to.equal('/outputIndex');
326
+ expect(error.getInstancePath()).to.equal('/outputIndex');
385
327
  expect(error.getKeyword()).to.equal('minimum');
386
328
 
387
329
  expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
388
- expect(instantLockMock.verify).to.not.be.called();
389
330
  });
390
331
  });
391
332
 
392
333
  it('should return valid result', async () => {
393
- const result = await validateInstantAssetLockProofStructure(rawProof);
334
+ const result = await validateInstantAssetLockProofStructure(
335
+ rawProof,
336
+ executionContext,
337
+ );
394
338
 
395
339
  expect(result).to.be.an.instanceOf(ValidationResult);
396
340
  expect(result.isValid()).to.be.true();
341
+
342
+ const publicKeyHash = transaction.outputs[0].script.getData();
397
343
  expect(result.getData()).to.deep.equal(publicKeyHash);
398
344
 
399
- // expect(stateRepositoryMock.verifyInstantLock).to.be.calledOnce();
345
+ expect(stateRepositoryMock.verifyInstantLock).to.be.calledOnce();
400
346
  });
401
347
  });