@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
@@ -3,24 +3,121 @@ use std::sync::Arc;
3
3
  use wasm_bindgen::prelude::*;
4
4
 
5
5
  use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
6
+ use crate::document_facade::DocumentFacadeWasm;
7
+ use crate::fetch_and_validate_data_contract::DataContractFetcherAndValidatorWasm;
8
+ use crate::identity_facade::IdentityFacadeWasm;
9
+ use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper};
10
+ use crate::{with_js_error, DataContractFacadeWasm};
11
+ use crate::{DocumentFactoryWASM, DocumentValidatorWasm};
6
12
  use dpp::identity::validation::PublicKeysValidator;
7
- use dpp::identity::IdentityFacade;
8
- use dpp::version::ProtocolVersionValidator;
13
+
14
+ use crate::state_transition_facade::StateTransitionFacadeWasm;
15
+ use dpp::version::{ProtocolVersionValidator, COMPATIBILITY_MAP, LATEST_VERSION};
16
+
17
+ use serde::{Deserialize, Serialize};
9
18
 
10
19
  #[wasm_bindgen(js_name=DashPlatformProtocol)]
11
- pub struct DashPlatformProtocol(IdentityFacade<BlsAdapter>);
20
+ pub struct DashPlatformProtocol {
21
+ identity: IdentityFacadeWasm,
22
+ document: DocumentFacadeWasm,
23
+ data_contract: DataContractFacadeWasm,
24
+ state_transition: StateTransitionFacadeWasm,
25
+ }
26
+
27
+ #[derive(Serialize, Deserialize)]
28
+ pub struct DPPOptions {
29
+ #[serde(rename = "protocolVersion")]
30
+ pub current_protocol_version: Option<u32>,
31
+ }
12
32
 
13
33
  #[wasm_bindgen(js_class=DashPlatformProtocol)]
14
34
  impl DashPlatformProtocol {
15
35
  #[wasm_bindgen(constructor)]
16
- pub fn new(bls_adapter: JsBlsAdapter) -> DashPlatformProtocol {
17
- let bls = BlsAdapter(bls_adapter);
18
- // TODO: remove default validator and make a real one instead
19
- let validator = ProtocolVersionValidator::default();
20
- let public_keys_validator = PublicKeysValidator::new(bls).unwrap();
36
+ pub fn new(
37
+ options: JsValue,
38
+ bls_adapter: JsBlsAdapter,
39
+ state_repository: ExternalStateRepositoryLike,
40
+ ) -> Result<DashPlatformProtocol, JsValue> {
41
+ // TODO: wrap whole thing around rs-dpp/dash_platform_protocol?
42
+ let options: DPPOptions = with_js_error!(serde_wasm_bindgen::from_value(options))?;
43
+ let wrapped_state_repository =
44
+ ExternalStateRepositoryLikeWrapper::new(state_repository.clone());
45
+ let bls = BlsAdapter(bls_adapter.clone());
46
+
47
+ let protocol_version = options.current_protocol_version.unwrap_or(LATEST_VERSION);
48
+ let protocol_version_validator = Arc::new(ProtocolVersionValidator::new(
49
+ protocol_version,
50
+ LATEST_VERSION,
51
+ COMPATIBILITY_MAP.clone(),
52
+ ));
53
+ let public_keys_validator = Arc::new(PublicKeysValidator::new(bls).unwrap());
54
+
21
55
  let identity_facade =
22
- IdentityFacade::new(Arc::new(validator), Arc::new(public_keys_validator)).unwrap();
56
+ IdentityFacadeWasm::new(protocol_version_validator.clone(), public_keys_validator);
57
+
58
+ let document_facade = init_document_facade(
59
+ protocol_version,
60
+ protocol_version_validator.clone(),
61
+ wrapped_state_repository,
62
+ );
63
+
64
+ let data_contract_facade =
65
+ DataContractFacadeWasm::new(protocol_version, protocol_version_validator.clone());
66
+
67
+ let state_transition_facade = StateTransitionFacadeWasm::new(
68
+ state_repository,
69
+ bls_adapter,
70
+ protocol_version_validator,
71
+ )?;
72
+
73
+ Ok(Self {
74
+ document: document_facade,
75
+ identity: identity_facade,
76
+ data_contract: data_contract_facade,
77
+ state_transition: state_transition_facade,
78
+ })
79
+ }
23
80
 
24
- DashPlatformProtocol(identity_facade)
81
+ #[wasm_bindgen(getter = dataContract)]
82
+ pub fn data_contract(&self) -> DataContractFacadeWasm {
83
+ self.data_contract.clone()
25
84
  }
85
+
86
+ #[wasm_bindgen(getter=document)]
87
+ pub fn document(&self) -> DocumentFacadeWasm {
88
+ self.document.clone()
89
+ }
90
+
91
+ #[wasm_bindgen(getter = identity)]
92
+ pub fn identity(&self) -> IdentityFacadeWasm {
93
+ self.identity.clone()
94
+ }
95
+
96
+ #[wasm_bindgen(getter = stateTransition)]
97
+ pub fn state_transition(&self) -> StateTransitionFacadeWasm {
98
+ self.state_transition.clone()
99
+ }
100
+ }
101
+
102
+ fn init_document_facade(
103
+ protocol_version: u32,
104
+ protocol_version_validator: Arc<ProtocolVersionValidator>,
105
+ state_repository: ExternalStateRepositoryLikeWrapper,
106
+ ) -> DocumentFacadeWasm {
107
+ let document_validator = DocumentValidatorWasm::new_with_arc(protocol_version_validator);
108
+
109
+ let document_factory = DocumentFactoryWASM::new_with_state_repository_wrapper(
110
+ protocol_version,
111
+ document_validator.clone(),
112
+ state_repository.clone(),
113
+ );
114
+
115
+ let data_contract_fetcher_and_validator =
116
+ DataContractFetcherAndValidatorWasm::new_with_state_repository_wrapper(state_repository);
117
+
118
+ DocumentFacadeWasm::new(
119
+ document_validator,
120
+ document_factory,
121
+ data_contract_fetcher_and_validator,
122
+ )
26
123
  }
@@ -11,7 +11,9 @@ use dpp::data_contract::{DataContract, SCHEMA_URI};
11
11
  use dpp::util::string_encoding::Encoding;
12
12
 
13
13
  use crate::errors::{from_dpp_err, RustConversionError};
14
+ use crate::identifier::identifier_from_js_value;
14
15
  use crate::metadata::MetadataWasm;
16
+ use crate::utils::WithJsError;
15
17
  use crate::{bail_js, with_js_error};
16
18
  use crate::{buffer::Buffer, identifier::IdentifierWrapper};
17
19
 
@@ -25,6 +27,12 @@ impl std::convert::From<DataContract> for DataContractWasm {
25
27
  }
26
28
  }
27
29
 
30
+ impl std::convert::From<&DataContractWasm> for DataContract {
31
+ fn from(v: &DataContractWasm) -> Self {
32
+ v.0.clone()
33
+ }
34
+ }
35
+
28
36
  impl std::convert::Into<DataContract> for DataContractWasm {
29
37
  fn into(self) -> DataContract {
30
38
  self.0
@@ -34,11 +42,16 @@ impl std::convert::Into<DataContract> for DataContractWasm {
34
42
  #[derive(Debug, Serialize, Deserialize)]
35
43
  #[serde(rename_all = "camelCase")]
36
44
  pub(crate) struct DataContractParameters {
37
- #[serde(rename = "$schema")]
38
- schema: String,
39
- #[serde(rename = "$id")]
40
- id: Vec<u8>,
41
- owner_id: Vec<u8>,
45
+ #[serde(
46
+ rename = "$schema",
47
+ skip_serializing_if = "serde_json::Value::is_null",
48
+ default
49
+ )]
50
+ schema: serde_json::Value,
51
+ #[serde(rename = "$id", skip_serializing_if = "Option::is_none")]
52
+ id: Option<Vec<u8>>,
53
+ #[serde(skip_serializing_if = "Option::is_none")]
54
+ owner_id: Option<Vec<u8>>,
42
55
  #[serde(skip_serializing_if = "serde_json::Value::is_null", default)]
43
56
  documents: serde_json::Value,
44
57
  #[serde(
@@ -47,8 +60,20 @@ pub(crate) struct DataContractParameters {
47
60
  rename = "$defs"
48
61
  )]
49
62
  defs: serde_json::Value,
50
- protocol_version: u32,
51
- version: u32,
63
+ #[serde(skip_serializing_if = "serde_json::Value::is_null", default)]
64
+ protocol_version: serde_json::Value,
65
+ #[serde(skip_serializing_if = "serde_json::Value::is_null", default)]
66
+ version: serde_json::Value,
67
+
68
+ #[serde(flatten)]
69
+ _extras: serde_json::Value, // Captures excess fields to trigger validation failure later.
70
+ }
71
+
72
+ pub fn js_value_to_serde_value(raw_parameters: JsValue) -> Result<Value, JsValue> {
73
+ let parameters: DataContractParameters =
74
+ with_js_error!(serde_wasm_bindgen::from_value(raw_parameters))?;
75
+
76
+ serde_json::to_value(parameters).map_err(|e| e.to_string().into())
52
77
  }
53
78
 
54
79
  #[wasm_bindgen(js_class=DataContract)]
@@ -72,12 +97,19 @@ impl DataContractWasm {
72
97
 
73
98
  #[wasm_bindgen(js_name=getId)]
74
99
  pub fn get_id(&self) -> IdentifierWrapper {
75
- self.0.id.clone().into()
100
+ self.0.id.into()
101
+ }
102
+
103
+ #[wasm_bindgen(js_name=setId)]
104
+ pub fn set_id(&mut self, id: &JsValue) -> Result<(), JsValue> {
105
+ let id = identifier_from_js_value(id)?;
106
+ self.0.id = id;
107
+ Ok(())
76
108
  }
77
109
 
78
110
  #[wasm_bindgen(js_name=getOwnerId)]
79
111
  pub fn get_owner_id(&self) -> IdentifierWrapper {
80
- self.0.owner_id.clone().into()
112
+ self.0.owner_id.into()
81
113
  }
82
114
 
83
115
  #[wasm_bindgen(js_name=getVersion)]
@@ -270,12 +302,23 @@ impl DataContractWasm {
270
302
  }
271
303
 
272
304
  #[wasm_bindgen(js_name=from)]
273
- pub fn from(v: JsValue) -> Result<DataContractWasm, JsValue> {
305
+ pub fn from_js_value(v: JsValue) -> Result<DataContractWasm, JsValue> {
274
306
  let json_contract: Value = with_js_error!(serde_wasm_bindgen::from_value(v))?;
275
307
  Ok(DataContract::try_from(json_contract)
276
308
  .map_err(from_dpp_err)?
277
309
  .into())
278
310
  }
311
+
312
+ #[wasm_bindgen(js_name=fromBuffer)]
313
+ pub fn from_buffer(b: &[u8]) -> Result<DataContractWasm, JsValue> {
314
+ let data_contract = DataContract::from_cbor(b).with_js_error()?;
315
+ Ok(data_contract.into())
316
+ }
317
+
318
+ #[wasm_bindgen(js_name=clone)]
319
+ pub fn deep_clone(&self) -> Self {
320
+ self.clone()
321
+ }
279
322
  }
280
323
 
281
324
  #[wasm_bindgen(js_name=DataContractDefaults)]
@@ -288,3 +331,9 @@ impl DataContractDefaults {
288
331
  SCHEMA_URI.to_string()
289
332
  }
290
333
  }
334
+
335
+ impl DataContractWasm {
336
+ pub fn inner(&self) -> &DataContract {
337
+ &self.0
338
+ }
339
+ }
@@ -0,0 +1,128 @@
1
+ use crate::errors::protocol_error::from_protocol_error;
2
+
3
+ use crate::{
4
+ js_value_to_serde_value, DataContractCreateTransitionWasm, DataContractUpdateTransitionWasm,
5
+ DataContractWasm,
6
+ };
7
+ use dpp::data_contract::DataContractFacade;
8
+ use dpp::identifier::Identifier;
9
+ use dpp::version::ProtocolVersionValidator;
10
+
11
+ use crate::utils::{get_bool_from_options, SKIP_VALIDATION_PROPERTY_NAME};
12
+ use crate::validation::ValidationResultWasm;
13
+ use std::sync::Arc;
14
+ use wasm_bindgen::prelude::*;
15
+
16
+ #[wasm_bindgen(js_name=DataContractFacade)]
17
+ #[derive(Clone)]
18
+ pub struct DataContractFacadeWasm(Arc<DataContractFacade>);
19
+
20
+ impl DataContractFacadeWasm {
21
+ pub fn new(
22
+ protocol_version: u32,
23
+ protocol_version_validator: Arc<ProtocolVersionValidator>,
24
+ ) -> Self {
25
+ let inner = DataContractFacade::new(protocol_version, protocol_version_validator);
26
+
27
+ Self(Arc::new(inner))
28
+ }
29
+ }
30
+
31
+ #[wasm_bindgen(js_class=DataContractFacade)]
32
+ impl DataContractFacadeWasm {
33
+ /// Create Data Contract
34
+ #[wasm_bindgen]
35
+ pub fn create(
36
+ &self,
37
+ owner_id: Vec<u8>,
38
+ documents: JsValue,
39
+ definitions: JsValue,
40
+ ) -> Result<DataContractWasm, JsValue> {
41
+ let id = Identifier::from_bytes(&owner_id).map_err(from_protocol_error)?;
42
+
43
+ let definitions: Option<serde_json::Value> = if definitions.is_object() {
44
+ Some(serde_wasm_bindgen::from_value(definitions)?)
45
+ } else {
46
+ None
47
+ };
48
+
49
+ self.0
50
+ .create(id, serde_wasm_bindgen::from_value(documents)?, definitions)
51
+ .map(Into::into)
52
+ .map_err(from_protocol_error)
53
+ }
54
+
55
+ /// Create Data Contract from plain object
56
+ #[wasm_bindgen(js_name=createFromObject)]
57
+ pub async fn create_from_object(
58
+ &self,
59
+ js_raw_data_contract: JsValue,
60
+ options: JsValue,
61
+ ) -> Result<DataContractWasm, JsValue> {
62
+ let skip_validation = get_bool_from_options(options, SKIP_VALIDATION_PROPERTY_NAME, false)?;
63
+
64
+ self.0
65
+ .create_from_object(
66
+ js_value_to_serde_value(js_raw_data_contract)?,
67
+ skip_validation,
68
+ )
69
+ .await
70
+ .map(DataContractWasm::from)
71
+ .map_err(from_protocol_error)
72
+ }
73
+
74
+ /// Create Data Contract from buffer
75
+ #[wasm_bindgen(js_name=createFromBuffer)]
76
+ pub async fn create_from_buffer(
77
+ &self,
78
+ buffer: Vec<u8>,
79
+ options: JsValue,
80
+ ) -> Result<DataContractWasm, JsValue> {
81
+ let skip_validation = get_bool_from_options(options, SKIP_VALIDATION_PROPERTY_NAME, false)?;
82
+
83
+ self.0
84
+ .create_from_buffer(buffer, skip_validation)
85
+ .await
86
+ .map(Into::into)
87
+ .map_err(from_protocol_error)
88
+ }
89
+
90
+ /// Create Data Contract Create State Transition
91
+ #[wasm_bindgen(js_name=createDataContractCreateTransition)]
92
+ pub fn create_data_contract_create_transition(
93
+ &self,
94
+ data_contract: &DataContractWasm,
95
+ ) -> Result<DataContractCreateTransitionWasm, JsValue> {
96
+ self.0
97
+ .create_data_contract_create_transition(data_contract.clone().into())
98
+ .map(DataContractCreateTransitionWasm::from)
99
+ .map_err(from_protocol_error)
100
+ }
101
+
102
+ /// Create Data Contract Update State Transition
103
+ #[wasm_bindgen(js_name=createDataContractUpdateTransition)]
104
+ pub fn create_data_contract_update_transition(
105
+ &self,
106
+ data_contract: DataContractWasm,
107
+ ) -> Result<DataContractUpdateTransitionWasm, JsValue> {
108
+ self.0
109
+ .create_data_contract_update_transition(data_contract.into())
110
+ .map(Into::into)
111
+ .map_err(from_protocol_error)
112
+ }
113
+
114
+ /// Validate Data Contract
115
+ pub async fn validate(
116
+ &self,
117
+ js_raw_data_contract: JsValue,
118
+ ) -> Result<ValidationResultWasm, JsValue> {
119
+ let raw_data_contract = js_value_to_serde_value(js_raw_data_contract)?;
120
+
121
+ self.0
122
+ .validate(raw_data_contract)
123
+ .await
124
+ .map(|v| v.map(|_| JsValue::UNDEFINED))
125
+ .map(Into::into)
126
+ .map_err(from_protocol_error)
127
+ }
128
+ }
@@ -1,26 +1,29 @@
1
+ use crate::errors::consensus_error::from_consensus_error_ref;
2
+ use dpp::consensus::ConsensusError;
1
3
  use wasm_bindgen::prelude::*;
2
4
 
3
5
  #[wasm_bindgen(js_name=InvalidDataContractError)]
4
6
  #[derive(Debug)]
5
7
  pub struct InvalidDataContractError {
6
8
  // we have to store it as JsValue as the errors of 'class' Consensus are of different types
7
- errors: Vec<JsValue>,
9
+ errors: Vec<ConsensusError>,
8
10
  raw_data_contract: JsValue,
9
11
  }
10
12
 
11
- #[wasm_bindgen(js_class=InvalidDataContractError)]
12
13
  impl InvalidDataContractError {
13
- #[wasm_bindgen(constructor)]
14
- pub fn new(errors: Vec<JsValue>, raw_data_contract: JsValue) -> Self {
14
+ pub fn new(errors: Vec<ConsensusError>, raw_data_contract: JsValue) -> Self {
15
15
  InvalidDataContractError {
16
16
  errors,
17
17
  raw_data_contract,
18
18
  }
19
19
  }
20
+ }
20
21
 
22
+ #[wasm_bindgen(js_class=InvalidDataContractError)]
23
+ impl InvalidDataContractError {
21
24
  #[wasm_bindgen(js_name=getErrors)]
22
25
  pub fn get_errors(&self) -> Vec<JsValue> {
23
- self.errors.clone().into_iter().map(JsValue::from).collect()
26
+ self.errors.iter().map(from_consensus_error_ref).collect()
24
27
  }
25
28
 
26
29
  #[wasm_bindgen(js_name=getRawDataContract)]
@@ -30,20 +33,17 @@ impl InvalidDataContractError {
30
33
 
31
34
  #[wasm_bindgen(js_name=getMessage)]
32
35
  pub fn get_message(&self) -> String {
33
- let extended_message = if let Some(error_message) = self
34
- .errors
35
- .first()
36
- .map(|e| Into::<js_sys::Error>::into(e.clone()).message())
37
- {
38
- let narrowed_message = if self.errors.len() > 1 {
39
- format!(" and {} more", self.errors.len() - 1)
36
+ let extended_message =
37
+ if let Some(error_message) = self.errors.first().map(|e| e.to_string()) {
38
+ let narrowed_message = if self.errors.len() > 1 {
39
+ format!(" and {} more", self.errors.len() - 1)
40
+ } else {
41
+ "".to_owned()
42
+ };
43
+ format!(": \"{error_message}\"{narrowed_message}")
40
44
  } else {
41
45
  "".to_owned()
42
46
  };
43
- format!(": \"{error_message}\"{narrowed_message}")
44
- } else {
45
- "".to_owned()
46
- };
47
47
 
48
48
  format!("Data contract decode error{extended_message}")
49
49
  }
@@ -1,7 +1,7 @@
1
1
  use thiserror::Error;
2
2
  use wasm_bindgen::prelude::*;
3
3
 
4
- use crate::DataContractWasm;
4
+ use crate::identifier::IdentifierWrapper;
5
5
 
6
6
  #[wasm_bindgen]
7
7
  #[derive(Error, Debug)]
@@ -9,25 +9,25 @@ use crate::DataContractWasm;
9
9
  pub struct InvalidDocumentTypeInDataContractError {
10
10
  // we have to store it as JsValue as the errors of 'class' Consensus are of different types
11
11
  doc_type: String,
12
- data_contract: DataContractWasm,
12
+ data_contract_id: IdentifierWrapper,
13
13
  }
14
14
 
15
15
  #[wasm_bindgen]
16
16
  impl InvalidDocumentTypeInDataContractError {
17
17
  #[wasm_bindgen(constructor)]
18
- pub fn new(doc_type: String, data_contract: DataContractWasm) -> Self {
18
+ pub fn new(doc_type: String, data_contract_id: IdentifierWrapper) -> Self {
19
19
  InvalidDocumentTypeInDataContractError {
20
20
  doc_type,
21
- data_contract,
21
+ data_contract_id,
22
22
  }
23
23
  }
24
- #[wasm_bindgen(js_name = "getDocType")]
24
+ #[wasm_bindgen(js_name = "getType")]
25
25
  pub fn get_doc_type(&self) -> String {
26
26
  self.doc_type.clone()
27
27
  }
28
28
 
29
- #[wasm_bindgen(js_name = "getDataContract")]
30
- pub fn get_data_contract(&self) -> DataContractWasm {
31
- self.data_contract.clone()
29
+ #[wasm_bindgen(js_name = "getDataContractId")]
30
+ pub fn get_data_contract_id(&self) -> IdentifierWrapper {
31
+ self.data_contract_id.clone()
32
32
  }
33
33
  }
@@ -4,7 +4,6 @@ mod invalid_document_type;
4
4
 
5
5
  use wasm_bindgen::prelude::*;
6
6
 
7
- use crate::errors::consensus_error::from_consensus_error;
8
7
  pub use data_contract_already_exists::*;
9
8
  use dpp::data_contract::errors::DataContractError;
10
9
  pub use invalid_data_contract::*;
@@ -14,24 +13,19 @@ pub fn from_data_contract_to_js_error(e: DataContractError) -> JsValue {
14
13
  DataContractError::InvalidDataContractError {
15
14
  errors,
16
15
  raw_data_contract,
17
- } => {
18
- let js_errors = errors.into_iter().map(from_consensus_error).collect();
19
-
20
- InvalidDataContractError::new(
21
- js_errors,
22
- serde_wasm_bindgen::to_value(&raw_data_contract)
23
- .expect("statically known structure should be a valid JSON"),
16
+ } => InvalidDataContractError::new(
17
+ errors,
18
+ serde_wasm_bindgen::to_value(&raw_data_contract)
19
+ .expect("statically known structure should be a valid JSON"),
20
+ )
21
+ .into(),
22
+ DataContractError::InvalidDocumentTypeError(err) => {
23
+ invalid_document_type::InvalidDocumentTypeInDataContractError::new(
24
+ err.document_type(),
25
+ err.data_contract_id().into(),
24
26
  )
25
27
  .into()
26
28
  }
27
- DataContractError::InvalidDocumentTypeError {
28
- doc_type,
29
- data_contract,
30
- } => invalid_document_type::InvalidDocumentTypeInDataContractError::new(
31
- doc_type,
32
- data_contract.into(),
33
- )
34
- .into(),
35
29
  _ => todo!(),
36
30
  }
37
31
  }
@@ -1,6 +1,9 @@
1
- use dpp::{data_contract::extra::IndexProperty, util::json_schema::Index};
1
+ use dpp::{data_contract::document_type::IndexProperty, util::json_schema::Index};
2
+ use serde::{ser::SerializeMap, Serialize, Serializer};
2
3
  use wasm_bindgen::prelude::*;
3
4
 
5
+ use crate::with_js_error;
6
+
4
7
  #[wasm_bindgen(js_name=IndexProperty)]
5
8
  #[derive(Debug, Clone)]
6
9
  pub struct IndexPropertyWasm {
@@ -38,6 +41,51 @@ impl From<Index> for IndexDefinitionWasm {
38
41
  }
39
42
  }
40
43
 
44
+ /// Wrapper structure to serialize `Index` the way js-dpp expects it.
45
+ #[derive(Debug)]
46
+ struct IndexSerializeJs<'a>(&'a Index);
47
+
48
+ impl Serialize for IndexSerializeJs<'_> {
49
+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
50
+ where
51
+ S: Serializer,
52
+ {
53
+ let mut map = serializer.serialize_map(Some(3))?;
54
+ map.serialize_entry("name", &self.0.name)?;
55
+ if self.0.unique {
56
+ map.serialize_entry("unique", &true)?;
57
+ }
58
+ map.serialize_entry(
59
+ "properties",
60
+ &self
61
+ .0
62
+ .properties
63
+ .iter()
64
+ .map(IndexPropertySerializeJs)
65
+ .collect::<Vec<_>>(),
66
+ )?;
67
+
68
+ map.end()
69
+ }
70
+ }
71
+
72
+ /// Wrapper structure to serialize `InderProperty` the way js-dpp expects it.
73
+ #[derive(Debug)]
74
+ struct IndexPropertySerializeJs<'a>(&'a IndexProperty);
75
+
76
+ impl Serialize for IndexPropertySerializeJs<'_> {
77
+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
78
+ where
79
+ S: Serializer,
80
+ {
81
+ let mut map = serializer.serialize_map(Some(1))?;
82
+ let order_str = if self.0.ascending { "asc" } else { "desc" };
83
+ map.serialize_entry(&self.0.name, order_str)?;
84
+
85
+ map.end()
86
+ }
87
+ }
88
+
41
89
  #[wasm_bindgen(js_class=IndexDefinition)]
42
90
  impl IndexDefinitionWasm {
43
91
  #[wasm_bindgen(js_name=getName)]
@@ -58,4 +106,11 @@ impl IndexDefinitionWasm {
58
106
  pub fn is_unique(&self) -> bool {
59
107
  self.inner.unique
60
108
  }
109
+
110
+ #[wasm_bindgen(js_name=toObject)]
111
+ pub fn to_object(&self) -> Result<JsValue, JsValue> {
112
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
113
+ let object = with_js_error!(IndexSerializeJs(&self.inner).serialize(&serializer))?;
114
+ Ok(object)
115
+ }
61
116
  }
@@ -4,7 +4,11 @@ pub use state_transition::*;
4
4
 
5
5
  mod data_contract;
6
6
  pub mod errors;
7
+
7
8
  mod state_transition;
8
9
 
10
+ mod data_contract_facade;
9
11
  mod index;
12
+
13
+ pub use data_contract_facade::DataContractFacadeWasm;
10
14
  pub use index::*;
@@ -1,6 +1,6 @@
1
1
  use std::ops::Deref;
2
2
 
3
- use dpp::data_contract::state_transition::apply_data_contract_create_transition_factory::ApplyDataContractCreateTransition;
3
+ use dpp::data_contract::state_transition::data_contract_create_transition::apply_data_contract_create_transition_factory::ApplyDataContractCreateTransition;
4
4
  use wasm_bindgen::prelude::*;
5
5
 
6
6
  use crate::{