@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,159 +1,107 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
const DataContractCreateTransition = require('@dashevo/dpp/lib/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition');
|
|
1
|
+
const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
|
|
4
2
|
|
|
5
|
-
const
|
|
3
|
+
const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
6
4
|
|
|
7
|
-
const
|
|
5
|
+
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
8
6
|
|
|
9
|
-
const
|
|
7
|
+
const { default: loadWasmDpp } = require('../../../dist');
|
|
8
|
+
const getBlsAdapterMock = require('../../../lib/test/mocks/getBlsAdapterMock');
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const SomeConsensusError = require('@dashevo/dpp/lib/test/mocks/SomeConsensusError');
|
|
10
|
+
describe('StateTransitionFactory', function main() {
|
|
11
|
+
this.timeout(100000);
|
|
14
12
|
|
|
15
|
-
describe('StateTransitionFactory', () => {
|
|
16
|
-
let validateStateTransitionBasicMock;
|
|
17
|
-
let createStateTransitionMock;
|
|
18
13
|
let factory;
|
|
19
14
|
let stateTransition;
|
|
20
15
|
let rawStateTransition;
|
|
21
|
-
let
|
|
22
|
-
let
|
|
16
|
+
let stateRepositoryMock;
|
|
17
|
+
let StateTransitionFactory;
|
|
18
|
+
let DataContractCreateTransition;
|
|
19
|
+
let InvalidStateTransitionError;
|
|
20
|
+
let MissingStateTransitionTypeError;
|
|
21
|
+
|
|
22
|
+
before(async () => {
|
|
23
|
+
({
|
|
24
|
+
DataContractCreateTransition,
|
|
25
|
+
StateTransitionFactory,
|
|
26
|
+
InvalidStateTransitionError,
|
|
27
|
+
MissingStateTransitionTypeError,
|
|
28
|
+
} = await loadWasmDpp());
|
|
29
|
+
});
|
|
23
30
|
|
|
24
|
-
beforeEach(function beforeEach() {
|
|
31
|
+
beforeEach(async function beforeEach() {
|
|
25
32
|
const dataContract = getDataContractFixture();
|
|
26
33
|
|
|
34
|
+
const rawDataContract = dataContract.toObject();
|
|
35
|
+
|
|
27
36
|
stateTransition = new DataContractCreateTransition({
|
|
28
|
-
|
|
37
|
+
protocolVersion: protocolVersion.latestVersion,
|
|
38
|
+
dataContract: rawDataContract,
|
|
29
39
|
entropy: dataContract.getEntropy(),
|
|
40
|
+
signature: Buffer.alloc(65),
|
|
41
|
+
signaturePublicKeyId: 0,
|
|
30
42
|
});
|
|
31
43
|
rawStateTransition = stateTransition.toObject();
|
|
32
44
|
|
|
33
|
-
|
|
45
|
+
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
34
46
|
|
|
35
|
-
|
|
36
|
-
createStateTransitionMock = this.sinonSandbox.stub().returns(stateTransition);
|
|
37
|
-
|
|
38
|
-
dppMock = createDPPMock();
|
|
47
|
+
const blsAdapter = await getBlsAdapterMock();
|
|
39
48
|
|
|
40
49
|
factory = new StateTransitionFactory(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
dppMock,
|
|
44
|
-
decodeProtocolEntityMock,
|
|
50
|
+
stateRepositoryMock,
|
|
51
|
+
blsAdapter,
|
|
45
52
|
);
|
|
46
53
|
});
|
|
47
54
|
|
|
48
55
|
describe('createFromObject', () => {
|
|
49
56
|
it('should return new State Transition with data from passed object', async () => {
|
|
50
|
-
validateStateTransitionBasicMock.returns(new ValidationResult());
|
|
51
|
-
|
|
52
57
|
const result = await factory.createFromObject(rawStateTransition);
|
|
53
58
|
|
|
54
|
-
expect(result).to.equal(stateTransition);
|
|
55
|
-
|
|
56
|
-
expect(validateStateTransitionBasicMock).to.have.been.calledOnceWith(rawStateTransition);
|
|
57
|
-
|
|
58
|
-
expect(createStateTransitionMock).to.have.been.calledOnceWith(rawStateTransition);
|
|
59
|
+
expect(result.toObject()).to.deep.equal(stateTransition.toObject());
|
|
59
60
|
});
|
|
60
61
|
|
|
61
62
|
it('should return new State Transition without validation if "skipValidation" option is passed', async () => {
|
|
62
63
|
const result = await factory.createFromObject(rawStateTransition, { skipValidation: true });
|
|
63
64
|
|
|
64
|
-
expect(result).to.equal(stateTransition);
|
|
65
|
-
|
|
66
|
-
expect(validateStateTransitionBasicMock).to.have.not.been.called();
|
|
67
|
-
|
|
68
|
-
expect(createStateTransitionMock).to.have.been.calledOnceWith(rawStateTransition);
|
|
65
|
+
expect(result.toObject()).to.deep.equal(stateTransition.toObject());
|
|
69
66
|
});
|
|
70
67
|
|
|
71
|
-
it('should throw
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
validateStateTransitionBasicMock.returns(new ValidationResult([validationError]));
|
|
68
|
+
it('should throw InvalidStateTransition error in case validation failed', async () => {
|
|
69
|
+
rawStateTransition.type = undefined;
|
|
75
70
|
|
|
76
71
|
try {
|
|
77
72
|
await factory.createFromObject(rawStateTransition);
|
|
78
|
-
|
|
79
|
-
expect.fail('InvalidStateTransitionError is not thrown');
|
|
73
|
+
expect.fail('should throw an error');
|
|
80
74
|
} catch (e) {
|
|
81
75
|
expect(e).to.be.an.instanceOf(InvalidStateTransitionError);
|
|
82
|
-
expect(e.getRawStateTransition()).to.equal(rawStateTransition);
|
|
83
|
-
|
|
84
|
-
expect(e.getErrors()).to.have.length(1);
|
|
85
76
|
|
|
86
|
-
const [
|
|
77
|
+
const [error] = e.getErrors();
|
|
87
78
|
|
|
88
|
-
expect(
|
|
89
|
-
|
|
90
|
-
expect(validateStateTransitionBasicMock).to.have.been.calledOnceWith(
|
|
91
|
-
rawStateTransition,
|
|
92
|
-
);
|
|
79
|
+
expect(error).to.be.an.instanceOf(MissingStateTransitionTypeError);
|
|
93
80
|
}
|
|
94
81
|
});
|
|
95
82
|
});
|
|
96
83
|
|
|
97
84
|
describe('createFromBuffer', () => {
|
|
98
|
-
let serializedStateTransition;
|
|
99
|
-
|
|
100
|
-
beforeEach(function beforeEach() {
|
|
101
|
-
this.sinonSandbox.stub(factory, 'createFromObject');
|
|
102
|
-
|
|
103
|
-
serializedStateTransition = stateTransition.toBuffer();
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
afterEach(() => {
|
|
107
|
-
factory.createFromObject.restore();
|
|
108
|
-
});
|
|
109
|
-
|
|
110
85
|
it('should return new State Transition from serialized contract', async () => {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
factory.createFromObject.resolves(stateTransition);
|
|
114
|
-
|
|
115
|
-
const result = await factory.createFromBuffer(serializedStateTransition);
|
|
86
|
+
const result = await factory.createFromBuffer(stateTransition.toBuffer());
|
|
116
87
|
|
|
117
|
-
expect(result).to.equal(stateTransition);
|
|
118
|
-
|
|
119
|
-
expect(factory.createFromObject).to.have.been.calledOnceWith(rawStateTransition);
|
|
120
|
-
|
|
121
|
-
expect(decodeProtocolEntityMock).to.have.been.calledOnceWith(
|
|
122
|
-
serializedStateTransition,
|
|
123
|
-
);
|
|
88
|
+
expect(result.toObject()).to.deep.equal(stateTransition.toObject());
|
|
124
89
|
});
|
|
125
90
|
|
|
126
|
-
it('should throw
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
);
|
|
131
|
-
|
|
132
|
-
decodeProtocolEntityMock.throws(parsingError);
|
|
91
|
+
it('should throw InvalidStateTransition error in case validation failed', async () => {
|
|
92
|
+
// CBOR that have invalid "type" property
|
|
93
|
+
const stateTransitionHex = '01a56c64617461436f6e7472616374a66f70726f746f636f6c56657273696f6e0163246964982018a318b611186f184718781848187d186318441830182c185518fe18e318ff188b18eb185918490218ac1831187b1873184a182c18d9189b1886182418bf6724736368656d61783468747470733a2f2f736368656d612e646173682e6f72672f6470702d302d342d302f6d6574612f646174612d636f6e74726163746776657273696f6e01676f776e657249649820187618a6185c189e18651833183d18aa02189e0d18a61869182818c107183e188908184f183818d018220418c01839161860187418ae18dd189969646f63756d656e7473a76f696e6465786564446f63756d656e74a56474797065666f626a65637467696e646963657386a3646e616d6566696e646578316a70726f7065727469657382a168246f776e6572496463617363a16966697273744e616d656361736366756e69717565f5a3646e616d6566696e646578326a70726f7065727469657382a168246f776e6572496463617363a1686c6173744e616d656361736366756e69717565f5a3646e616d6566696e646578336a70726f7065727469657381a1686c6173744e616d656361736366756e69717565f4a2646e616d6566696e646578346a70726f7065727469657382a16a2463726561746564417463617363a16a2475706461746564417463617363a2646e616d6566696e646578356a70726f7065727469657381a16a2475706461746564417463617363a2646e616d6566696e646578366a70726f7065727469657381a16a24637265617465644174636173636a70726f70657274696573a36966697273744e616d65a2647479706566737472696e67696d61784c656e677468183f686c6173744e616d65a2647479706566737472696e67696d61784c656e677468183f6d6f7468657250726f7065727479a2647479706566737472696e67696d61784c656e677468182a687265717569726564846966697273744e616d656a246372656174656441746a24757064617465644174686c6173744e616d65746164646974696f6e616c50726f70657274696573f46c6e696365446f63756d656e74a46474797065666f626a6563746a70726f70657274696573a1646e616d65a1647479706566737472696e67687265717569726564816a24637265617465644174746164646974696f6e616c50726f70657274696573f46e6e6f54696d65446f63756d656e74a36474797065666f626a6563746a70726f70657274696573a1646e616d65a1647479706566737472696e67746164646974696f6e616c50726f70657274696573f4781d6f7074696f6e616c556e69717565496e6465786564446f63756d656e74a56474797065666f626a6563746a70726f70657274696573a46966697273744e616d65a2647479706566737472696e67696d61784c656e677468183f686c6173744e616d65a2647479706566737472696e67696d61784c656e677468183f67636f756e747279a2647479706566737472696e67696d61784c656e677468183f6463697479a2647479706566737472696e67696d61784c656e677468183f67696e646963657383a3646e616d6566696e646578316a70726f7065727469657381a16966697273744e616d656361736366756e69717565f5a3646e616d6566696e646578326a70726f7065727469657383a168246f776e6572496463617363a16966697273744e616d6563617363a1686c6173744e616d656361736366756e69717565f5a3646e616d6566696e646578336a70726f7065727469657382a167636f756e74727963617363a164636974796361736366756e69717565f5687265717569726564826966697273744e616d65686c6173744e616d65746164646974696f6e616c50726f70657274696573f46e707265747479446f63756d656e74a46474797065666f626a6563746a70726f70657274696573a1686c6173744e616d65a1647479706566737472696e6768726571756972656482686c6173744e616d656a24757064617465644174746164646974696f6e616c50726f70657274696573f46b756e697175654461746573a56474797065666f626a65637467696e646963657382a3646e616d6566696e646578316a70726f7065727469657382a16a2463726561746564417463617363a16a247570646174656441746361736366756e69717565f5a2646e616d6566696e646578326a70726f7065727469657381a16a24757064617465644174636173636a70726f70657274696573a26966697273744e616d65a1647479706566737472696e67686c6173744e616d65a1647479706566737472696e67687265717569726564836966697273744e616d656a246372656174656441746a24757064617465644174746164646974696f6e616c50726f70657274696573f46e7769746842797465417272617973a56474797065666f626a65637467696e646963657381a2646e616d6566696e646578316a70726f7065727469657381a16e6279746541727261794669656c64636173636a70726f70657274696573a26e6279746541727261794669656c64a3647479706565617272617969627974654172726179f5686d61784974656d73106f6964656e7469666965724669656c64a5647479706565617272617969627974654172726179f570636f6e74656e744d656469615479706578216170706c69636174696f6e2f782e646173682e6470702e6964656e746966696572686d696e4974656d731820686d61784974656d731820687265717569726564816e6279746541727261794669656c64746164646974696f6e616c50726f70657274696573f464747970652267656e74726f70799820189618d10418b2071882188e188818fc18b7189818dd185c18811881189b1867187912183d184d187118ff1866181d185f1839188718ea1824185113747369676e61747572655075626c69634b6579496400697369676e617475726598410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
|
|
94
|
+
const stateTransitionBuffer = Buffer.from(stateTransitionHex, 'hex');
|
|
133
95
|
|
|
134
96
|
try {
|
|
135
|
-
await factory.createFromBuffer(
|
|
136
|
-
|
|
137
|
-
expect.fail('should throw InvalidStateTransitionError');
|
|
97
|
+
await factory.createFromBuffer(stateTransitionBuffer);
|
|
98
|
+
expect.fail('should throw an error');
|
|
138
99
|
} catch (e) {
|
|
139
100
|
expect(e).to.be.an.instanceOf(InvalidStateTransitionError);
|
|
140
101
|
|
|
141
|
-
const [
|
|
142
|
-
expect(innerError).to.be.equal(parsingError);
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
it('should throw an error if decoding fails with any other error', async () => {
|
|
147
|
-
const otherParsingError = new Error();
|
|
148
|
-
|
|
149
|
-
decodeProtocolEntityMock.throws(otherParsingError);
|
|
102
|
+
const [error] = e.getErrors();
|
|
150
103
|
|
|
151
|
-
|
|
152
|
-
await factory.createFromBuffer(serializedStateTransition);
|
|
153
|
-
|
|
154
|
-
expect.fail('should throw an error');
|
|
155
|
-
} catch (e) {
|
|
156
|
-
expect(e).to.be.equal(otherParsingError);
|
|
104
|
+
expect(error).to.be.an.instanceOf(MissingStateTransitionTypeError);
|
|
157
105
|
}
|
|
158
106
|
});
|
|
159
107
|
});
|
|
@@ -2,7 +2,6 @@ const validateStateTransitionFeeFactory = require('@dashevo/dpp/lib/stateTransit
|
|
|
2
2
|
|
|
3
3
|
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
4
4
|
|
|
5
|
-
const getIdentityFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityFixture');
|
|
6
5
|
const getDocumentsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentsFixture');
|
|
7
6
|
const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
8
7
|
const getIdentityCreateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityCreateTransitionFixture');
|
|
@@ -23,20 +22,19 @@ const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransitio
|
|
|
23
22
|
describe('validateStateTransitionFeeFactory', () => {
|
|
24
23
|
let stateRepositoryMock;
|
|
25
24
|
let validateStateTransitionFee;
|
|
26
|
-
let identity;
|
|
27
25
|
let dataContract;
|
|
28
26
|
let calculateStateTransitionFeeMock;
|
|
29
27
|
let fetchAssetLockTransactionOutputMock;
|
|
30
28
|
|
|
31
29
|
beforeEach(function beforeEach() {
|
|
32
|
-
identity = getIdentityFixture();
|
|
33
|
-
|
|
34
30
|
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
35
|
-
stateRepositoryMock.fetchIdentity.resolves(identity);
|
|
36
31
|
|
|
37
32
|
const output = getIdentityCreateTransitionFixture().getAssetLockProof().getOutput();
|
|
38
33
|
|
|
39
|
-
calculateStateTransitionFeeMock = this.sinonSandbox.stub().returns(
|
|
34
|
+
calculateStateTransitionFeeMock = this.sinonSandbox.stub().returns({
|
|
35
|
+
desiredAmount: 42,
|
|
36
|
+
});
|
|
37
|
+
|
|
40
38
|
fetchAssetLockTransactionOutputMock = this.sinonSandbox.stub().resolves(output);
|
|
41
39
|
|
|
42
40
|
validateStateTransitionFee = validateStateTransitionFeeFactory(
|
|
@@ -59,7 +57,7 @@ describe('validateStateTransitionFeeFactory', () => {
|
|
|
59
57
|
});
|
|
60
58
|
|
|
61
59
|
it('should return invalid result if balance is not enough', async () => {
|
|
62
|
-
|
|
60
|
+
stateRepositoryMock.fetchIdentityBalance.resolves(1);
|
|
63
61
|
|
|
64
62
|
const result = await validateStateTransitionFee(dataContractCreateTransition);
|
|
65
63
|
|
|
@@ -68,9 +66,9 @@ describe('validateStateTransitionFeeFactory', () => {
|
|
|
68
66
|
const [error] = result.getErrors();
|
|
69
67
|
|
|
70
68
|
expect(error.getCode()).to.equal(3000);
|
|
71
|
-
expect(error.getBalance()).to.equal(
|
|
69
|
+
expect(error.getBalance()).to.equal(1);
|
|
72
70
|
|
|
73
|
-
expect(stateRepositoryMock.
|
|
71
|
+
expect(stateRepositoryMock.fetchIdentityBalance).to.be.calledOnceWithExactly(
|
|
74
72
|
dataContract.getOwnerId(),
|
|
75
73
|
dataContractCreateTransition.getExecutionContext(),
|
|
76
74
|
);
|
|
@@ -83,13 +81,13 @@ describe('validateStateTransitionFeeFactory', () => {
|
|
|
83
81
|
});
|
|
84
82
|
|
|
85
83
|
it('should return valid result', async () => {
|
|
86
|
-
|
|
84
|
+
stateRepositoryMock.fetchIdentityBalance.resolves(42);
|
|
87
85
|
|
|
88
86
|
const result = await validateStateTransitionFee(dataContractCreateTransition);
|
|
89
87
|
|
|
90
88
|
expect(result.isValid()).to.be.true();
|
|
91
89
|
|
|
92
|
-
expect(stateRepositoryMock.
|
|
90
|
+
expect(stateRepositoryMock.fetchIdentityBalance).to.be.calledOnceWithExactly(
|
|
93
91
|
dataContract.getOwnerId(),
|
|
94
92
|
dataContractCreateTransition.getExecutionContext(),
|
|
95
93
|
);
|
|
@@ -120,7 +118,7 @@ describe('validateStateTransitionFeeFactory', () => {
|
|
|
120
118
|
});
|
|
121
119
|
|
|
122
120
|
it('should return invalid result if balance is not enough', async () => {
|
|
123
|
-
|
|
121
|
+
stateRepositoryMock.fetchIdentityBalance.resolves(1);
|
|
124
122
|
|
|
125
123
|
const result = await validateStateTransitionFee(documentsBatchTransition);
|
|
126
124
|
|
|
@@ -129,9 +127,9 @@ describe('validateStateTransitionFeeFactory', () => {
|
|
|
129
127
|
const [error] = result.getErrors();
|
|
130
128
|
|
|
131
129
|
expect(error.getCode()).to.equal(3000);
|
|
132
|
-
expect(error.getBalance()).to.equal(
|
|
130
|
+
expect(error.getBalance()).to.equal(1);
|
|
133
131
|
|
|
134
|
-
expect(stateRepositoryMock.
|
|
132
|
+
expect(stateRepositoryMock.fetchIdentityBalance).to.be.calledOnceWithExactly(
|
|
135
133
|
getDocumentsFixture.ownerId,
|
|
136
134
|
documentsBatchTransition.getExecutionContext(),
|
|
137
135
|
);
|
|
@@ -144,13 +142,13 @@ describe('validateStateTransitionFeeFactory', () => {
|
|
|
144
142
|
});
|
|
145
143
|
|
|
146
144
|
it('should return valid result', async () => {
|
|
147
|
-
|
|
145
|
+
stateRepositoryMock.fetchIdentityBalance.resolves(42);
|
|
148
146
|
|
|
149
147
|
const result = await validateStateTransitionFee(documentsBatchTransition);
|
|
150
148
|
|
|
151
149
|
expect(result.isValid()).to.be.true();
|
|
152
150
|
|
|
153
|
-
expect(stateRepositoryMock.
|
|
151
|
+
expect(stateRepositoryMock.fetchIdentityBalance).to.be.calledOnceWithExactly(
|
|
154
152
|
getDocumentsFixture.ownerId,
|
|
155
153
|
documentsBatchTransition.getExecutionContext(),
|
|
156
154
|
);
|
|
@@ -172,7 +170,7 @@ describe('validateStateTransitionFeeFactory', () => {
|
|
|
172
170
|
expect(result.isValid()).to.be.true();
|
|
173
171
|
|
|
174
172
|
expect(calculateStateTransitionFeeMock).to.be.not.called();
|
|
175
|
-
expect(stateRepositoryMock.
|
|
173
|
+
expect(stateRepositoryMock.fetchIdentityBalance).to.be.calledOnceWithExactly(
|
|
176
174
|
getDocumentsFixture.ownerId,
|
|
177
175
|
documentsBatchTransition.getExecutionContext(),
|
|
178
176
|
);
|
|
@@ -195,7 +193,7 @@ describe('validateStateTransitionFeeFactory', () => {
|
|
|
195
193
|
});
|
|
196
194
|
|
|
197
195
|
it('should return invalid result if asset lock output amount is not enough', async () => {
|
|
198
|
-
calculateStateTransitionFeeMock.returns(outputAmount + 1);
|
|
196
|
+
calculateStateTransitionFeeMock.returns({ desiredAmount: outputAmount + 1 });
|
|
199
197
|
|
|
200
198
|
const result = await validateStateTransitionFee(identityCreateTransition);
|
|
201
199
|
|
|
@@ -269,9 +267,9 @@ describe('validateStateTransitionFeeFactory', () => {
|
|
|
269
267
|
});
|
|
270
268
|
|
|
271
269
|
it('should return invalid result if sum of balance and asset lock output amount is not enough', async () => {
|
|
272
|
-
|
|
270
|
+
stateRepositoryMock.fetchIdentityBalanceWithDebt.resolves(1);
|
|
273
271
|
|
|
274
|
-
calculateStateTransitionFeeMock.returns(outputAmount + 2);
|
|
272
|
+
calculateStateTransitionFeeMock.returns({ desiredAmount: outputAmount + 2 });
|
|
275
273
|
|
|
276
274
|
const result = await validateStateTransitionFee(identityTopUpTransition);
|
|
277
275
|
|
|
@@ -280,9 +278,9 @@ describe('validateStateTransitionFeeFactory', () => {
|
|
|
280
278
|
const [error] = result.getErrors();
|
|
281
279
|
|
|
282
280
|
expect(error.getCode()).to.equal(3000);
|
|
283
|
-
expect(error.getBalance()).to.equal(outputAmount +
|
|
281
|
+
expect(error.getBalance()).to.equal(outputAmount + 1);
|
|
284
282
|
|
|
285
|
-
expect(stateRepositoryMock.
|
|
283
|
+
expect(stateRepositoryMock.fetchIdentityBalanceWithDebt).to.be.calledOnceWithExactly(
|
|
286
284
|
identityTopUpTransition.getIdentityId(),
|
|
287
285
|
identityTopUpTransition.getExecutionContext(),
|
|
288
286
|
);
|
|
@@ -298,7 +296,7 @@ describe('validateStateTransitionFeeFactory', () => {
|
|
|
298
296
|
});
|
|
299
297
|
|
|
300
298
|
it('should return valid result', async () => {
|
|
301
|
-
|
|
299
|
+
stateRepositoryMock.fetchIdentityBalanceWithDebt.resolves(41);
|
|
302
300
|
|
|
303
301
|
calculateStateTransitionFeeMock.returns(outputAmount - 1);
|
|
304
302
|
|
|
@@ -306,7 +304,7 @@ describe('validateStateTransitionFeeFactory', () => {
|
|
|
306
304
|
|
|
307
305
|
expect(result.isValid()).to.be.true();
|
|
308
306
|
|
|
309
|
-
expect(stateRepositoryMock.
|
|
307
|
+
expect(stateRepositoryMock.fetchIdentityBalanceWithDebt).to.be.calledOnceWithExactly(
|
|
310
308
|
identityTopUpTransition.getIdentityId(),
|
|
311
309
|
identityTopUpTransition.getExecutionContext(),
|
|
312
310
|
);
|
|
@@ -335,7 +333,7 @@ describe('validateStateTransitionFeeFactory', () => {
|
|
|
335
333
|
identityTopUpTransition.getAssetLockProof(),
|
|
336
334
|
identityTopUpTransition.getExecutionContext(),
|
|
337
335
|
);
|
|
338
|
-
expect(stateRepositoryMock.
|
|
336
|
+
expect(stateRepositoryMock.fetchIdentityBalanceWithDebt).to.be.calledOnceWithExactly(
|
|
339
337
|
identityTopUpTransition.getIdentityId(),
|
|
340
338
|
identityTopUpTransition.getExecutionContext(),
|
|
341
339
|
);
|
package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js
CHANGED
|
@@ -1,69 +1,84 @@
|
|
|
1
|
-
const
|
|
1
|
+
const { Transaction, PrivateKey, Script } = require('@dashevo/dashcore-lib');
|
|
2
2
|
|
|
3
3
|
const getIdentityCreateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityCreateTransitionFixture');
|
|
4
|
-
const
|
|
4
|
+
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
5
|
+
const getIdentityTopUpTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityTopUpTransitionFixture');
|
|
6
|
+
const { expectValidationError } = require('../../../../lib/test/expect/expectError');
|
|
5
7
|
|
|
6
|
-
const {
|
|
7
|
-
|
|
8
|
-
const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
|
|
9
|
-
const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
|
|
8
|
+
const { default: loadWasmDpp } = require('../../../../dist');
|
|
10
9
|
|
|
11
10
|
describe('validateStateTransitionKeySignatureFactory', () => {
|
|
12
|
-
let publicKeyHash;
|
|
13
11
|
let stateTransition;
|
|
14
|
-
let
|
|
15
|
-
let verifyHashSignatureMock;
|
|
12
|
+
let stateRepositoryMock;
|
|
16
13
|
let validateStateTransitionKeySignature;
|
|
17
|
-
let fetchAssetLockPublicKeyHashMock;
|
|
18
|
-
let executionContext;
|
|
19
|
-
|
|
20
|
-
beforeEach(function beforeEach() {
|
|
21
|
-
publicKeyHash = Buffer.alloc(20).fill(1);
|
|
22
14
|
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
let InvalidStateTransitionSignatureError;
|
|
16
|
+
let StateTransitionKeySignatureValidator;
|
|
17
|
+
let StateTransitionExecutionContext;
|
|
18
|
+
let IdentityCreateTransition;
|
|
19
|
+
let IdentityTopUpTransition;
|
|
20
|
+
let IdentityNotFoundError;
|
|
21
|
+
let ValidationResult;
|
|
22
|
+
|
|
23
|
+
before(async () => {
|
|
24
|
+
({
|
|
25
|
+
InvalidStateTransitionSignatureError,
|
|
26
|
+
StateTransitionKeySignatureValidator,
|
|
27
|
+
StateTransitionExecutionContext,
|
|
28
|
+
IdentityCreateTransition,
|
|
29
|
+
IdentityTopUpTransition,
|
|
30
|
+
IdentityNotFoundError,
|
|
31
|
+
ValidationResult,
|
|
32
|
+
} = await loadWasmDpp());
|
|
33
|
+
});
|
|
25
34
|
|
|
26
|
-
|
|
35
|
+
beforeEach(function beforeEach() {
|
|
36
|
+
const stateTransitionJS = getIdentityCreateTransitionFixture();
|
|
37
|
+
const rawStateTransition = stateTransitionJS.toObject();
|
|
27
38
|
|
|
28
|
-
stateTransition
|
|
39
|
+
stateTransition = new IdentityCreateTransition(rawStateTransition);
|
|
29
40
|
|
|
30
|
-
|
|
41
|
+
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
31
42
|
|
|
32
|
-
|
|
43
|
+
const validator = new StateTransitionKeySignatureValidator(stateRepositoryMock);
|
|
33
44
|
|
|
34
|
-
validateStateTransitionKeySignature =
|
|
35
|
-
verifyHashSignatureMock,
|
|
36
|
-
fetchAssetLockPublicKeyHashMock,
|
|
37
|
-
);
|
|
45
|
+
validateStateTransitionKeySignature = (st) => validator.validate(st);
|
|
38
46
|
});
|
|
39
47
|
|
|
40
48
|
it('should return invalid result if signature is not valid', async () => {
|
|
41
|
-
verifyHashSignatureMock.returns(false);
|
|
42
|
-
|
|
43
49
|
const result = await validateStateTransitionKeySignature(
|
|
44
50
|
stateTransition,
|
|
45
51
|
);
|
|
46
52
|
|
|
47
|
-
expectValidationError(result, InvalidStateTransitionSignatureError);
|
|
53
|
+
await expectValidationError(result, InvalidStateTransitionSignatureError);
|
|
48
54
|
|
|
49
55
|
const [error] = result.getErrors();
|
|
50
56
|
|
|
51
57
|
expect(error.getCode()).to.equal(2002);
|
|
52
|
-
|
|
53
|
-
expect(fetchAssetLockPublicKeyHashMock).to.be.calledOnceWithExactly(
|
|
54
|
-
stateTransition.getAssetLockProof(),
|
|
55
|
-
executionContext,
|
|
56
|
-
);
|
|
57
|
-
|
|
58
|
-
expect(verifyHashSignatureMock).to.be.calledOnceWithExactly(
|
|
59
|
-
stateTransitionHash,
|
|
60
|
-
stateTransition.getSignature(),
|
|
61
|
-
publicKeyHash,
|
|
62
|
-
);
|
|
63
58
|
});
|
|
64
59
|
|
|
65
60
|
it('should return valid result if signature is valid', async () => {
|
|
66
|
-
|
|
61
|
+
const rawStateTransition = stateTransition.toObject();
|
|
62
|
+
|
|
63
|
+
// Sign state transition and provide relevant public key to transaction output
|
|
64
|
+
const { transaction: rawTransaction } = rawStateTransition.assetLockProof;
|
|
65
|
+
|
|
66
|
+
const transaction = new Transaction(Buffer.from(rawTransaction));
|
|
67
|
+
|
|
68
|
+
const privateKey = new PrivateKey('9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2');
|
|
69
|
+
const publicKey = privateKey.toPublicKey();
|
|
70
|
+
|
|
71
|
+
transaction.outputs[0]
|
|
72
|
+
.setScript(Script.buildDataOut(publicKey.hash));
|
|
73
|
+
|
|
74
|
+
rawStateTransition.assetLockProof.transaction = transaction.toBuffer();
|
|
75
|
+
|
|
76
|
+
stateTransition = new IdentityCreateTransition(rawStateTransition);
|
|
77
|
+
|
|
78
|
+
await stateTransition.signByPrivateKey(
|
|
79
|
+
privateKey.toBuffer(),
|
|
80
|
+
0,
|
|
81
|
+
);
|
|
67
82
|
|
|
68
83
|
const result = await validateStateTransitionKeySignature(
|
|
69
84
|
stateTransition,
|
|
@@ -71,16 +86,28 @@ describe('validateStateTransitionKeySignatureFactory', () => {
|
|
|
71
86
|
|
|
72
87
|
expect(result).to.be.instanceof(ValidationResult);
|
|
73
88
|
expect(result.isValid()).to.be.true();
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('should return IdentityNotFoundError if identity not exist on topup transaction', async function () {
|
|
92
|
+
const stateTransitionJS = getIdentityTopUpTransitionFixture();
|
|
93
|
+
stateTransition = new IdentityTopUpTransition(stateTransitionJS.toObject());
|
|
94
|
+
stateRepositoryMock.fetchIdentityBalance.resolves(undefined);
|
|
74
95
|
|
|
75
|
-
|
|
76
|
-
stateTransition
|
|
77
|
-
executionContext,
|
|
96
|
+
const result = await validateStateTransitionKeySignature(
|
|
97
|
+
stateTransition,
|
|
78
98
|
);
|
|
79
99
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
100
|
+
await expectValidationError(result, IdentityNotFoundError);
|
|
101
|
+
|
|
102
|
+
const [error] = result.getErrors();
|
|
103
|
+
|
|
104
|
+
expect(error.getCode()).to.equal(2000);
|
|
105
|
+
|
|
106
|
+
const { match } = this.sinonSandbox;
|
|
107
|
+
expect(stateRepositoryMock.fetchIdentityBalance).to.be.calledOnceWithExactly(
|
|
108
|
+
match((identityId) => Buffer.from(identityId.toBuffer())
|
|
109
|
+
.equals(stateTransition.getIdentityId().toBuffer())),
|
|
110
|
+
match.instanceOf(StateTransitionExecutionContext),
|
|
84
111
|
);
|
|
85
112
|
});
|
|
86
113
|
});
|
|
@@ -1,48 +1,54 @@
|
|
|
1
|
-
const
|
|
2
|
-
const CompatibleProtocolVersionIsNotDefinedError = require('@dashevo/dpp/lib/errors/CompatibleProtocolVersionIsNotDefinedError');
|
|
3
|
-
const IncompatibleProtocolVersionError = require('@dashevo/dpp/lib/errors/consensus/basic/IncompatibleProtocolVersionError');
|
|
1
|
+
const { expectValidationError } = require('../../../lib/test/expect/expectError');
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
let {
|
|
4
|
+
UnsupportedProtocolVersionError,
|
|
5
|
+
CompatibleProtocolVersionIsNotDefinedError,
|
|
6
|
+
IncompatibleProtocolVersionError,
|
|
7
|
+
ProtocolVersionValidator,
|
|
8
|
+
} = require('../../..');
|
|
9
|
+
const { default: loadWasmDpp } = require('../../..');
|
|
10
10
|
|
|
11
11
|
describe('validateProtocolVersionFactory', () => {
|
|
12
|
-
let
|
|
13
|
-
let dppMock;
|
|
12
|
+
let protocolVersionValidator;
|
|
14
13
|
let versionCompatibilityMap;
|
|
15
14
|
let currentProtocolVersion;
|
|
16
15
|
let protocolVersion;
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
before(async () => {
|
|
18
|
+
({
|
|
19
|
+
UnsupportedProtocolVersionError,
|
|
20
|
+
CompatibleProtocolVersionIsNotDefinedError,
|
|
21
|
+
IncompatibleProtocolVersionError,
|
|
22
|
+
ProtocolVersionValidator,
|
|
23
|
+
} = await loadWasmDpp());
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
beforeEach(() => {
|
|
19
27
|
protocolVersion = 1;
|
|
20
28
|
currentProtocolVersion = 1;
|
|
21
29
|
|
|
22
|
-
dppMock = createDPPMock(this.sinonSandbox);
|
|
23
|
-
dppMock.getProtocolVersion.returns(currentProtocolVersion);
|
|
24
|
-
|
|
25
30
|
versionCompatibilityMap = {
|
|
26
31
|
1: 1,
|
|
27
32
|
};
|
|
28
33
|
|
|
29
|
-
|
|
30
|
-
|
|
34
|
+
protocolVersionValidator = new ProtocolVersionValidator({
|
|
35
|
+
currentProtocolVersion,
|
|
36
|
+
latestProtocolVersion: protocolVersion,
|
|
31
37
|
versionCompatibilityMap,
|
|
32
|
-
);
|
|
38
|
+
});
|
|
33
39
|
});
|
|
34
40
|
|
|
35
|
-
it('should throw UnsupportedProtocolVersionError if protocolVersion is higher than latestVersion', () => {
|
|
36
|
-
|
|
41
|
+
it('should throw UnsupportedProtocolVersionError if protocolVersion is higher than latestVersion', async () => {
|
|
42
|
+
const highVersion = protocolVersion + 1;
|
|
37
43
|
|
|
38
|
-
const result =
|
|
44
|
+
const result = protocolVersionValidator.validate(highVersion);
|
|
39
45
|
|
|
40
|
-
expectValidationError(result, UnsupportedProtocolVersionError);
|
|
46
|
+
await expectValidationError(result, UnsupportedProtocolVersionError);
|
|
41
47
|
|
|
42
48
|
const error = result.getFirstError();
|
|
43
49
|
|
|
44
|
-
expect(error.getParsedProtocolVersion()).to.equal(
|
|
45
|
-
expect(error.getLatestVersion()).to.equal(
|
|
50
|
+
expect(error.getParsedProtocolVersion()).to.equal(highVersion);
|
|
51
|
+
expect(error.getLatestVersion()).to.equal(protocolVersion);
|
|
46
52
|
expect(error.getCode()).to.equal(1002);
|
|
47
53
|
});
|
|
48
54
|
|
|
@@ -50,8 +56,14 @@ describe('validateProtocolVersionFactory', () => {
|
|
|
50
56
|
+ ' defined for the current protocol version', () => {
|
|
51
57
|
delete versionCompatibilityMap[currentProtocolVersion.toString()];
|
|
52
58
|
|
|
59
|
+
protocolVersionValidator = new ProtocolVersionValidator({
|
|
60
|
+
currentProtocolVersion,
|
|
61
|
+
latestProtocolVersion: protocolVersion,
|
|
62
|
+
versionCompatibilityMap,
|
|
63
|
+
});
|
|
64
|
+
|
|
53
65
|
try {
|
|
54
|
-
|
|
66
|
+
protocolVersionValidator.validate(protocolVersion);
|
|
55
67
|
|
|
56
68
|
expect.fail('should throw CompatibleProtocolVersionIsNotDefinedError');
|
|
57
69
|
} catch (e) {
|
|
@@ -59,7 +71,7 @@ describe('validateProtocolVersionFactory', () => {
|
|
|
59
71
|
}
|
|
60
72
|
});
|
|
61
73
|
|
|
62
|
-
it('should throw IncompatibleProtocolVersionError if parsed version is lower than compatible one', () => {
|
|
74
|
+
it('should throw IncompatibleProtocolVersionError if parsed version is lower than compatible one', async () => {
|
|
63
75
|
const minimalProtocolVersion = 1;
|
|
64
76
|
|
|
65
77
|
protocolVersion = 0;
|
|
@@ -67,9 +79,15 @@ describe('validateProtocolVersionFactory', () => {
|
|
|
67
79
|
|
|
68
80
|
versionCompatibilityMap[currentProtocolVersion.toString()] = minimalProtocolVersion;
|
|
69
81
|
|
|
70
|
-
|
|
82
|
+
protocolVersionValidator = new ProtocolVersionValidator({
|
|
83
|
+
currentProtocolVersion,
|
|
84
|
+
latestProtocolVersion: protocolVersion,
|
|
85
|
+
versionCompatibilityMap,
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
const result = protocolVersionValidator.validate(protocolVersion);
|
|
71
89
|
|
|
72
|
-
expectValidationError(result, IncompatibleProtocolVersionError);
|
|
90
|
+
await expectValidationError(result, IncompatibleProtocolVersionError);
|
|
73
91
|
|
|
74
92
|
const error = result.getFirstError();
|
|
75
93
|
|