@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,51 +1,58 @@
|
|
|
1
|
-
const {
|
|
2
|
-
|
|
3
|
-
const createAjv = require('@dashevo/dpp/lib/ajv/createAjv');
|
|
1
|
+
const { Transaction, Script, PrivateKey } = require('@dashevo/dashcore-lib');
|
|
4
2
|
|
|
5
3
|
const getChainAssetLockFixture = require('@dashevo/dpp/lib/test/fixtures/getChainAssetLockProofFixture');
|
|
6
|
-
const JsonSchemaValidator = require('@dashevo/dpp/lib/validation/JsonSchemaValidator');
|
|
7
4
|
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
8
5
|
|
|
9
|
-
const {
|
|
10
|
-
|
|
11
|
-
);
|
|
6
|
+
const { expect } = require('chai');
|
|
7
|
+
const { expectJsonSchemaError, expectValidationError } = require('../../../../../../lib/test/expect/expectError');
|
|
12
8
|
|
|
13
|
-
const
|
|
14
|
-
const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
|
|
15
|
-
const IdentityAssetLockTransactionIsNotFoundError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/IdentityAssetLockTransactionIsNotFoundError');
|
|
16
|
-
const InvalidAssetLockProofCoreChainHeightError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidAssetLockProofCoreChainHeightError');
|
|
17
|
-
const InvalidAssetLockProofTransactionHeightError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidAssetLockProofTransactionHeightError');
|
|
18
|
-
const SomeConsensusError = require('@dashevo/dpp/lib/test/mocks/SomeConsensusError');
|
|
19
|
-
const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
|
|
9
|
+
const { default: loadWasmDpp } = require('../../../../../../dist');
|
|
20
10
|
|
|
21
11
|
describe('validateChainAssetLockProofStructureFactory', () => {
|
|
22
12
|
let rawProof;
|
|
23
13
|
let stateRepositoryMock;
|
|
24
|
-
let validateChainAssetLockProofStructure;
|
|
25
|
-
let jsonSchemaValidator;
|
|
26
|
-
let validateAssetLockTransactionMock;
|
|
27
|
-
let validateAssetLockTransactionResult;
|
|
28
14
|
let publicKeyHash;
|
|
29
15
|
let rawTransaction;
|
|
30
16
|
let transactionHash;
|
|
31
17
|
let executionContext;
|
|
18
|
+
let validateChainAssetLockProofStructure;
|
|
19
|
+
|
|
20
|
+
let StateTransitionExecutionContext;
|
|
21
|
+
let ValidationResult;
|
|
22
|
+
let InvalidAssetLockProofCoreChainHeightError;
|
|
23
|
+
let IdentityAssetLockTransactionIsNotFoundError;
|
|
24
|
+
let InvalidIdentityAssetLockTransactionOutputError;
|
|
25
|
+
let InvalidAssetLockProofTransactionHeightError;
|
|
26
|
+
let ChainAssetLockProofStructureValidator;
|
|
27
|
+
|
|
28
|
+
before(async () => {
|
|
29
|
+
({
|
|
30
|
+
StateTransitionExecutionContext,
|
|
31
|
+
ValidationResult,
|
|
32
|
+
InvalidAssetLockProofCoreChainHeightError,
|
|
33
|
+
IdentityAssetLockTransactionIsNotFoundError,
|
|
34
|
+
InvalidIdentityAssetLockTransactionOutputError,
|
|
35
|
+
InvalidAssetLockProofTransactionHeightError,
|
|
36
|
+
ChainAssetLockProofStructureValidator,
|
|
37
|
+
} = await loadWasmDpp());
|
|
38
|
+
});
|
|
32
39
|
|
|
33
40
|
beforeEach(async function beforeEach() {
|
|
34
41
|
rawTransaction = '030000000137feb5676d0851337ea3c9a992496aab7a0b3eee60aeeb9774000b7f4bababa5000000006b483045022100d91557de37645c641b948c6cd03b4ae3791a63a650db3e2fee1dcf5185d1b10402200e8bd410bf516ca61715867666d31e44495428ce5c1090bf2294a829ebcfa4ef0121025c3cc7fbfc52f710c941497fd01876c189171ea227458f501afcb38a297d65b4ffffffff021027000000000000166a14152073ca2300a86b510fa2f123d3ea7da3af68dcf77cb0090a0000001976a914152073ca2300a86b510fa2f123d3ea7da3af68dc88ac00000000';
|
|
35
42
|
transactionHash = '6e200d059fb567ba19e92f5c2dcd3dde522fd4e0a50af223752db16158dabb1d';
|
|
36
43
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
rawProof = assetLock.toObject();
|
|
40
|
-
|
|
41
|
-
const RE2 = await getRE2Class();
|
|
42
|
-
const ajv = createAjv(RE2);
|
|
44
|
+
rawProof = getChainAssetLockFixture().toObject();
|
|
43
45
|
|
|
44
|
-
|
|
46
|
+
// Change endianness of raw txId bytes in outPoint to match expectation of dashcore-rust
|
|
47
|
+
const txId = rawProof.outPoint.slice(0, 32);
|
|
48
|
+
const outputIndex = rawProof.outPoint.slice(32);
|
|
49
|
+
txId.reverse();
|
|
50
|
+
rawProof.outPoint = Buffer.concat([txId, outputIndex]);
|
|
45
51
|
|
|
46
52
|
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
47
53
|
|
|
48
54
|
stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight.resolves(42);
|
|
55
|
+
stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.resolves(false);
|
|
49
56
|
|
|
50
57
|
stateRepositoryMock.fetchTransaction.resolves({
|
|
51
58
|
data: Buffer.from(rawTransaction, 'hex'),
|
|
@@ -56,18 +63,14 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
56
63
|
|
|
57
64
|
publicKeyHash = Buffer.from('152073ca2300a86b510fa2f123d3ea7da3af68dc', 'hex');
|
|
58
65
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
publicKeyHash,
|
|
62
|
-
});
|
|
63
|
-
validateAssetLockTransactionMock = this.sinonSandbox.stub().resolves(
|
|
64
|
-
validateAssetLockTransactionResult,
|
|
66
|
+
const validator = new ChainAssetLockProofStructureValidator(
|
|
67
|
+
stateRepositoryMock,
|
|
65
68
|
);
|
|
66
69
|
|
|
67
|
-
validateChainAssetLockProofStructure =
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
validateChainAssetLockProofStructure = (
|
|
71
|
+
proof, context,
|
|
72
|
+
) => validator.validate(
|
|
73
|
+
rawProof, context,
|
|
71
74
|
);
|
|
72
75
|
});
|
|
73
76
|
|
|
@@ -80,7 +83,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
80
83
|
executionContext,
|
|
81
84
|
);
|
|
82
85
|
|
|
83
|
-
expectJsonSchemaError(result);
|
|
86
|
+
await expectJsonSchemaError(result);
|
|
84
87
|
|
|
85
88
|
const [error] = result.getErrors();
|
|
86
89
|
|
|
@@ -89,7 +92,6 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
89
92
|
expect(error.getParams().missingProperty).to.equal('type');
|
|
90
93
|
|
|
91
94
|
expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
|
|
92
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
93
95
|
expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
|
|
94
96
|
});
|
|
95
97
|
|
|
@@ -101,7 +103,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
101
103
|
executionContext,
|
|
102
104
|
);
|
|
103
105
|
|
|
104
|
-
expectJsonSchemaError(result);
|
|
106
|
+
await expectJsonSchemaError(result);
|
|
105
107
|
|
|
106
108
|
const [error] = result.getErrors();
|
|
107
109
|
|
|
@@ -122,7 +124,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
122
124
|
executionContext,
|
|
123
125
|
);
|
|
124
126
|
|
|
125
|
-
expectJsonSchemaError(result);
|
|
127
|
+
await expectJsonSchemaError(result);
|
|
126
128
|
|
|
127
129
|
const [error] = result.getErrors();
|
|
128
130
|
|
|
@@ -131,7 +133,6 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
131
133
|
expect(error.getParams().missingProperty).to.equal('coreChainLockedHeight');
|
|
132
134
|
|
|
133
135
|
expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
|
|
134
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
135
136
|
expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
|
|
136
137
|
});
|
|
137
138
|
|
|
@@ -143,7 +144,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
143
144
|
executionContext,
|
|
144
145
|
);
|
|
145
146
|
|
|
146
|
-
expectJsonSchemaError(result);
|
|
147
|
+
await expectJsonSchemaError(result);
|
|
147
148
|
|
|
148
149
|
const [error] = result.getErrors();
|
|
149
150
|
|
|
@@ -151,7 +152,6 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
151
152
|
expect(error.getKeyword()).to.equal('type');
|
|
152
153
|
|
|
153
154
|
expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
|
|
154
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
155
155
|
expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
|
|
156
156
|
});
|
|
157
157
|
|
|
@@ -163,7 +163,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
163
163
|
executionContext,
|
|
164
164
|
);
|
|
165
165
|
|
|
166
|
-
expectJsonSchemaError(result);
|
|
166
|
+
await expectJsonSchemaError(result);
|
|
167
167
|
|
|
168
168
|
const [error] = result.getErrors();
|
|
169
169
|
|
|
@@ -171,7 +171,6 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
171
171
|
expect(error.getKeyword()).to.equal('type');
|
|
172
172
|
|
|
173
173
|
expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
|
|
174
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
175
174
|
expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
|
|
176
175
|
});
|
|
177
176
|
|
|
@@ -183,7 +182,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
183
182
|
executionContext,
|
|
184
183
|
);
|
|
185
184
|
|
|
186
|
-
expectJsonSchemaError(result);
|
|
185
|
+
await expectJsonSchemaError(result);
|
|
187
186
|
|
|
188
187
|
const [error] = result.getErrors();
|
|
189
188
|
|
|
@@ -191,7 +190,6 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
191
190
|
expect(error.getKeyword()).to.equal('minimum');
|
|
192
191
|
|
|
193
192
|
expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
|
|
194
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
195
193
|
expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
|
|
196
194
|
});
|
|
197
195
|
|
|
@@ -203,15 +201,14 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
203
201
|
executionContext,
|
|
204
202
|
);
|
|
205
203
|
|
|
206
|
-
expectJsonSchemaError(result);
|
|
204
|
+
await expectJsonSchemaError(result);
|
|
207
205
|
|
|
208
206
|
const [error] = result.getErrors();
|
|
209
207
|
|
|
210
|
-
expect(error.
|
|
208
|
+
expect(error.getInstancePath()).to.equal('/coreChainLockedHeight');
|
|
211
209
|
expect(error.getKeyword()).to.equal('maximum');
|
|
212
210
|
|
|
213
211
|
expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
|
|
214
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
215
212
|
expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
|
|
216
213
|
});
|
|
217
214
|
|
|
@@ -242,16 +239,15 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
242
239
|
executionContext,
|
|
243
240
|
);
|
|
244
241
|
|
|
245
|
-
expectJsonSchemaError(result);
|
|
242
|
+
await expectJsonSchemaError(result);
|
|
246
243
|
|
|
247
244
|
const [error] = result.getErrors();
|
|
248
245
|
|
|
249
|
-
expect(error.
|
|
246
|
+
expect(error.getInstancePath()).to.equal('');
|
|
250
247
|
expect(error.getKeyword()).to.equal('required');
|
|
251
248
|
expect(error.getParams().missingProperty).to.equal('outPoint');
|
|
252
249
|
|
|
253
250
|
expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
|
|
254
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
255
251
|
expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
|
|
256
252
|
});
|
|
257
253
|
|
|
@@ -263,17 +259,14 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
263
259
|
executionContext,
|
|
264
260
|
);
|
|
265
261
|
|
|
266
|
-
expectJsonSchemaError(result,
|
|
262
|
+
await expectJsonSchemaError(result, 36);
|
|
267
263
|
|
|
268
|
-
const [error
|
|
264
|
+
const [error] = result.getErrors();
|
|
269
265
|
|
|
270
|
-
expect(error.
|
|
266
|
+
expect(error.getInstancePath()).to.equal('/outPoint/0');
|
|
271
267
|
expect(error.getKeyword()).to.equal('type');
|
|
272
268
|
|
|
273
|
-
expect(byteArrayError.getKeyword()).to.equal('byteArray');
|
|
274
|
-
|
|
275
269
|
expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
|
|
276
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
277
270
|
expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
|
|
278
271
|
});
|
|
279
272
|
|
|
@@ -285,15 +278,14 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
285
278
|
executionContext,
|
|
286
279
|
);
|
|
287
280
|
|
|
288
|
-
expectJsonSchemaError(result);
|
|
281
|
+
await expectJsonSchemaError(result);
|
|
289
282
|
|
|
290
283
|
const [error] = result.getErrors();
|
|
291
284
|
|
|
292
|
-
expect(error.
|
|
285
|
+
expect(error.getInstancePath()).to.equal('/outPoint');
|
|
293
286
|
expect(error.getKeyword()).to.equal('minItems');
|
|
294
287
|
|
|
295
288
|
expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
|
|
296
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
297
289
|
expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
|
|
298
290
|
});
|
|
299
291
|
|
|
@@ -305,19 +297,18 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
305
297
|
executionContext,
|
|
306
298
|
);
|
|
307
299
|
|
|
308
|
-
expectJsonSchemaError(result);
|
|
300
|
+
await expectJsonSchemaError(result);
|
|
309
301
|
|
|
310
302
|
const [error] = result.getErrors();
|
|
311
303
|
|
|
312
|
-
expect(error.
|
|
304
|
+
expect(error.getInstancePath()).to.equal('/outPoint');
|
|
313
305
|
expect(error.getKeyword()).to.equal('maxItems');
|
|
314
306
|
|
|
315
307
|
expect(stateRepositoryMock.fetchTransaction).to.not.be.called();
|
|
316
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
317
308
|
expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.not.be.called();
|
|
318
309
|
});
|
|
319
310
|
|
|
320
|
-
it('should point to existing transaction', async ()
|
|
311
|
+
it('should point to existing transaction', async function () {
|
|
321
312
|
stateRepositoryMock.fetchTransaction.resolves(null);
|
|
322
313
|
|
|
323
314
|
const result = await validateChainAssetLockProofStructure(
|
|
@@ -325,7 +316,7 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
325
316
|
executionContext,
|
|
326
317
|
);
|
|
327
318
|
|
|
328
|
-
expectValidationError(result, IdentityAssetLockTransactionIsNotFoundError);
|
|
319
|
+
await expectValidationError(result, IdentityAssetLockTransactionIsNotFoundError);
|
|
329
320
|
|
|
330
321
|
const [error] = result.getErrors();
|
|
331
322
|
|
|
@@ -336,30 +327,34 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
336
327
|
|
|
337
328
|
expect(stateRepositoryMock.fetchTransaction).to.be.calledOnceWithExactly(
|
|
338
329
|
transactionHash,
|
|
339
|
-
|
|
330
|
+
this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
|
|
340
331
|
);
|
|
341
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
342
332
|
expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.be.calledOnce();
|
|
343
333
|
});
|
|
344
334
|
|
|
345
335
|
it('should point to valid transaction', async () => {
|
|
346
|
-
|
|
336
|
+
// Validator expects asset lock proof TX to have OP_RETURN in it's first output, break it
|
|
337
|
+
const parsedTx = new Transaction(Buffer.from(rawTransaction, 'hex'));
|
|
338
|
+
const fromAddress = new PrivateKey().toAddress();
|
|
339
|
+
parsedTx.outputs[0].setScript(Script.buildPublicKeyHashOut(fromAddress).toString());
|
|
347
340
|
|
|
348
|
-
|
|
341
|
+
stateRepositoryMock.fetchTransaction.resolves({
|
|
342
|
+
data: parsedTx.toBuffer(),
|
|
343
|
+
height: 42,
|
|
344
|
+
});
|
|
349
345
|
|
|
350
346
|
const result = await validateChainAssetLockProofStructure(
|
|
351
347
|
rawProof,
|
|
352
348
|
executionContext,
|
|
353
349
|
);
|
|
354
350
|
|
|
355
|
-
expectValidationError(
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
expect(error).to.deep.equal(consensusError);
|
|
351
|
+
await expectValidationError(
|
|
352
|
+
result,
|
|
353
|
+
InvalidIdentityAssetLockTransactionOutputError,
|
|
354
|
+
);
|
|
360
355
|
});
|
|
361
356
|
|
|
362
|
-
it('should point to transaction from block lower than core chain locked height', async ()
|
|
357
|
+
it('should point to transaction from block lower than core chain locked height', async function () {
|
|
363
358
|
rawProof.coreChainLockedHeight = 41;
|
|
364
359
|
stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight.resolves(41);
|
|
365
360
|
|
|
@@ -368,7 +363,9 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
368
363
|
executionContext,
|
|
369
364
|
);
|
|
370
365
|
|
|
371
|
-
expectValidationError(
|
|
366
|
+
await expectValidationError(
|
|
367
|
+
result, InvalidAssetLockProofTransactionHeightError,
|
|
368
|
+
);
|
|
372
369
|
|
|
373
370
|
const [error] = result.getErrors();
|
|
374
371
|
|
|
@@ -378,14 +375,13 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
378
375
|
|
|
379
376
|
expect(stateRepositoryMock.fetchTransaction).to.be.calledOnceWithExactly(
|
|
380
377
|
transactionHash,
|
|
381
|
-
|
|
378
|
+
this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
|
|
382
379
|
);
|
|
383
|
-
expect(validateAssetLockTransactionMock).to.not.be.called();
|
|
384
380
|
expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.be.calledOnce();
|
|
385
381
|
});
|
|
386
382
|
});
|
|
387
383
|
|
|
388
|
-
it('should return valid result', async ()
|
|
384
|
+
it('should return valid result', async function () {
|
|
389
385
|
const result = await validateChainAssetLockProofStructure(
|
|
390
386
|
rawProof,
|
|
391
387
|
executionContext,
|
|
@@ -397,13 +393,9 @@ describe('validateChainAssetLockProofStructureFactory', () => {
|
|
|
397
393
|
|
|
398
394
|
expect(stateRepositoryMock.fetchTransaction).to.be.calledOnceWithExactly(
|
|
399
395
|
transactionHash,
|
|
400
|
-
|
|
401
|
-
);
|
|
402
|
-
expect(validateAssetLockTransactionMock).to.be.calledOnceWithExactly(
|
|
403
|
-
Buffer.from(rawTransaction, 'hex'),
|
|
404
|
-
0,
|
|
405
|
-
executionContext,
|
|
396
|
+
this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
|
|
406
397
|
);
|
|
398
|
+
|
|
407
399
|
expect(stateRepositoryMock.fetchLatestPlatformCoreChainLockedHeight).to.be.calledOnce();
|
|
408
400
|
});
|
|
409
401
|
});
|
|
@@ -1,32 +1,52 @@
|
|
|
1
|
-
const { Transaction
|
|
2
|
-
const Output = require('@dashevo/dashcore-lib/lib/transaction/output');
|
|
1
|
+
const { Transaction } = require('@dashevo/dashcore-lib');
|
|
3
2
|
|
|
4
|
-
const fetchAssetLockTransactionOutputFactory = require('@dashevo/dpp/lib/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory');
|
|
5
3
|
const getChainAssetLockFixture = require('@dashevo/dpp/lib/test/fixtures/getChainAssetLockProofFixture');
|
|
6
4
|
const getInstantAssetLockProofFixture = require('@dashevo/dpp/lib/test/fixtures/getInstantAssetLockProofFixture');
|
|
7
5
|
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
8
|
-
|
|
9
|
-
const UnknownAssetLockProofError = require('@dashevo/dpp/lib/identity/errors/UnknownAssetLockProofTypeError');
|
|
10
|
-
const AssetLockTransactionIsNotFoundError = require('@dashevo/dpp/lib/identity/errors/AssetLockTransactionIsNotFoundError');
|
|
11
|
-
const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
|
|
6
|
+
const { default: loadWasmDpp } = require('../../../../../dist');
|
|
12
7
|
|
|
13
8
|
describe('fetchAssetLockTransactionOutputFactory', () => {
|
|
14
9
|
let fetchAssetLockTransactionOutput;
|
|
15
10
|
let stateRepositoryMock;
|
|
16
11
|
let executionContext;
|
|
17
12
|
|
|
13
|
+
let StateTransitionExecutionContext;
|
|
14
|
+
let InstantAssetLockProof;
|
|
15
|
+
let ChainAssetLockProof;
|
|
16
|
+
let AssetLockTransactionIsNotFoundError;
|
|
17
|
+
let UnknownAssetLockProofTypeError;
|
|
18
|
+
|
|
19
|
+
let fetchAssetLockTransactionOutputDPP;
|
|
20
|
+
|
|
21
|
+
before(async () => {
|
|
22
|
+
({
|
|
23
|
+
StateTransitionExecutionContext,
|
|
24
|
+
fetchAssetLockTransactionOutput: fetchAssetLockTransactionOutputDPP,
|
|
25
|
+
InstantAssetLockProof,
|
|
26
|
+
ChainAssetLockProof,
|
|
27
|
+
AssetLockTransactionIsNotFoundError,
|
|
28
|
+
UnknownAssetLockProofTypeError,
|
|
29
|
+
} = await loadWasmDpp());
|
|
30
|
+
});
|
|
31
|
+
|
|
18
32
|
beforeEach(function beforeEach() {
|
|
19
33
|
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
20
|
-
fetchAssetLockTransactionOutput = fetchAssetLockTransactionOutputFactory(stateRepositoryMock);
|
|
21
34
|
|
|
22
35
|
executionContext = new StateTransitionExecutionContext();
|
|
36
|
+
|
|
37
|
+
fetchAssetLockTransactionOutput = (proof, context) => fetchAssetLockTransactionOutputDPP(
|
|
38
|
+
stateRepositoryMock,
|
|
39
|
+
proof,
|
|
40
|
+
context,
|
|
41
|
+
);
|
|
23
42
|
});
|
|
24
43
|
|
|
25
44
|
describe('InstantAssetLockProof', () => {
|
|
26
45
|
let assetLockProofFixture;
|
|
27
46
|
|
|
28
47
|
beforeEach(() => {
|
|
29
|
-
|
|
48
|
+
const assetLockProofFixtureJS = getInstantAssetLockProofFixture();
|
|
49
|
+
assetLockProofFixture = new InstantAssetLockProof(assetLockProofFixtureJS.toObject());
|
|
30
50
|
});
|
|
31
51
|
|
|
32
52
|
it('should return asset lock output', async () => {
|
|
@@ -47,7 +67,22 @@ describe('fetchAssetLockTransactionOutputFactory', () => {
|
|
|
47
67
|
|
|
48
68
|
beforeEach(() => {
|
|
49
69
|
const rawTransaction = '030000000137feb5676d0851337ea3c9a992496aab7a0b3eee60aeeb9774000b7f4bababa5000000006b483045022100d91557de37645c641b948c6cd03b4ae3791a63a650db3e2fee1dcf5185d1b10402200e8bd410bf516ca61715867666d31e44495428ce5c1090bf2294a829ebcfa4ef0121025c3cc7fbfc52f710c941497fd01876c189171ea227458f501afcb38a297d65b4ffffffff021027000000000000166a14152073ca2300a86b510fa2f123d3ea7da3af68dcf77cb0090a0000001976a914152073ca2300a86b510fa2f123d3ea7da3af68dc88ac00000000';
|
|
50
|
-
|
|
70
|
+
const assetLockProofFixtureJS = getChainAssetLockFixture();
|
|
71
|
+
|
|
72
|
+
const outPoint = Transaction
|
|
73
|
+
.parseOutPointBuffer(Buffer.from(assetLockProofFixtureJS.getOutPoint()));
|
|
74
|
+
({ transactionHash } = outPoint);
|
|
75
|
+
|
|
76
|
+
const rawProof = assetLockProofFixtureJS.toObject();
|
|
77
|
+
|
|
78
|
+
// Change endianness of raw txId bytes in outPoint to match expectation of dashcore-rust
|
|
79
|
+
const txId = rawProof.outPoint.slice(0, 32);
|
|
80
|
+
const outputIndex = rawProof.outPoint.slice(32);
|
|
81
|
+
txId.reverse();
|
|
82
|
+
rawProof.outPoint = Buffer.concat([txId, outputIndex]);
|
|
83
|
+
|
|
84
|
+
assetLockProofFixture = new ChainAssetLockProof(rawProof);
|
|
85
|
+
|
|
51
86
|
stateRepositoryMock.fetchTransaction.resolves({
|
|
52
87
|
data: Buffer.from(rawTransaction, 'hex'),
|
|
53
88
|
height: 42,
|
|
@@ -55,26 +90,23 @@ describe('fetchAssetLockTransactionOutputFactory', () => {
|
|
|
55
90
|
|
|
56
91
|
const transaction = new Transaction(rawTransaction);
|
|
57
92
|
([output] = transaction.outputs);
|
|
58
|
-
|
|
59
|
-
const outPoint = Transaction.parseOutPointBuffer(assetLockProofFixture.getOutPoint());
|
|
60
|
-
({ transactionHash } = outPoint);
|
|
61
93
|
});
|
|
62
94
|
|
|
63
|
-
it('should fetch output from state repository', async ()
|
|
95
|
+
it('should fetch output from state repository', async function () {
|
|
64
96
|
const assetLockTransactionOutput = await fetchAssetLockTransactionOutput(
|
|
65
97
|
assetLockProofFixture,
|
|
66
98
|
executionContext,
|
|
67
99
|
);
|
|
68
100
|
|
|
69
|
-
expect(assetLockTransactionOutput).to.deep.equal(output);
|
|
101
|
+
expect(assetLockTransactionOutput).to.deep.equal(output.toObject());
|
|
70
102
|
|
|
71
103
|
expect(stateRepositoryMock.fetchTransaction).to.be.calledOnceWithExactly(
|
|
72
104
|
transactionHash,
|
|
73
|
-
|
|
105
|
+
this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
|
|
74
106
|
);
|
|
75
107
|
});
|
|
76
108
|
|
|
77
|
-
it('should throw
|
|
109
|
+
it('should throw AssetLockTransactionIsNotFoundError when transaction is not found', async () => {
|
|
78
110
|
stateRepositoryMock.fetchTransaction.resolves(null);
|
|
79
111
|
|
|
80
112
|
try {
|
|
@@ -83,14 +115,14 @@ describe('fetchAssetLockTransactionOutputFactory', () => {
|
|
|
83
115
|
executionContext,
|
|
84
116
|
);
|
|
85
117
|
|
|
86
|
-
expect.fail('should throw
|
|
118
|
+
expect.fail('should throw AssetLockTransactionIsNotFoundError');
|
|
87
119
|
} catch (e) {
|
|
88
120
|
expect(e).to.be.an.instanceOf(AssetLockTransactionIsNotFoundError);
|
|
89
121
|
expect(e.getTransactionId()).to.deep.equal(transactionHash);
|
|
90
122
|
}
|
|
91
123
|
});
|
|
92
124
|
|
|
93
|
-
it('should return mocked output on dry run', async ()
|
|
125
|
+
it('should return mocked output on dry run', async function () {
|
|
94
126
|
executionContext.enableDryRun();
|
|
95
127
|
|
|
96
128
|
const result = await fetchAssetLockTransactionOutput(
|
|
@@ -100,24 +132,36 @@ describe('fetchAssetLockTransactionOutputFactory', () => {
|
|
|
100
132
|
|
|
101
133
|
executionContext.disableDryRun();
|
|
102
134
|
|
|
103
|
-
expect(result).to.deep.equal(
|
|
135
|
+
expect(result).to.deep.equal({
|
|
104
136
|
satoshis: 1000,
|
|
105
|
-
script:
|
|
106
|
-
})
|
|
137
|
+
script: '',
|
|
138
|
+
});
|
|
107
139
|
|
|
108
140
|
expect(stateRepositoryMock.fetchTransaction).to.be.calledOnceWithExactly(
|
|
109
141
|
transactionHash,
|
|
110
|
-
|
|
142
|
+
this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
|
|
111
143
|
);
|
|
112
144
|
});
|
|
113
145
|
});
|
|
114
146
|
|
|
115
|
-
it('should throw
|
|
116
|
-
|
|
147
|
+
it('should throw UnknownAssetLockProofTypeError for unknown assetLockProof', async () => {
|
|
148
|
+
try {
|
|
149
|
+
await fetchAssetLockTransactionOutput(
|
|
150
|
+
{},
|
|
151
|
+
executionContext,
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
expect.fail('should throw UnknownAssetLockProofTypeError');
|
|
155
|
+
} catch (e) {
|
|
156
|
+
expect(e).to.be.an.instanceOf(UnknownAssetLockProofTypeError);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
it('should throw UnknownAssetLockProofTypeError for unknown assetLockProof type', async () => {
|
|
161
|
+
const type = 100;
|
|
117
162
|
|
|
118
|
-
const assetLockProofFixture =
|
|
119
|
-
|
|
120
|
-
};
|
|
163
|
+
const assetLockProofFixture = new ChainAssetLockProof(getChainAssetLockFixture().toObject());
|
|
164
|
+
assetLockProofFixture.getType = () => type;
|
|
121
165
|
|
|
122
166
|
try {
|
|
123
167
|
await fetchAssetLockTransactionOutput(
|
|
@@ -125,9 +169,9 @@ describe('fetchAssetLockTransactionOutputFactory', () => {
|
|
|
125
169
|
executionContext,
|
|
126
170
|
);
|
|
127
171
|
|
|
128
|
-
expect.fail('should throw
|
|
172
|
+
expect.fail('should throw UnknownAssetLockProofTypeError');
|
|
129
173
|
} catch (e) {
|
|
130
|
-
expect(e).to.be.an.instanceOf(
|
|
174
|
+
expect(e).to.be.an.instanceOf(UnknownAssetLockProofTypeError);
|
|
131
175
|
expect(e.getType()).to.equal(type);
|
|
132
176
|
}
|
|
133
177
|
});
|