@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,83 +1,94 @@
1
- const { getRE2Class } = require('@dashevo/wasm-re2');
2
-
3
- const createAjv = require('@dashevo/dpp/lib/ajv/createAjv');
4
-
5
- const JsonSchemaValidator = require('@dashevo/dpp/lib/validation/JsonSchemaValidator');
1
+ const { PrivateKey } = require('@dashevo/dashcore-lib');
6
2
 
7
3
  const getIdentityCreateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityCreateTransitionFixture');
8
4
 
9
- const validateIdentityCreateTransitionBasicFactory = require(
10
- '@dashevo/dpp/lib/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory',
11
- );
12
-
13
- const {
14
- expectJsonSchemaError,
15
- expectValidationError,
16
- } = require('@dashevo/dpp/lib/test/expect/expectError');
17
-
18
- const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
19
- const InstantAssetLockProof = require('@dashevo/dpp/lib/identity/stateTransition/assetLockProof/instant/InstantAssetLockProof');
20
- const ChainAssetLockProof = require('@dashevo/dpp/lib/identity/stateTransition/assetLockProof/chain/ChainAssetLockProof');
21
- const SomeConsensusError = require('@dashevo/dpp/lib/test/mocks/SomeConsensusError');
22
- const IdentityPublicKey = require('@dashevo/dpp/lib/identity/IdentityPublicKey');
23
- const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
5
+ const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
6
+ const { expectValidationError, expectJsonSchemaError } = require('../../../../../../../lib/test/expect/expectError');
7
+ const { default: loadWasmDpp } = require('../../../../../../../dist');
8
+ const getBlsAdapterMock = require('../../../../../../../lib/test/mocks/getBlsAdapterMock');
24
9
 
25
10
  describe('validateIdentityCreateTransitionBasicFactory', () => {
26
- let validateIdentityCreateTransitionBasic;
27
11
  let rawStateTransition;
28
12
  let stateTransition;
29
- let validatePublicKeysMock;
30
- let validatePublicKeysInIdentityCreateTransition;
31
- let assetLockPublicKeyHash;
32
- let proofValidationFunctionsByTypeMock;
33
- let validateProtocolVersionMock;
34
- let validatePublicKeySignaturesMock;
35
13
 
36
- beforeEach(async function beforeEach() {
37
- validatePublicKeysMock = this.sinonSandbox.stub()
38
- .returns(new ValidationResult());
14
+ let stateRepositoryMock;
15
+ let mockIdentityPublicKeyCreateTransition;
16
+ let executionContext;
17
+
18
+ let validateIdentityCreateTransitionBasic;
39
19
 
40
- validatePublicKeysInIdentityCreateTransition = this.sinonSandbox.stub()
41
- .returns(new ValidationResult());
20
+ let StateTransitionExecutionContext;
21
+ let IdentityCreateTransition;
22
+ let IdentityPublicKey;
23
+ let UnsupportedProtocolVersionError;
24
+ let InvalidInstantAssetLockProofSignatureError;
25
+ let InvalidIdentityPublicKeySecurityLevelError;
26
+ let InvalidIdentityPublicKeyDataError;
27
+ let InvalidIdentityKeySignatureError;
28
+ let IdentityCreateTransitionBasicValidator;
29
+ let IdentityPublicKeyCreateTransition;
30
+
31
+ before(async () => {
32
+ ({
33
+ IdentityCreateTransition,
34
+ StateTransitionExecutionContext,
35
+ UnsupportedProtocolVersionError,
36
+ InvalidInstantAssetLockProofSignatureError,
37
+ InvalidIdentityPublicKeySecurityLevelError,
38
+ InvalidIdentityPublicKeyDataError,
39
+ InvalidIdentityKeySignatureError,
40
+ IdentityPublicKeyCreateTransition,
41
+ IdentityCreateTransitionBasicValidator,
42
+ IdentityPublicKey,
43
+ } = await loadWasmDpp());
44
+
45
+ mockIdentityPublicKeyCreateTransition = (publicKey, opts = {}) => (
46
+ new IdentityPublicKeyCreateTransition({
47
+ id: 0,
48
+ type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
49
+ data: publicKey,
50
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
51
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
52
+ readOnly: false,
53
+ signature: Buffer.alloc(0),
54
+ ...opts,
55
+ })
56
+ );
57
+ });
42
58
 
43
- assetLockPublicKeyHash = Buffer.alloc(20, 1);
59
+ beforeEach(async function () {
60
+ stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
61
+ stateRepositoryMock.verifyInstantLock.resolves(true);
62
+ stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.resolves(false);
44
63
 
45
- const assetLockValidationResult = new ValidationResult();
64
+ executionContext = new StateTransitionExecutionContext();
46
65
 
47
- assetLockValidationResult.setData(assetLockPublicKeyHash);
66
+ const blsAdapter = await getBlsAdapterMock();
48
67
 
49
- const RE2 = await getRE2Class();
50
- const ajv = createAjv(RE2);
68
+ const validator = new IdentityCreateTransitionBasicValidator(stateRepositoryMock, blsAdapter);
69
+ validateIdentityCreateTransitionBasic = (st, context) => validator.validate(st, context);
51
70
 
52
- const jsonSchemaValidator = new JsonSchemaValidator(ajv);
71
+ const stateTransitionJS = getIdentityCreateTransitionFixture();
72
+ stateTransition = new IdentityCreateTransition(stateTransitionJS.toObject());
53
73
 
54
- const proofValidationResult = new ValidationResult();
55
- proofValidationResult.setData(assetLockPublicKeyHash);
74
+ const privateKey = new PrivateKey('9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2');
75
+ const publicKey = privateKey.toPublicKey();
56
76
 
57
- proofValidationFunctionsByTypeMock = {
58
- [InstantAssetLockProof.type]: this.sinonSandbox.stub().resolves(proofValidationResult),
59
- [ChainAssetLockProof.type]: this.sinonSandbox.stub().resolves(proofValidationResult),
60
- };
77
+ const identityPublicKey = mockIdentityPublicKeyCreateTransition(publicKey.toBuffer());
61
78
 
62
- validateProtocolVersionMock = this.sinonSandbox.stub().returns(new ValidationResult());
79
+ stateTransition.setPublicKeys([identityPublicKey]);
63
80
 
64
- validatePublicKeySignaturesMock = this.sinonSandbox.stub()
65
- .returns(new ValidationResult());
81
+ // Sign a new public key
66
82
 
67
- validateIdentityCreateTransitionBasic = validateIdentityCreateTransitionBasicFactory(
68
- jsonSchemaValidator,
69
- validatePublicKeysMock,
70
- validatePublicKeysInIdentityCreateTransition,
71
- proofValidationFunctionsByTypeMock,
72
- validateProtocolVersionMock,
73
- validatePublicKeySignaturesMock,
83
+ await stateTransition.signByPrivateKey(
84
+ privateKey.toBuffer(),
85
+ identityPublicKey.type,
74
86
  );
75
87
 
76
- stateTransition = getIdentityCreateTransitionFixture();
88
+ const publicKeySignature = stateTransition.getSignature();
89
+ identityPublicKey.setSignature(publicKeySignature);
77
90
 
78
- const privateKey = '9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2';
79
-
80
- await stateTransition.signByPrivateKey(privateKey, IdentityPublicKey.TYPES.ECDSA_SECP256K1);
91
+ stateTransition.setPublicKeys([identityPublicKey]);
81
92
 
82
93
  rawStateTransition = stateTransition.toObject();
83
94
  });
@@ -86,9 +97,12 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
86
97
  it('should be present', async () => {
87
98
  delete rawStateTransition.protocolVersion;
88
99
 
89
- const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
100
+ const result = await validateIdentityCreateTransitionBasic(
101
+ rawStateTransition,
102
+ executionContext,
103
+ );
90
104
 
91
- expectJsonSchemaError(result);
105
+ await expectJsonSchemaError(result);
92
106
 
93
107
  const [error] = result.getErrors();
94
108
 
@@ -100,9 +114,12 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
100
114
  it('should be an integer', async () => {
101
115
  rawStateTransition.protocolVersion = '1';
102
116
 
103
- const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
117
+ const result = await validateIdentityCreateTransitionBasic(
118
+ rawStateTransition,
119
+ executionContext,
120
+ );
104
121
 
105
- expectJsonSchemaError(result);
122
+ await expectJsonSchemaError(result);
106
123
 
107
124
  const [error] = result.getErrors();
108
125
 
@@ -111,26 +128,14 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
111
128
  });
112
129
 
113
130
  it('should be valid', async () => {
114
- rawStateTransition.protocolVersion = -1;
115
-
116
- const protocolVersionError = new SomeConsensusError('test');
117
- const protocolVersionResult = new ValidationResult([
118
- protocolVersionError,
119
- ]);
120
-
121
- validateProtocolVersionMock.returns(protocolVersionResult);
122
-
123
- const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
124
-
125
- expectValidationError(result, SomeConsensusError);
126
-
127
- const [error] = result.getErrors();
128
-
129
- expect(error).to.equal(protocolVersionError);
131
+ rawStateTransition.protocolVersion = 1000;
130
132
 
131
- expect(validateProtocolVersionMock).to.be.calledOnceWith(
132
- rawStateTransition.protocolVersion,
133
+ const result = await validateIdentityCreateTransitionBasic(
134
+ rawStateTransition,
135
+ executionContext,
133
136
  );
137
+
138
+ await expectValidationError(result, UnsupportedProtocolVersionError);
134
139
  });
135
140
  });
136
141
 
@@ -138,9 +143,12 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
138
143
  it('should be present', async () => {
139
144
  delete rawStateTransition.type;
140
145
 
141
- const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
146
+ const result = await validateIdentityCreateTransitionBasic(
147
+ rawStateTransition,
148
+ executionContext,
149
+ );
142
150
 
143
- expectJsonSchemaError(result);
151
+ await expectJsonSchemaError(result);
144
152
 
145
153
  const [error] = result.getErrors();
146
154
 
@@ -152,9 +160,12 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
152
160
  it('should be equal to 2', async () => {
153
161
  rawStateTransition.type = 666;
154
162
 
155
- const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
163
+ const result = await validateIdentityCreateTransitionBasic(
164
+ rawStateTransition,
165
+ executionContext,
166
+ );
156
167
 
157
- expectJsonSchemaError(result);
168
+ await expectJsonSchemaError(result);
158
169
 
159
170
  const [error] = result.getErrors();
160
171
 
@@ -170,9 +181,10 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
170
181
 
171
182
  const result = await validateIdentityCreateTransitionBasic(
172
183
  rawStateTransition,
184
+ executionContext,
173
185
  );
174
186
 
175
- expectJsonSchemaError(result);
187
+ await expectJsonSchemaError(result);
176
188
 
177
189
  const [error] = result.getErrors();
178
190
 
@@ -184,9 +196,12 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
184
196
  it('should be an object', async () => {
185
197
  rawStateTransition.assetLockProof = 1;
186
198
 
187
- const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
199
+ const result = await validateIdentityCreateTransitionBasic(
200
+ rawStateTransition,
201
+ executionContext,
202
+ );
188
203
 
189
- expectJsonSchemaError(result, 1);
204
+ await expectJsonSchemaError(result, 1);
190
205
 
191
206
  const [error] = result.getErrors();
192
207
 
@@ -195,31 +210,18 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
195
210
  });
196
211
 
197
212
  it('should be valid', async () => {
198
- const assetLockError = new SomeConsensusError('test');
199
- const assetLockResult = new ValidationResult([
200
- assetLockError,
201
- ]);
202
-
203
- const executionContext = new StateTransitionExecutionContext();
204
-
205
- proofValidationFunctionsByTypeMock[InstantAssetLockProof.type].resolves(assetLockResult);
213
+ stateRepositoryMock.verifyInstantLock.resolves(false);
206
214
 
207
215
  const result = await validateIdentityCreateTransitionBasic(
208
216
  rawStateTransition,
209
217
  executionContext,
210
218
  );
211
219
 
212
- expectValidationError(result);
220
+ await expectValidationError(result);
213
221
 
214
222
  const [error] = result.getErrors();
215
223
 
216
- expect(error).to.equal(assetLockError);
217
-
218
- expect(proofValidationFunctionsByTypeMock[InstantAssetLockProof.type])
219
- .to.be.calledOnceWithExactly(
220
- rawStateTransition.assetLockProof,
221
- executionContext,
222
- );
224
+ expect(error).to.be.instanceOf(InvalidInstantAssetLockProofSignatureError);
223
225
  });
224
226
  });
225
227
 
@@ -229,9 +231,10 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
229
231
 
230
232
  const result = await validateIdentityCreateTransitionBasic(
231
233
  rawStateTransition,
234
+ executionContext,
232
235
  );
233
236
 
234
- expectJsonSchemaError(result);
237
+ await expectJsonSchemaError(result);
235
238
 
236
239
  const [error] = result.getErrors();
237
240
 
@@ -245,9 +248,10 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
245
248
 
246
249
  const result = await validateIdentityCreateTransitionBasic(
247
250
  rawStateTransition,
251
+ executionContext,
248
252
  );
249
253
 
250
- expectJsonSchemaError(result);
254
+ await expectJsonSchemaError(result);
251
255
 
252
256
  const [error] = result.getErrors();
253
257
 
@@ -259,14 +263,15 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
259
263
  const [key] = rawStateTransition.publicKeys;
260
264
 
261
265
  for (let i = 0; i < 10; i++) {
262
- rawStateTransition.publicKeys.push(key);
266
+ rawStateTransition.publicKeys.push({ ...key, id: i + 1 });
263
267
  }
264
268
 
265
269
  const result = await validateIdentityCreateTransitionBasic(
266
270
  rawStateTransition,
271
+ executionContext,
267
272
  );
268
273
 
269
- expectJsonSchemaError(result);
274
+ await expectJsonSchemaError(result);
270
275
 
271
276
  const [error] = result.getErrors();
272
277
 
@@ -279,9 +284,10 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
279
284
 
280
285
  const result = await validateIdentityCreateTransitionBasic(
281
286
  rawStateTransition,
287
+ executionContext,
282
288
  );
283
289
 
284
- expectJsonSchemaError(result);
290
+ await expectJsonSchemaError(result);
285
291
 
286
292
  const [error] = result.getErrors();
287
293
 
@@ -290,66 +296,68 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
290
296
  });
291
297
 
292
298
  it('should be valid', async () => {
293
- const publicKeysError = new SomeConsensusError('test');
294
- const publicKeysResult = new ValidationResult([
295
- publicKeysError,
296
- ]);
299
+ const privateKey = new PrivateKey();
300
+
301
+ // Mess up public key
302
+ const identityPublicKey = mockIdentityPublicKeyCreateTransition(Buffer.alloc(33));
303
+
304
+ stateTransition.setPublicKeys([identityPublicKey]);
305
+ await stateTransition.signByPrivateKey(
306
+ privateKey.toBuffer(),
307
+ identityPublicKey.type,
308
+ );
309
+ identityPublicKey.setSignature(stateTransition.getSignature());
310
+ stateTransition.setPublicKeys([identityPublicKey]);
297
311
 
298
- validatePublicKeysMock.returns(publicKeysResult);
312
+ rawStateTransition = stateTransition.toObject();
299
313
 
300
314
  const result = await validateIdentityCreateTransitionBasic(
301
315
  rawStateTransition,
316
+ executionContext,
302
317
  );
303
318
 
304
- expectValidationError(result);
319
+ await expectValidationError(result, InvalidIdentityPublicKeyDataError);
320
+ });
305
321
 
306
- const [error] = result.getErrors();
322
+ it('should have at least 1 master key', async () => {
323
+ const privateKey = new PrivateKey();
307
324
 
308
- expect(error).to.equal(publicKeysError);
325
+ // Mess up public key's purpose
326
+ const identityPublicKey = mockIdentityPublicKeyCreateTransition(
327
+ privateKey.toPublicKey().toBuffer(),
328
+ );
309
329
 
310
- expect(validatePublicKeysMock)
311
- .to.be.calledOnceWithExactly(rawStateTransition.publicKeys);
312
- });
330
+ identityPublicKey.setPurpose(2);
313
331
 
314
- it('should have at least 1 master key', async () => {
315
- const publicKeysError = new SomeConsensusError('test');
316
- const publicKeysResult = new ValidationResult([
317
- publicKeysError,
318
- ]);
332
+ stateTransition.setPublicKeys([identityPublicKey]);
333
+ await stateTransition.signByPrivateKey(
334
+ privateKey.toBuffer(),
335
+ identityPublicKey.type,
336
+ );
337
+ identityPublicKey.setSignature(stateTransition.getSignature());
338
+ stateTransition.setPublicKeys([identityPublicKey]);
319
339
 
320
- validatePublicKeysInIdentityCreateTransition.returns(publicKeysResult);
340
+ rawStateTransition = stateTransition.toObject();
321
341
 
322
342
  const result = await validateIdentityCreateTransitionBasic(
323
343
  rawStateTransition,
344
+ executionContext,
324
345
  );
325
346
 
326
- expectValidationError(result);
327
-
328
- const [error] = result.getErrors();
329
-
330
- expect(error).to.equal(publicKeysError);
331
-
332
- expect(validatePublicKeysInIdentityCreateTransition)
333
- .to.be.calledOnceWithExactly(rawStateTransition.publicKeys);
347
+ await expectValidationError(result, InvalidIdentityPublicKeySecurityLevelError);
334
348
  });
335
349
 
336
350
  it('should have valid signatures', async () => {
337
- const publicKeysError = new SomeConsensusError('test');
338
- const publicKeysResult = new ValidationResult([
339
- publicKeysError,
340
- ]);
341
-
342
- validatePublicKeySignaturesMock.resolves(publicKeysResult);
351
+ const invalidSignature = Buffer.alloc(65);
352
+ rawStateTransition.signature = invalidSignature;
353
+ rawStateTransition.publicKeys[0].signature = invalidSignature;
343
354
 
344
355
  const result = await validateIdentityCreateTransitionBasic(
345
356
  rawStateTransition,
357
+ executionContext,
346
358
  );
347
359
 
348
- expectValidationError(result);
349
-
350
- const [error] = result.getErrors();
351
-
352
- expect(error).to.equal(publicKeysError);
360
+ await expectValidationError(result, InvalidIdentityKeySignatureError);
353
361
  });
354
362
  });
355
363
 
@@ -357,13 +365,16 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
357
365
  it('should be present', async () => {
358
366
  delete rawStateTransition.signature;
359
367
 
360
- const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
368
+ const result = await validateIdentityCreateTransitionBasic(
369
+ rawStateTransition,
370
+ executionContext,
371
+ );
361
372
 
362
- expectJsonSchemaError(result);
373
+ await expectJsonSchemaError(result);
363
374
 
364
375
  const [error] = result.getErrors();
365
376
 
366
- expect(error.instancePath).to.equal('');
377
+ expect(error.getInstancePath()).to.equal('');
367
378
  expect(error.getKeyword()).to.equal('required');
368
379
  expect(error.getParams().missingProperty).to.equal('signature');
369
380
  });
@@ -371,52 +382,62 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
371
382
  it('should be a byte array', async () => {
372
383
  rawStateTransition.signature = new Array(65).fill('string');
373
384
 
374
- const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
385
+ const result = await validateIdentityCreateTransitionBasic(
386
+ rawStateTransition,
387
+ executionContext,
388
+ );
375
389
 
376
- expectJsonSchemaError(result, 2);
390
+ await expectJsonSchemaError(result, 65);
377
391
 
378
- const [error, byteArrayError] = result.getErrors();
392
+ const firstError = result.getErrors()[0];
393
+ const lastError = result.getErrors()[64];
379
394
 
380
- expect(error.instancePath).to.equal('/signature/0');
381
- expect(error.getKeyword()).to.equal('type');
395
+ expect(firstError.getInstancePath()).to.equal('/signature/0');
396
+ expect(firstError.getKeyword()).to.equal('type');
382
397
 
383
- expect(byteArrayError.getKeyword()).to.equal('byteArray');
398
+ expect(lastError.getInstancePath()).to.equal('/signature/64');
399
+ expect(lastError.getKeyword()).to.equal('type');
384
400
  });
385
401
 
386
402
  it('should be not shorter than 65 bytes', async () => {
387
403
  rawStateTransition.signature = Buffer.alloc(64);
388
404
 
389
- const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
405
+ const result = await validateIdentityCreateTransitionBasic(
406
+ rawStateTransition,
407
+ executionContext,
408
+ );
390
409
 
391
- expectJsonSchemaError(result);
410
+ await expectJsonSchemaError(result);
392
411
 
393
412
  const [error] = result.getErrors();
394
413
 
395
- expect(error.instancePath).to.equal('/signature');
414
+ expect(error.getInstancePath()).to.equal('/signature');
396
415
  expect(error.getKeyword()).to.equal('minItems');
397
416
  });
398
417
 
399
418
  it('should be not longer than 65 bytes', async () => {
400
419
  rawStateTransition.signature = Buffer.alloc(66);
401
420
 
402
- const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
421
+ const result = await validateIdentityCreateTransitionBasic(
422
+ rawStateTransition,
423
+ executionContext,
424
+ );
403
425
 
404
- expectJsonSchemaError(result);
426
+ await expectJsonSchemaError(result);
405
427
 
406
428
  const [error] = result.getErrors();
407
429
 
408
- expect(error.instancePath).to.equal('/signature');
430
+ expect(error.getInstancePath()).to.equal('/signature');
409
431
  expect(error.getKeyword()).to.equal('maxItems');
410
432
  });
411
433
  });
412
434
 
413
435
  it('should return valid result', async () => {
414
- const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
436
+ const result = await validateIdentityCreateTransitionBasic(
437
+ rawStateTransition,
438
+ executionContext,
439
+ );
415
440
 
416
441
  expect(result.isValid()).to.be.true();
417
-
418
- expect(validatePublicKeysMock).to.be.calledOnceWithExactly(
419
- rawStateTransition.publicKeys,
420
- );
421
442
  });
422
443
  });