@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,59 +1,69 @@
1
- const { getRE2Class } = require('@dashevo/wasm-re2');
2
1
  const { PrivateKey } = require('@dashevo/dashcore-lib');
3
- const validateIdentityUpdateTransitionBasicFactory = require(
4
- '@dashevo/dpp/lib/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory',
5
- );
6
- const JsonSchemaValidator = require('@dashevo/dpp/lib/validation/JsonSchemaValidator');
7
- const createAjv = require('@dashevo/dpp/lib/ajv/createAjv');
8
- const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
9
- const IdentityPublicKey = require('@dashevo/dpp/lib/identity/IdentityPublicKey');
10
2
  const getIdentityUpdateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityUpdateTransitionFixture');
11
- const { expectJsonSchemaError, expectValidationError } = require('@dashevo/dpp/lib/test/expect/expectError');
12
- const SomeConsensusError = require('@dashevo/dpp/lib/test/mocks/SomeConsensusError');
3
+
4
+ const { expectJsonSchemaError, expectValidationError } = require('../../../../../../../lib/test/expect/expectError');
5
+ const { default: loadWasmDpp } = require('../../../../../../../dist');
6
+ const getBlsAdapterMock = require('../../../../../../../lib/test/mocks/getBlsAdapterMock');
13
7
 
14
8
  describe('validateIdentityUpdateTransitionBasicFactory', () => {
15
9
  let validateIdentityUpdateTransitionBasic;
16
- let validateProtocolVersionMock;
17
- let validatePublicKeysMock;
18
10
  let rawStateTransition;
19
11
  let stateTransition;
20
12
  let publicKeyToAdd;
21
- let validatePublicKeySignaturesMock;
22
13
 
23
- beforeEach(async function beforeEach() {
24
- const RE2 = await getRE2Class();
25
- const ajv = createAjv(RE2);
26
- const jsonSchemaValidator = new JsonSchemaValidator(ajv);
14
+ let IdentityUpdateTransition;
15
+ let IdentityPublicKey;
16
+ let IdentityPublicKeyCreateTransition;
17
+ let UnsupportedProtocolVersionError;
18
+ let InvalidIdentityKeySignatureError;
19
+ let DuplicatedIdentityPublicKeyIdStateError;
20
+ let IdentityUpdateTransitionBasicValidator;
21
+
22
+ before(async () => {
23
+ ({
24
+ IdentityUpdateTransition,
25
+ UnsupportedProtocolVersionError,
26
+ InvalidIdentityKeySignatureError,
27
+ DuplicatedIdentityPublicKeyIdStateError,
28
+ IdentityPublicKey,
29
+ IdentityPublicKeyCreateTransition,
30
+ IdentityUpdateTransitionBasicValidator,
31
+ } = await loadWasmDpp());
32
+ });
27
33
 
28
- validateProtocolVersionMock = this.sinonSandbox.stub().returns(new ValidationResult());
34
+ beforeEach(async () => {
35
+ const blsAdapter = await getBlsAdapterMock();
29
36
 
30
- validatePublicKeysMock = this.sinonSandbox.stub()
31
- .returns(new ValidationResult());
37
+ const validator = new IdentityUpdateTransitionBasicValidator(blsAdapter);
38
+ validateIdentityUpdateTransitionBasic = (st) => validator.validate(st);
32
39
 
33
- validatePublicKeySignaturesMock = this.sinonSandbox.stub()
34
- .returns(new ValidationResult());
40
+ const stateTransitionJS = getIdentityUpdateTransitionFixture();
41
+ stateTransition = new IdentityUpdateTransition(stateTransitionJS.toObject());
35
42
 
36
- validateIdentityUpdateTransitionBasic = validateIdentityUpdateTransitionBasicFactory(
37
- jsonSchemaValidator,
38
- validateProtocolVersionMock,
39
- validatePublicKeysMock,
40
- validatePublicKeySignaturesMock,
41
- );
43
+ const privateKey = new PrivateKey('9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2');
44
+ const publicKey = privateKey.toPublicKey().toBuffer();
42
45
 
43
- stateTransition = getIdentityUpdateTransitionFixture();
46
+ const identityPublicKey = new IdentityPublicKey({
47
+ id: 1,
48
+ type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
49
+ data: publicKey,
50
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
51
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
52
+ readOnly: false,
53
+ });
54
+
55
+ let identityPublicKeyCreateTransition = new IdentityPublicKeyCreateTransition({
56
+ ...identityPublicKey.toObject(),
57
+ signature: Buffer.alloc(0),
58
+ });
44
59
 
45
- const privateKeyModel = new PrivateKey();
46
- const privateKeyHex = privateKeyModel.toBuffer().toString('hex');
47
- const publicKey = privateKeyModel.toPublicKey().toBuffer();
60
+ stateTransition.setPublicKeysToAdd([identityPublicKeyCreateTransition]);
48
61
 
49
- const identityPublicKey = new IdentityPublicKey()
50
- .setId(1)
51
- .setType(IdentityPublicKey.TYPES.ECDSA_SECP256K1)
52
- .setData(publicKey)
53
- .setSecurityLevel(IdentityPublicKey.SECURITY_LEVELS.MASTER)
54
- .setPurpose(IdentityPublicKey.PURPOSES.AUTHENTICATION);
62
+ await stateTransition.sign(identityPublicKey, privateKey.toBuffer());
55
63
 
56
- await stateTransition.sign(identityPublicKey, privateKeyHex);
64
+ [identityPublicKeyCreateTransition] = stateTransition.getPublicKeysToAdd();
65
+ identityPublicKeyCreateTransition.setSignature(stateTransition.getSignature());
66
+ stateTransition.setPublicKeysToAdd([identityPublicKeyCreateTransition]);
57
67
 
58
68
  rawStateTransition = stateTransition.toObject();
59
69
 
@@ -64,6 +74,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
64
74
  purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
65
75
  securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
66
76
  readOnly: false,
77
+ signature: Buffer.alloc(0),
67
78
  };
68
79
  });
69
80
 
@@ -73,7 +84,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
73
84
 
74
85
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
75
86
 
76
- expectJsonSchemaError(result);
87
+ await expectJsonSchemaError(result);
77
88
 
78
89
  const [error] = result.getErrors();
79
90
 
@@ -87,7 +98,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
87
98
 
88
99
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
89
100
 
90
- expectJsonSchemaError(result);
101
+ await expectJsonSchemaError(result);
91
102
 
92
103
  const [error] = result.getErrors();
93
104
 
@@ -96,25 +107,11 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
96
107
  });
97
108
 
98
109
  it('should be valid', async () => {
99
- rawStateTransition.protocolVersion = -1;
100
- const protocolVersionError = new SomeConsensusError('test');
101
- const protocolVersionResult = new ValidationResult([
102
- protocolVersionError,
103
- ]);
104
-
105
- validateProtocolVersionMock.returns(protocolVersionResult);
110
+ rawStateTransition.protocolVersion = 100;
106
111
 
107
112
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
108
113
 
109
- expectValidationError(result, SomeConsensusError);
110
-
111
- const [error] = result.getErrors();
112
-
113
- expect(error).to.equal(protocolVersionError);
114
-
115
- expect(validateProtocolVersionMock).to.be.calledOnceWith(
116
- rawStateTransition.protocolVersion,
117
- );
114
+ await expectValidationError(result, UnsupportedProtocolVersionError);
118
115
  });
119
116
  });
120
117
 
@@ -124,7 +121,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
124
121
 
125
122
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
126
123
 
127
- expectJsonSchemaError(result);
124
+ await expectJsonSchemaError(result);
128
125
 
129
126
  const [error] = result.getErrors();
130
127
 
@@ -138,7 +135,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
138
135
 
139
136
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
140
137
 
141
- expectJsonSchemaError(result);
138
+ await expectJsonSchemaError(result);
142
139
 
143
140
  const [error] = result.getErrors();
144
141
 
@@ -156,7 +153,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
156
153
  rawStateTransition,
157
154
  );
158
155
 
159
- expectJsonSchemaError(result);
156
+ await expectJsonSchemaError(result);
160
157
 
161
158
  const [error] = result.getErrors();
162
159
 
@@ -172,14 +169,12 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
172
169
  rawStateTransition,
173
170
  );
174
171
 
175
- expectJsonSchemaError(result, 2);
172
+ await expectJsonSchemaError(result, 32);
176
173
 
177
- const [error, byteArrayError] = result.getErrors();
174
+ const [error] = result.getErrors();
178
175
 
179
176
  expect(error.getInstancePath()).to.equal('/identityId/0');
180
177
  expect(error.getKeyword()).to.equal('type');
181
-
182
- expect(byteArrayError.getKeyword()).to.equal('byteArray');
183
178
  });
184
179
 
185
180
  it('should be no less than 32 bytes', async () => {
@@ -189,11 +184,11 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
189
184
  rawStateTransition,
190
185
  );
191
186
 
192
- expectJsonSchemaError(result);
187
+ await expectJsonSchemaError(result);
193
188
 
194
189
  const [error] = result.getErrors();
195
190
 
196
- expect(error.instancePath).to.equal('/identityId');
191
+ expect(error.getInstancePath()).to.equal('/identityId');
197
192
  expect(error.getKeyword()).to.equal('minItems');
198
193
  });
199
194
 
@@ -204,11 +199,11 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
204
199
  rawStateTransition,
205
200
  );
206
201
 
207
- expectJsonSchemaError(result);
202
+ await expectJsonSchemaError(result);
208
203
 
209
204
  const [error] = result.getErrors();
210
205
 
211
- expect(error.instancePath).to.equal('/identityId');
206
+ expect(error.getInstancePath()).to.equal('/identityId');
212
207
  expect(error.getKeyword()).to.equal('maxItems');
213
208
  });
214
209
  });
@@ -219,11 +214,11 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
219
214
 
220
215
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
221
216
 
222
- expectJsonSchemaError(result);
217
+ await expectJsonSchemaError(result);
223
218
 
224
219
  const [error] = result.getErrors();
225
220
 
226
- expect(error.instancePath).to.equal('');
221
+ expect(error.getInstancePath()).to.equal('');
227
222
  expect(error.getKeyword()).to.equal('required');
228
223
  expect(error.getParams().missingProperty).to.equal('signature');
229
224
  });
@@ -233,14 +228,12 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
233
228
 
234
229
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
235
230
 
236
- expectJsonSchemaError(result, 2);
231
+ await expectJsonSchemaError(result, 65);
237
232
 
238
- const [error, byteArrayError] = result.getErrors();
233
+ const [error] = result.getErrors();
239
234
 
240
- expect(error.instancePath).to.equal('/signature/0');
235
+ expect(error.getInstancePath()).to.equal('/signature/0');
241
236
  expect(error.getKeyword()).to.equal('type');
242
-
243
- expect(byteArrayError.getKeyword()).to.equal('byteArray');
244
237
  });
245
238
 
246
239
  it('should be not shorter than 65 bytes', async () => {
@@ -248,11 +241,11 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
248
241
 
249
242
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
250
243
 
251
- expectJsonSchemaError(result);
244
+ await expectJsonSchemaError(result);
252
245
 
253
246
  const [error] = result.getErrors();
254
247
 
255
- expect(error.instancePath).to.equal('/signature');
248
+ expect(error.getInstancePath()).to.equal('/signature');
256
249
  expect(error.getKeyword()).to.equal('minItems');
257
250
  });
258
251
 
@@ -261,11 +254,11 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
261
254
 
262
255
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
263
256
 
264
- expectJsonSchemaError(result);
257
+ await expectJsonSchemaError(result);
265
258
 
266
259
  const [error] = result.getErrors();
267
260
 
268
- expect(error.instancePath).to.equal('/signature');
261
+ expect(error.getInstancePath()).to.equal('/signature');
269
262
  expect(error.getKeyword()).to.equal('maxItems');
270
263
  });
271
264
  });
@@ -276,7 +269,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
276
269
 
277
270
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
278
271
 
279
- expectJsonSchemaError(result);
272
+ await expectJsonSchemaError(result);
280
273
 
281
274
  const [error] = result.getErrors();
282
275
 
@@ -290,7 +283,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
290
283
 
291
284
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
292
285
 
293
- expectJsonSchemaError(result);
286
+ await expectJsonSchemaError(result);
294
287
 
295
288
  const [error] = result.getErrors();
296
289
 
@@ -303,7 +296,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
303
296
 
304
297
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
305
298
 
306
- expectJsonSchemaError(result);
299
+ await expectJsonSchemaError(result);
307
300
 
308
301
  const [error] = result.getErrors();
309
302
 
@@ -319,7 +312,23 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
319
312
  });
320
313
 
321
314
  it('should return valid result', async () => {
322
- rawStateTransition.addPublicKeys = [publicKeyToAdd];
315
+ const privateKey = new PrivateKey();
316
+ const publicKey = privateKey.toPublicKey();
317
+
318
+ const identityPublicKeyCreateTransition = new IdentityPublicKeyCreateTransition(
319
+ publicKeyToAdd,
320
+ );
321
+ identityPublicKeyCreateTransition.setData(publicKey.toBuffer());
322
+
323
+ stateTransition.setPublicKeysToAdd([identityPublicKeyCreateTransition]);
324
+ await stateTransition.signByPrivateKey(
325
+ privateKey.toBuffer(),
326
+ identityPublicKeyCreateTransition.type,
327
+ );
328
+ identityPublicKeyCreateTransition.setSignature(stateTransition.getSignature());
329
+ stateTransition.setPublicKeysToAdd([identityPublicKeyCreateTransition]);
330
+
331
+ rawStateTransition = stateTransition.toObject();
323
332
 
324
333
  const result = await validateIdentityUpdateTransitionBasic(
325
334
  rawStateTransition,
@@ -333,7 +342,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
333
342
 
334
343
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
335
344
 
336
- expectJsonSchemaError(result);
345
+ await expectJsonSchemaError(result);
337
346
 
338
347
  const [error] = result.getErrors();
339
348
  expect(error.getKeyword()).to.equal('minItems');
@@ -344,14 +353,14 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
344
353
  rawStateTransition.addPublicKeys = [];
345
354
 
346
355
  for (let i = 0; i <= 10; i++) {
347
- rawStateTransition.addPublicKeys.push(publicKeyToAdd);
356
+ rawStateTransition.addPublicKeys.push({ ...publicKeyToAdd, id: i + 1 });
348
357
  }
349
358
 
350
359
  const result = await validateIdentityUpdateTransitionBasic(
351
360
  rawStateTransition,
352
361
  );
353
362
 
354
- expectJsonSchemaError(result);
363
+ await expectJsonSchemaError(result);
355
364
 
356
365
  const [error] = result.getErrors();
357
366
 
@@ -366,7 +375,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
366
375
  rawStateTransition,
367
376
  );
368
377
 
369
- expectJsonSchemaError(result);
378
+ await expectJsonSchemaError(result);
370
379
 
371
380
  const [error] = result.getErrors();
372
381
 
@@ -375,47 +384,32 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
375
384
  });
376
385
 
377
386
  it('should be valid', async () => {
378
- rawStateTransition.addPublicKeys = [publicKeyToAdd];
387
+ const keyWithDupeId = { ...publicKeyToAdd, data: Buffer.alloc(33) };
379
388
 
380
- const publicKeysError = new SomeConsensusError('test');
381
- const publicKeysResult = new ValidationResult([
382
- publicKeysError,
389
+ stateTransition.setPublicKeysToAdd([
390
+ new IdentityPublicKeyCreateTransition(publicKeyToAdd),
391
+ new IdentityPublicKeyCreateTransition(keyWithDupeId),
383
392
  ]);
384
393
 
385
- validatePublicKeysMock.returns(publicKeysResult);
394
+ rawStateTransition = stateTransition.toObject();
386
395
 
387
396
  const result = await validateIdentityUpdateTransitionBasic(
388
397
  rawStateTransition,
389
398
  );
390
399
 
391
- expectValidationError(result);
392
-
393
- const [error] = result.getErrors();
394
-
395
- expect(error).to.equal(publicKeysError);
396
-
397
- expect(validatePublicKeysMock).to.be.calledOnceWithExactly(
398
- rawStateTransition.addPublicKeys,
399
- );
400
+ await expectValidationError(result, DuplicatedIdentityPublicKeyIdStateError);
400
401
  });
401
402
 
402
403
  it('should have valid signatures', async () => {
403
- const publicKeysError = new SomeConsensusError('test');
404
- const publicKeysResult = new ValidationResult([
405
- publicKeysError,
406
- ]);
407
-
408
- validatePublicKeySignaturesMock.resolves(publicKeysResult);
404
+ const invalidSignature = Buffer.alloc(65);
405
+ rawStateTransition.signature = invalidSignature;
406
+ rawStateTransition.addPublicKeys[0].signature = invalidSignature;
409
407
 
410
408
  const result = await validateIdentityUpdateTransitionBasic(
411
409
  rawStateTransition,
412
410
  );
413
411
 
414
- expectValidationError(result);
415
-
416
- const [error] = result.getErrors();
417
-
418
- expect(error).to.equal(publicKeysError);
412
+ await expectValidationError(result, InvalidIdentityKeySignatureError);
419
413
  });
420
414
  });
421
415
 
@@ -431,11 +425,11 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
431
425
  rawStateTransition,
432
426
  );
433
427
 
434
- expectJsonSchemaError(result);
428
+ await expectJsonSchemaError(result);
435
429
 
436
430
  const [error] = result.getErrors();
437
- expect(error.getKeyword()).to.equal('dependentRequired');
438
- expect(error.params.missingProperty).to.equal('publicKeysDisabledAt');
431
+ expect(error.getKeyword()).to.equal('required');
432
+ expect(error.getParams().missingProperty).to.equal('publicKeysDisabledAt');
439
433
  });
440
434
 
441
435
  it('should be valid', async () => {
@@ -457,7 +451,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
457
451
  rawStateTransition,
458
452
  );
459
453
 
460
- expectJsonSchemaError(result);
454
+ await expectJsonSchemaError(result);
461
455
 
462
456
  const [error] = result.getErrors();
463
457
 
@@ -473,7 +467,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
473
467
  rawStateTransition,
474
468
  );
475
469
 
476
- expectJsonSchemaError(result);
470
+ await expectJsonSchemaError(result);
477
471
 
478
472
  const [error] = result.getErrors();
479
473
 
@@ -489,7 +483,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
489
483
  rawStateTransition,
490
484
  );
491
485
 
492
- expectJsonSchemaError(result);
486
+ await expectJsonSchemaError(result);
493
487
 
494
488
  const [error] = result.getErrors();
495
489
 
@@ -505,7 +499,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
505
499
  rawStateTransition,
506
500
  );
507
501
 
508
- expectJsonSchemaError(result);
502
+ await expectJsonSchemaError(result);
509
503
 
510
504
  const [error] = result.getErrors();
511
505
 
@@ -522,11 +516,11 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
522
516
  rawStateTransition,
523
517
  );
524
518
 
525
- expectJsonSchemaError(result);
519
+ await expectJsonSchemaError(result);
526
520
 
527
521
  const [error] = result.getErrors();
528
- expect(error.getKeyword()).to.equal('dependentRequired');
529
- expect(error.params.missingProperty).to.equal('disablePublicKeys');
522
+ expect(error.getKeyword()).to.equal('required');
523
+ expect(error.getParams().missingProperty).to.equal('disablePublicKeys');
530
524
  });
531
525
 
532
526
  it('should be integer', async () => {
@@ -537,7 +531,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
537
531
  rawStateTransition,
538
532
  );
539
533
 
540
- expectJsonSchemaError(result);
534
+ await expectJsonSchemaError(result);
541
535
 
542
536
  const [error] = result.getErrors();
543
537
 
@@ -553,7 +547,7 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
553
547
  rawStateTransition,
554
548
  );
555
549
 
556
- expectJsonSchemaError(result);
550
+ await expectJsonSchemaError(result);
557
551
 
558
552
  const [error] = result.getErrors();
559
553
 
@@ -566,11 +560,6 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
566
560
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
567
561
 
568
562
  expect(result.isValid()).to.be.true();
569
-
570
- expect(validatePublicKeysMock)
571
- .to.be.calledOnceWithExactly(
572
- rawStateTransition.addPublicKeys,
573
- );
574
563
  });
575
564
 
576
565
  it('should have either addPublicKeys or disablePublicKeys', async () => {
@@ -580,16 +569,10 @@ describe('validateIdentityUpdateTransitionBasicFactory', () => {
580
569
 
581
570
  const result = await validateIdentityUpdateTransitionBasic(rawStateTransition);
582
571
 
583
- expectJsonSchemaError(result, 3);
572
+ await expectJsonSchemaError(result, 1);
584
573
 
585
- const [addPublicKeysError, disablePublicKeysError, error] = result.getErrors();
574
+ const [error] = result.getErrors();
586
575
 
587
576
  expect(error.getKeyword()).to.equal('anyOf');
588
-
589
- expect(disablePublicKeysError.schemaPath).to.equal('#/anyOf/1/required');
590
- expect(disablePublicKeysError.getKeyword()).to.equal('required');
591
-
592
- expect(addPublicKeysError.schemaPath).to.equal('#/anyOf/0/required');
593
- expect(addPublicKeysError.getKeyword()).to.equal('required');
594
577
  });
595
578
  });