@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.
- package/dist/index.js +1 -1
- package/dist/lib/dpp.d.ts +9 -0
- package/dist/lib/errors/AbstractConsensusError.d.ts +10 -0
- package/dist/lib/errors/DPPError.d.ts +5 -0
- package/dist/lib/errors/patchConsensusErrors.d.ts +1 -0
- package/dist/lib/{patchIdentifier.d.ts → identifier/patchIdentifier.d.ts} +1 -1
- package/dist/{index.d.ts → lib/index.d.ts} +1 -1
- package/dist/lib/utils/extend.d.ts +1 -0
- package/dist/wasm/wasm_dpp.d.ts +352 -205
- package/lib/dpp.ts +24 -0
- package/lib/errors/AbstractConsensusError.ts +13 -0
- package/lib/errors/DPPError.ts +15 -0
- package/lib/errors/patchConsensusErrors.ts +175 -0
- package/lib/{patchIdentifier.ts → identifier/patchIdentifier.ts} +1 -1
- package/{index.ts → lib/index.ts} +4 -3
- package/lib/test/expect/expectError.js +4 -2
- package/lib/utils/extend.ts +6 -0
- package/package.json +5 -5
- package/src/data_contract/errors/invalid_data_contract.rs +21 -0
- package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +4 -4
- package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +2 -2
- package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +44 -0
- package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +147 -0
- package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +46 -0
- package/src/data_contract/state_transition/mod.rs +2 -0
- package/src/data_contract_factory/data_contract_factory.rs +27 -12
- package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +5 -5
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +4 -4
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +36 -0
- package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +20 -0
- package/src/errors/consensus/basic/document/mod.rs +4 -0
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +2 -2
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +2 -2
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +2 -2
- package/src/errors/consensus/basic/json_schema_error.rs +1 -1
- package/src/errors/consensus_error.rs +15 -8
- package/src/errors/from.rs +1 -1
- package/src/errors/mod.rs +1 -0
- package/src/errors/protocol_error.rs +12 -0
- package/src/{identifier.rs → identifier/mod.rs} +0 -0
- package/src/{identity_facade.rs → identity/identity_facade.rs} +1 -1
- package/src/{identity_public_key → identity/identity_public_key}/key_type.rs +0 -0
- package/src/{identity_public_key → identity/identity_public_key}/mod.rs +0 -3
- package/src/{identity_public_key → identity/identity_public_key}/purpose.rs +0 -0
- package/src/{identity_public_key → identity/identity_public_key}/security_level.rs +0 -0
- package/src/{identity.rs → identity/mod.rs} +6 -7
- package/src/identity/validation/mod.rs +3 -0
- package/src/identity/validation/public_keys_validator.rs +70 -0
- package/src/lib.rs +1 -6
- package/src/utils.rs +2 -2
- package/src/validation/mod.rs +3 -0
- package/src/{validation_result.rs → validation/validation_result.rs} +0 -0
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +1 -1
- package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +79 -114
- package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -11
- package/test/integration/stateTransition/StateTransitionFacade.spec.js +1 -1
- package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +135 -0
- package/test/unit/dataContract/DataContract.spec.js +5 -9
- package/test/unit/dataContract/DataContractFactory.spec.js +13 -6
- package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +11 -3
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +20 -16
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +23 -59
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +27 -23
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +29 -12
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +66 -49
- package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +73 -0
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +1 -1
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +1 -1
- package/test/unit/identity/IdentityPublicKey.spec.js +25 -31
- package/tsconfig.json +1 -1
- package/wasm/wasm_dpp.d.ts +352 -205
- package/wasm/wasm_dpp.js +759 -372
- package/wasm/wasm_dpp_bg.js +1 -1
- package/wasm/wasm_dpp_bg.wasm +0 -0
- package/wasm/wasm_dpp_bg.wasm.d.ts +205 -175
- package/webpack.config.js +1 -1
- package/src/identity_public_key/public_keys_validator.rs +0 -44
- package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +0 -32
- package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +0 -93
- 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::{
|
|
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
|
|
29
|
-
fn
|
|
30
|
-
|
|
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
|
|
52
|
-
fn
|
|
53
|
-
|
|
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
|
-
|
|
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())
|
|
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(
|
|
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=
|
|
4
|
-
pub struct
|
|
3
|
+
#[wasm_bindgen(js_name=DataContractMaxDepthExceedError)]
|
|
4
|
+
pub struct DataContractMaxDepthExceedErrorWasm {
|
|
5
5
|
depth: usize,
|
|
6
6
|
code: u32,
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
impl
|
|
9
|
+
impl DataContractMaxDepthExceedErrorWasm {
|
|
10
10
|
pub fn new(depth: usize, code: u32) -> Self {
|
|
11
|
-
|
|
11
|
+
DataContractMaxDepthExceedErrorWasm { depth, code }
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
#[wasm_bindgen(js_class=DataContractMaxDepthError)]
|
|
16
|
-
impl
|
|
16
|
+
impl DataContractMaxDepthExceedErrorWasm {
|
|
17
17
|
#[wasm_bindgen(js_name=getDepth)]
|
|
18
18
|
pub fn get_expected_version(&self) -> usize {
|
|
19
19
|
self.depth
|
package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs
CHANGED
|
@@ -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
|
|
6
|
+
pub struct DuplicateDocumentTransitionsWithIdsErrorWasm {
|
|
7
7
|
references: Vec<(String, Vec<u8>)>,
|
|
8
8
|
code: u32,
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
impl
|
|
11
|
+
impl DuplicateDocumentTransitionsWithIdsErrorWasm {
|
|
12
12
|
pub fn new(references: Vec<(String, Vec<u8>)>, code: u32) -> Self {
|
|
13
|
-
|
|
13
|
+
DuplicateDocumentTransitionsWithIdsErrorWasm { references, code }
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
#[wasm_bindgen(js_class=DuplicateDocumentTransitionsWithIdsError)]
|
|
18
|
-
impl
|
|
18
|
+
impl DuplicateDocumentTransitionsWithIdsErrorWasm {
|
|
19
19
|
#[wasm_bindgen(js_name=getReferences)]
|
|
20
20
|
pub fn get_references(&self) -> js_sys::Array {
|
|
21
21
|
self.references
|
package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs
ADDED
|
@@ -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) ->
|
|
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) ->
|
|
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
|
|
package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs
CHANGED
|
@@ -25,12 +25,12 @@ impl InvalidIdentityPublicKeySecurityLevelErrorWasm {
|
|
|
25
25
|
self.inner.public_key_id() as u32
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
#[wasm_bindgen(js_name=
|
|
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=
|
|
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("
|
|
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
|
-
|
|
40
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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::
|
|
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::
|
|
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
|
-
|
|
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
|
-
|
|
483
|
+
DuplicateDocumentTransitionsWithIdsErrorWasm::new(references.clone(), code).into()
|
|
477
484
|
}
|
|
478
485
|
BasicError::MissingDataContractIdError => MissingDataContractIdErrorWasm::new(code).into(),
|
|
479
486
|
BasicError::InvalidIdentifierError {
|
package/src/errors/from.rs
CHANGED
package/src/errors/mod.rs
CHANGED
|
@@ -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::
|
|
9
|
+
use crate::validation::ValidationResultWasm;
|
|
10
10
|
use dpp::version::ProtocolVersionValidator;
|
|
11
11
|
use dpp::NonConsensusError;
|
|
12
12
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -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,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
|
-
|
|
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"
|
|
45
|
-
.map_err(|e| format!("{:#}"
|
|
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
|
|
|
File without changes
|
|
@@ -36,7 +36,7 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
|
|
|
36
36
|
|
|
37
37
|
blockTime = Date.now();
|
|
38
38
|
|
|
39
|
-
stateRepositoryMock.fetchLatestPlatformBlockTime.
|
|
39
|
+
stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTime);
|
|
40
40
|
|
|
41
41
|
validateIdentityUpdateTransitionState = validateIdentityUpdateTransitionStateFactory(
|
|
42
42
|
stateRepositoryMock,
|