@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,62 @@
1
+ use crate::errors::from_dpp_err;
2
+ use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper};
3
+ use crate::validation::ValidationResultWasm;
4
+ use dpp::identity::state_transition::asset_lock_proof::{
5
+ AssetLockPublicKeyHashFetcher, AssetLockTransactionOutputFetcher,
6
+ };
7
+ use dpp::state_transition::validation::validate_state_transition_key_signature::StateTransitionKeySignatureValidator;
8
+ use dpp::validation::AsyncDataValidator;
9
+ use std::sync::Arc;
10
+ use wasm_bindgen::prelude::wasm_bindgen;
11
+ use wasm_bindgen::JsValue;
12
+
13
+ #[wasm_bindgen(js_name=StateTransitionKeySignatureValidator)]
14
+ pub struct StateTransitionKeySignatureValidatorWasm(
15
+ StateTransitionKeySignatureValidator<ExternalStateRepositoryLikeWrapper>,
16
+ );
17
+
18
+ impl From<StateTransitionKeySignatureValidator<ExternalStateRepositoryLikeWrapper>>
19
+ for StateTransitionKeySignatureValidatorWasm
20
+ {
21
+ fn from(
22
+ validator: StateTransitionKeySignatureValidator<ExternalStateRepositoryLikeWrapper>,
23
+ ) -> Self {
24
+ Self(validator)
25
+ }
26
+ }
27
+
28
+ #[wasm_bindgen(js_class=StateTransitionKeySignatureValidator)]
29
+ impl StateTransitionKeySignatureValidatorWasm {
30
+ #[wasm_bindgen(constructor)]
31
+ pub fn new(state_repository: ExternalStateRepositoryLike) -> Self {
32
+ let state_repository_wrapper =
33
+ Arc::new(ExternalStateRepositoryLikeWrapper::new(state_repository));
34
+
35
+ let tx_output_fetcher =
36
+ AssetLockTransactionOutputFetcher::new(state_repository_wrapper.clone());
37
+
38
+ let public_key_hash_fetcher =
39
+ AssetLockPublicKeyHashFetcher::new(state_repository_wrapper.clone(), tx_output_fetcher);
40
+
41
+ StateTransitionKeySignatureValidator::new(state_repository_wrapper, public_key_hash_fetcher)
42
+ .into()
43
+ }
44
+
45
+ #[wasm_bindgen]
46
+ pub async fn validate(
47
+ &self,
48
+ state_transition: JsValue,
49
+ ) -> Result<ValidationResultWasm, JsValue> {
50
+ let state_transition =
51
+ super::super::conversion::create_state_transition_from_wasm_instance(
52
+ &state_transition,
53
+ )?;
54
+
55
+ let validation_result = self
56
+ .0
57
+ .validate(&state_transition)
58
+ .await
59
+ .map_err(from_dpp_err)?;
60
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
61
+ }
62
+ }
package/src/utils.rs CHANGED
@@ -1,15 +1,40 @@
1
- use dpp::dashcore::anyhow::Context;
1
+ use std::convert::TryInto;
2
+
3
+ use anyhow::{anyhow, bail};
4
+ use dpp::{
5
+ dashcore::{anyhow, anyhow::Context},
6
+ util::json_value::{JsonValueExt, ReplaceWith},
7
+ ProtocolError,
8
+ };
9
+
2
10
  use js_sys::Function;
11
+ use serde::de::DeserializeOwned;
3
12
  use serde_json::Value;
4
- use wasm_bindgen::prelude::*;
13
+ use wasm_bindgen::{convert::RefFromWasmAbi, prelude::*};
14
+
15
+ use crate::errors::{from_dpp_err, RustConversionError};
5
16
 
6
17
  pub trait ToSerdeJSONExt {
7
- fn to_serde_json_value(&self) -> Result<Value, JsValue>;
18
+ fn with_serde_to_json_value(&self) -> Result<Value, JsValue>;
19
+ fn with_serde_into<D: DeserializeOwned>(&self) -> Result<D, JsValue>
20
+ where
21
+ D: for<'de> serde::de::Deserialize<'de> + 'static;
8
22
  }
9
23
 
10
24
  impl ToSerdeJSONExt for JsValue {
11
- fn to_serde_json_value(&self) -> Result<Value, JsValue> {
12
- to_serde_json_value(self)
25
+ /// Converts the `JsValue` into `serde_json::Value`. It's an expensive conversion,
26
+ /// as `JsValue` must be stringified first
27
+ fn with_serde_to_json_value(&self) -> Result<Value, JsValue> {
28
+ with_serde_to_json_value(self)
29
+ }
30
+
31
+ /// converts the `JsValue` into any type that is supported by serde. It's an expensive conversion
32
+ /// as the `jsValue` must be stringified first
33
+ fn with_serde_into<D>(&self) -> Result<D, JsValue>
34
+ where
35
+ D: for<'de> serde::de::Deserialize<'de> + 'static,
36
+ {
37
+ with_serde_into(self)
13
38
  }
14
39
  }
15
40
 
@@ -25,7 +50,7 @@ pub fn to_vec_of_serde_values(
25
50
  ) -> Result<Vec<Value>, JsValue> {
26
51
  values
27
52
  .into_iter()
28
- .map(|v| v.as_ref().to_serde_json_value())
53
+ .map(|v| v.as_ref().with_serde_to_json_value())
29
54
  .collect()
30
55
  }
31
56
 
@@ -38,7 +63,7 @@ where
38
63
  .collect()
39
64
  }
40
65
 
41
- pub fn to_serde_json_value(data: &JsValue) -> Result<Value, JsValue> {
66
+ pub fn with_serde_to_json_value(data: &JsValue) -> Result<Value, JsValue> {
42
67
  let data = stringify(data)?;
43
68
  let value: Value = serde_json::from_str(&data)
44
69
  .with_context(|| format!("cant convert {data:#?} to serde json value"))
@@ -46,10 +71,21 @@ pub fn to_serde_json_value(data: &JsValue) -> Result<Value, JsValue> {
46
71
  Ok(value)
47
72
  }
48
73
 
74
+ pub fn with_serde_into<D>(data: &JsValue) -> Result<D, JsValue>
75
+ where
76
+ D: for<'de> serde::de::Deserialize<'de> + 'static,
77
+ {
78
+ let data = stringify(data)?;
79
+ let value: D = serde_json::from_str(&data)
80
+ .with_context(|| format!("cant convert {:#?} to serde json value", data))
81
+ .map_err(|e| format!("{:#}", e))?;
82
+ Ok(value)
83
+ }
84
+
49
85
  pub fn stringify(data: &JsValue) -> Result<String, JsValue> {
50
86
  let replacer_func = Function::new_with_args(
51
87
  "key, value",
52
- "return value.type=='Buffer' ? value.data : value ",
88
+ "return (value != undefined && value.type=='Buffer') ? value.data : value ",
53
89
  );
54
90
 
55
91
  let data_string: String =
@@ -57,3 +93,169 @@ pub fn stringify(data: &JsValue) -> Result<String, JsValue> {
57
93
 
58
94
  Ok(data_string)
59
95
  }
96
+
97
+ pub trait WithJsError<T> {
98
+ /// Converts the error into JsValue
99
+ fn with_js_error(self) -> Result<T, JsValue>;
100
+ }
101
+
102
+ impl<T> WithJsError<T> for Result<T, anyhow::Error> {
103
+ fn with_js_error(self) -> Result<T, JsValue> {
104
+ match self {
105
+ Ok(ok) => Ok(ok),
106
+ Err(error) => Err(format!("{error:#}").into()),
107
+ }
108
+ }
109
+ }
110
+
111
+ impl<T> WithJsError<T> for Result<T, ProtocolError> {
112
+ fn with_js_error(self) -> Result<T, JsValue> {
113
+ match self {
114
+ Ok(ok) => Ok(ok),
115
+ Err(error) => Err(from_dpp_err(error)),
116
+ }
117
+ }
118
+ }
119
+
120
+ impl<T> WithJsError<T> for Result<T, serde_json::Error> {
121
+ fn with_js_error(self) -> Result<T, JsValue> {
122
+ match self {
123
+ Ok(ok) => Ok(ok),
124
+ Err(error) => Err(RustConversionError::from(error).to_js_value()),
125
+ }
126
+ }
127
+ }
128
+
129
+ pub trait IntoWasm {
130
+ fn to_wasm<T: RefFromWasmAbi<Abi = u32>>(&self, class_name: &str)
131
+ -> Result<T::Anchor, JsValue>;
132
+ }
133
+
134
+ impl IntoWasm for JsValue {
135
+ fn to_wasm<T: RefFromWasmAbi<Abi = u32>>(
136
+ &self,
137
+ class_name: &str,
138
+ ) -> Result<T::Anchor, JsValue> {
139
+ generic_of_js_val::<T>(self, class_name)
140
+ }
141
+ }
142
+
143
+ pub fn generic_of_js_val<T: RefFromWasmAbi<Abi = u32>>(
144
+ js_value: &JsValue,
145
+ class_name: &str,
146
+ ) -> Result<T::Anchor, JsValue> {
147
+ if !js_value.is_object() {
148
+ return Err(JsError::new(
149
+ format!("Value supplied as {} is not an object", class_name).as_str(),
150
+ )
151
+ .into());
152
+ }
153
+
154
+ let ctor_name = js_sys::Object::get_prototype_of(js_value)
155
+ .constructor()
156
+ .name();
157
+
158
+ if ctor_name == class_name {
159
+ let ptr = js_sys::Reflect::get(js_value, &JsValue::from_str("ptr"))?;
160
+ let ptr_u32: u32 = ptr
161
+ .as_f64()
162
+ .ok_or_else(|| JsValue::from(JsError::new("Invalid JS object pointer")))?
163
+ as u32;
164
+ let reference = unsafe { T::ref_from_abi(ptr_u32) };
165
+ Ok(reference)
166
+ } else {
167
+ let error_string = format!(
168
+ "JS object constructor name mismatch. Expected {}, provided {}.",
169
+ class_name, ctor_name
170
+ );
171
+ Err(JsError::new(&error_string).into())
172
+ }
173
+ }
174
+
175
+ pub const SKIP_VALIDATION_PROPERTY_NAME: &str = "skipValidation";
176
+
177
+ pub fn get_bool_from_options(
178
+ options: JsValue,
179
+ property: &str,
180
+ default: bool,
181
+ ) -> Result<bool, JsValue> {
182
+ if options.is_object() {
183
+ let val2 = options.with_serde_to_json_value()?;
184
+ let kek = val2
185
+ .as_object()
186
+ .ok_or_else(|| JsError::new("Can't parse options"))?;
187
+ let kek2 = kek
188
+ .get(property)
189
+ .ok_or_else(|| JsError::new(&format!("Can't get property {} of options", property)))?;
190
+ Ok(kek2
191
+ .as_bool()
192
+ .ok_or_else(|| JsError::new(&format!("Option {} is not a boolean", property)))?)
193
+ } else {
194
+ Ok(default)
195
+ }
196
+ }
197
+
198
+ pub fn get_class_name(value: &JsValue) -> String {
199
+ js_sys::Object::get_prototype_of(value)
200
+ .constructor()
201
+ .name()
202
+ .into()
203
+ }
204
+
205
+ pub fn try_to_u64(value: JsValue) -> Result<u64, anyhow::Error> {
206
+ let result = if value.is_bigint() {
207
+ js_sys::BigInt::new(&value)
208
+ .map_err(|e| anyhow!("unable to create bigInt: {}", e.to_string()))?
209
+ .try_into()
210
+ .map_err(|e| anyhow!("conversion of BigInt to u64 failed: {:#}", e))
211
+ } else if value.as_f64().is_some() {
212
+ let number = js_sys::Number::from(value);
213
+ convert_number_to_u64(number)
214
+ } else {
215
+ bail!("supported types are Number or BigInt")
216
+ };
217
+
218
+ result
219
+ }
220
+
221
+ pub fn convert_number_to_u64(js_number: js_sys::Number) -> Result<u64, anyhow::Error> {
222
+ if let Some(float_number) = js_number.as_f64() {
223
+ if float_number.is_nan() || float_number.is_infinite() {
224
+ bail!("received an invalid timestamp: the number is either NaN or Inf")
225
+ }
226
+ if float_number < 0. {
227
+ bail!("received an invalid timestamp: the number is negative");
228
+ }
229
+ if float_number.fract() != 0. {
230
+ bail!("received an invalid timestamp: the number is fractional")
231
+ }
232
+ if float_number > u64::MAX as f64 {
233
+ bail!("received an invalid timestamp: the number is > u64::max")
234
+ }
235
+
236
+ return Ok(float_number as u64);
237
+ }
238
+ bail!("the value is not a number")
239
+ }
240
+
241
+ pub(crate) fn replace_identifiers_with_bytes_without_failing<'a>(
242
+ value: &mut Value,
243
+ paths: impl IntoIterator<Item = &'a str>,
244
+ ) {
245
+ // Errors are ignored. When `Buffer` crosses the WASM boundary it becomes an Array.
246
+ // When `Identifier` crosses the WASM boundary it becomes a String. From perspective of JS
247
+ // `Identifier` and `Buffer` are used interchangeably, so we we can expect the replacing may fail when `Buffer` is provided
248
+ let _ = value
249
+ .replace_identifier_paths(paths, ReplaceWith::Bytes)
250
+ .with_js_error();
251
+ }
252
+
253
+ // The trait `Inner` provides better flexibility and visibility when you need to switch
254
+ // between WASM structure and original structure.
255
+ pub(crate) trait Inner {
256
+ type InnerItem;
257
+
258
+ fn into_inner(self) -> Self::InnerItem;
259
+ fn inner(&self) -> &Self::InnerItem;
260
+ fn inner_mut(&mut self) -> &mut Self::InnerItem;
261
+ }
@@ -0,0 +1,41 @@
1
+ use anyhow::Context;
2
+ use dpp::validation::JsonSchemaValidator;
3
+ use serde_json::Value;
4
+ use wasm_bindgen::prelude::*;
5
+
6
+ use crate::utils::{ToSerdeJSONExt, WithJsError};
7
+
8
+ #[wasm_bindgen(js_name=JsonSchemaValidator)]
9
+ pub struct JsonSchemaValidatorWasm(JsonSchemaValidator);
10
+
11
+ #[wasm_bindgen(js_class=JsonSchemaValidator)]
12
+ impl JsonSchemaValidatorWasm {
13
+ #[wasm_bindgen(constructor)]
14
+ pub fn new(
15
+ schema_js: &JsValue,
16
+ definitions: &JsValue,
17
+ ) -> Result<JsonSchemaValidatorWasm, JsValue> {
18
+ let schema = schema_js.with_serde_to_json_value()?;
19
+ let maybe_defs: Option<Value> = if definitions.is_object() {
20
+ Some(definitions.with_serde_to_json_value()?)
21
+ } else {
22
+ None
23
+ };
24
+
25
+ let validator = if let Some(defs) = maybe_defs {
26
+ let map = defs
27
+ .as_object()
28
+ .context("definitions are not a map")
29
+ .with_js_error()?;
30
+ JsonSchemaValidator::new_with_definitions(schema, map)
31
+ .context("Schema Validator creation with definitions failed")
32
+ .with_js_error()?
33
+ } else {
34
+ JsonSchemaValidator::new(schema)
35
+ .context("Schema Validator creation failed")
36
+ .with_js_error()?
37
+ };
38
+
39
+ Ok(JsonSchemaValidatorWasm(validator))
40
+ }
41
+ }
@@ -1,3 +1,5 @@
1
+ mod json_schema_validator;
1
2
  mod validation_result;
2
3
 
4
+ pub use json_schema_validator::*;
3
5
  pub use validation_result::*;
@@ -1,10 +1,20 @@
1
1
  use crate::errors::consensus_error::from_consensus_error_ref;
2
- use dpp::validation::ValidationResult;
2
+ use dpp::{consensus::ConsensusError, validation::ValidationResult};
3
3
  use js_sys::JsString;
4
4
  use wasm_bindgen::prelude::*;
5
5
 
6
6
  #[wasm_bindgen(js_name=ValidationResult)]
7
- pub struct ValidationResultWasm(ValidationResult<()>);
7
+ #[derive(Debug)]
8
+ pub struct ValidationResultWasm(ValidationResult<JsValue>);
9
+
10
+ impl<T> From<ValidationResult<T>> for ValidationResultWasm
11
+ where
12
+ T: Into<JsValue> + Clone,
13
+ {
14
+ fn from(validation_result: ValidationResult<T>) -> Self {
15
+ ValidationResultWasm(validation_result.map(Into::into))
16
+ }
17
+ }
8
18
 
9
19
  #[wasm_bindgen(js_class=ValidationResult)]
10
20
  impl ValidationResultWasm {
@@ -32,10 +42,24 @@ impl ValidationResultWasm {
32
42
  .map(from_consensus_error_ref)
33
43
  .collect()
34
44
  }
45
+
46
+ #[wasm_bindgen(js_name=getData)]
47
+ pub fn get_data(&self) -> JsValue {
48
+ self.0.data().unwrap_or(&JsValue::undefined()).to_owned()
49
+ }
50
+
51
+ #[wasm_bindgen(js_name=getFirstError)]
52
+ pub fn get_first_error(&self) -> JsValue {
53
+ if !self.0.errors.is_empty() {
54
+ from_consensus_error_ref(&self.0.errors[0])
55
+ } else {
56
+ JsValue::undefined()
57
+ }
58
+ }
35
59
  }
36
60
 
37
- impl From<ValidationResult<()>> for ValidationResultWasm {
38
- fn from(validation_result: ValidationResult<()>) -> Self {
39
- ValidationResultWasm(validation_result)
61
+ impl ValidationResultWasm {
62
+ pub fn add_error(&mut self, error: impl Into<ConsensusError>) {
63
+ self.0.add_error(error)
40
64
  }
41
65
  }
@@ -0,0 +1,2 @@
1
+ mod protocol_version;
2
+ pub use protocol_version::*;
@@ -0,0 +1,103 @@
1
+ use crate::errors::CompatibleProtocolVersionIsNotDefinedErrorWasm;
2
+ use crate::utils::ToSerdeJSONExt;
3
+ use crate::validation::ValidationResultWasm;
4
+ use dpp::util::json_value::JsonValueExt;
5
+ use dpp::version::ProtocolVersionValidator;
6
+ use std::collections::HashMap;
7
+ use std::convert::TryFrom;
8
+ use wasm_bindgen::prelude::*;
9
+
10
+ #[wasm_bindgen(js_name=ProtocolVersionValidator)]
11
+ pub struct ProtocolVersionValidatorWasm(ProtocolVersionValidator);
12
+
13
+ #[wasm_bindgen(js_class=ProtocolVersionValidator)]
14
+ impl ProtocolVersionValidatorWasm {
15
+ // TODO should the constructor be without parameters?
16
+ #[wasm_bindgen(constructor)]
17
+ pub fn new(options: JsValue) -> Result<ProtocolVersionValidatorWasm, JsValue> {
18
+ if options.is_undefined() {
19
+ Ok(ProtocolVersionValidatorWasm(
20
+ ProtocolVersionValidator::default(),
21
+ ))
22
+ } else {
23
+ let metadata_options = options.with_serde_to_json_value()?;
24
+ let current_protocol_version: u32 = metadata_options
25
+ .get_u32("currentProtocolVersion")
26
+ .map_err(|e| JsError::new(&e.to_string()))?;
27
+ let latest_protocol_version: u32 = metadata_options
28
+ .get_u32("latestProtocolVersion")
29
+ .map_err(|e| JsError::new(&e.to_string()))?;
30
+ let compatibility_map_value: serde_json::Value = metadata_options
31
+ .get_value("versionCompatibilityMap")
32
+ .map(|v| v.clone())
33
+ .map_err(|e| JsError::new(&e.to_string()))?;
34
+
35
+ let hash_map = compatibility_map_value
36
+ .as_object()
37
+ .ok_or_else(|| {
38
+ JsValue::from(JsError::new("Expected compatibility map to be an object"))
39
+ })?
40
+ .into_iter()
41
+ .map(|(key, value)| {
42
+ let new_key = key
43
+ .parse::<u32>()
44
+ .map_err(|e| JsError::new(&*e.to_string()))?;
45
+
46
+ let new_value_64 = value.as_u64().ok_or_else(|| {
47
+ JsError::new("Expect values in compatibility map to contain only numbers")
48
+ })?;
49
+ let new_value =
50
+ u32::try_from(new_value_64).map_err(|e| JsError::new(&*e.to_string()))?;
51
+
52
+ Ok((new_key, new_value))
53
+ })
54
+ .collect::<Result<HashMap<u32, u32>, JsError>>()?;
55
+
56
+ Ok(ProtocolVersionValidatorWasm(ProtocolVersionValidator::new(
57
+ current_protocol_version,
58
+ latest_protocol_version,
59
+ hash_map,
60
+ )))
61
+ }
62
+ }
63
+
64
+ #[wasm_bindgen]
65
+ pub fn validate(&self, version: u32) -> Result<ValidationResultWasm, JsValue> {
66
+ self.0
67
+ .validate(version)
68
+ .map(|v| v.map(|_| JsValue::undefined()))
69
+ .map(ValidationResultWasm::from)
70
+ .map_err(|e| CompatibleProtocolVersionIsNotDefinedErrorWasm::new(e).into())
71
+ .into()
72
+ }
73
+ }
74
+
75
+ impl ProtocolVersionValidatorWasm {
76
+ pub fn protocol_version(&self) -> u32 {
77
+ self.0.protocol_version()
78
+ }
79
+ }
80
+
81
+ impl From<ProtocolVersionValidator> for ProtocolVersionValidatorWasm {
82
+ fn from(doc_validator: ProtocolVersionValidator) -> Self {
83
+ ProtocolVersionValidatorWasm(doc_validator)
84
+ }
85
+ }
86
+
87
+ impl From<&ProtocolVersionValidator> for ProtocolVersionValidatorWasm {
88
+ fn from(doc_validator: &ProtocolVersionValidator) -> Self {
89
+ ProtocolVersionValidatorWasm(doc_validator.clone())
90
+ }
91
+ }
92
+
93
+ impl From<ProtocolVersionValidatorWasm> for ProtocolVersionValidator {
94
+ fn from(val: ProtocolVersionValidatorWasm) -> Self {
95
+ val.0
96
+ }
97
+ }
98
+
99
+ impl From<&ProtocolVersionValidatorWasm> for ProtocolVersionValidator {
100
+ fn from(val: &ProtocolVersionValidatorWasm) -> Self {
101
+ val.0.clone()
102
+ }
103
+ }
@@ -1,72 +1,87 @@
1
- const DashPlatformProtocol = require('@dashevo/dpp/lib/DashPlatformProtocol');
1
+ const getDataContractJSFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
2
+ const getBlsAdapterMock = require('../../../lib/test/mocks/getBlsAdapterMock');
2
3
 
3
- const DataContract = require('@dashevo/dpp/lib/dataContract/DataContract');
4
-
5
- const DataContractCreateTransition = require('@dashevo/dpp/lib/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition');
6
-
7
- const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
8
-
9
- const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
10
-
11
- const DataContractFactory = require('@dashevo/dpp/lib/dataContract/DataContractFactory');
4
+ const { default: loadWasmDpp } = require('../../..');
5
+ let {
6
+ DashPlatformProtocol, DataContract, ValidationResult, DataContractValidator,
7
+ DataContractFactory, DataContractCreateTransition,
8
+ } = require('../../..');
12
9
 
13
10
  describe('DataContractFacade', () => {
14
11
  let dpp;
15
- let dataContract;
12
+ let dataContractJs;
16
13
  let dataContractFactory;
14
+ let blsAdapter;
15
+ let rawDataContract;
16
+ let dataContractWasm;
17
+
18
+ before(async () => {
19
+ ({
20
+ DashPlatformProtocol, DataContract, ValidationResult,
21
+ DataContractValidator, DataContractFactory, DataContractCreateTransition,
22
+ } = await loadWasmDpp());
23
+ });
17
24
 
18
25
  beforeEach(async () => {
19
- dpp = new DashPlatformProtocol();
20
- await dpp.initialize();
26
+ blsAdapter = await getBlsAdapterMock();
27
+ dpp = new DashPlatformProtocol(blsAdapter);
21
28
 
22
- dataContract = getDataContractFixture();
29
+ dataContractJs = await getDataContractJSFixture();
30
+ rawDataContract = dataContractJs.toObject();
23
31
 
32
+ const dataContractValidator = new DataContractValidator();
24
33
  dataContractFactory = new DataContractFactory(
25
- dpp,
26
- undefined,
27
- undefined,
34
+ 1,
35
+ dataContractValidator,
28
36
  );
37
+
38
+ dataContractWasm = await dataContractFactory.createFromObject(rawDataContract);
29
39
  });
30
40
 
31
41
  describe('create', () => {
32
42
  it('should create DataContract', () => {
33
43
  const result = dpp.dataContract.create(
34
- dataContract.getOwnerId(),
35
- dataContract.getDocuments(),
44
+ dataContractJs.getOwnerId(),
45
+ dataContractJs.getDocuments(),
36
46
  );
37
47
 
38
48
  expect(result).to.be.an.instanceOf(DataContract);
39
49
 
40
- expect(result.getOwnerId()).to.deep.equal(dataContract.getOwnerId());
41
- expect(result.getDocuments()).to.equal(dataContract.getDocuments());
50
+ expect(result.getOwnerId().toBuffer()).to.deep.equal(dataContractJs.getOwnerId().toBuffer());
51
+ expect(result.getDocuments()).to.deep.equal(dataContractJs.getDocuments());
42
52
  });
43
53
  });
44
54
 
45
55
  describe('createFromObject', () => {
46
56
  it('should create DataContract from plain object', async () => {
47
- const result = await dpp.dataContract.createFromObject(dataContract.toObject());
57
+ const result = await dpp.dataContract.createFromObject(rawDataContract);
48
58
 
49
59
  expect(result).to.be.an.instanceOf(DataContract);
50
60
 
51
- expect(result.toObject()).to.deep.equal(dataContract.toObject());
61
+ expect(result.toObject()).to.deep.equal(dataContractJs.toObject());
52
62
  });
53
63
  });
54
64
 
55
65
  describe('createFromBuffer', () => {
56
66
  it('should create DataContract from string', async () => {
57
- const result = await dpp.dataContract.createFromBuffer(dataContract.toBuffer());
67
+ const contract = dpp.dataContract.create(
68
+ dataContractJs.getOwnerId(),
69
+ dataContractJs.getDocuments(),
70
+ );
58
71
 
59
- expect(result).to.be.an.instanceOf(DataContract);
72
+ const result = await dpp.dataContract.createFromBuffer(contract.toBuffer());
60
73
 
61
- expect(result.toObject()).to.deep.equal(dataContract.toObject());
74
+ expect(result).to.be.an.instanceOf(DataContract);
75
+ expect(result.toObject()).to.deep.equal(contract.toObject());
62
76
  });
63
77
  });
64
78
 
65
79
  describe('createDataContractCreateTransition', () => {
66
- it('should create DataContractCreateTransition from DataContract', () => {
67
- const stateTransition = dataContractFactory.createDataContractCreateTransition(dataContract);
80
+ it('should create DataContractCreateTransition from DataContract', async () => {
81
+ const stateTransition = await dataContractFactory
82
+ .createDataContractCreateTransition(dataContractWasm);
68
83
 
69
- const result = dpp.dataContract.createDataContractCreateTransition(dataContract);
84
+ const result = dpp.dataContract.createDataContractCreateTransition(dataContractWasm);
70
85
 
71
86
  expect(result).to.be.an.instanceOf(DataContractCreateTransition);
72
87
 
@@ -76,9 +91,10 @@ describe('DataContractFacade', () => {
76
91
 
77
92
  describe('validate', () => {
78
93
  it('should validate DataContract', async () => {
79
- const result = await dpp.dataContract.validate(dataContract);
94
+ const result = await dpp.dataContract.validate(rawDataContract);
80
95
 
81
96
  expect(result).to.be.an.instanceOf(ValidationResult);
97
+ expect(result.getErrors().length).to.be.equal(0);
82
98
  });
83
99
  });
84
100
  });