@dashevo/wasm-dpp 0.24.0-dev.12 → 0.24.0-dev.14
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/.mocharc.yml +1 -1
- package/Cargo.toml +5 -2
- package/README.md +5 -1
- package/dist/index.js +1 -1
- package/dist/index.js.LICENSE.txt +9 -0
- package/dist/wasm/wasm_dpp.d.ts +3397 -1237
- package/karma.conf.js +5 -0
- package/lib/identifier/patchIdentifier.ts +5 -4
- package/lib/index.ts +1 -1
- package/lib/test/bootstrap.js +5 -0
- package/lib/test/fixtures/getDataContractFixture.js +267 -0
- package/lib/test/fixtures/getDocumentsFixture.js +43 -0
- package/lib/test/mocks/createStateRepositoryMock.js +64 -0
- package/lib/test/mocks/getBlsAdapterMock.js +51 -0
- package/package.json +11 -8
- package/src/bls_adapter.rs +17 -1
- package/src/buffer.rs +3 -0
- package/src/dash_platform_protocol.rs +107 -10
- package/src/data_contract/data_contract.rs +59 -10
- package/src/data_contract/data_contract_facade.rs +128 -0
- package/src/data_contract/errors/invalid_data_contract.rs +16 -16
- package/src/data_contract/errors/invalid_document_type.rs +8 -8
- package/src/data_contract/errors/mod.rs +10 -16
- package/src/data_contract/index.rs +56 -1
- package/src/data_contract/mod.rs +4 -0
- 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 +41 -10
- package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +35 -4
- package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +1 -1
- package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +20 -7
- package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +47 -11
- package/src/data_contract_factory/data_contract_factory.rs +19 -17
- package/src/data_trigger/data_trigger_execution_context.rs +95 -0
- package/src/data_trigger/data_trigger_execution_result.rs +48 -0
- package/src/data_trigger/execute_data_triggers_factory.rs +60 -0
- package/src/data_trigger/get_data_triggers_factory.rs +65 -0
- package/src/data_trigger/mod.rs +121 -0
- package/src/document/document_facade.rs +125 -0
- 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 +257 -0
- package/src/document/fetch_and_validate_data_contract.rs +77 -0
- package/src/document/generate_document_id.rs +17 -0
- package/src/document/mod.rs +311 -37
- package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +22 -0
- package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +253 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +60 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +263 -0
- package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +302 -3
- package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_id.rs +40 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_indices.rs +50 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/mod.rs +8 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs +34 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/validate_partial_compound_indices.rs +39 -0
- package/src/document/state_transition/document_batch_transition/validation/mod.rs +2 -0
- package/src/document/state_transition/document_batch_transition/validation/state/fetch_documents.rs +43 -0
- package/src/document/state_transition/document_batch_transition/validation/state/mod.rs +3 -0
- package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_batch_transitions_state.rs +27 -0
- package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_uniqueness_by_indices.rs +47 -0
- package/src/document/validator.rs +52 -0
- package/src/errors/compatible_protocol_version_is_not_defined_error.rs +24 -0
- 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_type_error.rs +15 -1
- package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +16 -2
- 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 +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_credit_withdrawal_transition_core_fee_error.rs +2 -2
- package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +29 -0
- package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +4 -3
- 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/missing_public_key_error.rs +4 -3
- package/src/errors/consensus/basic/identity/mod.rs +2 -0
- package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -1
- package/src/errors/consensus/basic/json_schema_error.rs +8 -2
- package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -1
- package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +9 -9
- package/src/errors/consensus/state/document/invalid_document_revision_error.rs +4 -4
- package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +35 -0
- package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +34 -0
- package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +10 -7
- package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +2 -3
- package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +7 -3
- package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +2 -3
- package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +7 -4
- package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +2 -1
- package/src/errors/consensus/state/identity/mod.rs +4 -0
- package/src/errors/consensus_error.rs +218 -268
- package/src/errors/data_contract_not_present_error.rs +23 -0
- package/src/errors/dpp_error.rs +17 -0
- package/src/errors/from.rs +22 -0
- package/src/errors/js_conversion.rs +52 -5
- package/src/errors/mod.rs +6 -0
- package/src/errors/protocol_error.rs +14 -3
- package/src/identifier/errors.rs +30 -0
- package/src/identifier/mod.rs +95 -11
- 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/invalid_identity_error.rs +32 -0
- package/src/identity/errors/mod.rs +9 -0
- package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
- package/src/identity/factory_utils.rs +87 -0
- package/src/identity/identity_facade.rs +194 -20
- package/src/identity/identity_factory.rs +209 -0
- package/src/identity/identity_public_key/mod.rs +51 -40
- package/src/identity/mod.rs +31 -17
- 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 +337 -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 +45 -0
- package/src/identity/state_transition/identity_public_key_transitions.rs +207 -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 +278 -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/identity_update_transition/apply_identity_update_transition.rs +24 -0
- package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +55 -0
- package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +448 -0
- package/src/identity/state_transition/identity_update_transition/identity_update_transition_basic_validator.rs +94 -0
- package/src/identity/state_transition/identity_update_transition/identity_update_transition_state_validator.rs +53 -0
- package/src/identity/state_transition/identity_update_transition/mod.rs +9 -0
- package/src/identity/state_transition/identity_update_transition/to_object.rs +66 -0
- package/src/identity/state_transition/mod.rs +12 -0
- package/src/identity/state_transition/validate_public_key_signatures.rs +61 -0
- package/src/identity/validation/identity_validator.rs +50 -0
- package/src/identity/validation/mod.rs +2 -0
- package/src/identity/validation/public_keys_validator.rs +14 -13
- package/src/identity_public_key/public_keys_validator.rs +44 -0
- package/src/lib.rs +6 -0
- package/src/lodash.rs +7 -0
- package/src/metadata.rs +54 -10
- package/src/state_repository.rs +598 -101
- package/src/state_transition/conversion.rs +104 -0
- package/src/state_transition/errors/invalid_state_transition_error.rs +32 -0
- package/src/state_transition/errors/mod.rs +1 -0
- package/src/state_transition/mod.rs +46 -0
- package/src/state_transition/state_transition_facade.rs +263 -0
- package/src/state_transition/state_transition_factory.rs +216 -0
- package/src/state_transition/validation/mod.rs +1 -0
- package/src/state_transition/validation/validate_state_transition_key_signature.rs +62 -0
- package/src/utils.rs +210 -8
- package/src/validation/json_schema_validator.rs +41 -0
- package/src/validation/mod.rs +2 -0
- package/src/validation/validation_result.rs +29 -5
- package/src/version/mod.rs +2 -0
- package/src/version/protocol_version.rs +103 -0
- package/test/integration/dataContract/DataContractFacade.spec.js +46 -30
- package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +45 -127
- package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +91 -139
- package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +577 -503
- package/test/integration/document/Document.spec.js +55 -29
- package/test/integration/document/DocumentFacade.spec.js +51 -64
- package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +38 -16
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +341 -396
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +116 -218
- package/test/integration/document/validation/validateDocumentFactory.spec.js +123 -171
- package/test/integration/identity/IdentityFacade.spec.js +52 -27
- package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +185 -164
- package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +84 -114
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +120 -137
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +106 -91
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +50 -16
- package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +78 -86
- package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +74 -30
- package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -147
- package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +65 -77
- package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +60 -23
- package/test/integration/identity/validation/validateIdentityFactory.spec.js +46 -114
- package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +9 -3
- package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +12 -8
- package/test/integration/stateTransition/StateTransitionFacade.spec.js +95 -233
- package/test/integration/stateTransition/calculateStateTransitionFeeFromOperationsFactory.spec.js +53 -0
- package/test/unit/Identifier.spec.js +36 -36
- package/test/unit/Metadata.spec.js +17 -3
- package/test/unit/dataContract/DataContract.spec.js +9 -4
- package/test/unit/dataContract/createDataContract.spec.js +0 -1
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +1 -1
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +2 -2
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +3 -3
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +1 -1
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +25 -31
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +3 -3
- package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +2 -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 +153 -153
- package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +59 -14
- package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +131 -62
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +144 -56
- package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +38 -8
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +11 -7
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +29 -18
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +38 -29
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +53 -91
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +357 -493
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +133 -72
- package/test/unit/identity/Identity.spec.js +26 -9
- package/test/unit/identity/IdentityFactory.spec.js +81 -89
- package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +73 -30
- package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +38 -38
- package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +34 -25
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +85 -50
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +44 -22
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +58 -103
- 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/test/unit/stateTransition/StateTransitionFactory.spec.js +49 -101
- package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +23 -25
- package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +73 -46
- package/test/unit/version/validateProtocolVersionFactory.spec.js +45 -27
- package/wasm/package.json +5 -0
- package/wasm/wasm_dpp.d.ts +3397 -1237
- package/wasm/wasm_dpp.js +7158 -1384
- package/wasm/wasm_dpp_bg.js +1 -1
- package/wasm/wasm_dpp_bg.wasm +0 -0
- package/wasm/wasm_dpp_bg.wasm.d.ts +777 -389
- package/webpack.config.js +9 -0
- package/src/document/state_transition/document_batch_transition/document_transition/document_update_transition.rs +0 -22
- package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +0 -135
- package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +0 -54
package/src/state_repository.rs
CHANGED
|
@@ -1,73 +1,301 @@
|
|
|
1
1
|
//! Bindings for state repository -like objects coming from JS.
|
|
2
2
|
|
|
3
|
-
use
|
|
3
|
+
use serde::{Deserialize, Serialize};
|
|
4
|
+
use std::convert::Infallible;
|
|
5
|
+
use std::sync::Arc;
|
|
4
6
|
|
|
7
|
+
use anyhow::{anyhow, bail};
|
|
5
8
|
use async_trait::async_trait;
|
|
9
|
+
use dpp::dashcore::consensus;
|
|
10
|
+
use dpp::identity::{IdentityPublicKey, KeyID};
|
|
11
|
+
use dpp::prelude::{Revision, TimestampMillis};
|
|
6
12
|
use dpp::{
|
|
7
13
|
dashcore::InstantLock,
|
|
8
14
|
data_contract::DataContract,
|
|
9
15
|
document::Document,
|
|
10
16
|
prelude::{Identifier, Identity},
|
|
11
|
-
state_repository::
|
|
17
|
+
state_repository::{
|
|
18
|
+
FetchTransactionResponse as FetchTransactionResponseDPP, StateRepositoryLike,
|
|
19
|
+
},
|
|
12
20
|
state_transition::state_transition_execution_context::StateTransitionExecutionContext,
|
|
13
21
|
};
|
|
22
|
+
use js_sys::Uint8Array;
|
|
23
|
+
use js_sys::{Array, Number};
|
|
24
|
+
use wasm_bindgen::__rt::Ref;
|
|
25
|
+
|
|
14
26
|
use wasm_bindgen::prelude::*;
|
|
15
27
|
|
|
16
|
-
use crate::
|
|
28
|
+
use crate::buffer::Buffer;
|
|
29
|
+
use crate::errors::from_js_error;
|
|
30
|
+
use crate::utils::generic_of_js_val;
|
|
31
|
+
use crate::IdentityPublicKeyWasm;
|
|
32
|
+
use crate::{
|
|
33
|
+
identifier::IdentifierWrapper, utils::IntoWasm, DataContractWasm, DocumentWasm, IdentityWasm,
|
|
34
|
+
StateTransitionExecutionContextWasm,
|
|
35
|
+
};
|
|
17
36
|
|
|
18
37
|
#[wasm_bindgen]
|
|
19
38
|
extern "C" {
|
|
39
|
+
#[derive(Clone)]
|
|
20
40
|
pub type ExternalStateRepositoryLike;
|
|
21
41
|
|
|
22
|
-
#[wasm_bindgen(structural, method, js_name=fetchDataContract)]
|
|
23
|
-
pub fn fetch_data_contract(
|
|
42
|
+
#[wasm_bindgen(catch, structural, method, js_name=fetchDataContract)]
|
|
43
|
+
pub async fn fetch_data_contract(
|
|
24
44
|
this: &ExternalStateRepositoryLike,
|
|
25
45
|
data_contract_id: IdentifierWrapper,
|
|
26
46
|
execution_context: StateTransitionExecutionContextWasm,
|
|
27
|
-
) ->
|
|
47
|
+
) -> Result<JsValue, JsValue>;
|
|
48
|
+
|
|
49
|
+
#[wasm_bindgen(catch, structural, method, js_name=storeDataContract)]
|
|
50
|
+
pub async fn store_data_contract(
|
|
51
|
+
this: &ExternalStateRepositoryLike,
|
|
52
|
+
data_contract: DataContractWasm,
|
|
53
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
54
|
+
) -> Result<(), JsValue>;
|
|
55
|
+
|
|
56
|
+
#[wasm_bindgen(catch, structural, method, js_name=createDocument)]
|
|
57
|
+
pub async fn create_document(
|
|
58
|
+
this: &ExternalStateRepositoryLike,
|
|
59
|
+
document: DocumentWasm,
|
|
60
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
61
|
+
) -> Result<(), JsValue>;
|
|
62
|
+
|
|
63
|
+
#[wasm_bindgen(catch, structural, method, js_name=updateDocument)]
|
|
64
|
+
pub async fn update_document(
|
|
65
|
+
this: &ExternalStateRepositoryLike,
|
|
66
|
+
document: DocumentWasm,
|
|
67
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
68
|
+
) -> Result<(), JsValue>;
|
|
28
69
|
|
|
29
|
-
#[wasm_bindgen(structural, method, js_name=
|
|
30
|
-
pub fn
|
|
70
|
+
#[wasm_bindgen(catch, structural, method, js_name=removeDocument)]
|
|
71
|
+
pub async fn remove_document(
|
|
31
72
|
this: &ExternalStateRepositoryLike,
|
|
32
73
|
data_contract: DataContractWasm,
|
|
74
|
+
data_contract_type: String,
|
|
75
|
+
document_id: IdentifierWrapper,
|
|
76
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
77
|
+
) -> Result<(), JsValue>;
|
|
78
|
+
|
|
79
|
+
#[wasm_bindgen(catch, structural, method, js_name=fetchDocuments)]
|
|
80
|
+
pub async fn fetch_documents(
|
|
81
|
+
this: &ExternalStateRepositoryLike,
|
|
82
|
+
data_contract_id: IdentifierWrapper,
|
|
83
|
+
data_contract_type: String,
|
|
84
|
+
where_query: JsValue,
|
|
85
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
86
|
+
) -> Result<JsValue, JsValue>;
|
|
87
|
+
|
|
88
|
+
#[wasm_bindgen(catch, structural, method, js_name=fetchIdentity)]
|
|
89
|
+
pub async fn fetch_identity(
|
|
90
|
+
this: &ExternalStateRepositoryLike,
|
|
91
|
+
id: IdentifierWrapper,
|
|
92
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
93
|
+
) -> Result<JsValue, JsValue>;
|
|
94
|
+
|
|
95
|
+
#[wasm_bindgen(catch, structural, method, js_name=createIdentity)]
|
|
96
|
+
pub async fn create_identity(
|
|
97
|
+
this: &ExternalStateRepositoryLike,
|
|
98
|
+
identity: IdentityWasm,
|
|
99
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
100
|
+
) -> Result<(), JsValue>;
|
|
101
|
+
|
|
102
|
+
#[wasm_bindgen(catch, structural, method, js_name=addKeysToIdentity)]
|
|
103
|
+
pub async fn add_keys_to_identity(
|
|
104
|
+
this: &ExternalStateRepositoryLike,
|
|
105
|
+
identity_id: IdentifierWrapper,
|
|
106
|
+
keys: js_sys::Array,
|
|
107
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
108
|
+
) -> Result<(), JsValue>;
|
|
109
|
+
|
|
110
|
+
#[wasm_bindgen(catch, structural, method, js_name=disableIdentityKeys)]
|
|
111
|
+
pub async fn disable_identity_keys(
|
|
112
|
+
this: &ExternalStateRepositoryLike,
|
|
113
|
+
identity_id: IdentifierWrapper,
|
|
114
|
+
keys: js_sys::Array,
|
|
115
|
+
disable_at: Number,
|
|
116
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
117
|
+
) -> Result<(), JsValue>;
|
|
118
|
+
|
|
119
|
+
#[wasm_bindgen(catch, structural, method, js_name=updateIdentityRevision)]
|
|
120
|
+
pub async fn update_identity_revision(
|
|
121
|
+
this: &ExternalStateRepositoryLike,
|
|
122
|
+
identity_id: IdentifierWrapper,
|
|
123
|
+
revision: Number,
|
|
124
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
125
|
+
) -> Result<(), JsValue>;
|
|
126
|
+
|
|
127
|
+
#[wasm_bindgen(catch, structural, method, js_name=fetchIdentityBalance)]
|
|
128
|
+
pub async fn fetch_identity_balance(
|
|
129
|
+
this: &ExternalStateRepositoryLike,
|
|
130
|
+
identity_id: IdentifierWrapper,
|
|
131
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
132
|
+
) -> Result<JsValue, JsValue>;
|
|
133
|
+
|
|
134
|
+
#[wasm_bindgen(catch, structural, method, js_name=fetchIdentityBalanceWithDebt)]
|
|
135
|
+
pub async fn fetch_identity_balance_with_debt(
|
|
136
|
+
this: &ExternalStateRepositoryLike,
|
|
137
|
+
identity_id: IdentifierWrapper,
|
|
138
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
139
|
+
) -> Result<JsValue, JsValue>;
|
|
140
|
+
|
|
141
|
+
#[wasm_bindgen(catch, structural, method, js_name=addToIdentityBalance)]
|
|
142
|
+
pub async fn add_to_identity_balance(
|
|
143
|
+
this: &ExternalStateRepositoryLike,
|
|
144
|
+
identity_id: IdentifierWrapper,
|
|
145
|
+
amount: Number,
|
|
146
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
147
|
+
) -> Result<(), JsValue>;
|
|
148
|
+
|
|
149
|
+
#[wasm_bindgen(catch, structural, method, js_name=removeFromIdentityBalance)]
|
|
150
|
+
pub async fn remove_from_identity_balance(
|
|
151
|
+
this: &ExternalStateRepositoryLike,
|
|
152
|
+
identity_id: IdentifierWrapper,
|
|
153
|
+
amount: Number,
|
|
154
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
155
|
+
) -> Result<(), JsValue>;
|
|
156
|
+
|
|
157
|
+
#[wasm_bindgen(catch, structural, method, js_name=addToSystemCredits)]
|
|
158
|
+
pub async fn add_to_system_credits(
|
|
159
|
+
this: &ExternalStateRepositoryLike,
|
|
160
|
+
amount: Number,
|
|
161
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
162
|
+
) -> Result<(), JsValue>;
|
|
163
|
+
|
|
164
|
+
#[wasm_bindgen(catch, structural, method, js_name=removeFromSystemCredits)]
|
|
165
|
+
pub async fn remove_from_system_credits(
|
|
166
|
+
this: &ExternalStateRepositoryLike,
|
|
167
|
+
amount: Number,
|
|
168
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
169
|
+
) -> Result<JsValue, JsValue>;
|
|
170
|
+
|
|
171
|
+
#[wasm_bindgen(catch, structural, method, js_name=fetchLatestPlatformCoreChainLockedHeight)]
|
|
172
|
+
pub async fn fetch_latest_platform_core_chain_locked_height(
|
|
173
|
+
this: &ExternalStateRepositoryLike,
|
|
174
|
+
) -> Result<JsValue, JsValue>;
|
|
175
|
+
|
|
176
|
+
#[wasm_bindgen(catch, structural, method, js_name=fetchLatestPlatformBlockHeight)]
|
|
177
|
+
pub async fn fetch_latest_platform_block_height(
|
|
178
|
+
this: &ExternalStateRepositoryLike,
|
|
179
|
+
) -> Result<JsValue, JsValue>;
|
|
180
|
+
|
|
181
|
+
#[wasm_bindgen(catch, structural, method, js_name=fetchTransaction)]
|
|
182
|
+
pub async fn fetch_transaction(
|
|
183
|
+
this: &ExternalStateRepositoryLike,
|
|
184
|
+
id: JsValue,
|
|
185
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
186
|
+
) -> Result<JsValue, JsValue>;
|
|
187
|
+
|
|
188
|
+
#[wasm_bindgen(catch, structural, method, js_name=isAssetLockTransactionOutPointAlreadyUsed)]
|
|
189
|
+
pub async fn is_asset_lock_transaction_out_point_already_used(
|
|
190
|
+
this: &ExternalStateRepositoryLike,
|
|
191
|
+
out_point_buffer: Buffer,
|
|
192
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
193
|
+
) -> Result<JsValue, JsValue>;
|
|
194
|
+
|
|
195
|
+
#[wasm_bindgen(catch, structural, method, js_name=verifyInstantLock)]
|
|
196
|
+
pub async fn verify_instant_lock(
|
|
197
|
+
this: &ExternalStateRepositoryLike,
|
|
198
|
+
instant_lock: Vec<u8>,
|
|
199
|
+
execution_context: StateTransitionExecutionContextWasm,
|
|
200
|
+
) -> Result<JsValue, JsValue>;
|
|
201
|
+
|
|
202
|
+
#[wasm_bindgen(catch, structural, method, js_name=markAssetLockTransactionOutPointAsUsed)]
|
|
203
|
+
pub async fn mark_asset_lock_transaction_out_point_as_used(
|
|
204
|
+
this: &ExternalStateRepositoryLike,
|
|
205
|
+
out_point_buffer: Buffer,
|
|
33
206
|
execution_context: StateTransitionExecutionContextWasm,
|
|
34
|
-
) -> JsValue
|
|
207
|
+
) -> Result<(), JsValue>;
|
|
208
|
+
|
|
209
|
+
#[wasm_bindgen(catch, structural, method, js_name=fetchLatestPlatformBlockHeader)]
|
|
210
|
+
pub async fn fetch_latest_platform_block_header(
|
|
211
|
+
this: &ExternalStateRepositoryLike,
|
|
212
|
+
) -> Result<JsValue, JsValue>;
|
|
213
|
+
|
|
214
|
+
#[wasm_bindgen(catch, structural, method, js_name=fetchLatestPlatformBlockTime)]
|
|
215
|
+
pub async fn fetch_latest_platform_block_time(
|
|
216
|
+
this: &ExternalStateRepositoryLike,
|
|
217
|
+
) -> Result<JsValue, JsValue>;
|
|
35
218
|
|
|
36
219
|
// TODO add missing declarations
|
|
37
220
|
}
|
|
38
221
|
|
|
39
222
|
/// Wraps external duck-typed thing into pinned box with mutex to ensure it'll stay at the same
|
|
40
223
|
/// place in memory and will have synchronized access.
|
|
41
|
-
|
|
224
|
+
#[derive(Clone)]
|
|
225
|
+
pub(crate) struct ExternalStateRepositoryLikeWrapper(Arc<ExternalStateRepositoryLike>);
|
|
42
226
|
|
|
43
227
|
unsafe impl Send for ExternalStateRepositoryLikeWrapper {}
|
|
44
228
|
unsafe impl Sync for ExternalStateRepositoryLikeWrapper {}
|
|
45
229
|
|
|
46
230
|
impl ExternalStateRepositoryLikeWrapper {
|
|
47
231
|
pub(crate) fn new(state_repository: ExternalStateRepositoryLike) -> Self {
|
|
48
|
-
ExternalStateRepositoryLikeWrapper(
|
|
232
|
+
ExternalStateRepositoryLikeWrapper(Arc::new(state_repository))
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
pub(crate) fn new_with_arc(state_repository: Arc<ExternalStateRepositoryLike>) -> Self {
|
|
236
|
+
ExternalStateRepositoryLikeWrapper(state_repository)
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
#[derive(Clone, Serialize, Deserialize)]
|
|
241
|
+
pub struct FetchTransactionResponse {
|
|
242
|
+
pub height: Option<u32>,
|
|
243
|
+
pub data: Option<Vec<u8>>,
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
impl From<JsValue> for FetchTransactionResponse {
|
|
247
|
+
fn from(v: JsValue) -> Self {
|
|
248
|
+
if v.is_falsy() {
|
|
249
|
+
FetchTransactionResponse {
|
|
250
|
+
height: Some(0),
|
|
251
|
+
data: None,
|
|
252
|
+
}
|
|
253
|
+
} else {
|
|
254
|
+
serde_wasm_bindgen::from_value(v).unwrap()
|
|
255
|
+
}
|
|
49
256
|
}
|
|
50
257
|
}
|
|
51
258
|
|
|
52
|
-
|
|
259
|
+
impl From<FetchTransactionResponse> for FetchTransactionResponseDPP {
|
|
260
|
+
fn from(v: FetchTransactionResponse) -> Self {
|
|
261
|
+
FetchTransactionResponseDPP {
|
|
262
|
+
data: v.data,
|
|
263
|
+
height: v.height,
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
#[async_trait(?Send)]
|
|
53
269
|
impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
|
|
54
270
|
type ConversionError = Infallible;
|
|
55
271
|
type FetchDataContract = DataContractWasm;
|
|
272
|
+
type FetchDocument = DocumentWasm;
|
|
273
|
+
type FetchIdentity = IdentityWasm;
|
|
274
|
+
type FetchTransaction = FetchTransactionResponse;
|
|
56
275
|
|
|
57
276
|
async fn fetch_data_contract(
|
|
58
277
|
&self,
|
|
59
278
|
data_contract_id: &Identifier,
|
|
60
279
|
execution_context: &StateTransitionExecutionContext,
|
|
61
280
|
) -> anyhow::Result<Option<Self::FetchDataContract>> {
|
|
62
|
-
|
|
281
|
+
let maybe_data_contract: JsValue = self
|
|
63
282
|
.0
|
|
64
|
-
.
|
|
65
|
-
.
|
|
66
|
-
.
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
)
|
|
70
|
-
|
|
283
|
+
.fetch_data_contract((*data_contract_id).into(), execution_context.clone().into())
|
|
284
|
+
.await
|
|
285
|
+
.map_err(from_js_error)?;
|
|
286
|
+
|
|
287
|
+
if maybe_data_contract.is_undefined() || maybe_data_contract.is_null() {
|
|
288
|
+
return Ok(None);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
let data_contract_conversion_result: Result<Ref<DataContractWasm>, JsValue> =
|
|
292
|
+
generic_of_js_val::<DataContractWasm>(&maybe_data_contract, "DataContract");
|
|
293
|
+
|
|
294
|
+
let data_contract = data_contract_conversion_result
|
|
295
|
+
.map_err(from_js_error)?
|
|
296
|
+
.to_owned();
|
|
297
|
+
|
|
298
|
+
Ok(Some(data_contract))
|
|
71
299
|
}
|
|
72
300
|
|
|
73
301
|
async fn store_data_contract(
|
|
@@ -76,142 +304,384 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
|
|
|
76
304
|
execution_context: &StateTransitionExecutionContext,
|
|
77
305
|
) -> anyhow::Result<()> {
|
|
78
306
|
self.0
|
|
79
|
-
.
|
|
80
|
-
.
|
|
81
|
-
.
|
|
82
|
-
Ok(())
|
|
307
|
+
.store_data_contract(data_contract.into(), execution_context.clone().into())
|
|
308
|
+
.await
|
|
309
|
+
.map_err(from_js_error)
|
|
83
310
|
}
|
|
84
311
|
|
|
85
|
-
async fn fetch_documents
|
|
312
|
+
async fn fetch_documents(
|
|
86
313
|
&self,
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
) -> anyhow::Result<Vec<
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
314
|
+
contract_id: &Identifier,
|
|
315
|
+
data_contract_type: &str,
|
|
316
|
+
where_query: serde_json::Value,
|
|
317
|
+
execution_context: &StateTransitionExecutionContext,
|
|
318
|
+
) -> anyhow::Result<Vec<Self::FetchDocument>> {
|
|
319
|
+
let js_documents = self
|
|
320
|
+
.0
|
|
321
|
+
.fetch_documents(
|
|
322
|
+
contract_id.to_owned().into(),
|
|
323
|
+
data_contract_type.to_owned(),
|
|
324
|
+
where_query
|
|
325
|
+
.serialize(&serde_wasm_bindgen::Serializer::json_compatible())
|
|
326
|
+
.map_err(|e| anyhow!("serialization error: {}", e))?,
|
|
327
|
+
execution_context.clone().into(),
|
|
328
|
+
)
|
|
329
|
+
.await
|
|
330
|
+
.map_err(from_js_error)?;
|
|
331
|
+
let js_documents_array = js_sys::Array::from(&js_documents);
|
|
332
|
+
|
|
333
|
+
let mut documents: Vec<DocumentWasm> = vec![];
|
|
334
|
+
for js_document in js_documents_array.iter() {
|
|
335
|
+
let document = js_document
|
|
336
|
+
.to_wasm::<DocumentWasm>("Document")
|
|
337
|
+
.map_err(|e| anyhow!("{e:#?}"))?;
|
|
338
|
+
documents.push(document.to_owned());
|
|
339
|
+
}
|
|
340
|
+
Ok(documents)
|
|
96
341
|
}
|
|
97
342
|
|
|
98
343
|
async fn create_document(
|
|
99
344
|
&self,
|
|
100
|
-
|
|
101
|
-
|
|
345
|
+
document: &Document,
|
|
346
|
+
execution_context: &StateTransitionExecutionContext,
|
|
102
347
|
) -> anyhow::Result<()> {
|
|
103
|
-
|
|
348
|
+
let document_wasm: DocumentWasm = document.to_owned().into();
|
|
349
|
+
self.0
|
|
350
|
+
.create_document(document_wasm, execution_context.clone().into())
|
|
351
|
+
.await
|
|
352
|
+
.map_err(from_js_error)
|
|
104
353
|
}
|
|
105
354
|
|
|
106
355
|
async fn update_document(
|
|
107
356
|
&self,
|
|
108
|
-
|
|
109
|
-
|
|
357
|
+
document: &Document,
|
|
358
|
+
execution_context: &StateTransitionExecutionContext,
|
|
110
359
|
) -> anyhow::Result<()> {
|
|
111
|
-
|
|
360
|
+
let document_wasm: DocumentWasm = document.to_owned().into();
|
|
361
|
+
self.0
|
|
362
|
+
.update_document(document_wasm, execution_context.clone().into())
|
|
363
|
+
.await
|
|
364
|
+
.map_err(from_js_error)
|
|
112
365
|
}
|
|
113
366
|
|
|
114
367
|
async fn remove_document(
|
|
115
368
|
&self,
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
369
|
+
data_contract: &DataContract,
|
|
370
|
+
data_contract_type: &str,
|
|
371
|
+
document_id: &Identifier,
|
|
372
|
+
execution_context: &StateTransitionExecutionContext,
|
|
120
373
|
) -> anyhow::Result<()> {
|
|
121
|
-
|
|
374
|
+
let data_contract: DataContractWasm = data_contract.to_owned().into();
|
|
375
|
+
let document_id: IdentifierWrapper = document_id.to_owned().into();
|
|
376
|
+
self.0
|
|
377
|
+
.remove_document(
|
|
378
|
+
data_contract,
|
|
379
|
+
data_contract_type.to_owned(),
|
|
380
|
+
document_id,
|
|
381
|
+
execution_context.clone().into(),
|
|
382
|
+
)
|
|
383
|
+
.await
|
|
384
|
+
.map_err(from_js_error)
|
|
122
385
|
}
|
|
123
386
|
|
|
124
|
-
async fn fetch_transaction
|
|
387
|
+
async fn fetch_transaction(
|
|
125
388
|
&self,
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
) -> anyhow::Result<
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
389
|
+
id: &str,
|
|
390
|
+
execution_context: &StateTransitionExecutionContext,
|
|
391
|
+
) -> anyhow::Result<Self::FetchTransaction> {
|
|
392
|
+
let transaction_data = self
|
|
393
|
+
.0
|
|
394
|
+
.fetch_transaction(JsValue::from_str(id), execution_context.into())
|
|
395
|
+
.await
|
|
396
|
+
.map_err(from_js_error)?;
|
|
397
|
+
|
|
398
|
+
Ok(FetchTransactionResponse::from(transaction_data))
|
|
133
399
|
}
|
|
134
400
|
|
|
135
|
-
async fn fetch_identity
|
|
401
|
+
async fn fetch_identity(
|
|
136
402
|
&self,
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
) -> anyhow::Result<Option<
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
403
|
+
id: &Identifier,
|
|
404
|
+
execution_context: &StateTransitionExecutionContext,
|
|
405
|
+
) -> anyhow::Result<Option<Self::FetchIdentity>> {
|
|
406
|
+
let maybe_identity = self
|
|
407
|
+
.0
|
|
408
|
+
.fetch_identity((*id).into(), execution_context.clone().into())
|
|
409
|
+
.await
|
|
410
|
+
.map_err(from_js_error)?;
|
|
411
|
+
|
|
412
|
+
if maybe_identity.is_undefined() {
|
|
413
|
+
return Ok(None);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
let identity_conversion_result: Result<Ref<IdentityWasm>, JsValue> =
|
|
417
|
+
generic_of_js_val::<IdentityWasm>(&maybe_identity, "Identity");
|
|
418
|
+
|
|
419
|
+
let identity = identity_conversion_result
|
|
420
|
+
.map_err(from_js_error)?
|
|
421
|
+
.to_owned();
|
|
422
|
+
|
|
423
|
+
Ok(Some(identity))
|
|
144
424
|
}
|
|
145
425
|
|
|
146
|
-
async fn
|
|
426
|
+
async fn create_identity(
|
|
147
427
|
&self,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
_execution_context: &StateTransitionExecutionContext,
|
|
428
|
+
identity: &Identity,
|
|
429
|
+
execution_context: &StateTransitionExecutionContext,
|
|
151
430
|
) -> anyhow::Result<()> {
|
|
152
|
-
|
|
431
|
+
self.0
|
|
432
|
+
.create_identity(identity.clone().into(), execution_context.clone().into())
|
|
433
|
+
.await
|
|
434
|
+
.map_err(from_js_error)
|
|
153
435
|
}
|
|
154
436
|
|
|
155
|
-
async fn
|
|
437
|
+
async fn add_keys_to_identity(
|
|
156
438
|
&self,
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
439
|
+
identity_id: &Identifier,
|
|
440
|
+
keys: &[IdentityPublicKey],
|
|
441
|
+
execution_context: &StateTransitionExecutionContext,
|
|
442
|
+
) -> anyhow::Result<()> {
|
|
443
|
+
self.0
|
|
444
|
+
.add_keys_to_identity(
|
|
445
|
+
(*identity_id).into(),
|
|
446
|
+
keys.iter()
|
|
447
|
+
.map(|k| JsValue::from(IdentityPublicKeyWasm::from(k.clone())))
|
|
448
|
+
.collect::<Array>(),
|
|
449
|
+
execution_context.clone().into(),
|
|
450
|
+
)
|
|
451
|
+
.await
|
|
452
|
+
.map_err(from_js_error)
|
|
163
453
|
}
|
|
164
454
|
|
|
165
|
-
async fn
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
455
|
+
async fn disable_identity_keys(
|
|
456
|
+
&self,
|
|
457
|
+
identity_id: &Identifier,
|
|
458
|
+
keys: &[KeyID],
|
|
459
|
+
disable_at: TimestampMillis,
|
|
460
|
+
execution_context: &StateTransitionExecutionContext,
|
|
461
|
+
) -> anyhow::Result<()> {
|
|
462
|
+
self.0
|
|
463
|
+
.disable_identity_keys(
|
|
464
|
+
(*identity_id).into(),
|
|
465
|
+
keys.iter().map(|&k| JsValue::from(k as f64)).collect(),
|
|
466
|
+
Number::from(disable_at as f64),
|
|
467
|
+
execution_context.clone().into(),
|
|
468
|
+
)
|
|
469
|
+
.await
|
|
470
|
+
.map_err(from_js_error)
|
|
170
471
|
}
|
|
171
472
|
|
|
172
|
-
async fn
|
|
473
|
+
async fn update_identity_revision(
|
|
173
474
|
&self,
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
475
|
+
identity_id: &Identifier,
|
|
476
|
+
revision: Revision,
|
|
477
|
+
execution_context: &StateTransitionExecutionContext,
|
|
478
|
+
) -> anyhow::Result<()> {
|
|
479
|
+
self.0
|
|
480
|
+
.update_identity_revision(
|
|
481
|
+
(*identity_id).into(),
|
|
482
|
+
Number::from(revision as f64), // TODO: We should use BigInt
|
|
483
|
+
execution_context.clone().into(),
|
|
484
|
+
)
|
|
485
|
+
.await
|
|
486
|
+
.map_err(from_js_error)
|
|
178
487
|
}
|
|
179
488
|
|
|
180
|
-
async fn
|
|
489
|
+
async fn fetch_identity_balance(
|
|
181
490
|
&self,
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
) -> anyhow::Result<
|
|
185
|
-
|
|
491
|
+
identity_id: &Identifier,
|
|
492
|
+
execution_context: &StateTransitionExecutionContext,
|
|
493
|
+
) -> anyhow::Result<Option<u64>> {
|
|
494
|
+
let maybe_balance = self
|
|
495
|
+
.0
|
|
496
|
+
.fetch_identity_balance((*identity_id).into(), execution_context.clone().into())
|
|
497
|
+
.await
|
|
498
|
+
.map_err(from_js_error)?;
|
|
499
|
+
|
|
500
|
+
if maybe_balance.is_undefined() {
|
|
501
|
+
return Ok(None);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
let balance = maybe_balance
|
|
505
|
+
.as_f64()
|
|
506
|
+
.ok_or_else(|| anyhow!("Value is not a number"))?;
|
|
507
|
+
|
|
508
|
+
Ok(Some(balance as u64))
|
|
186
509
|
}
|
|
187
510
|
|
|
188
|
-
async fn
|
|
511
|
+
async fn fetch_identity_balance_with_debt(
|
|
512
|
+
&self,
|
|
513
|
+
identity_id: &Identifier,
|
|
514
|
+
execution_context: &StateTransitionExecutionContext,
|
|
515
|
+
) -> anyhow::Result<Option<i64>> {
|
|
516
|
+
let maybe_balance = self
|
|
517
|
+
.0
|
|
518
|
+
.fetch_identity_balance_with_debt(
|
|
519
|
+
(*identity_id).into(),
|
|
520
|
+
execution_context.clone().into(),
|
|
521
|
+
)
|
|
522
|
+
.await
|
|
523
|
+
.map_err(from_js_error)?;
|
|
524
|
+
|
|
525
|
+
if maybe_balance.is_undefined() {
|
|
526
|
+
return Ok(None);
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
let balance = maybe_balance
|
|
530
|
+
.as_f64()
|
|
531
|
+
.ok_or_else(|| anyhow!("Value is not a number"))?;
|
|
532
|
+
|
|
533
|
+
Ok(Some(balance as i64))
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
async fn add_to_identity_balance(
|
|
189
537
|
&self,
|
|
190
|
-
|
|
538
|
+
identity_id: &Identifier,
|
|
539
|
+
amount: u64,
|
|
540
|
+
execution_context: &StateTransitionExecutionContext,
|
|
191
541
|
) -> anyhow::Result<()> {
|
|
192
|
-
|
|
542
|
+
self.0
|
|
543
|
+
.add_to_identity_balance(
|
|
544
|
+
(*identity_id).into(),
|
|
545
|
+
Number::from(amount as f64),
|
|
546
|
+
execution_context.clone().into(),
|
|
547
|
+
)
|
|
548
|
+
.await
|
|
549
|
+
.map_err(from_js_error)
|
|
193
550
|
}
|
|
194
551
|
|
|
195
|
-
async fn
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
552
|
+
async fn remove_from_identity_balance(
|
|
553
|
+
&self,
|
|
554
|
+
identity_id: &Identifier,
|
|
555
|
+
amount: u64,
|
|
556
|
+
execution_context: &StateTransitionExecutionContext,
|
|
557
|
+
) -> anyhow::Result<()> {
|
|
558
|
+
self.0
|
|
559
|
+
.remove_from_identity_balance(
|
|
560
|
+
(*identity_id).into(),
|
|
561
|
+
Number::from(amount as f64),
|
|
562
|
+
execution_context.clone().into(),
|
|
563
|
+
)
|
|
564
|
+
.await
|
|
565
|
+
.map_err(from_js_error)
|
|
200
566
|
}
|
|
201
567
|
|
|
202
|
-
async fn
|
|
568
|
+
async fn add_to_system_credits(
|
|
569
|
+
&self,
|
|
570
|
+
amount: u64,
|
|
571
|
+
execution_context: &StateTransitionExecutionContext,
|
|
572
|
+
) -> anyhow::Result<()> {
|
|
573
|
+
self.0
|
|
574
|
+
.add_to_system_credits(
|
|
575
|
+
Number::from(amount as f64),
|
|
576
|
+
execution_context.clone().into(),
|
|
577
|
+
)
|
|
578
|
+
.await
|
|
579
|
+
.map_err(from_js_error)
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
async fn remove_from_system_credits(
|
|
203
583
|
&self,
|
|
204
|
-
|
|
584
|
+
_amount: u64,
|
|
205
585
|
_execution_context: &StateTransitionExecutionContext,
|
|
206
586
|
) -> anyhow::Result<()> {
|
|
207
587
|
todo!()
|
|
208
588
|
}
|
|
209
589
|
|
|
210
|
-
async fn
|
|
590
|
+
async fn fetch_latest_platform_block_header(&self) -> anyhow::Result<Vec<u8>> {
|
|
591
|
+
let value: JsValue = self
|
|
592
|
+
.0
|
|
593
|
+
.fetch_latest_platform_block_header()
|
|
594
|
+
.await
|
|
595
|
+
.map_err(from_js_error)?;
|
|
596
|
+
|
|
597
|
+
Ok(Uint8Array::new(&value).to_vec())
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
async fn fetch_latest_platform_core_chain_locked_height(&self) -> anyhow::Result<Option<u32>> {
|
|
601
|
+
let maybe_height = self
|
|
602
|
+
.0
|
|
603
|
+
.fetch_latest_platform_core_chain_locked_height()
|
|
604
|
+
.await
|
|
605
|
+
.map_err(from_js_error)?;
|
|
606
|
+
|
|
607
|
+
if maybe_height.is_undefined() {
|
|
608
|
+
return Ok(None);
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
let height = maybe_height
|
|
612
|
+
.as_f64()
|
|
613
|
+
.ok_or_else(|| anyhow!("Value is not a number"))?;
|
|
614
|
+
Ok(Some(height as u32))
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
async fn fetch_latest_platform_block_height(&self) -> anyhow::Result<u64> {
|
|
618
|
+
let height = self
|
|
619
|
+
.0
|
|
620
|
+
.fetch_latest_platform_block_height()
|
|
621
|
+
.await
|
|
622
|
+
.map_err(from_js_error)?;
|
|
623
|
+
|
|
624
|
+
let height = height
|
|
625
|
+
.as_f64()
|
|
626
|
+
.ok_or_else(|| anyhow!("Value is not a number"))?;
|
|
627
|
+
Ok(height as u64)
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
async fn verify_instant_lock(
|
|
211
631
|
&self,
|
|
212
|
-
|
|
213
|
-
|
|
632
|
+
instant_lock: &InstantLock,
|
|
633
|
+
execution_context: &StateTransitionExecutionContext,
|
|
634
|
+
) -> anyhow::Result<bool> {
|
|
635
|
+
let raw_instant_lock = consensus::serialize(instant_lock);
|
|
636
|
+
|
|
637
|
+
let verification_result = self
|
|
638
|
+
.0
|
|
639
|
+
.verify_instant_lock(raw_instant_lock, execution_context.clone().into())
|
|
640
|
+
.await
|
|
641
|
+
.map_err(from_js_error)?;
|
|
642
|
+
|
|
643
|
+
verification_result
|
|
644
|
+
.as_bool()
|
|
645
|
+
.ok_or_else(|| anyhow!("Value is not a bool"))
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
async fn is_asset_lock_transaction_out_point_already_used(
|
|
649
|
+
&self,
|
|
650
|
+
out_point_buffer: &[u8],
|
|
651
|
+
execution_context: &StateTransitionExecutionContext,
|
|
652
|
+
) -> anyhow::Result<bool> {
|
|
653
|
+
let is_used = self
|
|
654
|
+
.0
|
|
655
|
+
.is_asset_lock_transaction_out_point_already_used(
|
|
656
|
+
Buffer::from_bytes(out_point_buffer),
|
|
657
|
+
execution_context.clone().into(),
|
|
658
|
+
)
|
|
659
|
+
.await
|
|
660
|
+
.map_err(from_js_error)?;
|
|
661
|
+
|
|
662
|
+
is_used
|
|
663
|
+
.as_bool()
|
|
664
|
+
.ok_or_else(|| anyhow!("Value is not a bool"))
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
async fn mark_asset_lock_transaction_out_point_as_used(
|
|
668
|
+
&self,
|
|
669
|
+
out_point_buffer: &[u8],
|
|
670
|
+
execution_context: &StateTransitionExecutionContext,
|
|
214
671
|
) -> anyhow::Result<()> {
|
|
672
|
+
self.0
|
|
673
|
+
.mark_asset_lock_transaction_out_point_as_used(
|
|
674
|
+
Buffer::from_bytes(out_point_buffer),
|
|
675
|
+
execution_context.clone().into(),
|
|
676
|
+
)
|
|
677
|
+
.await
|
|
678
|
+
.map_err(from_js_error)
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
async fn fetch_sml_store<T>(&self) -> anyhow::Result<T>
|
|
682
|
+
where
|
|
683
|
+
T: for<'de> serde::de::Deserialize<'de> + 'static,
|
|
684
|
+
{
|
|
215
685
|
todo!()
|
|
216
686
|
}
|
|
217
687
|
|
|
@@ -226,4 +696,31 @@ impl StateRepositoryLike for ExternalStateRepositoryLikeWrapper {
|
|
|
226
696
|
) -> anyhow::Result<()> {
|
|
227
697
|
todo!()
|
|
228
698
|
}
|
|
699
|
+
|
|
700
|
+
async fn fetch_latest_platform_block_time(&self) -> anyhow::Result<u64> {
|
|
701
|
+
let js_number = self
|
|
702
|
+
.0
|
|
703
|
+
.fetch_latest_platform_block_time()
|
|
704
|
+
.await
|
|
705
|
+
.map_err(from_js_error)?;
|
|
706
|
+
|
|
707
|
+
if let Some(float_number) = js_number.as_f64() {
|
|
708
|
+
if float_number.is_nan() || float_number.is_infinite() {
|
|
709
|
+
bail!("received an invalid timestamp: the number is either NaN or Inf")
|
|
710
|
+
}
|
|
711
|
+
if float_number < 0. {
|
|
712
|
+
bail!("received an invalid timestamp: the number is negative");
|
|
713
|
+
}
|
|
714
|
+
if float_number.fract() != 0. {
|
|
715
|
+
bail!("received an invalid timestamp: the number is fractional")
|
|
716
|
+
}
|
|
717
|
+
if float_number > u64::MAX as f64 {
|
|
718
|
+
bail!("received an invalid timestamp: the number is > u64::max")
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
return Ok(float_number as u64);
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
bail!("fetching latest platform block failed: value is not number");
|
|
725
|
+
}
|
|
229
726
|
}
|