@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,66 +1,76 @@
1
- const { Transaction } = require('@dashevo/dashcore-lib');
1
+ const { Transaction, PrivateKey, Script } = require('@dashevo/dashcore-lib');
2
2
 
3
- const DashCoreLib = require('@dashevo/dashcore-lib');
4
- const validateAssetLockTransactionFactory = require('@dashevo/dpp/lib/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory');
5
3
  const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
6
4
 
7
- const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
8
-
9
- const { expectValidationError } = require('@dashevo/dpp/lib/test/expect/expectError');
10
-
11
- const InvalidIdentityAssetLockTransactionError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidIdentityAssetLockTransactionError');
12
- const IdentityAssetLockTransactionOutputNotFoundError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/IdentityAssetLockTransactionOutputNotFoundError');
13
- const IdentityAssetLockTransactionOutPointAlreadyExistsError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/IdentityAssetLockTransactionOutPointAlreadyExistsError');
14
- const InvalidIdentityAssetLockTransactionOutputError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidIdentityAssetLockTransactionOutputError');
15
- const InvalidAssetLockTransactionOutputReturnSizeError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidAssetLockTransactionOutputReturnSizeError');
16
- const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
5
+ const { expect } = require('chai');
6
+ const { default: loadWasmDpp } = require('../../../../../dist');
7
+ const { expectValidationError } = require('../../../../../lib/test/expect/expectError');
17
8
 
18
9
  describe('validateAssetLockTransactionFactory', () => {
19
10
  let stateRepositoryMock;
20
- let validateAssetLockTransaction;
21
11
  let rawTransaction;
22
12
  let outputIndex;
23
- let transactionInstance;
24
- let transactionMock;
25
13
  let executionContext;
26
14
 
15
+ let StateTransitionExecutionContext;
16
+ let InvalidIdentityAssetLockTransactionError;
17
+ let IdentityAssetLockTransactionOutputNotFoundError;
18
+ let InvalidIdentityAssetLockTransactionOutputError;
19
+ let InvalidAssetLockTransactionOutputReturnSizeError;
20
+ let IdentityAssetLockTransactionOutPointAlreadyExistsError;
21
+ let TransactionDecodeError;
22
+ let ValidationResult;
23
+
24
+ let validateAssetLockTransaction;
25
+ let validateAssetLockTransactionDPP;
26
+
27
+ before(async () => {
28
+ ({
29
+ StateTransitionExecutionContext,
30
+ ValidationResult,
31
+ TransactionDecodeError,
32
+ InvalidIdentityAssetLockTransactionError,
33
+ IdentityAssetLockTransactionOutputNotFoundError,
34
+ InvalidIdentityAssetLockTransactionOutputError,
35
+ InvalidAssetLockTransactionOutputReturnSizeError,
36
+ IdentityAssetLockTransactionOutPointAlreadyExistsError,
37
+ validateAssetLockTransaction: validateAssetLockTransactionDPP,
38
+ } = await loadWasmDpp());
39
+ });
40
+
27
41
  beforeEach(function beforeEach() {
28
42
  rawTransaction = '030000000137feb5676d0851337ea3c9a992496aab7a0b3eee60aeeb9774000b7f4bababa5000000006b483045022100d91557de37645c641b948c6cd03b4ae3791a63a650db3e2fee1dcf5185d1b10402200e8bd410bf516ca61715867666d31e44495428ce5c1090bf2294a829ebcfa4ef0121025c3cc7fbfc52f710c941497fd01876c189171ea227458f501afcb38a297d65b4ffffffff021027000000000000166a14152073ca2300a86b510fa2f123d3ea7da3af68dcf77cb0090a0000001976a914152073ca2300a86b510fa2f123d3ea7da3af68dc88ac00000000';
29
43
  outputIndex = 0;
30
- transactionInstance = new Transaction(rawTransaction);
31
44
 
32
45
  executionContext = new StateTransitionExecutionContext();
33
46
 
34
47
  stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
35
48
 
36
- stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.returns(false);
49
+ stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.resolves(false);
37
50
 
38
- validateAssetLockTransaction = validateAssetLockTransactionFactory(stateRepositoryMock);
39
- });
40
-
41
- afterEach(() => {
42
- if (transactionMock) {
43
- transactionMock.restore();
44
- }
51
+ validateAssetLockTransaction = (tx, index, context) => validateAssetLockTransactionDPP(
52
+ stateRepositoryMock,
53
+ tx,
54
+ index,
55
+ context,
56
+ );
45
57
  });
46
58
 
47
59
  it('should be valid transaction', async () => {
48
60
  rawTransaction = '030000000137feb5676d085133';
49
61
 
50
- validateAssetLockTransaction = validateAssetLockTransactionFactory(stateRepositoryMock);
51
-
52
62
  const result = await validateAssetLockTransaction(
53
63
  rawTransaction,
54
64
  outputIndex,
55
65
  executionContext,
56
66
  );
57
67
 
58
- expectValidationError(result, InvalidIdentityAssetLockTransactionError);
68
+ await expectValidationError(result, InvalidIdentityAssetLockTransactionError);
59
69
 
60
70
  const [error] = result.getErrors();
61
71
 
62
72
  expect(error.getCode()).to.equal(1038);
63
- expect(error.getValidationError()).to.be.instanceOf(Error);
73
+ expect(error.getValidationError()).to.be.instanceOf(TransactionDecodeError);
64
74
 
65
75
  expect(result.getData()).to.be.undefined();
66
76
  expect(stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed).to.not.be.called();
@@ -75,7 +85,7 @@ describe('validateAssetLockTransactionFactory', () => {
75
85
  executionContext,
76
86
  );
77
87
 
78
- expectValidationError(result, IdentityAssetLockTransactionOutputNotFoundError);
88
+ await expectValidationError(result, IdentityAssetLockTransactionOutputNotFoundError);
79
89
 
80
90
  const [error] = result.getErrors();
81
91
 
@@ -86,30 +96,19 @@ describe('validateAssetLockTransactionFactory', () => {
86
96
  expect(stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed).to.not.be.called();
87
97
  });
88
98
 
89
- it('should point to output with OR_RETURN', async function it() {
90
- const isDataOut = this.sinonSandbox.stub().returns(false);
91
-
92
- const stubInstance = this.sinonSandbox.createStubInstance(Transaction);
93
-
94
- stubInstance.outputs = [{
95
- script: {
96
- isDataOut,
97
- },
98
- }];
99
-
100
- stubInstance.getOutPointBuffer.returns(transactionInstance.getOutPointBuffer(outputIndex));
101
-
102
- transactionMock = this.sinonSandbox.stub(DashCoreLib, 'Transaction').returns(
103
- stubInstance,
104
- );
99
+ it('should point to output with OR_RETURN', async () => {
100
+ const regularTransaction = new Transaction(Buffer.from(rawTransaction, 'hex'));
101
+ // Mess up expected TX output script
102
+ regularTransaction.outputs[0]
103
+ .setScript(Script.buildPublicKeyHashOut(new PrivateKey().toAddress()).toString());
105
104
 
106
105
  const result = await validateAssetLockTransaction(
107
- rawTransaction,
106
+ regularTransaction.toBuffer().toString('hex'),
108
107
  outputIndex,
109
108
  executionContext,
110
109
  );
111
110
 
112
- expectValidationError(result, InvalidIdentityAssetLockTransactionOutputError);
111
+ await expectValidationError(result, InvalidIdentityAssetLockTransactionOutputError);
113
112
 
114
113
  const [error] = result.getErrors();
115
114
 
@@ -117,30 +116,18 @@ describe('validateAssetLockTransactionFactory', () => {
117
116
  expect(error.getOutputIndex()).to.equal(outputIndex);
118
117
  });
119
118
 
120
- it('should contain valid public key hash', async function it() {
121
- const isDataOut = this.sinonSandbox.stub().returns(true);
122
- const getData = this.sinonSandbox.stub().returns(Buffer.alloc(0));
123
-
124
- const stubInstance = this.sinonSandbox.createStubInstance(Transaction);
125
- stubInstance.outputs = [{
126
- script: {
127
- isDataOut,
128
- getData,
129
- },
130
- }];
131
- stubInstance.getOutPointBuffer.returns(transactionInstance.getOutPointBuffer(outputIndex));
132
-
133
- transactionMock = this.sinonSandbox.stub(DashCoreLib, 'Transaction').returns(
134
- stubInstance,
135
- );
119
+ it('should contain valid public key hash', async () => {
120
+ const regularTransaction = new Transaction(Buffer.from(rawTransaction, 'hex'));
121
+ regularTransaction.outputs[0]
122
+ .setScript(Script.buildDataOut(Buffer.alloc(0)));
136
123
 
137
124
  const result = await validateAssetLockTransaction(
138
- rawTransaction,
125
+ regularTransaction.toBuffer().toString('hex'),
139
126
  outputIndex,
140
127
  executionContext,
141
128
  );
142
129
 
143
- expectValidationError(result, InvalidAssetLockTransactionOutputReturnSizeError);
130
+ await expectValidationError(result, InvalidAssetLockTransactionOutputReturnSizeError);
144
131
 
145
132
  const [error] = result.getErrors();
146
133
 
@@ -148,8 +135,8 @@ describe('validateAssetLockTransactionFactory', () => {
148
135
  expect(error.getOutputIndex()).to.equal(outputIndex);
149
136
  });
150
137
 
151
- it('should return IdentityAssetLockTransactionOutPointAlreadyExistsError if outPoint was already used', async () => {
152
- stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.returns(true);
138
+ it('should return IdentityAssetLockTransactionOutPointAlreadyExistsError if outPoint was already used', async function () {
139
+ stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.resolves(true);
153
140
 
154
141
  const result = await validateAssetLockTransaction(
155
142
  rawTransaction,
@@ -157,7 +144,7 @@ describe('validateAssetLockTransactionFactory', () => {
157
144
  executionContext,
158
145
  );
159
146
 
160
- expectValidationError(result, IdentityAssetLockTransactionOutPointAlreadyExistsError);
147
+ await expectValidationError(result, IdentityAssetLockTransactionOutPointAlreadyExistsError);
161
148
 
162
149
  const [error] = result.getErrors();
163
150
 
@@ -165,19 +152,19 @@ describe('validateAssetLockTransactionFactory', () => {
165
152
 
166
153
  const transaction = new Transaction(rawTransaction);
167
154
 
168
- expect(Buffer.isBuffer(error.getTransactionId())).to.be.true();
169
155
  expect(error.getTransactionId()).to.deep.equal(Buffer.from(transaction.id, 'hex'));
170
156
  expect(error.getOutputIndex()).to.deep.equal(outputIndex);
171
157
 
172
158
  expect(result.getData()).to.be.undefined();
173
159
  expect(stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed)
174
160
  .to.be.calledOnceWithExactly(
175
- transaction.getOutPointBuffer(outputIndex),
176
- executionContext,
161
+ this.sinonSandbox.match((val) => Buffer.from(val)
162
+ .equals(transaction.getOutPointBuffer(outputIndex))),
163
+ this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
177
164
  );
178
165
  });
179
166
 
180
- it('should return valid result', async () => {
167
+ it('should return valid result', async function () {
181
168
  const result = await validateAssetLockTransaction(
182
169
  rawTransaction,
183
170
  outputIndex,
@@ -193,13 +180,14 @@ describe('validateAssetLockTransactionFactory', () => {
193
180
 
194
181
  expect(stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed)
195
182
  .to.be.calledOnceWithExactly(
196
- initialTransaction.getOutPointBuffer(outputIndex),
197
- executionContext,
183
+ this.sinonSandbox.match((val) => Buffer.from(val)
184
+ .equals(initialTransaction.getOutPointBuffer(outputIndex))),
185
+ this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
198
186
  );
199
187
 
200
188
  const { transaction, publicKeyHash } = result.getData();
201
189
  expect(publicKeyHash).to.deep.equal(initialPublicKeyHash);
202
- expect(transaction).to.be.an.instanceOf(Transaction);
203
- expect(transaction.toJSON()).to.deep.equal(initialTransaction.toJSON());
190
+ expect(new Transaction(Buffer.from(transaction)).toJSON())
191
+ .to.deep.equal(initialTransaction.toJSON());
204
192
  });
205
193
  });
@@ -3,59 +3,86 @@ const { PrivateKey, crypto: { Hash } } = require('@dashevo/dashcore-lib');
3
3
  const crypto = require('crypto');
4
4
 
5
5
  const getIdentityCreateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityCreateTransitionFixture');
6
- const IdentityPublicKey = require('@dashevo/dpp/lib/identity/IdentityPublicKey');
7
6
  const BlsSignatures = require('@dashevo/dpp/lib/bls/bls');
8
- const validatePublicKeySignaturesFactory = require('@dashevo/dpp/lib/identity/stateTransition/validatePublicKeySignaturesFactory');
9
- const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
10
- const { expectValidationError } = require('@dashevo/dpp/lib/test/expect/expectError');
11
- const InvalidIdentityKeySignatureError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidIdentityKeySignatureError');
7
+
8
+ const { expect } = require('chai');
9
+ const { expectValidationError } = require('../../../../lib/test/expect/expectError');
10
+ const getBlsAdapterMock = require('../../../../lib/test/mocks/getBlsAdapterMock');
11
+
12
+ const { default: loadWasmDpp } = require('../../../../dist');
12
13
 
13
14
  describe('validatePublicKeySignaturesFactory', () => {
14
15
  let identityCreateTransition;
15
16
  let rawIdentityCreateTransition;
16
17
  let validatePublicKeySignatures;
17
18
 
18
- beforeEach(async function beforeEach() {
19
- identityCreateTransition = getIdentityCreateTransitionFixture();
19
+ let IdentityCreateTransition;
20
+ let IdentityPublicKey;
21
+ let IdentityPublicKeyCreateTransition;
22
+ let InvalidIdentityKeySignatureError;
23
+ let ValidationResult;
24
+ let PublicKeysSignaturesValidator;
25
+ let blsAdapter;
26
+
27
+ before(async () => {
28
+ ({
29
+ IdentityCreateTransition,
30
+ IdentityPublicKey,
31
+ IdentityPublicKeyCreateTransition,
32
+ InvalidIdentityKeySignatureError,
33
+ PublicKeysSignaturesValidator,
34
+ ValidationResult,
35
+ } = await loadWasmDpp());
36
+ });
37
+
38
+ beforeEach(async () => {
39
+ identityCreateTransition = new IdentityCreateTransition(
40
+ getIdentityCreateTransitionFixture().toObject(),
41
+ );
20
42
 
21
- const privateKey1 = new PrivateKey();
43
+ const privateKey1 = new PrivateKey('17e0b1703e226204c557bce68b0871683ea409ae90c7a733b72a33f7c129c959');
22
44
  const publicKey1 = privateKey1.toPublicKey();
23
45
 
24
- const identityPublicKey1 = new IdentityPublicKey({
46
+ const identityPublicKey1 = new IdentityPublicKeyCreateTransition({
25
47
  id: 0,
26
48
  type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
27
49
  data: publicKey1.toBuffer(),
28
50
  purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
29
51
  securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
30
52
  readOnly: false,
53
+ signature: Buffer.alloc(0),
31
54
  });
32
55
 
33
- const privateKey2 = new PrivateKey();
56
+ const privateKey2 = new PrivateKey('afc20afac882f676af5a268a2eca9c763996c36dbeb3660648df2108006820c7');
34
57
  const publicKey2 = privateKey2.toPublicKey();
35
58
 
36
- const identityPublicKey2 = new IdentityPublicKey({
59
+ const identityPublicKey2 = new IdentityPublicKeyCreateTransition({
37
60
  id: 1,
38
61
  type: IdentityPublicKey.TYPES.ECDSA_HASH160,
39
62
  data: Hash.sha256ripemd160(publicKey2.toBuffer()),
40
63
  purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
41
64
  securityLevel: IdentityPublicKey.SECURITY_LEVELS.CRITICAL,
42
65
  readOnly: false,
66
+ signature: Buffer.alloc(0),
43
67
  });
44
68
 
45
- const { PrivateKey: BlsPrivateKey } = await BlsSignatures.getInstance();
69
+ const blsModule = await BlsSignatures.getInstance();
70
+ blsAdapter = await getBlsAdapterMock();
71
+
72
+ const { BasicSchemeMPL } = blsModule;
46
73
 
47
74
  const randomBytes = new Uint8Array(crypto.randomBytes(256));
48
- const privateKey3 = BlsPrivateKey.fromBytes(randomBytes, true);
49
- // blsPrivateKeyHex = Buffer.from(blsPrivateKey.serialize()).toString('hex');
50
- const publicKey3 = privateKey3.getPublicKey();
75
+ const privateKey3 = BasicSchemeMPL.keyGen(randomBytes);
76
+ const publicKey3 = privateKey3.getG1();
51
77
 
52
- const identityPublicKey3 = new IdentityPublicKey({
78
+ const identityPublicKey3 = new IdentityPublicKeyCreateTransition({
53
79
  id: 2,
54
80
  type: IdentityPublicKey.TYPES.BLS12_381,
55
81
  data: Buffer.from(publicKey3.serialize()),
56
82
  purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
57
83
  securityLevel: IdentityPublicKey.SECURITY_LEVELS.CRITICAL,
58
84
  readOnly: false,
85
+ signature: Buffer.alloc(0),
59
86
  });
60
87
 
61
88
  identityCreateTransition.setPublicKeys([
@@ -65,14 +92,14 @@ describe('validatePublicKeySignaturesFactory', () => {
65
92
  ]);
66
93
 
67
94
  await identityCreateTransition.signByPrivateKey(
68
- privateKey1,
95
+ privateKey1.toBuffer(),
69
96
  IdentityPublicKey.TYPES.ECDSA_SECP256K1,
70
97
  );
71
98
 
72
99
  const signature1 = identityCreateTransition.getSignature();
73
100
 
74
101
  await identityCreateTransition.signByPrivateKey(
75
- privateKey2,
102
+ privateKey2.toBuffer(),
76
103
  IdentityPublicKey.TYPES.ECDSA_HASH160,
77
104
  );
78
105
 
@@ -81,6 +108,7 @@ describe('validatePublicKeySignaturesFactory', () => {
81
108
  await identityCreateTransition.signByPrivateKey(
82
109
  Buffer.from(privateKey3.serialize()),
83
110
  IdentityPublicKey.TYPES.BLS12_381,
111
+ blsAdapter,
84
112
  );
85
113
 
86
114
  const signature3 = identityCreateTransition.getSignature();
@@ -89,11 +117,21 @@ describe('validatePublicKeySignaturesFactory', () => {
89
117
  identityPublicKey2.setSignature(signature2);
90
118
  identityPublicKey3.setSignature(signature3);
91
119
 
120
+ identityCreateTransition.setPublicKeys([
121
+ identityPublicKey1,
122
+ identityPublicKey2,
123
+ identityPublicKey3,
124
+ ]);
125
+
92
126
  rawIdentityCreateTransition = identityCreateTransition.toObject();
93
127
 
94
- const createStateTransitionMock = this.sinonSandbox.stub().resolves(identityCreateTransition);
128
+ const validator = new PublicKeysSignaturesValidator(blsAdapter);
129
+ validatePublicKeySignatures = (
130
+ stateTransition, keys,
131
+ ) => validator.validate(stateTransition, keys);
95
132
 
96
- validatePublicKeySignatures = validatePublicKeySignaturesFactory(createStateTransitionMock);
133
+ privateKey3.delete();
134
+ publicKey3.delete();
97
135
  });
98
136
 
99
137
  it('should return InvalidIdentityKeySignatureError if signature is not valid', async () => {
@@ -104,10 +142,9 @@ describe('validatePublicKeySignaturesFactory', () => {
104
142
  const result = await validatePublicKeySignatures(
105
143
  rawIdentityCreateTransition,
106
144
  rawIdentityCreateTransition.publicKeys,
107
- identityCreateTransition.getExecutionContext(),
108
145
  );
109
146
 
110
- expectValidationError(result, InvalidIdentityKeySignatureError);
147
+ await expectValidationError(result, InvalidIdentityKeySignatureError);
111
148
 
112
149
  const error = result.getFirstError();
113
150
 
@@ -118,7 +155,7 @@ describe('validatePublicKeySignaturesFactory', () => {
118
155
  const result = await validatePublicKeySignatures(
119
156
  rawIdentityCreateTransition,
120
157
  rawIdentityCreateTransition.publicKeys,
121
- identityCreateTransition.getExecutionContext(),
158
+ blsAdapter,
122
159
  );
123
160
 
124
161
  expect(result).to.be.instanceOf(ValidationResult);