@dashevo/wasm-dpp 0.24.0-dev.33 → 0.25.0-dev.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.toml +2 -2
- package/dist/wasm/wasm_dpp.d.ts +600 -454
- package/dist/wasm/wasm_dpp.js +178 -120
- package/dist/wasm/wasm_dpp_bg.js +1 -1
- package/lib/test/fixtures/getDocumentsFixture.js +5 -1
- package/lib/wasm/wasm_dpp.d.ts +600 -454
- package/package.json +4 -4
- package/src/dash_platform_protocol.rs +1 -1
- package/src/data_contract/data_contract.rs +2 -1
- package/src/data_contract/data_contract_facade.rs +2 -2
- package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +1 -1
- package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +7 -16
- package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +5 -3
- package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +6 -2
- package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +7 -18
- package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +6 -4
- package/src/decode_protocol_entity.rs +19 -19
- package/src/document/extended_document.rs +5 -2
- package/src/document/fetch_and_validate_data_contract.rs +2 -2
- package/src/document/mod.rs +5 -3
- package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +9 -6
- package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +1 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +1 -1
- package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +1 -2
- package/src/document/state_transition/document_batch_transition/mod.rs +18 -25
- package/src/document/state_transition/document_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs +4 -4
- package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_batch_transitions_state.rs +3 -1
- package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +3 -3
- package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +3 -3
- package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +3 -3
- package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +4 -4
- package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +2 -2
- package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +1 -1
- package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +1 -1
- package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +1 -1
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -1
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -1
- package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +2 -2
- package/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +1 -1
- package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +1 -1
- package/src/errors/consensus/basic/document/invalid_document_type_error.rs +2 -2
- package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +1 -1
- package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +1 -1
- package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +1 -1
- package/src/errors/consensus/basic/document/missing_document_type_error.rs +1 -1
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -1
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -1
- package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +1 -1
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +1 -1
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +1 -1
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +1 -1
- package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_proof_chain_lock_validation_error.rs +35 -0
- package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +1 -1
- package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +1 -1
- package/src/errors/consensus/basic/identity/missing_public_key_error.rs +1 -1
- package/src/errors/consensus/basic/identity/mod.rs +2 -0
- package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +2 -2
- package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -1
- package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +7 -3
- package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +1 -1
- package/src/errors/consensus/basic/json_schema_compilation_error.rs +1 -1
- package/src/errors/consensus/basic/json_schema_error.rs +1 -3
- package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -1
- package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +2 -2
- package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +1 -1
- package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +1 -1
- package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +1 -1
- package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +1 -1
- package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +1 -1
- package/src/errors/consensus/consensus_error.rs +24 -4
- package/src/errors/consensus/deserialize.rs +1 -1
- package/src/errors/consensus/fee/balance_is_not_enough_error.rs +1 -1
- package/src/errors/consensus/signature/basic_bls_error.rs +38 -0
- package/src/errors/consensus/signature/basic_ecdsa_error.rs +38 -0
- package/src/errors/consensus/signature/mod.rs +6 -0
- package/src/errors/consensus/signature/signature_should_not_be_present_error.rs +38 -0
- package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +2 -2
- package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +58 -1
- package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +66 -1
- package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +50 -1
- package/src/errors/consensus/state/document/document_already_present_error.rs +1 -1
- package/src/errors/consensus/state/document/document_not_found_error.rs +1 -1
- package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +1 -1
- package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +2 -2
- package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +1 -1
- package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +1 -1
- package/src/errors/consensus/state/document/invalid_document_revision_error.rs +1 -1
- package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +1 -1
- package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +1 -1
- package/src/errors/consensus/state/identity/identity_already_exists_error.rs +1 -1
- package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +1 -1
- package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +1 -1
- package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +1 -1
- package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +1 -1
- package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +1 -1
- package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +1 -1
- package/src/errors/consensus/state/identity/missing_identity_public_key_ids_error.rs +26 -0
- package/src/errors/consensus/state/identity/mod.rs +2 -0
- package/src/errors/consensus/value_error.rs +1 -1
- package/src/errors/from.rs +0 -1
- package/src/generate_temporary_ecdsa_private_key.rs +2 -6
- package/src/identity/factory_utils.rs +4 -4
- package/src/identity/identity_public_key/key_type.rs +2 -0
- package/src/identity/identity_public_key/purpose.rs +7 -0
- package/src/identity/mod.rs +4 -2
- package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +6 -2
- package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +14 -32
- package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +3 -1
- package/src/identity/state_transition/identity_create_transition/to_object.rs +2 -2
- package/src/identity/state_transition/identity_public_key_transitions.rs +11 -11
- package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +6 -2
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +7 -26
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +3 -1
- package/src/identity/state_transition/identity_update_transition/apply_identity_update_transition.rs +3 -1
- package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +2 -2
- package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +11 -32
- package/src/identity/state_transition/identity_update_transition/identity_update_transition_state_validator.rs +3 -2
- package/src/identity/state_transition/identity_update_transition/to_object.rs +2 -2
- package/src/identity/state_transition/validate_public_key_signatures.rs +2 -2
- package/src/state_repository.rs +3 -2
- package/src/state_transition/fee/calculate_state_transition_fee.rs +8 -5
- package/src/state_transition/state_transition_facade.rs +18 -21
- package/src/state_transition/validation/state_transition_fee_validator.rs +3 -1
- package/src/state_transition/validation/validate_state_transition_identity_signature.rs +22 -6
- package/src/state_transition/validation/validate_state_transition_key_signature.rs +7 -1
- package/src/utils.rs +2 -4
- package/src/validation/validation_result.rs +12 -7
- package/test/integration/dataContract/DataContractFacade.spec.js +17 -20
- package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +5 -4
- package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +0 -17
- package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +10 -3
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +4 -7
- package/test/integration/stateTransition/StateTransitionFacade.spec.js +21 -8
- package/test/unit/dataContract/DataContract.spec.js +9 -21
- package/test/unit/dataContract/DataContractFactory.spec.js +19 -28
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +2 -4
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +0 -7
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +10 -8
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +3 -5
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +1 -3
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +8 -6
- package/test/unit/decodeProtocolEntityFactory.spec.js +4 -1
- package/test/unit/document/Document.spec.js +9 -7
- package/test/unit/document/DocumentFactory.spec.js +38 -90
- package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +2 -3
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +5 -6
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +20 -18
- package/test/unit/identity/Identity.spec.js +3 -8
- package/test/unit/identity/IdentityFactory.spec.js +3 -4
- package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +1 -2
- package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +7 -3
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +1 -2
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +5 -1
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +3 -3
- package/test/unit/stateTransition/validation/validateStateTransitionBasicFactory.spec.js +12 -6
- package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +4 -16
- package/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js +8 -4
- package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +3 -1
- package/test/unit/stateTransition/validation/validateStateTransitionStateFactory.spec.js +7 -3
package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs
CHANGED
|
@@ -5,13 +5,14 @@ use wasm_bindgen::prelude::*;
|
|
|
5
5
|
|
|
6
6
|
use crate::{
|
|
7
7
|
state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
|
|
8
|
-
IdentityTopUpTransitionWasm,
|
|
8
|
+
IdentityTopUpTransitionWasm, StateTransitionExecutionContextWasm,
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
#[wasm_bindgen(js_name=applyIdentityTopUpTransition)]
|
|
12
12
|
pub async fn apply_identity_topup_transition_wasm(
|
|
13
13
|
state_repository: ExternalStateRepositoryLike,
|
|
14
14
|
state_transition: &IdentityTopUpTransitionWasm,
|
|
15
|
+
execution_context: &StateTransitionExecutionContextWasm,
|
|
15
16
|
) -> Result<(), JsValue> {
|
|
16
17
|
let wrapped_state_repository =
|
|
17
18
|
Arc::new(ExternalStateRepositoryLikeWrapper::new(state_repository));
|
|
@@ -23,7 +24,10 @@ pub async fn apply_identity_topup_transition_wasm(
|
|
|
23
24
|
ApplyIdentityTopUpTransition::new(wrapped_state_repository, Arc::new(tx_output_fetcher));
|
|
24
25
|
|
|
25
26
|
instance
|
|
26
|
-
.apply(
|
|
27
|
+
.apply(
|
|
28
|
+
&state_transition.to_owned().into(),
|
|
29
|
+
&execution_context.to_owned().into(),
|
|
30
|
+
)
|
|
27
31
|
.await
|
|
28
32
|
.map_err(|e| JsValue::from_str(&e.to_string()))?;
|
|
29
33
|
|
package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs
CHANGED
|
@@ -14,17 +14,16 @@ use crate::{
|
|
|
14
14
|
identity::state_transition::asset_lock_proof::{
|
|
15
15
|
ChainAssetLockProofWasm, InstantAssetLockProofWasm,
|
|
16
16
|
},
|
|
17
|
-
state_transition::StateTransitionExecutionContextWasm,
|
|
18
17
|
with_js_error,
|
|
19
18
|
};
|
|
20
19
|
|
|
21
20
|
use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
|
|
22
21
|
|
|
23
|
-
use crate::errors::from_dpp_err;
|
|
24
22
|
use dpp::identity::KeyType;
|
|
25
23
|
use dpp::platform_value::string_encoding::Encoding;
|
|
26
24
|
use dpp::platform_value::{string_encoding, BinaryData};
|
|
27
|
-
use dpp::
|
|
25
|
+
use dpp::serialization_traits::PlatformSerializable;
|
|
26
|
+
use dpp::state_transition::StateTransition;
|
|
28
27
|
use dpp::{
|
|
29
28
|
identifier::Identifier,
|
|
30
29
|
identity::state_transition::{
|
|
@@ -170,19 +169,11 @@ impl IdentityTopUpTransitionWasm {
|
|
|
170
169
|
}
|
|
171
170
|
|
|
172
171
|
#[wasm_bindgen(js_name=toBuffer)]
|
|
173
|
-
pub fn to_buffer(&self
|
|
174
|
-
let
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
let buffer = self
|
|
181
|
-
.0
|
|
182
|
-
.to_buffer(opts.skip_signature.unwrap_or(false))
|
|
183
|
-
.map_err(from_dpp_err)?;
|
|
184
|
-
|
|
185
|
-
Ok(Buffer::from_bytes(&buffer).into())
|
|
172
|
+
pub fn to_buffer(&self) -> Result<Buffer, JsValue> {
|
|
173
|
+
let bytes =
|
|
174
|
+
PlatformSerializable::serialize(&StateTransition::IdentityTopUp(self.0.clone()))
|
|
175
|
+
.with_js_error()?;
|
|
176
|
+
Ok(Buffer::from_bytes(&bytes))
|
|
186
177
|
}
|
|
187
178
|
|
|
188
179
|
#[wasm_bindgen(js_name=toJSON)]
|
|
@@ -262,16 +253,6 @@ impl IdentityTopUpTransitionWasm {
|
|
|
262
253
|
self.0.is_identity_state_transition()
|
|
263
254
|
}
|
|
264
255
|
|
|
265
|
-
#[wasm_bindgen(js_name=setExecutionContext)]
|
|
266
|
-
pub fn set_execution_context(&mut self, context: &StateTransitionExecutionContextWasm) {
|
|
267
|
-
self.0.set_execution_context(context.into())
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
#[wasm_bindgen(js_name=getExecutionContext)]
|
|
271
|
-
pub fn get_execution_context(&mut self) -> StateTransitionExecutionContextWasm {
|
|
272
|
-
self.0.get_execution_context().into()
|
|
273
|
-
}
|
|
274
|
-
|
|
275
256
|
#[wasm_bindgen(js_name=signByPrivateKey)]
|
|
276
257
|
pub fn sign_by_private_key(
|
|
277
258
|
&mut self,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
use crate::errors::from_dpp_err;
|
|
2
2
|
use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper};
|
|
3
3
|
use crate::validation::ValidationResultWasm;
|
|
4
|
-
use crate::IdentityTopUpTransitionWasm;
|
|
4
|
+
use crate::{IdentityTopUpTransitionWasm, StateTransitionExecutionContextWasm};
|
|
5
5
|
use dpp::identity::state_transition::identity_topup_transition::validation::state::validate_identity_topup_transition_state;
|
|
6
6
|
use wasm_bindgen::prelude::*;
|
|
7
7
|
use wasm_bindgen::JsValue;
|
|
@@ -24,10 +24,12 @@ impl IdentityTopUpTransitionStateValidator {
|
|
|
24
24
|
pub async fn validate(
|
|
25
25
|
&self,
|
|
26
26
|
state_transition: &IdentityTopUpTransitionWasm,
|
|
27
|
+
execution_context: &StateTransitionExecutionContextWasm,
|
|
27
28
|
) -> Result<ValidationResultWasm, JsValue> {
|
|
28
29
|
let validation_result = validate_identity_topup_transition_state(
|
|
29
30
|
&self.state_repository,
|
|
30
31
|
&state_transition.to_owned().into(),
|
|
32
|
+
&execution_context.to_owned().into(),
|
|
31
33
|
)
|
|
32
34
|
.await
|
|
33
35
|
.map_err(|e| from_dpp_err(e.into()))?;
|
package/src/identity/state_transition/identity_update_transition/apply_identity_update_transition.rs
CHANGED
|
@@ -3,19 +3,21 @@ use wasm_bindgen::prelude::*;
|
|
|
3
3
|
|
|
4
4
|
use crate::{
|
|
5
5
|
state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
|
|
6
|
-
IdentityUpdateTransitionWasm,
|
|
6
|
+
IdentityUpdateTransitionWasm, StateTransitionExecutionContextWasm,
|
|
7
7
|
};
|
|
8
8
|
|
|
9
9
|
#[wasm_bindgen(js_name=applyIdentityUpdateTransition)]
|
|
10
10
|
pub async fn apply_identity_update_transition_wasm(
|
|
11
11
|
state_repository: ExternalStateRepositoryLike,
|
|
12
12
|
state_transition: &IdentityUpdateTransitionWasm,
|
|
13
|
+
execution_context: &StateTransitionExecutionContextWasm,
|
|
13
14
|
) -> Result<(), JsValue> {
|
|
14
15
|
let wrapped_state_repository = ExternalStateRepositoryLikeWrapper::new(state_repository);
|
|
15
16
|
|
|
16
17
|
apply_identity_update_transition(
|
|
17
18
|
&wrapped_state_repository,
|
|
18
19
|
&state_transition.to_owned().into(),
|
|
20
|
+
&execution_context.to_owned().into(),
|
|
19
21
|
)
|
|
20
22
|
.await
|
|
21
23
|
.map_err(|e| JsValue::from_str(&e.to_string()))?;
|
|
@@ -2,7 +2,7 @@ use crate::errors::from_dpp_err;
|
|
|
2
2
|
use crate::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitnessWasm;
|
|
3
3
|
use crate::utils::WithJsError;
|
|
4
4
|
use crate::validation::ValidationResultWasm;
|
|
5
|
-
use dpp::identity::state_transition::identity_public_key_transitions::
|
|
5
|
+
use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyInCreation;
|
|
6
6
|
use dpp::identity::state_transition::identity_update_transition::validate_public_keys::IdentityUpdatePublicKeysValidator;
|
|
7
7
|
use dpp::identity::validation::TPublicKeysValidator;
|
|
8
8
|
use dpp::platform_value::Value;
|
|
@@ -31,7 +31,7 @@ impl IdentityUpdatePublicKeysValidatorWasm {
|
|
|
31
31
|
let public_keys = raw_public_keys
|
|
32
32
|
.into_iter()
|
|
33
33
|
.map(|raw_key| {
|
|
34
|
-
let parsed_key:
|
|
34
|
+
let parsed_key: IdentityPublicKeyInCreation =
|
|
35
35
|
IdentityPublicKeyWithWitnessWasm::new(raw_key)?.into();
|
|
36
36
|
|
|
37
37
|
parsed_key.to_raw_object(false).with_js_error()
|
package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs
CHANGED
|
@@ -11,24 +11,21 @@ use crate::identifier::IdentifierWrapper;
|
|
|
11
11
|
use crate::{
|
|
12
12
|
buffer::Buffer, errors::RustConversionError,
|
|
13
13
|
identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitnessWasm,
|
|
14
|
-
identity::IdentityPublicKeyWasm,
|
|
15
|
-
with_js_error,
|
|
14
|
+
identity::IdentityPublicKeyWasm, with_js_error,
|
|
16
15
|
};
|
|
17
16
|
|
|
18
17
|
use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
|
|
19
18
|
|
|
20
|
-
use crate::errors::from_dpp_err;
|
|
21
19
|
use crate::utils::{generic_of_js_val, WithJsError};
|
|
22
20
|
|
|
23
|
-
use dpp::consensus::ConsensusError::SignatureError as ConsensusSignatureErrorVariant;
|
|
24
|
-
|
|
25
21
|
use dpp::consensus::ConsensusError;
|
|
26
|
-
use dpp::identity::state_transition::identity_public_key_transitions::
|
|
22
|
+
use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyInCreation;
|
|
27
23
|
use dpp::identity::{KeyID, KeyType, TimestampMillis};
|
|
28
24
|
use dpp::platform_value::string_encoding::Encoding;
|
|
29
25
|
use dpp::platform_value::{string_encoding, BinaryData, Value};
|
|
30
26
|
use dpp::prelude::Revision;
|
|
31
|
-
use dpp::
|
|
27
|
+
use dpp::serialization_traits::PlatformSerializable;
|
|
28
|
+
use dpp::state_transition::{StateTransition, StateTransitionIdentitySigned};
|
|
32
29
|
use dpp::{
|
|
33
30
|
identifier::Identifier,
|
|
34
31
|
identity::state_transition::identity_update_transition::identity_update_transition::IdentityUpdateTransition,
|
|
@@ -47,7 +44,7 @@ struct IdentityUpdateTransitionParams {
|
|
|
47
44
|
protocol_version: u32,
|
|
48
45
|
identity_id: Vec<u8>,
|
|
49
46
|
revision: Revision,
|
|
50
|
-
add_public_keys: Option<Vec<
|
|
47
|
+
add_public_keys: Option<Vec<IdentityPublicKeyInCreation>>,
|
|
51
48
|
disable_public_keys: Option<Vec<KeyID>>,
|
|
52
49
|
public_keys_disabled_at: Option<TimestampMillis>,
|
|
53
50
|
}
|
|
@@ -106,7 +103,7 @@ impl IdentityUpdateTransitionWasm {
|
|
|
106
103
|
)?;
|
|
107
104
|
Ok(public_key.clone().into())
|
|
108
105
|
})
|
|
109
|
-
.collect::<Result<Vec<
|
|
106
|
+
.collect::<Result<Vec<IdentityPublicKeyInCreation>, JsValue>>()?;
|
|
110
107
|
}
|
|
111
108
|
|
|
112
109
|
self.0.set_public_keys_to_add(keys_to_add);
|
|
@@ -289,19 +286,11 @@ impl IdentityUpdateTransitionWasm {
|
|
|
289
286
|
}
|
|
290
287
|
|
|
291
288
|
#[wasm_bindgen(js_name=toBuffer)]
|
|
292
|
-
pub fn to_buffer(&self
|
|
293
|
-
let
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
};
|
|
298
|
-
|
|
299
|
-
let buffer = self
|
|
300
|
-
.0
|
|
301
|
-
.to_buffer(opts.skip_signature.unwrap_or(false))
|
|
302
|
-
.map_err(from_dpp_err)?;
|
|
303
|
-
|
|
304
|
-
Ok(Buffer::from_bytes(&buffer).into())
|
|
289
|
+
pub fn to_buffer(&self) -> Result<Buffer, JsValue> {
|
|
290
|
+
let bytes =
|
|
291
|
+
PlatformSerializable::serialize(&StateTransition::IdentityUpdate(self.0.clone()))
|
|
292
|
+
.with_js_error()?;
|
|
293
|
+
Ok(Buffer::from_bytes(&bytes))
|
|
305
294
|
}
|
|
306
295
|
|
|
307
296
|
#[wasm_bindgen(js_name=toJSON)]
|
|
@@ -420,16 +409,6 @@ impl IdentityUpdateTransitionWasm {
|
|
|
420
409
|
self.0.is_identity_state_transition()
|
|
421
410
|
}
|
|
422
411
|
|
|
423
|
-
#[wasm_bindgen(js_name=setExecutionContext)]
|
|
424
|
-
pub fn set_execution_context(&mut self, context: &StateTransitionExecutionContextWasm) {
|
|
425
|
-
self.0.set_execution_context(context.into())
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
#[wasm_bindgen(js_name=getExecutionContext)]
|
|
429
|
-
pub fn get_execution_context(&mut self) -> StateTransitionExecutionContextWasm {
|
|
430
|
-
self.0.get_execution_context().into()
|
|
431
|
-
}
|
|
432
|
-
|
|
433
412
|
#[wasm_bindgen(js_name=signByPrivateKey)]
|
|
434
413
|
pub fn sign_by_private_key(
|
|
435
414
|
&mut self,
|
|
@@ -2,7 +2,7 @@ use std::sync::Arc;
|
|
|
2
2
|
|
|
3
3
|
use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper};
|
|
4
4
|
use crate::validation::ValidationResultWasm;
|
|
5
|
-
use crate::{IdentityUpdateTransitionWasm};
|
|
5
|
+
use crate::{IdentityUpdateTransitionWasm, StateTransitionExecutionContextWasm};
|
|
6
6
|
use wasm_bindgen::prelude::*;
|
|
7
7
|
use wasm_bindgen::JsValue;
|
|
8
8
|
use dpp::identity::state_transition::identity_update_transition::identity_update_transition::IdentityUpdateTransition;
|
|
@@ -40,12 +40,13 @@ impl IdentityUpdateTransitionStateValidatorWasm {
|
|
|
40
40
|
pub async fn validate(
|
|
41
41
|
&self,
|
|
42
42
|
state_transition: &IdentityUpdateTransitionWasm,
|
|
43
|
+
execution_context: &StateTransitionExecutionContextWasm,
|
|
43
44
|
) -> Result<ValidationResultWasm, JsValue> {
|
|
44
45
|
let state_transition: IdentityUpdateTransition = state_transition.to_owned().into();
|
|
45
46
|
|
|
46
47
|
let validation_result = self
|
|
47
48
|
.0
|
|
48
|
-
.validate(&state_transition)
|
|
49
|
+
.validate(&state_transition, &execution_context.to_owned().into())
|
|
49
50
|
.await
|
|
50
51
|
.map_err(|e| from_dpp_err(e.into()))?;
|
|
51
52
|
|
|
@@ -2,7 +2,7 @@ use dpp::identity::KeyID;
|
|
|
2
2
|
use dpp::state_transition::StateTransitionIdentitySigned;
|
|
3
3
|
use dpp::{
|
|
4
4
|
identifier::Identifier,
|
|
5
|
-
identity::state_transition::identity_public_key_transitions::
|
|
5
|
+
identity::state_transition::identity_public_key_transitions::IdentityPublicKeyInCreation,
|
|
6
6
|
identity::state_transition::identity_update_transition::identity_update_transition::IdentityUpdateTransition,
|
|
7
7
|
state_transition::StateTransitionLike,
|
|
8
8
|
};
|
|
@@ -23,7 +23,7 @@ pub struct ToObject {
|
|
|
23
23
|
pub signature: Option<Vec<u8>>,
|
|
24
24
|
pub signature_public_key_id: Option<KeyID>,
|
|
25
25
|
pub public_keys_disabled_at: Option<u64>,
|
|
26
|
-
pub public_keys_to_add: Option<Vec<
|
|
26
|
+
pub public_keys_to_add: Option<Vec<IdentityPublicKeyInCreation>>,
|
|
27
27
|
pub public_key_ids_to_disable: Option<Vec<KeyID>>,
|
|
28
28
|
pub identity_id: Identifier,
|
|
29
29
|
}
|
|
@@ -10,7 +10,7 @@ use dpp::identity::state_transition::validate_public_key_signatures::{
|
|
|
10
10
|
PublicKeysSignaturesValidator, TPublicKeysSignaturesValidator,
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
use dpp::identity::state_transition::identity_public_key_transitions::
|
|
13
|
+
use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyInCreation;
|
|
14
14
|
|
|
15
15
|
use crate::errors::from_dpp_err;
|
|
16
16
|
use dpp::platform_value::Value;
|
|
@@ -44,7 +44,7 @@ impl PublicKeysSignaturesValidatorWasm {
|
|
|
44
44
|
let public_keys = raw_public_keys
|
|
45
45
|
.into_iter()
|
|
46
46
|
.map(|raw_key| {
|
|
47
|
-
let parsed_key:
|
|
47
|
+
let parsed_key: IdentityPublicKeyInCreation =
|
|
48
48
|
IdentityPublicKeyWithWitnessWasm::new(raw_key)?.into();
|
|
49
49
|
parsed_key.to_raw_object(false).with_js_error()
|
|
50
50
|
})
|
package/src/state_repository.rs
CHANGED
|
@@ -12,6 +12,7 @@ use dpp::prelude::{Revision, TimestampMillis};
|
|
|
12
12
|
use dpp::{
|
|
13
13
|
dashcore::InstantLock,
|
|
14
14
|
data_contract::DataContract,
|
|
15
|
+
platform_value,
|
|
15
16
|
prelude::{Identifier, Identity},
|
|
16
17
|
state_repository::{
|
|
17
18
|
FetchTransactionResponse as FetchTransactionResponseDPP, StateRepositoryLike,
|
|
@@ -354,7 +355,7 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
|
|
|
354
355
|
&self,
|
|
355
356
|
contract_id: &Identifier,
|
|
356
357
|
data_contract_type: &str,
|
|
357
|
-
where_query:
|
|
358
|
+
where_query: platform_value::Value,
|
|
358
359
|
execution_context: Option<&'a StateTransitionExecutionContext>,
|
|
359
360
|
) -> anyhow::Result<Vec<Self::FetchDocument>> {
|
|
360
361
|
let js_documents = self
|
|
@@ -385,7 +386,7 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
|
|
|
385
386
|
&self,
|
|
386
387
|
contract_id: &Identifier,
|
|
387
388
|
data_contract_type: &str,
|
|
388
|
-
where_query:
|
|
389
|
+
where_query: platform_value::Value,
|
|
389
390
|
execution_context: Option<&'a StateTransitionExecutionContext>,
|
|
390
391
|
) -> anyhow::Result<Vec<Self::FetchExtendedDocument>> {
|
|
391
392
|
let js_documents = self
|
|
@@ -6,17 +6,20 @@ use wasm_bindgen::prelude::*;
|
|
|
6
6
|
|
|
7
7
|
use crate::{
|
|
8
8
|
conversion::create_state_transition_from_wasm_instance, fee::fee_result::FeeResultWasm,
|
|
9
|
-
utils::WithJsError,
|
|
9
|
+
utils::WithJsError, StateTransitionExecutionContextWasm,
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
#[wasm_bindgen(js_name=calculateStateTransitionFee)]
|
|
13
13
|
pub fn calculate_state_transition_fee_wasm(
|
|
14
14
|
state_transition_js: &JsValue,
|
|
15
|
+
execution_context: &StateTransitionExecutionContextWasm,
|
|
15
16
|
) -> Result<FeeResultWasm, JsValue> {
|
|
16
17
|
let state_transition = create_state_transition_from_wasm_instance(state_transition_js)?;
|
|
17
18
|
|
|
18
|
-
Ok(
|
|
19
|
-
.
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
Ok(
|
|
20
|
+
calculate_state_transition_fee(&state_transition, &execution_context.to_owned().into())
|
|
21
|
+
.map_err(ProtocolError::from)
|
|
22
|
+
.with_js_error()?
|
|
23
|
+
.into(),
|
|
24
|
+
)
|
|
22
25
|
}
|
|
@@ -5,11 +5,10 @@ use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateReposito
|
|
|
5
5
|
use crate::state_transition_factory::StateTransitionFactoryWasm;
|
|
6
6
|
use crate::utils::{ToSerdeJSONExt, WithJsError};
|
|
7
7
|
use crate::validation::ValidationResultWasm;
|
|
8
|
-
use crate::with_js_error;
|
|
8
|
+
use crate::{with_js_error, StateTransitionExecutionContextWasm};
|
|
9
9
|
use dpp::state_transition::state_transition_execution_context::StateTransitionExecutionContext;
|
|
10
10
|
use dpp::state_transition::{
|
|
11
|
-
StateTransitionConvert, StateTransitionFacade,
|
|
12
|
-
ValidateOptions,
|
|
11
|
+
StateTransitionConvert, StateTransitionFacade, StateTransitionType, ValidateOptions,
|
|
13
12
|
};
|
|
14
13
|
use dpp::version::ProtocolVersionValidator;
|
|
15
14
|
use serde::Deserialize;
|
|
@@ -17,8 +16,7 @@ use serde::Deserialize;
|
|
|
17
16
|
use crate::errors::protocol_error::from_protocol_error;
|
|
18
17
|
use crate::errors::value_error::PlatformValueErrorWasm;
|
|
19
18
|
use dpp::data_contract::state_transition::data_contract_update_transition::DataContractUpdateTransition;
|
|
20
|
-
|
|
21
|
-
use dpp::ProtocolError;
|
|
19
|
+
|
|
22
20
|
use std::sync::Arc;
|
|
23
21
|
use wasm_bindgen::prelude::*;
|
|
24
22
|
use wasm_bindgen::JsValue;
|
|
@@ -65,17 +63,13 @@ impl StateTransitionFacadeWasm {
|
|
|
65
63
|
let mut raw_state_transition = raw_state_transition.with_serde_to_platform_value()?;
|
|
66
64
|
let state_transition_type: StateTransitionType = raw_state_transition
|
|
67
65
|
.get_integer::<u8>("type")
|
|
68
|
-
.map_err(
|
|
66
|
+
.map_err(PlatformValueErrorWasm::from)?
|
|
69
67
|
.try_into()
|
|
70
68
|
.map_err(|_| JsValue::from_str("Invalid state transition type"))?;
|
|
71
69
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
DataContractUpdateTransition::clean_value(&mut raw_state_transition)
|
|
76
|
-
.map_err(|e| PlatformValueErrorWasm::from(e))?;
|
|
77
|
-
}
|
|
78
|
-
_ => {}
|
|
70
|
+
if state_transition_type == StateTransitionType::DataContractUpdate {
|
|
71
|
+
DataContractUpdateTransition::clean_value(&mut raw_state_transition)
|
|
72
|
+
.map_err(PlatformValueErrorWasm::from)?;
|
|
79
73
|
}
|
|
80
74
|
|
|
81
75
|
let result = self
|
|
@@ -116,6 +110,7 @@ impl StateTransitionFacadeWasm {
|
|
|
116
110
|
pub async fn validate(
|
|
117
111
|
&self,
|
|
118
112
|
raw_state_transition: JsValue,
|
|
113
|
+
execution_context: &StateTransitionExecutionContextWasm,
|
|
119
114
|
options: JsValue,
|
|
120
115
|
) -> Result<ValidationResultWasm, JsValue> {
|
|
121
116
|
let options: ValidateOptionsWasm = if options.is_object() {
|
|
@@ -128,7 +123,8 @@ impl StateTransitionFacadeWasm {
|
|
|
128
123
|
super::super::conversion::create_state_transition_from_wasm_instance(
|
|
129
124
|
&raw_state_transition,
|
|
130
125
|
) {
|
|
131
|
-
let execution_context =
|
|
126
|
+
let execution_context: StateTransitionExecutionContext =
|
|
127
|
+
execution_context.to_owned().into();
|
|
132
128
|
(state_transition, execution_context)
|
|
133
129
|
} else {
|
|
134
130
|
let state_transition_json = raw_state_transition.with_serde_to_platform_value()?;
|
|
@@ -154,25 +150,23 @@ impl StateTransitionFacadeWasm {
|
|
|
154
150
|
pub async fn validate_basic(
|
|
155
151
|
&self,
|
|
156
152
|
raw_state_transition: JsValue,
|
|
153
|
+
execution_context: &StateTransitionExecutionContextWasm,
|
|
157
154
|
) -> Result<ValidationResultWasm, JsValue> {
|
|
158
155
|
let state_transition_json;
|
|
159
|
-
let execution_context;
|
|
160
156
|
|
|
161
157
|
if let Ok(state_transition) =
|
|
162
158
|
super::super::conversion::create_state_transition_from_wasm_instance(
|
|
163
159
|
&raw_state_transition,
|
|
164
160
|
)
|
|
165
161
|
{
|
|
166
|
-
execution_context = state_transition.get_execution_context().to_owned();
|
|
167
162
|
state_transition_json = state_transition.to_cleaned_object(false).with_js_error()?;
|
|
168
163
|
} else {
|
|
169
164
|
state_transition_json = raw_state_transition.with_serde_to_platform_value()?;
|
|
170
|
-
execution_context = StateTransitionExecutionContext::default();
|
|
171
165
|
}
|
|
172
166
|
|
|
173
167
|
let validation_result = self
|
|
174
168
|
.0
|
|
175
|
-
.validate_basic(&state_transition_json, &execution_context)
|
|
169
|
+
.validate_basic(&state_transition_json, &execution_context.to_owned().into())
|
|
176
170
|
.await
|
|
177
171
|
.with_js_error()?;
|
|
178
172
|
|
|
@@ -183,6 +177,7 @@ impl StateTransitionFacadeWasm {
|
|
|
183
177
|
pub async fn validate_signature(
|
|
184
178
|
&self,
|
|
185
179
|
raw_state_transition: JsValue,
|
|
180
|
+
execution_context: &StateTransitionExecutionContextWasm,
|
|
186
181
|
) -> Result<ValidationResultWasm, JsValue> {
|
|
187
182
|
let state_transition =
|
|
188
183
|
super::super::conversion::create_state_transition_from_wasm_instance(
|
|
@@ -191,7 +186,7 @@ impl StateTransitionFacadeWasm {
|
|
|
191
186
|
|
|
192
187
|
let validation_result = self
|
|
193
188
|
.0
|
|
194
|
-
.validate_signature(state_transition)
|
|
189
|
+
.validate_signature(state_transition, &execution_context.to_owned().into())
|
|
195
190
|
.await
|
|
196
191
|
.with_js_error()?;
|
|
197
192
|
|
|
@@ -202,6 +197,7 @@ impl StateTransitionFacadeWasm {
|
|
|
202
197
|
pub async fn validate_fee(
|
|
203
198
|
&self,
|
|
204
199
|
raw_state_transition: JsValue,
|
|
200
|
+
execution_context: &StateTransitionExecutionContextWasm,
|
|
205
201
|
) -> Result<ValidationResultWasm, JsValue> {
|
|
206
202
|
let state_transition =
|
|
207
203
|
super::super::conversion::create_state_transition_from_wasm_instance(
|
|
@@ -210,7 +206,7 @@ impl StateTransitionFacadeWasm {
|
|
|
210
206
|
|
|
211
207
|
let validation_result = self
|
|
212
208
|
.0
|
|
213
|
-
.validate_fee(&state_transition)
|
|
209
|
+
.validate_fee(&state_transition, &execution_context.to_owned().into())
|
|
214
210
|
.await
|
|
215
211
|
.with_js_error()?;
|
|
216
212
|
|
|
@@ -221,6 +217,7 @@ impl StateTransitionFacadeWasm {
|
|
|
221
217
|
pub async fn validate_state(
|
|
222
218
|
&self,
|
|
223
219
|
raw_state_transition: JsValue,
|
|
220
|
+
execution_context: &StateTransitionExecutionContextWasm,
|
|
224
221
|
) -> Result<ValidationResultWasm, JsValue> {
|
|
225
222
|
let state_transition =
|
|
226
223
|
super::super::conversion::create_state_transition_from_wasm_instance(
|
|
@@ -229,7 +226,7 @@ impl StateTransitionFacadeWasm {
|
|
|
229
226
|
|
|
230
227
|
let validation_result = self
|
|
231
228
|
.0
|
|
232
|
-
.validate_state(&state_transition)
|
|
229
|
+
.validate_state(&state_transition, &execution_context.to_owned().into())
|
|
233
230
|
.await
|
|
234
231
|
.with_js_error()?;
|
|
235
232
|
|
|
@@ -7,6 +7,7 @@ use wasm_bindgen::JsValue;
|
|
|
7
7
|
use crate::state_transition::conversion::create_state_transition_from_wasm_instance;
|
|
8
8
|
use crate::utils::WithJsError;
|
|
9
9
|
use crate::validation::ValidationResultWasm;
|
|
10
|
+
use crate::StateTransitionExecutionContextWasm;
|
|
10
11
|
|
|
11
12
|
#[wasm_bindgen(js_name=StateTransitionFeeValidator)]
|
|
12
13
|
pub struct StateTransitionFeeValidatorWasm(
|
|
@@ -26,11 +27,12 @@ impl StateTransitionFeeValidatorWasm {
|
|
|
26
27
|
pub async fn validate(
|
|
27
28
|
&self,
|
|
28
29
|
state_transition: &JsValue,
|
|
30
|
+
execution_context: &StateTransitionExecutionContextWasm,
|
|
29
31
|
) -> Result<ValidationResultWasm, JsValue> {
|
|
30
32
|
let st = create_state_transition_from_wasm_instance(state_transition)?;
|
|
31
33
|
Ok(self
|
|
32
34
|
.0
|
|
33
|
-
.validate(&st)
|
|
35
|
+
.validate(&st, &execution_context.to_owned().into())
|
|
34
36
|
.await
|
|
35
37
|
.map(|v| v.map(|_| JsValue::undefined()))
|
|
36
38
|
.with_js_error()?
|
|
@@ -7,9 +7,11 @@ use crate::errors::consensus::consensus_error::from_consensus_error;
|
|
|
7
7
|
use dpp::consensus::basic::state_transition::InvalidStateTransitionTypeError;
|
|
8
8
|
use dpp::consensus::basic::BasicError;
|
|
9
9
|
use dpp::consensus::ConsensusError;
|
|
10
|
+
use dpp::state_transition::state_transition_execution_context::StateTransitionExecutionContext;
|
|
10
11
|
use dpp::state_transition::validation::validate_state_transition_identity_signature::validate_state_transition_identity_signature;
|
|
11
12
|
use dpp::state_transition::{StateTransition, StateTransitionIdentitySigned};
|
|
12
|
-
|
|
13
|
+
|
|
14
|
+
use crate::StateTransitionExecutionContextWasm;
|
|
13
15
|
use std::sync::Arc;
|
|
14
16
|
use wasm_bindgen::prelude::wasm_bindgen;
|
|
15
17
|
use wasm_bindgen::JsValue;
|
|
@@ -23,11 +25,13 @@ impl StValidator {
|
|
|
23
25
|
pub async fn validate(
|
|
24
26
|
&self,
|
|
25
27
|
state_transition: &mut impl StateTransitionIdentitySigned,
|
|
28
|
+
execution_context: &StateTransitionExecutionContext,
|
|
26
29
|
) -> Result<ValidationResultWasm, JsValue> {
|
|
27
30
|
let result = validate_state_transition_identity_signature(
|
|
28
31
|
self.state_repository.clone(),
|
|
29
32
|
state_transition,
|
|
30
33
|
&self.bls,
|
|
34
|
+
execution_context,
|
|
31
35
|
)
|
|
32
36
|
.await
|
|
33
37
|
.with_js_error()?;
|
|
@@ -41,12 +45,14 @@ impl StValidator {
|
|
|
41
45
|
pub async fn validate_state_transition_identity_signature_wasm(
|
|
42
46
|
external_state_repository: ExternalStateRepositoryLike,
|
|
43
47
|
js_state_transition: &JsValue,
|
|
48
|
+
execution_context: &StateTransitionExecutionContextWasm,
|
|
44
49
|
bls_adapter: JsBlsAdapter,
|
|
45
50
|
) -> Result<ValidationResultWasm, JsValue> {
|
|
46
51
|
let bls = BlsAdapter(bls_adapter);
|
|
47
52
|
let state_repository = Arc::new(ExternalStateRepositoryLikeWrapper::new(
|
|
48
53
|
external_state_repository,
|
|
49
54
|
));
|
|
55
|
+
let execution_context: StateTransitionExecutionContext = execution_context.to_owned().into();
|
|
50
56
|
|
|
51
57
|
let validator = StValidator {
|
|
52
58
|
bls,
|
|
@@ -58,13 +64,19 @@ pub async fn validate_state_transition_identity_signature_wasm(
|
|
|
58
64
|
|
|
59
65
|
match state_transition {
|
|
60
66
|
StateTransition::DataContractCreate(mut state_transition) => {
|
|
61
|
-
validator
|
|
67
|
+
validator
|
|
68
|
+
.validate(&mut state_transition, &execution_context)
|
|
69
|
+
.await
|
|
62
70
|
}
|
|
63
71
|
StateTransition::DataContractUpdate(mut state_transition) => {
|
|
64
|
-
validator
|
|
72
|
+
validator
|
|
73
|
+
.validate(&mut state_transition, &execution_context)
|
|
74
|
+
.await
|
|
65
75
|
}
|
|
66
76
|
StateTransition::DocumentsBatch(mut state_transition) => {
|
|
67
|
-
validator
|
|
77
|
+
validator
|
|
78
|
+
.validate(&mut state_transition, &execution_context)
|
|
79
|
+
.await
|
|
68
80
|
}
|
|
69
81
|
// TODO: We should use protocol error here, not consensus
|
|
70
82
|
StateTransition::IdentityCreate(state_transition) => Err(from_consensus_error(
|
|
@@ -79,10 +91,14 @@ pub async fn validate_state_transition_identity_signature_wasm(
|
|
|
79
91
|
)),
|
|
80
92
|
)),
|
|
81
93
|
StateTransition::IdentityCreditWithdrawal(mut state_transition) => {
|
|
82
|
-
validator
|
|
94
|
+
validator
|
|
95
|
+
.validate(&mut state_transition, &execution_context)
|
|
96
|
+
.await
|
|
83
97
|
}
|
|
84
98
|
StateTransition::IdentityUpdate(mut state_transition) => {
|
|
85
|
-
validator
|
|
99
|
+
validator
|
|
100
|
+
.validate(&mut state_transition, &execution_context)
|
|
101
|
+
.await
|
|
86
102
|
}
|
|
87
103
|
}
|
|
88
104
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper};
|
|
2
2
|
use crate::utils::WithJsError;
|
|
3
3
|
use crate::validation::ValidationResultWasm;
|
|
4
|
+
use crate::StateTransitionExecutionContextWasm;
|
|
4
5
|
use dpp::identity::state_transition::asset_lock_proof::{
|
|
5
6
|
AssetLockPublicKeyHashFetcher, AssetLockTransactionOutputFetcher,
|
|
6
7
|
};
|
|
@@ -48,13 +49,18 @@ impl StateTransitionKeySignatureValidatorWasm {
|
|
|
48
49
|
pub async fn validate(
|
|
49
50
|
&self,
|
|
50
51
|
state_transition: JsValue,
|
|
52
|
+
execution_context: &StateTransitionExecutionContextWasm,
|
|
51
53
|
) -> Result<ValidationResultWasm, JsValue> {
|
|
52
54
|
let state_transition =
|
|
53
55
|
super::super::conversion::create_state_transition_from_wasm_instance(
|
|
54
56
|
&state_transition,
|
|
55
57
|
)?;
|
|
56
58
|
|
|
57
|
-
let validation_result = self
|
|
59
|
+
let validation_result = self
|
|
60
|
+
.0
|
|
61
|
+
.validate(&state_transition, &execution_context.to_owned().into())
|
|
62
|
+
.await
|
|
63
|
+
.with_js_error()?;
|
|
58
64
|
Ok(validation_result.map(|_| JsValue::undefined()).into())
|
|
59
65
|
}
|
|
60
66
|
}
|
package/src/utils.rs
CHANGED
|
@@ -240,7 +240,7 @@ pub fn get_class_name(value: &JsValue) -> String {
|
|
|
240
240
|
}
|
|
241
241
|
|
|
242
242
|
pub fn try_to_u64(value: JsValue) -> Result<u64, anyhow::Error> {
|
|
243
|
-
|
|
243
|
+
if value.is_bigint() {
|
|
244
244
|
js_sys::BigInt::new(&value)
|
|
245
245
|
.map_err(|e| anyhow!("unable to create bigInt: {}", e.to_string()))?
|
|
246
246
|
.try_into()
|
|
@@ -250,9 +250,7 @@ pub fn try_to_u64(value: JsValue) -> Result<u64, anyhow::Error> {
|
|
|
250
250
|
convert_number_to_u64(number)
|
|
251
251
|
} else {
|
|
252
252
|
bail!("supported types are Number or BigInt")
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
result
|
|
253
|
+
}
|
|
256
254
|
}
|
|
257
255
|
|
|
258
256
|
pub fn convert_number_to_u64(js_number: js_sys::Number) -> Result<u64, anyhow::Error> {
|