@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
|
@@ -1,25 +1,16 @@
|
|
|
1
1
|
const { PrivateKey } = require('@dashevo/dashcore-lib');
|
|
2
2
|
|
|
3
|
-
const DashPlatformProtocol = require('@dashevo/dpp/lib/DashPlatformProtocol');
|
|
4
|
-
|
|
5
|
-
const DataContractCreateTransition = require('@dashevo/dpp/lib/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition');
|
|
6
|
-
|
|
7
|
-
const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
|
|
8
|
-
|
|
9
|
-
const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
10
|
-
const getDocumentsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentsFixture');
|
|
11
3
|
const getIdentityCreateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityCreateTransitionFixture');
|
|
12
4
|
|
|
13
5
|
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
14
6
|
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
const IdentityPublicKey = require('@dashevo/dpp/lib/identity/IdentityPublicKey');
|
|
7
|
+
const getIdentityFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityFixture');
|
|
8
|
+
const getDocumentsFixture = require('../../../lib/test/fixtures/getDocumentsFixture');
|
|
9
|
+
const getDataContractFixture = require('../../../lib/test/fixtures/getDataContractFixture');
|
|
19
10
|
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
11
|
+
const { default: loadWasmDpp } = require('../../../dist');
|
|
12
|
+
const getBlsAdapterMock = require('../../../lib/test/mocks/getBlsAdapterMock');
|
|
13
|
+
const generateRandomIdentifierAsync = require('../../../lib/test/utils/generateRandomIdentifierAsync');
|
|
23
14
|
|
|
24
15
|
describe('StateTransitionFacade', () => {
|
|
25
16
|
let dpp;
|
|
@@ -28,85 +19,99 @@ describe('StateTransitionFacade', () => {
|
|
|
28
19
|
let stateRepositoryMock;
|
|
29
20
|
let dataContract;
|
|
30
21
|
let identityPublicKey;
|
|
22
|
+
let identity;
|
|
23
|
+
|
|
24
|
+
let DashPlatformProtocol;
|
|
25
|
+
let DataContractFactory;
|
|
26
|
+
let DataContractValidator;
|
|
27
|
+
let DataContractCreateTransition;
|
|
28
|
+
let Identity;
|
|
29
|
+
let ValidationResult;
|
|
30
|
+
let IdentityPublicKey;
|
|
31
|
+
let DocumentFactory;
|
|
32
|
+
let DocumentValidator;
|
|
33
|
+
let ProtocolVersionValidator;
|
|
34
|
+
let IdentityCreateTransition;
|
|
35
|
+
let UnsupportedProtocolVersionError;
|
|
36
|
+
let InvalidStateTransitionSignatureError;
|
|
37
|
+
let DataContractAlreadyPresentError;
|
|
38
|
+
let BalanceIsNotEnoughError;
|
|
39
|
+
|
|
40
|
+
before(async () => {
|
|
41
|
+
({
|
|
42
|
+
DashPlatformProtocol,
|
|
43
|
+
ValidationResult,
|
|
44
|
+
DataContractCreateTransition,
|
|
45
|
+
Identity,
|
|
46
|
+
DataContractValidator,
|
|
47
|
+
DataContractFactory,
|
|
48
|
+
IdentityPublicKey,
|
|
49
|
+
DocumentFactory,
|
|
50
|
+
DocumentValidator,
|
|
51
|
+
ProtocolVersionValidator,
|
|
52
|
+
IdentityCreateTransition,
|
|
53
|
+
UnsupportedProtocolVersionError,
|
|
54
|
+
InvalidStateTransitionSignatureError,
|
|
55
|
+
DataContractAlreadyPresentError,
|
|
56
|
+
BalanceIsNotEnoughError,
|
|
57
|
+
} = await loadWasmDpp());
|
|
58
|
+
});
|
|
31
59
|
|
|
32
60
|
beforeEach(async function beforeEach() {
|
|
33
61
|
const privateKeyModel = new PrivateKey();
|
|
34
|
-
const privateKey = privateKeyModel.
|
|
62
|
+
const privateKey = privateKeyModel.toBuffer();
|
|
35
63
|
const publicKey = privateKeyModel.toPublicKey().toBuffer();
|
|
36
64
|
const publicKeyId = 1;
|
|
37
65
|
|
|
38
|
-
identityPublicKey = new IdentityPublicKey(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
66
|
+
identityPublicKey = new IdentityPublicKey({
|
|
67
|
+
id: publicKeyId,
|
|
68
|
+
type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
|
|
69
|
+
data: publicKey,
|
|
70
|
+
purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
|
|
71
|
+
securityLevel: IdentityPublicKey.SECURITY_LEVELS.HIGH,
|
|
72
|
+
readOnly: false,
|
|
73
|
+
});
|
|
44
74
|
|
|
45
|
-
dataContract = getDataContractFixture();
|
|
75
|
+
dataContract = await getDataContractFixture();
|
|
46
76
|
|
|
47
|
-
const
|
|
77
|
+
const dataContractValidator = new DataContractValidator();
|
|
78
|
+
const dataContractFactory = new DataContractFactory(1, dataContractValidator);
|
|
48
79
|
|
|
49
|
-
dataContractCreateTransition = dataContractFactory.createDataContractCreateTransition(
|
|
80
|
+
dataContractCreateTransition = await dataContractFactory.createDataContractCreateTransition(
|
|
50
81
|
dataContract,
|
|
51
82
|
);
|
|
52
|
-
await dataContractCreateTransition.sign(
|
|
83
|
+
await dataContractCreateTransition.sign(
|
|
84
|
+
identityPublicKey,
|
|
85
|
+
privateKey,
|
|
86
|
+
);
|
|
53
87
|
|
|
54
|
-
const
|
|
88
|
+
const documentValidator = new DocumentValidator(new ProtocolVersionValidator());
|
|
89
|
+
const documentFactory = new DocumentFactory(1, documentValidator, stateRepositoryMock);
|
|
55
90
|
|
|
56
91
|
documentsBatchTransition = documentFactory.createStateTransition({
|
|
57
|
-
create: getDocumentsFixture(dataContract),
|
|
92
|
+
create: await getDocumentsFixture(dataContract),
|
|
58
93
|
});
|
|
59
94
|
await documentsBatchTransition.sign(identityPublicKey, privateKey);
|
|
60
95
|
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
type: 2,
|
|
67
|
-
getBalance,
|
|
68
|
-
};
|
|
96
|
+
const identityObjectJS = getIdentityFixture().toObject();
|
|
97
|
+
identityObjectJS.id = await generateRandomIdentifierAsync();
|
|
98
|
+
identityObjectJS.balance = 10000000;
|
|
99
|
+
identity = new Identity(identityObjectJS);
|
|
100
|
+
identity.setPublicKeys([identityPublicKey]);
|
|
69
101
|
|
|
70
102
|
const blockTime = Date.now();
|
|
71
103
|
|
|
72
104
|
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
73
105
|
stateRepositoryMock.fetchIdentity.resolves(identity);
|
|
74
106
|
stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTime);
|
|
107
|
+
stateRepositoryMock.fetchDataContract.resolves(null);
|
|
75
108
|
|
|
76
|
-
|
|
77
|
-
stateRepository: stateRepositoryMock,
|
|
78
|
-
});
|
|
109
|
+
const blsAdapter = await getBlsAdapterMock();
|
|
79
110
|
|
|
80
|
-
|
|
111
|
+
dpp = new DashPlatformProtocol({}, blsAdapter, stateRepositoryMock);
|
|
81
112
|
});
|
|
82
113
|
|
|
83
114
|
describe('createFromObject', () => {
|
|
84
|
-
it('should throw MissingOption if stateRepository is not set', async () => {
|
|
85
|
-
dpp = new DashPlatformProtocol();
|
|
86
|
-
await dpp.initialize();
|
|
87
|
-
|
|
88
|
-
try {
|
|
89
|
-
await dpp.stateTransition.createFromObject(
|
|
90
|
-
dataContractCreateTransition.toObject(),
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
expect.fail('MissingOption should be thrown');
|
|
94
|
-
} catch (e) {
|
|
95
|
-
expect(e).to.be.an.instanceOf(MissingOptionError);
|
|
96
|
-
expect(e.getOptionName()).to.equal('stateRepository');
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it('should skip checking for state repository if skipValidation is set', async () => {
|
|
101
|
-
dpp = new DashPlatformProtocol();
|
|
102
|
-
await dpp.initialize();
|
|
103
|
-
|
|
104
|
-
await dpp.stateTransition.createFromObject(
|
|
105
|
-
dataContractCreateTransition.toObject(),
|
|
106
|
-
{ skipValidation: true },
|
|
107
|
-
);
|
|
108
|
-
});
|
|
109
|
-
|
|
110
115
|
it('should create State Transition from plain object', async () => {
|
|
111
116
|
const result = await dpp.stateTransition.createFromObject(
|
|
112
117
|
dataContractCreateTransition.toObject(),
|
|
@@ -119,32 +124,6 @@ describe('StateTransitionFacade', () => {
|
|
|
119
124
|
});
|
|
120
125
|
|
|
121
126
|
describe('createFromBuffer', () => {
|
|
122
|
-
it('should throw MissingOption if stateRepository is not set', async () => {
|
|
123
|
-
dpp = new DashPlatformProtocol();
|
|
124
|
-
await dpp.initialize();
|
|
125
|
-
|
|
126
|
-
try {
|
|
127
|
-
await dpp.stateTransition.createFromBuffer(
|
|
128
|
-
dataContractCreateTransition.toBuffer(),
|
|
129
|
-
);
|
|
130
|
-
|
|
131
|
-
expect.fail('MissingOption should be thrown');
|
|
132
|
-
} catch (e) {
|
|
133
|
-
expect(e).to.be.an.instanceOf(MissingOptionError);
|
|
134
|
-
expect(e.getOptionName()).to.equal('stateRepository');
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
it('should skip checking for state repository if skipValidation is set', async () => {
|
|
139
|
-
dpp = new DashPlatformProtocol();
|
|
140
|
-
await dpp.initialize();
|
|
141
|
-
|
|
142
|
-
await dpp.stateTransition.createFromBuffer(
|
|
143
|
-
dataContractCreateTransition.toBuffer(),
|
|
144
|
-
{ skipValidation: true },
|
|
145
|
-
);
|
|
146
|
-
});
|
|
147
|
-
|
|
148
127
|
it('should create State Transition from string', async () => {
|
|
149
128
|
const result = await dpp.stateTransition.createFromBuffer(
|
|
150
129
|
dataContractCreateTransition.toBuffer(),
|
|
@@ -157,94 +136,53 @@ describe('StateTransitionFacade', () => {
|
|
|
157
136
|
});
|
|
158
137
|
|
|
159
138
|
describe('validate', () => {
|
|
160
|
-
let validateBasicSpy;
|
|
161
|
-
let validateSignatureSpy;
|
|
162
|
-
let validateFeeSpy;
|
|
163
|
-
let validateStateSpy;
|
|
164
|
-
|
|
165
|
-
beforeEach(function beforeEach() {
|
|
166
|
-
validateBasicSpy = this.sinonSandbox.spy(
|
|
167
|
-
dpp.stateTransition,
|
|
168
|
-
'validateBasic',
|
|
169
|
-
);
|
|
170
|
-
|
|
171
|
-
validateSignatureSpy = this.sinonSandbox.spy(
|
|
172
|
-
dpp.stateTransition,
|
|
173
|
-
'validateSignature',
|
|
174
|
-
);
|
|
175
|
-
|
|
176
|
-
validateFeeSpy = this.sinonSandbox.spy(
|
|
177
|
-
dpp.stateTransition,
|
|
178
|
-
'validateFee',
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
validateStateSpy = this.sinonSandbox.spy(
|
|
182
|
-
dpp.stateTransition,
|
|
183
|
-
'validateState',
|
|
184
|
-
);
|
|
185
|
-
});
|
|
186
|
-
|
|
187
139
|
it('should return invalid result if State Transition structure is invalid', async () => {
|
|
188
140
|
const rawStateTransition = dataContractCreateTransition.toObject();
|
|
189
|
-
|
|
141
|
+
rawStateTransition.protocolVersion = 100;
|
|
190
142
|
|
|
191
143
|
const result = await dpp.stateTransition.validate(rawStateTransition);
|
|
192
144
|
|
|
193
145
|
expect(result).to.be.an.instanceOf(ValidationResult);
|
|
194
146
|
expect(result.isValid()).to.be.false();
|
|
195
|
-
|
|
196
|
-
expect(
|
|
197
|
-
expect(
|
|
198
|
-
expect(validateFeeSpy).to.not.be.called();
|
|
199
|
-
expect(validateStateSpy).to.not.be.called();
|
|
147
|
+
const errors = result.getErrors();
|
|
148
|
+
expect(errors).to.have.lengthOf(1);
|
|
149
|
+
expect(errors[0]).to.be.instanceOf(UnsupportedProtocolVersionError);
|
|
200
150
|
});
|
|
201
151
|
|
|
202
152
|
it('should return invalid result if State Transition signature is invalid', async () => {
|
|
203
|
-
|
|
153
|
+
const rawStateTransition = dataContractCreateTransition.toObject();
|
|
154
|
+
rawStateTransition.signature = Buffer.alloc(65).fill(1);
|
|
204
155
|
|
|
205
|
-
const result = await dpp.stateTransition.validate(
|
|
156
|
+
const result = await dpp.stateTransition.validate(rawStateTransition);
|
|
206
157
|
|
|
207
158
|
expect(result).to.be.an.instanceOf(ValidationResult);
|
|
208
159
|
expect(result.isValid()).to.be.false();
|
|
209
|
-
|
|
210
|
-
expect(
|
|
211
|
-
expect(
|
|
212
|
-
expect(validateFeeSpy).to.not.be.called();
|
|
213
|
-
expect(validateStateSpy).to.not.be.called();
|
|
160
|
+
const errors = result.getErrors();
|
|
161
|
+
expect(errors).to.have.lengthOf(1);
|
|
162
|
+
expect(errors[0]).to.be.instanceOf(InvalidStateTransitionSignatureError);
|
|
214
163
|
});
|
|
215
164
|
|
|
216
165
|
it('should return invalid result if not enough balance to pay fee for State Transition', async () => {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
dpp.stateTransition.validateStateTransitionFee = () => new ValidationResult([consensusError]);
|
|
220
|
-
|
|
166
|
+
identity.setBalance(0);
|
|
221
167
|
const result = await dpp.stateTransition.validate(dataContractCreateTransition);
|
|
222
168
|
|
|
223
169
|
expect(result).to.be.an.instanceOf(ValidationResult);
|
|
224
170
|
expect(result.isValid()).to.be.false();
|
|
225
|
-
|
|
226
|
-
expect(
|
|
227
|
-
expect(
|
|
228
|
-
expect(validateFeeSpy).to.be.calledOnceWithExactly(dataContractCreateTransition);
|
|
229
|
-
expect(validateStateSpy).to.not.be.called();
|
|
171
|
+
const errors = result.getErrors();
|
|
172
|
+
expect(errors).to.have.lengthOf(1);
|
|
173
|
+
expect(errors[0]).to.be.instanceOf(BalanceIsNotEnoughError);
|
|
230
174
|
});
|
|
231
175
|
|
|
232
176
|
it('should return invalid result if State Transition is invalid against state', async () => {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
dpp.stateTransition.validateStateTransitionState = () => (
|
|
236
|
-
new ValidationResult([consensusError])
|
|
237
|
-
);
|
|
177
|
+
stateRepositoryMock.fetchDataContract.resolves(dataContract);
|
|
238
178
|
|
|
239
179
|
const result = await dpp.stateTransition.validate(dataContractCreateTransition);
|
|
240
180
|
|
|
241
181
|
expect(result).to.be.an.instanceOf(ValidationResult);
|
|
242
182
|
expect(result.isValid()).to.be.false();
|
|
243
|
-
|
|
244
|
-
expect(
|
|
245
|
-
expect(
|
|
246
|
-
expect(validateFeeSpy).to.be.calledOnceWithExactly(dataContractCreateTransition);
|
|
247
|
-
expect(validateStateSpy).to.be.calledOnceWithExactly(dataContractCreateTransition);
|
|
183
|
+
const errors = result.getErrors();
|
|
184
|
+
expect(errors).to.have.lengthOf(1);
|
|
185
|
+
expect(errors[0]).to.be.instanceOf(DataContractAlreadyPresentError);
|
|
248
186
|
});
|
|
249
187
|
|
|
250
188
|
it('should validate DataContractCreateTransition', async () => {
|
|
@@ -254,53 +192,22 @@ describe('StateTransitionFacade', () => {
|
|
|
254
192
|
|
|
255
193
|
expect(result).to.be.an.instanceOf(ValidationResult);
|
|
256
194
|
expect(result.isValid()).to.be.true();
|
|
257
|
-
|
|
258
|
-
expect(validateBasicSpy).to.be.calledOnceWithExactly(dataContractCreateTransition);
|
|
259
|
-
expect(validateSignatureSpy).to.be.calledOnceWithExactly(dataContractCreateTransition);
|
|
260
|
-
expect(validateFeeSpy).to.be.calledOnceWithExactly(dataContractCreateTransition);
|
|
261
|
-
expect(validateStateSpy).to.be.calledOnceWithExactly(dataContractCreateTransition);
|
|
262
195
|
});
|
|
263
196
|
|
|
264
|
-
it('should validate DocumentsBatchTransition', async
|
|
197
|
+
it('should validate DocumentsBatchTransition', async () => {
|
|
265
198
|
stateRepositoryMock.fetchDocuments.resolves([]);
|
|
266
199
|
|
|
267
200
|
stateRepositoryMock.fetchDataContract.resolves(dataContract);
|
|
268
|
-
stateRepositoryMock.fetchIdentity.resolves({
|
|
269
|
-
getPublicKeyById: this.sinonSandbox.stub().returns(identityPublicKey),
|
|
270
|
-
getBalance: this.sinonSandbox.stub().returns(10000),
|
|
271
|
-
});
|
|
272
|
-
|
|
273
201
|
const result = await dpp.stateTransition.validate(
|
|
274
202
|
documentsBatchTransition,
|
|
275
203
|
);
|
|
276
204
|
|
|
277
205
|
expect(result).to.be.an.instanceOf(ValidationResult);
|
|
278
206
|
expect(result.isValid()).to.be.true();
|
|
279
|
-
|
|
280
|
-
expect(validateBasicSpy).to.be.calledOnceWithExactly(documentsBatchTransition);
|
|
281
|
-
expect(validateSignatureSpy).to.be.calledOnceWithExactly(documentsBatchTransition);
|
|
282
|
-
expect(validateFeeSpy).to.be.calledOnceWithExactly(documentsBatchTransition);
|
|
283
|
-
expect(validateStateSpy).to.be.calledOnceWithExactly(documentsBatchTransition);
|
|
284
207
|
});
|
|
285
208
|
});
|
|
286
209
|
|
|
287
210
|
describe('validateBasic', () => {
|
|
288
|
-
it('should throw MissingOption if stateRepository is not set', async () => {
|
|
289
|
-
dpp = new DashPlatformProtocol();
|
|
290
|
-
await dpp.initialize();
|
|
291
|
-
|
|
292
|
-
try {
|
|
293
|
-
await dpp.stateTransition.validateBasic(
|
|
294
|
-
dataContractCreateTransition.toObject(),
|
|
295
|
-
);
|
|
296
|
-
|
|
297
|
-
expect.fail('MissingOption should be thrown');
|
|
298
|
-
} catch (e) {
|
|
299
|
-
expect(e).to.be.an.instanceOf(MissingOptionError);
|
|
300
|
-
expect(e.getOptionName()).to.equal('stateRepository');
|
|
301
|
-
}
|
|
302
|
-
});
|
|
303
|
-
|
|
304
211
|
it('should validate State Transition', async () => {
|
|
305
212
|
const result = await dpp.stateTransition.validateBasic(
|
|
306
213
|
dataContractCreateTransition.toObject(),
|
|
@@ -312,22 +219,6 @@ describe('StateTransitionFacade', () => {
|
|
|
312
219
|
});
|
|
313
220
|
|
|
314
221
|
describe('validateSignature', () => {
|
|
315
|
-
it('should throw MissingOption if stateRepository is not set', async () => {
|
|
316
|
-
dpp = new DashPlatformProtocol();
|
|
317
|
-
await dpp.initialize();
|
|
318
|
-
|
|
319
|
-
try {
|
|
320
|
-
await dpp.stateTransition.validateSignature(
|
|
321
|
-
dataContractCreateTransition,
|
|
322
|
-
);
|
|
323
|
-
|
|
324
|
-
expect.fail('MissingOption should be thrown');
|
|
325
|
-
} catch (e) {
|
|
326
|
-
expect(e).to.be.an.instanceOf(MissingOptionError);
|
|
327
|
-
expect(e.getOptionName()).to.equal('stateRepository');
|
|
328
|
-
}
|
|
329
|
-
});
|
|
330
|
-
|
|
331
222
|
it('should validate identity signed State Transition', async () => {
|
|
332
223
|
const result = await dpp.stateTransition.validateSignature(
|
|
333
224
|
dataContractCreateTransition,
|
|
@@ -342,10 +233,13 @@ describe('StateTransitionFacade', () => {
|
|
|
342
233
|
'af432c476f65211f45f48f1d42c9c0b497e56696aa1736b40544ef1a496af837',
|
|
343
234
|
);
|
|
344
235
|
|
|
345
|
-
const
|
|
236
|
+
const identityCreateTransitionJS = getIdentityCreateTransitionFixture(oneTimePrivateKey);
|
|
237
|
+
const identityCreateTransition = new IdentityCreateTransition(
|
|
238
|
+
identityCreateTransitionJS.toObject(),
|
|
239
|
+
);
|
|
346
240
|
|
|
347
241
|
await identityCreateTransition.signByPrivateKey(
|
|
348
|
-
oneTimePrivateKey,
|
|
242
|
+
oneTimePrivateKey.toBuffer(),
|
|
349
243
|
IdentityPublicKey.TYPES.ECDSA_SECP256K1,
|
|
350
244
|
);
|
|
351
245
|
|
|
@@ -359,22 +253,6 @@ describe('StateTransitionFacade', () => {
|
|
|
359
253
|
});
|
|
360
254
|
|
|
361
255
|
describe('validateFee', () => {
|
|
362
|
-
it('should throw MissingOption if stateRepository is not set', async () => {
|
|
363
|
-
dpp = new DashPlatformProtocol();
|
|
364
|
-
await dpp.initialize();
|
|
365
|
-
|
|
366
|
-
try {
|
|
367
|
-
await dpp.stateTransition.validateFee(
|
|
368
|
-
dataContractCreateTransition,
|
|
369
|
-
);
|
|
370
|
-
|
|
371
|
-
expect.fail('MissingOption should be thrown');
|
|
372
|
-
} catch (e) {
|
|
373
|
-
expect(e).to.be.an.instanceOf(MissingOptionError);
|
|
374
|
-
expect(e.getOptionName()).to.equal('stateRepository');
|
|
375
|
-
}
|
|
376
|
-
});
|
|
377
|
-
|
|
378
256
|
it('should validate State Transition', async () => {
|
|
379
257
|
const result = await dpp.stateTransition.validateFee(
|
|
380
258
|
dataContractCreateTransition,
|
|
@@ -386,22 +264,6 @@ describe('StateTransitionFacade', () => {
|
|
|
386
264
|
});
|
|
387
265
|
|
|
388
266
|
describe('validateState', () => {
|
|
389
|
-
it('should throw MissingOption if stateRepository is not set', async () => {
|
|
390
|
-
dpp = new DashPlatformProtocol();
|
|
391
|
-
await dpp.initialize();
|
|
392
|
-
|
|
393
|
-
try {
|
|
394
|
-
await dpp.stateTransition.validateState(
|
|
395
|
-
dataContractCreateTransition,
|
|
396
|
-
);
|
|
397
|
-
|
|
398
|
-
expect.fail('MissingOption should be thrown');
|
|
399
|
-
} catch (e) {
|
|
400
|
-
expect(e).to.be.an.instanceOf(MissingOptionError);
|
|
401
|
-
expect(e.getOptionName()).to.equal('stateRepository');
|
|
402
|
-
}
|
|
403
|
-
});
|
|
404
|
-
|
|
405
267
|
it('should validate State Transition', async () => {
|
|
406
268
|
const result = await dpp.stateTransition.validateState(
|
|
407
269
|
dataContractCreateTransition,
|
package/test/integration/stateTransition/calculateStateTransitionFeeFromOperationsFactory.spec.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const calculateStateTransitionFeeFromOperationsFactory = require('@dashevo/dpp/lib/stateTransition/fee/calculateStateTransitionFeeFromOperationsFactory');
|
|
2
|
+
const generateRandomIdentifier = require('@dashevo/dpp/lib/test/utils/generateRandomIdentifier');
|
|
3
|
+
|
|
4
|
+
describe('calculateStateTransitionFeeFromOperationsFactory', () => {
|
|
5
|
+
let stateTransition;
|
|
6
|
+
let calculateStateTransitionFeeFromOperations;
|
|
7
|
+
let calculateOperationFeesMock;
|
|
8
|
+
|
|
9
|
+
beforeEach(async function beforeEach() {
|
|
10
|
+
calculateOperationFeesMock = this.sinonSandbox.stub();
|
|
11
|
+
|
|
12
|
+
calculateStateTransitionFeeFromOperations = calculateStateTransitionFeeFromOperationsFactory(
|
|
13
|
+
calculateOperationFeesMock,
|
|
14
|
+
);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('should calculate fee based on executed operations', async () => {
|
|
18
|
+
const identityId = generateRandomIdentifier();
|
|
19
|
+
const storageFee = 10000;
|
|
20
|
+
const processingFee = 1000;
|
|
21
|
+
const totalRefunds = 1000 + 500;
|
|
22
|
+
const requiredAmount = storageFee - totalRefunds;
|
|
23
|
+
const desiredAmount = storageFee + processingFee - totalRefunds;
|
|
24
|
+
const feeRefunds = [
|
|
25
|
+
{
|
|
26
|
+
identifier: identityId.toBuffer(),
|
|
27
|
+
creditsPerEpoch: {
|
|
28
|
+
0: 1000,
|
|
29
|
+
1: 500,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
const calculatedOperationsFeesResult = {
|
|
35
|
+
storageFee,
|
|
36
|
+
processingFee,
|
|
37
|
+
feeRefunds,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
calculateOperationFeesMock.returns(calculatedOperationsFeesResult);
|
|
41
|
+
|
|
42
|
+
const result = calculateStateTransitionFeeFromOperations(stateTransition, identityId);
|
|
43
|
+
|
|
44
|
+
expect(result).to.deep.equal({
|
|
45
|
+
storageFee,
|
|
46
|
+
processingFee,
|
|
47
|
+
requiredAmount,
|
|
48
|
+
desiredAmount,
|
|
49
|
+
feeRefunds,
|
|
50
|
+
totalRefunds: 1500,
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
});
|
|
@@ -1,33 +1,47 @@
|
|
|
1
1
|
const crypto = require('crypto');
|
|
2
2
|
const bs58 = require('bs58');
|
|
3
|
-
|
|
4
|
-
const
|
|
3
|
+
let { Identifier, IdentifierError } = require('../..');
|
|
4
|
+
const { default: loadWasmDpp } = require('../..');
|
|
5
5
|
|
|
6
6
|
describe('Identifier', () => {
|
|
7
7
|
let buffer;
|
|
8
8
|
|
|
9
|
-
beforeEach(() => {
|
|
9
|
+
beforeEach(async () => {
|
|
10
10
|
buffer = crypto.randomBytes(32);
|
|
11
|
+
|
|
12
|
+
({ Identifier, IdentifierError } = await loadWasmDpp());
|
|
11
13
|
});
|
|
12
14
|
|
|
13
15
|
describe('#constructor', () => {
|
|
14
16
|
it('should accept Buffer', () => {
|
|
15
17
|
const identifier = new Identifier(buffer);
|
|
16
18
|
|
|
17
|
-
expect(identifier).to.be.deep.equal(buffer);
|
|
19
|
+
expect(identifier.toBuffer()).to.be.deep.equal(buffer);
|
|
18
20
|
expect(identifier).to.be.an.instanceOf(Identifier);
|
|
19
21
|
});
|
|
20
22
|
|
|
21
23
|
it('should throw error if first argument is not Buffer', () => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
try {
|
|
25
|
+
// eslint-disable-next-line no-unused-vars
|
|
26
|
+
const id = new Identifier(1);
|
|
27
|
+
|
|
28
|
+
expect.fail('Expected to throw an error');
|
|
29
|
+
} catch (e) {
|
|
30
|
+
expect(e).to.be.instanceOf(IdentifierError);
|
|
31
|
+
expect(e.toString()).to.be.equal('IdentifierError: Identifier expects Buffer');
|
|
32
|
+
}
|
|
25
33
|
});
|
|
26
34
|
|
|
27
35
|
it('should throw error if buffer is not 32 bytes long', () => {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
try {
|
|
37
|
+
// eslint-disable-next-line no-unused-vars
|
|
38
|
+
const identifier = new Identifier(Buffer.alloc(30));
|
|
39
|
+
|
|
40
|
+
expect.fail('Expected to throw error');
|
|
41
|
+
} catch (e) {
|
|
42
|
+
expect(e).to.be.instanceOf(IdentifierError);
|
|
43
|
+
expect(e.toString()).to.be.equal('IdentifierError: Identifier must be 32 bytes long');
|
|
44
|
+
}
|
|
31
45
|
});
|
|
32
46
|
});
|
|
33
47
|
|
|
@@ -39,25 +53,6 @@ describe('Identifier', () => {
|
|
|
39
53
|
});
|
|
40
54
|
});
|
|
41
55
|
|
|
42
|
-
describe('#encodeCBOR', () => {
|
|
43
|
-
let encoderMock;
|
|
44
|
-
|
|
45
|
-
beforeEach(function before() {
|
|
46
|
-
encoderMock = {
|
|
47
|
-
pushAny: this.sinonSandbox.stub(),
|
|
48
|
-
};
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
it('should encode using cbor encoder', () => {
|
|
52
|
-
const identifier = new Identifier(buffer);
|
|
53
|
-
|
|
54
|
-
const result = identifier.encodeCBOR(encoderMock);
|
|
55
|
-
|
|
56
|
-
expect(result).to.be.true();
|
|
57
|
-
expect(encoderMock.pushAny).to.be.calledOnceWithExactly(buffer);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
|
|
61
56
|
describe('#toJSON', () => {
|
|
62
57
|
it('should return a base58 encoded string', () => {
|
|
63
58
|
const identifier = new Identifier(buffer);
|
|
@@ -93,13 +88,18 @@ describe('Identifier', () => {
|
|
|
93
88
|
const identifier = Identifier.from(buffer);
|
|
94
89
|
|
|
95
90
|
expect(identifier).to.be.an.instanceOf(Identifier);
|
|
96
|
-
expect(identifier).to.deep.equal(buffer);
|
|
91
|
+
expect(identifier.toBuffer()).to.deep.equal(buffer);
|
|
97
92
|
});
|
|
98
93
|
|
|
99
|
-
it('should throw error if buffer is passed among with encoding',
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
94
|
+
it('should throw error if buffer is passed among with encoding', () => {
|
|
95
|
+
try {
|
|
96
|
+
Identifier.from(buffer, 'base64');
|
|
97
|
+
|
|
98
|
+
expect.fail('Expected to throw error');
|
|
99
|
+
} catch (e) {
|
|
100
|
+
expect(e).to.be.instanceOf(IdentifierError);
|
|
101
|
+
expect(e.toString()).to.be.equal('IdentifierError: encoding accepted only with type string');
|
|
102
|
+
}
|
|
103
103
|
});
|
|
104
104
|
|
|
105
105
|
it('should create an instance with a base58 string', () => {
|
|
@@ -108,7 +108,7 @@ describe('Identifier', () => {
|
|
|
108
108
|
const identifier = Identifier.from(string);
|
|
109
109
|
|
|
110
110
|
expect(identifier).to.be.an.instanceOf(Identifier);
|
|
111
|
-
expect(identifier).to.deep.equal(buffer);
|
|
111
|
+
expect(identifier.toBuffer()).to.deep.equal(buffer);
|
|
112
112
|
});
|
|
113
113
|
|
|
114
114
|
it('should create an instance with a base64 string', () => {
|
|
@@ -117,7 +117,7 @@ describe('Identifier', () => {
|
|
|
117
117
|
const identifier = Identifier.from(string, 'base64');
|
|
118
118
|
|
|
119
119
|
expect(identifier).to.be.an.instanceOf(Identifier);
|
|
120
|
-
expect(identifier).to.deep.equal(buffer);
|
|
120
|
+
expect(identifier.toBuffer()).to.deep.equal(buffer);
|
|
121
121
|
});
|
|
122
122
|
});
|
|
123
123
|
});
|