@dashevo/wasm-dpp 0.24.0-dev.11 → 0.24.0-dev.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.toml +3 -0
- package/README.md +5 -1
- package/dist/index.js +1 -1
- package/dist/index.js.LICENSE.txt +9 -0
- package/dist/lib/dpp.d.ts +9 -0
- package/dist/lib/errors/AbstractConsensusError.d.ts +10 -0
- package/dist/lib/errors/DPPError.d.ts +5 -0
- package/dist/lib/errors/patchConsensusErrors.d.ts +1 -0
- package/dist/lib/{patchIdentifier.d.ts → identifier/patchIdentifier.d.ts} +1 -1
- package/dist/{index.d.ts → lib/index.d.ts} +1 -1
- package/dist/lib/utils/extend.d.ts +1 -0
- package/dist/wasm/wasm_dpp.d.ts +1595 -518
- package/karma.conf.js +5 -0
- package/lib/dpp.ts +24 -0
- package/lib/errors/AbstractConsensusError.ts +13 -0
- package/lib/errors/DPPError.ts +15 -0
- package/lib/errors/patchConsensusErrors.ts +175 -0
- package/lib/{patchIdentifier.ts → identifier/patchIdentifier.ts} +6 -5
- package/{index.ts → lib/index.ts} +5 -4
- package/lib/test/bootstrap.js +5 -0
- package/lib/test/expect/expectError.js +4 -2
- package/lib/test/mocks/getBlsAdapterMock.js +36 -0
- package/lib/test/utils/newDocumentsContainer.js +36 -0
- package/lib/utils/extend.ts +6 -0
- package/package.json +9 -6
- package/src/bls_adapter.rs +16 -1
- package/src/data_contract/data_contract.rs +35 -7
- package/src/data_contract/errors/invalid_data_contract.rs +21 -0
- package/src/data_contract/errors/invalid_document_type.rs +1 -1
- package/src/data_contract/index.rs +56 -1
- package/src/data_contract/mod.rs +1 -0
- package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +6 -8
- package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +4 -4
- package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +44 -0
- package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +145 -0
- package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +49 -0
- package/src/data_contract/state_transition/mod.rs +2 -0
- package/src/data_contract_factory/data_contract_factory.rs +25 -12
- package/src/document/errors/invalid_document_error.rs +10 -9
- package/src/document/errors/invalid_initial_revision_error.rs +1 -1
- package/src/document/errors/mismatch_owners_ids_error.rs +14 -4
- package/src/document/errors/mod.rs +17 -13
- package/src/document/errors/no_documents_supplied_error.rs +4 -4
- package/src/document/factory.rs +192 -0
- package/src/document/mod.rs +222 -30
- package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +47 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +25 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +65 -0
- package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +123 -3
- package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
- package/src/document/validator.rs +30 -0
- package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +5 -5
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +4 -4
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +36 -0
- package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +20 -0
- package/src/errors/consensus/basic/document/mod.rs +4 -0
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +2 -2
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +2 -2
- package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
- package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +2 -2
- package/src/errors/consensus/basic/json_schema_error.rs +1 -1
- package/src/errors/consensus_error.rs +15 -8
- package/src/errors/dpp_error.rs +17 -0
- package/src/errors/from.rs +6 -1
- package/src/errors/js_conversion.rs +19 -4
- package/src/errors/mod.rs +3 -0
- package/src/errors/protocol_error.rs +15 -0
- package/src/{identifier.rs → identifier/mod.rs} +48 -3
- package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
- package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
- package/src/identity/errors/mod.rs +7 -0
- package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
- package/src/{identity_facade.rs → identity/identity_facade.rs} +3 -5
- package/src/{identity_public_key → identity/identity_public_key}/key_type.rs +0 -0
- package/src/{identity_public_key → identity/identity_public_key}/mod.rs +41 -10
- package/src/{identity_public_key → identity/identity_public_key}/purpose.rs +0 -0
- package/src/{identity_public_key → identity/identity_public_key}/security_level.rs +0 -0
- package/src/{identity.rs → identity/mod.rs} +20 -12
- package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
- package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
- package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
- package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
- package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
- package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
- package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
- package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +335 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
- package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
- package/src/identity/state_transition/identity_create_transition/to_object.rs +46 -0
- package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +280 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
- package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
- package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
- package/src/identity/state_transition/mod.rs +9 -0
- package/src/identity/state_transition/validate_public_key_signatures.rs +59 -0
- package/src/identity/validation/mod.rs +3 -0
- package/src/identity/validation/public_keys_validator.rs +76 -0
- package/src/identity_public_key/public_keys_validator.rs +1 -1
- package/src/lib.rs +3 -6
- package/src/lodash.rs +7 -0
- package/src/state_repository.rs +188 -36
- package/src/state_transition/mod.rs +12 -0
- package/src/utils.rs +102 -7
- package/src/validation/json_schema_validator.rs +41 -0
- package/src/validation/mod.rs +5 -0
- package/src/{validation_result.rs → validation/validation_result.rs} +23 -5
- package/src/version/mod.rs +2 -0
- package/src/version/protocol_version.rs +26 -0
- package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +579 -502
- package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +175 -165
- package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +83 -114
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +1 -1
- package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +82 -91
- package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +75 -31
- package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -148
- package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +63 -75
- package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +48 -19
- package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +79 -114
- package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -11
- package/test/integration/stateTransition/StateTransitionFacade.spec.js +1 -1
- package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +135 -0
- package/test/unit/dataContract/DataContract.spec.js +5 -9
- package/test/unit/dataContract/DataContractFactory.spec.js +13 -6
- package/test/unit/dataContract/createDataContract.spec.js +0 -1
- package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +11 -3
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +20 -16
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +24 -60
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +27 -23
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +29 -12
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +66 -49
- package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +73 -0
- package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
- package/test/unit/document/Document.spec.js +147 -155
- package/test/unit/document/DocumentFactory.spec.js +325 -91
- package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +142 -64
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +1 -1
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +1 -1
- package/test/unit/identity/Identity.spec.js +2 -2
- package/test/unit/identity/IdentityPublicKey.spec.js +25 -31
- package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +69 -30
- package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +32 -32
- package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +56 -25
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +48 -46
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
- package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
- package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
- package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
- package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
- package/tsconfig.json +1 -1
- package/wasm/package.json +5 -0
- package/wasm/wasm_dpp.d.ts +1595 -518
- package/wasm/wasm_dpp.js +5007 -2172
- package/wasm/wasm_dpp_bg.js +1 -1
- package/wasm/wasm_dpp_bg.wasm +0 -0
- package/wasm/wasm_dpp_bg.wasm.d.ts +566 -365
- package/webpack.config.js +10 -1
- package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +0 -32
- package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +0 -93
- package/test/unit/dataContract/validation/validateDataContractPatternsFactory.spec.js +0 -64
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
use crate::errors::from_dpp_err;
|
|
2
|
+
use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper};
|
|
3
|
+
use crate::validation::ValidationResultWasm;
|
|
4
|
+
use crate::IdentityTopUpTransitionWasm;
|
|
5
|
+
use dpp::identity::state_transition::identity_topup_transition::validation::state::validate_identity_topup_transition_state;
|
|
6
|
+
use wasm_bindgen::prelude::*;
|
|
7
|
+
use wasm_bindgen::JsValue;
|
|
8
|
+
|
|
9
|
+
#[wasm_bindgen(js_name=IdentityTopUpTransitionStateValidator)]
|
|
10
|
+
pub struct IdentityTopUpTransitionStateValidator {
|
|
11
|
+
state_repository: ExternalStateRepositoryLikeWrapper,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
#[wasm_bindgen(js_class=IdentityTopUpTransitionStateValidator)]
|
|
15
|
+
impl IdentityTopUpTransitionStateValidator {
|
|
16
|
+
#[wasm_bindgen(constructor)]
|
|
17
|
+
pub fn new(state_repository: ExternalStateRepositoryLike) -> Self {
|
|
18
|
+
Self {
|
|
19
|
+
state_repository: ExternalStateRepositoryLikeWrapper::new(state_repository),
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
#[wasm_bindgen]
|
|
24
|
+
pub async fn validate(
|
|
25
|
+
&self,
|
|
26
|
+
state_transition: &IdentityTopUpTransitionWasm,
|
|
27
|
+
) -> Result<ValidationResultWasm, JsValue> {
|
|
28
|
+
let validation_result = validate_identity_topup_transition_state(
|
|
29
|
+
state_transition.to_owned().into(),
|
|
30
|
+
&self.state_repository,
|
|
31
|
+
)
|
|
32
|
+
.await
|
|
33
|
+
.map_err(|e| from_dpp_err(e.into()))?;
|
|
34
|
+
|
|
35
|
+
Ok(validation_result.map(|_| JsValue::undefined()).into())
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
use dpp::identity::state_transition::asset_lock_proof::AssetLockProof;
|
|
2
|
+
use dpp::{
|
|
3
|
+
identifier::Identifier,
|
|
4
|
+
identity::state_transition::identity_topup_transition::IdentityTopUpTransition,
|
|
5
|
+
state_transition::StateTransitionLike,
|
|
6
|
+
};
|
|
7
|
+
use serde::Deserialize;
|
|
8
|
+
use std::default::Default;
|
|
9
|
+
|
|
10
|
+
#[derive(Deserialize, Default)]
|
|
11
|
+
#[serde(rename_all = "camelCase")]
|
|
12
|
+
pub struct ToObjectOptions {
|
|
13
|
+
pub skip_signature: Option<bool>,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
#[derive(Default)]
|
|
17
|
+
pub struct ToObject {
|
|
18
|
+
pub transition_type: u8,
|
|
19
|
+
pub protocol_version: u32,
|
|
20
|
+
pub identity_id: Identifier,
|
|
21
|
+
pub asset_lock_proof: AssetLockProof,
|
|
22
|
+
pub signature: Option<Vec<u8>>,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
pub fn to_object_struct(
|
|
26
|
+
transition: &IdentityTopUpTransition,
|
|
27
|
+
options: ToObjectOptions,
|
|
28
|
+
) -> ToObject {
|
|
29
|
+
let mut to_object = ToObject {
|
|
30
|
+
transition_type: transition.get_type() as u8,
|
|
31
|
+
protocol_version: transition.get_protocol_version(),
|
|
32
|
+
identity_id: transition.get_identity_id().clone(),
|
|
33
|
+
asset_lock_proof: transition.get_asset_lock_proof().to_owned(),
|
|
34
|
+
signature: None,
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
if !options.skip_signature.unwrap_or(false) {
|
|
38
|
+
to_object.signature = Some(transition.get_signature().to_owned());
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
to_object
|
|
42
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
pub use asset_lock_proof::*;
|
|
2
|
+
pub use identity_create_transition::*;
|
|
3
|
+
pub use identity_topup_transition::*;
|
|
4
|
+
pub use validate_public_key_signatures::*;
|
|
5
|
+
|
|
6
|
+
mod asset_lock_proof;
|
|
7
|
+
mod identity_create_transition;
|
|
8
|
+
mod identity_topup_transition;
|
|
9
|
+
mod validate_public_key_signatures;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
|
|
2
|
+
use crate::errors::from_dpp_err;
|
|
3
|
+
use crate::utils::ToSerdeJSONExt;
|
|
4
|
+
|
|
5
|
+
use crate::{
|
|
6
|
+
identity::identity_public_key::IdentityPublicKeyWasm, validation::ValidationResultWasm,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
use dpp::identity::state_transition::validate_public_key_signatures::{
|
|
10
|
+
PublicKeysSignaturesValidator, TPublicKeysSignaturesValidator,
|
|
11
|
+
};
|
|
12
|
+
use dpp::prelude::IdentityPublicKey;
|
|
13
|
+
|
|
14
|
+
use serde_json::Value as JsonValue;
|
|
15
|
+
use wasm_bindgen::prelude::wasm_bindgen;
|
|
16
|
+
use wasm_bindgen::JsValue;
|
|
17
|
+
|
|
18
|
+
#[wasm_bindgen(js_name = PublicKeysSignaturesValidator)]
|
|
19
|
+
pub struct PublicKeysSignaturesValidatorWasm(PublicKeysSignaturesValidator<BlsAdapter>);
|
|
20
|
+
|
|
21
|
+
impl From<PublicKeysSignaturesValidator<BlsAdapter>> for PublicKeysSignaturesValidatorWasm {
|
|
22
|
+
fn from(validator: PublicKeysSignaturesValidator<BlsAdapter>) -> Self {
|
|
23
|
+
Self(validator)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
#[wasm_bindgen(js_class = PublicKeysSignaturesValidator)]
|
|
28
|
+
impl PublicKeysSignaturesValidatorWasm {
|
|
29
|
+
#[wasm_bindgen(constructor)]
|
|
30
|
+
pub fn new(bls: JsBlsAdapter) -> PublicKeysSignaturesValidatorWasm {
|
|
31
|
+
PublicKeysSignaturesValidator::new(BlsAdapter(bls)).into()
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
#[wasm_bindgen(js_name=validate)]
|
|
35
|
+
pub fn validate_public_key_signatures(
|
|
36
|
+
&self,
|
|
37
|
+
raw_state_transition: JsValue,
|
|
38
|
+
raw_public_keys: Vec<JsValue>,
|
|
39
|
+
) -> Result<ValidationResultWasm, JsValue> {
|
|
40
|
+
let state_transition_json = raw_state_transition.with_serde_to_json_value()?;
|
|
41
|
+
|
|
42
|
+
let public_keys = raw_public_keys
|
|
43
|
+
.into_iter()
|
|
44
|
+
.map(|raw_key| {
|
|
45
|
+
let parsed_key: IdentityPublicKey = IdentityPublicKeyWasm::new(raw_key)?.into();
|
|
46
|
+
parsed_key
|
|
47
|
+
.to_raw_json_object(false)
|
|
48
|
+
.map_err(|e| from_dpp_err(e.into()))
|
|
49
|
+
})
|
|
50
|
+
.collect::<Result<Vec<JsonValue>, JsValue>>()?;
|
|
51
|
+
|
|
52
|
+
let result = self
|
|
53
|
+
.0
|
|
54
|
+
.validate_public_key_signatures(&state_transition_json, &public_keys)
|
|
55
|
+
.map_err(|e| from_dpp_err(e.into()))?;
|
|
56
|
+
|
|
57
|
+
Ok(result.map(|_| JsValue::undefined()).into())
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
|
|
2
|
+
|
|
3
|
+
use crate::utils::{to_vec_of_serde_values, ToSerdeJSONExt};
|
|
4
|
+
use crate::validation::ValidationResultWasm;
|
|
5
|
+
use dpp::identity::validation::{
|
|
6
|
+
PublicKeysValidator, TPublicKeysValidator, PUBLIC_KEY_SCHEMA_FOR_TRANSITION,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
use wasm_bindgen::prelude::*;
|
|
10
|
+
|
|
11
|
+
#[wasm_bindgen(js_name = PublicKeysValidator)]
|
|
12
|
+
pub struct PublicKeysValidatorWasm {
|
|
13
|
+
public_key_validator: PublicKeysValidator<BlsAdapter>,
|
|
14
|
+
public_key_in_state_transition_validator: PublicKeysValidator<BlsAdapter>,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
#[wasm_bindgen(js_class = PublicKeysValidator)]
|
|
18
|
+
impl PublicKeysValidatorWasm {
|
|
19
|
+
#[wasm_bindgen(constructor)]
|
|
20
|
+
pub fn new(adapter: JsBlsAdapter) -> Result<PublicKeysValidatorWasm, JsError> {
|
|
21
|
+
Ok(Self {
|
|
22
|
+
public_key_validator: PublicKeysValidator::new(BlsAdapter(JsBlsAdapter::from(
|
|
23
|
+
adapter.clone(),
|
|
24
|
+
)))?,
|
|
25
|
+
public_key_in_state_transition_validator: PublicKeysValidator::new_with_schema(
|
|
26
|
+
PUBLIC_KEY_SCHEMA_FOR_TRANSITION.clone(),
|
|
27
|
+
BlsAdapter(adapter),
|
|
28
|
+
)?,
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
#[wasm_bindgen(js_name=validateKeys)]
|
|
33
|
+
pub fn validate_keys(
|
|
34
|
+
&self,
|
|
35
|
+
public_keys: js_sys::Array,
|
|
36
|
+
) -> Result<ValidationResultWasm, JsValue> {
|
|
37
|
+
let raw_public_keys = to_vec_of_serde_values(public_keys.iter())?;
|
|
38
|
+
|
|
39
|
+
let validation_result = self
|
|
40
|
+
.public_key_validator
|
|
41
|
+
.validate_keys(&raw_public_keys)
|
|
42
|
+
.map_err(|e| JsValue::from(e.to_string()))?;
|
|
43
|
+
|
|
44
|
+
Ok(validation_result.map(|_| JsValue::undefined()).into())
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
#[wasm_bindgen(js_name=validatePublicKeyStructure)]
|
|
48
|
+
pub fn validate_public_key_structure(
|
|
49
|
+
&self,
|
|
50
|
+
public_key: JsValue,
|
|
51
|
+
) -> Result<ValidationResultWasm, JsValue> {
|
|
52
|
+
let pk_serde_json = public_key.with_serde_to_json_value()?;
|
|
53
|
+
|
|
54
|
+
let validation_result = self
|
|
55
|
+
.public_key_validator
|
|
56
|
+
.validate_public_key_structure(&pk_serde_json)
|
|
57
|
+
.map_err(|e| JsValue::from(e.to_string()))?;
|
|
58
|
+
|
|
59
|
+
Ok(validation_result.map(|_| JsValue::undefined()).into())
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#[wasm_bindgen(js_name=validateKeysInStateTransition)]
|
|
63
|
+
pub fn validate_keys_in_state_transition(
|
|
64
|
+
&self,
|
|
65
|
+
public_keys: js_sys::Array,
|
|
66
|
+
) -> Result<ValidationResultWasm, JsValue> {
|
|
67
|
+
let raw_public_keys = to_vec_of_serde_values(public_keys.iter())?;
|
|
68
|
+
|
|
69
|
+
let validation_result = self
|
|
70
|
+
.public_key_in_state_transition_validator
|
|
71
|
+
.validate_keys(&raw_public_keys)
|
|
72
|
+
.map_err(|e| JsValue::from(e.to_string()))?;
|
|
73
|
+
|
|
74
|
+
Ok(validation_result.map(|_| JsValue::undefined()).into())
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -34,7 +34,7 @@ impl PublicKeysValidatorWasm {
|
|
|
34
34
|
&self,
|
|
35
35
|
public_key: JsValue,
|
|
36
36
|
) -> Result<ValidationResultWasm, JsValue> {
|
|
37
|
-
let pk_serde_json = public_key.
|
|
37
|
+
let pk_serde_json = public_key.with_serde_to_json_value()?;
|
|
38
38
|
|
|
39
39
|
self.0
|
|
40
40
|
.validate_public_key_structure(&pk_serde_json)
|
package/src/lib.rs
CHANGED
|
@@ -3,9 +3,6 @@ pub use data_contract::*;
|
|
|
3
3
|
pub use data_contract_factory::*;
|
|
4
4
|
pub use document::*;
|
|
5
5
|
pub use identity::*;
|
|
6
|
-
pub use identity::*;
|
|
7
|
-
pub use identity_facade::*;
|
|
8
|
-
pub use identity_public_key::*;
|
|
9
6
|
pub use metadata::*;
|
|
10
7
|
pub use state_transition::*;
|
|
11
8
|
|
|
@@ -16,14 +13,14 @@ mod document;
|
|
|
16
13
|
pub mod errors;
|
|
17
14
|
mod identifier;
|
|
18
15
|
mod identity;
|
|
19
|
-
mod identity_facade;
|
|
20
|
-
mod identity_public_key;
|
|
21
16
|
mod metadata;
|
|
22
17
|
mod state_repository;
|
|
23
18
|
mod state_transition;
|
|
19
|
+
mod version;
|
|
24
20
|
|
|
25
21
|
mod utils;
|
|
26
22
|
|
|
27
23
|
mod bls_adapter;
|
|
28
24
|
mod buffer;
|
|
29
|
-
|
|
25
|
+
mod lodash;
|
|
26
|
+
mod validation;
|
package/src/lodash.rs
ADDED
package/src/state_repository.rs
CHANGED
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
//! Bindings for state repository -like objects coming from JS.
|
|
2
2
|
|
|
3
|
+
use serde::{Deserialize, Serialize};
|
|
3
4
|
use std::{convert::Infallible, pin::Pin, sync::Mutex};
|
|
4
5
|
|
|
5
6
|
use async_trait::async_trait;
|
|
7
|
+
use dpp::dashcore::consensus;
|
|
6
8
|
use dpp::{
|
|
7
9
|
dashcore::InstantLock,
|
|
8
10
|
data_contract::DataContract,
|
|
9
11
|
document::Document,
|
|
10
12
|
prelude::{Identifier, Identity},
|
|
11
|
-
state_repository::
|
|
13
|
+
state_repository::{
|
|
14
|
+
FetchTransactionResponse as FetchTransactionResponseDPP, StateRepositoryLike,
|
|
15
|
+
},
|
|
12
16
|
state_transition::state_transition_execution_context::StateTransitionExecutionContext,
|
|
13
17
|
};
|
|
14
18
|
use wasm_bindgen::prelude::*;
|
|
15
19
|
|
|
16
|
-
use crate::
|
|
20
|
+
use crate::buffer::Buffer;
|
|
21
|
+
use crate::{
|
|
22
|
+
identifier::IdentifierWrapper, DataContractWasm, IdentityWasm,
|
|
23
|
+
StateTransitionExecutionContextWasm,
|
|
24
|
+
};
|
|
17
25
|
|
|
18
26
|
#[wasm_bindgen]
|
|
19
27
|
extern "C" {
|
|
@@ -33,6 +41,67 @@ extern "C" {
|
|
|
33
41
|
execution_context: StateTransitionExecutionContextWasm,
|
|
34
42
|
) -> JsValue;
|
|
35
43
|
|
|
44
|
+
#[wasm_bindgen(structural, method, js_name=fetchIdentity)]
|
|
45
|
+
pub fn fetch_identity(
|
|
46
|
+
this: &ExternalStateRepositoryLike,
|
|
47
|
+
id: IdentifierWrapper,
|
|
48
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
49
|
+
) -> Option<IdentityWasm>;
|
|
50
|
+
|
|
51
|
+
#[wasm_bindgen(structural, method, js_name=fetchLatestPlatformCoreChainLockedHeight)]
|
|
52
|
+
pub fn fetch_latest_platform_core_chain_locked_height(
|
|
53
|
+
this: &ExternalStateRepositoryLike,
|
|
54
|
+
) -> Option<u32>;
|
|
55
|
+
|
|
56
|
+
#[wasm_bindgen(structural, method, js_name=fetchTransaction)]
|
|
57
|
+
pub fn fetch_transaction(
|
|
58
|
+
this: &ExternalStateRepositoryLike,
|
|
59
|
+
id: JsValue,
|
|
60
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
61
|
+
) -> JsValue;
|
|
62
|
+
|
|
63
|
+
#[wasm_bindgen(structural, method, js_name=isAssetLockTransactionOutPointAlreadyUsed)]
|
|
64
|
+
pub fn is_asset_lock_transaction_out_point_already_used(
|
|
65
|
+
this: &ExternalStateRepositoryLike,
|
|
66
|
+
out_point_buffer: Buffer,
|
|
67
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
68
|
+
) -> bool;
|
|
69
|
+
|
|
70
|
+
#[wasm_bindgen(structural, method, js_name=verifyInstantLock)]
|
|
71
|
+
pub fn verify_instant_lock(
|
|
72
|
+
this: &ExternalStateRepositoryLike,
|
|
73
|
+
instant_lock: Vec<u8>,
|
|
74
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
75
|
+
) -> bool;
|
|
76
|
+
|
|
77
|
+
#[wasm_bindgen(structural, method, js_name=createIdentity)]
|
|
78
|
+
pub fn create_identity(
|
|
79
|
+
this: &ExternalStateRepositoryLike,
|
|
80
|
+
identity: IdentityWasm,
|
|
81
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
#[wasm_bindgen(structural, method, js_name=updateIdentity)]
|
|
85
|
+
pub fn update_identity(
|
|
86
|
+
this: &ExternalStateRepositoryLike,
|
|
87
|
+
identity: IdentityWasm,
|
|
88
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
#[wasm_bindgen(structural, method, js_name=storeIdentityPublicKeyHashes)]
|
|
92
|
+
pub fn store_identity_public_key_hashes(
|
|
93
|
+
this: &ExternalStateRepositoryLike,
|
|
94
|
+
identity_id: IdentifierWrapper,
|
|
95
|
+
public_key_hashes: Vec<Buffer>,
|
|
96
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
#[wasm_bindgen(structural, method, js_name=markAssetLockTransactionOutPointAsUsed)]
|
|
100
|
+
pub fn mark_asset_lock_transaction_out_point_as_used(
|
|
101
|
+
this: &ExternalStateRepositoryLike,
|
|
102
|
+
out_point_buffer: Buffer,
|
|
103
|
+
);
|
|
104
|
+
|
|
36
105
|
// TODO add missing declarations
|
|
37
106
|
}
|
|
38
107
|
|
|
@@ -49,10 +118,40 @@ impl ExternalStateRepositoryLikeWrapper {
|
|
|
49
118
|
}
|
|
50
119
|
}
|
|
51
120
|
|
|
121
|
+
#[derive(Clone, Serialize, Deserialize)]
|
|
122
|
+
pub struct FetchTransactionResponse {
|
|
123
|
+
pub height: Option<u32>,
|
|
124
|
+
pub data: Option<Vec<u8>>,
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
impl From<JsValue> for FetchTransactionResponse {
|
|
128
|
+
fn from(v: JsValue) -> Self {
|
|
129
|
+
if v.is_falsy() {
|
|
130
|
+
FetchTransactionResponse {
|
|
131
|
+
height: Some(0),
|
|
132
|
+
data: None,
|
|
133
|
+
}
|
|
134
|
+
} else {
|
|
135
|
+
serde_wasm_bindgen::from_value(v).unwrap()
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
impl From<FetchTransactionResponse> for FetchTransactionResponseDPP {
|
|
141
|
+
fn from(v: FetchTransactionResponse) -> Self {
|
|
142
|
+
FetchTransactionResponseDPP {
|
|
143
|
+
data: v.data,
|
|
144
|
+
height: v.height,
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
52
149
|
#[async_trait]
|
|
53
150
|
impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
|
|
54
151
|
type ConversionError = Infallible;
|
|
55
152
|
type FetchDataContract = DataContractWasm;
|
|
153
|
+
type FetchIdentity = IdentityWasm;
|
|
154
|
+
type FetchTransaction = FetchTransactionResponse;
|
|
56
155
|
|
|
57
156
|
async fn fetch_data_contract(
|
|
58
157
|
&self,
|
|
@@ -121,35 +220,52 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
|
|
|
121
220
|
todo!()
|
|
122
221
|
}
|
|
123
222
|
|
|
124
|
-
async fn fetch_transaction
|
|
223
|
+
async fn fetch_transaction(
|
|
125
224
|
&self,
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
) -> anyhow::Result<
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
225
|
+
id: &str,
|
|
226
|
+
execution_context: &StateTransitionExecutionContext,
|
|
227
|
+
) -> anyhow::Result<Self::FetchTransaction> {
|
|
228
|
+
let response = self
|
|
229
|
+
.0
|
|
230
|
+
.lock()
|
|
231
|
+
.expect("unexpected concurrency issue!")
|
|
232
|
+
.fetch_transaction(JsValue::from_str(id), execution_context.into());
|
|
233
|
+
Ok(FetchTransactionResponse::from(response))
|
|
133
234
|
}
|
|
134
235
|
|
|
135
|
-
async fn fetch_identity
|
|
236
|
+
async fn fetch_identity(
|
|
136
237
|
&self,
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
) -> anyhow::Result<Option<
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
238
|
+
id: &Identifier,
|
|
239
|
+
execution_context: &StateTransitionExecutionContext,
|
|
240
|
+
) -> anyhow::Result<Option<Self::FetchIdentity>> {
|
|
241
|
+
Ok(self
|
|
242
|
+
.0
|
|
243
|
+
.lock()
|
|
244
|
+
.expect("unexpected concurrency issue!")
|
|
245
|
+
.fetch_identity(id.clone().into(), execution_context.clone().into())
|
|
246
|
+
.map(Into::into))
|
|
144
247
|
}
|
|
145
248
|
|
|
146
249
|
async fn store_identity_public_key_hashes(
|
|
147
250
|
&self,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
251
|
+
identity_id: &Identifier,
|
|
252
|
+
public_key_hashes: Vec<Vec<u8>>,
|
|
253
|
+
execution_context: &StateTransitionExecutionContext,
|
|
151
254
|
) -> anyhow::Result<()> {
|
|
152
|
-
|
|
255
|
+
let hashes = public_key_hashes
|
|
256
|
+
.iter()
|
|
257
|
+
.map(|hash| Buffer::from_bytes(hash))
|
|
258
|
+
.collect();
|
|
259
|
+
|
|
260
|
+
Ok(self
|
|
261
|
+
.0
|
|
262
|
+
.lock()
|
|
263
|
+
.expect("unexpected concurrency issue!")
|
|
264
|
+
.store_identity_public_key_hashes(
|
|
265
|
+
identity_id.clone().into(),
|
|
266
|
+
hashes,
|
|
267
|
+
execution_context.clone().into(),
|
|
268
|
+
))
|
|
153
269
|
}
|
|
154
270
|
|
|
155
271
|
async fn fetch_identity_by_public_key_hashes<T>(
|
|
@@ -169,27 +285,55 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
|
|
|
169
285
|
todo!()
|
|
170
286
|
}
|
|
171
287
|
|
|
288
|
+
async fn fetch_latest_platform_core_chain_locked_height(&self) -> anyhow::Result<Option<u32>> {
|
|
289
|
+
Ok(self
|
|
290
|
+
.0
|
|
291
|
+
.lock()
|
|
292
|
+
.expect("unexpected concurrency issue!")
|
|
293
|
+
.fetch_latest_platform_core_chain_locked_height()
|
|
294
|
+
.map(Into::into))
|
|
295
|
+
}
|
|
296
|
+
|
|
172
297
|
async fn verify_instant_lock(
|
|
173
298
|
&self,
|
|
174
|
-
|
|
175
|
-
|
|
299
|
+
instant_lock: &InstantLock,
|
|
300
|
+
execution_context: &StateTransitionExecutionContext,
|
|
176
301
|
) -> anyhow::Result<bool> {
|
|
177
|
-
|
|
302
|
+
let raw_instant_lock = consensus::serialize(instant_lock);
|
|
303
|
+
|
|
304
|
+
let verified = self
|
|
305
|
+
.0
|
|
306
|
+
.lock()
|
|
307
|
+
.expect("unexpected concurrency issue!")
|
|
308
|
+
.verify_instant_lock(raw_instant_lock, execution_context.clone().into());
|
|
309
|
+
|
|
310
|
+
Ok(verified)
|
|
178
311
|
}
|
|
179
312
|
|
|
180
313
|
async fn is_asset_lock_transaction_out_point_already_used(
|
|
181
314
|
&self,
|
|
182
|
-
|
|
183
|
-
|
|
315
|
+
out_point_buffer: &[u8],
|
|
316
|
+
execution_context: &StateTransitionExecutionContext,
|
|
184
317
|
) -> anyhow::Result<bool> {
|
|
185
|
-
|
|
318
|
+
Ok(self
|
|
319
|
+
.0
|
|
320
|
+
.lock()
|
|
321
|
+
.expect("unexpected concurrency issue!")
|
|
322
|
+
.is_asset_lock_transaction_out_point_already_used(
|
|
323
|
+
Buffer::from_bytes(out_point_buffer),
|
|
324
|
+
execution_context.clone().into(),
|
|
325
|
+
))
|
|
186
326
|
}
|
|
187
327
|
|
|
188
328
|
async fn mark_asset_lock_transaction_out_point_as_used(
|
|
189
329
|
&self,
|
|
190
|
-
|
|
330
|
+
out_point_buffer: &[u8],
|
|
191
331
|
) -> anyhow::Result<()> {
|
|
192
|
-
|
|
332
|
+
Ok(self
|
|
333
|
+
.0
|
|
334
|
+
.lock()
|
|
335
|
+
.expect("unexpected concurrency issue!")
|
|
336
|
+
.mark_asset_lock_transaction_out_point_as_used(Buffer::from_bytes(out_point_buffer)))
|
|
193
337
|
}
|
|
194
338
|
|
|
195
339
|
async fn fetch_sml_store<T>(&self) -> anyhow::Result<T>
|
|
@@ -201,18 +345,26 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
|
|
|
201
345
|
|
|
202
346
|
async fn create_identity(
|
|
203
347
|
&self,
|
|
204
|
-
|
|
205
|
-
|
|
348
|
+
identity: &Identity,
|
|
349
|
+
execution_context: &StateTransitionExecutionContext,
|
|
206
350
|
) -> anyhow::Result<()> {
|
|
207
|
-
|
|
351
|
+
Ok(self
|
|
352
|
+
.0
|
|
353
|
+
.lock()
|
|
354
|
+
.expect("unexpected concurrency issue!")
|
|
355
|
+
.create_identity(identity.clone().into(), execution_context.clone().into()))
|
|
208
356
|
}
|
|
209
357
|
|
|
210
358
|
async fn update_identity(
|
|
211
359
|
&self,
|
|
212
|
-
|
|
213
|
-
|
|
360
|
+
identity: &Identity,
|
|
361
|
+
execution_context: &StateTransitionExecutionContext,
|
|
214
362
|
) -> anyhow::Result<()> {
|
|
215
|
-
|
|
363
|
+
Ok(self
|
|
364
|
+
.0
|
|
365
|
+
.lock()
|
|
366
|
+
.expect("unexpected concurrency issue!")
|
|
367
|
+
.update_identity(identity.clone().into(), execution_context.clone().into()))
|
|
216
368
|
}
|
|
217
369
|
|
|
218
370
|
async fn fetch_latest_withdrawal_transaction_index(&self) -> anyhow::Result<u64> {
|
|
@@ -22,6 +22,18 @@ impl<'a> From<&'a StateTransitionExecutionContextWasm> for StateTransitionExecut
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
impl<'a> From<&'a StateTransitionExecutionContextWasm> for &'a StateTransitionExecutionContext {
|
|
26
|
+
fn from(wa: &'a StateTransitionExecutionContextWasm) -> Self {
|
|
27
|
+
&wa.0
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
impl<'a> From<&'a StateTransitionExecutionContext> for StateTransitionExecutionContextWasm {
|
|
32
|
+
fn from(rs: &'a StateTransitionExecutionContext) -> Self {
|
|
33
|
+
Self(rs.clone())
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
25
37
|
#[wasm_bindgen(js_class=StateTransitionExecutionContext)]
|
|
26
38
|
impl StateTransitionExecutionContextWasm {
|
|
27
39
|
#[wasm_bindgen(constructor)]
|