@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
@@ -0,0 +1,37 @@
1
+ use crate::errors::from_dpp_err;
2
+ use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper};
3
+ use crate::validation::ValidationResultWasm;
4
+ use crate::IdentityTopUpTransitionWasm;
5
+ use dpp::identity::state_transition::identity_topup_transition::validation::state::validate_identity_topup_transition_state;
6
+ use wasm_bindgen::prelude::*;
7
+ use wasm_bindgen::JsValue;
8
+
9
+ #[wasm_bindgen(js_name=IdentityTopUpTransitionStateValidator)]
10
+ pub struct IdentityTopUpTransitionStateValidator {
11
+ state_repository: ExternalStateRepositoryLikeWrapper,
12
+ }
13
+
14
+ #[wasm_bindgen(js_class=IdentityTopUpTransitionStateValidator)]
15
+ impl IdentityTopUpTransitionStateValidator {
16
+ #[wasm_bindgen(constructor)]
17
+ pub fn new(state_repository: ExternalStateRepositoryLike) -> Self {
18
+ Self {
19
+ state_repository: ExternalStateRepositoryLikeWrapper::new(state_repository),
20
+ }
21
+ }
22
+
23
+ #[wasm_bindgen]
24
+ pub async fn validate(
25
+ &self,
26
+ state_transition: &IdentityTopUpTransitionWasm,
27
+ ) -> Result<ValidationResultWasm, JsValue> {
28
+ let validation_result = validate_identity_topup_transition_state(
29
+ state_transition.to_owned().into(),
30
+ &self.state_repository,
31
+ )
32
+ .await
33
+ .map_err(|e| from_dpp_err(e.into()))?;
34
+
35
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
36
+ }
37
+ }
@@ -0,0 +1,8 @@
1
+ pub use identity_topup_transition::*;
2
+
3
+ pub mod apply_identity_topup_transition;
4
+ pub mod identity_topup_transition;
5
+ pub mod identity_topup_transition_basic_validator;
6
+ pub mod identity_topup_transition_state_validator;
7
+
8
+ mod to_object;
@@ -0,0 +1,42 @@
1
+ use dpp::identity::state_transition::asset_lock_proof::AssetLockProof;
2
+ use dpp::{
3
+ identifier::Identifier,
4
+ identity::state_transition::identity_topup_transition::IdentityTopUpTransition,
5
+ state_transition::StateTransitionLike,
6
+ };
7
+ use serde::Deserialize;
8
+ use std::default::Default;
9
+
10
+ #[derive(Deserialize, Default)]
11
+ #[serde(rename_all = "camelCase")]
12
+ pub struct ToObjectOptions {
13
+ pub skip_signature: Option<bool>,
14
+ }
15
+
16
+ #[derive(Default)]
17
+ pub struct ToObject {
18
+ pub transition_type: u8,
19
+ pub protocol_version: u32,
20
+ pub identity_id: Identifier,
21
+ pub asset_lock_proof: AssetLockProof,
22
+ pub signature: Option<Vec<u8>>,
23
+ }
24
+
25
+ pub fn to_object_struct(
26
+ transition: &IdentityTopUpTransition,
27
+ options: ToObjectOptions,
28
+ ) -> ToObject {
29
+ let mut to_object = ToObject {
30
+ transition_type: transition.get_type() as u8,
31
+ protocol_version: transition.get_protocol_version(),
32
+ identity_id: transition.get_identity_id().clone(),
33
+ asset_lock_proof: transition.get_asset_lock_proof().to_owned(),
34
+ signature: None,
35
+ };
36
+
37
+ if !options.skip_signature.unwrap_or(false) {
38
+ to_object.signature = Some(transition.get_signature().to_owned());
39
+ }
40
+
41
+ to_object
42
+ }
@@ -0,0 +1,9 @@
1
+ pub use asset_lock_proof::*;
2
+ pub use identity_create_transition::*;
3
+ pub use identity_topup_transition::*;
4
+ pub use validate_public_key_signatures::*;
5
+
6
+ mod asset_lock_proof;
7
+ mod identity_create_transition;
8
+ mod identity_topup_transition;
9
+ mod validate_public_key_signatures;
@@ -0,0 +1,59 @@
1
+ use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
2
+ use crate::errors::from_dpp_err;
3
+ use crate::utils::ToSerdeJSONExt;
4
+
5
+ use crate::{
6
+ identity::identity_public_key::IdentityPublicKeyWasm, validation::ValidationResultWasm,
7
+ };
8
+
9
+ use dpp::identity::state_transition::validate_public_key_signatures::{
10
+ PublicKeysSignaturesValidator, TPublicKeysSignaturesValidator,
11
+ };
12
+ use dpp::prelude::IdentityPublicKey;
13
+
14
+ use serde_json::Value as JsonValue;
15
+ use wasm_bindgen::prelude::wasm_bindgen;
16
+ use wasm_bindgen::JsValue;
17
+
18
+ #[wasm_bindgen(js_name = PublicKeysSignaturesValidator)]
19
+ pub struct PublicKeysSignaturesValidatorWasm(PublicKeysSignaturesValidator<BlsAdapter>);
20
+
21
+ impl From<PublicKeysSignaturesValidator<BlsAdapter>> for PublicKeysSignaturesValidatorWasm {
22
+ fn from(validator: PublicKeysSignaturesValidator<BlsAdapter>) -> Self {
23
+ Self(validator)
24
+ }
25
+ }
26
+
27
+ #[wasm_bindgen(js_class = PublicKeysSignaturesValidator)]
28
+ impl PublicKeysSignaturesValidatorWasm {
29
+ #[wasm_bindgen(constructor)]
30
+ pub fn new(bls: JsBlsAdapter) -> PublicKeysSignaturesValidatorWasm {
31
+ PublicKeysSignaturesValidator::new(BlsAdapter(bls)).into()
32
+ }
33
+
34
+ #[wasm_bindgen(js_name=validate)]
35
+ pub fn validate_public_key_signatures(
36
+ &self,
37
+ raw_state_transition: JsValue,
38
+ raw_public_keys: Vec<JsValue>,
39
+ ) -> Result<ValidationResultWasm, JsValue> {
40
+ let state_transition_json = raw_state_transition.with_serde_to_json_value()?;
41
+
42
+ let public_keys = raw_public_keys
43
+ .into_iter()
44
+ .map(|raw_key| {
45
+ let parsed_key: IdentityPublicKey = IdentityPublicKeyWasm::new(raw_key)?.into();
46
+ parsed_key
47
+ .to_raw_json_object(false)
48
+ .map_err(|e| from_dpp_err(e.into()))
49
+ })
50
+ .collect::<Result<Vec<JsonValue>, JsValue>>()?;
51
+
52
+ let result = self
53
+ .0
54
+ .validate_public_key_signatures(&state_transition_json, &public_keys)
55
+ .map_err(|e| from_dpp_err(e.into()))?;
56
+
57
+ Ok(result.map(|_| JsValue::undefined()).into())
58
+ }
59
+ }
@@ -0,0 +1,3 @@
1
+ mod public_keys_validator;
2
+
3
+ pub use public_keys_validator::*;
@@ -0,0 +1,76 @@
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
+ let validation_result = self
40
+ .public_key_validator
41
+ .validate_keys(&raw_public_keys)
42
+ .map_err(|e| JsValue::from(e.to_string()))?;
43
+
44
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
45
+ }
46
+
47
+ #[wasm_bindgen(js_name=validatePublicKeyStructure)]
48
+ pub fn validate_public_key_structure(
49
+ &self,
50
+ public_key: JsValue,
51
+ ) -> Result<ValidationResultWasm, JsValue> {
52
+ let pk_serde_json = public_key.with_serde_to_json_value()?;
53
+
54
+ let validation_result = self
55
+ .public_key_validator
56
+ .validate_public_key_structure(&pk_serde_json)
57
+ .map_err(|e| JsValue::from(e.to_string()))?;
58
+
59
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
60
+ }
61
+
62
+ #[wasm_bindgen(js_name=validateKeysInStateTransition)]
63
+ pub fn validate_keys_in_state_transition(
64
+ &self,
65
+ public_keys: js_sys::Array,
66
+ ) -> Result<ValidationResultWasm, JsValue> {
67
+ let raw_public_keys = to_vec_of_serde_values(public_keys.iter())?;
68
+
69
+ let validation_result = self
70
+ .public_key_in_state_transition_validator
71
+ .validate_keys(&raw_public_keys)
72
+ .map_err(|e| JsValue::from(e.to_string()))?;
73
+
74
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
75
+ }
76
+ }
@@ -34,7 +34,7 @@ impl PublicKeysValidatorWasm {
34
34
  &self,
35
35
  public_key: JsValue,
36
36
  ) -> Result<ValidationResultWasm, JsValue> {
37
- let pk_serde_json = public_key.to_serde_json_value()?;
37
+ let pk_serde_json = public_key.with_serde_to_json_value()?;
38
38
 
39
39
  self.0
40
40
  .validate_public_key_structure(&pk_serde_json)
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,14 +13,14 @@ 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;
19
+ mod version;
24
20
 
25
21
  mod utils;
26
22
 
27
23
  mod bls_adapter;
28
24
  mod buffer;
29
- pub mod validation_result;
25
+ mod lodash;
26
+ mod validation;
package/src/lodash.rs ADDED
@@ -0,0 +1,7 @@
1
+ use wasm_bindgen::prelude::*;
2
+
3
+ #[wasm_bindgen(module = "lodash")]
4
+ extern "C" {
5
+ #[wasm_bindgen(js_name = "set")]
6
+ pub fn lodash_set(object: &JsValue, path: &str, value: JsValue);
7
+ }
@@ -1,19 +1,27 @@
1
1
  //! Bindings for state repository -like objects coming from JS.
2
2
 
3
+ use serde::{Deserialize, Serialize};
3
4
  use std::{convert::Infallible, pin::Pin, sync::Mutex};
4
5
 
5
6
  use async_trait::async_trait;
7
+ use dpp::dashcore::consensus;
6
8
  use dpp::{
7
9
  dashcore::InstantLock,
8
10
  data_contract::DataContract,
9
11
  document::Document,
10
12
  prelude::{Identifier, Identity},
11
- state_repository::StateRepositoryLike,
13
+ state_repository::{
14
+ FetchTransactionResponse as FetchTransactionResponseDPP, StateRepositoryLike,
15
+ },
12
16
  state_transition::state_transition_execution_context::StateTransitionExecutionContext,
13
17
  };
14
18
  use wasm_bindgen::prelude::*;
15
19
 
16
- use crate::{identifier::IdentifierWrapper, DataContractWasm, StateTransitionExecutionContextWasm};
20
+ use crate::buffer::Buffer;
21
+ use crate::{
22
+ identifier::IdentifierWrapper, DataContractWasm, IdentityWasm,
23
+ StateTransitionExecutionContextWasm,
24
+ };
17
25
 
18
26
  #[wasm_bindgen]
19
27
  extern "C" {
@@ -33,6 +41,67 @@ extern "C" {
33
41
  execution_context: StateTransitionExecutionContextWasm,
34
42
  ) -> JsValue;
35
43
 
44
+ #[wasm_bindgen(structural, method, js_name=fetchIdentity)]
45
+ pub fn fetch_identity(
46
+ this: &ExternalStateRepositoryLike,
47
+ id: IdentifierWrapper,
48
+ execution_context: StateTransitionExecutionContextWasm,
49
+ ) -> Option<IdentityWasm>;
50
+
51
+ #[wasm_bindgen(structural, method, js_name=fetchLatestPlatformCoreChainLockedHeight)]
52
+ pub fn fetch_latest_platform_core_chain_locked_height(
53
+ this: &ExternalStateRepositoryLike,
54
+ ) -> Option<u32>;
55
+
56
+ #[wasm_bindgen(structural, method, js_name=fetchTransaction)]
57
+ pub fn fetch_transaction(
58
+ this: &ExternalStateRepositoryLike,
59
+ id: JsValue,
60
+ execution_context: StateTransitionExecutionContextWasm,
61
+ ) -> JsValue;
62
+
63
+ #[wasm_bindgen(structural, method, js_name=isAssetLockTransactionOutPointAlreadyUsed)]
64
+ pub fn is_asset_lock_transaction_out_point_already_used(
65
+ this: &ExternalStateRepositoryLike,
66
+ out_point_buffer: Buffer,
67
+ execution_context: StateTransitionExecutionContextWasm,
68
+ ) -> bool;
69
+
70
+ #[wasm_bindgen(structural, method, js_name=verifyInstantLock)]
71
+ pub fn verify_instant_lock(
72
+ this: &ExternalStateRepositoryLike,
73
+ instant_lock: Vec<u8>,
74
+ execution_context: StateTransitionExecutionContextWasm,
75
+ ) -> bool;
76
+
77
+ #[wasm_bindgen(structural, method, js_name=createIdentity)]
78
+ pub fn create_identity(
79
+ this: &ExternalStateRepositoryLike,
80
+ identity: IdentityWasm,
81
+ execution_context: StateTransitionExecutionContextWasm,
82
+ );
83
+
84
+ #[wasm_bindgen(structural, method, js_name=updateIdentity)]
85
+ pub fn update_identity(
86
+ this: &ExternalStateRepositoryLike,
87
+ identity: IdentityWasm,
88
+ execution_context: StateTransitionExecutionContextWasm,
89
+ );
90
+
91
+ #[wasm_bindgen(structural, method, js_name=storeIdentityPublicKeyHashes)]
92
+ pub fn store_identity_public_key_hashes(
93
+ this: &ExternalStateRepositoryLike,
94
+ identity_id: IdentifierWrapper,
95
+ public_key_hashes: Vec<Buffer>,
96
+ execution_context: StateTransitionExecutionContextWasm,
97
+ );
98
+
99
+ #[wasm_bindgen(structural, method, js_name=markAssetLockTransactionOutPointAsUsed)]
100
+ pub fn mark_asset_lock_transaction_out_point_as_used(
101
+ this: &ExternalStateRepositoryLike,
102
+ out_point_buffer: Buffer,
103
+ );
104
+
36
105
  // TODO add missing declarations
37
106
  }
38
107
 
@@ -49,10 +118,40 @@ impl ExternalStateRepositoryLikeWrapper {
49
118
  }
50
119
  }
51
120
 
121
+ #[derive(Clone, Serialize, Deserialize)]
122
+ pub struct FetchTransactionResponse {
123
+ pub height: Option<u32>,
124
+ pub data: Option<Vec<u8>>,
125
+ }
126
+
127
+ impl From<JsValue> for FetchTransactionResponse {
128
+ fn from(v: JsValue) -> Self {
129
+ if v.is_falsy() {
130
+ FetchTransactionResponse {
131
+ height: Some(0),
132
+ data: None,
133
+ }
134
+ } else {
135
+ serde_wasm_bindgen::from_value(v).unwrap()
136
+ }
137
+ }
138
+ }
139
+
140
+ impl From<FetchTransactionResponse> for FetchTransactionResponseDPP {
141
+ fn from(v: FetchTransactionResponse) -> Self {
142
+ FetchTransactionResponseDPP {
143
+ data: v.data,
144
+ height: v.height,
145
+ }
146
+ }
147
+ }
148
+
52
149
  #[async_trait]
53
150
  impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
54
151
  type ConversionError = Infallible;
55
152
  type FetchDataContract = DataContractWasm;
153
+ type FetchIdentity = IdentityWasm;
154
+ type FetchTransaction = FetchTransactionResponse;
56
155
 
57
156
  async fn fetch_data_contract(
58
157
  &self,
@@ -121,35 +220,52 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
121
220
  todo!()
122
221
  }
123
222
 
124
- async fn fetch_transaction<T>(
223
+ async fn fetch_transaction(
125
224
  &self,
126
- _id: &str,
127
- _execution_context: &StateTransitionExecutionContext,
128
- ) -> anyhow::Result<Option<T>>
129
- where
130
- T: for<'de> serde::de::Deserialize<'de> + 'static,
131
- {
132
- todo!()
225
+ id: &str,
226
+ execution_context: &StateTransitionExecutionContext,
227
+ ) -> anyhow::Result<Self::FetchTransaction> {
228
+ let response = self
229
+ .0
230
+ .lock()
231
+ .expect("unexpected concurrency issue!")
232
+ .fetch_transaction(JsValue::from_str(id), execution_context.into());
233
+ Ok(FetchTransactionResponse::from(response))
133
234
  }
134
235
 
135
- async fn fetch_identity<T>(
236
+ async fn fetch_identity(
136
237
  &self,
137
- _id: &Identifier,
138
- _execution_context: &StateTransitionExecutionContext,
139
- ) -> anyhow::Result<Option<T>>
140
- where
141
- T: for<'de> serde::de::Deserialize<'de> + 'static,
142
- {
143
- todo!()
238
+ id: &Identifier,
239
+ execution_context: &StateTransitionExecutionContext,
240
+ ) -> anyhow::Result<Option<Self::FetchIdentity>> {
241
+ Ok(self
242
+ .0
243
+ .lock()
244
+ .expect("unexpected concurrency issue!")
245
+ .fetch_identity(id.clone().into(), execution_context.clone().into())
246
+ .map(Into::into))
144
247
  }
145
248
 
146
249
  async fn store_identity_public_key_hashes(
147
250
  &self,
148
- _identity_id: &Identifier,
149
- _public_key_hashes: Vec<Vec<u8>>,
150
- _execution_context: &StateTransitionExecutionContext,
251
+ identity_id: &Identifier,
252
+ public_key_hashes: Vec<Vec<u8>>,
253
+ execution_context: &StateTransitionExecutionContext,
151
254
  ) -> anyhow::Result<()> {
152
- todo!()
255
+ let hashes = public_key_hashes
256
+ .iter()
257
+ .map(|hash| Buffer::from_bytes(hash))
258
+ .collect();
259
+
260
+ Ok(self
261
+ .0
262
+ .lock()
263
+ .expect("unexpected concurrency issue!")
264
+ .store_identity_public_key_hashes(
265
+ identity_id.clone().into(),
266
+ hashes,
267
+ execution_context.clone().into(),
268
+ ))
153
269
  }
154
270
 
155
271
  async fn fetch_identity_by_public_key_hashes<T>(
@@ -169,27 +285,55 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
169
285
  todo!()
170
286
  }
171
287
 
288
+ async fn fetch_latest_platform_core_chain_locked_height(&self) -> anyhow::Result<Option<u32>> {
289
+ Ok(self
290
+ .0
291
+ .lock()
292
+ .expect("unexpected concurrency issue!")
293
+ .fetch_latest_platform_core_chain_locked_height()
294
+ .map(Into::into))
295
+ }
296
+
172
297
  async fn verify_instant_lock(
173
298
  &self,
174
- _instant_lock: &InstantLock,
175
- _execution_context: &StateTransitionExecutionContext,
299
+ instant_lock: &InstantLock,
300
+ execution_context: &StateTransitionExecutionContext,
176
301
  ) -> anyhow::Result<bool> {
177
- todo!()
302
+ let raw_instant_lock = consensus::serialize(instant_lock);
303
+
304
+ let verified = self
305
+ .0
306
+ .lock()
307
+ .expect("unexpected concurrency issue!")
308
+ .verify_instant_lock(raw_instant_lock, execution_context.clone().into());
309
+
310
+ Ok(verified)
178
311
  }
179
312
 
180
313
  async fn is_asset_lock_transaction_out_point_already_used(
181
314
  &self,
182
- _out_point_buffer: &[u8],
183
- _execution_context: &StateTransitionExecutionContext,
315
+ out_point_buffer: &[u8],
316
+ execution_context: &StateTransitionExecutionContext,
184
317
  ) -> anyhow::Result<bool> {
185
- todo!()
318
+ Ok(self
319
+ .0
320
+ .lock()
321
+ .expect("unexpected concurrency issue!")
322
+ .is_asset_lock_transaction_out_point_already_used(
323
+ Buffer::from_bytes(out_point_buffer),
324
+ execution_context.clone().into(),
325
+ ))
186
326
  }
187
327
 
188
328
  async fn mark_asset_lock_transaction_out_point_as_used(
189
329
  &self,
190
- _out_point_buffer: &[u8],
330
+ out_point_buffer: &[u8],
191
331
  ) -> anyhow::Result<()> {
192
- todo!()
332
+ Ok(self
333
+ .0
334
+ .lock()
335
+ .expect("unexpected concurrency issue!")
336
+ .mark_asset_lock_transaction_out_point_as_used(Buffer::from_bytes(out_point_buffer)))
193
337
  }
194
338
 
195
339
  async fn fetch_sml_store<T>(&self) -> anyhow::Result<T>
@@ -201,18 +345,26 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
201
345
 
202
346
  async fn create_identity(
203
347
  &self,
204
- _identity: &Identity,
205
- _execution_context: &StateTransitionExecutionContext,
348
+ identity: &Identity,
349
+ execution_context: &StateTransitionExecutionContext,
206
350
  ) -> anyhow::Result<()> {
207
- todo!()
351
+ Ok(self
352
+ .0
353
+ .lock()
354
+ .expect("unexpected concurrency issue!")
355
+ .create_identity(identity.clone().into(), execution_context.clone().into()))
208
356
  }
209
357
 
210
358
  async fn update_identity(
211
359
  &self,
212
- _identity: &Identity,
213
- _execution_context: &StateTransitionExecutionContext,
360
+ identity: &Identity,
361
+ execution_context: &StateTransitionExecutionContext,
214
362
  ) -> anyhow::Result<()> {
215
- todo!()
363
+ Ok(self
364
+ .0
365
+ .lock()
366
+ .expect("unexpected concurrency issue!")
367
+ .update_identity(identity.clone().into(), execution_context.clone().into()))
216
368
  }
217
369
 
218
370
  async fn fetch_latest_withdrawal_transaction_index(&self) -> anyhow::Result<u64> {
@@ -22,6 +22,18 @@ impl<'a> From<&'a StateTransitionExecutionContextWasm> for StateTransitionExecut
22
22
  }
23
23
  }
24
24
 
25
+ impl<'a> From<&'a StateTransitionExecutionContextWasm> for &'a StateTransitionExecutionContext {
26
+ fn from(wa: &'a StateTransitionExecutionContextWasm) -> Self {
27
+ &wa.0
28
+ }
29
+ }
30
+
31
+ impl<'a> From<&'a StateTransitionExecutionContext> for StateTransitionExecutionContextWasm {
32
+ fn from(rs: &'a StateTransitionExecutionContext) -> Self {
33
+ Self(rs.clone())
34
+ }
35
+ }
36
+
25
37
  #[wasm_bindgen(js_class=StateTransitionExecutionContext)]
26
38
  impl StateTransitionExecutionContextWasm {
27
39
  #[wasm_bindgen(constructor)]