@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,51 +1,58 @@
1
- const { getRE2Class } = require('@dashevo/wasm-re2');
2
-
3
- const createAjv = require('@dashevo/dpp/lib/ajv/createAjv');
1
+ const { Transaction, Script, PrivateKey } = require('@dashevo/dashcore-lib');
4
2
 
5
3
  const getChainAssetLockFixture = require('@dashevo/dpp/lib/test/fixtures/getChainAssetLockProofFixture');
6
- const JsonSchemaValidator = require('@dashevo/dpp/lib/validation/JsonSchemaValidator');
7
4
  const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
8
5
 
9
- const { expectValidationError, expectJsonSchemaError } = require(
10
- '@dashevo/dpp/lib/test/expect/expectError',
11
- );
6
+ const { expect } = require('chai');
7
+ const { expectJsonSchemaError, expectValidationError } = require('../../../../../../lib/test/expect/expectError');
12
8
 
13
- const validateChainAssetLockProofStructureFactory = require('@dashevo/dpp/lib/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory');
14
- const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
15
- const IdentityAssetLockTransactionIsNotFoundError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/IdentityAssetLockTransactionIsNotFoundError');
16
- const InvalidAssetLockProofCoreChainHeightError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidAssetLockProofCoreChainHeightError');
17
- const InvalidAssetLockProofTransactionHeightError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidAssetLockProofTransactionHeightError');
18
- const SomeConsensusError = require('@dashevo/dpp/lib/test/mocks/SomeConsensusError');
19
- const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
9
+ const { default: loadWasmDpp } = require('../../../../../../dist');
20
10
 
21
11
  describe('validateChainAssetLockProofStructureFactory', () => {
22
12
  let rawProof;
23
13
  let stateRepositoryMock;
24
- let validateChainAssetLockProofStructure;
25
- let jsonSchemaValidator;
26
- let validateAssetLockTransactionMock;
27
- let validateAssetLockTransactionResult;
28
14
  let publicKeyHash;
29
15
  let rawTransaction;
30
16
  let transactionHash;
31
17
  let executionContext;
18
+ let validateChainAssetLockProofStructure;
19
+
20
+ let StateTransitionExecutionContext;
21
+ let ValidationResult;
22
+ let InvalidAssetLockProofCoreChainHeightError;
23
+ let IdentityAssetLockTransactionIsNotFoundError;
24
+ let InvalidIdentityAssetLockTransactionOutputError;
25
+ let InvalidAssetLockProofTransactionHeightError;
26
+ let ChainAssetLockProofStructureValidator;
27
+
28
+ before(async () => {
29
+ ({
30
+ StateTransitionExecutionContext,
31
+ ValidationResult,
32
+ InvalidAssetLockProofCoreChainHeightError,
33
+ IdentityAssetLockTransactionIsNotFoundError,
34
+ InvalidIdentityAssetLockTransactionOutputError,
35
+ InvalidAssetLockProofTransactionHeightError,
36
+ ChainAssetLockProofStructureValidator,
37
+ } = await loadWasmDpp());
38
+ });
32
39
 
33
40
  beforeEach(async function beforeEach() {
34
41
  rawTransaction = '030000000137feb5676d0851337ea3c9a992496aab7a0b3eee60aeeb9774000b7f4bababa5000000006b483045022100d91557de37645c641b948c6cd03b4ae3791a63a650db3e2fee1dcf5185d1b10402200e8bd410bf516ca61715867666d31e44495428ce5c1090bf2294a829ebcfa4ef0121025c3cc7fbfc52f710c941497fd01876c189171ea227458f501afcb38a297d65b4ffffffff021027000000000000166a14152073ca2300a86b510fa2f123d3ea7da3af68dcf77cb0090a0000001976a914152073ca2300a86b510fa2f123d3ea7da3af68dc88ac00000000';
35
42
  transactionHash = '6e200d059fb567ba19e92f5c2dcd3dde522fd4e0a50af223752db16158dabb1d';
36
43
 
37
- const assetLock = getChainAssetLockFixture();
38
-
39
- rawProof = assetLock.toObject();
40
-
41
- const RE2 = await getRE2Class();
42
- const ajv = createAjv(RE2);
44
+ rawProof = getChainAssetLockFixture().toObject();
43
45
 
44
- jsonSchemaValidator = new JsonSchemaValidator(ajv);
46
+ // Change endianness of raw txId bytes in outPoint to match expectation of dashcore-rust
47
+ const txId = rawProof.outPoint.slice(0, 32);
48
+ const outputIndex = rawProof.outPoint.slice(32);
49
+ txId.reverse();
50
+ rawProof.outPoint = Buffer.concat([txId, outputIndex]);
45
51
 
46
52
  stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
47
53
 
48
54
  stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight.resolves(42);
55
+ stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.resolves(false);
49
56
 
50
57
  stateRepositoryMock.fetchTransaction.resolves({
51
58
  data: Buffer.from(rawTransaction, 'hex'),
@@ -56,18 +63,14 @@ describe('validateChainAssetLockProofStructureFactory', () => {
56
63
 
57
64
  publicKeyHash = Buffer.from('152073ca2300a86b510fa2f123d3ea7da3af68dc', 'hex');
58
65
 
59
- validateAssetLockTransactionResult = new ValidationResult();
60
- validateAssetLockTransactionResult.setData({
61
- publicKeyHash,
62
- });
63
- validateAssetLockTransactionMock = this.sinonSandbox.stub().resolves(
64
- validateAssetLockTransactionResult,
66
+ const validator = new ChainAssetLockProofStructureValidator(
67
+ stateRepositoryMock,
65
68
  );
66
69
 
67
- validateChainAssetLockProofStructure = validateChainAssetLockProofStructureFactory(
68
- jsonSchemaValidator,
69
- stateRepositoryMock,
70
- validateAssetLockTransactionMock,
70
+ validateChainAssetLockProofStructure = (
71
+ proof, context,
72
+ ) => validator.validate(
73
+ rawProof, context,
71
74
  );
72
75
  });
73
76
 
@@ -80,7 +83,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
80
83
  executionContext,
81
84
  );
82
85
 
83
- expectJsonSchemaError(result);
86
+ await expectJsonSchemaError(result);
84
87
 
85
88
  const [error] = result.getErrors();
86
89
 
@@ -89,7 +92,6 @@ describe('validateChainAssetLockProofStructureFactory', () => {
89
92
  expect(error.getParams().missingProperty).to.equal('type');
90
93
 
91
94
  expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
92
- expect(validateAssetLockTransactionMock).to.not.be.called();
93
95
  expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
94
96
  });
95
97
 
@@ -101,7 +103,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
101
103
  executionContext,
102
104
  );
103
105
 
104
- expectJsonSchemaError(result);
106
+ await expectJsonSchemaError(result);
105
107
 
106
108
  const [error] = result.getErrors();
107
109
 
@@ -122,7 +124,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
122
124
  executionContext,
123
125
  );
124
126
 
125
- expectJsonSchemaError(result);
127
+ await expectJsonSchemaError(result);
126
128
 
127
129
  const [error] = result.getErrors();
128
130
 
@@ -131,7 +133,6 @@ describe('validateChainAssetLockProofStructureFactory', () => {
131
133
  expect(error.getParams().missingProperty).to.equal('coreChainLockedHeight');
132
134
 
133
135
  expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
134
- expect(validateAssetLockTransactionMock).to.not.be.called();
135
136
  expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
136
137
  });
137
138
 
@@ -143,7 +144,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
143
144
  executionContext,
144
145
  );
145
146
 
146
- expectJsonSchemaError(result);
147
+ await expectJsonSchemaError(result);
147
148
 
148
149
  const [error] = result.getErrors();
149
150
 
@@ -151,7 +152,6 @@ describe('validateChainAssetLockProofStructureFactory', () => {
151
152
  expect(error.getKeyword()).to.equal('type');
152
153
 
153
154
  expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
154
- expect(validateAssetLockTransactionMock).to.not.be.called();
155
155
  expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
156
156
  });
157
157
 
@@ -163,7 +163,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
163
163
  executionContext,
164
164
  );
165
165
 
166
- expectJsonSchemaError(result);
166
+ await expectJsonSchemaError(result);
167
167
 
168
168
  const [error] = result.getErrors();
169
169
 
@@ -171,7 +171,6 @@ describe('validateChainAssetLockProofStructureFactory', () => {
171
171
  expect(error.getKeyword()).to.equal('type');
172
172
 
173
173
  expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
174
- expect(validateAssetLockTransactionMock).to.not.be.called();
175
174
  expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
176
175
  });
177
176
 
@@ -183,7 +182,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
183
182
  executionContext,
184
183
  );
185
184
 
186
- expectJsonSchemaError(result);
185
+ await expectJsonSchemaError(result);
187
186
 
188
187
  const [error] = result.getErrors();
189
188
 
@@ -191,7 +190,6 @@ describe('validateChainAssetLockProofStructureFactory', () => {
191
190
  expect(error.getKeyword()).to.equal('minimum');
192
191
 
193
192
  expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
194
- expect(validateAssetLockTransactionMock).to.not.be.called();
195
193
  expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
196
194
  });
197
195
 
@@ -203,15 +201,14 @@ describe('validateChainAssetLockProofStructureFactory', () => {
203
201
  executionContext,
204
202
  );
205
203
 
206
- expectJsonSchemaError(result);
204
+ await expectJsonSchemaError(result);
207
205
 
208
206
  const [error] = result.getErrors();
209
207
 
210
- expect(error.instancePath).to.equal('/coreChainLockedHeight');
208
+ expect(error.getInstancePath()).to.equal('/coreChainLockedHeight');
211
209
  expect(error.getKeyword()).to.equal('maximum');
212
210
 
213
211
  expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
214
- expect(validateAssetLockTransactionMock).to.not.be.called();
215
212
  expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
216
213
  });
217
214
 
@@ -242,16 +239,15 @@ describe('validateChainAssetLockProofStructureFactory', () => {
242
239
  executionContext,
243
240
  );
244
241
 
245
- expectJsonSchemaError(result);
242
+ await expectJsonSchemaError(result);
246
243
 
247
244
  const [error] = result.getErrors();
248
245
 
249
- expect(error.instancePath).to.equal('');
246
+ expect(error.getInstancePath()).to.equal('');
250
247
  expect(error.getKeyword()).to.equal('required');
251
248
  expect(error.getParams().missingProperty).to.equal('outPoint');
252
249
 
253
250
  expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
254
- expect(validateAssetLockTransactionMock).to.not.be.called();
255
251
  expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
256
252
  });
257
253
 
@@ -263,17 +259,14 @@ describe('validateChainAssetLockProofStructureFactory', () => {
263
259
  executionContext,
264
260
  );
265
261
 
266
- expectJsonSchemaError(result, 2);
262
+ await expectJsonSchemaError(result, 36);
267
263
 
268
- const [error, byteArrayError] = result.getErrors();
264
+ const [error] = result.getErrors();
269
265
 
270
- expect(error.instancePath).to.equal('/outPoint/0');
266
+ expect(error.getInstancePath()).to.equal('/outPoint/0');
271
267
  expect(error.getKeyword()).to.equal('type');
272
268
 
273
- expect(byteArrayError.getKeyword()).to.equal('byteArray');
274
-
275
269
  expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
276
- expect(validateAssetLockTransactionMock).to.not.be.called();
277
270
  expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
278
271
  });
279
272
 
@@ -285,15 +278,14 @@ describe('validateChainAssetLockProofStructureFactory', () => {
285
278
  executionContext,
286
279
  );
287
280
 
288
- expectJsonSchemaError(result);
281
+ await expectJsonSchemaError(result);
289
282
 
290
283
  const [error] = result.getErrors();
291
284
 
292
- expect(error.instancePath).to.equal('/outPoint');
285
+ expect(error.getInstancePath()).to.equal('/outPoint');
293
286
  expect(error.getKeyword()).to.equal('minItems');
294
287
 
295
288
  expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
296
- expect(validateAssetLockTransactionMock).to.not.be.called();
297
289
  expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
298
290
  });
299
291
 
@@ -305,19 +297,18 @@ describe('validateChainAssetLockProofStructureFactory', () => {
305
297
  executionContext,
306
298
  );
307
299
 
308
- expectJsonSchemaError(result);
300
+ await expectJsonSchemaError(result);
309
301
 
310
302
  const [error] = result.getErrors();
311
303
 
312
- expect(error.instancePath).to.equal('/outPoint');
304
+ expect(error.getInstancePath()).to.equal('/outPoint');
313
305
  expect(error.getKeyword()).to.equal('maxItems');
314
306
 
315
307
  expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
316
- expect(validateAssetLockTransactionMock).to.not.be.called();
317
308
  expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
318
309
  });
319
310
 
320
- it('should point to existing transaction', async () => {
311
+ it('should point to existing transaction', async function () {
321
312
  stateRepositoryMock.fetchTransaction.resolves(null);
322
313
 
323
314
  const result = await validateChainAssetLockProofStructure(
@@ -325,7 +316,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
325
316
  executionContext,
326
317
  );
327
318
 
328
- expectValidationError(result, IdentityAssetLockTransactionIsNotFoundError);
319
+ await expectValidationError(result, IdentityAssetLockTransactionIsNotFoundError);
329
320
 
330
321
  const [error] = result.getErrors();
331
322
 
@@ -336,30 +327,34 @@ describe('validateChainAssetLockProofStructureFactory', () => {
336
327
 
337
328
  expect(stateRepositoryMock.fetchTransaction).to.be.calledOnceWithExactly(
338
329
  transactionHash,
339
- executionContext,
330
+ this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
340
331
  );
341
- expect(validateAssetLockTransactionMock).to.not.be.called();
342
332
  expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.be.calledOnce();
343
333
  });
344
334
 
345
335
  it('should point to valid transaction', async () => {
346
- const consensusError = new SomeConsensusError('test');
336
+ // Validator expects asset lock proof TX to have OP_RETURN in it's first output, break it
337
+ const parsedTx = new Transaction(Buffer.from(rawTransaction, 'hex'));
338
+ const fromAddress = new PrivateKey().toAddress();
339
+ parsedTx.outputs[0].setScript(Script.buildPublicKeyHashOut(fromAddress).toString());
347
340
 
348
- validateAssetLockTransactionResult.addError(consensusError);
341
+ stateRepositoryMock.fetchTransaction.resolves({
342
+ data: parsedTx.toBuffer(),
343
+ height: 42,
344
+ });
349
345
 
350
346
  const result = await validateChainAssetLockProofStructure(
351
347
  rawProof,
352
348
  executionContext,
353
349
  );
354
350
 
355
- expectValidationError(result, SomeConsensusError);
356
-
357
- const [error] = result.getErrors();
358
-
359
- expect(error).to.deep.equal(consensusError);
351
+ await expectValidationError(
352
+ result,
353
+ InvalidIdentityAssetLockTransactionOutputError,
354
+ );
360
355
  });
361
356
 
362
- it('should point to transaction from block lower than core chain locked height', async () => {
357
+ it('should point to transaction from block lower than core chain locked height', async function () {
363
358
  rawProof.coreChainLockedHeight = 41;
364
359
  stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight.resolves(41);
365
360
 
@@ -368,7 +363,9 @@ describe('validateChainAssetLockProofStructureFactory', () => {
368
363
  executionContext,
369
364
  );
370
365
 
371
- expectValidationError(result, InvalidAssetLockProofTransactionHeightError);
366
+ await expectValidationError(
367
+ result, InvalidAssetLockProofTransactionHeightError,
368
+ );
372
369
 
373
370
  const [error] = result.getErrors();
374
371
 
@@ -378,14 +375,13 @@ describe('validateChainAssetLockProofStructureFactory', () => {
378
375
 
379
376
  expect(stateRepositoryMock.fetchTransaction).to.be.calledOnceWithExactly(
380
377
  transactionHash,
381
- executionContext,
378
+ this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
382
379
  );
383
- expect(validateAssetLockTransactionMock).to.not.be.called();
384
380
  expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.be.calledOnce();
385
381
  });
386
382
  });
387
383
 
388
- it('should return valid result', async () => {
384
+ it('should return valid result', async function () {
389
385
  const result = await validateChainAssetLockProofStructure(
390
386
  rawProof,
391
387
  executionContext,
@@ -397,13 +393,9 @@ describe('validateChainAssetLockProofStructureFactory', () => {
397
393
 
398
394
  expect(stateRepositoryMock.fetchTransaction).to.be.calledOnceWithExactly(
399
395
  transactionHash,
400
- executionContext,
401
- );
402
- expect(validateAssetLockTransactionMock).to.be.calledOnceWithExactly(
403
- Buffer.from(rawTransaction, 'hex'),
404
- 0,
405
- executionContext,
396
+ this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
406
397
  );
398
+
407
399
  expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.be.calledOnce();
408
400
  });
409
401
  });
@@ -1,32 +1,52 @@
1
- const { Transaction, Script } = require('@dashevo/dashcore-lib');
2
- const Output = require('@dashevo/dashcore-lib/lib/transaction/output');
1
+ const { Transaction } = require('@dashevo/dashcore-lib');
3
2
 
4
- const fetchAssetLockTransactionOutputFactory = require('@dashevo/dpp/lib/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory');
5
3
  const getChainAssetLockFixture = require('@dashevo/dpp/lib/test/fixtures/getChainAssetLockProofFixture');
6
4
  const getInstantAssetLockProofFixture = require('@dashevo/dpp/lib/test/fixtures/getInstantAssetLockProofFixture');
7
5
  const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
8
-
9
- const UnknownAssetLockProofError = require('@dashevo/dpp/lib/identity/errors/UnknownAssetLockProofTypeError');
10
- const AssetLockTransactionIsNotFoundError = require('@dashevo/dpp/lib/identity/errors/AssetLockTransactionIsNotFoundError');
11
- const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
6
+ const { default: loadWasmDpp } = require('../../../../../dist');
12
7
 
13
8
  describe('fetchAssetLockTransactionOutputFactory', () => {
14
9
  let fetchAssetLockTransactionOutput;
15
10
  let stateRepositoryMock;
16
11
  let executionContext;
17
12
 
13
+ let StateTransitionExecutionContext;
14
+ let InstantAssetLockProof;
15
+ let ChainAssetLockProof;
16
+ let AssetLockTransactionIsNotFoundError;
17
+ let UnknownAssetLockProofTypeError;
18
+
19
+ let fetchAssetLockTransactionOutputDPP;
20
+
21
+ before(async () => {
22
+ ({
23
+ StateTransitionExecutionContext,
24
+ fetchAssetLockTransactionOutput: fetchAssetLockTransactionOutputDPP,
25
+ InstantAssetLockProof,
26
+ ChainAssetLockProof,
27
+ AssetLockTransactionIsNotFoundError,
28
+ UnknownAssetLockProofTypeError,
29
+ } = await loadWasmDpp());
30
+ });
31
+
18
32
  beforeEach(function beforeEach() {
19
33
  stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
20
- fetchAssetLockTransactionOutput = fetchAssetLockTransactionOutputFactory(stateRepositoryMock);
21
34
 
22
35
  executionContext = new StateTransitionExecutionContext();
36
+
37
+ fetchAssetLockTransactionOutput = (proof, context) => fetchAssetLockTransactionOutputDPP(
38
+ stateRepositoryMock,
39
+ proof,
40
+ context,
41
+ );
23
42
  });
24
43
 
25
44
  describe('InstantAssetLockProof', () => {
26
45
  let assetLockProofFixture;
27
46
 
28
47
  beforeEach(() => {
29
- assetLockProofFixture = getInstantAssetLockProofFixture();
48
+ const assetLockProofFixtureJS = getInstantAssetLockProofFixture();
49
+ assetLockProofFixture = new InstantAssetLockProof(assetLockProofFixtureJS.toObject());
30
50
  });
31
51
 
32
52
  it('should return asset lock output', async () => {
@@ -47,7 +67,22 @@ describe('fetchAssetLockTransactionOutputFactory', () => {
47
67
 
48
68
  beforeEach(() => {
49
69
  const rawTransaction = '030000000137feb5676d0851337ea3c9a992496aab7a0b3eee60aeeb9774000b7f4bababa5000000006b483045022100d91557de37645c641b948c6cd03b4ae3791a63a650db3e2fee1dcf5185d1b10402200e8bd410bf516ca61715867666d31e44495428ce5c1090bf2294a829ebcfa4ef0121025c3cc7fbfc52f710c941497fd01876c189171ea227458f501afcb38a297d65b4ffffffff021027000000000000166a14152073ca2300a86b510fa2f123d3ea7da3af68dcf77cb0090a0000001976a914152073ca2300a86b510fa2f123d3ea7da3af68dc88ac00000000';
50
- assetLockProofFixture = getChainAssetLockFixture();
70
+ const assetLockProofFixtureJS = getChainAssetLockFixture();
71
+
72
+ const outPoint = Transaction
73
+ .parseOutPointBuffer(Buffer.from(assetLockProofFixtureJS.getOutPoint()));
74
+ ({ transactionHash } = outPoint);
75
+
76
+ const rawProof = assetLockProofFixtureJS.toObject();
77
+
78
+ // Change endianness of raw txId bytes in outPoint to match expectation of dashcore-rust
79
+ const txId = rawProof.outPoint.slice(0, 32);
80
+ const outputIndex = rawProof.outPoint.slice(32);
81
+ txId.reverse();
82
+ rawProof.outPoint = Buffer.concat([txId, outputIndex]);
83
+
84
+ assetLockProofFixture = new ChainAssetLockProof(rawProof);
85
+
51
86
  stateRepositoryMock.fetchTransaction.resolves({
52
87
  data: Buffer.from(rawTransaction, 'hex'),
53
88
  height: 42,
@@ -55,26 +90,23 @@ describe('fetchAssetLockTransactionOutputFactory', () => {
55
90
 
56
91
  const transaction = new Transaction(rawTransaction);
57
92
  ([output] = transaction.outputs);
58
-
59
- const outPoint = Transaction.parseOutPointBuffer(assetLockProofFixture.getOutPoint());
60
- ({ transactionHash } = outPoint);
61
93
  });
62
94
 
63
- it('should fetch output from state repository', async () => {
95
+ it('should fetch output from state repository', async function () {
64
96
  const assetLockTransactionOutput = await fetchAssetLockTransactionOutput(
65
97
  assetLockProofFixture,
66
98
  executionContext,
67
99
  );
68
100
 
69
- expect(assetLockTransactionOutput).to.deep.equal(output);
101
+ expect(assetLockTransactionOutput).to.deep.equal(output.toObject());
70
102
 
71
103
  expect(stateRepositoryMock.fetchTransaction).to.be.calledOnceWithExactly(
72
104
  transactionHash,
73
- executionContext,
105
+ this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
74
106
  );
75
107
  });
76
108
 
77
- it('should throw IdentityAssetLockTransactionIsNotFoundError when transaction is not found', async () => {
109
+ it('should throw AssetLockTransactionIsNotFoundError when transaction is not found', async () => {
78
110
  stateRepositoryMock.fetchTransaction.resolves(null);
79
111
 
80
112
  try {
@@ -83,14 +115,14 @@ describe('fetchAssetLockTransactionOutputFactory', () => {
83
115
  executionContext,
84
116
  );
85
117
 
86
- expect.fail('should throw IdentityAssetLockTransactionIsNotFoundError');
118
+ expect.fail('should throw AssetLockTransactionIsNotFoundError');
87
119
  } catch (e) {
88
120
  expect(e).to.be.an.instanceOf(AssetLockTransactionIsNotFoundError);
89
121
  expect(e.getTransactionId()).to.deep.equal(transactionHash);
90
122
  }
91
123
  });
92
124
 
93
- it('should return mocked output on dry run', async () => {
125
+ it('should return mocked output on dry run', async function () {
94
126
  executionContext.enableDryRun();
95
127
 
96
128
  const result = await fetchAssetLockTransactionOutput(
@@ -100,24 +132,36 @@ describe('fetchAssetLockTransactionOutputFactory', () => {
100
132
 
101
133
  executionContext.disableDryRun();
102
134
 
103
- expect(result).to.deep.equal(new Output({
135
+ expect(result).to.deep.equal({
104
136
  satoshis: 1000,
105
- script: new Script(),
106
- }));
137
+ script: '',
138
+ });
107
139
 
108
140
  expect(stateRepositoryMock.fetchTransaction).to.be.calledOnceWithExactly(
109
141
  transactionHash,
110
- executionContext,
142
+ this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
111
143
  );
112
144
  });
113
145
  });
114
146
 
115
- it('should throw UnknownAssetLockProofError for unknown assetLockProof', async function it() {
116
- const type = 666;
147
+ it('should throw UnknownAssetLockProofTypeError for unknown assetLockProof', async () => {
148
+ try {
149
+ await fetchAssetLockTransactionOutput(
150
+ {},
151
+ executionContext,
152
+ );
153
+
154
+ expect.fail('should throw UnknownAssetLockProofTypeError');
155
+ } catch (e) {
156
+ expect(e).to.be.an.instanceOf(UnknownAssetLockProofTypeError);
157
+ }
158
+ });
159
+
160
+ it('should throw UnknownAssetLockProofTypeError for unknown assetLockProof type', async () => {
161
+ const type = 100;
117
162
 
118
- const assetLockProofFixture = {
119
- getType: this.sinonSandbox.stub().returns(type),
120
- };
163
+ const assetLockProofFixture = new ChainAssetLockProof(getChainAssetLockFixture().toObject());
164
+ assetLockProofFixture.getType = () => type;
121
165
 
122
166
  try {
123
167
  await fetchAssetLockTransactionOutput(
@@ -125,9 +169,9 @@ describe('fetchAssetLockTransactionOutputFactory', () => {
125
169
  executionContext,
126
170
  );
127
171
 
128
- expect.fail('should throw UnknownAssetLockProofError');
172
+ expect.fail('should throw UnknownAssetLockProofTypeError');
129
173
  } catch (e) {
130
- expect(e).to.be.an.instanceOf(UnknownAssetLockProofError);
174
+ expect(e).to.be.an.instanceOf(UnknownAssetLockProofTypeError);
131
175
  expect(e.getType()).to.equal(type);
132
176
  }
133
177
  });