@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,66 +1,76 @@
|
|
|
1
|
-
const { Transaction } = require('@dashevo/dashcore-lib');
|
|
1
|
+
const { Transaction, PrivateKey, Script } = require('@dashevo/dashcore-lib');
|
|
2
2
|
|
|
3
|
-
const DashCoreLib = require('@dashevo/dashcore-lib');
|
|
4
|
-
const validateAssetLockTransactionFactory = require('@dashevo/dpp/lib/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory');
|
|
5
3
|
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
6
4
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
const { expectValidationError } = require('
|
|
10
|
-
|
|
11
|
-
const InvalidIdentityAssetLockTransactionError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidIdentityAssetLockTransactionError');
|
|
12
|
-
const IdentityAssetLockTransactionOutputNotFoundError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/IdentityAssetLockTransactionOutputNotFoundError');
|
|
13
|
-
const IdentityAssetLockTransactionOutPointAlreadyExistsError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/IdentityAssetLockTransactionOutPointAlreadyExistsError');
|
|
14
|
-
const InvalidIdentityAssetLockTransactionOutputError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidIdentityAssetLockTransactionOutputError');
|
|
15
|
-
const InvalidAssetLockTransactionOutputReturnSizeError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidAssetLockTransactionOutputReturnSizeError');
|
|
16
|
-
const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
|
|
5
|
+
const { expect } = require('chai');
|
|
6
|
+
const { default: loadWasmDpp } = require('../../../../../dist');
|
|
7
|
+
const { expectValidationError } = require('../../../../../lib/test/expect/expectError');
|
|
17
8
|
|
|
18
9
|
describe('validateAssetLockTransactionFactory', () => {
|
|
19
10
|
let stateRepositoryMock;
|
|
20
|
-
let validateAssetLockTransaction;
|
|
21
11
|
let rawTransaction;
|
|
22
12
|
let outputIndex;
|
|
23
|
-
let transactionInstance;
|
|
24
|
-
let transactionMock;
|
|
25
13
|
let executionContext;
|
|
26
14
|
|
|
15
|
+
let StateTransitionExecutionContext;
|
|
16
|
+
let InvalidIdentityAssetLockTransactionError;
|
|
17
|
+
let IdentityAssetLockTransactionOutputNotFoundError;
|
|
18
|
+
let InvalidIdentityAssetLockTransactionOutputError;
|
|
19
|
+
let InvalidAssetLockTransactionOutputReturnSizeError;
|
|
20
|
+
let IdentityAssetLockTransactionOutPointAlreadyExistsError;
|
|
21
|
+
let TransactionDecodeError;
|
|
22
|
+
let ValidationResult;
|
|
23
|
+
|
|
24
|
+
let validateAssetLockTransaction;
|
|
25
|
+
let validateAssetLockTransactionDPP;
|
|
26
|
+
|
|
27
|
+
before(async () => {
|
|
28
|
+
({
|
|
29
|
+
StateTransitionExecutionContext,
|
|
30
|
+
ValidationResult,
|
|
31
|
+
TransactionDecodeError,
|
|
32
|
+
InvalidIdentityAssetLockTransactionError,
|
|
33
|
+
IdentityAssetLockTransactionOutputNotFoundError,
|
|
34
|
+
InvalidIdentityAssetLockTransactionOutputError,
|
|
35
|
+
InvalidAssetLockTransactionOutputReturnSizeError,
|
|
36
|
+
IdentityAssetLockTransactionOutPointAlreadyExistsError,
|
|
37
|
+
validateAssetLockTransaction: validateAssetLockTransactionDPP,
|
|
38
|
+
} = await loadWasmDpp());
|
|
39
|
+
});
|
|
40
|
+
|
|
27
41
|
beforeEach(function beforeEach() {
|
|
28
42
|
rawTransaction = '030000000137feb5676d0851337ea3c9a992496aab7a0b3eee60aeeb9774000b7f4bababa5000000006b483045022100d91557de37645c641b948c6cd03b4ae3791a63a650db3e2fee1dcf5185d1b10402200e8bd410bf516ca61715867666d31e44495428ce5c1090bf2294a829ebcfa4ef0121025c3cc7fbfc52f710c941497fd01876c189171ea227458f501afcb38a297d65b4ffffffff021027000000000000166a14152073ca2300a86b510fa2f123d3ea7da3af68dcf77cb0090a0000001976a914152073ca2300a86b510fa2f123d3ea7da3af68dc88ac00000000';
|
|
29
43
|
outputIndex = 0;
|
|
30
|
-
transactionInstance = new Transaction(rawTransaction);
|
|
31
44
|
|
|
32
45
|
executionContext = new StateTransitionExecutionContext();
|
|
33
46
|
|
|
34
47
|
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
35
48
|
|
|
36
|
-
stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.
|
|
49
|
+
stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.resolves(false);
|
|
37
50
|
|
|
38
|
-
validateAssetLockTransaction =
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
51
|
+
validateAssetLockTransaction = (tx, index, context) => validateAssetLockTransactionDPP(
|
|
52
|
+
stateRepositoryMock,
|
|
53
|
+
tx,
|
|
54
|
+
index,
|
|
55
|
+
context,
|
|
56
|
+
);
|
|
45
57
|
});
|
|
46
58
|
|
|
47
59
|
it('should be valid transaction', async () => {
|
|
48
60
|
rawTransaction = '030000000137feb5676d085133';
|
|
49
61
|
|
|
50
|
-
validateAssetLockTransaction = validateAssetLockTransactionFactory(stateRepositoryMock);
|
|
51
|
-
|
|
52
62
|
const result = await validateAssetLockTransaction(
|
|
53
63
|
rawTransaction,
|
|
54
64
|
outputIndex,
|
|
55
65
|
executionContext,
|
|
56
66
|
);
|
|
57
67
|
|
|
58
|
-
expectValidationError(result, InvalidIdentityAssetLockTransactionError);
|
|
68
|
+
await expectValidationError(result, InvalidIdentityAssetLockTransactionError);
|
|
59
69
|
|
|
60
70
|
const [error] = result.getErrors();
|
|
61
71
|
|
|
62
72
|
expect(error.getCode()).to.equal(1038);
|
|
63
|
-
expect(error.getValidationError()).to.be.instanceOf(
|
|
73
|
+
expect(error.getValidationError()).to.be.instanceOf(TransactionDecodeError);
|
|
64
74
|
|
|
65
75
|
expect(result.getData()).to.be.undefined();
|
|
66
76
|
expect(stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed).to.not.be.called();
|
|
@@ -75,7 +85,7 @@ describe('validateAssetLockTransactionFactory', () => {
|
|
|
75
85
|
executionContext,
|
|
76
86
|
);
|
|
77
87
|
|
|
78
|
-
expectValidationError(result, IdentityAssetLockTransactionOutputNotFoundError);
|
|
88
|
+
await expectValidationError(result, IdentityAssetLockTransactionOutputNotFoundError);
|
|
79
89
|
|
|
80
90
|
const [error] = result.getErrors();
|
|
81
91
|
|
|
@@ -86,30 +96,19 @@ describe('validateAssetLockTransactionFactory', () => {
|
|
|
86
96
|
expect(stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed).to.not.be.called();
|
|
87
97
|
});
|
|
88
98
|
|
|
89
|
-
it('should point to output with OR_RETURN', async
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
stubInstance.outputs = [{
|
|
95
|
-
script: {
|
|
96
|
-
isDataOut,
|
|
97
|
-
},
|
|
98
|
-
}];
|
|
99
|
-
|
|
100
|
-
stubInstance.getOutPointBuffer.returns(transactionInstance.getOutPointBuffer(outputIndex));
|
|
101
|
-
|
|
102
|
-
transactionMock = this.sinonSandbox.stub(DashCoreLib, 'Transaction').returns(
|
|
103
|
-
stubInstance,
|
|
104
|
-
);
|
|
99
|
+
it('should point to output with OR_RETURN', async () => {
|
|
100
|
+
const regularTransaction = new Transaction(Buffer.from(rawTransaction, 'hex'));
|
|
101
|
+
// Mess up expected TX output script
|
|
102
|
+
regularTransaction.outputs[0]
|
|
103
|
+
.setScript(Script.buildPublicKeyHashOut(new PrivateKey().toAddress()).toString());
|
|
105
104
|
|
|
106
105
|
const result = await validateAssetLockTransaction(
|
|
107
|
-
|
|
106
|
+
regularTransaction.toBuffer().toString('hex'),
|
|
108
107
|
outputIndex,
|
|
109
108
|
executionContext,
|
|
110
109
|
);
|
|
111
110
|
|
|
112
|
-
expectValidationError(result, InvalidIdentityAssetLockTransactionOutputError);
|
|
111
|
+
await expectValidationError(result, InvalidIdentityAssetLockTransactionOutputError);
|
|
113
112
|
|
|
114
113
|
const [error] = result.getErrors();
|
|
115
114
|
|
|
@@ -117,30 +116,18 @@ describe('validateAssetLockTransactionFactory', () => {
|
|
|
117
116
|
expect(error.getOutputIndex()).to.equal(outputIndex);
|
|
118
117
|
});
|
|
119
118
|
|
|
120
|
-
it('should contain valid public key hash', async
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const stubInstance = this.sinonSandbox.createStubInstance(Transaction);
|
|
125
|
-
stubInstance.outputs = [{
|
|
126
|
-
script: {
|
|
127
|
-
isDataOut,
|
|
128
|
-
getData,
|
|
129
|
-
},
|
|
130
|
-
}];
|
|
131
|
-
stubInstance.getOutPointBuffer.returns(transactionInstance.getOutPointBuffer(outputIndex));
|
|
132
|
-
|
|
133
|
-
transactionMock = this.sinonSandbox.stub(DashCoreLib, 'Transaction').returns(
|
|
134
|
-
stubInstance,
|
|
135
|
-
);
|
|
119
|
+
it('should contain valid public key hash', async () => {
|
|
120
|
+
const regularTransaction = new Transaction(Buffer.from(rawTransaction, 'hex'));
|
|
121
|
+
regularTransaction.outputs[0]
|
|
122
|
+
.setScript(Script.buildDataOut(Buffer.alloc(0)));
|
|
136
123
|
|
|
137
124
|
const result = await validateAssetLockTransaction(
|
|
138
|
-
|
|
125
|
+
regularTransaction.toBuffer().toString('hex'),
|
|
139
126
|
outputIndex,
|
|
140
127
|
executionContext,
|
|
141
128
|
);
|
|
142
129
|
|
|
143
|
-
expectValidationError(result, InvalidAssetLockTransactionOutputReturnSizeError);
|
|
130
|
+
await expectValidationError(result, InvalidAssetLockTransactionOutputReturnSizeError);
|
|
144
131
|
|
|
145
132
|
const [error] = result.getErrors();
|
|
146
133
|
|
|
@@ -148,8 +135,8 @@ describe('validateAssetLockTransactionFactory', () => {
|
|
|
148
135
|
expect(error.getOutputIndex()).to.equal(outputIndex);
|
|
149
136
|
});
|
|
150
137
|
|
|
151
|
-
it('should return IdentityAssetLockTransactionOutPointAlreadyExistsError if outPoint was already used', async ()
|
|
152
|
-
stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.
|
|
138
|
+
it('should return IdentityAssetLockTransactionOutPointAlreadyExistsError if outPoint was already used', async function () {
|
|
139
|
+
stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.resolves(true);
|
|
153
140
|
|
|
154
141
|
const result = await validateAssetLockTransaction(
|
|
155
142
|
rawTransaction,
|
|
@@ -157,7 +144,7 @@ describe('validateAssetLockTransactionFactory', () => {
|
|
|
157
144
|
executionContext,
|
|
158
145
|
);
|
|
159
146
|
|
|
160
|
-
expectValidationError(result, IdentityAssetLockTransactionOutPointAlreadyExistsError);
|
|
147
|
+
await expectValidationError(result, IdentityAssetLockTransactionOutPointAlreadyExistsError);
|
|
161
148
|
|
|
162
149
|
const [error] = result.getErrors();
|
|
163
150
|
|
|
@@ -165,19 +152,19 @@ describe('validateAssetLockTransactionFactory', () => {
|
|
|
165
152
|
|
|
166
153
|
const transaction = new Transaction(rawTransaction);
|
|
167
154
|
|
|
168
|
-
expect(Buffer.isBuffer(error.getTransactionId())).to.be.true();
|
|
169
155
|
expect(error.getTransactionId()).to.deep.equal(Buffer.from(transaction.id, 'hex'));
|
|
170
156
|
expect(error.getOutputIndex()).to.deep.equal(outputIndex);
|
|
171
157
|
|
|
172
158
|
expect(result.getData()).to.be.undefined();
|
|
173
159
|
expect(stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed)
|
|
174
160
|
.to.be.calledOnceWithExactly(
|
|
175
|
-
|
|
176
|
-
|
|
161
|
+
this.sinonSandbox.match((val) => Buffer.from(val)
|
|
162
|
+
.equals(transaction.getOutPointBuffer(outputIndex))),
|
|
163
|
+
this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
|
|
177
164
|
);
|
|
178
165
|
});
|
|
179
166
|
|
|
180
|
-
it('should return valid result', async ()
|
|
167
|
+
it('should return valid result', async function () {
|
|
181
168
|
const result = await validateAssetLockTransaction(
|
|
182
169
|
rawTransaction,
|
|
183
170
|
outputIndex,
|
|
@@ -193,13 +180,14 @@ describe('validateAssetLockTransactionFactory', () => {
|
|
|
193
180
|
|
|
194
181
|
expect(stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed)
|
|
195
182
|
.to.be.calledOnceWithExactly(
|
|
196
|
-
|
|
197
|
-
|
|
183
|
+
this.sinonSandbox.match((val) => Buffer.from(val)
|
|
184
|
+
.equals(initialTransaction.getOutPointBuffer(outputIndex))),
|
|
185
|
+
this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
|
|
198
186
|
);
|
|
199
187
|
|
|
200
188
|
const { transaction, publicKeyHash } = result.getData();
|
|
201
189
|
expect(publicKeyHash).to.deep.equal(initialPublicKeyHash);
|
|
202
|
-
expect(transaction).
|
|
203
|
-
|
|
190
|
+
expect(new Transaction(Buffer.from(transaction)).toJSON())
|
|
191
|
+
.to.deep.equal(initialTransaction.toJSON());
|
|
204
192
|
});
|
|
205
193
|
});
|
package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js
CHANGED
|
@@ -3,59 +3,86 @@ const { PrivateKey, crypto: { Hash } } = require('@dashevo/dashcore-lib');
|
|
|
3
3
|
const crypto = require('crypto');
|
|
4
4
|
|
|
5
5
|
const getIdentityCreateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityCreateTransitionFixture');
|
|
6
|
-
const IdentityPublicKey = require('@dashevo/dpp/lib/identity/IdentityPublicKey');
|
|
7
6
|
const BlsSignatures = require('@dashevo/dpp/lib/bls/bls');
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
const { expectValidationError } = require('
|
|
11
|
-
const
|
|
7
|
+
|
|
8
|
+
const { expect } = require('chai');
|
|
9
|
+
const { expectValidationError } = require('../../../../lib/test/expect/expectError');
|
|
10
|
+
const getBlsAdapterMock = require('../../../../lib/test/mocks/getBlsAdapterMock');
|
|
11
|
+
|
|
12
|
+
const { default: loadWasmDpp } = require('../../../../dist');
|
|
12
13
|
|
|
13
14
|
describe('validatePublicKeySignaturesFactory', () => {
|
|
14
15
|
let identityCreateTransition;
|
|
15
16
|
let rawIdentityCreateTransition;
|
|
16
17
|
let validatePublicKeySignatures;
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
let IdentityCreateTransition;
|
|
20
|
+
let IdentityPublicKey;
|
|
21
|
+
let IdentityPublicKeyCreateTransition;
|
|
22
|
+
let InvalidIdentityKeySignatureError;
|
|
23
|
+
let ValidationResult;
|
|
24
|
+
let PublicKeysSignaturesValidator;
|
|
25
|
+
let blsAdapter;
|
|
26
|
+
|
|
27
|
+
before(async () => {
|
|
28
|
+
({
|
|
29
|
+
IdentityCreateTransition,
|
|
30
|
+
IdentityPublicKey,
|
|
31
|
+
IdentityPublicKeyCreateTransition,
|
|
32
|
+
InvalidIdentityKeySignatureError,
|
|
33
|
+
PublicKeysSignaturesValidator,
|
|
34
|
+
ValidationResult,
|
|
35
|
+
} = await loadWasmDpp());
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
beforeEach(async () => {
|
|
39
|
+
identityCreateTransition = new IdentityCreateTransition(
|
|
40
|
+
getIdentityCreateTransitionFixture().toObject(),
|
|
41
|
+
);
|
|
20
42
|
|
|
21
|
-
const privateKey1 = new PrivateKey();
|
|
43
|
+
const privateKey1 = new PrivateKey('17e0b1703e226204c557bce68b0871683ea409ae90c7a733b72a33f7c129c959');
|
|
22
44
|
const publicKey1 = privateKey1.toPublicKey();
|
|
23
45
|
|
|
24
|
-
const identityPublicKey1 = new
|
|
46
|
+
const identityPublicKey1 = new IdentityPublicKeyCreateTransition({
|
|
25
47
|
id: 0,
|
|
26
48
|
type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
|
|
27
49
|
data: publicKey1.toBuffer(),
|
|
28
50
|
purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
|
|
29
51
|
securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
|
|
30
52
|
readOnly: false,
|
|
53
|
+
signature: Buffer.alloc(0),
|
|
31
54
|
});
|
|
32
55
|
|
|
33
|
-
const privateKey2 = new PrivateKey();
|
|
56
|
+
const privateKey2 = new PrivateKey('afc20afac882f676af5a268a2eca9c763996c36dbeb3660648df2108006820c7');
|
|
34
57
|
const publicKey2 = privateKey2.toPublicKey();
|
|
35
58
|
|
|
36
|
-
const identityPublicKey2 = new
|
|
59
|
+
const identityPublicKey2 = new IdentityPublicKeyCreateTransition({
|
|
37
60
|
id: 1,
|
|
38
61
|
type: IdentityPublicKey.TYPES.ECDSA_HASH160,
|
|
39
62
|
data: Hash.sha256ripemd160(publicKey2.toBuffer()),
|
|
40
63
|
purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
|
|
41
64
|
securityLevel: IdentityPublicKey.SECURITY_LEVELS.CRITICAL,
|
|
42
65
|
readOnly: false,
|
|
66
|
+
signature: Buffer.alloc(0),
|
|
43
67
|
});
|
|
44
68
|
|
|
45
|
-
const
|
|
69
|
+
const blsModule = await BlsSignatures.getInstance();
|
|
70
|
+
blsAdapter = await getBlsAdapterMock();
|
|
71
|
+
|
|
72
|
+
const { BasicSchemeMPL } = blsModule;
|
|
46
73
|
|
|
47
74
|
const randomBytes = new Uint8Array(crypto.randomBytes(256));
|
|
48
|
-
const privateKey3 =
|
|
49
|
-
|
|
50
|
-
const publicKey3 = privateKey3.getPublicKey();
|
|
75
|
+
const privateKey3 = BasicSchemeMPL.keyGen(randomBytes);
|
|
76
|
+
const publicKey3 = privateKey3.getG1();
|
|
51
77
|
|
|
52
|
-
const identityPublicKey3 = new
|
|
78
|
+
const identityPublicKey3 = new IdentityPublicKeyCreateTransition({
|
|
53
79
|
id: 2,
|
|
54
80
|
type: IdentityPublicKey.TYPES.BLS12_381,
|
|
55
81
|
data: Buffer.from(publicKey3.serialize()),
|
|
56
82
|
purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
|
|
57
83
|
securityLevel: IdentityPublicKey.SECURITY_LEVELS.CRITICAL,
|
|
58
84
|
readOnly: false,
|
|
85
|
+
signature: Buffer.alloc(0),
|
|
59
86
|
});
|
|
60
87
|
|
|
61
88
|
identityCreateTransition.setPublicKeys([
|
|
@@ -65,14 +92,14 @@ describe('validatePublicKeySignaturesFactory', () => {
|
|
|
65
92
|
]);
|
|
66
93
|
|
|
67
94
|
await identityCreateTransition.signByPrivateKey(
|
|
68
|
-
privateKey1,
|
|
95
|
+
privateKey1.toBuffer(),
|
|
69
96
|
IdentityPublicKey.TYPES.ECDSA_SECP256K1,
|
|
70
97
|
);
|
|
71
98
|
|
|
72
99
|
const signature1 = identityCreateTransition.getSignature();
|
|
73
100
|
|
|
74
101
|
await identityCreateTransition.signByPrivateKey(
|
|
75
|
-
privateKey2,
|
|
102
|
+
privateKey2.toBuffer(),
|
|
76
103
|
IdentityPublicKey.TYPES.ECDSA_HASH160,
|
|
77
104
|
);
|
|
78
105
|
|
|
@@ -81,6 +108,7 @@ describe('validatePublicKeySignaturesFactory', () => {
|
|
|
81
108
|
await identityCreateTransition.signByPrivateKey(
|
|
82
109
|
Buffer.from(privateKey3.serialize()),
|
|
83
110
|
IdentityPublicKey.TYPES.BLS12_381,
|
|
111
|
+
blsAdapter,
|
|
84
112
|
);
|
|
85
113
|
|
|
86
114
|
const signature3 = identityCreateTransition.getSignature();
|
|
@@ -89,11 +117,21 @@ describe('validatePublicKeySignaturesFactory', () => {
|
|
|
89
117
|
identityPublicKey2.setSignature(signature2);
|
|
90
118
|
identityPublicKey3.setSignature(signature3);
|
|
91
119
|
|
|
120
|
+
identityCreateTransition.setPublicKeys([
|
|
121
|
+
identityPublicKey1,
|
|
122
|
+
identityPublicKey2,
|
|
123
|
+
identityPublicKey3,
|
|
124
|
+
]);
|
|
125
|
+
|
|
92
126
|
rawIdentityCreateTransition = identityCreateTransition.toObject();
|
|
93
127
|
|
|
94
|
-
const
|
|
128
|
+
const validator = new PublicKeysSignaturesValidator(blsAdapter);
|
|
129
|
+
validatePublicKeySignatures = (
|
|
130
|
+
stateTransition, keys,
|
|
131
|
+
) => validator.validate(stateTransition, keys);
|
|
95
132
|
|
|
96
|
-
|
|
133
|
+
privateKey3.delete();
|
|
134
|
+
publicKey3.delete();
|
|
97
135
|
});
|
|
98
136
|
|
|
99
137
|
it('should return InvalidIdentityKeySignatureError if signature is not valid', async () => {
|
|
@@ -104,10 +142,9 @@ describe('validatePublicKeySignaturesFactory', () => {
|
|
|
104
142
|
const result = await validatePublicKeySignatures(
|
|
105
143
|
rawIdentityCreateTransition,
|
|
106
144
|
rawIdentityCreateTransition.publicKeys,
|
|
107
|
-
identityCreateTransition.getExecutionContext(),
|
|
108
145
|
);
|
|
109
146
|
|
|
110
|
-
expectValidationError(result, InvalidIdentityKeySignatureError);
|
|
147
|
+
await expectValidationError(result, InvalidIdentityKeySignatureError);
|
|
111
148
|
|
|
112
149
|
const error = result.getFirstError();
|
|
113
150
|
|
|
@@ -118,7 +155,7 @@ describe('validatePublicKeySignaturesFactory', () => {
|
|
|
118
155
|
const result = await validatePublicKeySignatures(
|
|
119
156
|
rawIdentityCreateTransition,
|
|
120
157
|
rawIdentityCreateTransition.publicKeys,
|
|
121
|
-
|
|
158
|
+
blsAdapter,
|
|
122
159
|
);
|
|
123
160
|
|
|
124
161
|
expect(result).to.be.instanceOf(ValidationResult);
|