@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
package/src/utils.rs CHANGED
@@ -1,15 +1,37 @@
1
- use dpp::dashcore::anyhow::Context;
1
+ use dpp::{
2
+ dashcore::{anyhow, anyhow::Context},
3
+ ProtocolError,
4
+ };
5
+
2
6
  use js_sys::Function;
7
+ use serde::de::DeserializeOwned;
3
8
  use serde_json::Value;
9
+ use wasm_bindgen::convert::RefFromWasmAbi;
4
10
  use wasm_bindgen::prelude::*;
5
11
 
12
+ use crate::errors::{from_dpp_err, RustConversionError};
13
+
6
14
  pub trait ToSerdeJSONExt {
7
- fn to_serde_json_value(&self) -> Result<Value, JsValue>;
15
+ fn with_serde_to_json_value(&self) -> Result<Value, JsValue>;
16
+ fn with_serde_into<D: DeserializeOwned>(&self) -> Result<D, JsValue>
17
+ where
18
+ D: for<'de> serde::de::Deserialize<'de> + 'static;
8
19
  }
9
20
 
10
21
  impl ToSerdeJSONExt for JsValue {
11
- fn to_serde_json_value(&self) -> Result<Value, JsValue> {
12
- to_serde_json_value(self)
22
+ /// Converts the `JsValue` into `serde_json::Value`. It's an expensive conversion,
23
+ /// as `JsValue` must be stringified first
24
+ fn with_serde_to_json_value(&self) -> Result<Value, JsValue> {
25
+ with_serde_to_json_value(self)
26
+ }
27
+
28
+ /// converts the `JsValue` into any type that is supported by serde. It's an expensive conversion
29
+ /// as the `jsValue` must be stringified first
30
+ fn with_serde_into<D>(&self) -> Result<D, JsValue>
31
+ where
32
+ D: for<'de> serde::de::Deserialize<'de> + 'static,
33
+ {
34
+ with_serde_into(self)
13
35
  }
14
36
  }
15
37
 
@@ -25,7 +47,7 @@ pub fn to_vec_of_serde_values(
25
47
  ) -> Result<Vec<Value>, JsValue> {
26
48
  values
27
49
  .into_iter()
28
- .map(|v| v.as_ref().to_serde_json_value())
50
+ .map(|v| v.as_ref().with_serde_to_json_value())
29
51
  .collect()
30
52
  }
31
53
 
@@ -38,9 +60,20 @@ where
38
60
  .collect()
39
61
  }
40
62
 
41
- pub fn to_serde_json_value(data: &JsValue) -> Result<Value, JsValue> {
63
+ pub fn with_serde_to_json_value(data: &JsValue) -> Result<Value, JsValue> {
42
64
  let data = stringify(data)?;
43
65
  let value: Value = serde_json::from_str(&data)
66
+ .with_context(|| format!("cant convert {data:#?} to serde json value"))
67
+ .map_err(|e| format!("{e:#}"))?;
68
+ Ok(value)
69
+ }
70
+
71
+ pub fn with_serde_into<D>(data: &JsValue) -> Result<D, JsValue>
72
+ where
73
+ D: for<'de> serde::de::Deserialize<'de> + 'static,
74
+ {
75
+ let data = stringify(data)?;
76
+ let value: D = serde_json::from_str(&data)
44
77
  .with_context(|| format!("cant convert {:#?} to serde json value", data))
45
78
  .map_err(|e| format!("{:#}", e))?;
46
79
  Ok(value)
@@ -49,7 +82,7 @@ pub fn to_serde_json_value(data: &JsValue) -> Result<Value, JsValue> {
49
82
  pub fn stringify(data: &JsValue) -> Result<String, JsValue> {
50
83
  let replacer_func = Function::new_with_args(
51
84
  "key, value",
52
- "return value.type=='Buffer' ? value.data : value ",
85
+ "return value && value.type=='Buffer' ? value.data : value ",
53
86
  );
54
87
 
55
88
  let data_string: String =
@@ -57,3 +90,65 @@ pub fn stringify(data: &JsValue) -> Result<String, JsValue> {
57
90
 
58
91
  Ok(data_string)
59
92
  }
93
+
94
+ pub trait WithJsError<T> {
95
+ /// Converts the error into JsValue
96
+ fn with_js_error(self) -> Result<T, JsValue>;
97
+ }
98
+
99
+ impl<T> WithJsError<T> for Result<T, anyhow::Error> {
100
+ fn with_js_error(self) -> Result<T, JsValue> {
101
+ match self {
102
+ Ok(ok) => Ok(ok),
103
+ Err(error) => Err(format!("{error:#}").into()),
104
+ }
105
+ }
106
+ }
107
+
108
+ impl<T> WithJsError<T> for Result<T, ProtocolError> {
109
+ fn with_js_error(self) -> Result<T, JsValue> {
110
+ match self {
111
+ Ok(ok) => Ok(ok),
112
+ Err(error) => Err(from_dpp_err(error)),
113
+ }
114
+ }
115
+ }
116
+
117
+ impl<T> WithJsError<T> for Result<T, serde_json::Error> {
118
+ fn with_js_error(self) -> Result<T, JsValue> {
119
+ match self {
120
+ Ok(ok) => Ok(ok),
121
+ Err(error) => Err(RustConversionError::from(error).to_js_value()),
122
+ }
123
+ }
124
+ }
125
+
126
+ pub fn generic_of_js_val<T: RefFromWasmAbi<Abi = u32>>(
127
+ js_value: &JsValue,
128
+ class_name: &str,
129
+ ) -> Result<T::Anchor, JsValue> {
130
+ if !js_value.is_object() {
131
+ return Err(JsValue::from_str(
132
+ format!("Value supplied as {} is not an object", class_name).as_str(),
133
+ ));
134
+ }
135
+
136
+ let ctor_name = js_sys::Object::get_prototype_of(js_value)
137
+ .constructor()
138
+ .name();
139
+
140
+ if ctor_name == class_name {
141
+ let ptr = js_sys::Reflect::get(js_value, &JsValue::from_str("ptr"))?;
142
+ let ptr_u32: u32 =
143
+ ptr.as_f64()
144
+ .ok_or_else(|| JsValue::from("Invalid JS object pointer"))? as u32;
145
+ let reference = unsafe { T::ref_from_abi(ptr_u32) };
146
+ Ok(reference)
147
+ } else {
148
+ let error_string = format!(
149
+ "JS object constructor name mismatch. Expected {}, provided {}.",
150
+ class_name, ctor_name
151
+ );
152
+ Err(JsValue::from(&error_string))
153
+ }
154
+ }
@@ -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
+ }
@@ -0,0 +1,5 @@
1
+ mod json_schema_validator;
2
+ mod validation_result;
3
+
4
+ pub use json_schema_validator::*;
5
+ pub use validation_result::*;
@@ -4,7 +4,17 @@ 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,18 @@ impl ValidationResultWasm {
32
42
  .map(from_consensus_error_ref)
33
43
  .collect()
34
44
  }
35
- }
36
45
 
37
- impl From<ValidationResult<()>> for ValidationResultWasm {
38
- fn from(validation_result: ValidationResult<()>) -> Self {
39
- ValidationResultWasm(validation_result)
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
+ }
40
58
  }
41
59
  }
@@ -0,0 +1,2 @@
1
+ mod protocol_version;
2
+ pub use protocol_version::*;
@@ -0,0 +1,26 @@
1
+ use dpp::version::ProtocolVersionValidator;
2
+ use wasm_bindgen::prelude::*;
3
+
4
+ #[wasm_bindgen(js_name=ProtocolVersionValidator)]
5
+ pub struct ProtocolVersionValidatorWasm(ProtocolVersionValidator);
6
+
7
+ #[wasm_bindgen(js_class=ProtocolVersionValidator)]
8
+ impl ProtocolVersionValidatorWasm {
9
+ // TODO should the constructor be without parameters?
10
+ #[wasm_bindgen(constructor)]
11
+ pub fn new() -> ProtocolVersionValidatorWasm {
12
+ ProtocolVersionValidatorWasm(ProtocolVersionValidator::default())
13
+ }
14
+ }
15
+
16
+ impl From<ProtocolVersionValidator> for ProtocolVersionValidatorWasm {
17
+ fn from(doc_validator: ProtocolVersionValidator) -> Self {
18
+ ProtocolVersionValidatorWasm(doc_validator)
19
+ }
20
+ }
21
+
22
+ impl From<ProtocolVersionValidatorWasm> for ProtocolVersionValidator {
23
+ fn from(val: ProtocolVersionValidatorWasm) -> Self {
24
+ val.0
25
+ }
26
+ }