@dashevo/wasm-dpp 0.24.0-dev.30 → 0.25.0-dev.1

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 (170) hide show
  1. package/Cargo.toml +2 -2
  2. package/dist/wasm/wasm_dpp.d.ts +722 -571
  3. package/dist/wasm/wasm_dpp.js +169 -106
  4. package/dist/wasm/wasm_dpp_bg.js +1 -1
  5. package/lib/wasm/wasm_dpp.d.ts +722 -571
  6. package/package.json +3 -3
  7. package/src/data_contract/data_contract.rs +1 -1
  8. package/src/data_contract/data_contract_facade.rs +2 -2
  9. package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +1 -1
  10. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +2 -12
  11. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +5 -3
  12. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +6 -2
  13. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +2 -14
  14. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +6 -4
  15. package/src/decode_protocol_entity.rs +19 -19
  16. package/src/document/extended_document.rs +4 -1
  17. package/src/document/fetch_and_validate_data_contract.rs +2 -2
  18. package/src/document/mod.rs +5 -3
  19. package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +9 -6
  20. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +1 -1
  21. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +1 -1
  22. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +1 -2
  23. package/src/document/state_transition/document_batch_transition/mod.rs +13 -17
  24. package/src/document/state_transition/document_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs +4 -4
  25. package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_batch_transitions_state.rs +3 -1
  26. package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +1 -1
  27. package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +3 -3
  28. package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +1 -1
  29. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +1 -1
  30. package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +1 -1
  31. package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +3 -3
  32. package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +3 -3
  33. package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +4 -4
  34. package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +1 -1
  35. package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +1 -1
  36. package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +1 -1
  37. package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +1 -1
  38. package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +1 -1
  39. package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +1 -1
  40. package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +1 -1
  41. package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +1 -1
  42. package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +1 -1
  43. package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +2 -2
  44. package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +1 -1
  45. package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +1 -1
  46. package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +1 -1
  47. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -1
  48. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -1
  49. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +2 -2
  50. package/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +1 -1
  51. package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +1 -1
  52. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +2 -2
  53. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +1 -1
  54. package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +1 -1
  55. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +1 -1
  56. package/src/errors/consensus/basic/document/missing_document_type_error.rs +1 -1
  57. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -1
  58. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -1
  59. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +1 -1
  60. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +1 -1
  61. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +1 -1
  62. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +1 -1
  63. package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +1 -1
  64. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +1 -1
  65. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +1 -1
  66. package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +1 -1
  67. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_proof_chain_lock_validation_error.rs +35 -0
  68. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +1 -1
  69. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +1 -1
  70. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +1 -1
  71. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +1 -1
  72. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +1 -1
  73. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +1 -1
  74. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -1
  75. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -1
  76. package/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +1 -1
  77. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +1 -1
  78. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +1 -1
  79. package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +1 -1
  80. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +1 -1
  81. package/src/errors/consensus/basic/identity/mod.rs +2 -0
  82. package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +2 -2
  83. package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -1
  84. package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +7 -3
  85. package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +1 -1
  86. package/src/errors/consensus/basic/json_schema_compilation_error.rs +1 -1
  87. package/src/errors/consensus/basic/json_schema_error.rs +1 -3
  88. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -1
  89. package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +2 -2
  90. package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +1 -1
  91. package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +1 -1
  92. package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +1 -1
  93. package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +1 -1
  94. package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +1 -1
  95. package/src/errors/consensus/consensus_error.rs +24 -4
  96. package/src/errors/consensus/deserialize.rs +1 -1
  97. package/src/errors/consensus/fee/balance_is_not_enough_error.rs +1 -1
  98. package/src/errors/consensus/signature/basic_bls_error.rs +38 -0
  99. package/src/errors/consensus/signature/basic_ecdsa_error.rs +38 -0
  100. package/src/errors/consensus/signature/mod.rs +6 -0
  101. package/src/errors/consensus/signature/signature_should_not_be_present_error.rs +38 -0
  102. package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +2 -2
  103. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +58 -1
  104. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +66 -1
  105. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +50 -1
  106. package/src/errors/consensus/state/document/document_already_present_error.rs +1 -1
  107. package/src/errors/consensus/state/document/document_not_found_error.rs +1 -1
  108. package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +1 -1
  109. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +2 -2
  110. package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +1 -1
  111. package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +1 -1
  112. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +1 -1
  113. package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +1 -1
  114. package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +1 -1
  115. package/src/errors/consensus/state/identity/identity_already_exists_error.rs +1 -1
  116. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +1 -1
  117. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +1 -1
  118. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +1 -1
  119. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +1 -1
  120. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +1 -1
  121. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +1 -1
  122. package/src/errors/consensus/state/identity/missing_identity_public_key_ids_error.rs +26 -0
  123. package/src/errors/consensus/state/identity/mod.rs +2 -0
  124. package/src/errors/consensus/value_error.rs +1 -1
  125. package/src/errors/from.rs +0 -1
  126. package/src/generate_temporary_ecdsa_private_key.rs +2 -6
  127. package/src/identity/factory_utils.rs +4 -4
  128. package/src/identity/identity_public_key/key_type.rs +2 -0
  129. package/src/identity/identity_public_key/purpose.rs +7 -0
  130. package/src/identity/mod.rs +1 -1
  131. package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +6 -2
  132. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +8 -18
  133. package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +3 -1
  134. package/src/identity/state_transition/identity_create_transition/to_object.rs +2 -2
  135. package/src/identity/state_transition/identity_public_key_transitions.rs +11 -11
  136. package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +6 -2
  137. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +1 -12
  138. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +3 -1
  139. package/src/identity/state_transition/identity_update_transition/apply_identity_update_transition.rs +3 -1
  140. package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +2 -2
  141. package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +5 -18
  142. package/src/identity/state_transition/identity_update_transition/identity_update_transition_state_validator.rs +3 -2
  143. package/src/identity/state_transition/identity_update_transition/to_object.rs +2 -2
  144. package/src/identity/state_transition/validate_public_key_signatures.rs +2 -2
  145. package/src/state_repository.rs +3 -2
  146. package/src/state_transition/fee/calculate_state_transition_fee.rs +8 -5
  147. package/src/state_transition/state_transition_facade.rs +16 -15
  148. package/src/state_transition/validation/state_transition_fee_validator.rs +3 -1
  149. package/src/state_transition/validation/validate_state_transition_identity_signature.rs +3 -1
  150. package/src/state_transition/validation/validate_state_transition_key_signature.rs +7 -1
  151. package/src/utils.rs +2 -4
  152. package/src/validation/validation_result.rs +12 -7
  153. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +0 -17
  154. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +10 -3
  155. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +4 -7
  156. package/test/integration/stateTransition/StateTransitionFacade.spec.js +20 -7
  157. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +0 -7
  158. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +4 -3
  159. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +1 -3
  160. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +3 -2
  161. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +5 -6
  162. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +20 -18
  163. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +1 -2
  164. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +7 -3
  165. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +1 -2
  166. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +5 -1
  167. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +3 -3
  168. package/test/unit/stateTransition/validation/validateStateTransitionBasicFactory.spec.js +10 -4
  169. package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +3 -1
  170. package/test/unit/stateTransition/validation/validateStateTransitionStateFactory.spec.js +7 -3
@@ -11,8 +11,7 @@ use crate::identifier::IdentifierWrapper;
11
11
  use crate::{
12
12
  buffer::Buffer, errors::RustConversionError,
13
13
  identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitnessWasm,
14
- identity::IdentityPublicKeyWasm, state_transition::StateTransitionExecutionContextWasm,
15
- with_js_error,
14
+ identity::IdentityPublicKeyWasm, with_js_error,
16
15
  };
17
16
 
18
17
  use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
@@ -20,10 +19,8 @@ use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
20
19
  use crate::errors::from_dpp_err;
21
20
  use crate::utils::{generic_of_js_val, WithJsError};
22
21
 
23
- use dpp::consensus::ConsensusError::SignatureError as ConsensusSignatureErrorVariant;
24
-
25
22
  use dpp::consensus::ConsensusError;
26
- use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitness;
23
+ use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyInCreationWithWitness;
27
24
  use dpp::identity::{KeyID, KeyType, TimestampMillis};
28
25
  use dpp::platform_value::string_encoding::Encoding;
29
26
  use dpp::platform_value::{string_encoding, BinaryData, Value};
@@ -47,7 +44,7 @@ struct IdentityUpdateTransitionParams {
47
44
  protocol_version: u32,
48
45
  identity_id: Vec<u8>,
49
46
  revision: Revision,
50
- add_public_keys: Option<Vec<IdentityPublicKeyWithWitness>>,
47
+ add_public_keys: Option<Vec<IdentityPublicKeyInCreationWithWitness>>,
51
48
  disable_public_keys: Option<Vec<KeyID>>,
52
49
  public_keys_disabled_at: Option<TimestampMillis>,
53
50
  }
@@ -106,7 +103,7 @@ impl IdentityUpdateTransitionWasm {
106
103
  )?;
107
104
  Ok(public_key.clone().into())
108
105
  })
109
- .collect::<Result<Vec<IdentityPublicKeyWithWitness>, JsValue>>()?;
106
+ .collect::<Result<Vec<IdentityPublicKeyInCreationWithWitness>, JsValue>>()?;
110
107
  }
111
108
 
112
109
  self.0.set_public_keys_to_add(keys_to_add);
@@ -298,7 +295,7 @@ impl IdentityUpdateTransitionWasm {
298
295
 
299
296
  let buffer = self
300
297
  .0
301
- .to_buffer(opts.skip_signature.unwrap_or(false))
298
+ .to_cbor_buffer(opts.skip_signature.unwrap_or(false))
302
299
  .map_err(from_dpp_err)?;
303
300
 
304
301
  Ok(Buffer::from_bytes(&buffer).into())
@@ -420,16 +417,6 @@ impl IdentityUpdateTransitionWasm {
420
417
  self.0.is_identity_state_transition()
421
418
  }
422
419
 
423
- #[wasm_bindgen(js_name=setExecutionContext)]
424
- pub fn set_execution_context(&mut self, context: &StateTransitionExecutionContextWasm) {
425
- self.0.set_execution_context(context.into())
426
- }
427
-
428
- #[wasm_bindgen(js_name=getExecutionContext)]
429
- pub fn get_execution_context(&mut self) -> StateTransitionExecutionContextWasm {
430
- self.0.get_execution_context().into()
431
- }
432
-
433
420
  #[wasm_bindgen(js_name=signByPrivateKey)]
434
421
  pub fn sign_by_private_key(
435
422
  &mut self,
@@ -2,7 +2,7 @@ use std::sync::Arc;
2
2
 
3
3
  use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper};
4
4
  use crate::validation::ValidationResultWasm;
5
- use crate::{IdentityUpdateTransitionWasm};
5
+ use crate::{IdentityUpdateTransitionWasm, StateTransitionExecutionContextWasm};
6
6
  use wasm_bindgen::prelude::*;
7
7
  use wasm_bindgen::JsValue;
8
8
  use dpp::identity::state_transition::identity_update_transition::identity_update_transition::IdentityUpdateTransition;
@@ -40,12 +40,13 @@ impl IdentityUpdateTransitionStateValidatorWasm {
40
40
  pub async fn validate(
41
41
  &self,
42
42
  state_transition: &IdentityUpdateTransitionWasm,
43
+ execution_context: &StateTransitionExecutionContextWasm,
43
44
  ) -> Result<ValidationResultWasm, JsValue> {
44
45
  let state_transition: IdentityUpdateTransition = state_transition.to_owned().into();
45
46
 
46
47
  let validation_result = self
47
48
  .0
48
- .validate(&state_transition)
49
+ .validate(&state_transition, &execution_context.to_owned().into())
49
50
  .await
50
51
  .map_err(|e| from_dpp_err(e.into()))?;
51
52
 
@@ -2,7 +2,7 @@ use dpp::identity::KeyID;
2
2
  use dpp::state_transition::StateTransitionIdentitySigned;
3
3
  use dpp::{
4
4
  identifier::Identifier,
5
- identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitness,
5
+ identity::state_transition::identity_public_key_transitions::IdentityPublicKeyInCreationWithWitness,
6
6
  identity::state_transition::identity_update_transition::identity_update_transition::IdentityUpdateTransition,
7
7
  state_transition::StateTransitionLike,
8
8
  };
@@ -23,7 +23,7 @@ pub struct ToObject {
23
23
  pub signature: Option<Vec<u8>>,
24
24
  pub signature_public_key_id: Option<KeyID>,
25
25
  pub public_keys_disabled_at: Option<u64>,
26
- pub public_keys_to_add: Option<Vec<IdentityPublicKeyWithWitness>>,
26
+ pub public_keys_to_add: Option<Vec<IdentityPublicKeyInCreationWithWitness>>,
27
27
  pub public_key_ids_to_disable: Option<Vec<KeyID>>,
28
28
  pub identity_id: Identifier,
29
29
  }
@@ -10,7 +10,7 @@ use dpp::identity::state_transition::validate_public_key_signatures::{
10
10
  PublicKeysSignaturesValidator, TPublicKeysSignaturesValidator,
11
11
  };
12
12
 
13
- use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitness;
13
+ use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyInCreationWithWitness;
14
14
 
15
15
  use crate::errors::from_dpp_err;
16
16
  use dpp::platform_value::Value;
@@ -44,7 +44,7 @@ impl PublicKeysSignaturesValidatorWasm {
44
44
  let public_keys = raw_public_keys
45
45
  .into_iter()
46
46
  .map(|raw_key| {
47
- let parsed_key: IdentityPublicKeyWithWitness =
47
+ let parsed_key: IdentityPublicKeyInCreationWithWitness =
48
48
  IdentityPublicKeyWithWitnessWasm::new(raw_key)?.into();
49
49
  parsed_key.to_raw_object(false).with_js_error()
50
50
  })
@@ -12,6 +12,7 @@ use dpp::prelude::{Revision, TimestampMillis};
12
12
  use dpp::{
13
13
  dashcore::InstantLock,
14
14
  data_contract::DataContract,
15
+ platform_value,
15
16
  prelude::{Identifier, Identity},
16
17
  state_repository::{
17
18
  FetchTransactionResponse as FetchTransactionResponseDPP, StateRepositoryLike,
@@ -354,7 +355,7 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
354
355
  &self,
355
356
  contract_id: &Identifier,
356
357
  data_contract_type: &str,
357
- where_query: serde_json::Value,
358
+ where_query: platform_value::Value,
358
359
  execution_context: Option<&'a StateTransitionExecutionContext>,
359
360
  ) -> anyhow::Result<Vec<Self::FetchDocument>> {
360
361
  let js_documents = self
@@ -385,7 +386,7 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
385
386
  &self,
386
387
  contract_id: &Identifier,
387
388
  data_contract_type: &str,
388
- where_query: serde_json::Value,
389
+ where_query: platform_value::Value,
389
390
  execution_context: Option<&'a StateTransitionExecutionContext>,
390
391
  ) -> anyhow::Result<Vec<Self::FetchExtendedDocument>> {
391
392
  let js_documents = self
@@ -6,17 +6,20 @@ use wasm_bindgen::prelude::*;
6
6
 
7
7
  use crate::{
8
8
  conversion::create_state_transition_from_wasm_instance, fee::fee_result::FeeResultWasm,
9
- utils::WithJsError,
9
+ utils::WithJsError, StateTransitionExecutionContextWasm,
10
10
  };
11
11
 
12
12
  #[wasm_bindgen(js_name=calculateStateTransitionFee)]
13
13
  pub fn calculate_state_transition_fee_wasm(
14
14
  state_transition_js: &JsValue,
15
+ execution_context: &StateTransitionExecutionContextWasm,
15
16
  ) -> Result<FeeResultWasm, JsValue> {
16
17
  let state_transition = create_state_transition_from_wasm_instance(state_transition_js)?;
17
18
 
18
- Ok(calculate_state_transition_fee(&state_transition)
19
- .map_err(ProtocolError::from)
20
- .with_js_error()?
21
- .into())
19
+ Ok(
20
+ calculate_state_transition_fee(&state_transition, &execution_context.to_owned().into())
21
+ .map_err(ProtocolError::from)
22
+ .with_js_error()?
23
+ .into(),
24
+ )
22
25
  }
@@ -5,11 +5,10 @@ use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateReposito
5
5
  use crate::state_transition_factory::StateTransitionFactoryWasm;
6
6
  use crate::utils::{ToSerdeJSONExt, WithJsError};
7
7
  use crate::validation::ValidationResultWasm;
8
- use crate::with_js_error;
8
+ use crate::{with_js_error, StateTransitionExecutionContextWasm};
9
9
  use dpp::state_transition::state_transition_execution_context::StateTransitionExecutionContext;
10
10
  use dpp::state_transition::{
11
- StateTransitionConvert, StateTransitionFacade, StateTransitionLike, StateTransitionType,
12
- ValidateOptions,
11
+ StateTransitionConvert, StateTransitionFacade, StateTransitionType, ValidateOptions,
13
12
  };
14
13
  use dpp::version::ProtocolVersionValidator;
15
14
  use serde::Deserialize;
@@ -17,8 +16,7 @@ use serde::Deserialize;
17
16
  use crate::errors::protocol_error::from_protocol_error;
18
17
  use crate::errors::value_error::PlatformValueErrorWasm;
19
18
  use dpp::data_contract::state_transition::data_contract_update_transition::DataContractUpdateTransition;
20
- use dpp::document::DocumentsBatchTransition;
21
- use dpp::ProtocolError;
19
+
22
20
  use std::sync::Arc;
23
21
  use wasm_bindgen::prelude::*;
24
22
  use wasm_bindgen::JsValue;
@@ -65,7 +63,7 @@ impl StateTransitionFacadeWasm {
65
63
  let mut raw_state_transition = raw_state_transition.with_serde_to_platform_value()?;
66
64
  let state_transition_type: StateTransitionType = raw_state_transition
67
65
  .get_integer::<u8>("type")
68
- .map_err(|e| PlatformValueErrorWasm::from(e))?
66
+ .map_err(PlatformValueErrorWasm::from)?
69
67
  .try_into()
70
68
  .map_err(|_| JsValue::from_str("Invalid state transition type"))?;
71
69
 
@@ -73,7 +71,7 @@ impl StateTransitionFacadeWasm {
73
71
  match state_transition_type {
74
72
  StateTransitionType::DataContractUpdate => {
75
73
  DataContractUpdateTransition::clean_value(&mut raw_state_transition)
76
- .map_err(|e| PlatformValueErrorWasm::from(e))?;
74
+ .map_err(PlatformValueErrorWasm::from)?;
77
75
  }
78
76
  _ => {}
79
77
  }
@@ -116,6 +114,7 @@ impl StateTransitionFacadeWasm {
116
114
  pub async fn validate(
117
115
  &self,
118
116
  raw_state_transition: JsValue,
117
+ execution_context: &StateTransitionExecutionContextWasm,
119
118
  options: JsValue,
120
119
  ) -> Result<ValidationResultWasm, JsValue> {
121
120
  let options: ValidateOptionsWasm = if options.is_object() {
@@ -128,7 +127,8 @@ impl StateTransitionFacadeWasm {
128
127
  super::super::conversion::create_state_transition_from_wasm_instance(
129
128
  &raw_state_transition,
130
129
  ) {
131
- let execution_context = state_transition.get_execution_context().to_owned();
130
+ let execution_context: StateTransitionExecutionContext =
131
+ execution_context.to_owned().into();
132
132
  (state_transition, execution_context)
133
133
  } else {
134
134
  let state_transition_json = raw_state_transition.with_serde_to_platform_value()?;
@@ -154,25 +154,23 @@ impl StateTransitionFacadeWasm {
154
154
  pub async fn validate_basic(
155
155
  &self,
156
156
  raw_state_transition: JsValue,
157
+ execution_context: &StateTransitionExecutionContextWasm,
157
158
  ) -> Result<ValidationResultWasm, JsValue> {
158
159
  let state_transition_json;
159
- let execution_context;
160
160
 
161
161
  if let Ok(state_transition) =
162
162
  super::super::conversion::create_state_transition_from_wasm_instance(
163
163
  &raw_state_transition,
164
164
  )
165
165
  {
166
- execution_context = state_transition.get_execution_context().to_owned();
167
166
  state_transition_json = state_transition.to_cleaned_object(false).with_js_error()?;
168
167
  } else {
169
168
  state_transition_json = raw_state_transition.with_serde_to_platform_value()?;
170
- execution_context = StateTransitionExecutionContext::default();
171
169
  }
172
170
 
173
171
  let validation_result = self
174
172
  .0
175
- .validate_basic(&state_transition_json, &execution_context)
173
+ .validate_basic(&state_transition_json, &execution_context.to_owned().into())
176
174
  .await
177
175
  .with_js_error()?;
178
176
 
@@ -183,6 +181,7 @@ impl StateTransitionFacadeWasm {
183
181
  pub async fn validate_signature(
184
182
  &self,
185
183
  raw_state_transition: JsValue,
184
+ execution_context: &StateTransitionExecutionContextWasm,
186
185
  ) -> Result<ValidationResultWasm, JsValue> {
187
186
  let state_transition =
188
187
  super::super::conversion::create_state_transition_from_wasm_instance(
@@ -191,7 +190,7 @@ impl StateTransitionFacadeWasm {
191
190
 
192
191
  let validation_result = self
193
192
  .0
194
- .validate_signature(state_transition)
193
+ .validate_signature(state_transition, &execution_context.to_owned().into())
195
194
  .await
196
195
  .with_js_error()?;
197
196
 
@@ -202,6 +201,7 @@ impl StateTransitionFacadeWasm {
202
201
  pub async fn validate_fee(
203
202
  &self,
204
203
  raw_state_transition: JsValue,
204
+ execution_context: &StateTransitionExecutionContextWasm,
205
205
  ) -> Result<ValidationResultWasm, JsValue> {
206
206
  let state_transition =
207
207
  super::super::conversion::create_state_transition_from_wasm_instance(
@@ -210,7 +210,7 @@ impl StateTransitionFacadeWasm {
210
210
 
211
211
  let validation_result = self
212
212
  .0
213
- .validate_fee(&state_transition)
213
+ .validate_fee(&state_transition, &execution_context.to_owned().into())
214
214
  .await
215
215
  .with_js_error()?;
216
216
 
@@ -221,6 +221,7 @@ impl StateTransitionFacadeWasm {
221
221
  pub async fn validate_state(
222
222
  &self,
223
223
  raw_state_transition: JsValue,
224
+ execution_context: &StateTransitionExecutionContextWasm,
224
225
  ) -> Result<ValidationResultWasm, JsValue> {
225
226
  let state_transition =
226
227
  super::super::conversion::create_state_transition_from_wasm_instance(
@@ -229,7 +230,7 @@ impl StateTransitionFacadeWasm {
229
230
 
230
231
  let validation_result = self
231
232
  .0
232
- .validate_state(&state_transition)
233
+ .validate_state(&state_transition, &execution_context.to_owned().into())
233
234
  .await
234
235
  .with_js_error()?;
235
236
 
@@ -7,6 +7,7 @@ use wasm_bindgen::JsValue;
7
7
  use crate::state_transition::conversion::create_state_transition_from_wasm_instance;
8
8
  use crate::utils::WithJsError;
9
9
  use crate::validation::ValidationResultWasm;
10
+ use crate::StateTransitionExecutionContextWasm;
10
11
 
11
12
  #[wasm_bindgen(js_name=StateTransitionFeeValidator)]
12
13
  pub struct StateTransitionFeeValidatorWasm(
@@ -26,11 +27,12 @@ impl StateTransitionFeeValidatorWasm {
26
27
  pub async fn validate(
27
28
  &self,
28
29
  state_transition: &JsValue,
30
+ execution_context: &StateTransitionExecutionContextWasm,
29
31
  ) -> Result<ValidationResultWasm, JsValue> {
30
32
  let st = create_state_transition_from_wasm_instance(state_transition)?;
31
33
  Ok(self
32
34
  .0
33
- .validate(&st)
35
+ .validate(&st, &execution_context.to_owned().into())
34
36
  .await
35
37
  .map(|v| v.map(|_| JsValue::undefined()))
36
38
  .with_js_error()?
@@ -7,9 +7,10 @@ use crate::errors::consensus::consensus_error::from_consensus_error;
7
7
  use dpp::consensus::basic::state_transition::InvalidStateTransitionTypeError;
8
8
  use dpp::consensus::basic::BasicError;
9
9
  use dpp::consensus::ConsensusError;
10
+ use dpp::state_transition::state_transition_execution_context::StateTransitionExecutionContext;
10
11
  use dpp::state_transition::validation::validate_state_transition_identity_signature::validate_state_transition_identity_signature;
11
12
  use dpp::state_transition::{StateTransition, StateTransitionIdentitySigned};
12
- use dpp::ProtocolError;
13
+
13
14
  use std::sync::Arc;
14
15
  use wasm_bindgen::prelude::wasm_bindgen;
15
16
  use wasm_bindgen::JsValue;
@@ -28,6 +29,7 @@ impl StValidator {
28
29
  self.state_repository.clone(),
29
30
  state_transition,
30
31
  &self.bls,
32
+ &StateTransitionExecutionContext::default(), // TODO(v0.24-backport): is it fine using default context here?
31
33
  )
32
34
  .await
33
35
  .with_js_error()?;
@@ -1,6 +1,7 @@
1
1
  use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper};
2
2
  use crate::utils::WithJsError;
3
3
  use crate::validation::ValidationResultWasm;
4
+ use crate::StateTransitionExecutionContextWasm;
4
5
  use dpp::identity::state_transition::asset_lock_proof::{
5
6
  AssetLockPublicKeyHashFetcher, AssetLockTransactionOutputFetcher,
6
7
  };
@@ -48,13 +49,18 @@ impl StateTransitionKeySignatureValidatorWasm {
48
49
  pub async fn validate(
49
50
  &self,
50
51
  state_transition: JsValue,
52
+ execution_context: &StateTransitionExecutionContextWasm,
51
53
  ) -> Result<ValidationResultWasm, JsValue> {
52
54
  let state_transition =
53
55
  super::super::conversion::create_state_transition_from_wasm_instance(
54
56
  &state_transition,
55
57
  )?;
56
58
 
57
- let validation_result = self.0.validate(&state_transition).await.with_js_error()?;
59
+ let validation_result = self
60
+ .0
61
+ .validate(&state_transition, &execution_context.to_owned().into())
62
+ .await
63
+ .with_js_error()?;
58
64
  Ok(validation_result.map(|_| JsValue::undefined()).into())
59
65
  }
60
66
  }
package/src/utils.rs CHANGED
@@ -240,7 +240,7 @@ pub fn get_class_name(value: &JsValue) -> String {
240
240
  }
241
241
 
242
242
  pub fn try_to_u64(value: JsValue) -> Result<u64, anyhow::Error> {
243
- let result = if value.is_bigint() {
243
+ if value.is_bigint() {
244
244
  js_sys::BigInt::new(&value)
245
245
  .map_err(|e| anyhow!("unable to create bigInt: {}", e.to_string()))?
246
246
  .try_into()
@@ -250,9 +250,7 @@ pub fn try_to_u64(value: JsValue) -> Result<u64, anyhow::Error> {
250
250
  convert_number_to_u64(number)
251
251
  } else {
252
252
  bail!("supported types are Number or BigInt")
253
- };
254
-
255
- result
253
+ }
256
254
  }
257
255
 
258
256
  pub fn convert_number_to_u64(js_number: js_sys::Number) -> Result<u64, anyhow::Error> {
@@ -3,19 +3,19 @@ use crate::{
3
3
  errors::consensus::consensus_error::from_consensus_error_ref,
4
4
  utils::{consensus_errors_from_buffers, WithJsError},
5
5
  };
6
- use dpp::{consensus::ConsensusError, validation::ValidationResult};
6
+ use dpp::{consensus::ConsensusError, validation::ConsensusValidationResult};
7
7
  use js_sys::{JsString, Uint8Array};
8
8
  use wasm_bindgen::prelude::*;
9
9
 
10
10
  #[wasm_bindgen(js_name=ValidationResult)]
11
11
  #[derive(Debug)]
12
- pub struct ValidationResultWasm(ValidationResult<JsValue>);
12
+ pub struct ValidationResultWasm(ConsensusValidationResult<JsValue>);
13
13
 
14
- impl<T> From<ValidationResult<T>> for ValidationResultWasm
14
+ impl<T> From<ConsensusValidationResult<T>> for ValidationResultWasm
15
15
  where
16
16
  T: Into<JsValue> + Clone,
17
17
  {
18
- fn from(validation_result: ValidationResult<T>) -> Self {
18
+ fn from(validation_result: ConsensusValidationResult<T>) -> Self {
19
19
  ValidationResultWasm(validation_result.map(Into::into))
20
20
  }
21
21
  }
@@ -27,10 +27,12 @@ impl ValidationResultWasm {
27
27
  if let Some(errors) = errors_option {
28
28
  let consensus_errors: Vec<ConsensusError> = consensus_errors_from_buffers(errors)?;
29
29
 
30
- return Ok(Self(ValidationResult::new_with_errors(consensus_errors)));
30
+ return Ok(Self(ConsensusValidationResult::new_with_errors(
31
+ consensus_errors,
32
+ )));
31
33
  }
32
34
 
33
- Ok(Self(ValidationResult::new_with_errors(vec![])))
35
+ Ok(Self(ConsensusValidationResult::new_with_errors(vec![])))
34
36
  }
35
37
 
36
38
  /// This is just a test method - doesn't need to be in the resulted binding. Please
@@ -57,7 +59,10 @@ impl ValidationResultWasm {
57
59
 
58
60
  #[wasm_bindgen(js_name=getData)]
59
61
  pub fn get_data(&self) -> JsValue {
60
- self.0.data().unwrap_or(&JsValue::undefined()).to_owned()
62
+ self.0
63
+ .data_as_borrowed()
64
+ .unwrap_or(&JsValue::undefined())
65
+ .to_owned()
61
66
  }
62
67
 
63
68
  #[wasm_bindgen(js_name=getFirstError)]
@@ -17,7 +17,6 @@ describe('validateDataContractFactory', () => {
17
17
  let UniqueIndicesLimitReachedError;
18
18
  let SystemPropertyIndexAlreadyPresentError;
19
19
  let InvalidIndexPropertyTypeError;
20
- let InvalidCompoundIndexError;
21
20
  let InvalidIndexedPropertyConstraintError;
22
21
  let InvalidJsonSchemaRefError;
23
22
 
@@ -32,7 +31,6 @@ describe('validateDataContractFactory', () => {
32
31
  UniqueIndicesLimitReachedError,
33
32
  SystemPropertyIndexAlreadyPresentError,
34
33
  InvalidIndexPropertyTypeError,
35
- InvalidCompoundIndexError,
36
34
  InvalidIndexedPropertyConstraintError,
37
35
  InvalidJsonSchemaRefError,
38
36
  } = await loadWasmDpp());
@@ -1929,21 +1927,6 @@ describe('validateDataContractFactory', () => {
1929
1927
  expect(error.getDocumentType()).to.deep.equal('indexedDocument');
1930
1928
  expect(error.getIndexName()).to.equal('index1');
1931
1929
  });
1932
-
1933
- it('should return invalid result if unique compound index contains both required and optional properties', async () => {
1934
- const rawDataContract = dataContract.toObject();
1935
- rawDataContract.documents.optionalUniqueIndexedDocument.required.splice(-1);
1936
-
1937
- const result = await validateDataContract(rawDataContract);
1938
-
1939
- expectValidationError(result, InvalidCompoundIndexError);
1940
-
1941
- const [error] = result.getErrors();
1942
-
1943
- expect(error.getCode()).to.equal(1010);
1944
- expect(error.getIndexName()).to.equal('index2');
1945
- expect(error.getDocumentType()).to.equal('optionalUniqueIndexedDocument');
1946
- });
1947
1930
  });
1948
1931
  });
1949
1932
 
@@ -78,7 +78,11 @@ describe('DocumentBatchTransition', () => {
78
78
 
79
79
  // Nice document has medium security level
80
80
  expect(stateTransitionFixture.getKeySecurityLevelRequirement())
81
- .to.be.equal(IdentityPublicKey.SECURITY_LEVELS.MEDIUM);
81
+ .to.deep.equal([
82
+ IdentityPublicKey.SECURITY_LEVELS.CRITICAL,
83
+ IdentityPublicKey.SECURITY_LEVELS.HIGH,
84
+ IdentityPublicKey.SECURITY_LEVELS.MEDIUM,
85
+ ]);
82
86
 
83
87
  stateTransitionFixture = documentFactory.createStateTransition({
84
88
  create: [mediumSecurityDocumentFixture, masterSecurityDocumentFixture],
@@ -88,7 +92,7 @@ describe('DocumentBatchTransition', () => {
88
92
 
89
93
  // Should be the highest security level out of MEDIUM and MASTER
90
94
  expect(stateTransitionFixture.getKeySecurityLevelRequirement())
91
- .to.be.equal(IdentityPublicKey.SECURITY_LEVELS.MASTER);
95
+ .to.deep.equal([IdentityPublicKey.SECURITY_LEVELS.MASTER]);
92
96
  });
93
97
 
94
98
  it('should return default security level if no document has a security level defined - Rust', () => {
@@ -100,7 +104,10 @@ describe('DocumentBatchTransition', () => {
100
104
 
101
105
  // Should be the default level, which is HIGH
102
106
  expect(stateTransitionFixture.getKeySecurityLevelRequirement())
103
- .to.be.equal(IdentityPublicKey.SECURITY_LEVELS.HIGH);
107
+ .to.deep.equal([
108
+ IdentityPublicKey.SECURITY_LEVELS.CRITICAL,
109
+ IdentityPublicKey.SECURITY_LEVELS.HIGH,
110
+ ]);
104
111
  });
105
112
  });
106
113
  });
@@ -63,8 +63,9 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
63
63
  stateRepositoryMock.fetchLatestPlatformBlockTime = this.sinonSandbox.stub();
64
64
  stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTime);
65
65
 
66
+ executionContext = new StateTransitionExecutionContext();
66
67
  const validator = new IdentityUpdateTransitionStateValidator(stateRepositoryMock, blsAdapter);
67
- validateIdentityUpdateTransitionState = (st) => validator.validate(st);
68
+ validateIdentityUpdateTransitionState = (st) => validator.validate(st, executionContext);
68
69
 
69
70
  stateTransition = await getIdentityUpdateTransitionFixture();
70
71
 
@@ -72,10 +73,6 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
72
73
  stateTransition.setPublicKeyIdsToDisable(undefined);
73
74
  stateTransition.setPublicKeysDisabledAt(undefined);
74
75
 
75
- executionContext = new StateTransitionExecutionContext();
76
-
77
- stateTransition.setExecutionContext(executionContext);
78
-
79
76
  const privateKey = '9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2';
80
77
 
81
78
  await stateTransition.signByPrivateKey(
@@ -275,10 +272,10 @@ describe('validateIdentityUpdateTransitionStateFactory', () => {
275
272
  // Make code that executes after dry run check to fail
276
273
  stateRepositoryMock.fetchLatestPlatformBlockTime.resolves({});
277
274
 
278
- stateTransition.getExecutionContext().enableDryRun();
275
+ executionContext.enableDryRun();
279
276
  const result = await validateIdentityUpdateTransitionState(stateTransition);
280
277
 
281
- stateTransition.getExecutionContext().disableDryRun();
278
+ executionContext.disableDryRun();
282
279
 
283
280
  expect(result.isValid()).to.be.true();
284
281