@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,35 +1,40 @@
|
|
|
1
|
-
const { getRE2Class } = require('@dashevo/wasm-re2');
|
|
2
|
-
|
|
3
1
|
const DashCoreLib = require('@dashevo/dashcore-lib');
|
|
4
2
|
|
|
5
|
-
const createAjv = require('@dashevo/dpp/lib/ajv/createAjv');
|
|
6
|
-
|
|
7
3
|
const getInstantAssetLockFixture = require('@dashevo/dpp/lib/test/fixtures/getInstantAssetLockProofFixture');
|
|
8
|
-
const JsonSchemaValidator = require('@dashevo/dpp/lib/validation/JsonSchemaValidator');
|
|
9
4
|
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
10
|
-
const InvalidIdentityAssetLockProofError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidInstantAssetLockProofError');
|
|
11
|
-
const IdentityAssetLockProofLockedTransactionMismatchError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/IdentityAssetLockProofLockedTransactionMismatchError');
|
|
12
|
-
const InvalidIdentityAssetLockProofSignatureError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidInstantAssetLockProofSignatureError');
|
|
13
5
|
|
|
14
|
-
const {
|
|
15
|
-
|
|
16
|
-
);
|
|
6
|
+
const { expect } = require('chai');
|
|
7
|
+
const { expectJsonSchemaError, expectValidationError } = require('../../../../../../lib/test/expect/expectError');
|
|
17
8
|
|
|
18
|
-
const
|
|
19
|
-
const InvalidIdentityAssetLockTransactionError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidIdentityAssetLockTransactionError');
|
|
20
|
-
const validateInstantAssetLockProofStructureFactory = require('@dashevo/dpp/lib/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory');
|
|
9
|
+
const { default: loadWasmDpp } = require('../../../../../../dist');
|
|
21
10
|
|
|
22
11
|
describe('validateInstantAssetLockProofStructureFactory', () => {
|
|
23
12
|
let rawProof;
|
|
24
13
|
let transaction;
|
|
25
14
|
let stateRepositoryMock;
|
|
26
|
-
let
|
|
27
|
-
|
|
15
|
+
let executionContext;
|
|
16
|
+
|
|
17
|
+
let StateTransitionExecutionContext;
|
|
18
|
+
let ValidationResult;
|
|
19
|
+
let InvalidInstantAssetLockProofError;
|
|
20
|
+
let IdentityAssetLockProofLockedTransactionMismatchError;
|
|
21
|
+
let InvalidInstantAssetLockProofSignatureError;
|
|
22
|
+
let InvalidIdentityAssetLockTransactionError;
|
|
23
|
+
let InstantAssetLockProofStructureValidator;
|
|
24
|
+
|
|
28
25
|
let validateInstantAssetLockProofStructure;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
|
|
27
|
+
before(async () => {
|
|
28
|
+
({
|
|
29
|
+
StateTransitionExecutionContext,
|
|
30
|
+
ValidationResult,
|
|
31
|
+
InvalidInstantAssetLockProofError,
|
|
32
|
+
IdentityAssetLockProofLockedTransactionMismatchError,
|
|
33
|
+
InvalidInstantAssetLockProofSignatureError,
|
|
34
|
+
InvalidIdentityAssetLockTransactionError,
|
|
35
|
+
InstantAssetLockProofStructureValidator,
|
|
36
|
+
} = await loadWasmDpp());
|
|
37
|
+
});
|
|
33
38
|
|
|
34
39
|
beforeEach(async function beforeEach() {
|
|
35
40
|
const assetLock = getInstantAssetLockFixture();
|
|
@@ -37,50 +42,26 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
|
|
|
37
42
|
|
|
38
43
|
rawProof = assetLock.toObject();
|
|
39
44
|
|
|
40
|
-
const RE2 = await getRE2Class();
|
|
41
|
-
const ajv = createAjv(RE2);
|
|
42
|
-
|
|
43
|
-
jsonSchemaValidator = new JsonSchemaValidator(ajv);
|
|
44
|
-
|
|
45
45
|
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
46
46
|
stateRepositoryMock.verifyInstantLock.resolves(true);
|
|
47
|
+
stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.resolves(false);
|
|
47
48
|
|
|
48
|
-
|
|
49
|
-
txid: transaction.id,
|
|
50
|
-
verify: this.sinonSandbox.stub().resolves(true),
|
|
51
|
-
};
|
|
49
|
+
executionContext = new StateTransitionExecutionContext();
|
|
52
50
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
validateAssetLockTransactionResult = new ValidationResult();
|
|
58
|
-
validateAssetLockTransactionResult.setData({
|
|
59
|
-
publicKeyHash,
|
|
60
|
-
transaction,
|
|
61
|
-
});
|
|
62
|
-
validateAssetLockTransactionMock = this.sinonSandbox.stub().resolves(
|
|
63
|
-
validateAssetLockTransactionResult,
|
|
64
|
-
);
|
|
65
|
-
|
|
66
|
-
validateInstantAssetLockProofStructure = validateInstantAssetLockProofStructureFactory(
|
|
67
|
-
jsonSchemaValidator,
|
|
68
|
-
stateRepositoryMock,
|
|
69
|
-
validateAssetLockTransactionMock,
|
|
51
|
+
const validator = new InstantAssetLockProofStructureValidator(stateRepositoryMock);
|
|
52
|
+
validateInstantAssetLockProofStructure = (proof, context) => validator.validate(
|
|
53
|
+
proof,
|
|
54
|
+
context,
|
|
70
55
|
);
|
|
71
56
|
});
|
|
72
57
|
|
|
73
|
-
afterEach(() => {
|
|
74
|
-
instantLockFromBufferMock.restore();
|
|
75
|
-
});
|
|
76
|
-
|
|
77
58
|
describe('type', () => {
|
|
78
59
|
it('should be present', async () => {
|
|
79
60
|
delete rawProof.type;
|
|
80
61
|
|
|
81
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
62
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
82
63
|
|
|
83
|
-
expectJsonSchemaError(result);
|
|
64
|
+
await expectJsonSchemaError(result);
|
|
84
65
|
|
|
85
66
|
const [error] = result.getErrors();
|
|
86
67
|
|
|
@@ -89,16 +70,14 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
|
|
|
89
70
|
expect(error.getParams().missingProperty).to.equal('type');
|
|
90
71
|
|
|
91
72
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
92
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
93
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
94
73
|
});
|
|
95
74
|
|
|
96
75
|
it('should be equal to 0', async () => {
|
|
97
76
|
rawProof.type = -1;
|
|
98
77
|
|
|
99
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
78
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
100
79
|
|
|
101
|
-
expectJsonSchemaError(result);
|
|
80
|
+
await expectJsonSchemaError(result);
|
|
102
81
|
|
|
103
82
|
const [error] = result.getErrors();
|
|
104
83
|
|
|
@@ -106,8 +85,6 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
|
|
|
106
85
|
expect(error.getKeyword()).to.equal('const');
|
|
107
86
|
|
|
108
87
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
109
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
110
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
111
88
|
});
|
|
112
89
|
});
|
|
113
90
|
|
|
@@ -115,9 +92,9 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
|
|
|
115
92
|
it('should be present', async () => {
|
|
116
93
|
delete rawProof.instantLock;
|
|
117
94
|
|
|
118
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
95
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
119
96
|
|
|
120
|
-
expectJsonSchemaError(result);
|
|
97
|
+
await expectJsonSchemaError(result);
|
|
121
98
|
|
|
122
99
|
const [error] = result.getErrors();
|
|
123
100
|
|
|
@@ -126,35 +103,29 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
|
|
|
126
103
|
expect(error.getParams().missingProperty).to.equal('instantLock');
|
|
127
104
|
|
|
128
105
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
129
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
130
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
131
106
|
});
|
|
132
107
|
|
|
133
108
|
it('should be a byte array', async () => {
|
|
134
109
|
rawProof.instantLock = new Array(165).fill('string');
|
|
135
110
|
|
|
136
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
111
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
137
112
|
|
|
138
|
-
expectJsonSchemaError(result,
|
|
113
|
+
await expectJsonSchemaError(result, 165);
|
|
139
114
|
|
|
140
|
-
const [error
|
|
115
|
+
const [error] = result.getErrors();
|
|
141
116
|
|
|
142
117
|
expect(error.getInstancePath()).to.equal('/instantLock/0');
|
|
143
118
|
expect(error.getKeyword()).to.equal('type');
|
|
144
119
|
|
|
145
|
-
expect(byteArrayError.getKeyword()).to.equal('byteArray');
|
|
146
|
-
|
|
147
120
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
148
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
149
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
150
121
|
});
|
|
151
122
|
|
|
152
123
|
it('should not be shorter than 160 bytes', async () => {
|
|
153
124
|
rawProof.instantLock = Buffer.alloc(159);
|
|
154
125
|
|
|
155
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
126
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
156
127
|
|
|
157
|
-
expectJsonSchemaError(result);
|
|
128
|
+
await expectJsonSchemaError(result);
|
|
158
129
|
|
|
159
130
|
const [error] = result.getErrors();
|
|
160
131
|
|
|
@@ -162,16 +133,14 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
|
|
|
162
133
|
expect(error.getKeyword()).to.equal('minItems');
|
|
163
134
|
|
|
164
135
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
165
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
166
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
167
136
|
});
|
|
168
137
|
|
|
169
138
|
it('should not be longer than 100 Kb', async () => {
|
|
170
139
|
rawProof.instantLock = Buffer.alloc(100001);
|
|
171
140
|
|
|
172
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
141
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
173
142
|
|
|
174
|
-
expectJsonSchemaError(result);
|
|
143
|
+
await expectJsonSchemaError(result);
|
|
175
144
|
|
|
176
145
|
const [error] = result.getErrors();
|
|
177
146
|
|
|
@@ -179,37 +148,34 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
|
|
|
179
148
|
expect(error.getKeyword()).to.equal('maxItems');
|
|
180
149
|
|
|
181
150
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
182
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
183
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
184
151
|
});
|
|
185
152
|
|
|
186
153
|
it('should be valid', async () => {
|
|
187
|
-
const instantLockError = new Error('something is wrong');
|
|
188
|
-
|
|
189
|
-
instantLockFromBufferMock.throws(instantLockError);
|
|
190
|
-
|
|
191
154
|
rawProof.instantLock = Buffer.alloc(200);
|
|
192
155
|
|
|
193
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
194
|
-
expectValidationError(result,
|
|
156
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
157
|
+
await expectValidationError(result, InvalidInstantAssetLockProofError);
|
|
195
158
|
|
|
196
159
|
const [error] = result.getErrors();
|
|
197
160
|
|
|
198
161
|
expect(error.getCode()).to.equal(1041);
|
|
199
|
-
expect(error.getValidationError()).to.equal(instantLockError);
|
|
200
162
|
|
|
201
163
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
202
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
203
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
204
164
|
});
|
|
205
165
|
|
|
206
166
|
it('should lock the same transaction', async () => {
|
|
207
167
|
const txId = Buffer.alloc(32);
|
|
208
|
-
instantLockMock.txid = txId.toString('hex');
|
|
209
168
|
|
|
210
|
-
const
|
|
169
|
+
const instantLockParsed = new DashCoreLib.InstantLock(rawProof.instantLock);
|
|
170
|
+
instantLockParsed.txid = txId.toString('hex');
|
|
171
|
+
rawProof.instantLock = instantLockParsed.toBuffer();
|
|
172
|
+
|
|
173
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
211
174
|
|
|
212
|
-
expectValidationError(
|
|
175
|
+
await expectValidationError(
|
|
176
|
+
result,
|
|
177
|
+
IdentityAssetLockProofLockedTransactionMismatchError,
|
|
178
|
+
);
|
|
213
179
|
|
|
214
180
|
const [error] = result.getErrors();
|
|
215
181
|
|
|
@@ -217,24 +183,24 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
|
|
|
217
183
|
expect(error.getInstantLockTransactionId()).to.deep.equal(txId);
|
|
218
184
|
expect(error.getAssetLockTransactionId()).to.deep.equal(Buffer.from(transaction.id, 'hex'));
|
|
219
185
|
|
|
220
|
-
|
|
221
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
222
|
-
expect(validateAssetLockTransactionMock).to.be.calledOnce();
|
|
186
|
+
expect(stateRepositoryMock.verifyInstantLock).to.be.calledOnce();
|
|
223
187
|
});
|
|
224
188
|
|
|
225
189
|
it('should have valid signature', async () => {
|
|
226
190
|
stateRepositoryMock.verifyInstantLock.resolves(false);
|
|
227
191
|
|
|
228
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
192
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
229
193
|
|
|
230
|
-
expectValidationError(
|
|
194
|
+
await expectValidationError(
|
|
195
|
+
result,
|
|
196
|
+
InvalidInstantAssetLockProofSignatureError,
|
|
197
|
+
);
|
|
231
198
|
|
|
232
199
|
const [error] = result.getErrors();
|
|
233
200
|
|
|
234
201
|
expect(error.getCode()).to.equal(1042);
|
|
235
202
|
|
|
236
203
|
expect(stateRepositoryMock.verifyInstantLock).to.be.calledOnce();
|
|
237
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
238
204
|
});
|
|
239
205
|
});
|
|
240
206
|
|
|
@@ -242,9 +208,9 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
|
|
|
242
208
|
it('should be present', async () => {
|
|
243
209
|
delete rawProof.transaction;
|
|
244
210
|
|
|
245
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
211
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
246
212
|
|
|
247
|
-
expectJsonSchemaError(result);
|
|
213
|
+
await expectJsonSchemaError(result);
|
|
248
214
|
|
|
249
215
|
const [error] = result.getErrors();
|
|
250
216
|
|
|
@@ -253,88 +219,66 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
|
|
|
253
219
|
expect(error.getParams().missingProperty).to.equal('transaction');
|
|
254
220
|
|
|
255
221
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
256
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
257
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
258
222
|
});
|
|
259
223
|
|
|
260
224
|
it('should be a byte array', async () => {
|
|
261
225
|
rawProof.transaction = new Array(65).fill('string');
|
|
262
226
|
|
|
263
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
227
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
264
228
|
|
|
265
|
-
expectJsonSchemaError(result,
|
|
229
|
+
await expectJsonSchemaError(result, 65);
|
|
266
230
|
|
|
267
|
-
const [error
|
|
231
|
+
const [error] = result.getErrors();
|
|
268
232
|
|
|
269
233
|
expect(error.getInstancePath()).to.equal('/transaction/0');
|
|
270
234
|
expect(error.getKeyword()).to.equal('type');
|
|
271
235
|
|
|
272
|
-
expect(byteArrayError.getKeyword()).to.equal('byteArray');
|
|
273
|
-
|
|
274
236
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
275
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
276
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
277
237
|
});
|
|
278
238
|
|
|
279
239
|
it('should not be shorter than 1 byte', async () => {
|
|
280
240
|
rawProof.transaction = Buffer.alloc(0);
|
|
281
241
|
|
|
282
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
242
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
283
243
|
|
|
284
|
-
expectJsonSchemaError(result);
|
|
244
|
+
await expectJsonSchemaError(result);
|
|
285
245
|
|
|
286
246
|
const [error] = result.getErrors();
|
|
287
247
|
|
|
288
|
-
expect(error.
|
|
248
|
+
expect(error.getInstancePath()).to.equal('/transaction');
|
|
289
249
|
expect(error.getKeyword()).to.equal('minItems');
|
|
290
250
|
|
|
291
251
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
292
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
293
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
294
252
|
});
|
|
295
253
|
|
|
296
254
|
it('should not be longer than 100 Kb', async () => {
|
|
297
255
|
rawProof.transaction = Buffer.alloc(100001);
|
|
298
256
|
|
|
299
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
257
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
300
258
|
|
|
301
|
-
expectJsonSchemaError(result);
|
|
259
|
+
await expectJsonSchemaError(result);
|
|
302
260
|
|
|
303
261
|
const [error] = result.getErrors();
|
|
304
262
|
|
|
305
|
-
expect(error.
|
|
263
|
+
expect(error.getInstancePath()).to.equal('/transaction');
|
|
306
264
|
expect(error.getKeyword()).to.equal('maxItems');
|
|
307
265
|
|
|
308
266
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
309
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
310
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
311
267
|
});
|
|
312
268
|
|
|
313
269
|
it('should should be valid', async () => {
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
const consensusError = new InvalidIdentityAssetLockTransactionError(validationError.message);
|
|
270
|
+
rawProof.transaction = Buffer.alloc(1000);
|
|
317
271
|
|
|
318
|
-
|
|
272
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
319
273
|
|
|
320
|
-
|
|
321
|
-
validateAssetLockTransactionMock.resolves(validateAssetLockTransactionResult);
|
|
322
|
-
|
|
323
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
324
|
-
|
|
325
|
-
expectValidationError(result, InvalidIdentityAssetLockTransactionError);
|
|
274
|
+
await expectValidationError(result, InvalidIdentityAssetLockTransactionError);
|
|
326
275
|
|
|
327
276
|
const [error] = result.getErrors();
|
|
328
277
|
|
|
329
278
|
expect(error.getCode()).to.equal(1038);
|
|
279
|
+
expect(error.getValidationError()).to.exist();
|
|
330
280
|
|
|
331
|
-
expect(
|
|
332
|
-
|
|
333
|
-
expect(error.getValidationError()).to.equal(validationError);
|
|
334
|
-
|
|
335
|
-
// expect(stateRepositoryMock.verifyInstantLock).to.be.calledOnce();
|
|
336
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
337
|
-
expect(validateAssetLockTransactionMock).to.be.calledOnce();
|
|
281
|
+
expect(stateRepositoryMock.verifyInstantLock).to.be.calledOnce();
|
|
338
282
|
});
|
|
339
283
|
});
|
|
340
284
|
|
|
@@ -342,60 +286,62 @@ describe('validateInstantAssetLockProofStructureFactory', () => {
|
|
|
342
286
|
it('should be present', async () => {
|
|
343
287
|
delete rawProof.outputIndex;
|
|
344
288
|
|
|
345
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
289
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
346
290
|
|
|
347
|
-
expectJsonSchemaError(result);
|
|
291
|
+
await expectJsonSchemaError(result);
|
|
348
292
|
|
|
349
293
|
const [error] = result.getErrors();
|
|
350
294
|
|
|
351
|
-
expect(error.
|
|
295
|
+
expect(error.getInstancePath()).to.equal('');
|
|
352
296
|
expect(error.getKeyword()).to.equal('required');
|
|
353
297
|
expect(error.getParams().missingProperty).to.equal('outputIndex');
|
|
354
298
|
|
|
355
299
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
356
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
357
300
|
});
|
|
358
301
|
|
|
359
302
|
it('should be an integer', async () => {
|
|
360
303
|
rawProof.outputIndex = 1.1;
|
|
361
304
|
|
|
362
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
305
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
363
306
|
|
|
364
|
-
expectJsonSchemaError(result, 1);
|
|
307
|
+
await expectJsonSchemaError(result, 1);
|
|
365
308
|
|
|
366
309
|
const [error] = result.getErrors();
|
|
367
310
|
|
|
368
|
-
expect(error.
|
|
311
|
+
expect(error.getInstancePath()).to.equal('/outputIndex');
|
|
369
312
|
expect(error.getKeyword()).to.equal('type');
|
|
370
313
|
|
|
371
314
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
372
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
373
315
|
});
|
|
374
316
|
|
|
375
317
|
it('should not be less than 0', async () => {
|
|
376
318
|
rawProof.outputIndex = -1;
|
|
377
319
|
|
|
378
|
-
const result = await validateInstantAssetLockProofStructure(rawProof);
|
|
320
|
+
const result = await validateInstantAssetLockProofStructure(rawProof, executionContext);
|
|
379
321
|
|
|
380
|
-
expectJsonSchemaError(result);
|
|
322
|
+
await expectJsonSchemaError(result);
|
|
381
323
|
|
|
382
324
|
const [error] = result.getErrors();
|
|
383
325
|
|
|
384
|
-
expect(error.
|
|
326
|
+
expect(error.getInstancePath()).to.equal('/outputIndex');
|
|
385
327
|
expect(error.getKeyword()).to.equal('minimum');
|
|
386
328
|
|
|
387
329
|
expect(stateRepositoryMock.verifyInstantLock).to.not.be.called();
|
|
388
|
-
expect(instantLockMock.verify).to.not.be.called();
|
|
389
330
|
});
|
|
390
331
|
});
|
|
391
332
|
|
|
392
333
|
it('should return valid result', async () => {
|
|
393
|
-
const result = await validateInstantAssetLockProofStructure(
|
|
334
|
+
const result = await validateInstantAssetLockProofStructure(
|
|
335
|
+
rawProof,
|
|
336
|
+
executionContext,
|
|
337
|
+
);
|
|
394
338
|
|
|
395
339
|
expect(result).to.be.an.instanceOf(ValidationResult);
|
|
396
340
|
expect(result.isValid()).to.be.true();
|
|
341
|
+
|
|
342
|
+
const publicKeyHash = transaction.outputs[0].script.getData();
|
|
397
343
|
expect(result.getData()).to.deep.equal(publicKeyHash);
|
|
398
344
|
|
|
399
|
-
|
|
345
|
+
expect(stateRepositoryMock.verifyInstantLock).to.be.calledOnce();
|
|
400
346
|
});
|
|
401
347
|
});
|