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

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 (80) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/lib/dpp.d.ts +9 -0
  3. package/dist/lib/errors/AbstractConsensusError.d.ts +10 -0
  4. package/dist/lib/errors/DPPError.d.ts +5 -0
  5. package/dist/lib/errors/patchConsensusErrors.d.ts +1 -0
  6. package/dist/lib/{patchIdentifier.d.ts → identifier/patchIdentifier.d.ts} +1 -1
  7. package/dist/{index.d.ts → lib/index.d.ts} +1 -1
  8. package/dist/lib/utils/extend.d.ts +1 -0
  9. package/dist/wasm/wasm_dpp.d.ts +352 -205
  10. package/lib/dpp.ts +24 -0
  11. package/lib/errors/AbstractConsensusError.ts +13 -0
  12. package/lib/errors/DPPError.ts +15 -0
  13. package/lib/errors/patchConsensusErrors.ts +175 -0
  14. package/lib/{patchIdentifier.ts → identifier/patchIdentifier.ts} +1 -1
  15. package/{index.ts → lib/index.ts} +4 -3
  16. package/lib/test/expect/expectError.js +4 -2
  17. package/lib/utils/extend.ts +6 -0
  18. package/package.json +5 -5
  19. package/src/data_contract/errors/invalid_data_contract.rs +21 -0
  20. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +4 -4
  21. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +2 -2
  22. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +44 -0
  23. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +147 -0
  24. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +46 -0
  25. package/src/data_contract/state_transition/mod.rs +2 -0
  26. package/src/data_contract_factory/data_contract_factory.rs +27 -12
  27. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +5 -5
  28. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +4 -4
  29. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +36 -0
  30. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +20 -0
  31. package/src/errors/consensus/basic/document/mod.rs +4 -0
  32. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +2 -2
  33. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +2 -2
  34. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +2 -2
  35. package/src/errors/consensus/basic/json_schema_error.rs +1 -1
  36. package/src/errors/consensus_error.rs +15 -8
  37. package/src/errors/from.rs +1 -1
  38. package/src/errors/mod.rs +1 -0
  39. package/src/errors/protocol_error.rs +12 -0
  40. package/src/{identifier.rs → identifier/mod.rs} +0 -0
  41. package/src/{identity_facade.rs → identity/identity_facade.rs} +1 -1
  42. package/src/{identity_public_key → identity/identity_public_key}/key_type.rs +0 -0
  43. package/src/{identity_public_key → identity/identity_public_key}/mod.rs +0 -3
  44. package/src/{identity_public_key → identity/identity_public_key}/purpose.rs +0 -0
  45. package/src/{identity_public_key → identity/identity_public_key}/security_level.rs +0 -0
  46. package/src/{identity.rs → identity/mod.rs} +6 -7
  47. package/src/identity/validation/mod.rs +3 -0
  48. package/src/identity/validation/public_keys_validator.rs +70 -0
  49. package/src/lib.rs +1 -6
  50. package/src/utils.rs +2 -2
  51. package/src/validation/mod.rs +3 -0
  52. package/src/{validation_result.rs → validation/validation_result.rs} +0 -0
  53. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +1 -1
  54. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +79 -114
  55. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -11
  56. package/test/integration/stateTransition/StateTransitionFacade.spec.js +1 -1
  57. package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +135 -0
  58. package/test/unit/dataContract/DataContract.spec.js +5 -9
  59. package/test/unit/dataContract/DataContractFactory.spec.js +13 -6
  60. package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +11 -3
  61. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +20 -16
  62. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +23 -59
  63. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +27 -23
  64. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +29 -12
  65. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +66 -49
  66. package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +73 -0
  67. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +1 -1
  68. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +1 -1
  69. package/test/unit/identity/IdentityPublicKey.spec.js +25 -31
  70. package/tsconfig.json +1 -1
  71. package/wasm/wasm_dpp.d.ts +352 -205
  72. package/wasm/wasm_dpp.js +759 -372
  73. package/wasm/wasm_dpp_bg.js +1 -1
  74. package/wasm/wasm_dpp_bg.wasm +0 -0
  75. package/wasm/wasm_dpp_bg.wasm.d.ts +205 -175
  76. package/webpack.config.js +1 -1
  77. package/src/identity_public_key/public_keys_validator.rs +0 -44
  78. package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +0 -32
  79. package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +0 -93
  80. package/test/unit/dataContract/validation/validateDataContractPatternsFactory.spec.js +0 -64
@@ -12,7 +12,11 @@ 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
+ RustConversionError,
18
+ },
19
+ validation::ValidationResultWasm,
16
20
  with_js_error, DataContractCreateTransitionWasm, DataContractParameters, DataContractWasm,
17
21
  };
18
22
 
@@ -25,9 +29,9 @@ impl From<DataContractValidator> for DataContractValidatorWasm {
25
29
  }
26
30
  }
27
31
 
28
- impl Into<DataContractValidator> for DataContractValidatorWasm {
29
- fn into(self) -> DataContractValidator {
30
- self.0
32
+ impl From<DataContractValidatorWasm> for DataContractValidator {
33
+ fn from(val: DataContractValidatorWasm) -> Self {
34
+ val.0
31
35
  }
32
36
  }
33
37
 
@@ -37,6 +41,17 @@ impl DataContractValidatorWasm {
37
41
  pub fn new() -> Self {
38
42
  DataContractValidator::new(std::sync::Arc::new(ProtocolVersionValidator::default())).into()
39
43
  }
44
+
45
+ #[wasm_bindgen(js_name=validate)]
46
+ pub fn validate(&self, raw_data_contract: JsValue) -> Result<ValidationResultWasm, JsValue> {
47
+ let parameters: DataContractParameters =
48
+ with_js_error!(serde_wasm_bindgen::from_value(raw_data_contract))?;
49
+ let json_object = serde_json::to_value(parameters).expect("Implements Serialize");
50
+ self.0
51
+ .validate(&json_object)
52
+ .map(Into::into)
53
+ .map_err(from_protocol_error)
54
+ }
40
55
  }
41
56
 
42
57
  #[wasm_bindgen(js_name=DataContractFactory)]
@@ -48,9 +63,9 @@ impl From<DataContractFactory> for DataContractFactoryWasm {
48
63
  }
49
64
  }
50
65
 
51
- impl Into<DataContractFactory> for DataContractFactoryWasm {
52
- fn into(self) -> DataContractFactory {
53
- self.0
66
+ impl From<DataContractFactoryWasm> for DataContractFactory {
67
+ fn from(val: DataContractFactoryWasm) -> Self {
68
+ val.0
54
69
  }
55
70
  }
56
71
 
@@ -65,10 +80,10 @@ extern "C" {
65
80
  impl EntropyGenerator for ExternalEntropyGenerator {
66
81
  fn generate(&self) -> [u8; 32] {
67
82
  // TODO: think about changing API to return an error but does it worth it for JS?
68
- let res = ExternalEntropyGenerator::generate(self)
83
+
84
+ ExternalEntropyGenerator::generate(self)
69
85
  .try_into()
70
- .expect("Bad entropy generator provided: should return 32 bytes");
71
- res
86
+ .expect("Bad entropy generator provided: should return 32 bytes")
72
87
  }
73
88
  }
74
89
  #[wasm_bindgen(js_class=DataContractFactory)]
@@ -86,7 +101,7 @@ impl DataContractFactoryWasm {
86
101
  Box::new(external_entropy_generator),
87
102
  )
88
103
  } else {
89
- DataContractFactory::new(protocol_version, validate_data_contract.into()).into()
104
+ DataContractFactory::new(protocol_version, validate_data_contract.into())
90
105
  }
91
106
  .into()
92
107
  }
@@ -139,7 +154,7 @@ impl DataContractFactoryWasm {
139
154
  .create_from_buffer(buffer, skip_validation.unwrap_or(false))
140
155
  .await
141
156
  .map(Into::into)
142
- .map_err(from_dpp_err)
157
+ .map_err(from_protocol_error)
143
158
  }
144
159
 
145
160
  #[wasm_bindgen(js_name=createDataContractCreateTransition)]
@@ -1,19 +1,19 @@
1
1
  use wasm_bindgen::prelude::*;
2
2
 
3
- #[wasm_bindgen(js_name=DataContractMaxDepthError)]
4
- pub struct DataContractMaxDepthErrorWasm {
3
+ #[wasm_bindgen(js_name=DataContractMaxDepthExceedError)]
4
+ pub struct DataContractMaxDepthExceedErrorWasm {
5
5
  depth: usize,
6
6
  code: u32,
7
7
  }
8
8
 
9
- impl DataContractMaxDepthErrorWasm {
9
+ impl DataContractMaxDepthExceedErrorWasm {
10
10
  pub fn new(depth: usize, code: u32) -> Self {
11
- DataContractMaxDepthErrorWasm { depth, code }
11
+ DataContractMaxDepthExceedErrorWasm { depth, code }
12
12
  }
13
13
  }
14
14
 
15
15
  #[wasm_bindgen(js_class=DataContractMaxDepthError)]
16
- impl DataContractMaxDepthErrorWasm {
16
+ impl DataContractMaxDepthExceedErrorWasm {
17
17
  #[wasm_bindgen(js_name=getDepth)]
18
18
  pub fn get_expected_version(&self) -> usize {
19
19
  self.depth
@@ -3,19 +3,19 @@ use std::iter::FromIterator;
3
3
  use wasm_bindgen::prelude::*;
4
4
 
5
5
  #[wasm_bindgen(js_name=DuplicateDocumentTransitionsWithIdsError)]
6
- pub struct DuplicateDocumentTransitionsWithIdsError {
6
+ pub struct DuplicateDocumentTransitionsWithIdsErrorWasm {
7
7
  references: Vec<(String, Vec<u8>)>,
8
8
  code: u32,
9
9
  }
10
10
 
11
- impl DuplicateDocumentTransitionsWithIdsError {
11
+ impl DuplicateDocumentTransitionsWithIdsErrorWasm {
12
12
  pub fn new(references: Vec<(String, Vec<u8>)>, code: u32) -> Self {
13
- DuplicateDocumentTransitionsWithIdsError { references, code }
13
+ DuplicateDocumentTransitionsWithIdsErrorWasm { references, code }
14
14
  }
15
15
  }
16
16
 
17
17
  #[wasm_bindgen(js_class=DuplicateDocumentTransitionsWithIdsError)]
18
- impl DuplicateDocumentTransitionsWithIdsError {
18
+ impl DuplicateDocumentTransitionsWithIdsErrorWasm {
19
19
  #[wasm_bindgen(js_name=getReferences)]
20
20
  pub fn get_references(&self) -> js_sys::Array {
21
21
  self.references
@@ -0,0 +1,36 @@
1
+ use crate::buffer::Buffer;
2
+ use std::iter::FromIterator;
3
+ use wasm_bindgen::prelude::*;
4
+
5
+ #[wasm_bindgen(js_name=DuplicateDocumentTransitionsWithIndicesError)]
6
+ pub struct DuplicateDocumentTransitionsWithIndicesErrorWasm {
7
+ references: Vec<(String, Vec<u8>)>,
8
+ code: u32,
9
+ }
10
+
11
+ impl DuplicateDocumentTransitionsWithIndicesErrorWasm {
12
+ pub fn new(references: Vec<(String, Vec<u8>)>, code: u32) -> Self {
13
+ DuplicateDocumentTransitionsWithIndicesErrorWasm { references, code }
14
+ }
15
+ }
16
+
17
+ #[wasm_bindgen(js_class=DuplicateDocumentTransitionsWithIndicesError)]
18
+ impl DuplicateDocumentTransitionsWithIndicesErrorWasm {
19
+ #[wasm_bindgen(js_name=getReferences)]
20
+ pub fn get_references(&self) -> js_sys::Array {
21
+ self.references
22
+ .iter()
23
+ .map(|v| {
24
+ js_sys::Array::from_iter(vec![
25
+ JsValue::from(v.0.clone()),
26
+ JsValue::from(Buffer::from_bytes(&v.1)),
27
+ ])
28
+ })
29
+ .collect()
30
+ }
31
+
32
+ #[wasm_bindgen(js_name=getCode)]
33
+ pub fn get_code(&self) -> u32 {
34
+ self.code
35
+ }
36
+ }
@@ -0,0 +1,20 @@
1
+ use wasm_bindgen::prelude::*;
2
+
3
+ #[wasm_bindgen(js_name=MissingDocumentTransitionTypeError)]
4
+ pub struct MissingDocumentTransitionTypeErrorWasm {
5
+ code: u32,
6
+ }
7
+
8
+ impl MissingDocumentTransitionTypeErrorWasm {
9
+ pub fn new(code: u32) -> Self {
10
+ MissingDocumentTransitionTypeErrorWasm { code }
11
+ }
12
+ }
13
+
14
+ #[wasm_bindgen(js_class=MissingDocumentTransitionTypeError)]
15
+ impl MissingDocumentTransitionTypeErrorWasm {
16
+ #[wasm_bindgen(js_name=getCode)]
17
+ pub fn get_code(&self) -> u32 {
18
+ self.code
19
+ }
20
+ }
@@ -1,19 +1,23 @@
1
1
  mod data_contract_not_present_error;
2
2
  mod duplicate_document_transitions_with_ids_error;
3
+ mod duplicate_document_transitions_with_indices_error;
3
4
  mod inconsistent_compound_index_data_error;
4
5
  mod invalid_document_transition_action_error;
5
6
  mod invalid_document_transition_id_error;
6
7
  mod invalid_document_type_error;
7
8
  mod missing_data_contract_id_error;
8
9
  mod missing_document_transition_action_error;
10
+ mod missing_document_transition_type_error;
9
11
  mod missing_document_type_error;
10
12
 
11
13
  pub use data_contract_not_present_error::*;
12
14
  pub use duplicate_document_transitions_with_ids_error::*;
15
+ pub use duplicate_document_transitions_with_indices_error::*;
13
16
  pub use inconsistent_compound_index_data_error::*;
14
17
  pub use invalid_document_transition_action_error::*;
15
18
  pub use invalid_document_transition_id_error::*;
16
19
  pub use invalid_document_type_error::*;
17
20
  pub use missing_data_contract_id_error::*;
18
21
  pub use missing_document_transition_action_error::*;
22
+ pub use missing_document_transition_type_error::*;
19
23
  pub use missing_document_type_error::*;
@@ -16,12 +16,12 @@ impl From<&DuplicatedIdentityPublicKeyError> for DuplicatedIdentityPublicKeyErro
16
16
  #[wasm_bindgen(js_class=DuplicatedIdentityPublicKeyError)]
17
17
  impl DuplicatedIdentityPublicKeyErrorWasm {
18
18
  #[wasm_bindgen(js_name=getDuplicatedPublicKeysIds)]
19
- pub fn duplicated_public_keys_ids(&self) -> Vec<u32> {
19
+ pub fn duplicated_public_keys_ids(&self) -> js_sys::Array {
20
20
  // TODO: key ids probably should be u32
21
21
  self.inner
22
22
  .duplicated_public_keys_ids()
23
23
  .iter()
24
- .map(|id| *id as u32)
24
+ .map(|id| JsValue::from(*id as u32))
25
25
  .collect()
26
26
  }
27
27
 
@@ -16,12 +16,12 @@ impl From<&DuplicatedIdentityPublicKeyIdError> for DuplicatedIdentityPublicKeyId
16
16
  #[wasm_bindgen(js_class=DuplicatedIdentityPublicKeyIdError)]
17
17
  impl DuplicatedIdentityPublicKeyIdErrorWasm {
18
18
  #[wasm_bindgen(js_name=getDuplicatedIds)]
19
- pub fn duplicated_ids(&self) -> Vec<u32> {
19
+ pub fn duplicated_ids(&self) -> js_sys::Array {
20
20
  // TODO: key ids probably should be u32
21
21
  self.inner
22
22
  .duplicated_ids()
23
23
  .iter()
24
- .map(|id| *id as u32)
24
+ .map(|id| JsValue::from(*id as u32))
25
25
  .collect()
26
26
  }
27
27
 
@@ -25,12 +25,12 @@ impl InvalidIdentityPublicKeySecurityLevelErrorWasm {
25
25
  self.inner.public_key_id() as u32
26
26
  }
27
27
 
28
- #[wasm_bindgen(js_name=getPurpose)]
28
+ #[wasm_bindgen(js_name=getPublicKeyPurpose)]
29
29
  pub fn purpose(&self) -> u8 {
30
30
  self.inner.purpose() as u8
31
31
  }
32
32
 
33
- #[wasm_bindgen(js_name=getSecurityLevel)]
33
+ #[wasm_bindgen(js_name=getPublicKeySecurityLevel)]
34
34
  pub fn security_level(&self) -> u8 {
35
35
  self.inner.security_level() as u8
36
36
  }
@@ -141,7 +141,7 @@ impl From<&ValidationErrorKind> for Params {
141
141
  .build(),
142
142
  ValidationErrorKind::MinItems { limit } => ParamsBuilder::new()
143
143
  .set_keyword("minItems")
144
- .add_param("maximum", Value::from(*limit))
144
+ .add_param("minItems", Value::from(*limit))
145
145
  .build(),
146
146
  ValidationErrorKind::Minimum { limit } => ParamsBuilder::new()
147
147
  .set_keyword("minimum")
@@ -36,8 +36,9 @@ use crate::errors::consensus::basic::data_contract::{
36
36
  IncompatibleDataContractSchemaErrorWasm, InvalidDataContractIdErrorWasm,
37
37
  };
38
38
  use crate::errors::consensus::basic::document::{
39
- DuplicateDocumentTransitionsWithIdsError, InvalidDocumentTransitionActionErrorWasm,
40
- InvalidDocumentTransitionIdErrorWasm, MissingDataContractIdErrorWasm,
39
+ DuplicateDocumentTransitionsWithIdsErrorWasm, DuplicateDocumentTransitionsWithIndicesErrorWasm,
40
+ InvalidDocumentTransitionActionErrorWasm, InvalidDocumentTransitionIdErrorWasm,
41
+ MissingDataContractIdErrorWasm, MissingDocumentTypeErrorWasm,
41
42
  };
42
43
  use crate::errors::consensus::basic::state_transition::{
43
44
  InvalidStateTransitionTypeErrorWasm, MissingStateTransitionTypeErrorWasm,
@@ -62,7 +63,7 @@ use crate::errors::consensus::state::identity::{
62
63
  use dpp::errors::DataTriggerError;
63
64
 
64
65
  use super::consensus::basic::data_contract::{
65
- DataContractMaxDepthErrorWasm, DuplicateIndexErrorWasm, DuplicateIndexNameErrorWasm,
66
+ DataContractMaxDepthExceedErrorWasm, DuplicateIndexErrorWasm, DuplicateIndexNameErrorWasm,
66
67
  IncompatibleRe2PatternErrorWasm, InvalidCompoundIndexErrorWasm,
67
68
  InvalidDataContractVersionErrorWasm, InvalidIndexPropertyTypeErrorWasm,
68
69
  InvalidIndexedPropertyConstraintErrorWasm, InvalidJsonSchemaRefErrorWasm,
@@ -75,7 +76,7 @@ use super::consensus::basic::decode::{
75
76
  use super::consensus::basic::document::{
76
77
  DataContractNotPresentErrorWasm, InconsistentCompoundIndexDataErrorWasm,
77
78
  InvalidDocumentTypeErrorWasm, MissingDocumentTransitionActionErrorWasm,
78
- MissingDocumentTypeErrorWasm,
79
+ MissingDocumentTransitionTypeErrorWasm,
79
80
  };
80
81
  use super::consensus::basic::identity::{
81
82
  InvalidIdentityPublicKeyTypeErrorWasm, MissingPublicKeyErrorWasm,
@@ -99,7 +100,7 @@ pub fn from_consensus_error_ref(e: &DPPConsensusError) -> JsValue {
99
100
  DPPConsensusError::IncompatibleProtocolVersionError(e) => {
100
101
  IncompatibleProtocolVersionErrorWasm::from(e).into()
101
102
  }
102
- DPPConsensusError::DuplicatedIdentityPublicKeyIdError(e) => {
103
+ DPPConsensusError::DuplicatedIdentityPublicKeyBasicIdError(e) => {
103
104
  DuplicatedIdentityPublicKeyIdErrorWasm::from(e).into()
104
105
  }
105
106
  DPPConsensusError::InvalidIdentityPublicKeyDataError(e) => {
@@ -108,7 +109,7 @@ pub fn from_consensus_error_ref(e: &DPPConsensusError) -> JsValue {
108
109
  DPPConsensusError::InvalidIdentityPublicKeySecurityLevelError(e) => {
109
110
  InvalidIdentityPublicKeySecurityLevelErrorWasm::from(e).into()
110
111
  }
111
- DPPConsensusError::DuplicatedIdentityPublicKeyError(e) => {
112
+ DPPConsensusError::DuplicatedIdentityPublicKeyBasicError(e) => {
112
113
  DuplicatedIdentityPublicKeyErrorWasm::from(e).into()
113
114
  }
114
115
  DPPConsensusError::MissingMasterPublicKeyError(e) => {
@@ -351,7 +352,7 @@ fn from_basic_error(basic_error: &Box<BasicError>) -> JsValue {
351
352
  version,
352
353
  } => InvalidDataContractVersionErrorWasm::new(*expected_version, *version, code).into(),
353
354
  BasicError::DataContractMaxDepthExceedError(depth) => {
354
- DataContractMaxDepthErrorWasm::new(*depth, code).into()
355
+ DataContractMaxDepthExceedErrorWasm::new(*depth, code).into()
355
356
  }
356
357
  BasicError::InvalidDocumentTypeError {
357
358
  document_type,
@@ -457,6 +458,9 @@ fn from_basic_error(basic_error: &Box<BasicError>) -> JsValue {
457
458
  code,
458
459
  )
459
460
  .into(),
461
+ BasicError::MissingDocumentTransitionTypeError => {
462
+ MissingDocumentTransitionTypeErrorWasm::new(code).into()
463
+ }
460
464
  BasicError::MissingDocumentTypeError => MissingDocumentTypeErrorWasm::new(code).into(),
461
465
  BasicError::MissingDocumentTransitionActionError => {
462
466
  MissingDocumentTransitionActionErrorWasm::new(code).into()
@@ -472,8 +476,11 @@ fn from_basic_error(basic_error: &Box<BasicError>) -> JsValue {
472
476
  InvalidDocumentTransitionIdErrorWasm::new(expected_id.clone(), invalid_id.clone(), code)
473
477
  .into()
474
478
  }
479
+ BasicError::DuplicateDocumentTransitionsWithIndicesError { references } => {
480
+ DuplicateDocumentTransitionsWithIndicesErrorWasm::new(references.clone(), code).into()
481
+ }
475
482
  BasicError::DuplicateDocumentTransitionsWithIdsError { references } => {
476
- DuplicateDocumentTransitionsWithIdsError::new(references.clone(), code).into()
483
+ DuplicateDocumentTransitionsWithIdsErrorWasm::new(references.clone(), code).into()
477
484
  }
478
485
  BasicError::MissingDataContractIdError => MissingDataContractIdErrorWasm::new(code).into(),
479
486
  BasicError::InvalidIdentifierError {
@@ -19,6 +19,6 @@ pub fn from_dpp_err(pe: ProtocolError) -> JsValue {
19
19
  )
20
20
  .into(),
21
21
 
22
- _ => JsValue::from_str(&format!("Kek: {:#}", pe,)),
22
+ _ => JsValue::from_str(&format!("Error conversion not implemented: {pe:#}",)),
23
23
  }
24
24
  }
package/src/errors/mod.rs CHANGED
@@ -5,6 +5,7 @@ pub mod consensus;
5
5
  pub mod consensus_error;
6
6
  mod from;
7
7
  mod js_conversion;
8
+ pub mod protocol_error;
8
9
  mod public_key_validation_error;
9
10
 
10
11
  pub use public_key_validation_error::*;
@@ -0,0 +1,12 @@
1
+ use wasm_bindgen::JsValue;
2
+
3
+ use super::consensus_error::from_consensus_error;
4
+
5
+ pub fn from_protocol_error(e: dpp::ProtocolError) -> JsValue {
6
+ match e {
7
+ dpp::ProtocolError::AbstractConsensusError(consensus_error) => {
8
+ from_consensus_error(*consensus_error)
9
+ }
10
+ _ => unimplemented!(),
11
+ }
12
+ }
File without changes
@@ -6,7 +6,7 @@ use dpp::identity::validation::PublicKeysValidator;
6
6
  use dpp::identity::IdentityFacade;
7
7
 
8
8
  use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
9
- use crate::validation_result::ValidationResultWasm;
9
+ use crate::validation::ValidationResultWasm;
10
10
  use dpp::version::ProtocolVersionValidator;
11
11
  use dpp::NonConsensusError;
12
12
 
@@ -14,9 +14,6 @@ mod security_level;
14
14
  pub use security_level::*;
15
15
 
16
16
  mod key_type;
17
- mod public_keys_validator;
18
-
19
- pub use public_keys_validator::*;
20
17
 
21
18
  pub use key_type::*;
22
19
 
@@ -1,3 +1,7 @@
1
+ pub mod identity_facade;
2
+ mod identity_public_key;
3
+ mod validation;
4
+
1
5
  use js_sys::Array;
2
6
  use serde_json::Value;
3
7
  use wasm_bindgen::prelude::*;
@@ -12,8 +16,8 @@ use crate::errors::from_dpp_err;
12
16
  use crate::identifier::IdentifierWrapper;
13
17
  use crate::utils;
14
18
  use crate::utils::to_vec_of_serde_values;
15
- use crate::IdentityPublicKeyWasm;
16
19
  use crate::MetadataWasm;
20
+ pub use identity_public_key::*;
17
21
 
18
22
  #[wasm_bindgen(js_name=Identity)]
19
23
  #[derive(Clone)]
@@ -60,12 +64,7 @@ impl IdentityWasm {
60
64
  .into_iter()
61
65
  .map(IdentityPublicKey::from_json_object)
62
66
  .collect::<Result<_, _>>()
63
- .map_err(|e| {
64
- format!(
65
- "converting to collection of IdentityPublicKeys failed: {:#}",
66
- e
67
- )
68
- })?;
67
+ .map_err(|e| format!("converting to collection of IdentityPublicKeys failed: {e:#}"))?;
69
68
 
70
69
  self.0.set_public_keys(public_keys);
71
70
 
@@ -0,0 +1,3 @@
1
+ mod public_keys_validator;
2
+
3
+ pub use public_keys_validator::*;
@@ -0,0 +1,70 @@
1
+ use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
2
+
3
+ use crate::utils::{to_vec_of_serde_values, ToSerdeJSONExt};
4
+ use crate::validation::ValidationResultWasm;
5
+ use dpp::identity::validation::{
6
+ PublicKeysValidator, TPublicKeysValidator, PUBLIC_KEY_SCHEMA_FOR_TRANSITION,
7
+ };
8
+
9
+ use wasm_bindgen::prelude::*;
10
+
11
+ #[wasm_bindgen(js_name = PublicKeysValidator)]
12
+ pub struct PublicKeysValidatorWasm {
13
+ public_key_validator: PublicKeysValidator<BlsAdapter>,
14
+ public_key_in_state_transition_validator: PublicKeysValidator<BlsAdapter>,
15
+ }
16
+
17
+ #[wasm_bindgen(js_class = PublicKeysValidator)]
18
+ impl PublicKeysValidatorWasm {
19
+ #[wasm_bindgen(constructor)]
20
+ pub fn new(adapter: JsBlsAdapter) -> Result<PublicKeysValidatorWasm, JsError> {
21
+ Ok(Self {
22
+ public_key_validator: PublicKeysValidator::new(BlsAdapter(JsBlsAdapter::from(
23
+ adapter.clone(),
24
+ )))?,
25
+ public_key_in_state_transition_validator: PublicKeysValidator::new_with_schema(
26
+ PUBLIC_KEY_SCHEMA_FOR_TRANSITION.clone(),
27
+ BlsAdapter(adapter),
28
+ )?,
29
+ })
30
+ }
31
+
32
+ #[wasm_bindgen(js_name=validateKeys)]
33
+ pub fn validate_keys(
34
+ &self,
35
+ public_keys: js_sys::Array,
36
+ ) -> Result<ValidationResultWasm, JsValue> {
37
+ let raw_public_keys = to_vec_of_serde_values(public_keys.iter())?;
38
+
39
+ self.public_key_validator
40
+ .validate_keys(&raw_public_keys)
41
+ .map(ValidationResultWasm::from)
42
+ .map_err(|e| JsValue::from(e.to_string()))
43
+ }
44
+
45
+ #[wasm_bindgen(js_name=validatePublicKeyStructure)]
46
+ pub fn validate_public_key_structure(
47
+ &self,
48
+ public_key: JsValue,
49
+ ) -> Result<ValidationResultWasm, JsValue> {
50
+ let pk_serde_json = public_key.to_serde_json_value()?;
51
+
52
+ self.public_key_validator
53
+ .validate_public_key_structure(&pk_serde_json)
54
+ .map(ValidationResultWasm::from)
55
+ .map_err(|e| JsValue::from(e.to_string()))
56
+ }
57
+
58
+ #[wasm_bindgen(js_name=validateKeysInStateTransition)]
59
+ pub fn validate_keys_in_state_transition(
60
+ &self,
61
+ public_keys: js_sys::Array,
62
+ ) -> Result<ValidationResultWasm, JsValue> {
63
+ let raw_public_keys = to_vec_of_serde_values(public_keys.iter())?;
64
+
65
+ self.public_key_in_state_transition_validator
66
+ .validate_keys(&raw_public_keys)
67
+ .map(ValidationResultWasm::from)
68
+ .map_err(|e| JsValue::from(e.to_string()))
69
+ }
70
+ }
package/src/lib.rs CHANGED
@@ -3,9 +3,6 @@ pub use data_contract::*;
3
3
  pub use data_contract_factory::*;
4
4
  pub use document::*;
5
5
  pub use identity::*;
6
- pub use identity::*;
7
- pub use identity_facade::*;
8
- pub use identity_public_key::*;
9
6
  pub use metadata::*;
10
7
  pub use state_transition::*;
11
8
 
@@ -16,8 +13,6 @@ mod document;
16
13
  pub mod errors;
17
14
  mod identifier;
18
15
  mod identity;
19
- mod identity_facade;
20
- mod identity_public_key;
21
16
  mod metadata;
22
17
  mod state_repository;
23
18
  mod state_transition;
@@ -26,4 +21,4 @@ mod utils;
26
21
 
27
22
  mod bls_adapter;
28
23
  mod buffer;
29
- pub mod validation_result;
24
+ mod validation;
package/src/utils.rs CHANGED
@@ -41,8 +41,8 @@ where
41
41
  pub fn to_serde_json_value(data: &JsValue) -> Result<Value, JsValue> {
42
42
  let data = stringify(data)?;
43
43
  let value: Value = serde_json::from_str(&data)
44
- .with_context(|| format!("cant convert {:#?} to serde json value", data))
45
- .map_err(|e| format!("{:#}", e))?;
44
+ .with_context(|| format!("cant convert {data:#?} to serde json value"))
45
+ .map_err(|e| format!("{e:#}"))?;
46
46
  Ok(value)
47
47
  }
48
48
 
@@ -0,0 +1,3 @@
1
+ mod validation_result;
2
+
3
+ pub use validation_result::*;
@@ -36,7 +36,7 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
36
36
 
37
37
  blockTime = Date.now();
38
38
 
39
- stateRepositoryMock.fetchLatestPlatformBlockTime.returns(blockTime);
39
+ stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTime);
40
40
 
41
41
  validateIdentityUpdateTransitionState = validateIdentityUpdateTransitionStateFactory(
42
42
  stateRepositoryMock,