@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
@@ -0,0 +1,61 @@
1
+ use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
2
+ use crate::errors::from_dpp_err;
3
+ use crate::utils::ToSerdeJSONExt;
4
+
5
+ use crate::validation::ValidationResultWasm;
6
+
7
+ use crate::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyCreateTransitionWasm;
8
+
9
+ use dpp::identity::state_transition::validate_public_key_signatures::{
10
+ PublicKeysSignaturesValidator, TPublicKeysSignaturesValidator,
11
+ };
12
+
13
+ use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyCreateTransition;
14
+
15
+ use serde_json::Value as JsonValue;
16
+ use wasm_bindgen::prelude::wasm_bindgen;
17
+ use wasm_bindgen::JsValue;
18
+
19
+ #[wasm_bindgen(js_name = PublicKeysSignaturesValidator)]
20
+ pub struct PublicKeysSignaturesValidatorWasm(PublicKeysSignaturesValidator<BlsAdapter>);
21
+
22
+ impl From<PublicKeysSignaturesValidator<BlsAdapter>> for PublicKeysSignaturesValidatorWasm {
23
+ fn from(validator: PublicKeysSignaturesValidator<BlsAdapter>) -> Self {
24
+ Self(validator)
25
+ }
26
+ }
27
+
28
+ #[wasm_bindgen(js_class = PublicKeysSignaturesValidator)]
29
+ impl PublicKeysSignaturesValidatorWasm {
30
+ #[wasm_bindgen(constructor)]
31
+ pub fn new(bls: JsBlsAdapter) -> PublicKeysSignaturesValidatorWasm {
32
+ PublicKeysSignaturesValidator::new(BlsAdapter(bls)).into()
33
+ }
34
+
35
+ #[wasm_bindgen(js_name=validate)]
36
+ pub fn validate_public_key_signatures(
37
+ &self,
38
+ raw_state_transition: JsValue,
39
+ raw_public_keys: Vec<JsValue>,
40
+ ) -> Result<ValidationResultWasm, JsValue> {
41
+ let state_transition_json = raw_state_transition.with_serde_to_json_value()?;
42
+
43
+ let public_keys = raw_public_keys
44
+ .into_iter()
45
+ .map(|raw_key| {
46
+ let parsed_key: IdentityPublicKeyCreateTransition =
47
+ IdentityPublicKeyCreateTransitionWasm::new(raw_key)?.into();
48
+ parsed_key
49
+ .to_raw_json_object(false)
50
+ .map_err(|e| from_dpp_err(e.into()))
51
+ })
52
+ .collect::<Result<Vec<JsonValue>, JsValue>>()?;
53
+
54
+ let result = self
55
+ .0
56
+ .validate_public_key_signatures(&state_transition_json, &public_keys)
57
+ .map_err(|e| from_dpp_err(e.into()))?;
58
+
59
+ Ok(result.map(|_| JsValue::undefined()).into())
60
+ }
61
+ }
@@ -0,0 +1,50 @@
1
+ use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
2
+ use crate::errors::from_dpp_err;
3
+ use crate::utils;
4
+ use crate::validation::ValidationResultWasm;
5
+ use dpp::identity::validation::{IdentityValidator, PublicKeysValidator};
6
+ use dpp::version::ProtocolVersionValidator;
7
+ use serde_json::Value;
8
+ use std::sync::Arc;
9
+ use wasm_bindgen::prelude::wasm_bindgen;
10
+ use wasm_bindgen::{JsError, JsValue};
11
+
12
+ #[wasm_bindgen(js_name=IdentityValidator)]
13
+ pub struct IdentityValidatorWasm(IdentityValidator<PublicKeysValidator<BlsAdapter>>);
14
+
15
+ impl From<IdentityValidator<PublicKeysValidator<BlsAdapter>>> for IdentityValidatorWasm {
16
+ fn from(v: IdentityValidator<PublicKeysValidator<BlsAdapter>>) -> Self {
17
+ Self(v)
18
+ }
19
+ }
20
+
21
+ impl From<IdentityValidatorWasm> for IdentityValidator<PublicKeysValidator<BlsAdapter>> {
22
+ fn from(v: IdentityValidatorWasm) -> Self {
23
+ v.0
24
+ }
25
+ }
26
+
27
+ #[wasm_bindgen(js_class=IdentityValidator)]
28
+ impl IdentityValidatorWasm {
29
+ #[wasm_bindgen(constructor)]
30
+ pub fn new(bls: JsBlsAdapter) -> Result<IdentityValidatorWasm, JsError> {
31
+ Ok(IdentityValidator::new(
32
+ Arc::new(ProtocolVersionValidator::default()),
33
+ Arc::new(PublicKeysValidator::new(BlsAdapter(bls))?),
34
+ )?
35
+ .into())
36
+ }
37
+
38
+ #[wasm_bindgen]
39
+ pub fn validate(&self, raw_identity: JsValue) -> Result<ValidationResultWasm, JsValue> {
40
+ let identity_json = utils::stringify(&raw_identity)?;
41
+ let raw_identity: Value =
42
+ serde_json::from_str(&identity_json).map_err(|e| e.to_string())?;
43
+ let result = self
44
+ .0
45
+ .validate_identity(&raw_identity)
46
+ .map_err(|e| from_dpp_err(e.into()))?;
47
+
48
+ Ok(result.map(|_| JsValue::undefined()).into())
49
+ }
50
+ }
@@ -1,3 +1,5 @@
1
+ mod identity_validator;
1
2
  mod public_keys_validator;
2
3
 
4
+ pub use identity_validator::*;
3
5
  pub use public_keys_validator::*;
@@ -19,9 +19,7 @@ impl PublicKeysValidatorWasm {
19
19
  #[wasm_bindgen(constructor)]
20
20
  pub fn new(adapter: JsBlsAdapter) -> Result<PublicKeysValidatorWasm, JsError> {
21
21
  Ok(Self {
22
- public_key_validator: PublicKeysValidator::new(BlsAdapter(JsBlsAdapter::from(
23
- adapter.clone(),
24
- )))?,
22
+ public_key_validator: PublicKeysValidator::new(BlsAdapter(adapter.clone()))?,
25
23
  public_key_in_state_transition_validator: PublicKeysValidator::new_with_schema(
26
24
  PUBLIC_KEY_SCHEMA_FOR_TRANSITION.clone(),
27
25
  BlsAdapter(adapter),
@@ -36,10 +34,11 @@ impl PublicKeysValidatorWasm {
36
34
  ) -> Result<ValidationResultWasm, JsValue> {
37
35
  let raw_public_keys = to_vec_of_serde_values(public_keys.iter())?;
38
36
 
39
- self.public_key_validator
37
+ let validation_result = self
38
+ .public_key_validator
40
39
  .validate_keys(&raw_public_keys)
41
- .map(ValidationResultWasm::from)
42
- .map_err(|e| JsValue::from(e.to_string()))
40
+ .map_err(|e| JsValue::from(e.to_string()))?;
41
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
43
42
  }
44
43
 
45
44
  #[wasm_bindgen(js_name=validatePublicKeyStructure)]
@@ -47,12 +46,13 @@ impl PublicKeysValidatorWasm {
47
46
  &self,
48
47
  public_key: JsValue,
49
48
  ) -> Result<ValidationResultWasm, JsValue> {
50
- let pk_serde_json = public_key.to_serde_json_value()?;
49
+ let pk_serde_json = public_key.with_serde_to_json_value()?;
51
50
 
52
- self.public_key_validator
51
+ let validation_result = self
52
+ .public_key_validator
53
53
  .validate_public_key_structure(&pk_serde_json)
54
- .map(ValidationResultWasm::from)
55
- .map_err(|e| JsValue::from(e.to_string()))
54
+ .map_err(|e| JsValue::from(e.to_string()))?;
55
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
56
56
  }
57
57
 
58
58
  #[wasm_bindgen(js_name=validateKeysInStateTransition)]
@@ -62,9 +62,10 @@ impl PublicKeysValidatorWasm {
62
62
  ) -> Result<ValidationResultWasm, JsValue> {
63
63
  let raw_public_keys = to_vec_of_serde_values(public_keys.iter())?;
64
64
 
65
- self.public_key_in_state_transition_validator
65
+ let validation_result = self
66
+ .public_key_in_state_transition_validator
66
67
  .validate_keys(&raw_public_keys)
67
- .map(ValidationResultWasm::from)
68
- .map_err(|e| JsValue::from(e.to_string()))
68
+ .map_err(|e| JsValue::from(e.to_string()))?;
69
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
69
70
  }
70
71
  }
@@ -0,0 +1,44 @@
1
+ use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
2
+
3
+ use crate::utils::{to_vec_of_serde_values, ToSerdeJSONExt};
4
+ use crate::validation_result::ValidationResultWasm;
5
+ use dpp::identity::validation::{PublicKeysValidator, TPublicKeysValidator};
6
+
7
+ use wasm_bindgen::prelude::*;
8
+
9
+ #[wasm_bindgen(js_name = PublicKeysValidator)]
10
+ pub struct PublicKeysValidatorWasm(PublicKeysValidator<BlsAdapter>);
11
+
12
+ #[wasm_bindgen(js_class = PublicKeysValidator)]
13
+ impl PublicKeysValidatorWasm {
14
+ #[wasm_bindgen(constructor)]
15
+ pub fn new(adapter: JsBlsAdapter) -> PublicKeysValidatorWasm {
16
+ Self(PublicKeysValidator::new(BlsAdapter(adapter)).unwrap())
17
+ }
18
+
19
+ #[wasm_bindgen(js_name=validateKeys)]
20
+ pub fn validate_keys(
21
+ &self,
22
+ public_keys: js_sys::Array,
23
+ ) -> Result<ValidationResultWasm, JsValue> {
24
+ let raw_public_keys = to_vec_of_serde_values(public_keys.iter())?;
25
+
26
+ self.0
27
+ .validate_keys(&raw_public_keys)
28
+ .map(ValidationResultWasm::from)
29
+ .map_err(|e| JsValue::from(e.to_string()))
30
+ }
31
+
32
+ #[wasm_bindgen(js_name=validatePublicKeyStructure)]
33
+ pub fn validate_public_key_structure(
34
+ &self,
35
+ public_key: JsValue,
36
+ ) -> Result<ValidationResultWasm, JsValue> {
37
+ let pk_serde_json = public_key.with_serde_to_json_value()?;
38
+
39
+ self.0
40
+ .validate_public_key_structure(&pk_serde_json)
41
+ .map(ValidationResultWasm::from)
42
+ .map_err(|e| JsValue::from(e.to_string()))
43
+ }
44
+ }
package/src/lib.rs CHANGED
@@ -1,6 +1,9 @@
1
+ extern crate core;
2
+
1
3
  pub use dash_platform_protocol::*;
2
4
  pub use data_contract::*;
3
5
  pub use data_contract_factory::*;
6
+ pub use data_trigger::*;
4
7
  pub use document::*;
5
8
  pub use identity::*;
6
9
  pub use metadata::*;
@@ -9,6 +12,7 @@ pub use state_transition::*;
9
12
  mod dash_platform_protocol;
10
13
  mod data_contract;
11
14
  mod data_contract_factory;
15
+ mod data_trigger;
12
16
  mod document;
13
17
  pub mod errors;
14
18
  mod identifier;
@@ -16,9 +20,11 @@ mod identity;
16
20
  mod metadata;
17
21
  mod state_repository;
18
22
  mod state_transition;
23
+ mod version;
19
24
 
20
25
  mod utils;
21
26
 
22
27
  mod bls_adapter;
23
28
  mod buffer;
29
+ mod lodash;
24
30
  mod validation;
package/src/lodash.rs ADDED
@@ -0,0 +1,7 @@
1
+ use wasm_bindgen::prelude::*;
2
+
3
+ #[wasm_bindgen(module = "lodash")]
4
+ extern "C" {
5
+ #[wasm_bindgen(js_name = "set")]
6
+ pub fn lodash_set(object: &JsValue, path: &str, value: JsValue);
7
+ }
package/src/metadata.rs CHANGED
@@ -3,7 +3,10 @@
3
3
  pub use serde::{Deserialize, Serialize};
4
4
  use wasm_bindgen::prelude::*;
5
5
 
6
+ use crate::utils::ToSerdeJSONExt;
6
7
  use dpp::metadata::Metadata;
8
+ use dpp::util::deserializer::ProtocolVersion;
9
+ use dpp::util::json_value::JsonValueExt;
7
10
 
8
11
  #[wasm_bindgen(js_name=Metadata)]
9
12
  #[derive(Debug)]
@@ -14,6 +17,13 @@ impl std::convert::From<Metadata> for MetadataWasm {
14
17
  MetadataWasm(v)
15
18
  }
16
19
  }
20
+
21
+ impl std::convert::From<&MetadataWasm> for Metadata {
22
+ fn from(v: &MetadataWasm) -> Self {
23
+ v.0.clone()
24
+ }
25
+ }
26
+
17
27
  impl std::convert::Into<Metadata> for MetadataWasm {
18
28
  fn into(self) -> Metadata {
19
29
  self.0
@@ -24,21 +34,35 @@ impl std::convert::Into<Metadata> for MetadataWasm {
24
34
  #[wasm_bindgen(js_class=Metadata)]
25
35
  impl MetadataWasm {
26
36
  #[wasm_bindgen(constructor)]
27
- pub fn new(block_height: JsValue, core_chain_locked_height: JsValue) -> Self {
28
- // TODO: return an error instead of unwraps
29
- let block_height = block_height.as_f64().unwrap() as u64;
30
- let core_chain_locked_height = core_chain_locked_height.as_f64().unwrap() as u64;
37
+ pub fn new(options: JsValue) -> Result<MetadataWasm, JsValue> {
38
+ let metadata_options = options.with_serde_to_json_value()?;
39
+ let block_height = metadata_options
40
+ .get_f64("blockHeight")
41
+ .map_err(|e| JsError::new(&e.to_string()))?;
42
+ let core_chain_locked_height = metadata_options
43
+ .get_f64("coreChainLockedHeight")
44
+ .map_err(|e| JsError::new(&e.to_string()))?;
45
+ let time_ms = metadata_options
46
+ .get_f64("timeMs")
47
+ .map_err(|e| JsError::new(&e.to_string()))?;
48
+ let protocol_version = metadata_options
49
+ .get_f64("protocolVersion")
50
+ .map_err(|e| JsError::new(&e.to_string()))?;
51
+
31
52
  let inner = Metadata {
32
- block_height,
33
- core_chain_locked_height,
53
+ block_height: block_height as u64,
54
+ core_chain_locked_height: core_chain_locked_height as u64,
55
+ time_ms: time_ms as u64,
56
+ protocol_version: protocol_version as u64 as ProtocolVersion,
34
57
  };
35
- inner.into()
58
+ Ok(inner.into())
36
59
  }
37
60
 
38
61
  #[wasm_bindgen(js_name=from)]
39
- pub fn from(object: JsValue) -> Self {
40
- let i: Metadata = serde_json::from_str(&object.as_string().unwrap()).unwrap();
41
- MetadataWasm(i)
62
+ pub fn from(object: JsValue) -> Result<MetadataWasm, JsValue> {
63
+ let metadata: Metadata = serde_wasm_bindgen::from_value(object)?;
64
+
65
+ Ok(MetadataWasm(metadata))
42
66
  }
43
67
 
44
68
  #[wasm_bindgen(js_name=toJSON)]
@@ -51,4 +75,24 @@ impl MetadataWasm {
51
75
  let serializer = serde_wasm_bindgen::Serializer::json_compatible();
52
76
  self.0.serialize(&serializer).expect("implements Serialize")
53
77
  }
78
+
79
+ #[wasm_bindgen(js_name=getBlockHeight)]
80
+ pub fn block_height(&self) -> f64 {
81
+ self.0.block_height as f64
82
+ }
83
+
84
+ #[wasm_bindgen(js_name=getCoreChainLockedHeight)]
85
+ pub fn core_chain_locked_height(&self) -> f64 {
86
+ self.0.core_chain_locked_height as f64
87
+ }
88
+
89
+ #[wasm_bindgen(js_name=getTimeMs)]
90
+ pub fn time_ms(&self) -> f64 {
91
+ self.0.time_ms as f64
92
+ }
93
+
94
+ #[wasm_bindgen(js_name=getProtocolVersion)]
95
+ pub fn protocol_version(&self) -> f64 {
96
+ self.0.protocol_version as f64
97
+ }
54
98
  }