@dashevo/wasm-dpp 0.24.0-dev.11 → 0.24.0-dev.13

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 (167) hide show
  1. package/Cargo.toml +3 -0
  2. package/README.md +5 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.LICENSE.txt +9 -0
  5. package/dist/lib/dpp.d.ts +9 -0
  6. package/dist/lib/errors/AbstractConsensusError.d.ts +10 -0
  7. package/dist/lib/errors/DPPError.d.ts +5 -0
  8. package/dist/lib/errors/patchConsensusErrors.d.ts +1 -0
  9. package/dist/lib/{patchIdentifier.d.ts → identifier/patchIdentifier.d.ts} +1 -1
  10. package/dist/{index.d.ts → lib/index.d.ts} +1 -1
  11. package/dist/lib/utils/extend.d.ts +1 -0
  12. package/dist/wasm/wasm_dpp.d.ts +1595 -518
  13. package/karma.conf.js +5 -0
  14. package/lib/dpp.ts +24 -0
  15. package/lib/errors/AbstractConsensusError.ts +13 -0
  16. package/lib/errors/DPPError.ts +15 -0
  17. package/lib/errors/patchConsensusErrors.ts +175 -0
  18. package/lib/{patchIdentifier.ts → identifier/patchIdentifier.ts} +6 -5
  19. package/{index.ts → lib/index.ts} +5 -4
  20. package/lib/test/bootstrap.js +5 -0
  21. package/lib/test/expect/expectError.js +4 -2
  22. package/lib/test/mocks/getBlsAdapterMock.js +36 -0
  23. package/lib/test/utils/newDocumentsContainer.js +36 -0
  24. package/lib/utils/extend.ts +6 -0
  25. package/package.json +9 -6
  26. package/src/bls_adapter.rs +16 -1
  27. package/src/data_contract/data_contract.rs +35 -7
  28. package/src/data_contract/errors/invalid_data_contract.rs +21 -0
  29. package/src/data_contract/errors/invalid_document_type.rs +1 -1
  30. package/src/data_contract/index.rs +56 -1
  31. package/src/data_contract/mod.rs +1 -0
  32. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +6 -8
  33. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +4 -4
  34. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +44 -0
  35. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +145 -0
  36. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +49 -0
  37. package/src/data_contract/state_transition/mod.rs +2 -0
  38. package/src/data_contract_factory/data_contract_factory.rs +25 -12
  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 +192 -0
  45. package/src/document/mod.rs +222 -30
  46. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +47 -1
  47. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +25 -1
  48. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +65 -0
  49. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +123 -3
  50. package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
  51. package/src/document/validator.rs +30 -0
  52. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +5 -5
  53. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +4 -4
  54. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +36 -0
  55. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +20 -0
  56. package/src/errors/consensus/basic/document/mod.rs +4 -0
  57. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +2 -2
  58. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +2 -2
  59. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
  60. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
  61. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
  62. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +2 -2
  63. package/src/errors/consensus/basic/json_schema_error.rs +1 -1
  64. package/src/errors/consensus_error.rs +15 -8
  65. package/src/errors/dpp_error.rs +17 -0
  66. package/src/errors/from.rs +6 -1
  67. package/src/errors/js_conversion.rs +19 -4
  68. package/src/errors/mod.rs +3 -0
  69. package/src/errors/protocol_error.rs +15 -0
  70. package/src/{identifier.rs → identifier/mod.rs} +48 -3
  71. package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
  72. package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
  73. package/src/identity/errors/mod.rs +7 -0
  74. package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
  75. package/src/{identity_facade.rs → identity/identity_facade.rs} +3 -5
  76. package/src/{identity_public_key → identity/identity_public_key}/key_type.rs +0 -0
  77. package/src/{identity_public_key → identity/identity_public_key}/mod.rs +41 -10
  78. package/src/{identity_public_key → identity/identity_public_key}/purpose.rs +0 -0
  79. package/src/{identity_public_key → identity/identity_public_key}/security_level.rs +0 -0
  80. package/src/{identity.rs → identity/mod.rs} +20 -12
  81. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
  82. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
  83. package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
  84. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
  85. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
  86. package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
  87. package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
  88. package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
  89. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +335 -0
  90. package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
  91. package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
  92. package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
  93. package/src/identity/state_transition/identity_create_transition/to_object.rs +46 -0
  94. package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
  95. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +280 -0
  96. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
  97. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
  98. package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
  99. package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
  100. package/src/identity/state_transition/mod.rs +9 -0
  101. package/src/identity/state_transition/validate_public_key_signatures.rs +59 -0
  102. package/src/identity/validation/mod.rs +3 -0
  103. package/src/identity/validation/public_keys_validator.rs +76 -0
  104. package/src/identity_public_key/public_keys_validator.rs +1 -1
  105. package/src/lib.rs +3 -6
  106. package/src/lodash.rs +7 -0
  107. package/src/state_repository.rs +188 -36
  108. package/src/state_transition/mod.rs +12 -0
  109. package/src/utils.rs +102 -7
  110. package/src/validation/json_schema_validator.rs +41 -0
  111. package/src/validation/mod.rs +5 -0
  112. package/src/{validation_result.rs → validation/validation_result.rs} +23 -5
  113. package/src/version/mod.rs +2 -0
  114. package/src/version/protocol_version.rs +26 -0
  115. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +579 -502
  116. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +175 -165
  117. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +83 -114
  118. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +1 -1
  119. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +82 -91
  120. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +75 -31
  121. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -148
  122. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +63 -75
  123. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +48 -19
  124. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +79 -114
  125. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -11
  126. package/test/integration/stateTransition/StateTransitionFacade.spec.js +1 -1
  127. package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +135 -0
  128. package/test/unit/dataContract/DataContract.spec.js +5 -9
  129. package/test/unit/dataContract/DataContractFactory.spec.js +13 -6
  130. package/test/unit/dataContract/createDataContract.spec.js +0 -1
  131. package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +11 -3
  132. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
  133. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +20 -16
  134. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +24 -60
  135. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +27 -23
  136. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +29 -12
  137. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +66 -49
  138. package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +73 -0
  139. package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
  140. package/test/unit/document/Document.spec.js +147 -155
  141. package/test/unit/document/DocumentFactory.spec.js +325 -91
  142. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +142 -64
  143. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +1 -1
  144. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +1 -1
  145. package/test/unit/identity/Identity.spec.js +2 -2
  146. package/test/unit/identity/IdentityPublicKey.spec.js +25 -31
  147. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +69 -30
  148. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +32 -32
  149. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +56 -25
  150. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
  151. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +48 -46
  152. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
  153. package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
  154. package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
  155. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
  156. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
  157. package/tsconfig.json +1 -1
  158. package/wasm/package.json +5 -0
  159. package/wasm/wasm_dpp.d.ts +1595 -518
  160. package/wasm/wasm_dpp.js +5007 -2172
  161. package/wasm/wasm_dpp_bg.js +1 -1
  162. package/wasm/wasm_dpp_bg.wasm +0 -0
  163. package/wasm/wasm_dpp_bg.wasm.d.ts +566 -365
  164. package/webpack.config.js +10 -1
  165. package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +0 -32
  166. package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +0 -93
  167. package/test/unit/dataContract/validation/validateDataContractPatternsFactory.spec.js +0 -64
@@ -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::{errors::RustConversionError, 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,6 +4,7 @@ pub use state_transition::*;
4
4
 
5
5
  mod data_contract;
6
6
  pub mod errors;
7
+
7
8
  mod state_transition;
8
9
 
9
10
  mod index;
@@ -14,10 +14,8 @@ use serde::{Deserialize, Serialize};
14
14
  use wasm_bindgen::prelude::*;
15
15
 
16
16
  use crate::{
17
- buffer::Buffer,
18
- errors::{from_dpp_err, RustConversionError},
19
- identifier::IdentifierWrapper,
20
- with_js_error, DataContractParameters, DataContractWasm, StateTransitionExecutionContextWasm,
17
+ buffer::Buffer, errors::from_dpp_err, identifier::IdentifierWrapper, with_js_error,
18
+ DataContractParameters, DataContractWasm, StateTransitionExecutionContextWasm,
21
19
  };
22
20
 
23
21
  #[wasm_bindgen(js_name=DataContractCreateTransition)]
@@ -29,9 +27,9 @@ impl From<DataContractCreateTransition> for DataContractCreateTransitionWasm {
29
27
  }
30
28
  }
31
29
 
32
- impl Into<DataContractCreateTransition> for DataContractCreateTransitionWasm {
33
- fn into(self) -> DataContractCreateTransition {
34
- self.0
30
+ impl From<DataContractCreateTransitionWasm> for DataContractCreateTransition {
31
+ fn from(val: DataContractCreateTransitionWasm) -> Self {
32
+ val.0
35
33
  }
36
34
  }
37
35
 
@@ -69,7 +67,7 @@ impl DataContractCreateTransitionWasm {
69
67
 
70
68
  #[wasm_bindgen(js_name=getProtocolVersion)]
71
69
  pub fn get_protocol_version(&self) -> u32 {
72
- self.0.protocol_version.into()
70
+ self.0.protocol_version
73
71
  }
74
72
 
75
73
  #[wasm_bindgen(js_name=getEntropy)]
@@ -1,10 +1,10 @@
1
1
  use dpp::data_contract::state_transition::data_contract_create_transition::validation::state::validate_data_contract_create_transition_state::validate_data_contract_create_transition_state as dpp_validate_data_contract_create_transition_state;
2
2
  use wasm_bindgen::prelude::*;
3
3
 
4
+ use crate::validation::ValidationResultWasm;
4
5
  use crate::{
5
6
  errors::from_dpp_err,
6
7
  state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
7
- validation_result::ValidationResultWasm,
8
8
  DataContractCreateTransitionWasm,
9
9
  };
10
10
 
@@ -14,11 +14,11 @@ pub async fn validate_data_contract_create_transition_state(
14
14
  state_transition: DataContractCreateTransitionWasm,
15
15
  ) -> Result<ValidationResultWasm, JsValue> {
16
16
  let wrapped_state_repository = ExternalStateRepositoryLikeWrapper::new(state_repository);
17
- dpp_validate_data_contract_create_transition_state(
17
+ let validation_result = dpp_validate_data_contract_create_transition_state(
18
18
  &wrapped_state_repository,
19
19
  &state_transition.into(),
20
20
  )
21
21
  .await
22
- .map(Into::into)
23
- .map_err(from_dpp_err)
22
+ .map_err(from_dpp_err)?;
23
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
24
24
  }
@@ -0,0 +1,44 @@
1
+ use std::ops::Deref;
2
+
3
+ use dpp::data_contract::state_transition::apply_data_contract_update_transition_factory::ApplyDataContractUpdateTransition;
4
+ use wasm_bindgen::prelude::*;
5
+
6
+ use crate::{
7
+ state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
8
+ DataContractUpdateTransitionWasm,
9
+ };
10
+
11
+ #[wasm_bindgen(js_name=ApplyDataContractUpdateTransition)]
12
+ pub struct ApplyDataContractUpdateTransitionWasm(
13
+ ApplyDataContractUpdateTransition<ExternalStateRepositoryLikeWrapper>,
14
+ );
15
+
16
+ impl From<ApplyDataContractUpdateTransition<ExternalStateRepositoryLikeWrapper>>
17
+ for ApplyDataContractUpdateTransitionWasm
18
+ {
19
+ fn from(wa: ApplyDataContractUpdateTransition<ExternalStateRepositoryLikeWrapper>) -> Self {
20
+ ApplyDataContractUpdateTransitionWasm(wa)
21
+ }
22
+ }
23
+
24
+ #[wasm_bindgen(js_class=ApplyDataContractUpdateTransition)]
25
+ impl ApplyDataContractUpdateTransitionWasm {
26
+ #[wasm_bindgen(constructor)]
27
+ pub fn new(
28
+ state_repository: ExternalStateRepositoryLike,
29
+ ) -> ApplyDataContractUpdateTransitionWasm {
30
+ let pinned_js_state_repository = ExternalStateRepositoryLikeWrapper::new(state_repository);
31
+ ApplyDataContractUpdateTransition::new(pinned_js_state_repository).into()
32
+ }
33
+
34
+ #[wasm_bindgen(js_name=applyDataContractUpdateTransition)]
35
+ pub async fn apply_data_contract_update_transition(
36
+ &self,
37
+ transition: DataContractUpdateTransitionWasm,
38
+ ) -> Result<(), JsError> {
39
+ self.0
40
+ .apply_data_contract_update_transition(&transition.into())
41
+ .await
42
+ .map_err(|e| e.deref().into())
43
+ }
44
+ }
@@ -0,0 +1,145 @@
1
+ mod apply;
2
+ mod validation;
3
+
4
+ pub use apply::*;
5
+ pub use validation::*;
6
+
7
+ use dpp::{
8
+ data_contract::state_transition::DataContractUpdateTransition,
9
+ state_transition::{
10
+ StateTransitionConvert, StateTransitionIdentitySigned, StateTransitionLike,
11
+ },
12
+ };
13
+ use serde::{Deserialize, Serialize};
14
+ use wasm_bindgen::prelude::*;
15
+
16
+ use crate::{
17
+ buffer::Buffer, errors::from_dpp_err, identifier::IdentifierWrapper, with_js_error,
18
+ DataContractParameters, DataContractWasm, StateTransitionExecutionContextWasm,
19
+ };
20
+
21
+ #[wasm_bindgen(js_name=DataContractUpdateTransition)]
22
+ pub struct DataContractUpdateTransitionWasm(DataContractUpdateTransition);
23
+
24
+ impl From<DataContractUpdateTransition> for DataContractUpdateTransitionWasm {
25
+ fn from(v: DataContractUpdateTransition) -> Self {
26
+ DataContractUpdateTransitionWasm(v)
27
+ }
28
+ }
29
+
30
+ impl From<DataContractUpdateTransitionWasm> for DataContractUpdateTransition {
31
+ fn from(val: DataContractUpdateTransitionWasm) -> Self {
32
+ val.0
33
+ }
34
+ }
35
+
36
+ #[derive(Debug, Serialize, Deserialize)]
37
+ #[serde(rename_all = "camelCase")]
38
+ struct DataContractUpdateTransitionParameters {
39
+ protocol_version: u32,
40
+ #[serde(skip_serializing_if = "Option::is_none", default)]
41
+ data_contract: Option<DataContractParameters>,
42
+ #[serde(skip_serializing_if = "Option::is_none", default)]
43
+ entropy: Option<Vec<u8>>,
44
+ #[serde(skip_serializing_if = "Option::is_none", default)]
45
+ signature_public_key_id: Option<u64>,
46
+ #[serde(skip_serializing_if = "Option::is_none", default)]
47
+ signature: Option<Vec<u8>>,
48
+ }
49
+
50
+ #[wasm_bindgen(js_class=DataContractUpdateTransition)]
51
+ impl DataContractUpdateTransitionWasm {
52
+ #[wasm_bindgen(constructor)]
53
+ pub fn new(raw_parameters: JsValue) -> Result<DataContractUpdateTransitionWasm, JsValue> {
54
+ let parameters: DataContractUpdateTransitionParameters =
55
+ with_js_error!(serde_wasm_bindgen::from_value(raw_parameters))?;
56
+ DataContractUpdateTransition::from_raw_object(
57
+ serde_json::to_value(parameters).expect("the struct will be a valid json"),
58
+ )
59
+ .map(Into::into)
60
+ .map_err(from_dpp_err)
61
+ }
62
+
63
+ #[wasm_bindgen(js_name=getDataContract)]
64
+ pub fn get_data_contract(&self) -> DataContractWasm {
65
+ self.0.data_contract.clone().into()
66
+ }
67
+
68
+ #[wasm_bindgen(js_name=getProtocolVersion)]
69
+ pub fn get_protocol_version(&self) -> u32 {
70
+ self.0.protocol_version
71
+ }
72
+
73
+ #[wasm_bindgen(js_name=getEntropy)]
74
+ pub fn get_entropy(&self) -> Buffer {
75
+ Buffer::from_bytes(&self.0.data_contract.entropy)
76
+ }
77
+
78
+ #[wasm_bindgen(js_name=getOwnerId)]
79
+ pub fn get_owner_id(&self) -> IdentifierWrapper {
80
+ self.0.get_owner_id().clone().into()
81
+ }
82
+
83
+ #[wasm_bindgen(js_name=getType)]
84
+ pub fn get_type(&self) -> u32 {
85
+ self.0.get_type() as u32
86
+ }
87
+
88
+ #[wasm_bindgen(js_name=toJSON)]
89
+ pub fn to_json(&self, skip_signature: Option<bool>) -> Result<JsValue, JsValue> {
90
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
91
+ Ok(self
92
+ .0
93
+ .to_json(skip_signature.unwrap_or(false))
94
+ .map_err(from_dpp_err)?
95
+ .serialize(&serializer)
96
+ .expect("JSON is a valid object"))
97
+ }
98
+
99
+ #[wasm_bindgen(js_name=toBuffer)]
100
+ pub fn to_buffer(&self, skip_signature: Option<bool>) -> Result<Buffer, JsValue> {
101
+ let bytes = self
102
+ .0
103
+ .to_buffer(skip_signature.unwrap_or(false))
104
+ .map_err(from_dpp_err)?;
105
+ Ok(Buffer::from_bytes(&bytes))
106
+ }
107
+
108
+ #[wasm_bindgen(js_name=getModifiedDataIds)]
109
+ pub fn get_modified_data_ids(&self) -> Vec<JsValue> {
110
+ self.0
111
+ .get_modified_data_ids()
112
+ .into_iter()
113
+ .map(|identifier| Into::<IdentifierWrapper>::into(identifier.clone()).into())
114
+ .collect()
115
+ }
116
+
117
+ #[wasm_bindgen(js_name=isDataContractStateTransition)]
118
+ pub fn is_data_contract_state_transition(&self) -> bool {
119
+ self.0.is_data_contract_state_transition()
120
+ }
121
+
122
+ #[wasm_bindgen(js_name=isDocumentStateTransition)]
123
+ pub fn is_document_state_transition(&self) -> bool {
124
+ self.0.is_document_state_transition()
125
+ }
126
+
127
+ #[wasm_bindgen(js_name=isIdentityStateTransition)]
128
+ pub fn is_identity_state_transition(&self) -> bool {
129
+ self.0.is_identity_state_transition()
130
+ }
131
+
132
+ #[wasm_bindgen(js_name=setExecutionContext)]
133
+ pub fn set_execution_context(&mut self, context: &StateTransitionExecutionContextWasm) {
134
+ self.0.set_execution_context(context.into())
135
+ }
136
+
137
+ #[wasm_bindgen(js_name=hash)]
138
+ pub fn hash(&self, skip_signature: Option<bool>) -> Result<Buffer, JsValue> {
139
+ let bytes = self
140
+ .0
141
+ .hash(skip_signature.unwrap_or(false))
142
+ .map_err(from_dpp_err)?;
143
+ Ok(Buffer::from_bytes(&bytes))
144
+ }
145
+ }
@@ -0,0 +1,49 @@
1
+ use std::collections::BTreeMap;
2
+
3
+ use dpp::data_contract::state_transition::data_contract_update_transition::validation::{
4
+ basic::validate_indices_are_backward_compatible as dpp_validate_indices_are_backward_compatible,
5
+ state::validate_data_contract_update_transition_state::validate_data_contract_update_transition_state as dpp_validate_data_contract_update_transition_state,
6
+ };
7
+ use wasm_bindgen::prelude::*;
8
+
9
+ use crate::{
10
+ errors::{from_dpp_err, protocol_error::from_protocol_error},
11
+ state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
12
+ validation::ValidationResultWasm,
13
+ DataContractUpdateTransitionWasm,
14
+ };
15
+
16
+ #[wasm_bindgen(js_name=validateDataContractUpdateTransitionState)]
17
+ pub async fn validate_data_contract_update_transition_state(
18
+ state_repository: ExternalStateRepositoryLike,
19
+ state_transition: DataContractUpdateTransitionWasm,
20
+ ) -> Result<ValidationResultWasm, JsValue> {
21
+ let wrapped_state_repository = ExternalStateRepositoryLikeWrapper::new(state_repository);
22
+ let result = dpp_validate_data_contract_update_transition_state(
23
+ &wrapped_state_repository,
24
+ &state_transition.into(),
25
+ )
26
+ .await
27
+ .map_err(from_dpp_err)?;
28
+
29
+ Ok(result.map(|_| JsValue::undefined()).into())
30
+ }
31
+
32
+ #[wasm_bindgen(js_name=validateIndicesAreBackwardCompatible)]
33
+ pub fn validate_indices_are_backward_compatible(
34
+ old_documents_schema: JsValue,
35
+ new_documents_schema: JsValue,
36
+ ) -> Result<ValidationResultWasm, JsValue> {
37
+ let old_documents = serde_wasm_bindgen::from_value::<BTreeMap<String, serde_json::Value>>(
38
+ old_documents_schema,
39
+ )?;
40
+ let new_documents = serde_wasm_bindgen::from_value::<BTreeMap<String, serde_json::Value>>(
41
+ new_documents_schema,
42
+ )?;
43
+
44
+ let result =
45
+ dpp_validate_indices_are_backward_compatible(old_documents.iter(), new_documents.iter())
46
+ .map_err(from_protocol_error)?;
47
+
48
+ Ok(result.map(|_| JsValue::undefined()).into())
49
+ }
@@ -1,3 +1,5 @@
1
1
  mod data_contract_create_transition;
2
+ mod data_contract_update_transition;
2
3
 
3
4
  pub use data_contract_create_transition::*;
5
+ pub use data_contract_update_transition::*;
@@ -12,7 +12,10 @@ use wasm_bindgen::prelude::*;
12
12
 
13
13
  use crate::{
14
14
  data_contract::errors::InvalidDataContractError,
15
- errors::{consensus_error::from_consensus_error, from_dpp_err, RustConversionError},
15
+ errors::{
16
+ consensus_error::from_consensus_error, from_dpp_err, protocol_error::from_protocol_error,
17
+ },
18
+ validation::ValidationResultWasm,
16
19
  with_js_error, DataContractCreateTransitionWasm, DataContractParameters, DataContractWasm,
17
20
  };
18
21
 
@@ -25,9 +28,9 @@ impl From<DataContractValidator> for DataContractValidatorWasm {
25
28
  }
26
29
  }
27
30
 
28
- impl Into<DataContractValidator> for DataContractValidatorWasm {
29
- fn into(self) -> DataContractValidator {
30
- self.0
31
+ impl From<DataContractValidatorWasm> for DataContractValidator {
32
+ fn from(val: DataContractValidatorWasm) -> Self {
33
+ val.0
31
34
  }
32
35
  }
33
36
 
@@ -37,6 +40,16 @@ impl DataContractValidatorWasm {
37
40
  pub fn new() -> Self {
38
41
  DataContractValidator::new(std::sync::Arc::new(ProtocolVersionValidator::default())).into()
39
42
  }
43
+
44
+ #[wasm_bindgen]
45
+ pub fn validate(&self, raw_data_contract: JsValue) -> Result<ValidationResultWasm, JsValue> {
46
+ let parameters: DataContractParameters =
47
+ with_js_error!(serde_wasm_bindgen::from_value(raw_data_contract))?;
48
+ let json_object = serde_json::to_value(parameters).expect("Implements Serialize");
49
+ let validation_result = self.0.validate(&json_object).map_err(from_protocol_error)?;
50
+
51
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
52
+ }
40
53
  }
41
54
 
42
55
  #[wasm_bindgen(js_name=DataContractFactory)]
@@ -48,9 +61,9 @@ impl From<DataContractFactory> for DataContractFactoryWasm {
48
61
  }
49
62
  }
50
63
 
51
- impl Into<DataContractFactory> for DataContractFactoryWasm {
52
- fn into(self) -> DataContractFactory {
53
- self.0
64
+ impl From<DataContractFactoryWasm> for DataContractFactory {
65
+ fn from(val: DataContractFactoryWasm) -> Self {
66
+ val.0
54
67
  }
55
68
  }
56
69
 
@@ -65,10 +78,10 @@ extern "C" {
65
78
  impl EntropyGenerator for ExternalEntropyGenerator {
66
79
  fn generate(&self) -> [u8; 32] {
67
80
  // TODO: think about changing API to return an error but does it worth it for JS?
68
- let res = ExternalEntropyGenerator::generate(self)
81
+
82
+ ExternalEntropyGenerator::generate(self)
69
83
  .try_into()
70
- .expect("Bad entropy generator provided: should return 32 bytes");
71
- res
84
+ .expect("Bad entropy generator provided: should return 32 bytes")
72
85
  }
73
86
  }
74
87
  #[wasm_bindgen(js_class=DataContractFactory)]
@@ -86,7 +99,7 @@ impl DataContractFactoryWasm {
86
99
  Box::new(external_entropy_generator),
87
100
  )
88
101
  } else {
89
- DataContractFactory::new(protocol_version, validate_data_contract.into()).into()
102
+ DataContractFactory::new(protocol_version, validate_data_contract.into())
90
103
  }
91
104
  .into()
92
105
  }
@@ -139,7 +152,7 @@ impl DataContractFactoryWasm {
139
152
  .create_from_buffer(buffer, skip_validation.unwrap_or(false))
140
153
  .await
141
154
  .map(Into::into)
142
- .map_err(from_dpp_err)
155
+ .map_err(from_protocol_error)
143
156
  }
144
157
 
145
158
  #[wasm_bindgen(js_name=createDataContractCreateTransition)]
@@ -1,7 +1,5 @@
1
1
  use thiserror::Error;
2
2
 
3
- use crate::DocumentWasm;
4
-
5
3
  use super::*;
6
4
 
7
5
  #[wasm_bindgen]
@@ -10,14 +8,17 @@ use super::*;
10
8
  pub struct InvalidDocumentError {
11
9
  // the point is how we hold all there different types in the Vector
12
10
  errors: Vec<JsValue>,
13
- document: DocumentWasm,
11
+ raw_document: JsValue,
14
12
  }
15
13
 
16
- #[wasm_bindgen]
14
+ #[wasm_bindgen(js_class=InvalidDocumentError)]
17
15
  impl InvalidDocumentError {
18
16
  #[wasm_bindgen(constructor)]
19
- pub fn new(document: DocumentWasm, errors: Vec<JsValue>) -> InvalidDocumentError {
20
- Self { document, errors }
17
+ pub fn new(raw_document: JsValue, errors: Vec<JsValue>) -> InvalidDocumentError {
18
+ Self {
19
+ raw_document,
20
+ errors,
21
+ }
21
22
  }
22
23
 
23
24
  #[wasm_bindgen(js_name=getErrors)]
@@ -25,8 +26,8 @@ impl InvalidDocumentError {
25
26
  self.errors.clone()
26
27
  }
27
28
 
28
- #[wasm_bindgen(js_name=getDocument)]
29
- pub fn get_document(&self) -> DocumentWasm {
30
- self.document.clone()
29
+ #[wasm_bindgen(js_name=getRawDocument)]
30
+ pub fn get_document(&self) -> JsValue {
31
+ self.raw_document.clone()
31
32
  }
32
33
  }
@@ -18,7 +18,7 @@ impl InvalidInitialRevisionError {
18
18
  Self { document }
19
19
  }
20
20
 
21
- #[wasm_bindgen(js_name=getDocumentTransition)]
21
+ #[wasm_bindgen(js_name=getDocument)]
22
22
  pub fn get_document_transition(&self) -> DocumentWasm {
23
23
  self.document.clone()
24
24
  }
@@ -1,3 +1,5 @@
1
+ use dpp::prelude::Document;
2
+ use itertools::Itertools;
1
3
  use thiserror::Error;
2
4
 
3
5
  use crate::DocumentWasm;
@@ -7,21 +9,29 @@ use super::*;
7
9
  #[wasm_bindgen]
8
10
  #[derive(Error, Debug)]
9
11
  #[error("Documents have mixed owner ids")]
10
- pub struct MismatchOwnersIdsError {
12
+ pub struct MismatchOwnerIdsError {
11
13
  documents: Vec<DocumentWasm>,
12
14
  }
13
15
 
14
16
  #[wasm_bindgen]
15
- impl MismatchOwnersIdsError {
17
+ impl MismatchOwnerIdsError {
16
18
  #[wasm_bindgen(constructor)]
17
- pub fn new(documents: Vec<JsValue>) -> MismatchOwnersIdsError {
19
+ pub fn new(documents: Vec<JsValue>) -> MismatchOwnerIdsError {
18
20
  Self {
19
21
  documents: into_vec_of(&documents),
20
22
  }
21
23
  }
22
24
 
23
- #[wasm_bindgen(js_name=getDocumentTransition)]
25
+ #[wasm_bindgen(js_name=getDocuments)]
24
26
  pub fn get_documents(&self) -> Vec<JsValue> {
25
27
  to_vec_js(self.documents.clone())
26
28
  }
27
29
  }
30
+
31
+ impl MismatchOwnerIdsError {
32
+ pub fn from_documents(documents: Vec<Document>) -> MismatchOwnerIdsError {
33
+ Self {
34
+ documents: documents.into_iter().map(DocumentWasm::from).collect_vec(),
35
+ }
36
+ }
37
+ }
@@ -1,3 +1,4 @@
1
+ use serde::Serialize;
1
2
  use wasm_bindgen::prelude::*;
2
3
 
3
4
  pub use document_already_exists_error::*;
@@ -11,7 +12,7 @@ pub use mismatch_owners_ids_error::*;
11
12
  pub use no_documents_supplied_error::*;
12
13
 
13
14
  use crate::errors::consensus_error::from_consensus_error;
14
- use crate::{utils::*, DocumentWasm};
15
+ use crate::utils::*;
15
16
 
16
17
  mod document_already_exists_error;
17
18
  mod document_not_provided_error;
@@ -24,32 +25,35 @@ mod no_documents_supplied_error;
24
25
 
25
26
  pub fn from_document_to_js_error(e: DocumentError) -> JsValue {
26
27
  match e {
27
- DocumentError::DocumentAlreadyExists {
28
+ DocumentError::DocumentAlreadyExistsError {
28
29
  document_transition,
29
30
  } => DocumentAlreadyExistsError::new(document_transition).into(),
30
- DocumentError::DocumentNotProvided {
31
+ DocumentError::DocumentNotProvidedError {
31
32
  document_transition,
32
33
  } => DocumentNotProvidedError::new(document_transition).into(),
33
34
 
34
- DocumentError::InvalidActionName { actions } => {
35
+ DocumentError::InvalidActionNameError { actions } => {
35
36
  InvalidActionNameError::new(to_vec_js(actions)).into()
36
37
  }
37
- DocumentError::InvalidDocument { errors, document } => InvalidDocumentError::new(
38
- (*document).into(),
38
+ DocumentError::InvalidDocumentError {
39
+ errors,
40
+ raw_document,
41
+ } => InvalidDocumentError::new(
42
+ raw_document
43
+ .serialize(&serde_wasm_bindgen::Serializer::json_compatible())
44
+ .expect("Raw Document should be serializable into JsValue"),
39
45
  errors.into_iter().map(from_consensus_error).collect(),
40
46
  )
41
47
  .into(),
42
- DocumentError::InvalidDocumentAction {
48
+ DocumentError::InvalidDocumentActionError {
43
49
  document_transition,
44
50
  } => InvalidDocumentActionError::new(document_transition).into(),
45
- DocumentError::InvalidInitialRevision { document } => {
51
+ DocumentError::InvalidInitialRevisionError { document } => {
46
52
  InvalidInitialRevisionError::new((*document).into()).into()
47
53
  }
48
- DocumentError::MismatchOwnersIds { documents } => {
49
- let documents_wasm: Vec<DocumentWasm> =
50
- documents.into_iter().map(DocumentWasm::from).collect();
51
- MismatchOwnersIdsError::new(to_vec_js(documents_wasm)).into()
54
+ DocumentError::MismatchOwnerIdsError { documents } => {
55
+ MismatchOwnerIdsError::from_documents(documents).into()
52
56
  }
53
- DocumentError::NotDocumentsSupplied => NotDocumentsSuppliedError::new().into(),
57
+ DocumentError::NoDocumentsSuppliedError => NoDocumentsSuppliedError::new().into(),
54
58
  }
55
59
  }
@@ -5,17 +5,17 @@ use super::*;
5
5
  #[wasm_bindgen]
6
6
  #[derive(Error, Debug)]
7
7
  #[error("No documents were supplied to state transition")]
8
- pub struct NotDocumentsSuppliedError {}
8
+ pub struct NoDocumentsSuppliedError {}
9
9
 
10
10
  #[wasm_bindgen]
11
- impl NotDocumentsSuppliedError {
11
+ impl NoDocumentsSuppliedError {
12
12
  #[wasm_bindgen(constructor)]
13
13
  pub fn new() -> Self {
14
- NotDocumentsSuppliedError {}
14
+ NoDocumentsSuppliedError {}
15
15
  }
16
16
  }
17
17
 
18
- impl Default for NotDocumentsSuppliedError {
18
+ impl Default for NoDocumentsSuppliedError {
19
19
  fn default() -> Self {
20
20
  Self::new()
21
21
  }