@dashevo/wasm-dpp 0.25.0-dev.14 → 0.25.0-dev.16

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 (133) hide show
  1. package/Cargo.toml +5 -1
  2. package/dist/wasm/wasm_dpp.d.ts +1319 -1058
  3. package/dist/wasm/wasm_dpp.js +227 -116
  4. package/dist/wasm/wasm_dpp_bg.js +1 -1
  5. package/lib/test/fixtures/getDataContractFixture.js +9 -1
  6. package/lib/test/fixtures/getIdentityCreditTransferTransitionFixture.js +19 -0
  7. package/lib/wasm/wasm_dpp.d.ts +1319 -1058
  8. package/package.json +4 -4
  9. package/scripts/build-wasm.sh +6 -9
  10. package/src/data_contract/data_contract.rs +12 -0
  11. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +18 -1
  12. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +18 -1
  13. package/src/data_contract_factory/data_contract_factory.rs +11 -2
  14. package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +1 -0
  15. package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +1 -0
  16. package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +1 -0
  17. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +1 -0
  18. package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +1 -0
  19. package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +1 -0
  20. package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +1 -0
  21. package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +1 -0
  22. package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +1 -0
  23. package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +1 -0
  24. package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +1 -0
  25. package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +1 -0
  26. package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +1 -0
  27. package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +1 -0
  28. package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +1 -0
  29. package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +1 -0
  30. package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +1 -0
  31. package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +1 -0
  32. package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +1 -0
  33. package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +1 -0
  34. package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +1 -0
  35. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -0
  36. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -0
  37. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +1 -0
  38. package/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +1 -0
  39. package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +1 -0
  40. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +1 -0
  41. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +1 -0
  42. package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +1 -0
  43. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +1 -0
  44. package/src/errors/consensus/basic/document/missing_document_type_error.rs +1 -0
  45. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -0
  46. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -0
  47. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +1 -0
  48. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +1 -0
  49. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +1 -0
  50. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +1 -0
  51. package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +1 -0
  52. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +1 -0
  53. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +1 -0
  54. package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +1 -0
  55. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +1 -0
  56. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +1 -0
  57. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +1 -0
  58. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +1 -0
  59. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +1 -0
  60. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +1 -0
  61. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -0
  62. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -0
  63. package/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +1 -0
  64. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +1 -0
  65. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +1 -0
  66. package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +1 -0
  67. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +1 -0
  68. package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +1 -0
  69. package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -0
  70. package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +1 -0
  71. package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +1 -0
  72. package/src/errors/consensus/basic/json_schema_compilation_error.rs +1 -0
  73. package/src/errors/consensus/basic/json_schema_error.rs +2 -2
  74. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -0
  75. package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +2 -2
  76. package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +1 -0
  77. package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +1 -0
  78. package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +1 -0
  79. package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +1 -0
  80. package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +1 -0
  81. package/src/errors/consensus/consensus_error.rs +10 -1
  82. package/src/errors/consensus/deserialize.rs +1 -0
  83. package/src/errors/consensus/fee/balance_is_not_enough_error.rs +1 -0
  84. package/src/errors/consensus/signature/basic_bls_error.rs +1 -0
  85. package/src/errors/consensus/signature/basic_ecdsa_error.rs +1 -0
  86. package/src/errors/consensus/signature/identity_not_found_error.rs +1 -0
  87. package/src/errors/consensus/signature/signature_should_not_be_present_error.rs +1 -0
  88. package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +1 -0
  89. package/src/errors/consensus/state/data_contract/data_contract_config_update_error.rs +53 -0
  90. package/src/errors/consensus/state/data_contract/data_contract_is_readonly_error.rs +53 -0
  91. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +1 -0
  92. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +1 -0
  93. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +1 -0
  94. package/src/errors/consensus/state/data_contract/mod.rs +4 -0
  95. package/src/errors/consensus/state/document/document_already_present_error.rs +1 -0
  96. package/src/errors/consensus/state/document/document_not_found_error.rs +1 -0
  97. package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +1 -0
  98. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +1 -0
  99. package/src/errors/consensus/state/document/document_timestamps_are_equal_error.rs +2 -1
  100. package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +1 -0
  101. package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +1 -0
  102. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +1 -0
  103. package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +1 -0
  104. package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +1 -0
  105. package/src/errors/consensus/state/identity/identity_already_exists_error.rs +1 -0
  106. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +1 -0
  107. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +1 -0
  108. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +1 -0
  109. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +1 -0
  110. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +1 -0
  111. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +1 -0
  112. package/src/errors/consensus/value_error.rs +1 -0
  113. package/src/identity/identity_facade.rs +20 -2
  114. package/src/identity/identity_factory.rs +20 -2
  115. package/src/identity/state_transition/identity_credit_transfer_transition/apply_identity_credit_transfer_transition.rs +31 -0
  116. package/src/identity/state_transition/identity_credit_transfer_transition/identity_credit_transfer_transition_basic_validator.rs +66 -0
  117. package/src/identity/state_transition/identity_credit_transfer_transition/identity_credit_transfer_transition_state_validator.rs +44 -0
  118. package/src/identity/state_transition/identity_credit_transfer_transition/mod.rs +8 -0
  119. package/src/identity/state_transition/identity_credit_transfer_transition/to_object.rs +52 -0
  120. package/src/identity/state_transition/identity_credit_transfer_transition/transition.rs +311 -0
  121. package/src/identity/state_transition/mod.rs +2 -0
  122. package/src/identity/state_transition/transition_types.rs +4 -0
  123. package/src/state_transition/conversion.rs +11 -1
  124. package/src/state_transition/state_transition_facade.rs +1 -1
  125. package/src/state_transition/state_transition_factory.rs +10 -1
  126. package/src/state_transition/validation/validate_state_transition_identity_signature.rs +5 -0
  127. package/src/utils.rs +2 -1
  128. package/src/validation/validation_result.rs +1 -0
  129. package/test/unit/dataContract/DataContract.spec.js +18 -0
  130. package/test/unit/dataContract/DataContractFactory.spec.js +20 -0
  131. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +10 -0
  132. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +10 -0
  133. package/test/unit/identity/stateTransition/identityCreditTransferTransition/identityCreditTransferTransition.spec.js +139 -0
@@ -7,8 +7,9 @@ use crate::identity::validation::IdentityValidatorWasm;
7
7
 
8
8
  use crate::{
9
9
  create_asset_lock_proof_from_wasm_instance, with_js_error, ChainAssetLockProofWasm,
10
- IdentityCreateTransitionWasm, IdentityTopUpTransitionWasm, IdentityUpdateTransitionWasm,
11
- IdentityWasm, InstantAssetLockProofWasm,
10
+ IdentityCreateTransitionWasm, IdentityCreditTransferTransitionWasm,
11
+ IdentityTopUpTransitionWasm, IdentityUpdateTransitionWasm, IdentityWasm,
12
+ InstantAssetLockProofWasm,
12
13
  };
13
14
  use dpp::dashcore::{consensus, InstantLock, Transaction};
14
15
  use dpp::identity::factory::IdentityFactory;
@@ -177,6 +178,23 @@ impl IdentityFactoryWasm {
177
178
  .with_js_error()
178
179
  }
179
180
 
181
+ #[wasm_bindgen(js_name=createIdentityCreditTransferTransition)]
182
+ pub fn create_identity_credit_transfer_transition(
183
+ &self,
184
+ identity_id: &IdentifierWrapper,
185
+ recipient_id: &IdentifierWrapper,
186
+ amount: u64,
187
+ ) -> Result<IdentityCreditTransferTransitionWasm, JsValue> {
188
+ self.0
189
+ .create_identity_credit_transfer_transition(
190
+ identity_id.to_owned().into(),
191
+ recipient_id.to_owned().into(),
192
+ amount,
193
+ )
194
+ .map(Into::into)
195
+ .with_js_error()
196
+ }
197
+
180
198
  #[wasm_bindgen(js_name=createIdentityUpdateTransition)]
181
199
  pub fn create_identity_update_transition(
182
200
  &self,
@@ -0,0 +1,31 @@
1
+ use dpp::identity::state_transition::identity_credit_transfer_transition::apply_identity_credit_transfer::ApplyIdentityCreditTransferTransition;
2
+ use std::sync::Arc;
3
+ use wasm_bindgen::prelude::*;
4
+
5
+ use crate::identity::state_transition::identity_credit_transfer_transition::transition::IdentityCreditTransferTransitionWasm;
6
+ use crate::{
7
+ state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
8
+ StateTransitionExecutionContextWasm,
9
+ };
10
+
11
+ #[wasm_bindgen(js_name=applyIdentityCreditTransferTransition)]
12
+ pub async fn apply_identity_credit_transfer_transition_wasm(
13
+ state_repository: ExternalStateRepositoryLike,
14
+ state_transition: &IdentityCreditTransferTransitionWasm,
15
+ execution_context: &StateTransitionExecutionContextWasm,
16
+ ) -> Result<(), JsValue> {
17
+ let wrapped_state_repository =
18
+ Arc::new(ExternalStateRepositoryLikeWrapper::new(state_repository));
19
+
20
+ let instance = ApplyIdentityCreditTransferTransition::new(wrapped_state_repository);
21
+
22
+ instance
23
+ .apply(
24
+ &state_transition.to_owned().into(),
25
+ &execution_context.to_owned().into(),
26
+ )
27
+ .await
28
+ .map_err(|e| JsValue::from_str(&e.to_string()))?;
29
+
30
+ Ok(())
31
+ }
@@ -0,0 +1,66 @@
1
+ use dpp::identity::state_transition::identity_credit_transfer_transition::validation::basic::identity_credit_transfer_basic::IdentityCreditTransferTransitionBasicValidator;
2
+
3
+ use dpp::version::{ProtocolVersionValidator, COMPATIBILITY_MAP, LATEST_VERSION};
4
+ use dpp::ProtocolError;
5
+
6
+ use wasm_bindgen::prelude::*;
7
+
8
+ use crate::errors::from_dpp_err;
9
+ use crate::utils::ToSerdeJSONExt;
10
+ use crate::validation::ValidationResultWasm;
11
+
12
+ #[wasm_bindgen(js_name=IdentityCreditTransferTransitionBasicValidator)]
13
+ pub struct IdentityCreditTransferTransitionBasicValidatorWasm(
14
+ IdentityCreditTransferTransitionBasicValidator,
15
+ );
16
+
17
+ impl From<IdentityCreditTransferTransitionBasicValidator>
18
+ for IdentityCreditTransferTransitionBasicValidatorWasm
19
+ {
20
+ fn from(validator: IdentityCreditTransferTransitionBasicValidator) -> Self {
21
+ Self(validator)
22
+ }
23
+ }
24
+
25
+ #[wasm_bindgen(js_class=IdentityCreditTransferTransitionBasicValidator)]
26
+ impl IdentityCreditTransferTransitionBasicValidatorWasm {
27
+ #[wasm_bindgen(constructor)]
28
+ pub fn new() -> Result<IdentityCreditTransferTransitionBasicValidatorWasm, JsValue> {
29
+ let protocol_version_validator = ProtocolVersionValidator::new(
30
+ LATEST_VERSION,
31
+ LATEST_VERSION,
32
+ COMPATIBILITY_MAP.clone(),
33
+ );
34
+
35
+ let validator =
36
+ IdentityCreditTransferTransitionBasicValidator::new(protocol_version_validator)
37
+ .map_err(|e| from_dpp_err(ProtocolError::Generic(e.to_string())))?;
38
+
39
+ Ok(validator.into())
40
+ }
41
+
42
+ #[wasm_bindgen]
43
+ pub async fn validate(
44
+ mut self,
45
+ raw_state_transition: JsValue,
46
+ ) -> Result<ValidationResultWasm, JsValue> {
47
+ let current_protocol_version =
48
+ js_sys::Reflect::get(&raw_state_transition, &"protocolVersion".into())
49
+ .map(|v| v.as_f64().unwrap_or(LATEST_VERSION as f64) as u32)
50
+ .unwrap_or(LATEST_VERSION);
51
+
52
+ self.0
53
+ .protocol_version_validator()
54
+ .set_current_protocol_version(current_protocol_version);
55
+
56
+ let state_transition_object = raw_state_transition.with_serde_to_platform_value()?;
57
+
58
+ let validation_result = self
59
+ .0
60
+ .validate(&state_transition_object)
61
+ .await
62
+ .map_err(|e| from_dpp_err(e.into()))?;
63
+
64
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
65
+ }
66
+ }
@@ -0,0 +1,44 @@
1
+ use crate::errors::from_dpp_err;
2
+ use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper};
3
+ use crate::validation::ValidationResultWasm;
4
+ use crate::{IdentityCreditTransferTransitionWasm, StateTransitionExecutionContextWasm};
5
+ use dpp::identity::state_transition::identity_credit_transfer_transition::validation::state::IdentityCreditTransferTransitionStateValidator;
6
+ use dpp::identity::state_transition::identity_credit_transfer_transition::IdentityCreditTransferTransition;
7
+ use wasm_bindgen::prelude::*;
8
+ use wasm_bindgen::JsValue;
9
+
10
+ #[wasm_bindgen(js_name=IdentityCreditTransferTransitionStateValidator)]
11
+ pub struct IdentityCreditTransferTransitionStateValidatorWasm(
12
+ IdentityCreditTransferTransitionStateValidator<ExternalStateRepositoryLikeWrapper>,
13
+ );
14
+
15
+ #[wasm_bindgen(js_class=IdentityCreditTransferTransitionStateValidator)]
16
+ impl IdentityCreditTransferTransitionStateValidatorWasm {
17
+ #[wasm_bindgen(constructor)]
18
+ pub fn new(
19
+ state_repository: ExternalStateRepositoryLike,
20
+ ) -> Result<IdentityCreditTransferTransitionStateValidatorWasm, JsValue> {
21
+ let state_repository = ExternalStateRepositoryLikeWrapper::new(state_repository);
22
+
23
+ let validator = IdentityCreditTransferTransitionStateValidator::new(state_repository);
24
+
25
+ Ok(Self(validator))
26
+ }
27
+
28
+ #[wasm_bindgen]
29
+ pub async fn validate(
30
+ &self,
31
+ state_transition: &IdentityCreditTransferTransitionWasm,
32
+ execution_context: &StateTransitionExecutionContextWasm,
33
+ ) -> Result<ValidationResultWasm, JsValue> {
34
+ let state_transition: IdentityCreditTransferTransition = state_transition.to_owned().into();
35
+
36
+ let validation_result = self
37
+ .0
38
+ .validate(&state_transition, &execution_context.to_owned().into())
39
+ .await
40
+ .map_err(from_dpp_err)?;
41
+
42
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
43
+ }
44
+ }
@@ -0,0 +1,8 @@
1
+ pub use transition::*;
2
+
3
+ pub mod apply_identity_credit_transfer_transition;
4
+ pub mod identity_credit_transfer_transition_basic_validator;
5
+ pub mod identity_credit_transfer_transition_state_validator;
6
+ pub mod transition;
7
+
8
+ mod to_object;
@@ -0,0 +1,52 @@
1
+ use dpp::identity::KeyID;
2
+ use dpp::state_transition::StateTransitionIdentitySigned;
3
+ use dpp::{
4
+ identifier::Identifier,
5
+ identity::state_transition::identity_credit_transfer_transition::IdentityCreditTransferTransition,
6
+ state_transition::StateTransitionLike,
7
+ };
8
+ use serde::Deserialize;
9
+ use std::default::Default;
10
+
11
+ #[derive(Deserialize, Default)]
12
+ #[serde(rename_all = "camelCase")]
13
+ pub struct ToObjectOptions {
14
+ pub skip_signature: Option<bool>,
15
+ }
16
+
17
+ #[derive(Default)]
18
+ pub struct ToObject {
19
+ pub transition_type: u8,
20
+ pub protocol_version: u32,
21
+ pub identity_id: Identifier,
22
+ pub recipient_id: Identifier,
23
+ pub amount: u64,
24
+ pub signature: Option<Vec<u8>>,
25
+ pub signature_public_key_id: Option<KeyID>,
26
+ }
27
+
28
+ pub fn to_object_struct(
29
+ transition: &IdentityCreditTransferTransition,
30
+ options: ToObjectOptions,
31
+ ) -> ToObject {
32
+ let mut to_object = ToObject {
33
+ transition_type: transition.get_type() as u8,
34
+ protocol_version: transition.get_protocol_version(),
35
+ identity_id: *transition.get_identity_id(),
36
+ recipient_id: *transition.get_recipient_id(),
37
+ amount: transition.get_amount(),
38
+ ..ToObject::default()
39
+ };
40
+
41
+ if !options.skip_signature.unwrap_or(false) {
42
+ let signature = Some(transition.get_signature().to_vec());
43
+ if let Some(signature) = &signature {
44
+ if !signature.is_empty() {
45
+ to_object.signature_public_key_id = transition.get_signature_public_key_id()
46
+ }
47
+ }
48
+ to_object.signature = signature;
49
+ }
50
+
51
+ to_object
52
+ }
@@ -0,0 +1,311 @@
1
+ use crate::utils::{ToSerdeJSONExt, WithJsError};
2
+
3
+ use std::convert::TryInto;
4
+ use std::default::Default;
5
+
6
+ use wasm_bindgen::prelude::*;
7
+
8
+ use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
9
+ use crate::identifier::IdentifierWrapper;
10
+ use crate::{buffer::Buffer, errors::RustConversionError, with_js_error, IdentityPublicKeyWasm};
11
+ use dpp::identifier::Identifier;
12
+ use dpp::identity::state_transition::identity_credit_transfer_transition::IdentityCreditTransferTransition;
13
+ use dpp::identity::KeyType;
14
+ use dpp::platform_value::string_encoding::Encoding;
15
+ use dpp::platform_value::{string_encoding, BinaryData};
16
+ use dpp::serialization_traits::PlatformSerializable;
17
+ use dpp::state_transition::StateTransitionLike;
18
+ use dpp::state_transition::{StateTransition, StateTransitionIdentitySigned};
19
+
20
+ #[wasm_bindgen(js_name=IdentityCreditTransferTransition)]
21
+ #[derive(Clone)]
22
+ pub struct IdentityCreditTransferTransitionWasm(IdentityCreditTransferTransition);
23
+
24
+ impl From<IdentityCreditTransferTransition> for IdentityCreditTransferTransitionWasm {
25
+ fn from(v: IdentityCreditTransferTransition) -> Self {
26
+ IdentityCreditTransferTransitionWasm(v)
27
+ }
28
+ }
29
+
30
+ impl From<IdentityCreditTransferTransitionWasm> for IdentityCreditTransferTransition {
31
+ fn from(v: IdentityCreditTransferTransitionWasm) -> Self {
32
+ v.0
33
+ }
34
+ }
35
+
36
+ #[wasm_bindgen(js_class = IdentityCreditTransferTransition)]
37
+ impl IdentityCreditTransferTransitionWasm {
38
+ #[wasm_bindgen(constructor)]
39
+ pub fn new(raw_parameters: JsValue) -> Result<IdentityCreditTransferTransitionWasm, JsValue> {
40
+ let raw_state_transition = raw_parameters.with_serde_to_platform_value()?;
41
+
42
+ let identity_credit_transfer_transition =
43
+ IdentityCreditTransferTransition::from_raw_object(raw_state_transition)
44
+ .map_err(|e| RustConversionError::Error(e.to_string()).to_js_value())?;
45
+
46
+ Ok(identity_credit_transfer_transition.into())
47
+ }
48
+
49
+ #[wasm_bindgen(js_name=getType)]
50
+ pub fn get_type(&self) -> u8 {
51
+ IdentityCreditTransferTransition::get_type() as u8
52
+ }
53
+
54
+ #[wasm_bindgen(getter, js_name=identityId)]
55
+ pub fn identity_id(&self) -> IdentifierWrapper {
56
+ self.get_identity_id()
57
+ }
58
+
59
+ #[wasm_bindgen(getter, js_name=recipientId)]
60
+ pub fn recipient_id(&self) -> IdentifierWrapper {
61
+ self.get_recipient_id()
62
+ }
63
+
64
+ #[wasm_bindgen(getter, js_name=amount)]
65
+ pub fn amount(&self) -> u64 {
66
+ self.0.get_amount()
67
+ }
68
+
69
+ #[wasm_bindgen(js_name=getIdentityId)]
70
+ pub fn get_identity_id(&self) -> IdentifierWrapper {
71
+ (*self.0.get_identity_id()).into()
72
+ }
73
+
74
+ #[wasm_bindgen(js_name=getRecipientId)]
75
+ pub fn get_recipient_id(&self) -> IdentifierWrapper {
76
+ (*self.0.get_recipient_id()).into()
77
+ }
78
+
79
+ #[wasm_bindgen(js_name=getAmount)]
80
+ pub fn get_amount(&self) -> f64 {
81
+ self.0.get_amount() as f64
82
+ }
83
+
84
+ #[wasm_bindgen(js_name=setAmount)]
85
+ pub fn set_amount(&mut self, amount: f64) {
86
+ self.0.set_amount(amount as u64);
87
+ }
88
+
89
+ #[wasm_bindgen(js_name=toObject)]
90
+ pub fn to_object(&self, options: JsValue) -> Result<JsValue, JsValue> {
91
+ let opts: super::to_object::ToObjectOptions = if options.is_object() {
92
+ with_js_error!(serde_wasm_bindgen::from_value(options))?
93
+ } else {
94
+ Default::default()
95
+ };
96
+
97
+ let object = super::to_object::to_object_struct(&self.0, opts);
98
+ let js_object = js_sys::Object::new();
99
+
100
+ js_sys::Reflect::set(
101
+ &js_object,
102
+ &"type".to_owned().into(),
103
+ &object.transition_type.into(),
104
+ )?;
105
+
106
+ js_sys::Reflect::set(
107
+ &js_object,
108
+ &"protocolVersion".to_owned().into(),
109
+ &object.protocol_version.into(),
110
+ )?;
111
+
112
+ if let Some(signature) = object.signature {
113
+ let signature_value: JsValue = if signature.is_empty() {
114
+ JsValue::undefined()
115
+ } else {
116
+ Buffer::from_bytes(signature.as_slice()).into()
117
+ };
118
+
119
+ js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?;
120
+
121
+ if let Some(signature_public_key_id) = object.signature_public_key_id {
122
+ js_sys::Reflect::set(
123
+ &js_object,
124
+ &"signaturePublicKeyId".to_owned().into(),
125
+ &JsValue::from(signature_public_key_id),
126
+ )?;
127
+ } else {
128
+ js_sys::Reflect::set(
129
+ &js_object,
130
+ &"signaturePublicKeyId".to_owned().into(),
131
+ &JsValue::undefined(),
132
+ )?;
133
+ }
134
+ }
135
+
136
+ js_sys::Reflect::set(
137
+ &js_object,
138
+ &"identityId".to_owned().into(),
139
+ &Buffer::from_bytes(object.identity_id.to_buffer().as_slice()),
140
+ )?;
141
+
142
+ js_sys::Reflect::set(
143
+ &js_object,
144
+ &"recipientId".to_owned().into(),
145
+ &Buffer::from_bytes(object.recipient_id.to_buffer().as_slice()),
146
+ )?;
147
+
148
+ js_sys::Reflect::set(
149
+ &js_object,
150
+ &"amount".to_owned().into(),
151
+ &JsValue::from_f64(object.amount as f64),
152
+ )?;
153
+
154
+ Ok(js_object.into())
155
+ }
156
+
157
+ #[wasm_bindgen(js_name=toBuffer)]
158
+ pub fn to_buffer(&self) -> Result<Buffer, JsValue> {
159
+ let bytes = PlatformSerializable::serialize(&StateTransition::IdentityCreditTransfer(
160
+ self.0.clone(),
161
+ ))
162
+ .with_js_error()?;
163
+ Ok(Buffer::from_bytes(&bytes))
164
+ }
165
+
166
+ #[wasm_bindgen(js_name=toJSON)]
167
+ pub fn to_json(&self) -> Result<JsValue, JsValue> {
168
+ let object = super::to_object::to_object_struct(&self.0, Default::default());
169
+ let js_object = js_sys::Object::new();
170
+
171
+ js_sys::Reflect::set(
172
+ &js_object,
173
+ &"type".to_owned().into(),
174
+ &object.transition_type.into(),
175
+ )?;
176
+
177
+ js_sys::Reflect::set(
178
+ &js_object,
179
+ &"protocolVersion".to_owned().into(),
180
+ &object.protocol_version.into(),
181
+ )?;
182
+
183
+ if let Some(signature) = object.signature {
184
+ let signature_value: JsValue = if signature.is_empty() {
185
+ JsValue::undefined()
186
+ } else {
187
+ string_encoding::encode(signature.as_slice(), Encoding::Base64).into()
188
+ };
189
+
190
+ js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?;
191
+
192
+ if let Some(signature_public_key_id) = object.signature_public_key_id {
193
+ js_sys::Reflect::set(
194
+ &js_object,
195
+ &"signaturePublicKeyId".to_owned().into(),
196
+ &signature_public_key_id.into(),
197
+ )?;
198
+ } else {
199
+ js_sys::Reflect::set(
200
+ &js_object,
201
+ &"signaturePublicKeyId".to_owned().into(),
202
+ &JsValue::undefined(),
203
+ )?;
204
+ }
205
+ }
206
+
207
+ let identity_id = object.identity_id.to_string(Encoding::Base58);
208
+
209
+ js_sys::Reflect::set(
210
+ &js_object,
211
+ &"identityId".to_owned().into(),
212
+ &identity_id.into(),
213
+ )?;
214
+
215
+ let recipient_id = object.recipient_id.to_string(Encoding::Base58);
216
+
217
+ js_sys::Reflect::set(
218
+ &js_object,
219
+ &"recipientId".to_owned().into(),
220
+ &recipient_id.into(),
221
+ )?;
222
+
223
+ js_sys::Reflect::set(
224
+ &js_object,
225
+ &"amount".to_owned().into(),
226
+ &JsValue::from_f64(object.amount as f64),
227
+ )?;
228
+
229
+ Ok(js_object.into())
230
+ }
231
+
232
+ #[wasm_bindgen(js_name=getModifiedDataIds)]
233
+ pub fn get_modified_data_ids(&self) -> Vec<JsValue> {
234
+ let ids = self.0.get_modified_data_ids();
235
+
236
+ ids.into_iter()
237
+ .map(|id| <IdentifierWrapper as std::convert::From<Identifier>>::from(id).into())
238
+ .collect()
239
+ }
240
+
241
+ #[wasm_bindgen(js_name=isDataContractStateTransition)]
242
+ pub fn is_data_contract_state_transition(&self) -> bool {
243
+ self.0.is_data_contract_state_transition()
244
+ }
245
+
246
+ #[wasm_bindgen(js_name=isDocumentStateTransition)]
247
+ pub fn is_document_state_transition(&self) -> bool {
248
+ self.0.is_document_state_transition()
249
+ }
250
+
251
+ #[wasm_bindgen(js_name=isIdentityStateTransition)]
252
+ pub fn is_identity_state_transition(&self) -> bool {
253
+ self.0.is_identity_state_transition()
254
+ }
255
+
256
+ #[wasm_bindgen(js_name=signByPrivateKey)]
257
+ pub fn sign_by_private_key(
258
+ &mut self,
259
+ private_key: Vec<u8>,
260
+ key_type: u8,
261
+ bls: Option<JsBlsAdapter>,
262
+ ) -> Result<(), JsValue> {
263
+ let key_type = key_type
264
+ .try_into()
265
+ .map_err(|e: anyhow::Error| e.to_string())?;
266
+
267
+ if bls.is_none() && key_type == KeyType::BLS12_381 {
268
+ return Err(JsError::new(
269
+ format!("BLS adapter is required for BLS key type '{}'", key_type).as_str(),
270
+ )
271
+ .into());
272
+ }
273
+
274
+ let bls_adapter = if let Some(adapter) = bls {
275
+ BlsAdapter(adapter)
276
+ } else {
277
+ BlsAdapter(JsValue::undefined().into())
278
+ };
279
+
280
+ self.0
281
+ .sign_by_private_key(private_key.as_slice(), key_type, &bls_adapter)
282
+ .with_js_error()
283
+ }
284
+
285
+ #[wasm_bindgen(js_name=getSignature)]
286
+ pub fn get_signature(&self) -> Buffer {
287
+ Buffer::from_bytes(self.0.get_signature().as_slice())
288
+ }
289
+
290
+ #[wasm_bindgen(js_name=setSignature)]
291
+ pub fn set_signature(&mut self, signature: Option<Vec<u8>>) {
292
+ self.0.signature = BinaryData::new(signature.unwrap_or(vec![]))
293
+ }
294
+
295
+ #[wasm_bindgen]
296
+ pub fn sign(
297
+ &mut self,
298
+ identity_public_key: &IdentityPublicKeyWasm,
299
+ private_key: Vec<u8>,
300
+ bls: JsBlsAdapter,
301
+ ) -> Result<(), JsValue> {
302
+ let bls_adapter = BlsAdapter(bls);
303
+ self.0
304
+ .sign(
305
+ &identity_public_key.to_owned().into(),
306
+ &private_key,
307
+ &bls_adapter,
308
+ )
309
+ .with_js_error()
310
+ }
311
+ }
@@ -1,11 +1,13 @@
1
1
  pub use asset_lock_proof::*;
2
2
  pub use identity_create_transition::*;
3
+ pub use identity_credit_transfer_transition::*;
3
4
  pub use identity_topup_transition::*;
4
5
  pub use identity_update_transition::*;
5
6
  pub use validate_public_key_signatures::*;
6
7
 
7
8
  mod asset_lock_proof;
8
9
  mod identity_create_transition;
10
+ mod identity_credit_transfer_transition;
9
11
  pub(crate) mod identity_public_key_transitions;
10
12
  mod identity_topup_transition;
11
13
  mod identity_update_transition;
@@ -11,6 +11,7 @@ pub enum StateTransitionTypeWasm {
11
11
  DataContractUpdate = 4,
12
12
  IdentityUpdate = 5,
13
13
  IdentityCreditWithdrawal = 6,
14
+ IdentityCreditTransfer = 7,
14
15
  }
15
16
 
16
17
  impl From<StateTransitionType> for StateTransitionTypeWasm {
@@ -25,6 +26,9 @@ impl From<StateTransitionType> for StateTransitionTypeWasm {
25
26
  StateTransitionType::IdentityCreditWithdrawal => {
26
27
  StateTransitionTypeWasm::IdentityCreditWithdrawal
27
28
  }
29
+ StateTransitionType::IdentityCreditTransfer => {
30
+ StateTransitionTypeWasm::IdentityCreditTransfer
31
+ }
28
32
  }
29
33
  }
30
34
  }
@@ -2,7 +2,8 @@ use crate::errors::consensus::consensus_error::from_consensus_error;
2
2
  use crate::utils::generic_of_js_val;
3
3
  use crate::{
4
4
  DataContractCreateTransitionWasm, DataContractUpdateTransitionWasm,
5
- DocumentsBatchTransitionWasm, IdentityCreateTransitionWasm, IdentityTopUpTransitionWasm,
5
+ DocumentsBatchTransitionWasm, IdentityCreateTransitionWasm,
6
+ IdentityCreditTransferTransitionWasm, IdentityTopUpTransitionWasm,
6
7
  IdentityUpdateTransitionWasm, PreCalculatedOperationWasm, ReadOperationWasm,
7
8
  SignatureVerificationOperationWasm,
8
9
  };
@@ -127,6 +128,15 @@ pub fn create_state_transition_from_wasm_instance(
127
128
 
128
129
  Ok(StateTransition::IdentityUpdate(st.clone().into()))
129
130
  }
131
+ StateTransitionType::IdentityCreditTransfer => {
132
+ let st: Ref<IdentityCreditTransferTransitionWasm> =
133
+ generic_of_js_val::<IdentityCreditTransferTransitionWasm>(
134
+ js_value,
135
+ "IdentityCreditTransferTransition",
136
+ )?;
137
+
138
+ Ok(StateTransition::IdentityCreditTransfer(st.clone().into()))
139
+ }
130
140
  _ => Err(JsError::new("Unsupported state transition type").into()),
131
141
  }
132
142
  }
@@ -69,7 +69,7 @@ impl StateTransitionFacadeWasm {
69
69
  .map_err(PlatformValueErrorWasm::from)?
70
70
  .try_into()
71
71
  .map_err(|e: TryFromPrimitiveError<StateTransitionType>| {
72
- InvalidStateTransitionTypeErrorWasm::new(e.number as u8)
72
+ InvalidStateTransitionTypeErrorWasm::new(e.number)
73
73
  })?;
74
74
 
75
75
  if state_transition_type == StateTransitionType::DataContractUpdate {
@@ -8,6 +8,7 @@ use dpp::{state_transition::{
8
8
  StateTransitionFactory, StateTransitionFactoryOptions, StateTransition, errors::StateTransitionError,
9
9
  }, version::ProtocolVersionValidator, data_contract::state_transition::{data_contract_create_transition::validation::state::validate_data_contract_create_transition_basic::DataContractCreateTransitionBasicValidator, data_contract_update_transition::validation::basic::DataContractUpdateTransitionBasicValidator}, identity::{state_transition::{identity_create_transition::validation::basic::IdentityCreateTransitionBasicValidator, validate_public_key_signatures::{PublicKeysSignaturesValidator}, asset_lock_proof::{AssetLockProofValidator, ChainAssetLockProofStructureValidator, InstantAssetLockProofStructureValidator, AssetLockTransactionValidator}, identity_topup_transition::validation::basic::IdentityTopUpTransitionBasicValidator, identity_credit_withdrawal_transition::validation::basic::validate_identity_credit_withdrawal_transition_basic::IdentityCreditWithdrawalTransitionBasicValidator, identity_update_transition::validate_identity_update_transition_basic::ValidateIdentityUpdateTransitionBasic}, validation::PublicKeysValidator}, document::validation::basic::validate_documents_batch_transition_basic::DocumentBatchTransitionBasicValidator, ProtocolError};
10
10
  use wasm_bindgen::{prelude::wasm_bindgen, JsValue};
11
+ use dpp::identity::state_transition::identity_credit_transfer_transition::validation::basic::identity_credit_transfer_basic::IdentityCreditTransferTransitionBasicValidator;
11
12
  use dpp::platform_value::Value;
12
13
 
13
14
  use crate::utils::{ToSerdeJSONExt, WithJsError};
@@ -18,7 +19,8 @@ use crate::{
18
19
  state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
19
20
  state_transition::errors::invalid_state_transition_error::InvalidStateTransitionErrorWasm,
20
21
  with_js_error, DataContractCreateTransitionWasm, DataContractUpdateTransitionWasm,
21
- DocumentsBatchTransitionWasm, IdentityCreateTransitionWasm, IdentityTopUpTransitionWasm,
22
+ DocumentsBatchTransitionWasm, IdentityCreateTransitionWasm,
23
+ IdentityCreditTransferTransitionWasm, IdentityTopUpTransitionWasm,
22
24
  IdentityUpdateTransitionWasm,
23
25
  };
24
26
 
@@ -58,6 +60,9 @@ impl StateTransitionFactoryWasm {
58
60
  StateTransition::IdentityTopUp(st) => {
59
61
  Ok(IdentityTopUpTransitionWasm::from(st).into())
60
62
  }
63
+ StateTransition::IdentityCreditTransfer(st) => {
64
+ Ok(IdentityCreditTransferTransitionWasm::from(st).into())
65
+ }
61
66
  StateTransition::DocumentsBatch(st) => {
62
67
  Ok(DocumentsBatchTransitionWasm::from(st).into())
63
68
  }
@@ -150,6 +155,10 @@ impl StateTransitionFactoryWasm {
150
155
  state_repository_wrapper.clone(),
151
156
  protocol_version_validator.clone(),
152
157
  ),
158
+ IdentityCreditTransferTransitionBasicValidator::new(
159
+ ProtocolVersionValidator::default(),
160
+ )
161
+ .map_err(from_dpp_init_error)?,
153
162
  ),
154
163
  );
155
164
 
@@ -100,5 +100,10 @@ pub async fn validate_state_transition_identity_signature_wasm(
100
100
  .validate(&mut state_transition, &execution_context)
101
101
  .await
102
102
  }
103
+ StateTransition::IdentityCreditTransfer(mut state_transition) => {
104
+ validator
105
+ .validate(&mut state_transition, &execution_context)
106
+ .await
107
+ }
103
108
  }
104
109
  }