From fb23393963be28a6a14a959f228aea3eadaa6504 Mon Sep 17 00:00:00 2001 From: Anton Suprunchuk Date: Mon, 10 Apr 2023 20:07:27 +0700 Subject: [PATCH 01/13] feat: all changes from v24-wasm-integration --- packages/rs-dpp/Cargo.toml | 2 +- .../rs-dpp/src/data_contract/data_contract.rs | 32 ++++++- ...data_contract_update_transition_factory.rs | 2 +- .../data_contract_update_transition/mod.rs | 4 +- .../src/data_trigger/dpns_triggers/mod.rs | 22 ++--- .../feature_flags_data_triggers/mod.rs | 4 +- .../data_trigger/get_data_triggers_factory.rs | 2 +- packages/rs-dpp/src/data_trigger/mod.rs | 4 +- .../reward_share_data_triggers/mod.rs | 84 +++++++++-------- .../rs-dpp/src/document/document_factory.rs | 12 +++ ...lidate_documents_batch_transition_state.rs | 2 +- .../identity_update_transition.rs | 27 ++++-- packages/rs-dpp/src/state_repository.rs | 13 +++ ..._transition_fee_from_operations_factory.rs | 78 +++++++++++++++- .../state_transition_factory.rs | 28 ++++++ .../data_contract_validator_spec.rs | 2 +- .../identity_update_transition_spec.rs | 18 ++-- .../payloads/contract/dashpay-contract.json | 4 +- packages/wasm-dpp/Cargo.toml | 2 + .../lib/test/fixtures/getIdentityFixture.js | 40 +++++---- .../test/fixtures/getInstantLockFixture.js | 53 +++++++++++ packages/wasm-dpp/package.json | 1 + packages/wasm-dpp/scripts/build.sh | 2 +- packages/wasm-dpp/src/buffer.rs | 16 +++- .../wasm-dpp/src/dash_platform_protocol.rs | 4 + .../src/data_contract/data_contract.rs | 17 +++- .../src/data_contract/data_contract_facade.rs | 4 +- .../data_contract_create_transition/mod.rs | 5 ++ .../data_contract_update_transition/mod.rs | 25 +++++- .../src/document/extended_document.rs | 45 +++++++--- packages/wasm-dpp/src/document/mod.rs | 30 +++---- .../document_create_transition.rs | 12 ++- .../document_replace_transition.rs | 6 +- .../document_transition/mod.rs | 32 +++---- .../document_batch_transition/mod.rs | 2 +- .../invalid_identity_public_key_type_error.rs | 13 +++ .../invalid_state_transition_type_error.rs | 7 ++ .../missing_state_transition_type_error.rs | 7 ++ packages/wasm-dpp/src/errors/mod.rs | 2 +- .../generate_temporary_ecdsa_private_key.rs | 19 ++++ .../src/identity/identity_public_key/mod.rs | 18 ++-- packages/wasm-dpp/src/identity/mod.rs | 14 ++- .../identity_public_key_transitions.rs | 4 +- packages/wasm-dpp/src/lib.rs | 1 + packages/wasm-dpp/src/metadata.rs | 2 +- packages/wasm-dpp/src/state_repository.rs | 50 ++++++++++- .../errors/invalid_state_transition_error.rs | 18 +++- .../fee/calculate_operation_fees.rs | 11 +-- ...te_state_transition_fee_from_operations.rs | 29 ++++++ .../wasm-dpp/src/state_transition/fee/mod.rs | 1 + .../operations/pre_calculated_operation.rs | 90 +++++++++++++++++-- .../fee/operations/read_operation.rs | 19 ++++ .../signature_verification_operation.rs | 15 ++++ .../src/state_transition/fee/refunds.rs | 17 ++++ packages/wasm-dpp/src/state_transition/mod.rs | 10 +++ .../state_transition_facade.rs | 24 ++++- packages/wasm-dpp/src/utils.rs | 25 +++++- .../src/validation/validation_result.rs | 35 +++++++- .../dataContract/DataContractFacade.spec.js | 43 ++++++++- .../validateDataContractFactory.spec.js | 4 +- ...entityUpdateTransitionStateFactory.spec.js | 2 +- .../generateTemporaryEcdsaPrivateKey.spec.js | 17 ++++ .../unit/dataContract/DataContract.spec.js | 1 + ...ataContractUpdateTransitionFactory.spec.js | 2 +- .../test/unit/document/Document.spec.js | 20 ++--- .../unit/document/DocumentFactory.spec.js | 2 +- ...plyDocumentsBatchTransitionFactory.spec.js | 2 +- ...cumentsBatchTransitionStateFactory.spec.js | 26 +++--- .../unit/identity/IdentityPublicKey.spec.js | 15 ++-- .../StateTransitionExecutionContext.spec.js | 5 +- .../StateTransitionFactory.spec.js | 3 +- ...TransitionIdentitySignatureFactory.spec.js | 4 +- 72 files changed, 961 insertions(+), 252 deletions(-) create mode 100644 packages/wasm-dpp/lib/test/fixtures/getInstantLockFixture.js create mode 100644 packages/wasm-dpp/src/generate_temporary_ecdsa_private_key.rs create mode 100644 packages/wasm-dpp/src/state_transition/fee/calculate_state_transition_fee_from_operations.rs create mode 100644 packages/wasm-dpp/test/integration/util/generateTemporaryEcdsaPrivateKey.spec.js diff --git a/packages/rs-dpp/Cargo.toml b/packages/rs-dpp/Cargo.toml index 88fe09e8cde..afbe78c15fc 100644 --- a/packages/rs-dpp/Cargo.toml +++ b/packages/rs-dpp/Cargo.toml @@ -24,7 +24,7 @@ json-patch = "0.2.6" jsonptr = "0.1.5" jsonschema = { git="https://github.com/fominok/jsonschema-rs", branch="feat-unevaluated-properties", default-features=false, features=["draft202012"] } lazy_static = { version ="1.4"} -log = { version="0.4"} +log = { version = "0.4.6" } num_enum = "0.5.7" bincode = "1.3.3" rand = { version = "0.8.4", features = ["small_rng"] } diff --git a/packages/rs-dpp/src/data_contract/data_contract.rs b/packages/rs-dpp/src/data_contract/data_contract.rs index 508e3283463..67519af342b 100644 --- a/packages/rs-dpp/src/data_contract/data_contract.rs +++ b/packages/rs-dpp/src/data_contract/data_contract.rs @@ -214,10 +214,36 @@ impl DataContract { self.document_types.get(document_type_name).is_some() } - pub fn set_document_schema(&mut self, doc_type: String, schema: JsonSchema) { + pub fn set_document_schema( + &mut self, + doc_type: String, + schema: JsonSchema, + ) -> Result<(), ProtocolError> { let binary_properties = get_binary_properties(&schema); - self.documents.insert(doc_type.clone(), schema); - self.binary_properties.insert(doc_type, binary_properties); + self.documents.insert(doc_type.clone(), schema.clone()); + self.binary_properties + .insert(doc_type.clone(), binary_properties); + + let document_type_value = platform_value::Value::from(schema); + + // Make sure the document_type_value is a map + let Some(document_type_value_map) = document_type_value.as_map() else { + return Err(ProtocolError::DataContractError(DataContractError::InvalidContractStructure( + "document type data is not a map as expected", + ))); + }; + + let document_type = DocumentType::from_platform_value( + &doc_type, + document_type_value_map, + &BTreeMap::new(), + self.config.documents_keep_history_contract_default, + self.config.documents_mutable_contract_default, + )?; + + self.document_types.insert(doc_type, document_type); + + Ok(()) } pub fn get_document_schema(&self, doc_type: &str) -> Result<&JsonSchema, ProtocolError> { diff --git a/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/apply_data_contract_update_transition_factory.rs b/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/apply_data_contract_update_transition_factory.rs index 035ae0fea67..c496903b3e2 100644 --- a/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/apply_data_contract_update_transition_factory.rs +++ b/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/apply_data_contract_update_transition_factory.rs @@ -28,7 +28,7 @@ where state_transition: &DataContractUpdateTransition, ) -> Result<()> { self.state_repository - .store_data_contract( + .update_data_contract( state_transition.data_contract.clone(), Some(state_transition.get_execution_context()), ) diff --git a/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs b/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs index 155f034805f..cc406d9a240 100644 --- a/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs +++ b/packages/rs-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs @@ -57,8 +57,8 @@ pub struct DataContractUpdateTransition { pub protocol_version: u32, #[serde(rename = "type")] pub transition_type: StateTransitionType, - // we want to skip serialization of transitions, as we does it manually in `to_object()` and `to_json()` - #[serde(skip_serializing)] + // we want to skip serialization of transitions, as we do it manually in `to_object()` and `to_json()` + // #[serde(skip_serializing)] pub data_contract: DataContract, pub signature_public_key_id: KeyID, pub signature: BinaryData, diff --git a/packages/rs-dpp/src/data_trigger/dpns_triggers/mod.rs b/packages/rs-dpp/src/data_trigger/dpns_triggers/mod.rs index 9dbb3da04b1..41e2acb18d8 100644 --- a/packages/rs-dpp/src/data_trigger/dpns_triggers/mod.rs +++ b/packages/rs-dpp/src/data_trigger/dpns_triggers/mod.rs @@ -77,13 +77,13 @@ where .map_err(ProtocolError::ValueError)?; let mut result = DataTriggerExecutionResult::default(); - let full_domain_name = normalized_label; + let mut full_domain_name = normalized_label.to_string(); if !is_dry_run { if full_domain_name.len() > MAX_PRINTABLE_DOMAIN_NAME_LENGTH { let err = create_error( context, - dt_create, + dt_create.base.id, format!( "Full domain name length can not be more than {} characters long but got {}", MAX_PRINTABLE_DOMAIN_NAME_LENGTH, @@ -96,7 +96,7 @@ where if normalized_label != label.to_lowercase() { let err = create_error( context, - dt_create, + dt_create.base.id, "Normalized label doesn't match label".to_string(), ); result.add_error(err.into()); @@ -109,7 +109,7 @@ where if id != owner_id { let err = create_error( context, - dt_create, + dt_create.base.id, format!( "ownerId {} doesn't match {} {}", owner_id, PROPERTY_DASH_UNIQUE_IDENTITY_ID, id @@ -126,7 +126,7 @@ where if id != owner_id { let err = create_error( context, - dt_create, + dt_create.base.id, format!( "ownerId {} doesn't match {} {}", owner_id, PROPERTY_DASH_ALIAS_IDENTITY_ID, id @@ -139,7 +139,7 @@ where if normalized_parent_domain_name.is_empty() && context.owner_id != top_level_identity { let err = create_error( context, - dt_create, + dt_create.base.id, "Can't create top level domain for this identity".to_string(), ); result.add_error(err.into()) @@ -147,6 +147,8 @@ where } if !normalized_parent_domain_name.is_empty() { + full_domain_name = format!("{full_domain_name}.{normalized_parent_domain_name}"); + //? What is the `normalized_parent_name`. Are we sure the content is a valid dot-separated data let mut parent_domain_segments = normalized_parent_domain_name.split('.'); let parent_domain_label = parent_domain_segments.next().unwrap().to_string(); @@ -175,7 +177,7 @@ where if documents.is_empty() { let err = create_error( context, - dt_create, + dt_create.base.id, "Parent domain is not present".to_string(), ); result.add_error(err.into()); @@ -186,7 +188,7 @@ where if rule_allow_subdomains { let err = create_error( context, - dt_create, + dt_create.base.id, "Allowing subdomains registration is forbidden for non top level domains" .to_string(), ); @@ -200,7 +202,7 @@ where { let err = create_error( context, - dt_create, + dt_create.base.id, "The subdomain can be created only by the parent domain owner".to_string(), ); result.add_error(err.into()); @@ -238,7 +240,7 @@ where if preorder_documents.is_empty() { let err = create_error( context, - dt_create, + dt_create.base.id, "preorderDocument was not found".to_string(), ); result.add_error(err.into()) diff --git a/packages/rs-dpp/src/data_trigger/feature_flags_data_triggers/mod.rs b/packages/rs-dpp/src/data_trigger/feature_flags_data_triggers/mod.rs index eed45ccf499..65ba4b16cd1 100644 --- a/packages/rs-dpp/src/data_trigger/feature_flags_data_triggers/mod.rs +++ b/packages/rs-dpp/src/data_trigger/feature_flags_data_triggers/mod.rs @@ -55,7 +55,7 @@ where if enable_at_height < block_height { let err = create_error( context, - dt_create, + dt_create.base.id, "This identity can't activate selected feature flag".to_string(), ); result.add_error(err.into()); @@ -65,7 +65,7 @@ where if context.owner_id != top_level_identity { let err = create_error( context, - dt_create, + dt_create.base.id, "This Identity can't activate selected feature flag".to_string(), ); result.add_error(err.into()); diff --git a/packages/rs-dpp/src/data_trigger/get_data_triggers_factory.rs b/packages/rs-dpp/src/data_trigger/get_data_triggers_factory.rs index 87837735cbe..b40bb6f965e 100644 --- a/packages/rs-dpp/src/data_trigger/get_data_triggers_factory.rs +++ b/packages/rs-dpp/src/data_trigger/get_data_triggers_factory.rs @@ -135,7 +135,7 @@ pub fn data_triggers() -> Result, ProtocolError> { }, DataTrigger { data_contract_id: master_node_reward_shares_contract_id, - document_type: feature_flags_contract::types::UPDATE_CONSENSUS_PARAMS.to_string(), + document_type: "rewardShare".to_string(), transition_action: Action::Create, data_trigger_kind: DataTriggerKind::DataTriggerRewardShare, top_level_identity: None, diff --git a/packages/rs-dpp/src/data_trigger/mod.rs b/packages/rs-dpp/src/data_trigger/mod.rs index e7573394ccf..c1abf50f336 100644 --- a/packages/rs-dpp/src/data_trigger/mod.rs +++ b/packages/rs-dpp/src/data_trigger/mod.rs @@ -147,11 +147,11 @@ where fn create_error( context: &DataTriggerExecutionContext, - dt_create: &DocumentCreateTransition, + transition_id: Identifier, msg: String, ) -> DataTriggerError where SR: StateRepositoryLike, { - DataTriggerConditionError::new(context.data_contract.id, dt_create.base.id, msg).into() + DataTriggerConditionError::new(context.data_contract.id, transition_id, msg).into() } diff --git a/packages/rs-dpp/src/data_trigger/reward_share_data_triggers/mod.rs b/packages/rs-dpp/src/data_trigger/reward_share_data_triggers/mod.rs index edf7c094df4..64404534f9c 100644 --- a/packages/rs-dpp/src/data_trigger/reward_share_data_triggers/mod.rs +++ b/packages/rs-dpp/src/data_trigger/reward_share_data_triggers/mod.rs @@ -32,17 +32,24 @@ where let is_dry_run = context.state_transition_execution_context.is_dry_run(); let owner_id = context.owner_id.to_string(Encoding::Base58); - let document_create_transition = match document_transition { - DocumentTransition::Create(document_create_transition) => document_create_transition, + let (transition_data, transition_base) = match document_transition { + DocumentTransition::Create(document_create_transition) => ( + document_create_transition.data.as_ref(), + &document_create_transition.base, + ), + DocumentTransition::Replace(document_replace_transition) => ( + document_replace_transition.data.as_ref(), + &document_replace_transition.base, + ), _ => bail!( - "the Document Transition {} isn't 'CREATE'", + "the Document Transition {} isn't 'CREATE or REPLACE'", get_from_transition!(document_transition, id) ), }; - let properties = document_create_transition.data.as_ref().ok_or_else(|| { + let properties = transition_data.ok_or_else(|| { anyhow!( "data isn't defined in Data Transition '{}'", - document_create_transition.base.id + transition_base.id ) })?; @@ -50,20 +57,25 @@ where let percentage = properties.get_integer(PROPERTY_PERCENTAGE)?; if !is_dry_run { - // Do not allow creating document if ownerId is not in SML - let sml_store: SMLStore = context.state_repository.fetch_sml_store().await?; - - let valid_master_nodes_list = sml_store.get_current_sml()?.get_valid_master_nodes(); - - let owner_id_in_sml = valid_master_nodes_list.iter().any(|entry| { - hex::decode(&entry.pro_reg_tx_hash).expect("invalid hex value") - == context.owner_id.to_buffer() - }); - - if !owner_id_in_sml { + let is_valid_master_node = context + .state_repository + .is_in_the_valid_master_nodes_list(context.owner_id.to_buffer()) + .await?; + + // // Do not allow creating document if ownerId is not in SML + // let sml_store: SMLStore = context.state_repository.fetch_sml_store().await?; + // + // let valid_master_nodes_list = sml_store.get_current_sml()?.get_valid_master_nodes(); + // + // let owner_id_in_sml = valid_master_nodes_list.iter().any(|entry| { + // hex::decode(&entry.pro_reg_tx_hash).expect("invalid hex value") + // == context.owner_id.to_buffer() + // }); + + if !is_valid_master_node { let err = create_error( context, - document_create_transition, + transition_base.id, "Only masternode identities can share rewards".to_string(), ); result.add_error(err.into()); @@ -83,19 +95,20 @@ where if !is_dry_run && maybe_identity.is_none() { let err = create_error( context, - document_create_transition, + transition_base.id, format!("Identity '{}' doesn't exist", pay_to_identifier), ); - result.add_error(err.into()) + result.add_error(err.into()); + return Ok(result); } let documents_data = context .state_repository .fetch_documents( &context.data_contract.id, - &document_create_transition.base.document_type_name, + &transition_base.document_type_name, json!({ - "where" : [ [ "$owner_id", "==", owner_id ]] + "where" : [ [ "$ownerId", "==", owner_id ]] }), Some(context.state_transition_execution_context), ) @@ -112,7 +125,7 @@ where if documents.len() >= MAX_DOCUMENTS { let err = create_error( context, - document_create_transition, + transition_base.id, format!( "Reward shares cannot contain more than {} identities", MAX_DOCUMENTS @@ -130,7 +143,7 @@ where if total_percent > MAX_PERCENTAGE { let err = create_error( context, - document_create_transition, + transition_base.id, format!("Percentage can not be more than {}", MAX_PERCENTAGE), ); result.add_error(err.into()); @@ -246,6 +259,7 @@ mod test { sml_store, data_contract, top_level_identifier, + identity, .. } = setup_test(); @@ -257,11 +271,11 @@ mod test { let mut state_repository_mock = MockStateRepositoryLike::new(); state_repository_mock - .expect_fetch_sml_store() - .returning(move || Ok(sml_store.clone())); + .expect_is_in_the_valid_master_nodes_list() + .returning(move |_| Ok(true)); state_repository_mock .expect_fetch_identity() - .returning(|_, _| Ok(None)); + .returning(move |_, _| Ok(Some(identity.clone()))); state_repository_mock .expect_fetch_documents() .returning(move |_, _, _, _| Ok(documents.clone())); @@ -281,7 +295,7 @@ mod test { create_masternode_reward_shares_data_trigger(&document_transition, &context, None) .await; - let percentage_error = get_data_trigger_error(&result, 1); + let percentage_error = get_data_trigger_error(&result, 0); assert_eq!( "Percentage can not be more than 10000", percentage_error.to_string() @@ -300,8 +314,8 @@ mod test { let mut state_repository_mock = MockStateRepositoryLike::new(); state_repository_mock - .expect_fetch_sml_store() - .returning(move || Ok(sml_store.clone())); + .expect_is_in_the_valid_master_nodes_list() + .returning(move |_| Ok(true)); state_repository_mock .expect_fetch_identity() .returning(move |_, _| Ok(None)); @@ -345,8 +359,8 @@ mod test { let mut state_repository_mock = MockStateRepositoryLike::new(); state_repository_mock - .expect_fetch_sml_store() - .returning(move || Ok(sml_store.clone())); + .expect_is_in_the_valid_master_nodes_list() + .returning(move |_| Ok(false)); state_repository_mock .expect_fetch_identity() .returning(move |_, _| Ok(None)); @@ -385,8 +399,8 @@ mod test { let mut state_repository_mock = MockStateRepositoryLike::new(); state_repository_mock - .expect_fetch_sml_store() - .returning(move || Ok(sml_store.clone())); + .expect_is_in_the_valid_master_nodes_list() + .returning(move |_| Ok(true)); state_repository_mock .expect_fetch_identity() .returning(move |_, _| Ok(Some(identity.clone()))); @@ -421,8 +435,8 @@ mod test { let mut state_repository_mock = MockStateRepositoryLike::new(); state_repository_mock - .expect_fetch_sml_store() - .returning(move || Ok(sml_store.clone())); + .expect_is_in_the_valid_master_nodes_list() + .returning(move |_| Ok(true)); state_repository_mock .expect_fetch_identity() .returning(move |_, _| Ok(Some(identity.clone()))); diff --git a/packages/rs-dpp/src/document/document_factory.rs b/packages/rs-dpp/src/document/document_factory.rs index f86a3fbea4a..475b17012bc 100644 --- a/packages/rs-dpp/src/document/document_factory.rs +++ b/packages/rs-dpp/src/document/document_factory.rs @@ -402,6 +402,18 @@ where let new_revision = document_revision + 1; map.insert(PROPERTY_REVISION.to_string(), Value::U64(new_revision)); + // If document have an originally set `updatedAt` + // we should update it then + let contains_updated_at = document + .document_type()? + .required_fields + .contains(PROPERTY_UPDATED_AT); + + if contains_updated_at { + let now = Utc::now().timestamp_millis() as TimestampMillis; + map.insert(PROPERTY_UPDATED_AT.to_string(), Value::U64(now)); + } + raw_transitions.push(map.into()); } Ok(raw_transitions) diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/state/validate_documents_batch_transition_state.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/state/validate_documents_batch_transition_state.rs index 5335202ce31..69e963936b9 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/state/validate_documents_batch_transition_state.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/state/validate_documents_batch_transition_state.rs @@ -147,7 +147,7 @@ pub async fn validate_document_transitions( // Data Contract must exist let data_contract = state_repository - .fetch_data_contract(data_contract_id, None) + .fetch_data_contract(data_contract_id, Some(&tmp_execution_context)) .await? .map(TryInto::try_into) .transpose() diff --git a/packages/rs-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs b/packages/rs-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs index 64f3d1fc08c..757a46c79c1 100644 --- a/packages/rs-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +++ b/packages/rs-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs @@ -58,7 +58,7 @@ pub struct IdentityUpdateTransition { /// Public Keys to add to the Identity /// we want to skip serialization of transitions, as we does it manually in `to_object()` and `to_json()` - #[serde(default)] + #[serde(skip, default)] pub add_public_keys: Vec, /// Identity Public Keys ID's to disable for the Identity @@ -275,10 +275,12 @@ impl StateTransitionConvert for IdentityUpdateTransition { add_public_keys.push(key.to_raw_object(skip_signature)?); } - value.insert( - property_names::ADD_PUBLIC_KEYS.to_owned(), - Value::Array(add_public_keys), - )?; + if !add_public_keys.is_empty() { + value.insert_at_end( + property_names::ADD_PUBLIC_KEYS.to_owned(), + Value::Array(add_public_keys), + )?; + } Ok(value) } @@ -302,13 +304,20 @@ impl StateTransitionConvert for IdentityUpdateTransition { add_public_keys.push(key.to_raw_cleaned_object(skip_signature)?); } - value.insert( - property_names::ADD_PUBLIC_KEYS.to_owned(), - Value::Array(add_public_keys), - )?; + if !add_public_keys.is_empty() { + value.insert_at_end( + property_names::ADD_PUBLIC_KEYS.to_owned(), + Value::Array(add_public_keys), + )?; + } Ok(value) } + + // Override to_canonical_cleaned_object to manage add_public_keys individually + fn to_canonical_cleaned_object(&self, skip_signature: bool) -> Result { + self.to_cleaned_object(skip_signature) + } } impl StateTransitionLike for IdentityUpdateTransition { diff --git a/packages/rs-dpp/src/state_repository.rs b/packages/rs-dpp/src/state_repository.rs index 7472399d3ca..5dedd11599a 100644 --- a/packages/rs-dpp/src/state_repository.rs +++ b/packages/rs-dpp/src/state_repository.rs @@ -54,6 +54,7 @@ pub trait StateRepositoryLike: Sync { execution_context: Option<&'a StateTransitionExecutionContext>, ) -> AnyResult>; + // TODO(wasm-dpp): rename to `create_data_contract` /// Store Data Contract async fn store_data_contract<'a>( &self, @@ -61,6 +62,12 @@ pub trait StateRepositoryLike: Sync { execution_context: Option<&'a StateTransitionExecutionContext>, ) -> AnyResult<()>; + async fn update_data_contract<'a>( + &self, + data_contract: DataContract, + execution_context: Option<&'a StateTransitionExecutionContext>, + ) -> AnyResult<()>; + /// Fetch Documents by Data Contract Id and type /// By default, the method should return data as bytes (`Vec`), but the deserialization to [`Document`] should be also possible async fn fetch_documents<'a>( @@ -225,6 +232,12 @@ pub trait StateRepositoryLike: Sync { where T: for<'de> serde::de::Deserialize<'de> + 'static; + /// Check if AssetLock Transaction outPoint exists in spent list + async fn is_in_the_valid_master_nodes_list( + &self, + out_point_buffer: [u8; 32], + ) -> AnyResult; + // Get latest (in a queue) withdrawal transaction index async fn fetch_latest_withdrawal_transaction_index(&self) -> AnyResult; diff --git a/packages/rs-dpp/src/state_transition/fee/calculate_state_transition_fee_from_operations_factory.rs b/packages/rs-dpp/src/state_transition/fee/calculate_state_transition_fee_from_operations_factory.rs index 89eee9ed9b1..68602c5858f 100644 --- a/packages/rs-dpp/src/state_transition/fee/calculate_state_transition_fee_from_operations_factory.rs +++ b/packages/rs-dpp/src/state_transition/fee/calculate_state_transition_fee_from_operations_factory.rs @@ -40,8 +40,19 @@ fn calculate_state_transition_fee_from_operations_with_custom_calculator( .fold(0, |sum, (_, credits)| sum + credits); } - let required_amount = (storage_fee - total_refunds) + DEFAULT_USER_TIP; - let desired_amount = (storage_fee + processing_fee - total_refunds) + DEFAULT_USER_TIP; + let required_amount = if storage_fee > total_refunds { + (storage_fee - total_refunds) + DEFAULT_USER_TIP + } else { + 0 + }; + + let fee_sum = storage_fee + processing_fee; + + let desired_amount = if fee_sum > total_refunds { + (fee_sum - total_refunds) + DEFAULT_USER_TIP + } else { + 0 + }; Ok(FeeResult { storage_fee, @@ -55,8 +66,15 @@ fn calculate_state_transition_fee_from_operations_with_custom_calculator( #[cfg(test)] mod test { + use dashcore::blockdata::script::Instruction::Op; + use platform_value::Identifier; use std::collections::HashMap; + use crate::identity::KeyType::ECDSA_SECP256K1; + use crate::state_transition::fee::calculate_operation_fees::calculate_operation_fees; + use crate::state_transition::fee::operations::{ + PreCalculatedOperation, SignatureVerificationOperation, + }; use crate::{ state_transition::fee::{ operations::Operation, Credits, DummyFeesResult, FeeResult, Refunds, @@ -109,4 +127,60 @@ mod test { }; assert_eq!(expected, result); } + + // TODO(wasm-dpp): remove this test if we don't need id + #[test] + fn failing_test_with_negative_credits() { + // Set of operations that produced by Document Remove Transition + let operations = vec![ + Operation::PreCalculated(PreCalculatedOperation { + storage_cost: 0, + processing_cost: 551320, + fee_refunds: vec![], + }), + Operation::SignatureVerification(SignatureVerificationOperation { + signature_type: ECDSA_SECP256K1, + }), + Operation::PreCalculated(PreCalculatedOperation { + storage_cost: 0, + processing_cost: 551320, + fee_refunds: vec![], + }), + Operation::PreCalculated(PreCalculatedOperation { + storage_cost: 0, + processing_cost: 191260, + fee_refunds: vec![], + }), + Operation::PreCalculated(PreCalculatedOperation { + storage_cost: 0, + processing_cost: 16870910, + fee_refunds: vec![Refunds { + identifier: Identifier::new([ + 130, 188, 56, 7, 78, 143, 58, 212, 133, 162, 145, 56, 186, 219, 191, 75, + 64, 112, 236, 226, 135, 75, 132, 170, 135, 243, 180, 110, 103, 161, 153, + 252, + ]), + credits_per_epoch: [("0".to_string(), 114301030)].iter().cloned().collect(), + }], + }), + ]; + + let identifier = Identifier::new([ + 130, 188, 56, 7, 78, 143, 58, 212, 133, 162, 145, 56, 186, 219, 191, 75, 64, 112, 236, + 226, 135, 75, 132, 170, 135, 243, 180, 110, 103, 161, 153, 252, + ]); + + // Panics because of negative credits + let result = calculate_state_transition_fee_from_operations_with_custom_calculator( + &operations, + &identifier, + calculate_operation_fees, + ); + + assert!(matches!(result, Ok(FeeResult { + desired_amount, + required_amount, + .. + }) if desired_amount == 0 && required_amount == 0)); + } } diff --git a/packages/rs-dpp/src/state_transition/state_transition_factory.rs b/packages/rs-dpp/src/state_transition/state_transition_factory.rs index 2c859f1c5a4..f57f120034d 100644 --- a/packages/rs-dpp/src/state_transition/state_transition_factory.rs +++ b/packages/rs-dpp/src/state_transition/state_transition_factory.rs @@ -133,6 +133,34 @@ where } }; + let maybe_transition_type = raw_state_transition.get_optional_integer::("type")?; + + // When converting to buffer and back, for the update identity transition + // the type information about identifiers is going to be lost. In order + // to fix it, we need to call clean_value on it. + if let Some(transition_type_int) = maybe_transition_type { + let state_transition_type = StateTransitionType::try_from(transition_type_int) + .map_err(|_| StateTransitionError::InvalidStateTransitionError { + errors: vec![ConsensusError::from(InvalidStateTransitionTypeError::new( + transition_type_int, + ))], + raw_state_transition: raw_state_transition.clone(), + })?; + + match state_transition_type { + StateTransitionType::DataContractUpdate => { + DataContractUpdateTransition::clean_value(&mut raw_state_transition)?; + } + _ => {} + } + } else { + return Err(StateTransitionError::InvalidStateTransitionError { + errors: vec![ConsensusError::from(MissingStateTransitionTypeError::new())], + raw_state_transition, + } + .into()); + } + self.create_from_object(raw_state_transition, options).await } } diff --git a/packages/rs-dpp/src/tests/data_contract/validation/data_contract_validator_spec.rs b/packages/rs-dpp/src/tests/data_contract/validation/data_contract_validator_spec.rs index 10f070b45b5..829b2572cd4 100644 --- a/packages/rs-dpp/src/tests/data_contract/validation/data_contract_validator_spec.rs +++ b/packages/rs-dpp/src/tests/data_contract/validation/data_contract_validator_spec.rs @@ -1320,7 +1320,7 @@ mod documents { "properties": { "something": { "type": "string", - "format": "url", + "format": "uri", "maxLength": 60000, }, }, diff --git a/packages/rs-dpp/src/tests/identity/state_transition/identity_update_transition/identity_update_transition_spec.rs b/packages/rs-dpp/src/tests/identity/state_transition/identity_update_transition/identity_update_transition_spec.rs index 88388c15884..aab679bd883 100644 --- a/packages/rs-dpp/src/tests/identity/state_transition/identity_update_transition/identity_update_transition_spec.rs +++ b/packages/rs-dpp/src/tests/identity/state_transition/identity_update_transition/identity_update_transition_spec.rs @@ -141,6 +141,8 @@ fn to_object() { "signaturePublicKeyId": 0u32, "identityId" : transition.identity_id, "revision": 0 as Revision, + "disablePublicKeys" : [0u32], + "publicKeysDisabledAt" : 1234567u64, "addPublicKeys" : [ { @@ -152,9 +154,7 @@ fn to_object() { "readOnly" : false, "signature" : BinaryData::new(vec![0u8;65]) } - ], - "disablePublicKeys" : [0u32], - "publicKeysDisabledAt" : 1234567u64, + ] }); assert_eq!(expected_raw_state_transition, result); @@ -172,6 +172,8 @@ fn to_object_with_signature_skipped() { "type" : 5u8, "identityId" : transition.identity_id, "revision": 0 as Revision, + "disablePublicKeys" : [0u32], + "publicKeysDisabledAt" : 1234567u64, "addPublicKeys" : [ { @@ -182,9 +184,7 @@ fn to_object_with_signature_skipped() { "data" :BinaryData::new(base64::decode("AkVuTKyF3YgKLAQlLEtaUL2HTditwGILfWUVqjzYnIgH").unwrap()), "readOnly" : false, } - ], - "disablePublicKeys" : [0u32], - "publicKeysDisabledAt" : 1234567u64, + ] }); assert_eq!(expected_raw_state_transition, result); @@ -204,6 +204,8 @@ fn to_json() { "signaturePublicKeyId": 0u32, "identityId" : transition.identity_id, "revision": 0 as Revision, + "disablePublicKeys" : [0u32], + "publicKeysDisabledAt" : 1234567u64, "addPublicKeys" : [ { @@ -215,9 +217,7 @@ fn to_json() { "readOnly" : false, "signature" : BinaryData::new(vec![0;65]), } - ], - "disablePublicKeys" : [0u32], - "publicKeysDisabledAt" : 1234567u64, + ] }); assert_eq!(expected_raw_state_transition, result); diff --git a/packages/rs-dpp/src/tests/payloads/contract/dashpay-contract.json b/packages/rs-dpp/src/tests/payloads/contract/dashpay-contract.json index 73006b86f0d..ab23fc63ffb 100644 --- a/packages/rs-dpp/src/tests/payloads/contract/dashpay-contract.json +++ b/packages/rs-dpp/src/tests/payloads/contract/dashpay-contract.json @@ -28,7 +28,7 @@ "properties": { "avatarUrl": { "type": "string", - "format": "url", + "format": "uri", "maxLength": 2048 }, "publicMessage": { @@ -192,4 +192,4 @@ "additionalProperties": false } } -} \ No newline at end of file +} diff --git a/packages/wasm-dpp/Cargo.toml b/packages/wasm-dpp/Cargo.toml index c58f8352690..65cf0c094a3 100644 --- a/packages/wasm-dpp/Cargo.toml +++ b/packages/wasm-dpp/Cargo.toml @@ -18,6 +18,8 @@ serde-wasm-bindgen = { git="https://github.com/QuantumExplorer/serde-wasm-bindge dpp = { path = "../rs-dpp", default-features = false } itertools = { version="0.10.5"} console_error_panic_hook = { version="0.1.7"} +log = { version = "0.4.6" } +wasm-logger = { version = "0.2.0" } wasm-bindgen-futures = "0.4.33" async-trait = "0.1.59" diff --git a/packages/wasm-dpp/lib/test/fixtures/getIdentityFixture.js b/packages/wasm-dpp/lib/test/fixtures/getIdentityFixture.js index b1029f6f74d..5af5cbad60c 100644 --- a/packages/wasm-dpp/lib/test/fixtures/getIdentityFixture.js +++ b/packages/wasm-dpp/lib/test/fixtures/getIdentityFixture.js @@ -7,7 +7,7 @@ let staticId = null; /** * @return {Identity} */ -module.exports = async function getIdentityFixture(id = staticId) { +module.exports = async function getIdentityFixture(id = staticId, publicKeys = undefined) { ({ Identity, IdentityPublicKey } = await loadWasmDpp()); if (!staticId) { @@ -19,30 +19,32 @@ module.exports = async function getIdentityFixture(id = staticId) { id = staticId; } + const preCreatedPublicKeys = [ + { + id: 0, + type: IdentityPublicKey.TYPES.ECDSA_SECP256K1, + data: Buffer.from('AuryIuMtRrl/VviQuyLD1l4nmxi9ogPzC9LT7tdpo0di', 'base64'), + purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION, + securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER, + readOnly: false, + }, + { + id: 1, + type: IdentityPublicKey.TYPES.ECDSA_SECP256K1, + data: Buffer.from('A8AK95PYMVX5VQKzOhcVQRCUbc9pyg3RiL7jttEMDU+L', 'base64'), + purpose: IdentityPublicKey.PURPOSES.ENCRYPTION, + securityLevel: IdentityPublicKey.SECURITY_LEVELS.MEDIUM, + readOnly: false, + }, + ]; + const rawIdentity = { // TODO: obtain latest version from some wasm binding? protocolVersion: 1, id, // TODO: should be probably id.toBuffer(), but it causes panic in IdentityWasm balance: 10, revision: 0, - publicKeys: [ - { - id: 0, - type: IdentityPublicKey.TYPES.ECDSA_SECP256K1, - data: Buffer.from('AuryIuMtRrl/VviQuyLD1l4nmxi9ogPzC9LT7tdpo0di', 'base64'), - purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION, - securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER, - readOnly: false, - }, - { - id: 1, - type: IdentityPublicKey.TYPES.ECDSA_SECP256K1, - data: Buffer.from('A8AK95PYMVX5VQKzOhcVQRCUbc9pyg3RiL7jttEMDU+L', 'base64'), - purpose: IdentityPublicKey.PURPOSES.ENCRYPTION, - securityLevel: IdentityPublicKey.SECURITY_LEVELS.MEDIUM, - readOnly: false, - }, - ], + publicKeys: publicKeys === undefined ? preCreatedPublicKeys : publicKeys, }; return new Identity(rawIdentity); diff --git a/packages/wasm-dpp/lib/test/fixtures/getInstantLockFixture.js b/packages/wasm-dpp/lib/test/fixtures/getInstantLockFixture.js new file mode 100644 index 00000000000..ec26db769bc --- /dev/null +++ b/packages/wasm-dpp/lib/test/fixtures/getInstantLockFixture.js @@ -0,0 +1,53 @@ +const { + Transaction, + InstantLock, + PrivateKey, + Script, + Opcode, +} = require('@dashevo/dashcore-lib'); + +/** + * @param {PrivateKey} [oneTimePrivateKey] + */ +function getInstantLockFixture(oneTimePrivateKey = new PrivateKey()) { + const privateKeyHex = 'cSBnVM4xvxarwGQuAfQFwqDg9k5tErHUHzgWsEfD4zdwUasvqRVY'; + const privateKey = new PrivateKey(privateKeyHex); + const fromAddress = privateKey.toAddress(); + + const oneTimePublicKey = oneTimePrivateKey.toPublicKey(); + + const transaction = new Transaction() + .from({ + address: fromAddress, + txId: 'a477af6b2667c29670467e4e0728b685ee07b240235771862318e29ddbe58458', + outputIndex: 0, + script: Script.buildPublicKeyHashOut(fromAddress) + .toString(), + satoshis: 100000, + }) + // eslint-disable-next-line no-underscore-dangle + .addBurnOutput(90000, oneTimePublicKey._getID()) + .to(fromAddress, 5000) + .addOutput(Transaction.Output({ + satoshis: 5000, + script: Script() + .add(Opcode.OP_RETURN) + .add(Buffer.from([1, 2, 3])), + })) + .sign(privateKey); + + return new InstantLock({ + version: 1, + inputs: [ + { + outpointHash: '6e200d059fb567ba19e92f5c2dcd3dde522fd4e0a50af223752db16158dabb1d', + outpointIndex: 0, + }, + ], + txid: transaction.id, + cyclehash: '7c30826123d0f29fe4c4a8895d7ba4eb469b1fafa6ad7b23896a1a591766a536', + signature: '8967c46529a967b3822e1ba8a173066296d02593f0f59b3a78a30a7eef9c8a120847729e62e4a32954339286b79fe7590221331cd28d576887a263f45b595d499272f656c3f5176987c976239cac16f972d796ad82931d532102a4f95eec7d80', + }); +} + +module.exports = getInstantLockFixture; diff --git a/packages/wasm-dpp/package.json b/packages/wasm-dpp/package.json index b3e998f386b..3d94f00fd43 100644 --- a/packages/wasm-dpp/package.json +++ b/packages/wasm-dpp/package.json @@ -9,6 +9,7 @@ "test": "yarn run test:node && yarn run test:browsers", "test:browsers": "karma start ./karma.conf.js --single-run", "test:node": "NODE_ENV=test mocha", + "tsc": "tsc", "lint": "eslint .", "lint:fix": "eslint . --fix", "clean": "yarn exec scripts/clean.sh" diff --git a/packages/wasm-dpp/scripts/build.sh b/packages/wasm-dpp/scripts/build.sh index cab572ac793..ec83e49c0e9 100755 --- a/packages/wasm-dpp/scripts/build.sh +++ b/packages/wasm-dpp/scripts/build.sh @@ -18,7 +18,7 @@ fi OUTPUT_DIR="$PWD/wasm" OUTPUT_FILE="$OUTPUT_DIR/wasm_dpp_bg.wasm" OUTPUT_FILE_JS="$OUTPUT_DIR/wasm_dpp_bg.js" -BUILD_COMMAND="cargo build --target=$TARGET $PROFILE_ARG" +BUILD_COMMAND="cargo build --config net.git-fetch-with-cli=true --target=$TARGET $PROFILE_ARG" BINDGEN_COMMAND="wasm-bindgen --out-dir=$OUTPUT_DIR --target=web --omit-default-module-path ../../target/$TARGET/$PROFILE/wasm_dpp.wasm" DIST_TYPINGS="$PWD/dist/wasm/wasm_dpp.d.ts" diff --git a/packages/wasm-dpp/src/buffer.rs b/packages/wasm-dpp/src/buffer.rs index c0b6db19c9f..efae80aaccc 100644 --- a/packages/wasm-dpp/src/buffer.rs +++ b/packages/wasm-dpp/src/buffer.rs @@ -1,3 +1,4 @@ +use js_sys::ArrayBuffer; use wasm_bindgen::prelude::*; #[wasm_bindgen] @@ -7,12 +8,21 @@ extern "C" { #[wasm_bindgen(constructor)] pub fn new() -> Buffer; - #[wasm_bindgen(constructor, js_name = "from")] + #[wasm_bindgen(static_method_of = Buffer, js_name = from)] pub fn from_bytes(js_sys: &[u8]) -> Buffer; - #[wasm_bindgen(constructor, js_name = "from")] + #[wasm_bindgen(static_method_of = Buffer, js_name = from)] pub fn from_bytes_owned(js_sys: Vec) -> Buffer; - #[wasm_bindgen(constructor, js_name = "from")] + #[wasm_bindgen(static_method_of = Buffer, js_name = from)] pub fn from_string(js_sys: String) -> Buffer; + + #[wasm_bindgen(method, getter)] + pub fn buffer(this: &Buffer) -> ArrayBuffer; + + #[wasm_bindgen(method, getter, js_name = byteOffset)] + pub fn byte_offset(this: &Buffer) -> u32; + + #[wasm_bindgen(method, getter)] + pub fn length(this: &Buffer) -> u32; } diff --git a/packages/wasm-dpp/src/dash_platform_protocol.rs b/packages/wasm-dpp/src/dash_platform_protocol.rs index c92ace32451..aeed22ba06d 100644 --- a/packages/wasm-dpp/src/dash_platform_protocol.rs +++ b/packages/wasm-dpp/src/dash_platform_protocol.rs @@ -45,6 +45,10 @@ impl DashPlatformProtocol { entropy_generator: ExternalEntropyGenerator, maybe_protocol_version: Option, ) -> Result { + if cfg!(debug_assertions) { + wasm_logger::init(wasm_logger::Config::new(log::Level::Debug)); + } + let bls = BlsAdapter(bls_adapter); let protocol_version = maybe_protocol_version.unwrap_or(LATEST_VERSION); let public_keys_validator = Arc::new(PublicKeysValidator::new(bls.clone()).unwrap()); diff --git a/packages/wasm-dpp/src/data_contract/data_contract.rs b/packages/wasm-dpp/src/data_contract/data_contract.rs index fd22177cfa1..ffa07d015e0 100644 --- a/packages/wasm-dpp/src/data_contract/data_contract.rs +++ b/packages/wasm-dpp/src/data_contract/data_contract.rs @@ -16,7 +16,7 @@ use dpp::{platform_value, Convertible}; use crate::errors::RustConversionError; use crate::identifier::identifier_from_js_value; use crate::metadata::MetadataWasm; -use crate::utils::WithJsError; +use crate::utils::{IntoWasm, WithJsError}; use crate::{bail_js, with_js_error}; use crate::{buffer::Buffer, identifier::IdentifierWrapper}; @@ -181,7 +181,9 @@ impl DataContractWasm { schema: JsValue, ) -> Result<(), JsValue> { let json_schema: JsonValue = with_js_error!(serde_wasm_bindgen::from_value(schema))?; - self.0.set_document_schema(doc_type, json_schema); + self.0 + .set_document_schema(doc_type, json_schema) + .with_js_error()?; Ok(()) } @@ -260,8 +262,15 @@ impl DataContractWasm { } #[wasm_bindgen(js_name=setMetadata)] - pub fn set_metadata(&mut self, metadata: MetadataWasm) { - self.0.metadata = Some(metadata.into()); + pub fn set_metadata(&mut self, metadata: JsValue) -> Result<(), JsValue> { + self.0.metadata = if !metadata.is_falsy() { + let metadata = metadata.to_wasm::("Metadata")?; + Some(metadata.to_owned().into()) + } else { + None + }; + + Ok(()) } #[wasm_bindgen(js_name=toObject)] diff --git a/packages/wasm-dpp/src/data_contract/data_contract_facade.rs b/packages/wasm-dpp/src/data_contract/data_contract_facade.rs index 11227b95e86..3e7563a32e9 100644 --- a/packages/wasm-dpp/src/data_contract/data_contract_facade.rs +++ b/packages/wasm-dpp/src/data_contract/data_contract_facade.rs @@ -119,10 +119,10 @@ impl DataContractFacadeWasm { #[wasm_bindgen(js_name=createDataContractUpdateTransition)] pub fn create_data_contract_update_transition( &self, - data_contract: DataContractWasm, + data_contract: &DataContractWasm, ) -> Result { self.0 - .create_data_contract_update_transition(data_contract.into()) + .create_data_contract_update_transition(data_contract.to_owned().into()) .map(Into::into) .map_err(from_protocol_error) } diff --git a/packages/wasm-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs b/packages/wasm-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs index 73f3b24ad87..b182d63ba34 100644 --- a/packages/wasm-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs +++ b/packages/wasm-dpp/src/data_contract/state_transition/data_contract_create_transition/mod.rs @@ -144,6 +144,11 @@ impl DataContractCreateTransitionWasm { self.0.set_execution_context(context.into()) } + #[wasm_bindgen(js_name=getExecutionContext)] + pub fn get_execution_context(&mut self) -> StateTransitionExecutionContextWasm { + self.0.get_execution_context().into() + } + #[wasm_bindgen(js_name=toObject)] pub fn to_object(&self, skip_signature: Option) -> Result { let serde_object = self diff --git a/packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs b/packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs index 585e043e75e..36696cafe99 100644 --- a/packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs +++ b/packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs @@ -148,6 +148,11 @@ impl DataContractUpdateTransitionWasm { self.0.set_execution_context(context.into()) } + #[wasm_bindgen(js_name=getExecutionContext)] + pub fn get_execution_context(&mut self) -> StateTransitionExecutionContextWasm { + self.0.get_execution_context().into() + } + #[wasm_bindgen(js_name=hash)] pub fn hash(&self, skip_signature: Option) -> Result { let bytes = self @@ -161,13 +166,31 @@ impl DataContractUpdateTransitionWasm { pub fn to_object(&self, skip_signature: Option) -> Result { let serde_object = self .0 - .to_object(skip_signature.unwrap_or(false)) + .to_cleaned_object(skip_signature.unwrap_or(false)) .map_err(from_protocol_error)?; serde_object .serialize(&serde_wasm_bindgen::Serializer::json_compatible()) .map_err(|e| e.into()) } + #[wasm_bindgen] + pub fn sign( + &mut self, + identity_public_key: &IdentityPublicKeyWasm, + private_key: Vec, + bls: JsBlsAdapter, + ) -> Result<(), JsValue> { + let bls_adapter = BlsAdapter(bls); + + self.0 + .sign( + &identity_public_key.to_owned().into(), + &private_key, + &bls_adapter, + ) + .with_js_error() + } + #[wasm_bindgen(js_name=verifySignature)] pub fn verify_signature( &self, diff --git a/packages/wasm-dpp/src/document/extended_document.rs b/packages/wasm-dpp/src/document/extended_document.rs index cfdf286fbc6..29c535bb6b1 100644 --- a/packages/wasm-dpp/src/document/extended_document.rs +++ b/packages/wasm-dpp/src/document/extended_document.rs @@ -2,7 +2,7 @@ use dpp::document::document_transition::document_base_transition::JsonValue; use dpp::document::{ExtendedDocument, EXTENDED_DOCUMENT_IDENTIFIER_FIELDS}; use dpp::platform_value::{Bytes32, Value}; -use dpp::prelude::{Identifier, Revision}; +use dpp::prelude::{Identifier, Revision, TimestampMillis}; use dpp::util::json_schema::JsonSchemaExt; use dpp::util::json_value::JsonValueExt; @@ -17,7 +17,7 @@ use crate::document::BinaryType; use crate::errors::RustConversionError; use crate::identifier::{identifier_from_js_value, IdentifierWrapper}; use crate::lodash::lodash_set; -use crate::utils::{with_serde_to_platform_value, ToSerdeJSONExt, WithJsError}; +use crate::utils::{with_serde_to_platform_value, IntoWasm, ToSerdeJSONExt, WithJsError}; use crate::{with_js_error, ConversionOptions, DocumentWasm}; use crate::{DataContractWasm, MetadataWasm}; @@ -217,23 +217,37 @@ impl ExtendedDocumentWasm { } #[wasm_bindgen(js_name=setCreatedAt)] - pub fn set_created_at(&mut self, ts: f64) { - self.0.document.created_at = Some(ts as u64); + pub fn set_created_at(&mut self, ts: Option) { + if let Some(ts) = ts { + self.0.document.created_at = Some(ts.get_time() as TimestampMillis); + } else { + self.0.document.created_at = None; + } } #[wasm_bindgen(js_name=setUpdatedAt)] - pub fn set_updated_at(&mut self, ts: f64) { - self.0.document.updated_at = Some(ts as u64); + pub fn set_updated_at(&mut self, ts: Option) { + if let Some(ts) = ts { + self.0.document.updated_at = Some(ts.get_time() as TimestampMillis); + } else { + self.0.document.updated_at = None; + } } #[wasm_bindgen(js_name=getCreatedAt)] - pub fn get_created_at(&self) -> Option { - self.0.document.created_at.map(|v| v as f64) + pub fn get_created_at(&self) -> Option { + self.0 + .document + .created_at + .map(|v| js_sys::Date::new(&JsValue::from_f64(v as f64))) } #[wasm_bindgen(js_name=getUpdatedAt)] - pub fn get_updated_at(&self) -> Option { - self.0.document.updated_at.map(|v| v as f64) + pub fn get_updated_at(&self) -> Option { + self.0 + .document + .updated_at + .map(|v| js_sys::Date::new(&JsValue::from_f64(v as f64))) } #[wasm_bindgen(js_name=getMetadata)] @@ -242,8 +256,15 @@ impl ExtendedDocumentWasm { } #[wasm_bindgen(js_name=setMetadata)] - pub fn set_metadata(&mut self, metadata: &MetadataWasm) { - self.0.metadata = Some(metadata.to_owned().into()); + pub fn set_metadata(&mut self, metadata: JsValue) -> Result<(), JsValue> { + self.0.metadata = if !metadata.is_falsy() { + let metadata = metadata.to_wasm::("Metadata")?; + Some(metadata.to_owned().into()) + } else { + None + }; + + Ok(()) } #[wasm_bindgen(js_name=toObject)] diff --git a/packages/wasm-dpp/src/document/mod.rs b/packages/wasm-dpp/src/document/mod.rs index 5201d9d306f..ccb969231db 100644 --- a/packages/wasm-dpp/src/document/mod.rs +++ b/packages/wasm-dpp/src/document/mod.rs @@ -33,6 +33,7 @@ use dpp::document::{Document, EXTENDED_DOCUMENT_IDENTIFIER_FIELDS, IDENTIFIER_FI pub use extended_document::ExtendedDocumentWasm; use dpp::document::extended_document::property_names; +use dpp::identity::TimestampMillis; use dpp::platform_value::btreemap_extensions::BTreeValueMapReplacementPathHelper; use dpp::platform_value::converter::serde_json::BTreeValueJsonConverter; use dpp::platform_value::ReplacementType; @@ -194,32 +195,27 @@ impl DocumentWasm { } #[wasm_bindgen(js_name=setCreatedAt)] - pub fn set_created_at(&mut self, number: JsValue) -> Result<(), JsValue> { - let ts = try_to_u64(number) - .context("setting createdAt in Document") - .with_js_error()?; - - self.0.created_at = Some(ts); - Ok(()) + pub fn set_created_at(&mut self, created_at: Option) { + self.0.created_at = created_at.map(|timestamp| timestamp.get_time() as TimestampMillis); } #[wasm_bindgen(js_name=setUpdatedAt)] - pub fn set_updated_at(&mut self, number: JsValue) -> Result<(), JsValue> { - let ts = try_to_u64(number) - .context("setting updatedAt in Document") - .with_js_error()?; - self.0.updated_at = Some(ts); - Ok(()) + pub fn set_updated_at(&mut self, updated_at: Option) { + self.0.updated_at = updated_at.map(|timestamp| timestamp.get_time() as TimestampMillis); } #[wasm_bindgen(js_name=getCreatedAt)] - pub fn get_created_at(&self) -> Option { - self.0.created_at.map(|v| v as f64) + pub fn get_created_at(&self) -> Option { + self.0 + .created_at + .map(|v| js_sys::Date::new(&JsValue::from_f64(v as f64))) } #[wasm_bindgen(js_name=getUpdatedAt)] - pub fn get_updated_at(&self) -> Option { - self.0.updated_at.map(|v| v as f64) + pub fn get_updated_at(&self) -> Option { + self.0 + .updated_at + .map(|v| js_sys::Date::new(&JsValue::from_f64(v as f64))) } #[wasm_bindgen(js_name=toObject)] diff --git a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs index 33d6584ba7d..c5f0c771f2f 100644 --- a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +++ b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs @@ -81,13 +81,17 @@ impl DocumentCreateTransitionWasm { } #[wasm_bindgen(js_name=getCreatedAt)] - pub fn created_at(&self) -> Option { - self.inner.created_at + pub fn created_at(&self) -> Option { + self.inner + .created_at + .map(|timestamp| js_sys::Date::new(&JsValue::from_f64(timestamp as f64))) } #[wasm_bindgen(js_name=getUpdatedAt)] - pub fn updated_at(&self) -> Option { - self.inner.updated_at + pub fn updated_at(&self) -> Option { + self.inner + .updated_at + .map(|timestamp| js_sys::Date::new(&JsValue::from_f64(timestamp as f64))) } #[wasm_bindgen(js_name=getRevision)] diff --git a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs index 051c616ab06..49dda970b4c 100644 --- a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +++ b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs @@ -84,8 +84,10 @@ impl DocumentReplaceTransitionWasm { } #[wasm_bindgen(js_name=getUpdatedAt)] - pub fn updated_at(&self) -> Option { - self.inner.updated_at + pub fn updated_at(&self) -> Option { + self.inner + .updated_at + .map(|timestamp| js_sys::Date::new(&JsValue::from_f64(timestamp as f64))) } #[wasm_bindgen(js_name=toObject)] diff --git a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs index e5fc1b79795..3a983bd9140 100644 --- a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs +++ b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs @@ -8,6 +8,7 @@ pub use document_delete_transition::*; pub use document_replace_transition::*; use dpp::platform_value::Value; +use dpp::prelude::TimestampMillis; use dpp::{ document::document_transition::{ DocumentCreateTransition, DocumentDeleteTransition, DocumentReplaceTransition, @@ -79,46 +80,33 @@ impl DocumentTransitionWasm { #[wasm_bindgen(js_name=getCreatedAt)] pub fn get_created_at(&self) -> JsValue { if let Some(created_at) = self.0.get_created_at() { - (created_at as f64).into() + js_sys::Date::new(&JsValue::from_f64(created_at as f64)).into() } else { JsValue::NULL } } + #[wasm_bindgen(js_name=getUpdatedAt)] pub fn get_updated_at(&self) -> JsValue { if let Some(updated_at) = self.0.get_updated_at() { - (updated_at as f64).into() + js_sys::Date::new(&JsValue::from_f64(updated_at as f64)).into() } else { JsValue::NULL } } #[wasm_bindgen(js_name=setUpdatedAt)] - pub fn set_updated_at(&mut self, js_timestamp_millis: JsValue) -> Result<(), JsValue> { - if js_timestamp_millis.is_undefined() || js_timestamp_millis.is_null() { - self.0.set_updated_at(None); - return Ok(()); - } - let timestamp_millis = try_to_u64(js_timestamp_millis) - .context("setting updatedAt in DocumentsBatchTransition") - .with_js_error()?; - self.0.set_updated_at(Some(timestamp_millis)); + pub fn set_updated_at(&mut self, updated_at: Option) -> Result<(), JsValue> { + self.0 + .set_updated_at(updated_at.map(|timestamp| timestamp.get_time() as TimestampMillis)); Ok(()) } #[wasm_bindgen(js_name=setCreatedAt)] - pub fn set_created_at(&mut self, js_timestamp_millis: JsValue) -> Result<(), JsValue> { - if js_timestamp_millis.is_undefined() || js_timestamp_millis.is_null() { - self.0.set_created_at(None); - return Ok(()); - } - let timestamp_millis = try_to_u64(js_timestamp_millis) - .context("setting createdAt in DocumentsBatchTransition") - .with_js_error()?; - self.0.set_created_at(Some(timestamp_millis)); - - Ok(()) + pub fn set_created_at(&mut self, created_at: Option) { + self.0 + .set_created_at(created_at.map(|timestamp| timestamp.get_time() as TimestampMillis)); } #[wasm_bindgen(js_name=getData)] diff --git a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/mod.rs b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/mod.rs index b0ee1bd0ae4..a65f4692986 100644 --- a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/mod.rs +++ b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/mod.rs @@ -363,7 +363,7 @@ impl DocumentsBatchTransitionWasm { } #[wasm_bindgen(js_name=setExecutionContext)] - pub fn set_execution_context(&mut self, context: StateTransitionExecutionContextWasm) { + pub fn set_execution_context(&mut self, context: &StateTransitionExecutionContextWasm) { self.0.set_execution_context(context.into()) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs index 1fe0755ae78..9e623178ead 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs @@ -1,7 +1,11 @@ +use std::convert::TryFrom; + use crate::buffer::Buffer; +use crate::utils::WithJsError; use dpp::consensus::codes::ErrorWithCode; use dpp::consensus::signature::InvalidIdentityPublicKeyTypeError; use dpp::consensus::ConsensusError; +use dpp::identity::KeyType; use wasm_bindgen::prelude::*; #[wasm_bindgen(js_name=InvalidIdentityPublicKeyTypeError)] @@ -17,6 +21,15 @@ impl From<&InvalidIdentityPublicKeyTypeError> for InvalidIdentityPublicKeyTypeEr #[wasm_bindgen(js_class=InvalidIdentityPublicKeyTypeError)] impl InvalidIdentityPublicKeyTypeErrorWasm { + #[wasm_bindgen(constructor)] + pub fn new(key_type: u8) -> Result { + Ok(Self { + inner: InvalidIdentityPublicKeyTypeError::new( + KeyType::try_from(key_type).with_js_error()?, + ), + }) + } + #[wasm_bindgen(js_name=getPublicKeyType)] pub fn get_public_key_type(&self) -> u8 { self.inner.public_key_type() as u8 diff --git a/packages/wasm-dpp/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs index a2deaa122a3..c55cb460d56 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs @@ -17,6 +17,13 @@ impl From<&InvalidStateTransitionTypeError> for InvalidStateTransitionTypeErrorW #[wasm_bindgen(js_class=InvalidStateTransitionTypeError)] impl InvalidStateTransitionTypeErrorWasm { + #[wasm_bindgen(constructor)] + pub fn new(transition_type: u8) -> Self { + Self { + inner: InvalidStateTransitionTypeError::new(transition_type), + } + } + #[wasm_bindgen(js_name=getType)] pub fn get_type(&self) -> u8 { self.inner.transition_type() diff --git a/packages/wasm-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs index caeebd8acdb..94251e6eae7 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs @@ -17,6 +17,13 @@ impl From<&MissingStateTransitionTypeError> for MissingStateTransitionTypeErrorW #[wasm_bindgen(js_class=MissingStateTransitionTypeError)] impl MissingStateTransitionTypeErrorWasm { + #[wasm_bindgen(constructor)] + pub fn new() -> Self { + Self { + inner: MissingStateTransitionTypeError::new(), + } + } + #[wasm_bindgen(js_name=getCode)] pub fn get_code(&self) -> u32 { ConsensusError::from(self.inner.clone()).code() diff --git a/packages/wasm-dpp/src/errors/mod.rs b/packages/wasm-dpp/src/errors/mod.rs index fd8e6193505..9e517961adf 100644 --- a/packages/wasm-dpp/src/errors/mod.rs +++ b/packages/wasm-dpp/src/errors/mod.rs @@ -13,5 +13,5 @@ pub use public_key_validation_error::*; mod compatible_protocol_version_is_not_defined_error; pub mod data_contract_not_present_error; pub mod dpp_error; -mod value_error; +pub mod value_error; pub use compatible_protocol_version_is_not_defined_error::*; diff --git a/packages/wasm-dpp/src/generate_temporary_ecdsa_private_key.rs b/packages/wasm-dpp/src/generate_temporary_ecdsa_private_key.rs new file mode 100644 index 00000000000..2fa33a91d21 --- /dev/null +++ b/packages/wasm-dpp/src/generate_temporary_ecdsa_private_key.rs @@ -0,0 +1,19 @@ +use crate::buffer::Buffer; +use dpp::dashcore::secp256k1::rand::thread_rng; +use dpp::dashcore::secp256k1::Secp256k1; +use dpp::dashcore::{ + secp256k1::SecretKey, InstantLock, Network, OutPoint, PrivateKey, Script, Transaction, TxIn, + TxOut, Txid, +}; +use wasm_bindgen::prelude::wasm_bindgen; +use wasm_bindgen::JsValue; + +#[wasm_bindgen(js_name = generateTemporaryEcdsaPrivateKey)] +pub fn generate_temporary_ecdsa_private_key() -> JsValue { + let mut rng = thread_rng(); + + let secret_key = SecretKey::new(&mut rng); + let one_time_private_key = PrivateKey::new(secret_key, Network::Testnet).to_string(); + + JsValue::from_str(&one_time_private_key) +} diff --git a/packages/wasm-dpp/src/identity/identity_public_key/mod.rs b/packages/wasm-dpp/src/identity/identity_public_key/mod.rs index 4f5ab91492c..92500dd1604 100644 --- a/packages/wasm-dpp/src/identity/identity_public_key/mod.rs +++ b/packages/wasm-dpp/src/identity/identity_public_key/mod.rs @@ -6,7 +6,7 @@ use wasm_bindgen::prelude::*; use crate::utils::{Inner, WithJsError}; use crate::{buffer::Buffer, utils, with_js_error}; -use dpp::identity::{IdentityPublicKey, KeyID}; +use dpp::identity::{IdentityPublicKey, KeyID, TimestampMillis}; use dpp::platform_value::BinaryData; use dpp::Convertible; @@ -67,8 +67,8 @@ impl IdentityPublicKeyWasm { } #[wasm_bindgen(js_name=getData)] - pub fn get_data(&self) -> Vec { - self.0.data.to_vec() + pub fn get_data(&self) -> Buffer { + Buffer::from_bytes_owned(self.0.data.to_vec()) } #[wasm_bindgen(js_name=setPurpose)] @@ -108,14 +108,16 @@ impl IdentityPublicKeyWasm { } #[wasm_bindgen(js_name=setDisabledAt)] - pub fn set_disabled_at(&mut self, timestamp: u32) { - // TODO: It's not gonna work, must be BigInt - self.0.set_disabled_at(timestamp as u64); + pub fn set_disabled_at(&mut self, timestamp: js_sys::Date) { + self.0 + .set_disabled_at(timestamp.get_time() as TimestampMillis); } #[wasm_bindgen(js_name=getDisabledAt)] - pub fn get_disabled_at(&self) -> Option { - self.0.disabled_at.map(|timestamp| timestamp as f64) + pub fn get_disabled_at(&self) -> Option { + self.0 + .disabled_at + .map(|timestamp| js_sys::Date::new(&JsValue::from_f64(timestamp as f64))) } #[wasm_bindgen(js_name=hash)] diff --git a/packages/wasm-dpp/src/identity/mod.rs b/packages/wasm-dpp/src/identity/mod.rs index 1230c689ebb..b45dd64db97 100644 --- a/packages/wasm-dpp/src/identity/mod.rs +++ b/packages/wasm-dpp/src/identity/mod.rs @@ -15,12 +15,13 @@ use dpp::metadata::Metadata; use dpp::{Convertible, ProtocolError}; use crate::identifier::IdentifierWrapper; -use crate::utils::{to_vec_of_serde_values, WithJsError}; +use crate::utils::{to_vec_of_serde_values, IntoWasm, WithJsError}; use crate::MetadataWasm; use crate::{utils, with_js_error}; pub use identity_public_key::*; use crate::buffer::Buffer; +use crate::errors::from_dpp_err; pub use state_transition::*; pub mod errors; @@ -50,7 +51,7 @@ impl IdentityWasm { let raw_identity: Value = serde_json::from_str(&identity_json).map_err(|e| e.to_string())?; - let identity = Identity::from_json(raw_identity).unwrap(); + let identity = Identity::from_json(raw_identity).map_err(from_dpp_err)?; Ok(IdentityWasm(identity)) } @@ -148,8 +149,13 @@ impl IdentityWasm { } #[wasm_bindgen(js_name=setMetadata)] - pub fn set_metadata(&mut self, metadata: MetadataWasm) { - self.0.set_metadata(metadata.into()); + pub fn set_metadata(&mut self, metadata: JsValue) -> Result<(), JsValue> { + if !metadata.is_falsy() { + let metadata = metadata.to_wasm::("Metadata")?; + self.0.set_metadata(metadata.to_owned().into()) + } + + Ok(()) } #[wasm_bindgen(js_name=getMetadata)] diff --git a/packages/wasm-dpp/src/identity/state_transition/identity_public_key_transitions.rs b/packages/wasm-dpp/src/identity/state_transition/identity_public_key_transitions.rs index fa5ea7d3a95..c8c3b272d95 100644 --- a/packages/wasm-dpp/src/identity/state_transition/identity_public_key_transitions.rs +++ b/packages/wasm-dpp/src/identity/state_transition/identity_public_key_transitions.rs @@ -64,8 +64,8 @@ impl IdentityPublicKeyWithWitnessWasm { } #[wasm_bindgen(js_name=getData)] - pub fn get_data(&self) -> Vec { - self.0.data.to_vec() + pub fn get_data(&self) -> Buffer { + Buffer::from_bytes_owned(self.0.data.to_vec()) } #[wasm_bindgen(js_name=setPurpose)] diff --git a/packages/wasm-dpp/src/lib.rs b/packages/wasm-dpp/src/lib.rs index 39f810a3b17..fff1a8c5885 100644 --- a/packages/wasm-dpp/src/lib.rs +++ b/packages/wasm-dpp/src/lib.rs @@ -29,5 +29,6 @@ mod bls_adapter; mod buffer; mod decode_protocol_entity; mod entropy_generator; +mod generate_temporary_ecdsa_private_key; mod lodash; mod validation; diff --git a/packages/wasm-dpp/src/metadata.rs b/packages/wasm-dpp/src/metadata.rs index e0e62ab7c56..b482473f08e 100644 --- a/packages/wasm-dpp/src/metadata.rs +++ b/packages/wasm-dpp/src/metadata.rs @@ -9,7 +9,7 @@ use dpp::util::deserializer::ProtocolVersion; use dpp::util::json_value::JsonValueExt; #[wasm_bindgen(js_name=Metadata)] -#[derive(Debug)] +#[derive(Clone, Debug)] pub struct MetadataWasm(Metadata); impl std::convert::From for MetadataWasm { diff --git a/packages/wasm-dpp/src/state_repository.rs b/packages/wasm-dpp/src/state_repository.rs index b3854b12507..49ae586d905 100644 --- a/packages/wasm-dpp/src/state_repository.rs +++ b/packages/wasm-dpp/src/state_repository.rs @@ -54,6 +54,13 @@ extern "C" { execution_context: &JsValue, ) -> Result<(), JsValue>; + #[wasm_bindgen(catch, structural, method, js_name=updateDataContract)] + pub async fn update_data_contract( + this: &ExternalStateRepositoryLike, + data_contract: DataContractWasm, + execution_context: &JsValue, + ) -> Result<(), JsValue>; + #[wasm_bindgen(catch, structural, method, js_name=createDocument)] pub async fn create_document( this: &ExternalStateRepositoryLike, @@ -216,6 +223,15 @@ extern "C" { execution_context: &JsValue, ) -> Result<(), JsValue>; + #[wasm_bindgen(catch, structural, method, js_name=fetchSMLStore)] + pub async fn fetch_sml_store(this: &ExternalStateRepositoryLike) -> Result; + + #[wasm_bindgen(catch, structural, method, js_name=isInTheValidMasterNodesList)] + async fn is_in_the_valid_master_nodes_list( + this: &ExternalStateRepositoryLike, + id: Buffer, + ) -> Result; + #[wasm_bindgen(catch, structural, method, js_name=fetchLatestPlatformBlockHeader)] pub async fn fetch_latest_platform_block_header( this: &ExternalStateRepositoryLike, @@ -323,6 +339,17 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper { .map_err(from_js_error) } + async fn update_data_contract<'a>( + &self, + data_contract: DataContract, + execution_context: Option<&'a StateTransitionExecutionContext>, + ) -> anyhow::Result<()> { + self.0 + .update_data_contract(data_contract.into(), &ctx_to_js_value(execution_context)) + .await + .map_err(from_js_error) + } + async fn fetch_documents<'a>( &self, contract_id: &Identifier, @@ -454,7 +481,7 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper { .await .map_err(from_js_error)?; - if maybe_identity.is_undefined() { + if maybe_identity.is_undefined() || maybe_identity.is_null() { return Ok(None); } @@ -542,7 +569,7 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper { .await .map_err(from_js_error)?; - if maybe_balance.is_undefined() { + if maybe_balance.is_undefined() || maybe_balance.is_null() { return Ok(None); } @@ -567,7 +594,7 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper { .await .map_err(from_js_error)?; - if maybe_balance.is_undefined() { + if maybe_balance.is_undefined() || maybe_balance.is_null() { return Ok(None); } @@ -629,6 +656,7 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper { _amount: u64, _execution_context: Option<&'a StateTransitionExecutionContext>, ) -> anyhow::Result<()> { + // TODO(wasm-dpp): !!!Missing implementation will hang js-drive and no one will have a clue what's going on todo!() } @@ -649,7 +677,7 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper { .await .map_err(from_js_error)?; - if maybe_height.is_undefined() { + if maybe_height.is_undefined() || maybe_height.is_null() { return Ok(None); } @@ -730,7 +758,20 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper { todo!() } + async fn is_in_the_valid_master_nodes_list(&self, id: [u8; 32]) -> anyhow::Result { + let is_valid = self + .0 + .is_in_the_valid_master_nodes_list(Buffer::from_bytes(&id)) + .await + .map_err(from_js_error)?; + + is_valid + .as_bool() + .ok_or_else(|| anyhow!("Value is not a bool")) + } + async fn fetch_latest_withdrawal_transaction_index(&self) -> anyhow::Result { + // TODO(wasm-dpp): !!!Missing implementation will hang js-drive and no one will have a clue what's going on todo!() } @@ -739,6 +780,7 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper { _index: u64, _transaction_bytes: Vec, ) -> anyhow::Result<()> { + // TODO(wasm-dpp): !!!Missing implementation will hang js-drive and no one will have a clue what's going on todo!() } diff --git a/packages/wasm-dpp/src/state_transition/errors/invalid_state_transition_error.rs b/packages/wasm-dpp/src/state_transition/errors/invalid_state_transition_error.rs index 470c112a6ea..90f201e2cfb 100644 --- a/packages/wasm-dpp/src/state_transition/errors/invalid_state_transition_error.rs +++ b/packages/wasm-dpp/src/state_transition/errors/invalid_state_transition_error.rs @@ -1,7 +1,10 @@ use dpp::consensus::ConsensusError; use wasm_bindgen::{prelude::wasm_bindgen, JsValue}; -use crate::errors::consensus::consensus_error::from_consensus_error_ref; +use crate::{ + buffer::Buffer, errors::consensus::consensus_error::from_consensus_error_ref, + utils::consensus_errors_from_buffers, +}; #[wasm_bindgen(js_name = InvalidStateTransitionError)] pub struct InvalidStateTransitionErrorWasm { @@ -20,6 +23,19 @@ impl InvalidStateTransitionErrorWasm { #[wasm_bindgen(js_class = InvalidStateTransitionError)] impl InvalidStateTransitionErrorWasm { + #[wasm_bindgen(constructor)] + pub fn new_wasm( + error_buffers: Vec, + raw_state_transition: JsValue, + ) -> Result { + let consensus_errors = consensus_errors_from_buffers(error_buffers)?; + + Ok(InvalidStateTransitionErrorWasm::new( + consensus_errors, + raw_state_transition, + )) + } + #[wasm_bindgen(js_name = getErrors)] pub fn get_errors(&self) -> Vec { self.errors.iter().map(from_consensus_error_ref).collect() diff --git a/packages/wasm-dpp/src/state_transition/fee/calculate_operation_fees.rs b/packages/wasm-dpp/src/state_transition/fee/calculate_operation_fees.rs index 8a270bbede5..4e24ee92e26 100644 --- a/packages/wasm-dpp/src/state_transition/fee/calculate_operation_fees.rs +++ b/packages/wasm-dpp/src/state_transition/fee/calculate_operation_fees.rs @@ -6,12 +6,9 @@ use dpp::{ }; use wasm_bindgen::prelude::*; -use crate::{ - fee::dummy_fee_result::DummyFeesResultWasm, - utils::{Inner, IntoWasm, WithJsError}, -}; +use crate::{fee::dummy_fee_result::DummyFeesResultWasm, utils::WithJsError}; -use super::OperationWasm; +use crate::state_transition::conversion::create_operation_from_wasm_instance; #[wasm_bindgen(js_name=calculateOperationFees)] pub fn calculate_operation_fees_wasm( @@ -19,8 +16,8 @@ pub fn calculate_operation_fees_wasm( ) -> Result { let mut inner_operations: Vec = vec![]; for operation in operations.iter() { - let operation = operation.to_wasm::("Operation")?.to_owned(); - inner_operations.push(operation.into_inner()) + let operation = create_operation_from_wasm_instance(&operation)?; + inner_operations.push(operation); } Ok(calculate_operation_fees(&inner_operations) diff --git a/packages/wasm-dpp/src/state_transition/fee/calculate_state_transition_fee_from_operations.rs b/packages/wasm-dpp/src/state_transition/fee/calculate_state_transition_fee_from_operations.rs new file mode 100644 index 00000000000..7303c0fcb8d --- /dev/null +++ b/packages/wasm-dpp/src/state_transition/fee/calculate_state_transition_fee_from_operations.rs @@ -0,0 +1,29 @@ +use dpp::state_transition::fee::calculate_state_transition_fee_from_operations_factory::calculate_state_transition_fee_from_operations; +use dpp::state_transition::fee::operations::Operation; +use dpp::ProtocolError; +use wasm_bindgen::prelude::*; + +use crate::fee::fee_result::FeeResultWasm; +use crate::identifier::IdentifierWrapper; +use crate::state_transition::conversion::create_operation_from_wasm_instance; +use crate::utils::WithJsError; + +#[wasm_bindgen(js_name=calculateStateTransitionFeeFromOperations)] +pub fn calculate_state_transition_fee_from_operations_wasm( + operations: js_sys::Array, + identity_id: &IdentifierWrapper, +) -> Result { + let mut inner_operations: Vec = vec![]; + for operation in operations.iter() { + let operation = create_operation_from_wasm_instance(&operation)?; + inner_operations.push(operation); + } + + Ok(calculate_state_transition_fee_from_operations( + &inner_operations, + &(identity_id.to_owned()).into(), + ) + .map_err(ProtocolError::from) + .with_js_error()? + .into()) +} diff --git a/packages/wasm-dpp/src/state_transition/fee/mod.rs b/packages/wasm-dpp/src/state_transition/fee/mod.rs index c87ea551280..ccecd5249a0 100644 --- a/packages/wasm-dpp/src/state_transition/fee/mod.rs +++ b/packages/wasm-dpp/src/state_transition/fee/mod.rs @@ -4,6 +4,7 @@ use wasm_bindgen::prelude::*; use crate::utils::Inner; mod calculate_operation_fees; mod calculate_state_transition_fee; +mod calculate_state_transition_fee_from_operations; mod dummy_fee_result; mod fee_result; mod operations; diff --git a/packages/wasm-dpp/src/state_transition/fee/operations/pre_calculated_operation.rs b/packages/wasm-dpp/src/state_transition/fee/operations/pre_calculated_operation.rs index 640c05606e2..7d29f492a4f 100644 --- a/packages/wasm-dpp/src/state_transition/fee/operations/pre_calculated_operation.rs +++ b/packages/wasm-dpp/src/state_transition/fee/operations/pre_calculated_operation.rs @@ -1,17 +1,21 @@ use crate::{fee::dummy_fee_result::DummyFeesResultWasm, utils::Inner}; +use dpp::platform_value::Error as PlatformValueError; use dpp::{ state_transition::fee::{ operations::{OperationLike, PreCalculatedOperation}, - Refunds, + Credits, Refunds, }, ProtocolError, }; use js_sys::{Array, BigInt}; +use std::collections::HashMap; use wasm_bindgen::prelude::*; +use crate::errors::value_error::PlatformValueErrorWasm; +use crate::utils::ToSerdeJSONExt; use crate::{ fee::refunds::RefundsWasm, - utils::{try_to_u64, IntoWasm, WithJsError}, + utils::{try_to_u64, WithJsError}, }; #[wasm_bindgen(js_name = "PreCalculatedOperation")] @@ -42,12 +46,40 @@ impl PreCalculatedOperationWasm { let processing_cost = try_to_u64(processing_cost).with_js_error()?; let mut refunds = vec![]; + // TODO(wasm-dpp): any chance to make this parsing simpler? :) for refund in js_fee_refunds.iter() { - let transition: Refunds = refund - .to_wasm::("Refunds")? - .to_owned() - .into_inner(); - refunds.push(transition); + let parsed_refund = refund.with_serde_to_platform_value()?; + let identifier = parsed_refund + .get_identifier("identifier") + .map_err(PlatformValueErrorWasm::from)?; + + let mut credits_per_epoch: HashMap = HashMap::new(); + if let Some(credits_per_epoch_value) = parsed_refund + .get("creditsPerEpoch") + .map_err(PlatformValueErrorWasm::from)? + { + let credits_per_epoch_map = credits_per_epoch_value.as_map().ok_or_else(|| { + let error = + PlatformValueError::PathError("Credits per epoch is not a map".to_string()); + PlatformValueErrorWasm::from(error) + })?; + + for (epoch, credits) in credits_per_epoch_map { + let epoch = epoch.to_str().map_err(PlatformValueErrorWasm::from)?; + let credits = + credits + .as_integer::() + .ok_or(PlatformValueErrorWasm::from(PlatformValueError::PathError( + "Credits per epoch is not an integer".to_string(), + )))?; + + credits_per_epoch.insert(String::from(epoch), credits); + } + } + refunds.push(Refunds { + identifier, + credits_per_epoch, + }); } Ok(PreCalculatedOperation::new(storage_cost, processing_cost, refunds).into()) @@ -92,6 +124,50 @@ impl PreCalculatedOperationWasm { None } } + + pub fn refunds_as_objects(&self) -> Result, JsValue> { + let array_refunds = Array::new(); + if let Some(refunds) = self.0.get_refunds() { + for refund in refunds { + let refund_wasm: RefundsWasm = refund.into(); + array_refunds.push(&refund_wasm.to_object()?); + } + Ok(Some(array_refunds)) + } else { + Ok(None) + } + } + + #[wasm_bindgen(js_name = toJSON)] + pub fn to_json(&self) -> Result { + let json = js_sys::Object::new(); + + js_sys::Reflect::set( + &json, + &JsValue::from_str("type"), + &JsValue::from_str("preCalculated"), + )?; + + js_sys::Reflect::set( + &json, + &JsValue::from_str("storageCost"), + &JsValue::from(self.storage_cost()?), + )?; + + js_sys::Reflect::set( + &json, + &JsValue::from_str("processingCost"), + &JsValue::from(self.processing_cost()?), + )?; + + js_sys::Reflect::set( + &json, + &JsValue::from_str("feeRefunds"), + &JsValue::from(self.refunds_as_objects()?.unwrap_or(Array::new())), + )?; + + Ok(json.into()) + } } impl Inner for PreCalculatedOperationWasm { diff --git a/packages/wasm-dpp/src/state_transition/fee/operations/read_operation.rs b/packages/wasm-dpp/src/state_transition/fee/operations/read_operation.rs index 9d980bfbdb3..e3235f9e37b 100644 --- a/packages/wasm-dpp/src/state_transition/fee/operations/read_operation.rs +++ b/packages/wasm-dpp/src/state_transition/fee/operations/read_operation.rs @@ -67,6 +67,25 @@ impl ReadOperationWasm { None } } + + #[wasm_bindgen(js_name = toJSON)] + pub fn to_json(&self) -> Result { + let json = js_sys::Object::new(); + + js_sys::Reflect::set( + &json, + &JsValue::from_str("type"), + &JsValue::from_str("read"), + )?; + + js_sys::Reflect::set( + &json, + &JsValue::from_str("valueSize"), + &JsValue::from(self.0.value_size), + )?; + + Ok(json.into()) + } } impl Inner for ReadOperationWasm { diff --git a/packages/wasm-dpp/src/state_transition/fee/operations/signature_verification_operation.rs b/packages/wasm-dpp/src/state_transition/fee/operations/signature_verification_operation.rs index 85fbc7cd360..3b747de4a6b 100644 --- a/packages/wasm-dpp/src/state_transition/fee/operations/signature_verification_operation.rs +++ b/packages/wasm-dpp/src/state_transition/fee/operations/signature_verification_operation.rs @@ -74,6 +74,21 @@ impl SignatureVerificationOperationWasm { None } } + + #[wasm_bindgen(js_name = toJSON)] + pub fn to_json(&self) -> Result { + let json = js_sys::Object::new(); + + js_sys::Reflect::set(&json, &"type".into(), &"signatureVerification".into())?; + + js_sys::Reflect::set( + &json, + &"signatureType".into(), + &JsValue::from(self.0.signature_type as u8), + )?; + + Ok(json.into()) + } } impl Inner for SignatureVerificationOperationWasm { diff --git a/packages/wasm-dpp/src/state_transition/fee/refunds.rs b/packages/wasm-dpp/src/state_transition/fee/refunds.rs index 10cbd37b5cd..6013f526ae9 100644 --- a/packages/wasm-dpp/src/state_transition/fee/refunds.rs +++ b/packages/wasm-dpp/src/state_transition/fee/refunds.rs @@ -4,6 +4,7 @@ use dpp::state_transition::fee::Refunds; use js_sys::BigInt; use wasm_bindgen::prelude::*; +use crate::buffer::Buffer; use crate::{identifier::IdentifierWrapper, utils::Inner}; #[derive(Clone)] @@ -21,6 +22,22 @@ impl RefundsWasm { pub fn credits_per_epoch(&self) -> js_sys::Map { convert_hashmap_to_jsmap(&self.0.credits_per_epoch) } + + #[wasm_bindgen(js_name=toObject)] + pub fn to_object(&self) -> Result { + let object = js_sys::Object::new(); + + let identifier = Buffer::from_bytes(self.0.identifier.as_slice()); + + js_sys::Reflect::set(&object, &"identifier".into(), &identifier)?; + js_sys::Reflect::set( + &object, + &"creditsPerEpoch".into(), + &self.credits_per_epoch(), + )?; + + Ok(object.into()) + } } impl From for RefundsWasm { diff --git a/packages/wasm-dpp/src/state_transition/mod.rs b/packages/wasm-dpp/src/state_transition/mod.rs index 1dc022b9d63..c85f84b4408 100644 --- a/packages/wasm-dpp/src/state_transition/mod.rs +++ b/packages/wasm-dpp/src/state_transition/mod.rs @@ -73,6 +73,11 @@ impl StateTransitionExecutionContextWasm { self.0.disable_dry_run(); } + #[wasm_bindgen(js_name=isDryRun)] + pub fn is_dry_run(&self) -> bool { + self.0.is_dry_run() + } + #[wasm_bindgen(js_name=addOperation)] pub fn add_operation(&self, operation: JsValue) -> Result<(), JsValue> { let operation = create_operation_from_wasm_instance(&operation)?; @@ -96,6 +101,11 @@ impl StateTransitionExecutionContextWasm { }) .collect() } + + #[wasm_bindgen(js_name=clearDryOperations)] + pub fn clear_dry_run_operations(&self) { + self.0.clear_dry_run_operations(); + } } impl Inner for StateTransitionExecutionContextWasm { diff --git a/packages/wasm-dpp/src/state_transition/state_transition_facade.rs b/packages/wasm-dpp/src/state_transition/state_transition_facade.rs index 85eb8bce8b6..9e0b2e398d5 100644 --- a/packages/wasm-dpp/src/state_transition/state_transition_facade.rs +++ b/packages/wasm-dpp/src/state_transition/state_transition_facade.rs @@ -1,4 +1,5 @@ use crate::bls_adapter::BlsAdapter; +use std::convert::TryInto; use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper}; use crate::state_transition_factory::StateTransitionFactoryWasm; @@ -7,12 +8,17 @@ use crate::validation::ValidationResultWasm; use crate::with_js_error; use dpp::state_transition::state_transition_execution_context::StateTransitionExecutionContext; use dpp::state_transition::{ - StateTransitionConvert, StateTransitionFacade, StateTransitionLike, ValidateOptions, + StateTransitionConvert, StateTransitionFacade, StateTransitionLike, StateTransitionType, + ValidateOptions, }; use dpp::version::ProtocolVersionValidator; use serde::Deserialize; use crate::errors::protocol_error::from_protocol_error; +use crate::errors::value_error::PlatformValueErrorWasm; +use dpp::data_contract::state_transition::data_contract_update_transition::DataContractUpdateTransition; +use dpp::document::DocumentsBatchTransition; +use dpp::ProtocolError; use std::sync::Arc; use wasm_bindgen::prelude::*; use wasm_bindgen::JsValue; @@ -56,7 +62,21 @@ impl StateTransitionFacadeWasm { Default::default() }; - let raw_state_transition = raw_state_transition.with_serde_to_platform_value()?; + let mut raw_state_transition = raw_state_transition.with_serde_to_platform_value()?; + let state_transition_type: StateTransitionType = raw_state_transition + .get_integer::("type") + .map_err(|e| PlatformValueErrorWasm::from(e))? + .try_into() + .map_err(|_| JsValue::from_str("Invalid state transition type"))?; + + // TODO(wasm-dpp): clean values of other transitions as well? + match state_transition_type { + StateTransitionType::DataContractUpdate => { + DataContractUpdateTransition::clean_value(&mut raw_state_transition) + .map_err(|e| PlatformValueErrorWasm::from(e))?; + } + _ => {} + } let result = self .0 diff --git a/packages/wasm-dpp/src/utils.rs b/packages/wasm-dpp/src/utils.rs index 4a7b90061af..aee52dcb73a 100644 --- a/packages/wasm-dpp/src/utils.rs +++ b/packages/wasm-dpp/src/utils.rs @@ -3,17 +3,21 @@ use std::convert::TryInto; use anyhow::{anyhow, bail}; use dpp::{ + consensus::ConsensusError, dashcore::{anyhow, anyhow::Context}, ProtocolError, }; use dpp::platform_value::Value; -use js_sys::Function; +use js_sys::{Function, Uint8Array}; use serde::de::DeserializeOwned; use serde_json::Value as JsonValue; use wasm_bindgen::{convert::RefFromWasmAbi, prelude::*}; -use crate::errors::{from_dpp_err, RustConversionError}; +use crate::{ + buffer::Buffer, + errors::{from_dpp_err, RustConversionError}, +}; pub trait ToSerdeJSONExt { fn with_serde_to_json_value(&self) -> Result; @@ -280,3 +284,20 @@ pub(crate) trait Inner { fn inner(&self) -> &Self::InnerItem; fn inner_mut(&mut self) -> &mut Self::InnerItem; } + +pub(crate) fn consensus_errors_from_buffers( + errors: Vec, +) -> Result, JsValue> { + errors + .iter() + .map(|error_buffer| { + Uint8Array::new_with_byte_offset_and_length( + &error_buffer.buffer(), + error_buffer.byte_offset(), + error_buffer.length(), + ) + .to_vec() + }) + .map(|error_bytes| ConsensusError::deserialize(&error_bytes.to_vec()).with_js_error()) + .collect::, JsValue>>() +} diff --git a/packages/wasm-dpp/src/validation/validation_result.rs b/packages/wasm-dpp/src/validation/validation_result.rs index cedfeb9cd29..7c12a66ced5 100644 --- a/packages/wasm-dpp/src/validation/validation_result.rs +++ b/packages/wasm-dpp/src/validation/validation_result.rs @@ -1,6 +1,10 @@ -use crate::errors::consensus::consensus_error::from_consensus_error_ref; +use crate::{ + buffer::Buffer, + errors::consensus::consensus_error::from_consensus_error_ref, + utils::{consensus_errors_from_buffers, WithJsError}, +}; use dpp::{consensus::ConsensusError, validation::ValidationResult}; -use js_sys::JsString; +use js_sys::{JsString, Uint8Array}; use wasm_bindgen::prelude::*; #[wasm_bindgen(js_name=ValidationResult)] @@ -18,6 +22,17 @@ where #[wasm_bindgen(js_class=ValidationResult)] impl ValidationResultWasm { + #[wasm_bindgen(constructor)] + pub fn new(errors_option: Option>) -> Result { + if let Some(errors) = errors_option { + let consensus_errors: Vec = consensus_errors_from_buffers(errors)?; + + return Ok(Self(ValidationResult::new_with_errors(consensus_errors))); + } + + Ok(Self(ValidationResult::new_with_errors(vec![]))) + } + /// This is just a test method - doesn't need to be in the resulted binding. Please /// remove before shipping #[wasm_bindgen(js_name=errorsText)] @@ -48,6 +63,22 @@ impl ValidationResultWasm { JsValue::undefined() } } + + #[wasm_bindgen(js_name = addError)] + pub fn add_error_wasm(&mut self, error_buffer: Buffer) -> Result { + let error_bytes: Vec = Uint8Array::new_with_byte_offset_and_length( + &error_buffer.buffer(), + error_buffer.byte_offset(), + error_buffer.length(), + ) + .to_vec(); + + let consensus_error = ConsensusError::deserialize(&error_bytes).with_js_error()?; + + self.0.add_error(consensus_error); + + Ok(JsValue::undefined()) + } } impl ValidationResultWasm { diff --git a/packages/wasm-dpp/test/integration/dataContract/DataContractFacade.spec.js b/packages/wasm-dpp/test/integration/dataContract/DataContractFacade.spec.js index 8124b8c688f..e10b0524666 100644 --- a/packages/wasm-dpp/test/integration/dataContract/DataContractFacade.spec.js +++ b/packages/wasm-dpp/test/integration/dataContract/DataContractFacade.spec.js @@ -1,11 +1,13 @@ const getDataContractJSFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture'); const crypto = require('crypto'); const getBlsAdapterMock = require('../../../lib/test/mocks/getBlsAdapterMock'); +const createStateRepositoryMock = require('../../../lib/test/mocks/createStateRepositoryMock'); +const getPrivateAndPublicKey = require('../../../lib/test/fixtures/getPrivateAndPublicKeyForSigningFixture'); const { default: loadWasmDpp } = require('../../..'); let { DashPlatformProtocol, DataContract, ValidationResult, DataContractValidator, - DataContractFactory, DataContractCreateTransition, + DataContractFactory, DataContractCreateTransition, DataContractUpdateTransition, } = require('../../..'); describe('DataContractFacade', () => { @@ -15,18 +17,21 @@ describe('DataContractFacade', () => { let blsAdapter; let rawDataContract; let dataContractWasm; + let stateTransitionMock; before(async () => { ({ DashPlatformProtocol, DataContract, ValidationResult, DataContractValidator, DataContractFactory, DataContractCreateTransition, + DataContractUpdateTransition, } = await loadWasmDpp()); }); - beforeEach(async () => { + beforeEach(async function beforeEach() { blsAdapter = await getBlsAdapterMock(); + stateTransitionMock = createStateRepositoryMock(this.sinonSandbox); dpp = new DashPlatformProtocol( - blsAdapter, {}, { generate: () => crypto.randomBytes(32) }, 1, + blsAdapter, stateTransitionMock, { generate: () => crypto.randomBytes(32) }, 1, ); dataContractJs = await getDataContractJSFixture(); @@ -92,6 +97,38 @@ describe('DataContractFacade', () => { }); }); + describe('createDataContractUpdateTransition', () => { + it('should create DataContractUpdateTransition from buffer', async () => { + const dataContractBuffer = Buffer.from('01a56324696458205a3c9565f215156cfb330ef3a4a4400a1dad7415f4f1480e072d3419bb29c12c6724736368656d61783468747470733a2f2f736368656d612e646173682e6f72672f6470702d302d342d302f6d6574612f646174612d636f6e7472616374676f776e657249645820d5199a5b19334554d5dd483af53877251584ab9a66ca777bd1b2e8d2ec4808346776657273696f6e0169646f63756d656e7473a36c6e696365446f63756d656e74a46474797065666f626a656374687265717569726564816a246372656174656441746a70726f70657274696573a1646e616d65a1647479706566737472696e67746164646974696f6e616c50726f70657274696573f46e7769746842797465417272617973a56474797065666f626a65637467696e646963657381a2646e616d6566696e646578316a70726f7065727469657381a16e6279746541727261794669656c6463617363687265717569726564816e6279746541727261794669656c646a70726f70657274696573a26e6279746541727261794669656c64a36474797065656172726179686d61784974656d731069627974654172726179f56f6964656e7469666965724669656c64a56474797065656172726179686d61784974656d731820686d696e4974656d73182069627974654172726179f570636f6e74656e744d656469615479706578216170706c69636174696f6e2f782e646173682e6470702e6964656e746966696572746164646974696f6e616c50726f70657274696573f46f696e6465786564446f63756d656e74a56474797065666f626a65637467696e646963657386a3646e616d6566696e646578316a70726f7065727469657382a168246f776e6572496463617363a16966697273744e616d656361736366756e69717565f5a3646e616d6566696e646578326a70726f7065727469657382a168246f776e6572496463617363a1686c6173744e616d656361736366756e69717565f5a2646e616d6566696e646578336a70726f7065727469657381a1686c6173744e616d6563617363a2646e616d6566696e646578346a70726f7065727469657382a16a2463726561746564417463617363a16a2475706461746564417463617363a2646e616d6566696e646578356a70726f7065727469657381a16a2475706461746564417463617363a2646e616d6566696e646578366a70726f7065727469657381a16a2463726561746564417463617363687265717569726564846966697273744e616d656a246372656174656441746a24757064617465644174686c6173744e616d656a70726f70657274696573a2686c6173744e616d65a2647479706566737472696e67696d61784c656e677468183f6966697273744e616d65a2647479706566737472696e67696d61784c656e677468183f746164646974696f6e616c50726f70657274696573f4', 'hex'); + + const dataContract = await dpp.dataContract.createFromBuffer(dataContractBuffer); + + const updatedDataContract = await dpp.dataContract.createFromObject( + dataContract.toObject(), + ); + + updatedDataContract.incrementVersion(); + + const dataContractUpdateTransition = dpp.dataContract + .createDataContractUpdateTransition(updatedDataContract); + + const { identityPublicKey, privateKey } = await getPrivateAndPublicKey(); + + dataContractUpdateTransition.sign( + identityPublicKey, + privateKey, + await getBlsAdapterMock(), + ); + + const buf = dataContractUpdateTransition.toBuffer(); + stateTransitionMock.fetchDataContract.resolves(dataContract); + + const st = await dpp.stateTransition.createFromBuffer(buf); + + expect(st).to.be.an.instanceOf(DataContractUpdateTransition); + }); + }); + describe('validate', () => { it('should validate DataContract', async () => { const result = await dpp.dataContract.validate(rawDataContract); diff --git a/packages/wasm-dpp/test/integration/dataContract/validation/validateDataContractFactory.spec.js b/packages/wasm-dpp/test/integration/dataContract/validation/validateDataContractFactory.spec.js index c4848023c71..d318e7f8c51 100644 --- a/packages/wasm-dpp/test/integration/dataContract/validation/validateDataContractFactory.spec.js +++ b/packages/wasm-dpp/test/integration/dataContract/validation/validateDataContractFactory.spec.js @@ -1074,7 +1074,7 @@ describe('validateDataContractFactory', () => { properties: { something: { type: 'string', - format: 'url', + format: 'uri', }, }, additionalProperties: false, @@ -1098,7 +1098,7 @@ describe('validateDataContractFactory', () => { properties: { something: { type: 'string', - format: 'url', + format: 'uri', maxLength: 60000, }, }, diff --git a/packages/wasm-dpp/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js b/packages/wasm-dpp/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js index c763c5841b7..a620b50b5c6 100644 --- a/packages/wasm-dpp/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +++ b/packages/wasm-dpp/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js @@ -112,7 +112,7 @@ describe('validateIdentityUpdateTransitionStateFactory', () => { it('should return IdentityPublicKeyIsDisabledError if disabling public key is already disabled', async () => { const keys = identity.getPublicKeys(); - keys[0].setDisabledAt(new Date().getTime()); + keys[0].setDisabledAt(new Date()); identity.setPublicKeys(keys); stateTransition.setPublicKeyIdsToDisable([0]); diff --git a/packages/wasm-dpp/test/integration/util/generateTemporaryEcdsaPrivateKey.spec.js b/packages/wasm-dpp/test/integration/util/generateTemporaryEcdsaPrivateKey.spec.js new file mode 100644 index 00000000000..ca4bb7182af --- /dev/null +++ b/packages/wasm-dpp/test/integration/util/generateTemporaryEcdsaPrivateKey.spec.js @@ -0,0 +1,17 @@ +const { PrivateKey } = require('@dashevo/dashcore-lib'); +const { default: loadWasmDpp } = require('../../..'); + +let { generateTemporaryEcdsaPrivateKey } = require('../../..'); + +describe('generateTemporaryEcdsaPrivateKey', () => { + beforeEach(async () => { + ({ generateTemporaryEcdsaPrivateKey } = await loadWasmDpp()); + }); + + it('should generate a valid private key', () => { + const keyBase64 = generateTemporaryEcdsaPrivateKey(); + + // eslint-disable-next-line + const _key = new PrivateKey(keyBase64); + }); +}); diff --git a/packages/wasm-dpp/test/unit/dataContract/DataContract.spec.js b/packages/wasm-dpp/test/unit/dataContract/DataContract.spec.js index 5d8072feb55..8197e3be90f 100644 --- a/packages/wasm-dpp/test/unit/dataContract/DataContract.spec.js +++ b/packages/wasm-dpp/test/unit/dataContract/DataContract.spec.js @@ -189,6 +189,7 @@ describe('DataContract', () => { expect(anotherDocuments).to.have.property(anotherType); expect(anotherDocuments[anotherType]).to.deep.equal(anotherDefinition); + expect(dataContract.isDocumentDefined(anotherType)).to.be.true(); }); }); diff --git a/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js b/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js index 82a0a1b8020..b3f60695336 100644 --- a/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +++ b/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js @@ -34,7 +34,7 @@ describe('applyDataContractUpdateTransitionFactory', () => { stateTransition.setExecutionContext(executionContext); const stateRepositoryLike = { - storeDataContract: async () => { + updateDataContract: async () => { dataContractStored = true; }, }; diff --git a/packages/wasm-dpp/test/unit/document/Document.spec.js b/packages/wasm-dpp/test/unit/document/Document.spec.js index c366066d243..a728c43eef0 100644 --- a/packages/wasm-dpp/test/unit/document/Document.spec.js +++ b/packages/wasm-dpp/test/unit/document/Document.spec.js @@ -277,7 +277,7 @@ describe('Document', () => { document = new ExtendedDocument(rawDocument, dataContract); - expect(document.getCreatedAt()).to.equal(rawDocument.$createdAt); + expect(document.getCreatedAt().getTime()).to.equal(rawDocument.$createdAt); }); it('should create Document with $updatedAt and data if present', async () => { @@ -298,7 +298,7 @@ describe('Document', () => { document = new ExtendedDocument(rawDocument, dataContract); - expect(document.getUpdatedAt()).to.equal(rawDocument.$updatedAt); + expect(document.getUpdatedAt().getTime()).to.equal(rawDocument.$updatedAt); }); }); @@ -461,41 +461,41 @@ describe('Document', () => { describe('#setCreatedAt', () => { it('should set $createdAt', () => { - const time = new Date().getTime(); + const time = new Date(); document.setCreatedAt(time); - expect(document.getCreatedAt()).to.equal(time); + expect(document.getCreatedAt()).to.deep.equal(time); }); }); describe('#getCreatedAt', () => { it('should return $createdAt', () => { - const time = new Date().getTime(); + const time = new Date(); document.setCreatedAt(time); - expect(document.getCreatedAt()).to.equal(time); + expect(document.getCreatedAt()).to.deep.equal(time); }); }); describe('#setUpdatedAt', () => { it('should set $updatedAt', () => { - const time = new Date().getTime(); + const time = new Date(); document.setUpdatedAt(time); - expect(document.getUpdatedAt()).to.equal(time); + expect(document.getUpdatedAt()).to.deep.equal(time); }); }); describe('#getUpdatedAt', () => { it('should return $updatedAt', () => { - const time = new Date().getTime(); + const time = new Date(); document.setUpdatedAt(time); - expect(document.getUpdatedAt()).to.equal(time); + expect(document.getUpdatedAt()).to.deep.equal(time); }); }); }); diff --git a/packages/wasm-dpp/test/unit/document/DocumentFactory.spec.js b/packages/wasm-dpp/test/unit/document/DocumentFactory.spec.js index 22177e253b0..b8102c8dc8e 100644 --- a/packages/wasm-dpp/test/unit/document/DocumentFactory.spec.js +++ b/packages/wasm-dpp/test/unit/document/DocumentFactory.spec.js @@ -154,7 +154,7 @@ describe('DocumentFactory', () => { // in a true unit test. Not here. expect(newDocument.getEntropy()).not.to.deep.be.equal(Buffer.alloc(32)); - expect(newDocument.getCreatedAt()).to.be.an('number'); + expect(newDocument.getCreatedAt()).to.be.an.instanceOf(Date); }); it('should throw an error if type is not defined', () => { diff --git a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js index 58f6b9d0c27..ff0eb0f436e 100644 --- a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +++ b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js @@ -242,7 +242,7 @@ describe('applyDocumentsBatchTransitionFactory', () => { $type: documentTransition.getType(), $dataContractId: documentTransition.getDataContractId(), $ownerId: ownerId, - $createdAt: documentTransition.getUpdatedAt(), + $createdAt: documentTransition.getUpdatedAt().getTime(), ...documentTransition.getData(), }, documentTransition.getDataContract()); diff --git a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js index 7f1182c6da0..70454eb0c09 100644 --- a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +++ b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js @@ -233,7 +233,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => { transitions: documentTransitionsJs.map((t) => t.toObject()), }, [dataContract]); - documents[0].setCreatedAt(replaceDocument.getCreatedAt().getMilliseconds()); + documents[0].setCreatedAt(replaceDocument.getCreatedAt()); stateRepositoryMock.fetchDocuments.resolves([documents[0].getDocument()]); const result = await validateDocumentsBatchTransitionState( @@ -352,7 +352,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => { const transitions = stateTransition.getTransitions(); transitions.forEach((t) => { // eslint-disable-next-line no-param-reassign - t.setUpdatedAt(new Date().getMilliseconds()); + t.setUpdatedAt(new Date()); }); stateTransition.setTransitions(transitions); @@ -380,8 +380,8 @@ describe('validateDocumentsBatchTransitionStateFactory', () => { const transitions = stateTransition.getTransitions(); transitions.forEach((t) => { - const createdAtMinus6Mins = t.getCreatedAt() - (6 * 60 * 1000); - t.setCreatedAt(createdAtMinus6Mins); + const createdAtMinus6Mins = t.getCreatedAt().getTime() - (6 * 60 * 1000); + t.setCreatedAt(new Date(createdAtMinus6Mins)); t.setUpdatedAt(undefined); }); stateTransition.setTransitions(transitions); @@ -418,8 +418,8 @@ describe('validateDocumentsBatchTransitionStateFactory', () => { const transitions = stateTransition.getTransitions(); transitions.forEach((t) => { - const createdAtMinus6Mins = t.getUpdatedAt() - (6 * 60 * 1000); - t.setUpdatedAt(createdAtMinus6Mins); + const createdAtMinus6Mins = t.getUpdatedAt().getTime() - (6 * 60 * 1000); + t.setUpdatedAt(new Date(createdAtMinus6Mins)); t.setCreatedAt(undefined); }); stateTransition.setTransitions(transitions); @@ -466,8 +466,8 @@ describe('validateDocumentsBatchTransitionStateFactory', () => { const transitions = stateTransition.getTransitions(); transitions.forEach((t) => { - const createdAtMinus6Mins = t.getUpdatedAt() - (6 * 60 * 1000); - t.setUpdatedAt(createdAtMinus6Mins); + const createdAtMinus6Mins = t.getUpdatedAt().getTime() - (6 * 60 * 1000); + t.setUpdatedAt(new Date(createdAtMinus6Mins)); t.setCreatedAt(undefined); }); stateTransition.setTransitions(transitions); @@ -499,7 +499,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => { const transitions = stateTransition.getTransitions(); transitions.forEach((t) => { // eslint-disable-next-line no-param-reassign - t.setUpdatedAt(new Date().getMilliseconds()); + t.setUpdatedAt(new Date()); }); stateTransition.getExecutionContext().enableDryRun(); @@ -534,8 +534,8 @@ describe('validateDocumentsBatchTransitionStateFactory', () => { const transitions = stateTransition.getTransitions(); transitions.forEach((t) => { - const createdAtMinus6Mins = t.getUpdatedAt() - (6 * 60 * 1000); - t.setUpdatedAt(createdAtMinus6Mins); + const createdAtMinus6Mins = t.getUpdatedAt().getTime() - (6 * 60 * 1000); + t.setUpdatedAt(new Date(createdAtMinus6Mins)); }); stateTransition.setTransitions(transitions); @@ -581,8 +581,8 @@ describe('validateDocumentsBatchTransitionStateFactory', () => { stateRepositoryMock.fetchExtendedDocuments.resolves([documentToReturn]); const transitions = stateTransition.getTransitions(); transitions.forEach((t) => { - const createdAtMinus6Mins = t.getUpdatedAt() - (6 * 60 * 1000); - t.setUpdatedAt(createdAtMinus6Mins); + const createdAtMinus6Mins = t.getUpdatedAt().getTime() - (6 * 60 * 1000); + t.setUpdatedAt(new Date(createdAtMinus6Mins)); }); stateTransition.setTransitions(transitions); stateTransition.getExecutionContext().enableDryRun(); diff --git a/packages/wasm-dpp/test/unit/identity/IdentityPublicKey.spec.js b/packages/wasm-dpp/test/unit/identity/IdentityPublicKey.spec.js index 5652950a6ef..ff56b095a39 100644 --- a/packages/wasm-dpp/test/unit/identity/IdentityPublicKey.spec.js +++ b/packages/wasm-dpp/test/unit/identity/IdentityPublicKey.spec.js @@ -119,17 +119,19 @@ describe('IdentityPublicKey', () => { describe('#setDisabledAt', () => { it('should set disabledAt', () => { - publicKey.setDisabledAt(123); + const now = new Date(); + publicKey.setDisabledAt(now); - expect(publicKey.getDisabledAt()).to.equal(123); + expect(publicKey.getDisabledAt()).to.deep.equal(now); }); }); describe('#getDisabledAt', () => { it('should return disabledAt', () => { - publicKey.setDisabledAt(42); + const now = new Date(); + publicKey.setDisabledAt(now); - expect(publicKey.getDisabledAt()).to.equal(42); + expect(publicKey.getDisabledAt()).to.deep.equal(now); }); }); @@ -218,7 +220,8 @@ describe('IdentityPublicKey', () => { }); it('should return JSON representation with optional properties', () => { - publicKey.setDisabledAt(42); + const now = new Date(); + publicKey.setDisabledAt(now); const jsonPublicKey = publicKey.toJSON(); @@ -229,7 +232,7 @@ describe('IdentityPublicKey', () => { purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION, securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER, readOnly: false, - disabledAt: 42, + disabledAt: now.getTime(), }); }); }); diff --git a/packages/wasm-dpp/test/unit/stateTransition/StateTransitionExecutionContext.spec.js b/packages/wasm-dpp/test/unit/stateTransition/StateTransitionExecutionContext.spec.js index 7975bd4690c..1c93b9f9e07 100644 --- a/packages/wasm-dpp/test/unit/stateTransition/StateTransitionExecutionContext.spec.js +++ b/packages/wasm-dpp/test/unit/stateTransition/StateTransitionExecutionContext.spec.js @@ -36,7 +36,10 @@ describe('StateTransitionExecutionContext', () => { }); it('should add PreCalculatedOperation', () => { - executionContext.addOperation(new PreCalculatedOperation(1, 1, [])); + executionContext.addOperation(new PreCalculatedOperation(1, 1, [{ + identifier: Buffer.alloc(32).fill(32), + creditsPerEpoch: { 0: 9991498 }, + }])); const operations = executionContext.getOperations(); expect(operations[0]).to.be.instanceOf(PreCalculatedOperation); }); diff --git a/packages/wasm-dpp/test/unit/stateTransition/StateTransitionFactory.spec.js b/packages/wasm-dpp/test/unit/stateTransition/StateTransitionFactory.spec.js index b12036924b0..6cc06da0d66 100644 --- a/packages/wasm-dpp/test/unit/stateTransition/StateTransitionFactory.spec.js +++ b/packages/wasm-dpp/test/unit/stateTransition/StateTransitionFactory.spec.js @@ -88,8 +88,9 @@ describe('StateTransitionFactory', function main() { expect(result.toObject()).to.deep.equal(stateTransition.toObject()); }); - it('should throw InvalidStateTransition error in case validation failed', async () => { + it.skip('should throw InvalidStateTransition error in case validation failed', async () => { // CBOR that have invalid "type" property + // TODO: make it an actually missing field isntead of an invalid value const stateTransitionHex = '01a56c64617461436f6e7472616374a66f70726f746f636f6c56657273696f6e0163246964982018a318b611186f184718781848187d186318441830182c185518fe18e318ff188b18eb185918490218ac1831187b1873184a182c18d9189b1886182418bf6724736368656d61783468747470733a2f2f736368656d612e646173682e6f72672f6470702d302d342d302f6d6574612f646174612d636f6e74726163746776657273696f6e01676f776e657249649820187618a6185c189e18651833183d18aa02189e0d18a61869182818c107183e188908184f183818d018220418c01839161860187418ae18dd189969646f63756d656e7473a76f696e6465786564446f63756d656e74a56474797065666f626a65637467696e646963657386a3646e616d6566696e646578316a70726f7065727469657382a168246f776e6572496463617363a16966697273744e616d656361736366756e69717565f5a3646e616d6566696e646578326a70726f7065727469657382a168246f776e6572496463617363a1686c6173744e616d656361736366756e69717565f5a3646e616d6566696e646578336a70726f7065727469657381a1686c6173744e616d656361736366756e69717565f4a2646e616d6566696e646578346a70726f7065727469657382a16a2463726561746564417463617363a16a2475706461746564417463617363a2646e616d6566696e646578356a70726f7065727469657381a16a2475706461746564417463617363a2646e616d6566696e646578366a70726f7065727469657381a16a24637265617465644174636173636a70726f70657274696573a36966697273744e616d65a2647479706566737472696e67696d61784c656e677468183f686c6173744e616d65a2647479706566737472696e67696d61784c656e677468183f6d6f7468657250726f7065727479a2647479706566737472696e67696d61784c656e677468182a687265717569726564846966697273744e616d656a246372656174656441746a24757064617465644174686c6173744e616d65746164646974696f6e616c50726f70657274696573f46c6e696365446f63756d656e74a46474797065666f626a6563746a70726f70657274696573a1646e616d65a1647479706566737472696e67687265717569726564816a24637265617465644174746164646974696f6e616c50726f70657274696573f46e6e6f54696d65446f63756d656e74a36474797065666f626a6563746a70726f70657274696573a1646e616d65a1647479706566737472696e67746164646974696f6e616c50726f70657274696573f4781d6f7074696f6e616c556e69717565496e6465786564446f63756d656e74a56474797065666f626a6563746a70726f70657274696573a46966697273744e616d65a2647479706566737472696e67696d61784c656e677468183f686c6173744e616d65a2647479706566737472696e67696d61784c656e677468183f67636f756e747279a2647479706566737472696e67696d61784c656e677468183f6463697479a2647479706566737472696e67696d61784c656e677468183f67696e646963657383a3646e616d6566696e646578316a70726f7065727469657381a16966697273744e616d656361736366756e69717565f5a3646e616d6566696e646578326a70726f7065727469657383a168246f776e6572496463617363a16966697273744e616d6563617363a1686c6173744e616d656361736366756e69717565f5a3646e616d6566696e646578336a70726f7065727469657382a167636f756e74727963617363a164636974796361736366756e69717565f5687265717569726564826966697273744e616d65686c6173744e616d65746164646974696f6e616c50726f70657274696573f46e707265747479446f63756d656e74a46474797065666f626a6563746a70726f70657274696573a1686c6173744e616d65a1647479706566737472696e6768726571756972656482686c6173744e616d656a24757064617465644174746164646974696f6e616c50726f70657274696573f46b756e697175654461746573a56474797065666f626a65637467696e646963657382a3646e616d6566696e646578316a70726f7065727469657382a16a2463726561746564417463617363a16a247570646174656441746361736366756e69717565f5a2646e616d6566696e646578326a70726f7065727469657381a16a24757064617465644174636173636a70726f70657274696573a26966697273744e616d65a1647479706566737472696e67686c6173744e616d65a1647479706566737472696e67687265717569726564836966697273744e616d656a246372656174656441746a24757064617465644174746164646974696f6e616c50726f70657274696573f46e7769746842797465417272617973a56474797065666f626a65637467696e646963657381a2646e616d6566696e646578316a70726f7065727469657381a16e6279746541727261794669656c64636173636a70726f70657274696573a26e6279746541727261794669656c64a3647479706565617272617969627974654172726179f5686d61784974656d73106f6964656e7469666965724669656c64a5647479706565617272617969627974654172726179f570636f6e74656e744d656469615479706578216170706c69636174696f6e2f782e646173682e6470702e6964656e746966696572686d696e4974656d731820686d61784974656d731820687265717569726564816e6279746541727261794669656c64746164646974696f6e616c50726f70657274696573f464747970652267656e74726f70799820189618d10418b2071882188e188818fc18b7189818dd185c18811881189b1867187912183d184d187118ff1866181d185f1839188718ea1824185113747369676e61747572655075626c69634b6579496400697369676e617475726598410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'; const stateTransitionBuffer = Buffer.from(stateTransitionHex, 'hex'); diff --git a/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js b/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js index 6ea8d48c3ea..9200f17f087 100644 --- a/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js +++ b/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js @@ -275,7 +275,7 @@ describe('validateStateTransitionIdentitySignatureFactory', () => { it('should return PublicKeyIsDisabledConsensusError if PublicKeyIsDisabledError was thrown', async () => { const publicKeys = identity.getPublicKeys(); - publicKeys[2].setDisabledAt(Date.now()); + publicKeys[2].setDisabledAt(new Date()); identity.setPublicKeys(publicKeys); const result = await validateStateTransitionIdentitySignature( @@ -315,7 +315,7 @@ describe('validateStateTransitionIdentitySignatureFactory', () => { it('should not verify signature on dry run', async () => { // This will produce an error during signature validation const publicKeys = identity.getPublicKeys(); - publicKeys[2].setDisabledAt(Date.now()); + publicKeys[2].setDisabledAt(new Date()); identity.setPublicKeys(publicKeys); executionContext.enableDryRun(); From ad650905ade52d7df67595741b331d0afb520117 Mon Sep 17 00:00:00 2001 From: Anton Suprunchuk Date: Mon, 10 Apr 2023 20:10:48 +0700 Subject: [PATCH 02/13] run cargo fix and cargo fmt --- Cargo.lock | 13 +++++++++++++ .../src/data_trigger/dashpay_data_triggers/mod.rs | 2 +- packages/rs-dpp/src/data_trigger/mod.rs | 2 +- .../data_trigger/reward_share_data_triggers/mod.rs | 3 +-- packages/rs-drive-verify-c-binding/build.rs | 2 -- packages/rs-drive-verify-c-binding/src/lib.rs | 4 ++-- packages/rs-drive-verify-c-binding/src/util.rs | 4 +--- .../data_contract_update_transition/mod.rs | 2 -- packages/wasm-dpp/src/document/mod.rs | 3 +-- .../document_create_transition.rs | 2 +- .../document_replace_transition.rs | 2 +- .../document_transition/mod.rs | 3 +-- .../basic/incompatible_protocol_version_error.rs | 2 +- .../src/errors/consensus/basic/json_schema_error.rs | 2 -- .../public_key_security_level_not_met_error.rs | 2 +- .../src/errors/consensus/consensus_error.rs | 3 +-- .../data_contract_already_present_error.rs | 2 +- packages/wasm-dpp/src/errors/from.rs | 1 - .../src/generate_temporary_ecdsa_private_key.rs | 8 ++------ .../identity_update_transition.rs | 2 -- .../src/state_transition/state_transition_facade.rs | 3 +-- .../validate_state_transition_identity_signature.rs | 2 +- 22 files changed, 31 insertions(+), 38 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8375b19b443..1e55fa4ff70 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3479,12 +3479,25 @@ dependencies = [ "dpp", "itertools", "js-sys", + "log", "serde", "serde-wasm-bindgen", "serde_json", "thiserror", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-logger", + "web-sys", +] + +[[package]] +name = "wasm-logger" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "074649a66bb306c8f2068c9016395fa65d8e08d2affcbf95acf3c24c3ab19718" +dependencies = [ + "log", + "wasm-bindgen", "web-sys", ] diff --git a/packages/rs-dpp/src/data_trigger/dashpay_data_triggers/mod.rs b/packages/rs-dpp/src/data_trigger/dashpay_data_triggers/mod.rs index 9a46ad4ffe3..f7a7b3e785e 100644 --- a/packages/rs-dpp/src/data_trigger/dashpay_data_triggers/mod.rs +++ b/packages/rs-dpp/src/data_trigger/dashpay_data_triggers/mod.rs @@ -2,7 +2,7 @@ use anyhow::{anyhow, bail}; use platform_value::btreemap_extensions::BTreeValueMapHelper; use crate::consensus::state::data_trigger::data_trigger_condition_error::DataTriggerConditionError; -use crate::consensus::state::data_trigger::data_trigger_error::DataTriggerError; + use crate::data_trigger::dashpay_data_triggers::property_names::CORE_HEIGHT_CREATED_AT; use crate::{ document::document_transition::DocumentTransition, get_from_transition, prelude::Identifier, diff --git a/packages/rs-dpp/src/data_trigger/mod.rs b/packages/rs-dpp/src/data_trigger/mod.rs index c1abf50f336..f00e2634a77 100644 --- a/packages/rs-dpp/src/data_trigger/mod.rs +++ b/packages/rs-dpp/src/data_trigger/mod.rs @@ -5,7 +5,7 @@ pub use reject_data_trigger::*; use crate::consensus::state::data_trigger::data_trigger_condition_error::DataTriggerConditionError; use crate::consensus::state::data_trigger::data_trigger_error::DataTriggerError; use crate::consensus::state::data_trigger::data_trigger_execution_error::DataTriggerExecutionError; -use crate::document::document_transition::{Action, DocumentCreateTransition, DocumentTransition}; +use crate::document::document_transition::{Action, DocumentTransition}; use crate::{get_from_transition, prelude::Identifier, state_repository::StateRepositoryLike}; use self::dashpay_data_triggers::create_contact_request_data_trigger; diff --git a/packages/rs-dpp/src/data_trigger/reward_share_data_triggers/mod.rs b/packages/rs-dpp/src/data_trigger/reward_share_data_triggers/mod.rs index 64404534f9c..625b662986c 100644 --- a/packages/rs-dpp/src/data_trigger/reward_share_data_triggers/mod.rs +++ b/packages/rs-dpp/src/data_trigger/reward_share_data_triggers/mod.rs @@ -9,8 +9,7 @@ use serde_json::json; use crate::document::Document; use crate::{ data_trigger::create_error, document::document_transition::DocumentTransition, - get_from_transition, mocks::SMLStore, prelude::Identifier, - state_repository::StateRepositoryLike, ProtocolError, + get_from_transition, prelude::Identifier, state_repository::StateRepositoryLike, ProtocolError, }; use super::{DataTriggerExecutionContext, DataTriggerExecutionResult}; diff --git a/packages/rs-drive-verify-c-binding/build.rs b/packages/rs-drive-verify-c-binding/build.rs index 9369ce57341..1d94716d7fc 100644 --- a/packages/rs-drive-verify-c-binding/build.rs +++ b/packages/rs-drive-verify-c-binding/build.rs @@ -1,5 +1,3 @@ - - use std::env; fn main() { diff --git a/packages/rs-drive-verify-c-binding/src/lib.rs b/packages/rs-drive-verify-c-binding/src/lib.rs index ebf54d86c68..af767acdb12 100644 --- a/packages/rs-drive-verify-c-binding/src/lib.rs +++ b/packages/rs-drive-verify-c-binding/src/lib.rs @@ -8,11 +8,11 @@ use crate::types::{ PublicKeyHashIdentityMap, }; use crate::util::{build_c_identity_struct, extract_vector_from_pointer, vec_to_pointer}; +use drive::drive::verify::AssetLockProof as DppAssetLockProof; use drive::drive::verify::Identity as DppIdentity; -use drive::drive::verify::{AssetLockProof as DppAssetLockProof}; use drive::drive::Drive; use std::collections::BTreeMap; -use std::{slice}; +use std::slice; #[no_mangle] pub unsafe extern "C" fn verify_full_identity_by_public_key_hash( diff --git a/packages/rs-drive-verify-c-binding/src/util.rs b/packages/rs-drive-verify-c-binding/src/util.rs index 3d8cf531096..1a0f6dee355 100644 --- a/packages/rs-drive-verify-c-binding/src/util.rs +++ b/packages/rs-drive-verify-c-binding/src/util.rs @@ -1,6 +1,4 @@ -use crate::types::{ - AssetLockProof, IdPublicKeyMap, Identity, IdentityPublicKey, MetaData, -}; +use crate::types::{AssetLockProof, IdPublicKeyMap, Identity, IdentityPublicKey, MetaData}; use crate::{DppAssetLockProof, DppIdentity}; use std::{mem, slice}; diff --git a/packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs b/packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs index 36696cafe99..7dfd4f2509c 100644 --- a/packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs +++ b/packages/wasm-dpp/src/data_contract/state_transition/data_contract_update_transition/mod.rs @@ -6,8 +6,6 @@ use std::collections::HashMap; pub use apply::*; pub use validation::*; -use dpp::consensus::ConsensusError::SignatureError as ConsensusSignatureErrorVariant; - use dpp::consensus::ConsensusError; use dpp::{ consensus::signature::SignatureError, diff --git a/packages/wasm-dpp/src/document/mod.rs b/packages/wasm-dpp/src/document/mod.rs index ccb969231db..b66b6c5facc 100644 --- a/packages/wasm-dpp/src/document/mod.rs +++ b/packages/wasm-dpp/src/document/mod.rs @@ -1,4 +1,3 @@ -use dpp::dashcore::anyhow::Context; use dpp::prelude::{DataContract, Identifier}; use dpp::util::json_schema::JsonSchemaExt; @@ -11,7 +10,7 @@ use crate::buffer::Buffer; use crate::identifier::IdentifierWrapper; use crate::lodash::lodash_set; -use crate::utils::{try_to_u64, WithJsError}; +use crate::utils::WithJsError; use crate::utils::{with_serde_to_json_value, ToSerdeJSONExt}; use crate::with_js_error; use crate::DataContractWasm; diff --git a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs index c5f0c771f2f..4b9b146b360 100644 --- a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +++ b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs @@ -2,7 +2,7 @@ use std::convert; use std::convert::TryInto; use dpp::document::document_transition::document_base_transition::JsonValue; -use dpp::identity::TimestampMillis; + use dpp::platform_value::btreemap_extensions::{ BTreeValueMapHelper, BTreeValueMapPathHelper, BTreeValueMapReplacementPathHelper, }; diff --git a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs index 49dda970b4c..49113378ee1 100644 --- a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +++ b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs @@ -2,7 +2,7 @@ use std::convert; use std::convert::TryInto; use dpp::document::document_transition::document_base_transition::JsonValue; -use dpp::identity::TimestampMillis; + use dpp::platform_value::btreemap_extensions::{ BTreeValueMapHelper, BTreeValueMapPathHelper, BTreeValueMapReplacementPathHelper, }; diff --git a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs index 3a983bd9140..08390b443a0 100644 --- a/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs +++ b/packages/wasm-dpp/src/document/state_transition/document_batch_transition/document_transition/mod.rs @@ -2,7 +2,6 @@ mod document_create_transition; mod document_delete_transition; mod document_replace_transition; -use anyhow::Context; pub use document_create_transition::*; pub use document_delete_transition::*; pub use document_replace_transition::*; @@ -26,7 +25,7 @@ use crate::{ buffer::Buffer, identifier::{identifier_from_js_value, IdentifierWrapper}, lodash::lodash_set, - utils::{try_to_u64, Inner, ToSerdeJSONExt, WithJsError}, + utils::{Inner, ToSerdeJSONExt, WithJsError}, with_js_error, BinaryType, ConversionOptions, DataContractWasm, }; diff --git a/packages/wasm-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs index 5db257b8c70..f93a4a9ce07 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs @@ -2,7 +2,7 @@ use crate::buffer::Buffer; use dpp::consensus::basic::IncompatibleProtocolVersionError; use dpp::consensus::codes::ErrorWithCode; use dpp::consensus::ConsensusError; -use dpp::errors::ProtocolError; + use wasm_bindgen::prelude::*; #[wasm_bindgen(js_name=IncompatibleProtocolVersionError)] diff --git a/packages/wasm-dpp/src/errors/consensus/basic/json_schema_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/json_schema_error.rs index 8623921db25..5682e07ccff 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/json_schema_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/json_schema_error.rs @@ -5,8 +5,6 @@ use dpp::errors::consensus::codes::ErrorWithCode; use dpp::errors::consensus::ConsensusError; -use serde_json::Value; - use crate::buffer::Buffer; use wasm_bindgen::prelude::*; diff --git a/packages/wasm-dpp/src/errors/consensus/basic/public_key_security_level_not_met_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/public_key_security_level_not_met_error.rs index 394f98b5f11..c48e235a7f0 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/public_key_security_level_not_met_error.rs @@ -3,7 +3,7 @@ use crate::Serialize; use dpp::consensus::codes::ErrorWithCode; use dpp::consensus::signature::PublicKeySecurityLevelNotMetError; use dpp::consensus::ConsensusError; -use dpp::identity::SecurityLevel; + use wasm_bindgen::prelude::*; #[derive(Serialize)] diff --git a/packages/wasm-dpp/src/errors/consensus/consensus_error.rs b/packages/wasm-dpp/src/errors/consensus/consensus_error.rs index ce4a3baa968..6b899e49739 100644 --- a/packages/wasm-dpp/src/errors/consensus/consensus_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/consensus_error.rs @@ -46,7 +46,7 @@ use dpp::consensus::fee::fee_error::FeeError; use dpp::consensus::signature::SignatureError; use dpp::consensus::state::data_trigger::data_trigger_error::DataTriggerError; use dpp::consensus::state::state_error::StateError; -use dpp::errors::consensus::codes::ErrorWithCode; + use wasm_bindgen::JsValue; use crate::errors::consensus::basic::data_contract::{ @@ -79,7 +79,6 @@ use crate::errors::consensus::state::identity::{ InvalidIdentityPublicKeyIdErrorWasm, InvalidIdentityRevisionErrorWasm, MaxIdentityPublicKeyLimitReachedErrorWasm, }; -use crate::errors::value_error::PlatformValueErrorWasm; use crate::errors::consensus::basic::data_contract::{ DataContractMaxDepthExceedErrorWasm, DuplicateIndexErrorWasm, DuplicateIndexNameErrorWasm, diff --git a/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs b/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs index ef4b7fa0dec..669c003ee91 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs @@ -3,7 +3,7 @@ use crate::identifier::IdentifierWrapper; use dpp::consensus::codes::ErrorWithCode; use dpp::consensus::state::data_contract::data_contract_already_present_error::DataContractAlreadyPresentError; use dpp::consensus::ConsensusError; -use dpp::identifier::Identifier; + use wasm_bindgen::prelude::*; #[wasm_bindgen(js_name=DataContractAlreadyPresentError)] diff --git a/packages/wasm-dpp/src/errors/from.rs b/packages/wasm-dpp/src/errors/from.rs index 658a798b169..022c79ce77e 100644 --- a/packages/wasm-dpp/src/errors/from.rs +++ b/packages/wasm-dpp/src/errors/from.rs @@ -1,4 +1,3 @@ -use dpp::consensus::basic::value_error::ValueError; use dpp::DashPlatformProtocolInitError; use wasm_bindgen::JsValue; diff --git a/packages/wasm-dpp/src/generate_temporary_ecdsa_private_key.rs b/packages/wasm-dpp/src/generate_temporary_ecdsa_private_key.rs index 2fa33a91d21..38854a3f64b 100644 --- a/packages/wasm-dpp/src/generate_temporary_ecdsa_private_key.rs +++ b/packages/wasm-dpp/src/generate_temporary_ecdsa_private_key.rs @@ -1,10 +1,6 @@ -use crate::buffer::Buffer; use dpp::dashcore::secp256k1::rand::thread_rng; -use dpp::dashcore::secp256k1::Secp256k1; -use dpp::dashcore::{ - secp256k1::SecretKey, InstantLock, Network, OutPoint, PrivateKey, Script, Transaction, TxIn, - TxOut, Txid, -}; + +use dpp::dashcore::{secp256k1::SecretKey, Network, PrivateKey}; use wasm_bindgen::prelude::wasm_bindgen; use wasm_bindgen::JsValue; diff --git a/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs b/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs index 123833b8538..93fd729909c 100644 --- a/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +++ b/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs @@ -20,8 +20,6 @@ use crate::bls_adapter::{BlsAdapter, JsBlsAdapter}; use crate::errors::from_dpp_err; use crate::utils::{generic_of_js_val, WithJsError}; -use dpp::consensus::ConsensusError::SignatureError as ConsensusSignatureErrorVariant; - use dpp::consensus::ConsensusError; use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitness; use dpp::identity::{KeyID, TimestampMillis}; diff --git a/packages/wasm-dpp/src/state_transition/state_transition_facade.rs b/packages/wasm-dpp/src/state_transition/state_transition_facade.rs index 9e0b2e398d5..45fd685b25f 100644 --- a/packages/wasm-dpp/src/state_transition/state_transition_facade.rs +++ b/packages/wasm-dpp/src/state_transition/state_transition_facade.rs @@ -17,8 +17,7 @@ use serde::Deserialize; use crate::errors::protocol_error::from_protocol_error; use crate::errors::value_error::PlatformValueErrorWasm; use dpp::data_contract::state_transition::data_contract_update_transition::DataContractUpdateTransition; -use dpp::document::DocumentsBatchTransition; -use dpp::ProtocolError; + use std::sync::Arc; use wasm_bindgen::prelude::*; use wasm_bindgen::JsValue; diff --git a/packages/wasm-dpp/src/state_transition/validation/validate_state_transition_identity_signature.rs b/packages/wasm-dpp/src/state_transition/validation/validate_state_transition_identity_signature.rs index 63fa8886db4..418f03a7600 100644 --- a/packages/wasm-dpp/src/state_transition/validation/validate_state_transition_identity_signature.rs +++ b/packages/wasm-dpp/src/state_transition/validation/validate_state_transition_identity_signature.rs @@ -9,7 +9,7 @@ use dpp::consensus::basic::BasicError; use dpp::consensus::ConsensusError; use dpp::state_transition::validation::validate_state_transition_identity_signature::validate_state_transition_identity_signature; use dpp::state_transition::{StateTransition, StateTransitionIdentitySigned}; -use dpp::ProtocolError; + use std::sync::Arc; use wasm_bindgen::prelude::wasm_bindgen; use wasm_bindgen::JsValue; From fc2f18f32cef3772b2bebf459a3bde80be1b0e9b Mon Sep 17 00:00:00 2001 From: Anton Suprunchuk Date: Mon, 10 Apr 2023 20:14:17 +0700 Subject: [PATCH 03/13] autofix clippy warnings --- .../apply_documents_batch_transition_factory.rs | 2 +- .../document_create_transition_action.rs | 4 ++-- .../document_replace_transition_action.rs | 2 +- .../validation/state/execute_data_triggers.rs | 2 +- .../state/validate_documents_uniqueness_by_indices.rs | 2 +- .../basic/decode/protocol_version_parsing_error.rs | 4 ++-- .../basic/document/data_contract_not_present_error.rs | 2 +- .../identity_create_transition/validation/state/mod.rs | 6 ++---- .../identity_topup_transition/validation/state/mod.rs | 1 - .../state_transition/identity_update_transition/action.rs | 2 +- .../rs-dpp/src/state_transition/apply_state_transition.rs | 4 +--- .../rs-dpp/src/state_transition/state_transition_factory.rs | 3 +-- packages/rs-platform-value/src/types/identifier.rs | 2 +- 13 files changed, 15 insertions(+), 21 deletions(-) diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/apply_documents_batch_transition_factory.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/apply_documents_batch_transition_factory.rs index 09539ec1ac2..f561364a47c 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/apply_documents_batch_transition_factory.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/apply_documents_batch_transition_factory.rs @@ -47,7 +47,7 @@ pub async fn apply_documents_batch_transition( ) -> Result<(), ProtocolError> { let replace_transitions: Vec<_> = state_transition .get_transitions_slice() - .into_iter() + .iter() .filter(|dt| dt.base().action == Action::Replace) .collect(); diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_create_transition_action.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_create_transition_action.rs index e9375e1c066..ee2db3b39b3 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_create_transition_action.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_create_transition_action.rs @@ -46,8 +46,8 @@ impl From<&DocumentCreateTransition> for DocumentCreateTransitionAction { } = value; DocumentCreateTransitionAction { base: base.into(), - created_at: created_at.clone(), - updated_at: updated_at.clone(), + created_at: *created_at, + updated_at: *updated_at, data: data.clone().unwrap_or_default(), } } diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_replace_transition_action.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_replace_transition_action.rs index 13273508012..747daead833 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_replace_transition_action.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/document_transition/document_replace_transition_action.rs @@ -35,7 +35,7 @@ impl DocumentReplaceTransitionAction { base: base.into(), revision: *revision, created_at: originally_created_at, - updated_at: updated_at.clone(), + updated_at: *updated_at, data: data.clone().unwrap_or_default(), } } diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/state/execute_data_triggers.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/state/execute_data_triggers.rs index ba94443a68f..8d80dde4bec 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/state/execute_data_triggers.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/state/execute_data_triggers.rs @@ -32,7 +32,7 @@ where let data_triggers: Vec = data_triggers_list.into_iter().collect(); for dt in document_transitions { - let document_transition = dt.as_ref(); + let document_transition = dt; let document_type = &document_transition.base().document_type_name; let transition_action = document_transition.base().action; diff --git a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/state/validate_documents_uniqueness_by_indices.rs b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/state/validate_documents_uniqueness_by_indices.rs index fba29b5869f..99237fff6e1 100644 --- a/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/state/validate_documents_uniqueness_by_indices.rs +++ b/packages/rs-dpp/src/document/state_transition/documents_batch_transition/validation/state/validate_documents_uniqueness_by_indices.rs @@ -43,7 +43,7 @@ where // 1. Prepare fetchDocuments queries from indexed properties for t in document_transitions { - let transition = t.as_ref(); + let transition = t; let document_schema = data_contract.get_document_schema(&transition.base().document_type_name)?; let document_indices = document_schema.get_indices::>()?; diff --git a/packages/rs-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs b/packages/rs-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs index 8cd972685d4..8e32145b172 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs @@ -31,8 +31,8 @@ impl From for ConsensusError { } } -impl Into for ProtocolVersionParsingError { - fn into(self) -> u32 { +impl From for u32 { + fn from(val: ProtocolVersionParsingError) -> Self { 0 } } diff --git a/packages/rs-dpp/src/errors/consensus/basic/document/data_contract_not_present_error.rs b/packages/rs-dpp/src/errors/consensus/basic/document/data_contract_not_present_error.rs index 4125d24b561..7b3408e228e 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/document/data_contract_not_present_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/document/data_contract_not_present_error.rs @@ -21,7 +21,7 @@ impl DataContractNotPresentError { } pub fn data_contract_id(&self) -> Identifier { - self.data_contract_id.clone() + self.data_contract_id } } diff --git a/packages/rs-dpp/src/identity/state_transition/identity_create_transition/validation/state/mod.rs b/packages/rs-dpp/src/identity/state_transition/identity_create_transition/validation/state/mod.rs index 99c894ba65f..a226816ec07 100644 --- a/packages/rs-dpp/src/identity/state_transition/identity_create_transition/validation/state/mod.rs +++ b/packages/rs-dpp/src/identity/state_transition/identity_create_transition/validation/state/mod.rs @@ -29,7 +29,7 @@ where ) -> Result, ProtocolError> { validate_identity_create_transition_state(&self.state_repository, data) .await - .map_err(|err| err.into()) + .map_err(|err| err) } } @@ -87,9 +87,7 @@ pub async fn validate_identity_create_transition_state( ) .await .map_err(Into::::into)?; - return Ok( - IdentityCreateTransitionAction::from_borrowed(state_transition, tx_out.value).into(), - ); + Ok(IdentityCreateTransitionAction::from_borrowed(state_transition, tx_out.value).into()) } } diff --git a/packages/rs-dpp/src/identity/state_transition/identity_topup_transition/validation/state/mod.rs b/packages/rs-dpp/src/identity/state_transition/identity_topup_transition/validation/state/mod.rs index 7556e2e6578..dbd91d6aaa5 100644 --- a/packages/rs-dpp/src/identity/state_transition/identity_topup_transition/validation/state/mod.rs +++ b/packages/rs-dpp/src/identity/state_transition/identity_topup_transition/validation/state/mod.rs @@ -28,7 +28,6 @@ where ) -> Result, ProtocolError> { validate_identity_topup_transition_state(&self.state_repository, data) .await - .map(|result| result) .map_err(|err| err.into()) } } diff --git a/packages/rs-dpp/src/identity/state_transition/identity_update_transition/action.rs b/packages/rs-dpp/src/identity/state_transition/identity_update_transition/action.rs index 9822ba2da9d..552efad7fbe 100644 --- a/packages/rs-dpp/src/identity/state_transition/identity_update_transition/action.rs +++ b/packages/rs-dpp/src/identity/state_transition/identity_update_transition/action.rs @@ -54,7 +54,7 @@ impl From<&IdentityUpdateTransition> for IdentityUpdateTransitionAction { .map(|key| key.clone().to_identity_public_key()) .collect(), disable_public_keys: disable_public_keys.clone(), - public_keys_disabled_at: public_keys_disabled_at.clone(), + public_keys_disabled_at: *public_keys_disabled_at, identity_id: *identity_id, } } diff --git a/packages/rs-dpp/src/state_transition/apply_state_transition.rs b/packages/rs-dpp/src/state_transition/apply_state_transition.rs index 63eb5154fee..5051d69d7bc 100644 --- a/packages/rs-dpp/src/state_transition/apply_state_transition.rs +++ b/packages/rs-dpp/src/state_transition/apply_state_transition.rs @@ -46,9 +46,7 @@ where state_repository.clone(), asset_lock_transaction_output_fetcher, ), - apply_identity_update_transition: ApplyIdentityUpdateTransition::new( - state_repository.clone(), - ), + apply_identity_update_transition: ApplyIdentityUpdateTransition::new(state_repository), } } diff --git a/packages/rs-dpp/src/state_transition/state_transition_factory.rs b/packages/rs-dpp/src/state_transition/state_transition_factory.rs index f57f120034d..7fb5f929ef5 100644 --- a/packages/rs-dpp/src/state_transition/state_transition_factory.rs +++ b/packages/rs-dpp/src/state_transition/state_transition_factory.rs @@ -128,8 +128,7 @@ where errors: vec![consensus_error], raw_state_transition, }, - ) - .into()); + )); } }; diff --git a/packages/rs-platform-value/src/types/identifier.rs b/packages/rs-platform-value/src/types/identifier.rs index 564eeaf4d13..01537fc74e6 100644 --- a/packages/rs-platform-value/src/types/identifier.rs +++ b/packages/rs-platform-value/src/types/identifier.rs @@ -84,7 +84,7 @@ impl<'de> Deserialize<'de> for IdentifierBytes32 { return Err(E::invalid_length(v.len(), &self)); } let mut array = [0u8; 32]; - array.copy_from_slice(&v); + array.copy_from_slice(v); Ok(IdentifierBytes32(array)) } From ad104d8454a733628fe1627deae71dc55c5e25d8 Mon Sep 17 00:00:00 2001 From: Anton Suprunchuk Date: Mon, 10 Apr 2023 20:23:31 +0700 Subject: [PATCH 04/13] fix some more stuff --- .../data_trigger/dashpay_data_triggers/mod.rs | 2 +- .../decode/protocol_version_parsing_error.rs | 2 +- packages/rs-drive-verify-c-binding/src/lib.rs | 1 + .../src/document/extended_document.rs | 19 -------- packages/wasm-dpp/src/document/mod.rs | 46 ------------------- 5 files changed, 3 insertions(+), 67 deletions(-) diff --git a/packages/rs-dpp/src/data_trigger/dashpay_data_triggers/mod.rs b/packages/rs-dpp/src/data_trigger/dashpay_data_triggers/mod.rs index f7a7b3e785e..9678da65c7a 100644 --- a/packages/rs-dpp/src/data_trigger/dashpay_data_triggers/mod.rs +++ b/packages/rs-dpp/src/data_trigger/dashpay_data_triggers/mod.rs @@ -121,7 +121,7 @@ where #[cfg(test)] mod test { - use super::*; + use super::super::DataTriggerError; use platform_value::btreemap_extensions::BTreeValueMapHelper; use platform_value::platform_value; diff --git a/packages/rs-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs b/packages/rs-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs index 8e32145b172..921ce00e354 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs @@ -32,7 +32,7 @@ impl From for ConsensusError { } impl From for u32 { - fn from(val: ProtocolVersionParsingError) -> Self { + fn from(_val: ProtocolVersionParsingError) -> Self { 0 } } diff --git a/packages/rs-drive-verify-c-binding/src/lib.rs b/packages/rs-drive-verify-c-binding/src/lib.rs index af767acdb12..75971af22eb 100644 --- a/packages/rs-drive-verify-c-binding/src/lib.rs +++ b/packages/rs-drive-verify-c-binding/src/lib.rs @@ -218,6 +218,7 @@ mod tests { use super::*; use drive::drive::Drive; use std::collections::BTreeMap; + use drive::drive::verify::RootHash; fn single_identity_proof() -> &'static [u8] { &[ diff --git a/packages/wasm-dpp/src/document/extended_document.rs b/packages/wasm-dpp/src/document/extended_document.rs index 29c535bb6b1..b3fa5f98346 100644 --- a/packages/wasm-dpp/src/document/extended_document.rs +++ b/packages/wasm-dpp/src/document/extended_document.rs @@ -334,25 +334,6 @@ impl ExtendedDocumentWasm { } } -impl ExtendedDocumentWasm { - fn get_binary_type_of_path(&self, path: &String) -> BinaryType { - let maybe_binary_properties = self - .0 - .data_contract - .get_binary_properties(&self.0.document_type_name); - - if let Ok(binary_properties) = maybe_binary_properties { - if let Some(data) = binary_properties.get(path) { - if data.is_type_of_identifier() { - return BinaryType::Identifier; - } - return BinaryType::Buffer; - } - } - BinaryType::None - } -} - impl From for ExtendedDocumentWasm { fn from(d: ExtendedDocument) -> Self { ExtendedDocumentWasm(d) diff --git a/packages/wasm-dpp/src/document/mod.rs b/packages/wasm-dpp/src/document/mod.rs index b66b6c5facc..9e5ca2fdc8b 100644 --- a/packages/wasm-dpp/src/document/mod.rs +++ b/packages/wasm-dpp/src/document/mod.rs @@ -300,52 +300,6 @@ impl DocumentWasm { } } -impl DocumentWasm { - fn get_binary_type_of_path( - &self, - path: &String, - data_contract: &DataContractWasm, - document_type_name: String, - ) -> BinaryType { - let maybe_binary_properties = data_contract - .0 - .get_binary_properties(document_type_name.as_str()); - - if let Ok(binary_properties) = maybe_binary_properties { - if let Some(data) = binary_properties.get(path) { - if data.is_type_of_identifier() { - return BinaryType::Identifier; - } - return BinaryType::Buffer; - } - } - BinaryType::None - } -} - -/// document's dynamic data, regardless they are identifiers or binary, they should -/// be stored as arrays of int -pub(crate) fn document_data_to_bytes( - document: &mut Document, - contract: &DataContract, - document_type: &str, -) -> Result<(), JsValue> { - let (identifier_paths, binary_paths): (Vec<_>, Vec<_>) = contract - .get_identifiers_and_binary_paths_owned(document_type) - .with_js_error()?; - document - .properties - .replace_at_paths(identifier_paths, ReplacementType::Identifier) - .map_err(ProtocolError::ValueError) - .with_js_error()?; - document - .properties - .replace_at_paths(binary_paths, ReplacementType::BinaryBytes) - .map_err(ProtocolError::ValueError) - .with_js_error()?; - Ok(()) -} - pub(crate) fn raw_document_from_js_value( js_raw_document: &JsValue, data_contract: &DataContract, From 2a38db7952021869118c4a9785735e5d40f1a3ec Mon Sep 17 00:00:00 2001 From: Anton Suprunchuk Date: Mon, 10 Apr 2023 20:27:56 +0700 Subject: [PATCH 05/13] run fix for tests --- .../src/data_trigger/reward_share_data_triggers/mod.rs | 10 +++++----- packages/rs-dpp/src/document/document_validator.rs | 6 +----- .../basic/unsupported_protocol_version_error.rs | 2 +- ...ate_state_transition_fee_from_operations_factory.rs | 2 +- ...idate_data_contract_update_transition_basic_spec.rs | 2 -- .../validation/data_contract_validator_spec.rs | 2 +- .../validate_documents_batch_transitions_basic_spec.rs | 4 ++-- .../identity_create_transition_basic_validator_spec.rs | 9 --------- ...identity_credit_withdrawal_transition_basic_spec.rs | 5 ++--- .../identity_top_up_transition_basic_validator_spec.rs | 2 -- .../validate_identity_update_transition_basic_spec.rs | 4 ++-- .../identity/validation/identity_validator_spec.rs | 3 --- .../identity/validation/public_keys_validator_spec.rs | 2 -- packages/rs-drive-verify-c-binding/src/lib.rs | 2 +- packages/wasm-dpp/src/document/extended_document.rs | 4 ++-- packages/wasm-dpp/src/document/mod.rs | 1 - 16 files changed, 18 insertions(+), 42 deletions(-) diff --git a/packages/rs-dpp/src/data_trigger/reward_share_data_triggers/mod.rs b/packages/rs-dpp/src/data_trigger/reward_share_data_triggers/mod.rs index 625b662986c..06af2aa3f91 100644 --- a/packages/rs-dpp/src/data_trigger/reward_share_data_triggers/mod.rs +++ b/packages/rs-dpp/src/data_trigger/reward_share_data_triggers/mod.rs @@ -255,7 +255,7 @@ mod test { let TestData { mut document_transition, extended_documents, - sml_store, + data_contract, top_level_identifier, identity, @@ -305,7 +305,7 @@ mod test { async fn should_return_an_error_if_pay_to_id_does_not_exists() { let TestData { document_transition, - sml_store, + data_contract, top_level_identifier, .. @@ -351,7 +351,7 @@ mod test { async fn should_return_an_error_if_owner_id_is_not_a_masternode_identity() { let TestData { document_transition, - sml_store, + data_contract, .. } = setup_test(); @@ -389,7 +389,7 @@ mod test { async fn should_pass() { let TestData { document_transition, - sml_store, + data_contract, top_level_identifier, identity, @@ -425,7 +425,7 @@ mod test { async fn should_return_error_if_there_are_16_stored_shares() { let TestData { document_transition, - sml_store, + data_contract, top_level_identifier, identity, diff --git a/packages/rs-dpp/src/document/document_validator.rs b/packages/rs-dpp/src/document/document_validator.rs index 68c3f642450..e32027de892 100644 --- a/packages/rs-dpp/src/document/document_validator.rs +++ b/packages/rs-dpp/src/document/document_validator.rs @@ -146,12 +146,8 @@ impl DocumentValidator { mod test { use std::sync::Arc; - use jsonschema::{ - error::{TypeKind, ValidationErrorKind}, - primitive_type::PrimitiveType, - }; use platform_value::Value; - use serde_json::Value as JsonValue; + use test_case::test_case; use crate::errors::consensus::codes::ErrorWithCode; diff --git a/packages/rs-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs b/packages/rs-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs index 3ac80b6e66e..7c70e4625cb 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs @@ -59,7 +59,7 @@ mod tests { let consensus_error: ConsensusError = error.clone().into(); - let cbor = consensus_error.serialize(); + let _cbor = consensus_error.serialize(); // let value = Value::try_from(&consensus_error).expect("should convert to value"); diff --git a/packages/rs-dpp/src/state_transition/fee/calculate_state_transition_fee_from_operations_factory.rs b/packages/rs-dpp/src/state_transition/fee/calculate_state_transition_fee_from_operations_factory.rs index 68602c5858f..addac1e8bc8 100644 --- a/packages/rs-dpp/src/state_transition/fee/calculate_state_transition_fee_from_operations_factory.rs +++ b/packages/rs-dpp/src/state_transition/fee/calculate_state_transition_fee_from_operations_factory.rs @@ -66,7 +66,7 @@ fn calculate_state_transition_fee_from_operations_with_custom_calculator( #[cfg(test)] mod test { - use dashcore::blockdata::script::Instruction::Op; + use platform_value::Identifier; use std::collections::HashMap; diff --git a/packages/rs-dpp/src/tests/data_contract/state_transition/data_contract_update_transition/validation/basic/validate_data_contract_update_transition_basic_spec.rs b/packages/rs-dpp/src/tests/data_contract/state_transition/data_contract_update_transition/validation/basic/validate_data_contract_update_transition_basic_spec.rs index 8a2eb5d794b..2cd4673cc2f 100644 --- a/packages/rs-dpp/src/tests/data_contract/state_transition/data_contract_update_transition/validation/basic/validate_data_contract_update_transition_basic_spec.rs +++ b/packages/rs-dpp/src/tests/data_contract/state_transition/data_contract_update_transition/validation/basic/validate_data_contract_update_transition_basic_spec.rs @@ -24,9 +24,7 @@ use crate::{ version::{ProtocolVersionValidator, LATEST_VERSION}, }; -use jsonschema::error::ValidationErrorKind; use platform_value::{platform_value, BinaryData, Value}; -use serde_json::Value as JsonValue; struct TestData { version_validator: ProtocolVersionValidator, diff --git a/packages/rs-dpp/src/tests/data_contract/validation/data_contract_validator_spec.rs b/packages/rs-dpp/src/tests/data_contract/validation/data_contract_validator_spec.rs index 829b2572cd4..f7a5393b1cf 100644 --- a/packages/rs-dpp/src/tests/data_contract/validation/data_contract_validator_spec.rs +++ b/packages/rs-dpp/src/tests/data_contract/validation/data_contract_validator_spec.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use log::trace; use platform_value::{platform_value, Value}; -use serde_json::Value as JsonValue; + use test_case::test_case; use crate::consensus::basic::value_error::ValueError; diff --git a/packages/rs-dpp/src/tests/document/state_transitions/validation/validate_documents_batch_transitions_basic_spec.rs b/packages/rs-dpp/src/tests/document/state_transitions/validation/validate_documents_batch_transitions_basic_spec.rs index 5779bbdb0b5..c66ba02066e 100644 --- a/packages/rs-dpp/src/tests/document/state_transitions/validation/validate_documents_batch_transitions_basic_spec.rs +++ b/packages/rs-dpp/src/tests/document/state_transitions/validation/validate_documents_batch_transitions_basic_spec.rs @@ -23,9 +23,9 @@ use std::collections::BTreeMap; use std::sync::Arc; use crate::consensus::codes::ErrorWithCode; -use crate::document::document_transition::document_base_transition::JsonValue; + use crate::tests::utils::generate_random_identifier_struct; -use jsonschema::error::ValidationErrorKind; + use platform_value::{platform_value, Value}; use test_case::test_case; diff --git a/packages/rs-dpp/src/tests/identity/state_transition/identity_create_transition/validation/basic/identity_create_transition_basic_validator_spec.rs b/packages/rs-dpp/src/tests/identity/state_transition/identity_create_transition/validation/basic/identity_create_transition_basic_validator_spec.rs index 9b937b473ce..31e773c5d21 100644 --- a/packages/rs-dpp/src/tests/identity/state_transition/identity_create_transition/validation/basic/identity_create_transition_basic_validator_spec.rs +++ b/packages/rs-dpp/src/tests/identity/state_transition/identity_create_transition/validation/basic/identity_create_transition_basic_validator_spec.rs @@ -94,8 +94,6 @@ mod validate_identity_create_transition_basic_factory { use std::sync::Arc; - use jsonschema::error::ValidationErrorKind; - use crate::identity::validation::RequiredPurposeAndSecurityLevelValidator; use crate::state_repository::MockStateRepositoryLike; use crate::tests::fixtures::get_public_keys_validator_for_transition; @@ -187,8 +185,6 @@ mod validate_identity_create_transition_basic_factory { use std::sync::Arc; - use jsonschema::error::ValidationErrorKind; - use crate::assert_basic_consensus_errors; use crate::identity::validation::RequiredPurposeAndSecurityLevelValidator; use crate::state_repository::MockStateRepositoryLike; @@ -252,8 +248,6 @@ mod validate_identity_create_transition_basic_factory { use std::sync::Arc; - use jsonschema::error::ValidationErrorKind; - use crate::assert_basic_consensus_errors; use crate::consensus::ConsensusError; use crate::identity::validation::RequiredPurposeAndSecurityLevelValidator; @@ -341,7 +335,6 @@ mod validate_identity_create_transition_basic_factory { use std::sync::Arc; - use jsonschema::error::ValidationErrorKind; use platform_value::Value; use crate::consensus::test_consensus_error::TestConsensusError; @@ -531,8 +524,6 @@ mod validate_identity_create_transition_basic_factory { use std::sync::Arc; - use jsonschema::error::ValidationErrorKind; - use crate::assert_basic_consensus_errors; use crate::consensus::ConsensusError; use crate::identity::validation::RequiredPurposeAndSecurityLevelValidator; diff --git a/packages/rs-dpp/src/tests/identity/state_transition/identity_credit_withdrawal_transition/validation/basic/validate_identity_credit_withdrawal_transition_basic_spec.rs b/packages/rs-dpp/src/tests/identity/state_transition/identity_credit_withdrawal_transition/validation/basic/validate_identity_credit_withdrawal_transition_basic_spec.rs index 5da30eaedee..79533bd99d0 100644 --- a/packages/rs-dpp/src/tests/identity/state_transition/identity_credit_withdrawal_transition/validation/basic/validate_identity_credit_withdrawal_transition_basic_spec.rs +++ b/packages/rs-dpp/src/tests/identity/state_transition/identity_credit_withdrawal_transition/validation/basic/validate_identity_credit_withdrawal_transition_basic_spec.rs @@ -24,7 +24,6 @@ mod validate_identity_credit_withdrawal_transition_basic_factory { use crate::errors::consensus::ConsensusError; use crate::NonConsensusError; - use jsonschema::error::ValidationErrorKind; mod protocol_version { use super::*; @@ -444,7 +443,7 @@ mod validate_identity_credit_withdrawal_transition_basic_factory { mod output_script { use crate::consensus::ConsensusError; - use crate::identity::core_script::CoreScript; + use crate::identity::state_transition::properties::PROPERTY_OUTPUT_SCRIPT; use super::*; @@ -529,7 +528,7 @@ mod validate_identity_credit_withdrawal_transition_basic_factory { let result = validator.validate(&raw_state_transition).await.unwrap(); - let errors = assert_basic_consensus_errors!( + let _errors = assert_basic_consensus_errors!( result, BasicError::InvalidIdentityCreditWithdrawalTransitionOutputScriptError, 1 diff --git a/packages/rs-dpp/src/tests/identity/state_transition/identity_topup_transition/validation/basic/identity_top_up_transition_basic_validator_spec.rs b/packages/rs-dpp/src/tests/identity/state_transition/identity_topup_transition/validation/basic/identity_top_up_transition_basic_validator_spec.rs index e3932d9a46a..82e2b4a4310 100644 --- a/packages/rs-dpp/src/tests/identity/state_transition/identity_topup_transition/validation/basic/identity_top_up_transition_basic_validator_spec.rs +++ b/packages/rs-dpp/src/tests/identity/state_transition/identity_topup_transition/validation/basic/identity_top_up_transition_basic_validator_spec.rs @@ -1,6 +1,5 @@ use std::sync::Arc; -use jsonschema::error::ValidationErrorKind; use platform_value::Value; use crate::errors::consensus::ConsensusError; @@ -238,7 +237,6 @@ mod validate_identity_topup_transition_basic { mod signature { use super::*; - use futures::future::err; #[tokio::test] pub async fn should_be_present() { diff --git a/packages/rs-dpp/src/tests/identity/state_transition/identity_update_transition/validate_identity_update_transition_basic_spec.rs b/packages/rs-dpp/src/tests/identity/state_transition/identity_update_transition/validate_identity_update_transition_basic_spec.rs index 4e98e2b6895..660293b95ca 100644 --- a/packages/rs-dpp/src/tests/identity/state_transition/identity_update_transition/validate_identity_update_transition_basic_spec.rs +++ b/packages/rs-dpp/src/tests/identity/state_transition/identity_update_transition/validate_identity_update_transition_basic_spec.rs @@ -25,9 +25,9 @@ use crate::{ version::ProtocolVersionValidator, NativeBlsModule, NonConsensusError, }; -use jsonschema::error::ValidationErrorKind; + use platform_value::{platform_value, BinaryData, Value}; -use serde_json::Value as JsonValue; + use std::{convert::TryInto, sync::Arc}; use test_case::test_case; diff --git a/packages/rs-dpp/src/tests/identity/validation/identity_validator_spec.rs b/packages/rs-dpp/src/tests/identity/validation/identity_validator_spec.rs index 3e624fcc470..db79ce9b27e 100644 --- a/packages/rs-dpp/src/tests/identity/validation/identity_validator_spec.rs +++ b/packages/rs-dpp/src/tests/identity/validation/identity_validator_spec.rs @@ -26,7 +26,6 @@ fn setup_test() -> ( } pub mod protocol_version { - use super::*; use crate::assert_basic_consensus_errors; use crate::consensus::basic::BasicError; @@ -349,8 +348,6 @@ pub mod public_keys { pub mod revision { use super::*; - use jsonschema::error::ValidationErrorKind; - use crate::assert_basic_consensus_errors; use crate::errors::consensus::ConsensusError; use crate::tests::identity::validation::identity_validator_spec::setup_test; diff --git a/packages/rs-dpp/src/tests/identity/validation/public_keys_validator_spec.rs b/packages/rs-dpp/src/tests/identity/validation/public_keys_validator_spec.rs index f75a50b573d..466429f0759 100644 --- a/packages/rs-dpp/src/tests/identity/validation/public_keys_validator_spec.rs +++ b/packages/rs-dpp/src/tests/identity/validation/public_keys_validator_spec.rs @@ -20,7 +20,6 @@ fn setup_test() -> (Vec, PublicKeysValidator) { } pub mod id { - use jsonschema::error::ValidationErrorKind; use crate::assert_basic_consensus_errors; use crate::consensus::basic::BasicError; @@ -130,7 +129,6 @@ pub mod key_type { } pub mod data { - use jsonschema::error::ValidationErrorKind; use crate::assert_basic_consensus_errors; use crate::consensus::basic::BasicError; diff --git a/packages/rs-drive-verify-c-binding/src/lib.rs b/packages/rs-drive-verify-c-binding/src/lib.rs index 75971af22eb..047b90961cc 100644 --- a/packages/rs-drive-verify-c-binding/src/lib.rs +++ b/packages/rs-drive-verify-c-binding/src/lib.rs @@ -216,9 +216,9 @@ pub unsafe extern "C" fn verify_identity_ids_by_public_key_hashes( #[cfg(test)] mod tests { use super::*; + use drive::drive::verify::RootHash; use drive::drive::Drive; use std::collections::BTreeMap; - use drive::drive::verify::RootHash; fn single_identity_proof() -> &'static [u8] { &[ diff --git a/packages/wasm-dpp/src/document/extended_document.rs b/packages/wasm-dpp/src/document/extended_document.rs index b3fa5f98346..d6fe146e7e3 100644 --- a/packages/wasm-dpp/src/document/extended_document.rs +++ b/packages/wasm-dpp/src/document/extended_document.rs @@ -3,7 +3,7 @@ use dpp::document::{ExtendedDocument, EXTENDED_DOCUMENT_IDENTIFIER_FIELDS}; use dpp::platform_value::{Bytes32, Value}; use dpp::prelude::{Identifier, Revision, TimestampMillis}; -use dpp::util::json_schema::JsonSchemaExt; + use dpp::util::json_value::JsonValueExt; use dpp::platform_value::converter::serde_json::BTreeValueJsonConverter; @@ -13,7 +13,7 @@ use std::convert::TryInto; use wasm_bindgen::prelude::*; use crate::buffer::Buffer; -use crate::document::BinaryType; + use crate::errors::RustConversionError; use crate::identifier::{identifier_from_js_value, IdentifierWrapper}; use crate::lodash::lodash_set; diff --git a/packages/wasm-dpp/src/document/mod.rs b/packages/wasm-dpp/src/document/mod.rs index 9e5ca2fdc8b..fb6b1e26f74 100644 --- a/packages/wasm-dpp/src/document/mod.rs +++ b/packages/wasm-dpp/src/document/mod.rs @@ -1,5 +1,4 @@ use dpp::prelude::{DataContract, Identifier}; -use dpp::util::json_schema::JsonSchemaExt; use anyhow::anyhow; use serde::{Deserialize, Serialize}; From 6c74012677ed68c3d0f3e6728c35cecc02a9d41f Mon Sep 17 00:00:00 2001 From: Anton Suprunchuk Date: Mon, 10 Apr 2023 20:32:09 +0700 Subject: [PATCH 06/13] more clippy formatting --- .../data_contract_have_new_unique_index_error.rs | 2 +- .../data_contract_immutable_properties_update_error.rs | 2 +- ...data_contract_invalid_index_definition_update_error.rs | 2 +- .../data_contract/data_contract_max_depth_exceed_error.rs | 2 +- .../data_contract_unique_indices_changed_error.rs | 2 +- .../basic/data_contract/duplicate_index_name_error.rs | 6 +++--- .../incompatible_data_contract_schema_error.rs | 6 +++--- .../basic/data_contract/incompatible_re2_pattern_error.rs | 8 ++++---- .../data_contract/index_error/duplicate_index_error.rs | 2 +- .../index_error/invalid_compound_index_error.rs | 2 +- .../index_error/invalid_index_property_type_error.rs | 2 +- .../invalid_indexed_property_constraint_error.rs | 2 +- .../system_property_index_already_present_error.rs | 2 +- .../index_error/undefined_index_property_error.rs | 2 +- .../index_error/unique_indices_limit_reached_error.rs | 2 +- .../basic/data_contract/invalid_data_contract_id_error.rs | 2 +- .../data_contract/invalid_data_contract_version_error.rs | 2 +- .../basic/data_contract/invalid_json_schema_ref_error.rs | 4 ++-- .../basic/decode/protocol_version_parsing_error.rs | 2 +- .../basic/decode/serialized_object_parsing_error.rs | 2 +- .../basic/document/data_contract_not_present_error.rs | 2 +- .../duplicate_document_transitions_with_ids_error.rs | 2 +- .../duplicate_document_transitions_with_indices_error.rs | 2 +- .../document/inconsistent_compound_index_data_error.rs | 4 ++-- .../document/invalid_document_transition_action_error.rs | 2 +- .../document/invalid_document_transition_id_error.rs | 2 +- .../basic/document/invalid_document_type_error.rs | 4 ++-- .../basic/document/missing_data_contract_id_error.rs | 2 +- .../document/missing_document_transition_action_error.rs | 2 +- .../document/missing_document_transition_type_error.rs | 2 +- .../basic/document/missing_document_type_error.rs | 2 +- .../identity/duplicated_identity_public_key_error.rs | 2 +- .../identity/duplicated_identity_public_key_id_error.rs | 2 +- ..._asset_lock_proof_locked_transaction_mismatch_error.rs | 2 +- .../identity_asset_lock_transaction_is_not_found_error.rs | 2 +- ...set_lock_transaction_out_point_already_exists_error.rs | 2 +- ...ntity_asset_lock_transaction_output_not_found_error.rs | 2 +- .../basic/identity/identity_insufficient_balance_error.rs | 2 +- .../invalid_asset_lock_proof_core_chain_height_error.rs | 2 +- .../invalid_asset_lock_proof_transaction_height_error.rs | 2 +- ...lid_asset_lock_transaction_output_return_size_error.rs | 2 +- .../invalid_identity_asset_lock_transaction_error.rs | 2 +- ...nvalid_identity_asset_lock_transaction_output_error.rs | 2 +- ...dentity_credit_withdrawal_transition_core_fee_error.rs | 2 +- ...ty_credit_withdrawal_transition_output_script_error.rs | 2 +- ...identity_credit_withdrawal_transition_pooling_error.rs | 2 +- .../identity/invalid_identity_key_signature_error.rs | 2 +- .../identity/invalid_identity_public_key_data_error.rs | 2 +- .../invalid_identity_public_key_security_level_error.rs | 2 +- .../identity/invalid_identity_public_key_type_error.rs | 2 +- .../identity/invalid_instant_asset_lock_proof_error.rs | 2 +- .../invalid_instant_asset_lock_proof_signature_error.rs | 2 +- .../basic/identity/missing_master_public_key_error.rs | 2 +- .../consensus/basic/identity/missing_public_key_error.rs | 2 +- .../basic/incompatible_protocol_version_error.rs | 2 +- .../errors/consensus/basic/invalid_identifier_error.rs | 2 +- .../invalid_signature_public_key_security_level_error.rs | 2 +- .../basic/invalid_state_transition_signature_error.rs | 2 +- .../consensus/basic/json_schema_compilation_error.rs | 2 +- .../src/errors/consensus/basic/json_schema_error.rs | 2 +- .../consensus/basic/public_key_is_disabled_error.rs | 2 +- .../basic/public_key_security_level_not_met_error.rs | 2 +- .../invalid_state_transition_type_error.rs | 2 +- .../missing_state_transition_type_error.rs | 2 +- .../state_transition_max_size_exceeded_error.rs | 2 +- .../consensus/basic/unsupported_protocol_version_error.rs | 2 +- .../consensus/basic/wrong_public_key_purpose_error.rs | 2 +- packages/wasm-dpp/src/errors/consensus/deserialize.rs | 2 +- .../errors/consensus/fee/balance_is_not_enough_error.rs | 2 +- .../data_contract/data_contract_already_present_error.rs | 2 +- .../data_trigger/data_trigger_condition_error.rs | 2 +- .../data_trigger/data_trigger_execution_error.rs | 2 +- .../data_trigger/data_trigger_invalid_result_error.rs | 2 +- .../state/document/document_already_present_error.rs | 2 +- .../consensus/state/document/document_not_found_error.rs | 2 +- .../state/document/document_owner_id_mismatch_error.rs | 2 +- .../document/document_timestamp_window_violation_error.rs | 4 ++-- .../state/document/document_timestamps_mismatch_error.rs | 2 +- .../state/document/duplicate_unique_index_error.rs | 2 +- .../state/document/invalid_document_revision_error.rs | 2 +- .../duplicated_identity_public_key_id_state_error.rs | 2 +- .../duplicated_identity_public_key_state_error.rs | 2 +- .../state/identity/identity_already_exists_error.rs | 2 +- ...ntity_public_key_disabled_at_window_violation_error.rs | 2 +- .../identity/identity_public_key_is_disabled_error.rs | 2 +- .../identity/identity_public_key_is_read_only_error.rs | 2 +- .../identity/invalid_identity_public_key_id_error.rs | 2 +- .../state/identity/invalid_identity_revision_error.rs | 2 +- .../max_identity_public_key_limit_reached_error.rs | 2 +- packages/wasm-dpp/src/errors/consensus/value_error.rs | 2 +- .../src/state_transition/state_transition_facade.rs | 4 ++-- 91 files changed, 103 insertions(+), 103 deletions(-) diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs index c34cbe07218..87ad94f1269 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs @@ -41,7 +41,7 @@ impl DataContractHaveNewUniqueIndexErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs index 6caf4801de9..558cb88a83e 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs @@ -43,7 +43,7 @@ impl DataContractImmutablePropertiesUpdateErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs index ccfd3f997ba..1ae1e64e4ff 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs @@ -43,7 +43,7 @@ impl DataContractInvalidIndexDefinitionUpdateErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs index c7e0165e170..11c5112da1d 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs @@ -41,7 +41,7 @@ impl DataContractMaxDepthExceedErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs index cbc3442eb34..c35d4f9c532 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs @@ -41,7 +41,7 @@ impl DataContractUniqueIndicesChangedErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs index ab2eb02f25b..fa952d46c90 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs @@ -19,12 +19,12 @@ impl From<&DuplicateIndexNameError> for DuplicateIndexNameErrorWasm { impl DuplicateIndexNameErrorWasm { #[wasm_bindgen(js_name=getDocumentType)] pub fn get_document_type(&self) -> String { - self.inner.document_type().to_string() + self.inner.document_type() } #[wasm_bindgen(js_name=getDuplicateIndexName)] pub fn get_duplicate_index_name(&self) -> String { - self.inner.duplicate_index_name().to_string() + self.inner.duplicate_index_name() } #[wasm_bindgen(js_name=getCode)] @@ -41,7 +41,7 @@ impl DuplicateIndexNameErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs index 86c83f5ecdb..e154aecb79f 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs @@ -24,12 +24,12 @@ impl IncompatibleDataContractSchemaErrorWasm { #[wasm_bindgen(js_name=getOperation)] pub fn get_operation(&self) -> String { - self.inner.operation().to_string() + self.inner.operation() } #[wasm_bindgen(js_name=getFieldPath)] pub fn get_field_path(&self) -> String { - self.inner.field_path().to_string() + self.inner.field_path() } #[wasm_bindgen(js_name=getCode)] @@ -46,7 +46,7 @@ impl IncompatibleDataContractSchemaErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs index 9df3f88d996..7279c159c7d 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs @@ -19,17 +19,17 @@ impl From<&IncompatibleRe2PatternError> for IncompatibleRe2PatternErrorWasm { impl IncompatibleRe2PatternErrorWasm { #[wasm_bindgen(js_name=getPattern)] pub fn get_pattern(&self) -> String { - self.inner.pattern().to_string() + self.inner.pattern() } #[wasm_bindgen(js_name=getPath)] pub fn get_path(&self) -> String { - self.inner.path().to_string() + self.inner.path() } #[wasm_bindgen(js_name=getMessage)] pub fn get_message(&self) -> String { - self.inner.message().clone() + self.inner.message() } #[wasm_bindgen(js_name=getCode)] @@ -46,7 +46,7 @@ impl IncompatibleRe2PatternErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs index 010c21f8d44..54d8902e695 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs @@ -41,7 +41,7 @@ impl DuplicateIndexErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs index e36fa07e5bd..29c33d9dbbb 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs @@ -41,7 +41,7 @@ impl InvalidCompoundIndexErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs index 24692469a2f..f5a77e25121 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs @@ -51,7 +51,7 @@ impl InvalidIndexPropertyTypeErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs index 48aff44a663..658de67209a 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs @@ -56,7 +56,7 @@ impl InvalidIndexedPropertyConstraintErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs index 50f2f80230f..31b3c6edb3c 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs @@ -46,7 +46,7 @@ impl SystemPropertyIndexAlreadyPresentErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs index a1366ce8743..326e0589e4b 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs @@ -46,7 +46,7 @@ impl UndefinedIndexPropertyErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs index f2951d07906..42c1895920b 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs @@ -41,7 +41,7 @@ impl UniqueIndicesLimitReachedErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs index d4a4f4f9486..4c3c94a636a 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs @@ -41,7 +41,7 @@ impl InvalidDataContractIdErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs index f68fcc3d936..c5e5573f449 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs @@ -41,7 +41,7 @@ impl InvalidDataContractVersionErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs index 35d1c7e263d..78d82ce4f94 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs @@ -19,7 +19,7 @@ impl From<&InvalidJsonSchemaRefError> for InvalidJsonSchemaRefErrorWasm { impl InvalidJsonSchemaRefErrorWasm { #[wasm_bindgen(js_name=getRefError)] pub fn get_ref_error(&self) -> String { - self.inner.message().to_string() + self.inner.message() } #[wasm_bindgen(js_name=getCode)] @@ -36,7 +36,7 @@ impl InvalidJsonSchemaRefErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs index cbca00edb48..84ac588c8ad 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs @@ -38,7 +38,7 @@ impl ProtocolVersionParsingErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs index 2773c61f419..d96b1e7f7b7 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs @@ -36,7 +36,7 @@ impl SerializedObjectParsingErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/document/data_contract_not_present_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/document/data_contract_not_present_error.rs index 1d48913e354..bbfa7590de4 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/document/data_contract_not_present_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/document/data_contract_not_present_error.rs @@ -37,7 +37,7 @@ impl DataContractNotPresentErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs index 7a2f18a782b..0ba283511a3 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs @@ -48,7 +48,7 @@ impl DuplicateDocumentTransitionsWithIdsErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs index e2504635c47..271e7d4063d 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs @@ -48,7 +48,7 @@ impl DuplicateDocumentTransitionsWithIndicesErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs index d394e22b5dc..9a719991643 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs @@ -29,7 +29,7 @@ impl InconsistentCompoundIndexDataErrorWasm { #[wasm_bindgen(js_name=getDocumentType)] pub fn get_document_type(&self) -> String { - self.inner.document_type().to_string() + self.inner.document_type() } #[wasm_bindgen(js_name=getCode)] @@ -46,7 +46,7 @@ impl InconsistentCompoundIndexDataErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs index 7cb0ac94081..1da546986da 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs @@ -36,7 +36,7 @@ impl InvalidDocumentTransitionActionErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs index eb18ce11a45..7a63ec9b96f 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs @@ -41,7 +41,7 @@ impl InvalidDocumentTransitionIdErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/document/invalid_document_type_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/document/invalid_document_type_error.rs index 1c63d80f89b..693eb745b0d 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/document/invalid_document_type_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/document/invalid_document_type_error.rs @@ -20,7 +20,7 @@ impl From<&InvalidDocumentTypeError> for InvalidDocumentTypeErrorWasm { impl InvalidDocumentTypeErrorWasm { #[wasm_bindgen(js_name=getType)] pub fn get_document_type(&self) -> String { - self.inner.document_type().to_string() + self.inner.document_type() } #[wasm_bindgen(js_name=getDataContractId)] @@ -42,7 +42,7 @@ impl InvalidDocumentTypeErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/document/missing_data_contract_id_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/document/missing_data_contract_id_error.rs index c98e3d098e7..6d695959005 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/document/missing_data_contract_id_error.rs @@ -32,7 +32,7 @@ impl MissingDataContractIdErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/document/missing_document_transition_action_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/document/missing_document_transition_action_error.rs index 94a672fb8fa..a9e9ff66de0 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/document/missing_document_transition_action_error.rs @@ -31,7 +31,7 @@ impl MissingDocumentTransitionActionErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/document/missing_document_transition_type_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/document/missing_document_transition_type_error.rs index ce4ae375e3b..18a1ee3a890 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/document/missing_document_transition_type_error.rs @@ -31,7 +31,7 @@ impl MissingDocumentTransitionTypeErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/document/missing_document_type_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/document/missing_document_type_error.rs index 13a6e6617cb..62424a16833 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/document/missing_document_type_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/document/missing_document_type_error.rs @@ -31,7 +31,7 @@ impl MissingDocumentTypeErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs index 79df2359b82..2e470bbd1a1 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs @@ -41,7 +41,7 @@ impl DuplicatedIdentityPublicKeyErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs index c7ddb97c50f..b6dbeb1385e 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs @@ -41,7 +41,7 @@ impl DuplicatedIdentityPublicKeyIdErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs index 11c5712b010..803d53bcd41 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs @@ -50,7 +50,7 @@ impl IdentityAssetLockProofLockedTransactionMismatchErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs index 399382aa2ed..13e29b3ae34 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs @@ -39,7 +39,7 @@ impl IdentityAssetLockTransactionIsNotFoundErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs index 016fb0c3ea7..1a6129babc9 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs @@ -48,7 +48,7 @@ impl IdentityAssetLockTransactionOutPointAlreadyExistsErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs index 04d5b25198b..55c4b33bdc8 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs @@ -38,7 +38,7 @@ impl IdentityAssetLockTransactionOutputNotFoundErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs index fd8bc4a977a..68de1c07c59 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs @@ -41,7 +41,7 @@ impl IdentityInsufficientBalanceErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs index 95215955282..5ab13e38e95 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs @@ -43,7 +43,7 @@ impl InvalidAssetLockProofCoreChainHeightErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs index 5aa57dd7118..42a23369486 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs @@ -43,7 +43,7 @@ impl InvalidAssetLockProofTransactionHeightErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs index 8abcee2f9c0..91150150b5d 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs @@ -38,7 +38,7 @@ impl InvalidAssetLockTransactionOutputReturnSizeErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs index 1ad41971460..9c255c36e7b 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs @@ -38,7 +38,7 @@ impl InvalidIdentityAssetLockTransactionErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs index b85fec4825d..04935998d82 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs @@ -38,7 +38,7 @@ impl InvalidIdentityAssetLockTransactionOutputErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs index 48f0487f286..1064112abfb 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs @@ -38,7 +38,7 @@ impl InvalidIdentityCreditWithdrawalTransitionCoreFeeErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs index f6af75f7970..3a2efc85f9c 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs @@ -34,7 +34,7 @@ impl InvalidIdentityCreditWithdrawalTransitionOutputScriptErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs index 3e7302b5e51..a974b19662e 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs @@ -38,7 +38,7 @@ impl NotImplementedIdentityCreditWithdrawalTransitionPoolingErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs index 3bebc5bf863..9d36a2533b7 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs @@ -37,7 +37,7 @@ impl InvalidIdentityKeySignatureErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs index b7c9e15a74a..58ccc359fe7 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs @@ -44,7 +44,7 @@ impl InvalidIdentityPublicKeyDataErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs index 470c7a92699..443a50bb3ef 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs @@ -51,7 +51,7 @@ impl InvalidIdentityPublicKeySecurityLevelErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs index 9e623178ead..6b6513d7698 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs @@ -49,7 +49,7 @@ impl InvalidIdentityPublicKeyTypeErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs index 546b4b503b5..55c34fc06a4 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs @@ -31,7 +31,7 @@ impl InvalidInstantAssetLockProofErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs index 44b99e0c2d3..6883a15e11a 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs @@ -33,7 +33,7 @@ impl InvalidInstantAssetLockProofSignatureErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/missing_master_public_key_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/missing_master_public_key_error.rs index bca00e3d10f..a7fc8542eb5 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/missing_master_public_key_error.rs @@ -31,7 +31,7 @@ impl MissingMasterPublicKeyErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/identity/missing_public_key_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/identity/missing_public_key_error.rs index 730acf366bc..8b912e9deb5 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/identity/missing_public_key_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/identity/missing_public_key_error.rs @@ -37,7 +37,7 @@ impl MissingPublicKeyErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs index f93a4a9ce07..2ce9b9df37e 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/incompatible_protocol_version_error.rs @@ -42,7 +42,7 @@ impl IncompatibleProtocolVersionErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/invalid_identifier_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/invalid_identifier_error.rs index f33a539e301..64074970601 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/invalid_identifier_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/invalid_identifier_error.rs @@ -41,7 +41,7 @@ impl InvalidIdentifierErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs index 08b68a07da4..b0fa638c36c 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs @@ -43,7 +43,7 @@ impl InvalidSignaturePublicKeySecurityLevelErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/invalid_state_transition_signature_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/invalid_state_transition_signature_error.rs index c05dcbbb470..d0da5b119e2 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/invalid_state_transition_signature_error.rs @@ -31,7 +31,7 @@ impl InvalidStateTransitionSignatureErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/json_schema_compilation_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/json_schema_compilation_error.rs index 9b6b678eb1e..6851d3a828b 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/json_schema_compilation_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/json_schema_compilation_error.rs @@ -36,7 +36,7 @@ impl JsonSchemaCompilationErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/json_schema_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/json_schema_error.rs index 5682e07ccff..053ef82bd82 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/json_schema_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/json_schema_error.rs @@ -68,7 +68,7 @@ impl JsonSchemaErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/public_key_is_disabled_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/public_key_is_disabled_error.rs index c0b0ab45041..752920d300a 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/public_key_is_disabled_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/public_key_is_disabled_error.rs @@ -37,7 +37,7 @@ impl PublicKeyIsDisabledErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/public_key_security_level_not_met_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/public_key_security_level_not_met_error.rs index c48e235a7f0..63bf617f0a9 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/public_key_security_level_not_met_error.rs @@ -44,7 +44,7 @@ impl PublicKeySecurityLevelNotMetErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs index c55cb460d56..a7a9a994178 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs @@ -43,7 +43,7 @@ impl InvalidStateTransitionTypeErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs index 94251e6eae7..9ee617fc8ae 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs @@ -38,7 +38,7 @@ impl MissingStateTransitionTypeErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs index 1d998a15bfb..74ebab23522 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs @@ -41,7 +41,7 @@ impl StateTransitionMaxSizeExceededErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs index d1a95957c6c..869543c440e 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/unsupported_protocol_version_error.rs @@ -41,7 +41,7 @@ impl UnsupportedProtocolVersionErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/basic/wrong_public_key_purpose_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/wrong_public_key_purpose_error.rs index 852e863ff6f..8ec3d2f8c9e 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/wrong_public_key_purpose_error.rs @@ -41,7 +41,7 @@ impl WrongPublicKeyPurposeErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/deserialize.rs b/packages/wasm-dpp/src/errors/consensus/deserialize.rs index 3ba5695f756..158a4729994 100644 --- a/packages/wasm-dpp/src/errors/consensus/deserialize.rs +++ b/packages/wasm-dpp/src/errors/consensus/deserialize.rs @@ -6,6 +6,6 @@ use wasm_bindgen::{JsError, JsValue}; #[wasm_bindgen(js_name=deserializeConsensusError)] pub fn deserialize_consensus_error(bytes: Vec) -> Result { ConsensusError::deserialize(bytes.as_slice()) - .and_then(|consensus_error| Ok(from_consensus_error(consensus_error))) + .map(from_consensus_error) .map_err(|e| e.into()) } diff --git a/packages/wasm-dpp/src/errors/consensus/fee/balance_is_not_enough_error.rs b/packages/wasm-dpp/src/errors/consensus/fee/balance_is_not_enough_error.rs index ad236f8055b..1dd0799355a 100644 --- a/packages/wasm-dpp/src/errors/consensus/fee/balance_is_not_enough_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/fee/balance_is_not_enough_error.rs @@ -49,7 +49,7 @@ impl BalanceIsNotEnoughErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs b/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs index 669c003ee91..96b93d7b617 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs @@ -45,7 +45,7 @@ impl DataContractAlreadyPresentErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs b/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs index 7d41956c46b..72c2c401870 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs @@ -47,7 +47,7 @@ impl DataTriggerConditionErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs b/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs index bcff9019499..400c8e3cff4 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs @@ -46,7 +46,7 @@ impl DataTriggerExecutionErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs b/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs index 6130fa4fef3..5670347afdf 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs @@ -42,7 +42,7 @@ impl DataTriggerInvalidResultErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/document/document_already_present_error.rs b/packages/wasm-dpp/src/errors/consensus/state/document/document_already_present_error.rs index cb81131e6a2..0dbb26aabb3 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/document/document_already_present_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/document/document_already_present_error.rs @@ -36,7 +36,7 @@ impl DocumentAlreadyPresentErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/document/document_not_found_error.rs b/packages/wasm-dpp/src/errors/consensus/state/document/document_not_found_error.rs index eb326e03e27..2ac4eee1a89 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/document/document_not_found_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/document/document_not_found_error.rs @@ -36,7 +36,7 @@ impl DocumentNotFoundErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs b/packages/wasm-dpp/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs index 9786f49b317..956e2a85632 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs @@ -46,7 +46,7 @@ impl DocumentOwnerIdMismatchErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs b/packages/wasm-dpp/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs index 8432549f1be..fbb0d0c9ff2 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs @@ -24,7 +24,7 @@ impl DocumentTimestampWindowViolationErrorWasm { #[wasm_bindgen(js_name=getTimestampName)] pub fn timestamp_name(&self) -> String { - self.inner.timestamp_name().to_string() + self.inner.timestamp_name() } #[wasm_bindgen(js_name=getTimestamp)] @@ -62,7 +62,7 @@ impl DocumentTimestampWindowViolationErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs b/packages/wasm-dpp/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs index 3f2951619af..136aaaab2b7 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs @@ -35,7 +35,7 @@ impl DocumentTimestampsMismatchErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/document/duplicate_unique_index_error.rs b/packages/wasm-dpp/src/errors/consensus/state/document/duplicate_unique_index_error.rs index 17f7aec1989..3165728887a 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/document/duplicate_unique_index_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/document/duplicate_unique_index_error.rs @@ -46,7 +46,7 @@ impl DuplicateUniqueIndexErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/document/invalid_document_revision_error.rs b/packages/wasm-dpp/src/errors/consensus/state/document/invalid_document_revision_error.rs index 89a3e22513c..4c098da7039 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/document/invalid_document_revision_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/document/invalid_document_revision_error.rs @@ -42,7 +42,7 @@ impl InvalidDocumentRevisionErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs b/packages/wasm-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs index cbf43699bf6..a729cb1bb12 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs @@ -43,7 +43,7 @@ impl DuplicatedIdentityPublicKeyIdStateErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs b/packages/wasm-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs index 695923ea1f7..611271809f8 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs @@ -40,7 +40,7 @@ impl DuplicatedIdentityPublicKeyStateErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/identity/identity_already_exists_error.rs b/packages/wasm-dpp/src/errors/consensus/state/identity/identity_already_exists_error.rs index 19b2e3283d2..8ede5e7cd0c 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/identity/identity_already_exists_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/identity/identity_already_exists_error.rs @@ -36,7 +36,7 @@ impl IdentityAlreadyExistsErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs b/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs index 3e43786b7d6..d94279c3d75 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs @@ -51,7 +51,7 @@ impl IdentityPublicKeyDisabledAtWindowViolationErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs b/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs index 484d04967d9..1a1571f2c4d 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs @@ -37,7 +37,7 @@ impl IdentityPublicKeyIsDisabledErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs b/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs index b7493a00541..0cd0cd1b1f6 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs @@ -42,7 +42,7 @@ impl IdentityPublicKeyIsReadOnlyErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs b/packages/wasm-dpp/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs index 5c0c630017c..a1bd552ff70 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs @@ -37,7 +37,7 @@ impl InvalidIdentityPublicKeyIdErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/identity/invalid_identity_revision_error.rs b/packages/wasm-dpp/src/errors/consensus/state/identity/invalid_identity_revision_error.rs index ff6f3ef03a1..bdab7b54347 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/identity/invalid_identity_revision_error.rs @@ -43,7 +43,7 @@ impl InvalidIdentityRevisionErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs b/packages/wasm-dpp/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs index b6729673728..8b14c00c5cc 100644 --- a/packages/wasm-dpp/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs @@ -37,7 +37,7 @@ impl MaxIdentityPublicKeyLimitReachedErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/errors/consensus/value_error.rs b/packages/wasm-dpp/src/errors/consensus/value_error.rs index d1bc1b08db5..d45efc5c8f3 100644 --- a/packages/wasm-dpp/src/errors/consensus/value_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/value_error.rs @@ -37,7 +37,7 @@ impl ValueErrorWasm { pub fn serialize(&self) -> Result { let bytes = ConsensusError::from(self.inner.clone()) .serialize() - .map_err(|e| JsError::from(e))?; + .map_err(JsError::from)?; Ok(Buffer::from_bytes(bytes.as_slice())) } diff --git a/packages/wasm-dpp/src/state_transition/state_transition_facade.rs b/packages/wasm-dpp/src/state_transition/state_transition_facade.rs index 45fd685b25f..887a7837690 100644 --- a/packages/wasm-dpp/src/state_transition/state_transition_facade.rs +++ b/packages/wasm-dpp/src/state_transition/state_transition_facade.rs @@ -64,7 +64,7 @@ impl StateTransitionFacadeWasm { let mut raw_state_transition = raw_state_transition.with_serde_to_platform_value()?; let state_transition_type: StateTransitionType = raw_state_transition .get_integer::("type") - .map_err(|e| PlatformValueErrorWasm::from(e))? + .map_err(PlatformValueErrorWasm::from)? .try_into() .map_err(|_| JsValue::from_str("Invalid state transition type"))?; @@ -72,7 +72,7 @@ impl StateTransitionFacadeWasm { match state_transition_type { StateTransitionType::DataContractUpdate => { DataContractUpdateTransition::clean_value(&mut raw_state_transition) - .map_err(|e| PlatformValueErrorWasm::from(e))?; + .map_err(PlatformValueErrorWasm::from)?; } _ => {} } From 929853f59944d1736591330115e0ea7eca9839a2 Mon Sep 17 00:00:00 2001 From: Anton Suprunchuk Date: Mon, 10 Apr 2023 20:34:19 +0700 Subject: [PATCH 07/13] fix all warnings --- packages/rs-platform-value/src/types/identifier.rs | 2 +- packages/wasm-dpp/src/document/mod.rs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/rs-platform-value/src/types/identifier.rs b/packages/rs-platform-value/src/types/identifier.rs index 01537fc74e6..a0ca3ef190e 100644 --- a/packages/rs-platform-value/src/types/identifier.rs +++ b/packages/rs-platform-value/src/types/identifier.rs @@ -3,7 +3,7 @@ use rand::Rng; use std::convert::{TryFrom, TryInto}; use std::fmt; -use serde::de::{Error as SerdeDeError, Visitor}; +use serde::de::Visitor; use serde::{Deserialize, Serialize}; use serde_json::Value as JsonValue; diff --git a/packages/wasm-dpp/src/document/mod.rs b/packages/wasm-dpp/src/document/mod.rs index fb6b1e26f74..1b45e9b2343 100644 --- a/packages/wasm-dpp/src/document/mod.rs +++ b/packages/wasm-dpp/src/document/mod.rs @@ -32,7 +32,6 @@ pub use extended_document::ExtendedDocumentWasm; use dpp::document::extended_document::property_names; use dpp::identity::TimestampMillis; -use dpp::platform_value::btreemap_extensions::BTreeValueMapReplacementPathHelper; use dpp::platform_value::converter::serde_json::BTreeValueJsonConverter; use dpp::platform_value::ReplacementType; use dpp::platform_value::Value; From cb71b7d1d1c3b87dbf8862ddc0ce9b6d66225c4f Mon Sep 17 00:00:00 2001 From: Anton Suprunchuk Date: Mon, 10 Apr 2023 20:51:53 +0700 Subject: [PATCH 08/13] fix some clippy warnings --- .../src/data_contract/validation/multi_validator.rs | 4 ++-- packages/rs-dpp/src/data_trigger/mod.rs | 2 +- packages/rs-dpp/src/document/document.rs | 8 ++++---- ...y_credit_withdrawal_transition_output_script_error.rs | 6 ++++++ .../identity_create_transition/validation/state/mod.rs | 4 +--- .../src/state_transition/state_transition_factory.rs | 7 ++----- .../src/tests/fixtures/public_keys_validator_mock.rs | 6 ++++++ .../missing_state_transition_type_error.rs | 6 ++++++ packages/wasm-dpp/src/errors/value_error.rs | 2 +- .../src/state_transition/state_transition_facade.rs | 9 +++------ 10 files changed, 32 insertions(+), 22 deletions(-) diff --git a/packages/rs-dpp/src/data_contract/validation/multi_validator.rs b/packages/rs-dpp/src/data_contract/validation/multi_validator.rs index 0d5c49171cb..4380f59d0db 100644 --- a/packages/rs-dpp/src/data_contract/validation/multi_validator.rs +++ b/packages/rs-dpp/src/data_contract/validation/multi_validator.rs @@ -76,9 +76,9 @@ pub fn pattern_is_valid_regex_validator( } } -fn unwrap_error_to_result<'a, 'b>( +fn unwrap_error_to_result<'a>( v: Result, ConsensusError>, - result: &'b mut SimpleValidationResult, + result: &mut SimpleValidationResult, ) -> Option<&'a Value> { match v { Ok(v) => v, diff --git a/packages/rs-dpp/src/data_trigger/mod.rs b/packages/rs-dpp/src/data_trigger/mod.rs index f00e2634a77..15945e53179 100644 --- a/packages/rs-dpp/src/data_trigger/mod.rs +++ b/packages/rs-dpp/src/data_trigger/mod.rs @@ -71,7 +71,7 @@ impl DataTrigger { document_type: &str, transition_action: Action, ) -> bool { - &self.data_contract_id == data_contract_id + self.data_contract_id == data_contract_id && self.document_type == document_type && self.transition_action == transition_action } diff --git a/packages/rs-dpp/src/document/document.rs b/packages/rs-dpp/src/document/document.rs index 23af4ac3c9c..ba851a74bfe 100644 --- a/packages/rs-dpp/src/document/document.rs +++ b/packages/rs-dpp/src/document/document.rs @@ -94,8 +94,8 @@ pub struct Document { impl Document { /// Return a value given the path to its key for a document type. - pub fn get_raw_for_document_type<'a>( - &'a self, + pub fn get_raw_for_document_type( + &self, key_path: &str, document_type: &DocumentType, owner_id: Option<[u8; 32]>, @@ -130,8 +130,8 @@ impl Document { } /// Return a value given the path to its key and the document type for a contract. - pub fn get_raw_for_contract<'a>( - &'a self, + pub fn get_raw_for_contract( + &self, key: &str, document_type_name: &str, contract: &DataContract, diff --git a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs index 3920d059716..defdf78c5dc 100644 --- a/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +++ b/packages/rs-dpp/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs @@ -14,6 +14,12 @@ DO NOT CHANGE ORDER OF FIELDS WITHOUT INTRODUCING OF NEW VERSION */ +impl Default for InvalidIdentityCreditWithdrawalTransitionOutputScriptError { + fn default() -> Self { + Self::new() + } +} + impl InvalidIdentityCreditWithdrawalTransitionOutputScriptError { pub fn new() -> Self { Self {} diff --git a/packages/rs-dpp/src/identity/state_transition/identity_create_transition/validation/state/mod.rs b/packages/rs-dpp/src/identity/state_transition/identity_create_transition/validation/state/mod.rs index a226816ec07..018682d2f0c 100644 --- a/packages/rs-dpp/src/identity/state_transition/identity_create_transition/validation/state/mod.rs +++ b/packages/rs-dpp/src/identity/state_transition/identity_create_transition/validation/state/mod.rs @@ -27,9 +27,7 @@ where &self, data: &IdentityCreateTransition, ) -> Result, ProtocolError> { - validate_identity_create_transition_state(&self.state_repository, data) - .await - .map_err(|err| err) + validate_identity_create_transition_state(&self.state_repository, data).await } } diff --git a/packages/rs-dpp/src/state_transition/state_transition_factory.rs b/packages/rs-dpp/src/state_transition/state_transition_factory.rs index 7fb5f929ef5..2e7c903ea69 100644 --- a/packages/rs-dpp/src/state_transition/state_transition_factory.rs +++ b/packages/rs-dpp/src/state_transition/state_transition_factory.rs @@ -146,11 +146,8 @@ where raw_state_transition: raw_state_transition.clone(), })?; - match state_transition_type { - StateTransitionType::DataContractUpdate => { - DataContractUpdateTransition::clean_value(&mut raw_state_transition)?; - } - _ => {} + if state_transition_type == StateTransitionType::DataContractUpdate { + DataContractUpdateTransition::clean_value(&mut raw_state_transition)?; } } else { return Err(StateTransitionError::InvalidStateTransitionError { diff --git a/packages/rs-dpp/src/tests/fixtures/public_keys_validator_mock.rs b/packages/rs-dpp/src/tests/fixtures/public_keys_validator_mock.rs index d3f27981806..c66f2b19aba 100644 --- a/packages/rs-dpp/src/tests/fixtures/public_keys_validator_mock.rs +++ b/packages/rs-dpp/src/tests/fixtures/public_keys_validator_mock.rs @@ -13,6 +13,12 @@ pub struct PublicKeysValidatorMock { called_with: Mutex>, } +impl Default for PublicKeysValidatorMock { + fn default() -> Self { + Self::new() + } +} + impl PublicKeysValidatorMock { pub fn new() -> Self { Self { diff --git a/packages/wasm-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs b/packages/wasm-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs index 9ee617fc8ae..ef45f6ba6e7 100644 --- a/packages/wasm-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +++ b/packages/wasm-dpp/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs @@ -15,6 +15,12 @@ impl From<&MissingStateTransitionTypeError> for MissingStateTransitionTypeErrorW } } +impl Default for MissingStateTransitionTypeErrorWasm { + fn default() -> Self { + Self::new() + } +} + #[wasm_bindgen(js_class=MissingStateTransitionTypeError)] impl MissingStateTransitionTypeErrorWasm { #[wasm_bindgen(constructor)] diff --git a/packages/wasm-dpp/src/errors/value_error.rs b/packages/wasm-dpp/src/errors/value_error.rs index c5245fc6d2e..043437408f7 100644 --- a/packages/wasm-dpp/src/errors/value_error.rs +++ b/packages/wasm-dpp/src/errors/value_error.rs @@ -26,7 +26,7 @@ impl PlatformValueErrorWasm { } #[wasm_bindgen(js_name=toString)] - pub fn to_string(&self) -> String { + pub fn stringify(&self) -> String { format!("PlatformValueError: {}", self.message) } } diff --git a/packages/wasm-dpp/src/state_transition/state_transition_facade.rs b/packages/wasm-dpp/src/state_transition/state_transition_facade.rs index 887a7837690..a57b3301b56 100644 --- a/packages/wasm-dpp/src/state_transition/state_transition_facade.rs +++ b/packages/wasm-dpp/src/state_transition/state_transition_facade.rs @@ -69,12 +69,9 @@ impl StateTransitionFacadeWasm { .map_err(|_| JsValue::from_str("Invalid state transition type"))?; // TODO(wasm-dpp): clean values of other transitions as well? - match state_transition_type { - StateTransitionType::DataContractUpdate => { - DataContractUpdateTransition::clean_value(&mut raw_state_transition) - .map_err(PlatformValueErrorWasm::from)?; - } - _ => {} + if state_transition_type == StateTransitionType::DataContractUpdate { + DataContractUpdateTransition::clean_value(&mut raw_state_transition) + .map_err(PlatformValueErrorWasm::from)?; } let result = self From 22efae6fd085a72c03b51f89f6da30f842be6713 Mon Sep 17 00:00:00 2001 From: Anton Suprunchuk Date: Mon, 10 Apr 2023 21:02:08 +0700 Subject: [PATCH 09/13] rename data_contract_factory module --- .../data_contract_factory.rs | 163 ----------------- .../wasm-dpp/src/data_contract_factory/mod.rs | 164 +++++++++++++++++- 2 files changed, 163 insertions(+), 164 deletions(-) delete mode 100644 packages/wasm-dpp/src/data_contract_factory/data_contract_factory.rs diff --git a/packages/wasm-dpp/src/data_contract_factory/data_contract_factory.rs b/packages/wasm-dpp/src/data_contract_factory/data_contract_factory.rs deleted file mode 100644 index 779d4138b8b..00000000000 --- a/packages/wasm-dpp/src/data_contract_factory/data_contract_factory.rs +++ /dev/null @@ -1,163 +0,0 @@ -use std::sync::Arc; - -use dpp::{ - data_contract::{ - validation::data_contract_validator::DataContractValidator, DataContractFactory, - }, - platform_value, - prelude::Identifier, - version::ProtocolVersionValidator, - ProtocolError, -}; -use wasm_bindgen::prelude::*; - -use crate::entropy_generator::ExternalEntropyGenerator; -use crate::utils::WithJsError; - -use crate::{ - data_contract::errors::InvalidDataContractError, - errors::{from_dpp_err, protocol_error::from_protocol_error}, - js_value_to_data_contract_value, - validation::ValidationResultWasm, - with_js_error, DataContractCreateTransitionWasm, DataContractParameters, DataContractWasm, -}; - -#[wasm_bindgen(js_name=DataContractValidator)] -pub struct DataContractValidatorWasm(DataContractValidator); - -impl From for DataContractValidatorWasm { - fn from(v: DataContractValidator) -> Self { - DataContractValidatorWasm(v) - } -} - -impl From for DataContractValidator { - fn from(val: DataContractValidatorWasm) -> Self { - val.0 - } -} - -impl Default for DataContractValidatorWasm { - fn default() -> Self { - Self::new() - } -} - -#[wasm_bindgen(js_class=DataContractValidator)] -impl DataContractValidatorWasm { - #[wasm_bindgen(constructor)] - pub fn new() -> Self { - DataContractValidator::new(std::sync::Arc::new(ProtocolVersionValidator::default())).into() - } - - #[wasm_bindgen] - pub fn validate(&self, raw_data_contract: JsValue) -> Result { - let parameters: DataContractParameters = - with_js_error!(serde_wasm_bindgen::from_value(raw_data_contract))?; - let platform_object = platform_value::to_value(parameters).expect("Implements Serialize"); - - let validation_result = self - .0 - .validate(&platform_object) - .map_err(from_protocol_error)?; - Ok(validation_result.map(|_| JsValue::undefined()).into()) - } -} - -#[wasm_bindgen(js_name=DataContractFactory)] -pub struct DataContractFactoryWasm(DataContractFactory); - -impl From for DataContractFactoryWasm { - fn from(v: DataContractFactory) -> Self { - DataContractFactoryWasm(v) - } -} - -impl From for DataContractFactory { - fn from(val: DataContractFactoryWasm) -> Self { - val.0 - } -} - -#[wasm_bindgen(js_class=DataContractFactory)] -impl DataContractFactoryWasm { - #[wasm_bindgen(constructor)] - pub fn new( - protocol_version: u32, - validate_data_contract: DataContractValidatorWasm, - external_entropy_generator_arg: Option, - ) -> DataContractFactoryWasm { - if let Some(external_entropy_generator) = external_entropy_generator_arg { - DataContractFactory::new_with_entropy_generator( - protocol_version, - Arc::new(validate_data_contract.into()), - Box::new(external_entropy_generator), - ) - } else { - DataContractFactory::new(protocol_version, Arc::new(validate_data_contract.into())) - } - .into() - } - - #[wasm_bindgen(js_name=create)] - pub fn create( - &self, - owner_id: Vec, - documents: JsValue, - ) -> Result { - let documents_object: platform_value::Value = - with_js_error!(serde_wasm_bindgen::from_value(documents))?; - let identifier = Identifier::from_bytes(&owner_id) - .map_err(ProtocolError::ValueError) - .with_js_error()?; - //todo: contract config - self.0 - .create(identifier, documents_object, None, None) - .map(Into::into) - .with_js_error() - } - - #[wasm_bindgen(js_name=createFromObject)] - pub async fn create_from_object( - &self, - object: JsValue, - skip_validation: Option, - ) -> Result { - let parameters_value = js_value_to_data_contract_value(object.clone())?; - let result = self - .0 - .create_from_object(parameters_value, skip_validation.unwrap_or(false)) - .await; - match result { - Ok(data_contract) => Ok(data_contract.into()), - Err(dpp::ProtocolError::InvalidDataContractError(err)) => { - Err(InvalidDataContractError::new(err.errors, object).into()) - } - Err(other) => Err(from_dpp_err(other)), - } - } - - #[wasm_bindgen(js_name=createFromBuffer)] - pub async fn create_from_buffer( - &self, - buffer: Vec, - skip_validation: Option, - ) -> Result { - self.0 - .create_from_buffer(buffer, skip_validation.unwrap_or(false)) - .await - .map(Into::into) - .map_err(from_protocol_error) - } - - #[wasm_bindgen(js_name=createDataContractCreateTransition)] - pub async fn create_data_contract_create_transition( - &self, - data_contract: &DataContractWasm, - ) -> Result { - self.0 - .create_data_contract_create_transition(data_contract.clone().into()) - .map(Into::into) - .with_js_error() - } -} diff --git a/packages/wasm-dpp/src/data_contract_factory/mod.rs b/packages/wasm-dpp/src/data_contract_factory/mod.rs index 12d71eba330..a286c815606 100644 --- a/packages/wasm-dpp/src/data_contract_factory/mod.rs +++ b/packages/wasm-dpp/src/data_contract_factory/mod.rs @@ -1 +1,163 @@ -mod data_contract_factory; +use std::sync::Arc; + +use dpp::{ + data_contract::{ + validation::data_contract_validator::DataContractValidator, DataContractFactory, + }, + platform_value, + prelude::Identifier, + version::ProtocolVersionValidator, + ProtocolError, +}; +use wasm_bindgen::prelude::*; + +use crate::entropy_generator::ExternalEntropyGenerator; +use crate::utils::WithJsError; + +use crate::{ + data_contract::errors::InvalidDataContractError, + errors::{from_dpp_err, protocol_error::from_protocol_error}, + js_value_to_data_contract_value, + validation::ValidationResultWasm, + with_js_error, DataContractCreateTransitionWasm, DataContractParameters, DataContractWasm, +}; + +#[wasm_bindgen(js_name=DataContractValidator)] +pub struct DataContractValidatorWasm(DataContractValidator); + +impl From for DataContractValidatorWasm { + fn from(v: DataContractValidator) -> Self { + DataContractValidatorWasm(v) + } +} + +impl From for DataContractValidator { + fn from(val: DataContractValidatorWasm) -> Self { + val.0 + } +} + +impl Default for DataContractValidatorWasm { + fn default() -> Self { + Self::new() + } +} + +#[wasm_bindgen(js_class=DataContractValidator)] +impl DataContractValidatorWasm { + #[wasm_bindgen(constructor)] + pub fn new() -> Self { + DataContractValidator::new(std::sync::Arc::new(ProtocolVersionValidator::default())).into() + } + + #[wasm_bindgen] + pub fn validate(&self, raw_data_contract: JsValue) -> Result { + let parameters: DataContractParameters = + with_js_error!(serde_wasm_bindgen::from_value(raw_data_contract))?; + let platform_object = platform_value::to_value(parameters).expect("Implements Serialize"); + + let validation_result = self + .0 + .validate(&platform_object) + .map_err(from_protocol_error)?; + Ok(validation_result.map(|_| JsValue::undefined()).into()) + } +} + +#[wasm_bindgen(js_name=DataContractFactory)] +pub struct DataContractFactoryWasm(DataContractFactory); + +impl From for DataContractFactoryWasm { + fn from(v: DataContractFactory) -> Self { + DataContractFactoryWasm(v) + } +} + +impl From for DataContractFactory { + fn from(val: DataContractFactoryWasm) -> Self { + val.0 + } +} + +#[wasm_bindgen(js_class=DataContractFactory)] +impl DataContractFactoryWasm { + #[wasm_bindgen(constructor)] + pub fn new( + protocol_version: u32, + validate_data_contract: DataContractValidatorWasm, + external_entropy_generator_arg: Option, + ) -> DataContractFactoryWasm { + if let Some(external_entropy_generator) = external_entropy_generator_arg { + DataContractFactory::new_with_entropy_generator( + protocol_version, + Arc::new(validate_data_contract.into()), + Box::new(external_entropy_generator), + ) + } else { + DataContractFactory::new(protocol_version, Arc::new(validate_data_contract.into())) + } + .into() + } + + #[wasm_bindgen(js_name=create)] + pub fn create( + &self, + owner_id: Vec, + documents: JsValue, + ) -> Result { + let documents_object: platform_value::Value = + with_js_error!(serde_wasm_bindgen::from_value(documents))?; + let identifier = Identifier::from_bytes(&owner_id) + .map_err(ProtocolError::ValueError) + .with_js_error()?; + //todo: contract config + self.0 + .create(identifier, documents_object, None, None) + .map(Into::into) + .with_js_error() + } + + #[wasm_bindgen(js_name=createFromObject)] + pub async fn create_from_object( + &self, + object: JsValue, + skip_validation: Option, + ) -> Result { + let parameters_value = js_value_to_data_contract_value(object.clone())?; + let result = self + .0 + .create_from_object(parameters_value, skip_validation.unwrap_or(false)) + .await; + match result { + Ok(data_contract) => Ok(data_contract.into()), + Err(dpp::ProtocolError::InvalidDataContractError(err)) => { + Err(InvalidDataContractError::new(err.errors, object).into()) + } + Err(other) => Err(from_dpp_err(other)), + } + } + + #[wasm_bindgen(js_name=createFromBuffer)] + pub async fn create_from_buffer( + &self, + buffer: Vec, + skip_validation: Option, + ) -> Result { + self.0 + .create_from_buffer(buffer, skip_validation.unwrap_or(false)) + .await + .map(Into::into) + .map_err(from_protocol_error) + } + + #[wasm_bindgen(js_name=createDataContractCreateTransition)] + pub async fn create_data_contract_create_transition( + &self, + data_contract: &DataContractWasm, + ) -> Result { + self.0 + .create_data_contract_create_transition(data_contract.clone().into()) + .map(Into::into) + .with_js_error() + } +} From bff013f994f183290c0401322c20fc9f4909d5db Mon Sep 17 00:00:00 2001 From: Anton Suprunchuk Date: Mon, 10 Apr 2023 21:06:35 +0700 Subject: [PATCH 10/13] rename identity_create_transition module --- .../identity_create_transition.rs | 356 ----------------- .../identity_create_transition/mod.rs | 360 +++++++++++++++++- 2 files changed, 357 insertions(+), 359 deletions(-) diff --git a/packages/wasm-dpp/src/identity/state_transition/identity_create_transition/identity_create_transition.rs b/packages/wasm-dpp/src/identity/state_transition/identity_create_transition/identity_create_transition.rs index 7f3efb3e0f9..e69de29bb2d 100644 --- a/packages/wasm-dpp/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +++ b/packages/wasm-dpp/src/identity/state_transition/identity_create_transition/identity_create_transition.rs @@ -1,356 +0,0 @@ -use std::convert::TryInto; -use std::default::Default; - -use wasm_bindgen::__rt::Ref; -use wasm_bindgen::prelude::*; - -use crate::identifier::IdentifierWrapper; - -use crate::{ - buffer::Buffer, - create_asset_lock_proof_from_wasm_instance, - errors::RustConversionError, - identity::state_transition::asset_lock_proof::{ - ChainAssetLockProofWasm, InstantAssetLockProofWasm, - }, - identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitnessWasm, - state_transition::StateTransitionExecutionContextWasm, - with_js_error, -}; - -use crate::bls_adapter::{BlsAdapter, JsBlsAdapter}; -use crate::errors::from_dpp_err; -use dpp::state_transition::StateTransitionConvert; - -use crate::utils::{generic_of_js_val, ToSerdeJSONExt, WithJsError}; -use dpp::platform_value::string_encoding::Encoding; -use dpp::platform_value::{string_encoding, BinaryData}; -use dpp::{ - identity::state_transition::{ - asset_lock_proof::AssetLockProof, identity_create_transition::IdentityCreateTransition, - identity_public_key_transitions::IdentityPublicKeyWithWitness, - }, - state_transition::StateTransitionLike, -}; - -#[wasm_bindgen(js_name=IdentityCreateTransition)] -#[derive(Clone)] -pub struct IdentityCreateTransitionWasm(IdentityCreateTransition); - -impl From for IdentityCreateTransitionWasm { - fn from(v: IdentityCreateTransition) -> Self { - IdentityCreateTransitionWasm(v) - } -} - -impl From for IdentityCreateTransition { - fn from(v: IdentityCreateTransitionWasm) -> Self { - v.0 - } -} - -#[wasm_bindgen(js_class = IdentityCreateTransition)] -impl IdentityCreateTransitionWasm { - #[wasm_bindgen(constructor)] - pub fn new(raw_parameters: JsValue) -> Result { - let mut raw_state_transition = raw_parameters.with_serde_to_platform_value()?; - IdentityCreateTransition::clean_value(&mut raw_state_transition).with_js_error()?; - let identity_create_transition = IdentityCreateTransition::new(raw_state_transition) - .map_err(|e| RustConversionError::Error(e.to_string()).to_js_value())?; - - Ok(identity_create_transition.into()) - } - - #[wasm_bindgen(js_name=setAssetLockProof)] - pub fn set_asset_lock_proof(&mut self, asset_lock_proof: JsValue) -> Result<(), JsValue> { - let asset_lock_proof = create_asset_lock_proof_from_wasm_instance(&asset_lock_proof)?; - - self.0 - .set_asset_lock_proof(asset_lock_proof) - .map_err(|e| RustConversionError::Error(e.to_string()).to_js_value())?; - - Ok(()) - } - - #[wasm_bindgen(getter, js_name=assetLockProof)] - pub fn asset_lock_proof(&self) -> JsValue { - self.get_asset_lock_proof() - } - - #[wasm_bindgen(js_name=getAssetLockProof)] - pub fn get_asset_lock_proof(&self) -> JsValue { - let asset_lock_proof = self.0.get_asset_lock_proof().to_owned(); - - match asset_lock_proof { - AssetLockProof::Chain(chain_asset_lock_proof) => { - ChainAssetLockProofWasm::from(chain_asset_lock_proof).into() - } - AssetLockProof::Instant(instant_asset_lock_proof) => { - InstantAssetLockProofWasm::from(instant_asset_lock_proof).into() - } - } - } - - #[wasm_bindgen(js_name=setPublicKeys)] - pub fn set_public_keys(&mut self, public_keys: Vec) -> Result<(), JsValue> { - let public_keys = public_keys - .iter() - .map(|value| { - let public_key: Ref = - generic_of_js_val::( - value, - "IdentityPublicKeyWithWitness", - )?; - Ok(public_key.clone().into()) - }) - .collect::, JsValue>>()?; - - self.0.set_public_keys(public_keys); - - Ok(()) - } - - #[wasm_bindgen(js_name=addPublicKeys)] - pub fn add_public_keys(&mut self, public_keys: Vec) -> Result<(), JsValue> { - let mut public_keys = public_keys - .iter() - .map(|value| { - let public_key: Ref = - generic_of_js_val::( - value, - "IdentityPublicKeyWithWitness", - )?; - Ok(public_key.clone().into()) - }) - .collect::, JsValue>>()?; - - self.0.add_public_keys(&mut public_keys); - - Ok(()) - } - - #[wasm_bindgen(js_name=getPublicKeys)] - pub fn get_public_keys(&self) -> Vec { - self.0 - .get_public_keys() - .iter() - .map(IdentityPublicKeyWithWitness::to_owned) - .map(IdentityPublicKeyWithWitnessWasm::from) - .map(JsValue::from) - .collect() - } - - #[wasm_bindgen(getter, js_name=publicKeys)] - pub fn public_keys(&self) -> Vec { - self.get_public_keys() - } - - #[wasm_bindgen(js_name=getType)] - pub fn get_type(&self) -> u8 { - self.0.get_type() as u8 - } - - #[wasm_bindgen(getter, js_name=identityId)] - pub fn identity_id(&self) -> IdentifierWrapper { - self.get_identity_id() - } - - #[wasm_bindgen(js_name=getIdentityId)] - pub fn get_identity_id(&self) -> IdentifierWrapper { - (*self.0.get_identity_id()).into() - } - - #[wasm_bindgen(js_name=getOwnerId)] - pub fn get_owner_id(&self) -> IdentifierWrapper { - (*self.0.get_owner_id()).into() - } - - #[wasm_bindgen(js_name=toObject)] - pub fn to_object(&self, options: JsValue) -> Result { - let opts: super::to_object::ToObjectOptions = if options.is_object() { - with_js_error!(serde_wasm_bindgen::from_value(options.clone()))? - } else { - Default::default() - }; - - let _skip_signature = opts.skip_signature; - let object = super::to_object::to_object_struct(&self.0, opts); - let js_object = js_sys::Object::new(); - - js_sys::Reflect::set( - &js_object, - &"type".to_owned().into(), - &object.transition_type.into(), - )?; - - js_sys::Reflect::set( - &js_object, - &"protocolVersion".to_owned().into(), - &object.protocol_version.into(), - )?; - - if let Some(signature) = object.signature { - let signature_value: JsValue = if signature.is_empty() { - JsValue::undefined() - } else { - Buffer::from_bytes(&signature).into() - }; - - js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?; - } - - let asset_lock_proof_object = match object.asset_lock_proof { - AssetLockProof::Instant(instant_asset_lock_proof) => { - InstantAssetLockProofWasm::from(instant_asset_lock_proof).to_object()? - } - AssetLockProof::Chain(chain_asset_lock_proof) => { - ChainAssetLockProofWasm::from(chain_asset_lock_proof).to_object()? - } - }; - - js_sys::Reflect::set( - &js_object, - &"assetLockProof".to_owned().into(), - &asset_lock_proof_object, - )?; - - let keys_objects = object - .public_keys - .into_iter() - .map(IdentityPublicKeyWithWitnessWasm::from) - .map(|key| key.to_object(options.clone())) - .collect::>()?; - - js_sys::Reflect::set(&js_object, &"publicKeys".to_owned().into(), &keys_objects)?; - - Ok(js_object.into()) - } - - #[wasm_bindgen(js_name=toBuffer)] - pub fn to_buffer(&self, options: JsValue) -> Result { - let opts: super::to_object::ToObjectOptions = if options.is_object() { - with_js_error!(serde_wasm_bindgen::from_value(options))? - } else { - Default::default() - }; - - let buffer = self - .0 - .to_buffer(opts.skip_signature.unwrap_or(false)) - .map_err(from_dpp_err)?; - - Ok(Buffer::from_bytes(&buffer).into()) - } - - #[wasm_bindgen(js_name=toJSON)] - pub fn to_json(&self) -> Result { - let object = super::to_object::to_object_struct(&self.0, Default::default()); - let js_object = js_sys::Object::new(); - - js_sys::Reflect::set( - &js_object, - &"type".to_owned().into(), - &object.transition_type.into(), - )?; - - js_sys::Reflect::set( - &js_object, - &"protocolVersion".to_owned().into(), - &object.protocol_version.into(), - )?; - - if let Some(signature) = object.signature { - let signature_value: JsValue = if signature.is_empty() { - JsValue::undefined() - } else { - string_encoding::encode(signature.as_slice(), Encoding::Base64).into() - }; - - js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?; - } - - let asset_lock_proof_json = match object.asset_lock_proof { - AssetLockProof::Instant(instant_asset_lock_proof) => { - InstantAssetLockProofWasm::from(instant_asset_lock_proof).to_json()? - } - AssetLockProof::Chain(chain_asset_lock_proof) => { - ChainAssetLockProofWasm::from(chain_asset_lock_proof).to_json()? - } - }; - - js_sys::Reflect::set( - &js_object, - &"assetLockProof".to_owned().into(), - &asset_lock_proof_json, - )?; - - let keys_objects = object - .public_keys - .into_iter() - .map(IdentityPublicKeyWithWitnessWasm::from) - .map(|key| key.to_json()) - .collect::>()?; - - js_sys::Reflect::set(&js_object, &"publicKeys".to_owned().into(), &keys_objects)?; - - Ok(js_object.into()) - } - - #[wasm_bindgen(js_name=getModifiedDataIds)] - pub fn get_modified_data_ids(&self) -> Vec { - let ids = self.0.get_modified_data_ids(); - - ids.into_iter().map(IdentifierWrapper::from).collect() - } - - #[wasm_bindgen(js_name=isDataContractStateTransition)] - pub fn is_data_contract_state_transition(&self) -> bool { - self.0.is_data_contract_state_transition() - } - - #[wasm_bindgen(js_name=isDocumentStateTransition)] - pub fn is_document_state_transition(&self) -> bool { - self.0.is_document_state_transition() - } - - #[wasm_bindgen(js_name=isIdentityStateTransition)] - pub fn is_identity_state_transition(&self) -> bool { - self.0.is_identity_state_transition() - } - - #[wasm_bindgen(js_name=setExecutionContext)] - pub fn set_execution_context(&mut self, context: &StateTransitionExecutionContextWasm) { - self.0.set_execution_context(context.into()) - } - - #[wasm_bindgen(js_name=getExecutionContext)] - pub fn get_execution_context(&mut self) -> StateTransitionExecutionContextWasm { - self.0.get_execution_context().into() - } - - #[wasm_bindgen(js_name=signByPrivateKey)] - pub fn sign_by_private_key( - &mut self, - private_key: Vec, - key_type: u8, - bls: JsBlsAdapter, - ) -> Result<(), JsValue> { - let bls_adapter = BlsAdapter(bls); - let key_type = key_type - .try_into() - .map_err(|e: anyhow::Error| e.to_string())?; - - self.0 - .sign_by_private_key(private_key.as_slice(), key_type, &bls_adapter) - .with_js_error() - } - - #[wasm_bindgen(js_name=getSignature)] - pub fn get_signature(&self) -> Buffer { - Buffer::from_bytes_owned(self.0.get_signature().to_vec()) - } - #[wasm_bindgen(js_name=setSignature)] - pub fn set_signature(&mut self, signature: Option>) { - self.0.signature = BinaryData::new(signature.unwrap_or(vec![])) - } -} diff --git a/packages/wasm-dpp/src/identity/state_transition/identity_create_transition/mod.rs b/packages/wasm-dpp/src/identity/state_transition/identity_create_transition/mod.rs index e2c7d563d9f..747b2b0c774 100644 --- a/packages/wasm-dpp/src/identity/state_transition/identity_create_transition/mod.rs +++ b/packages/wasm-dpp/src/identity/state_transition/identity_create_transition/mod.rs @@ -1,8 +1,362 @@ -pub use identity_create_transition::*; - pub mod apply_identity_create_transition; -pub mod identity_create_transition; pub mod identity_create_transition_basic_validator; pub mod identity_create_transition_state_validator; mod to_object; + +use std::convert::TryInto; +use std::default::Default; + +use wasm_bindgen::__rt::Ref; +use wasm_bindgen::prelude::*; + +use crate::identifier::IdentifierWrapper; + +use crate::{ + buffer::Buffer, + create_asset_lock_proof_from_wasm_instance, + errors::RustConversionError, + identity::state_transition::asset_lock_proof::{ + ChainAssetLockProofWasm, InstantAssetLockProofWasm, + }, + identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitnessWasm, + state_transition::StateTransitionExecutionContextWasm, + with_js_error, +}; + +use crate::bls_adapter::{BlsAdapter, JsBlsAdapter}; +use crate::errors::from_dpp_err; +use dpp::state_transition::StateTransitionConvert; + +use crate::utils::{generic_of_js_val, ToSerdeJSONExt, WithJsError}; +use dpp::platform_value::string_encoding::Encoding; +use dpp::platform_value::{string_encoding, BinaryData}; +use dpp::{ + identity::state_transition::{ + asset_lock_proof::AssetLockProof, identity_create_transition::IdentityCreateTransition, + identity_public_key_transitions::IdentityPublicKeyWithWitness, + }, + state_transition::StateTransitionLike, +}; + +#[wasm_bindgen(js_name=IdentityCreateTransition)] +#[derive(Clone)] +pub struct IdentityCreateTransitionWasm(IdentityCreateTransition); + +impl From for IdentityCreateTransitionWasm { + fn from(v: IdentityCreateTransition) -> Self { + IdentityCreateTransitionWasm(v) + } +} + +impl From for IdentityCreateTransition { + fn from(v: IdentityCreateTransitionWasm) -> Self { + v.0 + } +} + +#[wasm_bindgen(js_class = IdentityCreateTransition)] +impl IdentityCreateTransitionWasm { + #[wasm_bindgen(constructor)] + pub fn new(raw_parameters: JsValue) -> Result { + let mut raw_state_transition = raw_parameters.with_serde_to_platform_value()?; + IdentityCreateTransition::clean_value(&mut raw_state_transition).with_js_error()?; + let identity_create_transition = IdentityCreateTransition::new(raw_state_transition) + .map_err(|e| RustConversionError::Error(e.to_string()).to_js_value())?; + + Ok(identity_create_transition.into()) + } + + #[wasm_bindgen(js_name=setAssetLockProof)] + pub fn set_asset_lock_proof(&mut self, asset_lock_proof: JsValue) -> Result<(), JsValue> { + let asset_lock_proof = create_asset_lock_proof_from_wasm_instance(&asset_lock_proof)?; + + self.0 + .set_asset_lock_proof(asset_lock_proof) + .map_err(|e| RustConversionError::Error(e.to_string()).to_js_value())?; + + Ok(()) + } + + #[wasm_bindgen(getter, js_name=assetLockProof)] + pub fn asset_lock_proof(&self) -> JsValue { + self.get_asset_lock_proof() + } + + #[wasm_bindgen(js_name=getAssetLockProof)] + pub fn get_asset_lock_proof(&self) -> JsValue { + let asset_lock_proof = self.0.get_asset_lock_proof().to_owned(); + + match asset_lock_proof { + AssetLockProof::Chain(chain_asset_lock_proof) => { + ChainAssetLockProofWasm::from(chain_asset_lock_proof).into() + } + AssetLockProof::Instant(instant_asset_lock_proof) => { + InstantAssetLockProofWasm::from(instant_asset_lock_proof).into() + } + } + } + + #[wasm_bindgen(js_name=setPublicKeys)] + pub fn set_public_keys(&mut self, public_keys: Vec) -> Result<(), JsValue> { + let public_keys = public_keys + .iter() + .map(|value| { + let public_key: Ref = + generic_of_js_val::( + value, + "IdentityPublicKeyWithWitness", + )?; + Ok(public_key.clone().into()) + }) + .collect::, JsValue>>()?; + + self.0.set_public_keys(public_keys); + + Ok(()) + } + + #[wasm_bindgen(js_name=addPublicKeys)] + pub fn add_public_keys(&mut self, public_keys: Vec) -> Result<(), JsValue> { + let mut public_keys = public_keys + .iter() + .map(|value| { + let public_key: Ref = + generic_of_js_val::( + value, + "IdentityPublicKeyWithWitness", + )?; + Ok(public_key.clone().into()) + }) + .collect::, JsValue>>()?; + + self.0.add_public_keys(&mut public_keys); + + Ok(()) + } + + #[wasm_bindgen(js_name=getPublicKeys)] + pub fn get_public_keys(&self) -> Vec { + self.0 + .get_public_keys() + .iter() + .map(IdentityPublicKeyWithWitness::to_owned) + .map(IdentityPublicKeyWithWitnessWasm::from) + .map(JsValue::from) + .collect() + } + + #[wasm_bindgen(getter, js_name=publicKeys)] + pub fn public_keys(&self) -> Vec { + self.get_public_keys() + } + + #[wasm_bindgen(js_name=getType)] + pub fn get_type(&self) -> u8 { + self.0.get_type() as u8 + } + + #[wasm_bindgen(getter, js_name=identityId)] + pub fn identity_id(&self) -> IdentifierWrapper { + self.get_identity_id() + } + + #[wasm_bindgen(js_name=getIdentityId)] + pub fn get_identity_id(&self) -> IdentifierWrapper { + (*self.0.get_identity_id()).into() + } + + #[wasm_bindgen(js_name=getOwnerId)] + pub fn get_owner_id(&self) -> IdentifierWrapper { + (*self.0.get_owner_id()).into() + } + + #[wasm_bindgen(js_name=toObject)] + pub fn to_object(&self, options: JsValue) -> Result { + let opts: to_object::ToObjectOptions = if options.is_object() { + with_js_error!(serde_wasm_bindgen::from_value(options.clone()))? + } else { + Default::default() + }; + + let _skip_signature = opts.skip_signature; + let object = to_object::to_object_struct(&self.0, opts); + let js_object = js_sys::Object::new(); + + js_sys::Reflect::set( + &js_object, + &"type".to_owned().into(), + &object.transition_type.into(), + )?; + + js_sys::Reflect::set( + &js_object, + &"protocolVersion".to_owned().into(), + &object.protocol_version.into(), + )?; + + if let Some(signature) = object.signature { + let signature_value: JsValue = if signature.is_empty() { + JsValue::undefined() + } else { + Buffer::from_bytes(&signature).into() + }; + + js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?; + } + + let asset_lock_proof_object = match object.asset_lock_proof { + AssetLockProof::Instant(instant_asset_lock_proof) => { + InstantAssetLockProofWasm::from(instant_asset_lock_proof).to_object()? + } + AssetLockProof::Chain(chain_asset_lock_proof) => { + ChainAssetLockProofWasm::from(chain_asset_lock_proof).to_object()? + } + }; + + js_sys::Reflect::set( + &js_object, + &"assetLockProof".to_owned().into(), + &asset_lock_proof_object, + )?; + + let keys_objects = object + .public_keys + .into_iter() + .map(IdentityPublicKeyWithWitnessWasm::from) + .map(|key| key.to_object(options.clone())) + .collect::>()?; + + js_sys::Reflect::set(&js_object, &"publicKeys".to_owned().into(), &keys_objects)?; + + Ok(js_object.into()) + } + + #[wasm_bindgen(js_name=toBuffer)] + pub fn to_buffer(&self, options: JsValue) -> Result { + let opts: to_object::ToObjectOptions = if options.is_object() { + with_js_error!(serde_wasm_bindgen::from_value(options))? + } else { + Default::default() + }; + + let buffer = self + .0 + .to_buffer(opts.skip_signature.unwrap_or(false)) + .map_err(from_dpp_err)?; + + Ok(Buffer::from_bytes(&buffer).into()) + } + + #[wasm_bindgen(js_name=toJSON)] + pub fn to_json(&self) -> Result { + let object = to_object::to_object_struct(&self.0, Default::default()); + let js_object = js_sys::Object::new(); + + js_sys::Reflect::set( + &js_object, + &"type".to_owned().into(), + &object.transition_type.into(), + )?; + + js_sys::Reflect::set( + &js_object, + &"protocolVersion".to_owned().into(), + &object.protocol_version.into(), + )?; + + if let Some(signature) = object.signature { + let signature_value: JsValue = if signature.is_empty() { + JsValue::undefined() + } else { + string_encoding::encode(signature.as_slice(), Encoding::Base64).into() + }; + + js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?; + } + + let asset_lock_proof_json = match object.asset_lock_proof { + AssetLockProof::Instant(instant_asset_lock_proof) => { + InstantAssetLockProofWasm::from(instant_asset_lock_proof).to_json()? + } + AssetLockProof::Chain(chain_asset_lock_proof) => { + ChainAssetLockProofWasm::from(chain_asset_lock_proof).to_json()? + } + }; + + js_sys::Reflect::set( + &js_object, + &"assetLockProof".to_owned().into(), + &asset_lock_proof_json, + )?; + + let keys_objects = object + .public_keys + .into_iter() + .map(IdentityPublicKeyWithWitnessWasm::from) + .map(|key| key.to_json()) + .collect::>()?; + + js_sys::Reflect::set(&js_object, &"publicKeys".to_owned().into(), &keys_objects)?; + + Ok(js_object.into()) + } + + #[wasm_bindgen(js_name=getModifiedDataIds)] + pub fn get_modified_data_ids(&self) -> Vec { + let ids = self.0.get_modified_data_ids(); + + ids.into_iter().map(IdentifierWrapper::from).collect() + } + + #[wasm_bindgen(js_name=isDataContractStateTransition)] + pub fn is_data_contract_state_transition(&self) -> bool { + self.0.is_data_contract_state_transition() + } + + #[wasm_bindgen(js_name=isDocumentStateTransition)] + pub fn is_document_state_transition(&self) -> bool { + self.0.is_document_state_transition() + } + + #[wasm_bindgen(js_name=isIdentityStateTransition)] + pub fn is_identity_state_transition(&self) -> bool { + self.0.is_identity_state_transition() + } + + #[wasm_bindgen(js_name=setExecutionContext)] + pub fn set_execution_context(&mut self, context: &StateTransitionExecutionContextWasm) { + self.0.set_execution_context(context.into()) + } + + #[wasm_bindgen(js_name=getExecutionContext)] + pub fn get_execution_context(&mut self) -> StateTransitionExecutionContextWasm { + self.0.get_execution_context().into() + } + + #[wasm_bindgen(js_name=signByPrivateKey)] + pub fn sign_by_private_key( + &mut self, + private_key: Vec, + key_type: u8, + bls: JsBlsAdapter, + ) -> Result<(), JsValue> { + let bls_adapter = BlsAdapter(bls); + let key_type = key_type + .try_into() + .map_err(|e: anyhow::Error| e.to_string())?; + + self.0 + .sign_by_private_key(private_key.as_slice(), key_type, &bls_adapter) + .with_js_error() + } + + #[wasm_bindgen(js_name=getSignature)] + pub fn get_signature(&self) -> Buffer { + Buffer::from_bytes_owned(self.0.get_signature().to_vec()) + } + #[wasm_bindgen(js_name=setSignature)] + pub fn set_signature(&mut self, signature: Option>) { + self.0.signature = BinaryData::new(signature.unwrap_or(vec![])) + } +} From a2047ec52c819afe8488f9161470d6044d65e0c7 Mon Sep 17 00:00:00 2001 From: Anton Suprunchuk Date: Mon, 10 Apr 2023 21:09:22 +0700 Subject: [PATCH 11/13] rename identity_update_transition module --- .../identity_update_transition.rs | 516 ----------------- .../identity_update_transition/mod.rs | 521 +++++++++++++++++- 2 files changed, 518 insertions(+), 519 deletions(-) delete mode 100644 packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs diff --git a/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs b/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs deleted file mode 100644 index 93fd729909c..00000000000 --- a/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +++ /dev/null @@ -1,516 +0,0 @@ -use std::convert::TryInto; -use std::default::Default; - -use dpp::consensus::signature::SignatureError; -use serde::{Deserialize, Serialize}; -use wasm_bindgen::__rt::Ref; -use wasm_bindgen::prelude::*; - -use crate::identifier::IdentifierWrapper; - -use crate::{ - buffer::Buffer, errors::RustConversionError, - identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitnessWasm, - identity::IdentityPublicKeyWasm, state_transition::StateTransitionExecutionContextWasm, - with_js_error, -}; - -use crate::bls_adapter::{BlsAdapter, JsBlsAdapter}; - -use crate::errors::from_dpp_err; -use crate::utils::{generic_of_js_val, WithJsError}; - -use dpp::consensus::ConsensusError; -use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitness; -use dpp::identity::{KeyID, TimestampMillis}; -use dpp::platform_value::string_encoding::Encoding; -use dpp::platform_value::{string_encoding, BinaryData, Value}; -use dpp::prelude::Revision; -use dpp::state_transition::{StateTransitionConvert, StateTransitionIdentitySigned}; -use dpp::{ - identifier::Identifier, - identity::state_transition::identity_update_transition::identity_update_transition::IdentityUpdateTransition, - platform_value, state_transition::StateTransitionLike, ProtocolError, -}; - -#[wasm_bindgen(js_name=IdentityUpdateTransition)] -#[derive(Clone)] -pub struct IdentityUpdateTransitionWasm(IdentityUpdateTransition); - -#[derive(Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct IdentityUpdateTransitionParams { - signature: Vec, - signature_public_key_id: KeyID, - protocol_version: u32, - identity_id: Vec, - revision: Revision, - add_public_keys: Option>, - disable_public_keys: Option>, - public_keys_disabled_at: Option, -} - -impl From for IdentityUpdateTransitionWasm { - fn from(v: IdentityUpdateTransition) -> Self { - IdentityUpdateTransitionWasm(v) - } -} - -impl From for IdentityUpdateTransition { - fn from(v: IdentityUpdateTransitionWasm) -> Self { - v.0 - } -} - -pub fn js_value_to_identity_update_transition_object(object: JsValue) -> Result { - let parameters: IdentityUpdateTransitionParams = - with_js_error!(serde_wasm_bindgen::from_value(object))?; - - platform_value::to_value(parameters).map_err(|e| e.to_string().into()) -} - -#[wasm_bindgen(js_class = IdentityUpdateTransition)] -impl IdentityUpdateTransitionWasm { - #[wasm_bindgen(constructor)] - pub fn new(raw_parameters: JsValue) -> Result { - let mut identity_update_transition_object = - js_value_to_identity_update_transition_object(raw_parameters)?; - - IdentityUpdateTransition::clean_value(&mut identity_update_transition_object) - .map_err(ProtocolError::ValueError) - .with_js_error()?; - - let identity_update_transition = - IdentityUpdateTransition::new(identity_update_transition_object) - .map_err(|e| RustConversionError::Error(e.to_string()).to_js_value())?; - - Ok(identity_update_transition.into()) - } - - #[wasm_bindgen(js_name=setPublicKeysToAdd)] - pub fn set_public_keys_to_add( - &mut self, - public_keys: Option>, - ) -> Result<(), JsValue> { - let mut keys_to_add = vec![]; - if let Some(keys) = public_keys { - keys_to_add = keys - .iter() - .map(|value| { - let public_key: Ref = - generic_of_js_val::( - value, - "IdentityPublicKeyWithWitness", - )?; - Ok(public_key.clone().into()) - }) - .collect::, JsValue>>()?; - } - - self.0.set_public_keys_to_add(keys_to_add); - - Ok(()) - } - - #[wasm_bindgen(js_name=getPublicKeysToAdd)] - pub fn get_public_keys_add(&self) -> Vec { - self.0 - .get_public_keys_to_add() - .iter() - .map(|key| IdentityPublicKeyWithWitnessWasm::from(key.to_owned()).into()) - .collect() - } - - #[wasm_bindgen(getter, js_name=addPublicKeys)] - pub fn add_public_keys(&self) -> Vec { - self.get_public_keys_add() - } - - #[wasm_bindgen(js_name=getPublicKeyIdsToDisable)] - pub fn get_public_key_ids_to_disable(&self) -> Vec { - self.0 - .get_public_key_ids_to_disable() - .iter() - .map(|key| JsValue::from_f64(key.to_owned() as f64)) - .collect() - } - - #[wasm_bindgen(js_name=setPublicKeyIdsToDisable)] - pub fn set_public_key_ids_to_disable(&mut self, public_key_ids: Option>) { - let mut keys = vec![]; - if let Some(public_key_ids) = public_key_ids { - keys = public_key_ids - .iter() - .map(|key| key.to_owned() as KeyID) - .collect::>(); - } - - self.0.set_public_key_ids_to_disable(keys); - } - - #[wasm_bindgen(js_name=getPublicKeysDisabledAt)] - pub fn get_public_keys_disabled_at(&self) -> Option { - self.0 - .get_public_keys_disabled_at() - .map(|timestamp| js_sys::Date::new(&JsValue::from_f64(timestamp as f64))) - } - - #[wasm_bindgen(js_name=setPublicKeysDisabledAt)] - pub fn set_public_keys_disabled_at(&mut self, timestamp: Option) { - if let Some(timestamp) = timestamp { - self.0 - .set_public_keys_disabled_at(Some(timestamp.get_time() as TimestampMillis)); - } else { - self.0.set_public_keys_disabled_at(None); - } - } - - #[wasm_bindgen(js_name=getType)] - pub fn get_type(&self) -> u8 { - self.0.get_type() as u8 - } - - #[wasm_bindgen(getter, js_name=identityId)] - pub fn identity_id(&self) -> IdentifierWrapper { - self.get_identity_id() - } - - #[wasm_bindgen(js_name=getIdentityId)] - pub fn get_identity_id(&self) -> IdentifierWrapper { - (*self.0.get_identity_id()).into() - } - - #[wasm_bindgen(js_name=setIdentityId)] - pub fn set_identity_id(&mut self, identity_id: &IdentifierWrapper) { - self.0.set_identity_id(identity_id.to_owned().into()); - } - - #[wasm_bindgen(js_name=getOwnerId)] - pub fn get_owner_id(&self) -> IdentifierWrapper { - (*self.0.get_owner_id()).into() - } - - #[wasm_bindgen(js_name=toObject)] - pub fn to_object(&self, options: JsValue) -> Result { - let opts: super::to_object::ToObjectOptions = if options.is_object() { - with_js_error!(serde_wasm_bindgen::from_value(options.clone()))? - } else { - Default::default() - }; - - let object = super::to_object::to_object_struct(&self.0, opts); - let js_object = js_sys::Object::new(); - - js_sys::Reflect::set( - &js_object, - &"type".to_owned().into(), - &object.transition_type.into(), - )?; - - js_sys::Reflect::set( - &js_object, - &"protocolVersion".to_owned().into(), - &object.protocol_version.into(), - )?; - - js_sys::Reflect::set( - &js_object, - &"revision".to_owned().into(), - &object.revision.into(), - )?; - - if let Some(signature) = object.signature { - let signature_value: JsValue = if signature.is_empty() { - JsValue::undefined() - } else { - Buffer::from_bytes(&signature).into() - }; - - js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?; - - if let Some(signature_public_key_id) = object.signature_public_key_id { - js_sys::Reflect::set( - &js_object, - &"signaturePublicKeyId".to_owned().into(), - &JsValue::from(signature_public_key_id), - )?; - } else { - js_sys::Reflect::set( - &js_object, - &"signaturePublicKeyId".to_owned().into(), - &JsValue::undefined(), - )?; - } - } - - if let Some(timestamp) = object.public_keys_disabled_at { - js_sys::Reflect::set( - &js_object, - &"publicKeysDisabledAt".to_owned().into(), - &(timestamp as u32).into(), - )?; - } - - if let Some(public_keys_to_add) = object.public_keys_to_add { - let keys_objects = public_keys_to_add - .into_iter() - .map(|key| IdentityPublicKeyWithWitnessWasm::from(key).to_object(options.clone())) - .collect::>()?; - - js_sys::Reflect::set( - &js_object, - &"addPublicKeys".to_owned().into(), - &keys_objects, - )?; - } - - if let Some(public_key_ids_to_disable) = object.public_key_ids_to_disable { - let public_key_ids_to_disable = public_key_ids_to_disable - .into_iter() - .map(|key| JsValue::from_f64(key as f64)) - .collect::(); - - js_sys::Reflect::set( - &js_object, - &"disablePublicKeys".to_owned().into(), - &public_key_ids_to_disable.into(), - )?; - } - - js_sys::Reflect::set( - &js_object, - &"identityId".to_owned().into(), - &Buffer::from_bytes(object.identity_id.to_buffer().as_slice()), - )?; - - Ok(js_object.into()) - } - - #[wasm_bindgen(js_name=toBuffer)] - pub fn to_buffer(&self, options: JsValue) -> Result { - let opts: super::to_object::ToObjectOptions = if options.is_object() { - with_js_error!(serde_wasm_bindgen::from_value(options))? - } else { - Default::default() - }; - - let buffer = self - .0 - .to_buffer(opts.skip_signature.unwrap_or(false)) - .map_err(from_dpp_err)?; - - Ok(Buffer::from_bytes(&buffer).into()) - } - - #[wasm_bindgen(js_name=toJSON)] - pub fn to_json(&self) -> Result { - let object = super::to_object::to_object_struct(&self.0, Default::default()); - let js_object = js_sys::Object::new(); - - js_sys::Reflect::set( - &js_object, - &"type".to_owned().into(), - &object.transition_type.into(), - )?; - - js_sys::Reflect::set( - &js_object, - &"protocolVersion".to_owned().into(), - &object.protocol_version.into(), - )?; - - js_sys::Reflect::set( - &js_object, - &"revision".to_owned().into(), - &object.revision.into(), - )?; - - if let Some(signature) = object.signature { - let signature_value: JsValue = if signature.is_empty() { - JsValue::undefined() - } else { - string_encoding::encode(signature.as_slice(), Encoding::Base64).into() - }; - - js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?; - - if let Some(signature_public_key_id) = object.signature_public_key_id { - js_sys::Reflect::set( - &js_object, - &"signaturePublicKeyId".to_owned().into(), - &signature_public_key_id.into(), - )?; - } else { - js_sys::Reflect::set( - &js_object, - &"signaturePublicKeyId".to_owned().into(), - &JsValue::undefined(), - )?; - } - } - - if let Some(timestamp) = object.public_keys_disabled_at { - js_sys::Reflect::set( - &js_object, - &"publicKeysDisabledAt".to_owned().into(), - &(timestamp as u32).into(), - )?; - } - - if let Some(public_keys_to_add) = object.public_keys_to_add { - let keys_objects = public_keys_to_add - .into_iter() - .map(|key| IdentityPublicKeyWithWitnessWasm::from(key).to_json()) - .collect::>()?; - - js_sys::Reflect::set( - &js_object, - &"addPublicKeys".to_owned().into(), - &keys_objects, - )?; - } - - if let Some(public_key_ids_to_disable) = object.public_key_ids_to_disable { - let public_key_ids_to_disable = public_key_ids_to_disable - .into_iter() - .map(|key| JsValue::from_f64(key as f64)) - .collect::(); - - js_sys::Reflect::set( - &js_object, - &"disablePublicKeys".to_owned().into(), - &public_key_ids_to_disable.into(), - )?; - } - - let identity_id = object.identity_id.to_string(Encoding::Base58); - - js_sys::Reflect::set( - &js_object, - &"identityId".to_owned().into(), - &identity_id.into(), - )?; - - Ok(js_object.into()) - } - - #[wasm_bindgen(js_name=getModifiedDataIds)] - pub fn get_modified_data_ids(&self) -> Vec { - let ids = self.0.get_modified_data_ids(); - - ids.into_iter() - .map(|id| >::from(id).into()) - .collect() - } - - #[wasm_bindgen(js_name=isDataContractStateTransition)] - pub fn is_data_contract_state_transition(&self) -> bool { - self.0.is_data_contract_state_transition() - } - - #[wasm_bindgen(js_name=isDocumentStateTransition)] - pub fn is_document_state_transition(&self) -> bool { - self.0.is_document_state_transition() - } - - #[wasm_bindgen(js_name=isIdentityStateTransition)] - pub fn is_identity_state_transition(&self) -> bool { - self.0.is_identity_state_transition() - } - - #[wasm_bindgen(js_name=setExecutionContext)] - pub fn set_execution_context(&mut self, context: &StateTransitionExecutionContextWasm) { - self.0.set_execution_context(context.into()) - } - - #[wasm_bindgen(js_name=getExecutionContext)] - pub fn get_execution_context(&mut self) -> StateTransitionExecutionContextWasm { - self.0.get_execution_context().into() - } - - #[wasm_bindgen(js_name=signByPrivateKey)] - pub fn sign_by_private_key( - &mut self, - private_key: Vec, - key_type: u8, - bls: JsBlsAdapter, - ) -> Result<(), JsValue> { - let bls_adapter = BlsAdapter(bls); - let key_type = key_type - .try_into() - .map_err(|e: anyhow::Error| e.to_string())?; - - self.0 - .sign_by_private_key(private_key.as_slice(), key_type, &bls_adapter) - .with_js_error() - } - - #[wasm_bindgen(js_name=setSignaturePublicKeyId)] - pub fn set_signature_public_key_id(&mut self, key_id: Option) { - self.0.set_signature_public_key_id(key_id.unwrap_or(0)) - } - - #[wasm_bindgen(js_name=getSignature)] - pub fn get_signature(&self) -> Buffer { - Buffer::from_bytes_owned(self.0.get_signature().to_vec()) - } - - #[wasm_bindgen(js_name=setSignature)] - pub fn set_signature(&mut self, signature: Option>) { - self.0.signature = BinaryData::new(signature.unwrap_or(vec![])) - } - - #[wasm_bindgen(js_name=getRevision)] - pub fn get_revision(&self) -> u32 { - self.0.get_revision() as u32 - } - - #[wasm_bindgen(js_name=setRevision)] - pub fn set_revision(&mut self, revision: u32) { - self.0.set_revision(revision as u64) - } - - #[wasm_bindgen] - pub fn sign( - &mut self, - identity_public_key: &IdentityPublicKeyWasm, - private_key: Vec, - bls: JsBlsAdapter, - ) -> Result<(), JsValue> { - let bls_adapter = BlsAdapter(bls); - self.0 - .sign( - &identity_public_key.to_owned().into(), - &private_key, - &bls_adapter, - ) - .with_js_error() - } - - #[wasm_bindgen(js_name=verifySignature)] - pub fn verify_signature( - &self, - identity_public_key: &IdentityPublicKeyWasm, - bls: JsBlsAdapter, - ) -> Result { - let bls_adapter = BlsAdapter(bls); - - let verification_result = self - .0 - .verify_signature(&identity_public_key.to_owned().into(), &bls_adapter); - - match verification_result { - Ok(()) => Ok(true), - Err(protocol_error) => match &protocol_error { - ProtocolError::ConsensusError(err) => match err.as_ref() { - ConsensusError::SignatureError( - SignatureError::InvalidStateTransitionSignatureError { .. }, - ) => Ok(false), - _ => Err(protocol_error), - }, - _ => Err(protocol_error), - }, - } - .with_js_error() - } -} diff --git a/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/mod.rs b/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/mod.rs index c3fc2962b77..5bce9a7e3fd 100644 --- a/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/mod.rs +++ b/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/mod.rs @@ -1,9 +1,524 @@ -pub use identity_update_transition::*; - pub mod apply_identity_update_transition; pub mod identity_update_public_keys_validator; -pub mod identity_update_transition; pub mod identity_update_transition_basic_validator; pub mod identity_update_transition_state_validator; mod to_object; + +use std::convert::TryInto; +use std::default::Default; + +use dpp::consensus::signature::SignatureError; +use serde::{Deserialize, Serialize}; +use wasm_bindgen::__rt::Ref; +use wasm_bindgen::prelude::*; + +use crate::identifier::IdentifierWrapper; + +use crate::{ + buffer::Buffer, errors::RustConversionError, + identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitnessWasm, + identity::IdentityPublicKeyWasm, state_transition::StateTransitionExecutionContextWasm, + with_js_error, +}; + +use crate::bls_adapter::{BlsAdapter, JsBlsAdapter}; + +use crate::errors::from_dpp_err; +use crate::utils::{generic_of_js_val, WithJsError}; + +use dpp::consensus::ConsensusError; +use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitness; +use dpp::identity::{KeyID, TimestampMillis}; +use dpp::platform_value::string_encoding::Encoding; +use dpp::platform_value::{string_encoding, BinaryData, Value}; +use dpp::prelude::Revision; +use dpp::state_transition::{StateTransitionConvert, StateTransitionIdentitySigned}; +use dpp::{ + identifier::Identifier, + identity::state_transition::identity_update_transition::identity_update_transition::IdentityUpdateTransition, + platform_value, state_transition::StateTransitionLike, ProtocolError, +}; + +#[wasm_bindgen(js_name=IdentityUpdateTransition)] +#[derive(Clone)] +pub struct IdentityUpdateTransitionWasm(IdentityUpdateTransition); + +#[derive(Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +struct IdentityUpdateTransitionParams { + signature: Vec, + signature_public_key_id: KeyID, + protocol_version: u32, + identity_id: Vec, + revision: Revision, + add_public_keys: Option>, + disable_public_keys: Option>, + public_keys_disabled_at: Option, +} + +impl From for IdentityUpdateTransitionWasm { + fn from(v: IdentityUpdateTransition) -> Self { + IdentityUpdateTransitionWasm(v) + } +} + +impl From for IdentityUpdateTransition { + fn from(v: IdentityUpdateTransitionWasm) -> Self { + v.0 + } +} + +pub fn js_value_to_identity_update_transition_object(object: JsValue) -> Result { + let parameters: IdentityUpdateTransitionParams = + with_js_error!(serde_wasm_bindgen::from_value(object))?; + + platform_value::to_value(parameters).map_err(|e| e.to_string().into()) +} + +#[wasm_bindgen(js_class = IdentityUpdateTransition)] +impl IdentityUpdateTransitionWasm { + #[wasm_bindgen(constructor)] + pub fn new(raw_parameters: JsValue) -> Result { + let mut identity_update_transition_object = + js_value_to_identity_update_transition_object(raw_parameters)?; + + IdentityUpdateTransition::clean_value(&mut identity_update_transition_object) + .map_err(ProtocolError::ValueError) + .with_js_error()?; + + let identity_update_transition = + IdentityUpdateTransition::new(identity_update_transition_object) + .map_err(|e| RustConversionError::Error(e.to_string()).to_js_value())?; + + Ok(identity_update_transition.into()) + } + + #[wasm_bindgen(js_name=setPublicKeysToAdd)] + pub fn set_public_keys_to_add( + &mut self, + public_keys: Option>, + ) -> Result<(), JsValue> { + let mut keys_to_add = vec![]; + if let Some(keys) = public_keys { + keys_to_add = keys + .iter() + .map(|value| { + let public_key: Ref = + generic_of_js_val::( + value, + "IdentityPublicKeyWithWitness", + )?; + Ok(public_key.clone().into()) + }) + .collect::, JsValue>>()?; + } + + self.0.set_public_keys_to_add(keys_to_add); + + Ok(()) + } + + #[wasm_bindgen(js_name=getPublicKeysToAdd)] + pub fn get_public_keys_add(&self) -> Vec { + self.0 + .get_public_keys_to_add() + .iter() + .map(|key| IdentityPublicKeyWithWitnessWasm::from(key.to_owned()).into()) + .collect() + } + + #[wasm_bindgen(getter, js_name=addPublicKeys)] + pub fn add_public_keys(&self) -> Vec { + self.get_public_keys_add() + } + + #[wasm_bindgen(js_name=getPublicKeyIdsToDisable)] + pub fn get_public_key_ids_to_disable(&self) -> Vec { + self.0 + .get_public_key_ids_to_disable() + .iter() + .map(|key| JsValue::from_f64(key.to_owned() as f64)) + .collect() + } + + #[wasm_bindgen(js_name=setPublicKeyIdsToDisable)] + pub fn set_public_key_ids_to_disable(&mut self, public_key_ids: Option>) { + let mut keys = vec![]; + if let Some(public_key_ids) = public_key_ids { + keys = public_key_ids + .iter() + .map(|key| key.to_owned() as KeyID) + .collect::>(); + } + + self.0.set_public_key_ids_to_disable(keys); + } + + #[wasm_bindgen(js_name=getPublicKeysDisabledAt)] + pub fn get_public_keys_disabled_at(&self) -> Option { + self.0 + .get_public_keys_disabled_at() + .map(|timestamp| js_sys::Date::new(&JsValue::from_f64(timestamp as f64))) + } + + #[wasm_bindgen(js_name=setPublicKeysDisabledAt)] + pub fn set_public_keys_disabled_at(&mut self, timestamp: Option) { + if let Some(timestamp) = timestamp { + self.0 + .set_public_keys_disabled_at(Some(timestamp.get_time() as TimestampMillis)); + } else { + self.0.set_public_keys_disabled_at(None); + } + } + + #[wasm_bindgen(js_name=getType)] + pub fn get_type(&self) -> u8 { + self.0.get_type() as u8 + } + + #[wasm_bindgen(getter, js_name=identityId)] + pub fn identity_id(&self) -> IdentifierWrapper { + self.get_identity_id() + } + + #[wasm_bindgen(js_name=getIdentityId)] + pub fn get_identity_id(&self) -> IdentifierWrapper { + (*self.0.get_identity_id()).into() + } + + #[wasm_bindgen(js_name=setIdentityId)] + pub fn set_identity_id(&mut self, identity_id: &IdentifierWrapper) { + self.0.set_identity_id(identity_id.to_owned().into()); + } + + #[wasm_bindgen(js_name=getOwnerId)] + pub fn get_owner_id(&self) -> IdentifierWrapper { + (*self.0.get_owner_id()).into() + } + + #[wasm_bindgen(js_name=toObject)] + pub fn to_object(&self, options: JsValue) -> Result { + let opts: to_object::ToObjectOptions = if options.is_object() { + with_js_error!(serde_wasm_bindgen::from_value(options.clone()))? + } else { + Default::default() + }; + + let object = to_object::to_object_struct(&self.0, opts); + let js_object = js_sys::Object::new(); + + js_sys::Reflect::set( + &js_object, + &"type".to_owned().into(), + &object.transition_type.into(), + )?; + + js_sys::Reflect::set( + &js_object, + &"protocolVersion".to_owned().into(), + &object.protocol_version.into(), + )?; + + js_sys::Reflect::set( + &js_object, + &"revision".to_owned().into(), + &object.revision.into(), + )?; + + if let Some(signature) = object.signature { + let signature_value: JsValue = if signature.is_empty() { + JsValue::undefined() + } else { + Buffer::from_bytes(&signature).into() + }; + + js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?; + + if let Some(signature_public_key_id) = object.signature_public_key_id { + js_sys::Reflect::set( + &js_object, + &"signaturePublicKeyId".to_owned().into(), + &JsValue::from(signature_public_key_id), + )?; + } else { + js_sys::Reflect::set( + &js_object, + &"signaturePublicKeyId".to_owned().into(), + &JsValue::undefined(), + )?; + } + } + + if let Some(timestamp) = object.public_keys_disabled_at { + js_sys::Reflect::set( + &js_object, + &"publicKeysDisabledAt".to_owned().into(), + &(timestamp as u32).into(), + )?; + } + + if let Some(public_keys_to_add) = object.public_keys_to_add { + let keys_objects = public_keys_to_add + .into_iter() + .map(|key| IdentityPublicKeyWithWitnessWasm::from(key).to_object(options.clone())) + .collect::>()?; + + js_sys::Reflect::set( + &js_object, + &"addPublicKeys".to_owned().into(), + &keys_objects, + )?; + } + + if let Some(public_key_ids_to_disable) = object.public_key_ids_to_disable { + let public_key_ids_to_disable = public_key_ids_to_disable + .into_iter() + .map(|key| JsValue::from_f64(key as f64)) + .collect::(); + + js_sys::Reflect::set( + &js_object, + &"disablePublicKeys".to_owned().into(), + &public_key_ids_to_disable.into(), + )?; + } + + js_sys::Reflect::set( + &js_object, + &"identityId".to_owned().into(), + &Buffer::from_bytes(object.identity_id.to_buffer().as_slice()), + )?; + + Ok(js_object.into()) + } + + #[wasm_bindgen(js_name=toBuffer)] + pub fn to_buffer(&self, options: JsValue) -> Result { + let opts: to_object::ToObjectOptions = if options.is_object() { + with_js_error!(serde_wasm_bindgen::from_value(options))? + } else { + Default::default() + }; + + let buffer = self + .0 + .to_buffer(opts.skip_signature.unwrap_or(false)) + .map_err(from_dpp_err)?; + + Ok(Buffer::from_bytes(&buffer).into()) + } + + #[wasm_bindgen(js_name=toJSON)] + pub fn to_json(&self) -> Result { + let object = to_object::to_object_struct(&self.0, Default::default()); + let js_object = js_sys::Object::new(); + + js_sys::Reflect::set( + &js_object, + &"type".to_owned().into(), + &object.transition_type.into(), + )?; + + js_sys::Reflect::set( + &js_object, + &"protocolVersion".to_owned().into(), + &object.protocol_version.into(), + )?; + + js_sys::Reflect::set( + &js_object, + &"revision".to_owned().into(), + &object.revision.into(), + )?; + + if let Some(signature) = object.signature { + let signature_value: JsValue = if signature.is_empty() { + JsValue::undefined() + } else { + string_encoding::encode(signature.as_slice(), Encoding::Base64).into() + }; + + js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?; + + if let Some(signature_public_key_id) = object.signature_public_key_id { + js_sys::Reflect::set( + &js_object, + &"signaturePublicKeyId".to_owned().into(), + &signature_public_key_id.into(), + )?; + } else { + js_sys::Reflect::set( + &js_object, + &"signaturePublicKeyId".to_owned().into(), + &JsValue::undefined(), + )?; + } + } + + if let Some(timestamp) = object.public_keys_disabled_at { + js_sys::Reflect::set( + &js_object, + &"publicKeysDisabledAt".to_owned().into(), + &(timestamp as u32).into(), + )?; + } + + if let Some(public_keys_to_add) = object.public_keys_to_add { + let keys_objects = public_keys_to_add + .into_iter() + .map(|key| IdentityPublicKeyWithWitnessWasm::from(key).to_json()) + .collect::>()?; + + js_sys::Reflect::set( + &js_object, + &"addPublicKeys".to_owned().into(), + &keys_objects, + )?; + } + + if let Some(public_key_ids_to_disable) = object.public_key_ids_to_disable { + let public_key_ids_to_disable = public_key_ids_to_disable + .into_iter() + .map(|key| JsValue::from_f64(key as f64)) + .collect::(); + + js_sys::Reflect::set( + &js_object, + &"disablePublicKeys".to_owned().into(), + &public_key_ids_to_disable.into(), + )?; + } + + let identity_id = object.identity_id.to_string(Encoding::Base58); + + js_sys::Reflect::set( + &js_object, + &"identityId".to_owned().into(), + &identity_id.into(), + )?; + + Ok(js_object.into()) + } + + #[wasm_bindgen(js_name=getModifiedDataIds)] + pub fn get_modified_data_ids(&self) -> Vec { + let ids = self.0.get_modified_data_ids(); + + ids.into_iter() + .map(|id| >::from(id).into()) + .collect() + } + + #[wasm_bindgen(js_name=isDataContractStateTransition)] + pub fn is_data_contract_state_transition(&self) -> bool { + self.0.is_data_contract_state_transition() + } + + #[wasm_bindgen(js_name=isDocumentStateTransition)] + pub fn is_document_state_transition(&self) -> bool { + self.0.is_document_state_transition() + } + + #[wasm_bindgen(js_name=isIdentityStateTransition)] + pub fn is_identity_state_transition(&self) -> bool { + self.0.is_identity_state_transition() + } + + #[wasm_bindgen(js_name=setExecutionContext)] + pub fn set_execution_context(&mut self, context: &StateTransitionExecutionContextWasm) { + self.0.set_execution_context(context.into()) + } + + #[wasm_bindgen(js_name=getExecutionContext)] + pub fn get_execution_context(&mut self) -> StateTransitionExecutionContextWasm { + self.0.get_execution_context().into() + } + + #[wasm_bindgen(js_name=signByPrivateKey)] + pub fn sign_by_private_key( + &mut self, + private_key: Vec, + key_type: u8, + bls: JsBlsAdapter, + ) -> Result<(), JsValue> { + let bls_adapter = BlsAdapter(bls); + let key_type = key_type + .try_into() + .map_err(|e: anyhow::Error| e.to_string())?; + + self.0 + .sign_by_private_key(private_key.as_slice(), key_type, &bls_adapter) + .with_js_error() + } + + #[wasm_bindgen(js_name=setSignaturePublicKeyId)] + pub fn set_signature_public_key_id(&mut self, key_id: Option) { + self.0.set_signature_public_key_id(key_id.unwrap_or(0)) + } + + #[wasm_bindgen(js_name=getSignature)] + pub fn get_signature(&self) -> Buffer { + Buffer::from_bytes_owned(self.0.get_signature().to_vec()) + } + + #[wasm_bindgen(js_name=setSignature)] + pub fn set_signature(&mut self, signature: Option>) { + self.0.signature = BinaryData::new(signature.unwrap_or(vec![])) + } + + #[wasm_bindgen(js_name=getRevision)] + pub fn get_revision(&self) -> u32 { + self.0.get_revision() as u32 + } + + #[wasm_bindgen(js_name=setRevision)] + pub fn set_revision(&mut self, revision: u32) { + self.0.set_revision(revision as u64) + } + + #[wasm_bindgen] + pub fn sign( + &mut self, + identity_public_key: &IdentityPublicKeyWasm, + private_key: Vec, + bls: JsBlsAdapter, + ) -> Result<(), JsValue> { + let bls_adapter = BlsAdapter(bls); + self.0 + .sign( + &identity_public_key.to_owned().into(), + &private_key, + &bls_adapter, + ) + .with_js_error() + } + + #[wasm_bindgen(js_name=verifySignature)] + pub fn verify_signature( + &self, + identity_public_key: &IdentityPublicKeyWasm, + bls: JsBlsAdapter, + ) -> Result { + let bls_adapter = BlsAdapter(bls); + + let verification_result = self + .0 + .verify_signature(&identity_public_key.to_owned().into(), &bls_adapter); + + match verification_result { + Ok(()) => Ok(true), + Err(protocol_error) => match &protocol_error { + ProtocolError::ConsensusError(err) => match err.as_ref() { + ConsensusError::SignatureError( + SignatureError::InvalidStateTransitionSignatureError { .. }, + ) => Ok(false), + _ => Err(protocol_error), + }, + _ => Err(protocol_error), + }, + } + .with_js_error() + } +} + From fe7ac3b9e3dc7840ce5c570ccd1a8106d2aa33c9 Mon Sep 17 00:00:00 2001 From: Anton Suprunchuk Date: Mon, 10 Apr 2023 21:11:40 +0700 Subject: [PATCH 12/13] rename identity_topup_transition module --- .../identity_topup_transition.rs | 300 ----------------- .../identity_topup_transition/mod.rs | 305 +++++++++++++++++- 2 files changed, 302 insertions(+), 303 deletions(-) diff --git a/packages/wasm-dpp/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs b/packages/wasm-dpp/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs index 4953f249296..e69de29bb2d 100644 --- a/packages/wasm-dpp/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +++ b/packages/wasm-dpp/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs @@ -1,300 +0,0 @@ -use crate::utils::{ToSerdeJSONExt, WithJsError}; - -use std::convert::TryInto; -use std::default::Default; - -use wasm_bindgen::prelude::*; - -use crate::identifier::IdentifierWrapper; - -use crate::{ - buffer::Buffer, - create_asset_lock_proof_from_wasm_instance, - errors::RustConversionError, - identity::state_transition::asset_lock_proof::{ - ChainAssetLockProofWasm, InstantAssetLockProofWasm, - }, - state_transition::StateTransitionExecutionContextWasm, - with_js_error, -}; - -use crate::bls_adapter::{BlsAdapter, JsBlsAdapter}; - -use crate::errors::from_dpp_err; -use dpp::platform_value::string_encoding::Encoding; -use dpp::platform_value::{string_encoding, BinaryData}; -use dpp::state_transition::StateTransitionConvert; -use dpp::{ - identifier::Identifier, - identity::state_transition::{ - asset_lock_proof::AssetLockProof, identity_topup_transition::IdentityTopUpTransition, - }, - state_transition::StateTransitionLike, -}; - -#[wasm_bindgen(js_name=IdentityTopUpTransition)] -#[derive(Clone)] -pub struct IdentityTopUpTransitionWasm(IdentityTopUpTransition); - -impl From for IdentityTopUpTransitionWasm { - fn from(v: IdentityTopUpTransition) -> Self { - IdentityTopUpTransitionWasm(v) - } -} - -impl From for IdentityTopUpTransition { - fn from(v: IdentityTopUpTransitionWasm) -> Self { - v.0 - } -} - -#[wasm_bindgen(js_class = IdentityTopUpTransition)] -impl IdentityTopUpTransitionWasm { - #[wasm_bindgen(constructor)] - pub fn new(raw_parameters: JsValue) -> Result { - let raw_state_transition = raw_parameters.with_serde_to_platform_value()?; - - let identity_topup_transition = - IdentityTopUpTransition::from_raw_object(raw_state_transition) - .map_err(|e| RustConversionError::Error(e.to_string()).to_js_value())?; - - Ok(identity_topup_transition.into()) - } - - #[wasm_bindgen(js_name=setAssetLockProof)] - pub fn set_asset_lock_proof(&mut self, asset_lock_proof: JsValue) -> Result<(), JsValue> { - let asset_lock_proof = create_asset_lock_proof_from_wasm_instance(&asset_lock_proof)?; - - self.0 - .set_asset_lock_proof(asset_lock_proof) - .map_err(|e| RustConversionError::Error(e.to_string()).to_js_value())?; - - Ok(()) - } - - #[wasm_bindgen(getter, js_name=assetLockProof)] - pub fn asset_lock_proof(&self) -> JsValue { - self.get_asset_lock_proof() - } - - #[wasm_bindgen(js_name=getAssetLockProof)] - pub fn get_asset_lock_proof(&self) -> JsValue { - let asset_lock_proof = self.0.get_asset_lock_proof().to_owned(); - - match asset_lock_proof { - AssetLockProof::Chain(chain_asset_lock_proof) => { - ChainAssetLockProofWasm::from(chain_asset_lock_proof).into() - } - AssetLockProof::Instant(instant_asset_lock_proof) => { - InstantAssetLockProofWasm::from(instant_asset_lock_proof).into() - } - } - } - - #[wasm_bindgen(js_name=getType)] - pub fn get_type(&self) -> u8 { - self.0.get_type() as u8 - } - - #[wasm_bindgen(getter, js_name=identityId)] - pub fn identity_id(&self) -> IdentifierWrapper { - self.get_identity_id() - } - - #[wasm_bindgen(js_name=getIdentityId)] - pub fn get_identity_id(&self) -> IdentifierWrapper { - (*self.0.get_identity_id()).into() - } - - #[wasm_bindgen(js_name=getOwnerId)] - pub fn get_owner_id(&self) -> IdentifierWrapper { - (*self.0.get_owner_id()).into() - } - - #[wasm_bindgen(js_name=toObject)] - pub fn to_object(&self, options: JsValue) -> Result { - let opts: super::to_object::ToObjectOptions = if options.is_object() { - with_js_error!(serde_wasm_bindgen::from_value(options))? - } else { - Default::default() - }; - - let object = super::to_object::to_object_struct(&self.0, opts); - let js_object = js_sys::Object::new(); - - js_sys::Reflect::set( - &js_object, - &"type".to_owned().into(), - &object.transition_type.into(), - )?; - - js_sys::Reflect::set( - &js_object, - &"protocolVersion".to_owned().into(), - &object.protocol_version.into(), - )?; - - if let Some(signature) = object.signature { - let signature_value: JsValue = if signature.is_empty() { - JsValue::undefined() - } else { - Buffer::from_bytes(signature.as_slice()).into() - }; - - js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?; - } - - let asset_lock_proof_object = match object.asset_lock_proof { - AssetLockProof::Instant(instant_asset_lock_proof) => { - InstantAssetLockProofWasm::from(instant_asset_lock_proof).to_object()? - } - AssetLockProof::Chain(chain_asset_lock_proof) => { - ChainAssetLockProofWasm::from(chain_asset_lock_proof).to_object()? - } - }; - - js_sys::Reflect::set( - &js_object, - &"assetLockProof".to_owned().into(), - &asset_lock_proof_object, - )?; - - js_sys::Reflect::set( - &js_object, - &"identityId".to_owned().into(), - &Buffer::from_bytes(object.identity_id.to_buffer().as_slice()), - )?; - - Ok(js_object.into()) - } - - #[wasm_bindgen(js_name=toBuffer)] - pub fn to_buffer(&self, options: JsValue) -> Result { - let opts: super::to_object::ToObjectOptions = if options.is_object() { - with_js_error!(serde_wasm_bindgen::from_value(options))? - } else { - Default::default() - }; - - let buffer = self - .0 - .to_buffer(opts.skip_signature.unwrap_or(false)) - .map_err(from_dpp_err)?; - - Ok(Buffer::from_bytes(&buffer).into()) - } - - #[wasm_bindgen(js_name=toJSON)] - pub fn to_json(&self) -> Result { - let object = super::to_object::to_object_struct(&self.0, Default::default()); - let js_object = js_sys::Object::new(); - - js_sys::Reflect::set( - &js_object, - &"type".to_owned().into(), - &object.transition_type.into(), - )?; - - js_sys::Reflect::set( - &js_object, - &"protocolVersion".to_owned().into(), - &object.protocol_version.into(), - )?; - - if let Some(signature) = object.signature { - let signature_value: JsValue = if signature.is_empty() { - JsValue::undefined() - } else { - string_encoding::encode(signature.as_slice(), Encoding::Base64).into() - }; - - js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?; - } - - let asset_lock_proof_json = match object.asset_lock_proof { - AssetLockProof::Instant(instant_asset_lock_proof) => { - InstantAssetLockProofWasm::from(instant_asset_lock_proof).to_json()? - } - AssetLockProof::Chain(chain_asset_lock_proof) => { - ChainAssetLockProofWasm::from(chain_asset_lock_proof).to_json()? - } - }; - - js_sys::Reflect::set( - &js_object, - &"assetLockProof".to_owned().into(), - &asset_lock_proof_json, - )?; - - let identity_id = object.identity_id.to_string(Encoding::Base58); - - js_sys::Reflect::set( - &js_object, - &"identityId".to_owned().into(), - &identity_id.into(), - )?; - - Ok(js_object.into()) - } - - #[wasm_bindgen(js_name=getModifiedDataIds)] - pub fn get_modified_data_ids(&self) -> Vec { - let ids = self.0.get_modified_data_ids(); - - ids.into_iter() - .map(|id| >::from(id).into()) - .collect() - } - - #[wasm_bindgen(js_name=isDataContractStateTransition)] - pub fn is_data_contract_state_transition(&self) -> bool { - self.0.is_data_contract_state_transition() - } - - #[wasm_bindgen(js_name=isDocumentStateTransition)] - pub fn is_document_state_transition(&self) -> bool { - self.0.is_document_state_transition() - } - - #[wasm_bindgen(js_name=isIdentityStateTransition)] - pub fn is_identity_state_transition(&self) -> bool { - self.0.is_identity_state_transition() - } - - #[wasm_bindgen(js_name=setExecutionContext)] - pub fn set_execution_context(&mut self, context: &StateTransitionExecutionContextWasm) { - self.0.set_execution_context(context.into()) - } - - #[wasm_bindgen(js_name=getExecutionContext)] - pub fn get_execution_context(&mut self) -> StateTransitionExecutionContextWasm { - self.0.get_execution_context().into() - } - - #[wasm_bindgen(js_name=signByPrivateKey)] - pub fn sign_by_private_key( - &mut self, - private_key: Vec, - key_type: u8, - bls: JsBlsAdapter, - ) -> Result<(), JsValue> { - let bls_adapter = BlsAdapter(bls); - let key_type = key_type - .try_into() - .map_err(|e: anyhow::Error| e.to_string())?; - - self.0 - .sign_by_private_key(private_key.as_slice(), key_type, &bls_adapter) - .with_js_error() - } - - #[wasm_bindgen(js_name=getSignature)] - pub fn get_signature(&self) -> Buffer { - Buffer::from_bytes(self.0.get_signature().as_slice()) - } - - #[wasm_bindgen(js_name=setSignature)] - pub fn set_signature(&mut self, signature: Option>) { - self.0.signature = BinaryData::new(signature.unwrap_or(vec![])) - } -} diff --git a/packages/wasm-dpp/src/identity/state_transition/identity_topup_transition/mod.rs b/packages/wasm-dpp/src/identity/state_transition/identity_topup_transition/mod.rs index edb89f09993..22565985da5 100644 --- a/packages/wasm-dpp/src/identity/state_transition/identity_topup_transition/mod.rs +++ b/packages/wasm-dpp/src/identity/state_transition/identity_topup_transition/mod.rs @@ -1,8 +1,307 @@ -pub use identity_topup_transition::*; - pub mod apply_identity_topup_transition; -pub mod identity_topup_transition; pub mod identity_topup_transition_basic_validator; pub mod identity_topup_transition_state_validator; mod to_object; + +use crate::utils::{ToSerdeJSONExt, WithJsError}; + +use std::convert::TryInto; +use std::default::Default; + +use wasm_bindgen::prelude::*; + +use crate::identifier::IdentifierWrapper; + +use crate::{ + buffer::Buffer, + create_asset_lock_proof_from_wasm_instance, + errors::RustConversionError, + identity::state_transition::asset_lock_proof::{ + ChainAssetLockProofWasm, InstantAssetLockProofWasm, + }, + state_transition::StateTransitionExecutionContextWasm, + with_js_error, +}; + +use crate::bls_adapter::{BlsAdapter, JsBlsAdapter}; + +use crate::errors::from_dpp_err; +use dpp::platform_value::string_encoding::Encoding; +use dpp::platform_value::{string_encoding, BinaryData}; +use dpp::state_transition::StateTransitionConvert; +use dpp::{ + identifier::Identifier, + identity::state_transition::{ + asset_lock_proof::AssetLockProof, identity_topup_transition::IdentityTopUpTransition, + }, + state_transition::StateTransitionLike, +}; + +#[wasm_bindgen(js_name=IdentityTopUpTransition)] +#[derive(Clone)] +pub struct IdentityTopUpTransitionWasm(IdentityTopUpTransition); + +impl From for IdentityTopUpTransitionWasm { + fn from(v: IdentityTopUpTransition) -> Self { + IdentityTopUpTransitionWasm(v) + } +} + +impl From for IdentityTopUpTransition { + fn from(v: IdentityTopUpTransitionWasm) -> Self { + v.0 + } +} + +#[wasm_bindgen(js_class = IdentityTopUpTransition)] +impl IdentityTopUpTransitionWasm { + #[wasm_bindgen(constructor)] + pub fn new(raw_parameters: JsValue) -> Result { + let raw_state_transition = raw_parameters.with_serde_to_platform_value()?; + + let identity_topup_transition = + IdentityTopUpTransition::from_raw_object(raw_state_transition) + .map_err(|e| RustConversionError::Error(e.to_string()).to_js_value())?; + + Ok(identity_topup_transition.into()) + } + + #[wasm_bindgen(js_name=setAssetLockProof)] + pub fn set_asset_lock_proof(&mut self, asset_lock_proof: JsValue) -> Result<(), JsValue> { + let asset_lock_proof = create_asset_lock_proof_from_wasm_instance(&asset_lock_proof)?; + + self.0 + .set_asset_lock_proof(asset_lock_proof) + .map_err(|e| RustConversionError::Error(e.to_string()).to_js_value())?; + + Ok(()) + } + + #[wasm_bindgen(getter, js_name=assetLockProof)] + pub fn asset_lock_proof(&self) -> JsValue { + self.get_asset_lock_proof() + } + + #[wasm_bindgen(js_name=getAssetLockProof)] + pub fn get_asset_lock_proof(&self) -> JsValue { + let asset_lock_proof = self.0.get_asset_lock_proof().to_owned(); + + match asset_lock_proof { + AssetLockProof::Chain(chain_asset_lock_proof) => { + ChainAssetLockProofWasm::from(chain_asset_lock_proof).into() + } + AssetLockProof::Instant(instant_asset_lock_proof) => { + InstantAssetLockProofWasm::from(instant_asset_lock_proof).into() + } + } + } + + #[wasm_bindgen(js_name=getType)] + pub fn get_type(&self) -> u8 { + self.0.get_type() as u8 + } + + #[wasm_bindgen(getter, js_name=identityId)] + pub fn identity_id(&self) -> IdentifierWrapper { + self.get_identity_id() + } + + #[wasm_bindgen(js_name=getIdentityId)] + pub fn get_identity_id(&self) -> IdentifierWrapper { + (*self.0.get_identity_id()).into() + } + + #[wasm_bindgen(js_name=getOwnerId)] + pub fn get_owner_id(&self) -> IdentifierWrapper { + (*self.0.get_owner_id()).into() + } + + #[wasm_bindgen(js_name=toObject)] + pub fn to_object(&self, options: JsValue) -> Result { + let opts: to_object::ToObjectOptions = if options.is_object() { + with_js_error!(serde_wasm_bindgen::from_value(options))? + } else { + Default::default() + }; + + let object = to_object::to_object_struct(&self.0, opts); + let js_object = js_sys::Object::new(); + + js_sys::Reflect::set( + &js_object, + &"type".to_owned().into(), + &object.transition_type.into(), + )?; + + js_sys::Reflect::set( + &js_object, + &"protocolVersion".to_owned().into(), + &object.protocol_version.into(), + )?; + + if let Some(signature) = object.signature { + let signature_value: JsValue = if signature.is_empty() { + JsValue::undefined() + } else { + Buffer::from_bytes(signature.as_slice()).into() + }; + + js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?; + } + + let asset_lock_proof_object = match object.asset_lock_proof { + AssetLockProof::Instant(instant_asset_lock_proof) => { + InstantAssetLockProofWasm::from(instant_asset_lock_proof).to_object()? + } + AssetLockProof::Chain(chain_asset_lock_proof) => { + ChainAssetLockProofWasm::from(chain_asset_lock_proof).to_object()? + } + }; + + js_sys::Reflect::set( + &js_object, + &"assetLockProof".to_owned().into(), + &asset_lock_proof_object, + )?; + + js_sys::Reflect::set( + &js_object, + &"identityId".to_owned().into(), + &Buffer::from_bytes(object.identity_id.to_buffer().as_slice()), + )?; + + Ok(js_object.into()) + } + + #[wasm_bindgen(js_name=toBuffer)] + pub fn to_buffer(&self, options: JsValue) -> Result { + let opts: to_object::ToObjectOptions = if options.is_object() { + with_js_error!(serde_wasm_bindgen::from_value(options))? + } else { + Default::default() + }; + + let buffer = self + .0 + .to_buffer(opts.skip_signature.unwrap_or(false)) + .map_err(from_dpp_err)?; + + Ok(Buffer::from_bytes(&buffer).into()) + } + + #[wasm_bindgen(js_name=toJSON)] + pub fn to_json(&self) -> Result { + let object = to_object::to_object_struct(&self.0, Default::default()); + let js_object = js_sys::Object::new(); + + js_sys::Reflect::set( + &js_object, + &"type".to_owned().into(), + &object.transition_type.into(), + )?; + + js_sys::Reflect::set( + &js_object, + &"protocolVersion".to_owned().into(), + &object.protocol_version.into(), + )?; + + if let Some(signature) = object.signature { + let signature_value: JsValue = if signature.is_empty() { + JsValue::undefined() + } else { + string_encoding::encode(signature.as_slice(), Encoding::Base64).into() + }; + + js_sys::Reflect::set(&js_object, &"signature".to_owned().into(), &signature_value)?; + } + + let asset_lock_proof_json = match object.asset_lock_proof { + AssetLockProof::Instant(instant_asset_lock_proof) => { + InstantAssetLockProofWasm::from(instant_asset_lock_proof).to_json()? + } + AssetLockProof::Chain(chain_asset_lock_proof) => { + ChainAssetLockProofWasm::from(chain_asset_lock_proof).to_json()? + } + }; + + js_sys::Reflect::set( + &js_object, + &"assetLockProof".to_owned().into(), + &asset_lock_proof_json, + )?; + + let identity_id = object.identity_id.to_string(Encoding::Base58); + + js_sys::Reflect::set( + &js_object, + &"identityId".to_owned().into(), + &identity_id.into(), + )?; + + Ok(js_object.into()) + } + + #[wasm_bindgen(js_name=getModifiedDataIds)] + pub fn get_modified_data_ids(&self) -> Vec { + let ids = self.0.get_modified_data_ids(); + + ids.into_iter() + .map(|id| >::from(id).into()) + .collect() + } + + #[wasm_bindgen(js_name=isDataContractStateTransition)] + pub fn is_data_contract_state_transition(&self) -> bool { + self.0.is_data_contract_state_transition() + } + + #[wasm_bindgen(js_name=isDocumentStateTransition)] + pub fn is_document_state_transition(&self) -> bool { + self.0.is_document_state_transition() + } + + #[wasm_bindgen(js_name=isIdentityStateTransition)] + pub fn is_identity_state_transition(&self) -> bool { + self.0.is_identity_state_transition() + } + + #[wasm_bindgen(js_name=setExecutionContext)] + pub fn set_execution_context(&mut self, context: &StateTransitionExecutionContextWasm) { + self.0.set_execution_context(context.into()) + } + + #[wasm_bindgen(js_name=getExecutionContext)] + pub fn get_execution_context(&mut self) -> StateTransitionExecutionContextWasm { + self.0.get_execution_context().into() + } + + #[wasm_bindgen(js_name=signByPrivateKey)] + pub fn sign_by_private_key( + &mut self, + private_key: Vec, + key_type: u8, + bls: JsBlsAdapter, + ) -> Result<(), JsValue> { + let bls_adapter = BlsAdapter(bls); + let key_type = key_type + .try_into() + .map_err(|e: anyhow::Error| e.to_string())?; + + self.0 + .sign_by_private_key(private_key.as_slice(), key_type, &bls_adapter) + .with_js_error() + } + + #[wasm_bindgen(js_name=getSignature)] + pub fn get_signature(&self) -> Buffer { + Buffer::from_bytes(self.0.get_signature().as_slice()) + } + + #[wasm_bindgen(js_name=setSignature)] + pub fn set_signature(&mut self, signature: Option>) { + self.0.signature = BinaryData::new(signature.unwrap_or(vec![])) + } +} + From b2883a8cb817838a2185e41baab9b2c017394c7d Mon Sep 17 00:00:00 2001 From: Anton Suprunchuk Date: Mon, 10 Apr 2023 21:14:07 +0700 Subject: [PATCH 13/13] reformat --- packages/wasm-dpp/src/data_contract_factory/mod.rs | 2 +- .../identity/state_transition/identity_topup_transition/mod.rs | 1 - .../state_transition/identity_update_transition/mod.rs | 3 +-- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/wasm-dpp/src/data_contract_factory/mod.rs b/packages/wasm-dpp/src/data_contract_factory/mod.rs index a286c815606..779d4138b8b 100644 --- a/packages/wasm-dpp/src/data_contract_factory/mod.rs +++ b/packages/wasm-dpp/src/data_contract_factory/mod.rs @@ -96,7 +96,7 @@ impl DataContractFactoryWasm { } else { DataContractFactory::new(protocol_version, Arc::new(validate_data_contract.into())) } - .into() + .into() } #[wasm_bindgen(js_name=create)] diff --git a/packages/wasm-dpp/src/identity/state_transition/identity_topup_transition/mod.rs b/packages/wasm-dpp/src/identity/state_transition/identity_topup_transition/mod.rs index 22565985da5..88bfe2e5696 100644 --- a/packages/wasm-dpp/src/identity/state_transition/identity_topup_transition/mod.rs +++ b/packages/wasm-dpp/src/identity/state_transition/identity_topup_transition/mod.rs @@ -304,4 +304,3 @@ impl IdentityTopUpTransitionWasm { self.0.signature = BinaryData::new(signature.unwrap_or(vec![])) } } - diff --git a/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/mod.rs b/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/mod.rs index 5bce9a7e3fd..793c6b059d3 100644 --- a/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/mod.rs +++ b/packages/wasm-dpp/src/identity/state_transition/identity_update_transition/mod.rs @@ -518,7 +518,6 @@ impl IdentityUpdateTransitionWasm { _ => Err(protocol_error), }, } - .with_js_error() + .with_js_error() } } -