@dashevo/wasm-dpp 0.24.0-dev.33 → 0.25.0-dev.10
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/Cargo.toml +2 -2
- package/dist/wasm/wasm_dpp.d.ts +600 -454
- package/dist/wasm/wasm_dpp.js +178 -120
- package/dist/wasm/wasm_dpp_bg.js +1 -1
- package/lib/test/fixtures/getDocumentsFixture.js +5 -1
- package/lib/wasm/wasm_dpp.d.ts +600 -454
- package/package.json +4 -4
- package/src/dash_platform_protocol.rs +1 -1
- package/src/data_contract/data_contract.rs +2 -1
- package/src/data_contract/data_contract_facade.rs +2 -2
- 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 +7 -16
- package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +5 -3
- package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +6 -2
- package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +7 -18
- package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +6 -4
- package/src/decode_protocol_entity.rs +19 -19
- package/src/document/extended_document.rs +5 -2
- package/src/document/fetch_and_validate_data_contract.rs +2 -2
- package/src/document/mod.rs +5 -3
- package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +9 -6
- package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +1 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +1 -1
- package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +1 -2
- package/src/document/state_transition/document_batch_transition/mod.rs +18 -25
- package/src/document/state_transition/document_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs +4 -4
- package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_batch_transitions_state.rs +3 -1
- package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +3 -3
- package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +3 -3
- package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +3 -3
- package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +4 -4
- package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +1 -1
- package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +2 -2
- package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +1 -1
- package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +1 -1
- package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +1 -1
- 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_transition_action_error.rs +1 -1
- package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +1 -1
- package/src/errors/consensus/basic/document/invalid_document_type_error.rs +2 -2
- package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +1 -1
- package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +1 -1
- package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +1 -1
- package/src/errors/consensus/basic/document/missing_document_type_error.rs +1 -1
- 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 +1 -1
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +1 -1
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +1 -1
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +1 -1
- package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_proof_chain_lock_validation_error.rs +35 -0
- package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +1 -1
- 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/invalid_identity_public_key_type_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +1 -1
- package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +1 -1
- package/src/errors/consensus/basic/identity/missing_public_key_error.rs +1 -1
- package/src/errors/consensus/basic/identity/mod.rs +2 -0
- package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +2 -2
- package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -1
- package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +7 -3
- package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +1 -1
- package/src/errors/consensus/basic/json_schema_compilation_error.rs +1 -1
- package/src/errors/consensus/basic/json_schema_error.rs +1 -3
- package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -1
- package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +2 -2
- package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +1 -1
- package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +1 -1
- package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +1 -1
- package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +1 -1
- package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +1 -1
- package/src/errors/consensus/consensus_error.rs +24 -4
- package/src/errors/consensus/deserialize.rs +1 -1
- package/src/errors/consensus/fee/balance_is_not_enough_error.rs +1 -1
- package/src/errors/consensus/signature/basic_bls_error.rs +38 -0
- package/src/errors/consensus/signature/basic_ecdsa_error.rs +38 -0
- package/src/errors/consensus/signature/mod.rs +6 -0
- package/src/errors/consensus/signature/signature_should_not_be_present_error.rs +38 -0
- package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +2 -2
- package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +58 -1
- package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +66 -1
- package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +50 -1
- package/src/errors/consensus/state/document/document_already_present_error.rs +1 -1
- package/src/errors/consensus/state/document/document_not_found_error.rs +1 -1
- package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +1 -1
- package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +2 -2
- package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +1 -1
- package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +1 -1
- package/src/errors/consensus/state/document/invalid_document_revision_error.rs +1 -1
- package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +1 -1
- package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +1 -1
- package/src/errors/consensus/state/identity/identity_already_exists_error.rs +1 -1
- package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +1 -1
- package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +1 -1
- package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +1 -1
- package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +1 -1
- package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +1 -1
- package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +1 -1
- package/src/errors/consensus/state/identity/missing_identity_public_key_ids_error.rs +26 -0
- package/src/errors/consensus/state/identity/mod.rs +2 -0
- package/src/errors/consensus/value_error.rs +1 -1
- package/src/errors/from.rs +0 -1
- package/src/generate_temporary_ecdsa_private_key.rs +2 -6
- package/src/identity/factory_utils.rs +4 -4
- package/src/identity/identity_public_key/key_type.rs +2 -0
- package/src/identity/identity_public_key/purpose.rs +7 -0
- package/src/identity/mod.rs +4 -2
- package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +6 -2
- package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +14 -32
- package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +3 -1
- package/src/identity/state_transition/identity_create_transition/to_object.rs +2 -2
- package/src/identity/state_transition/identity_public_key_transitions.rs +11 -11
- package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +6 -2
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +7 -26
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +3 -1
- package/src/identity/state_transition/identity_update_transition/apply_identity_update_transition.rs +3 -1
- package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +2 -2
- package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +11 -32
- package/src/identity/state_transition/identity_update_transition/identity_update_transition_state_validator.rs +3 -2
- package/src/identity/state_transition/identity_update_transition/to_object.rs +2 -2
- package/src/identity/state_transition/validate_public_key_signatures.rs +2 -2
- package/src/state_repository.rs +3 -2
- package/src/state_transition/fee/calculate_state_transition_fee.rs +8 -5
- package/src/state_transition/state_transition_facade.rs +18 -21
- package/src/state_transition/validation/state_transition_fee_validator.rs +3 -1
- package/src/state_transition/validation/validate_state_transition_identity_signature.rs +22 -6
- package/src/state_transition/validation/validate_state_transition_key_signature.rs +7 -1
- package/src/utils.rs +2 -4
- package/src/validation/validation_result.rs +12 -7
- package/test/integration/dataContract/DataContractFacade.spec.js +17 -20
- package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +5 -4
- package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +0 -17
- package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +10 -3
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +4 -7
- package/test/integration/stateTransition/StateTransitionFacade.spec.js +21 -8
- package/test/unit/dataContract/DataContract.spec.js +9 -21
- package/test/unit/dataContract/DataContractFactory.spec.js +19 -28
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +2 -4
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +0 -7
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +10 -8
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +3 -5
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +1 -3
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +8 -6
- package/test/unit/decodeProtocolEntityFactory.spec.js +4 -1
- package/test/unit/document/Document.spec.js +9 -7
- package/test/unit/document/DocumentFactory.spec.js +38 -90
- package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +2 -3
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +5 -6
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +20 -18
- package/test/unit/identity/Identity.spec.js +3 -8
- package/test/unit/identity/IdentityFactory.spec.js +3 -4
- package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +1 -2
- package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +7 -3
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +1 -2
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +5 -1
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +3 -3
- package/test/unit/stateTransition/validation/validateStateTransitionBasicFactory.spec.js +12 -6
- package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +4 -16
- package/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js +8 -4
- package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +3 -1
- package/test/unit/stateTransition/validation/validateStateTransitionStateFactory.spec.js +7 -3
|
@@ -8,10 +8,8 @@ describe('applyDataContractCreateTransitionFactory', () => {
|
|
|
8
8
|
let stateTransition;
|
|
9
9
|
let dataContract;
|
|
10
10
|
let factory;
|
|
11
|
-
let executionContext;
|
|
12
11
|
let DataContractCreateTransition;
|
|
13
12
|
let ApplyDataContractCreateTransition;
|
|
14
|
-
let StateTransitionExecutionContext;
|
|
15
13
|
|
|
16
14
|
let dataContractStored;
|
|
17
15
|
|
|
@@ -19,7 +17,6 @@ describe('applyDataContractCreateTransitionFactory', () => {
|
|
|
19
17
|
({
|
|
20
18
|
DataContractCreateTransition,
|
|
21
19
|
ApplyDataContractCreateTransition,
|
|
22
|
-
StateTransitionExecutionContext,
|
|
23
20
|
} = await loadWasmDpp());
|
|
24
21
|
});
|
|
25
22
|
|
|
@@ -32,10 +29,6 @@ describe('applyDataContractCreateTransitionFactory', () => {
|
|
|
32
29
|
entropy: Buffer.alloc(32),
|
|
33
30
|
});
|
|
34
31
|
|
|
35
|
-
executionContext = new StateTransitionExecutionContext();
|
|
36
|
-
|
|
37
|
-
stateTransition.setExecutionContext(executionContext);
|
|
38
|
-
|
|
39
32
|
const stateRepositoryLike = {
|
|
40
33
|
createDataContract: async () => {
|
|
41
34
|
dataContractStored = true;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
2
1
|
const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
|
|
2
|
+
const getDataContractFixture = require('../../../../../../../lib/test/fixtures/getDataContractFixture');
|
|
3
3
|
|
|
4
4
|
const { default: loadWasmDpp } = require('../../../../../../../dist');
|
|
5
5
|
|
|
@@ -27,8 +27,8 @@ describe('validateDataContractCreateTransitionStateFactory', () => {
|
|
|
27
27
|
} = await loadWasmDpp());
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
-
beforeEach(() => {
|
|
31
|
-
dataContract = getDataContractFixture();
|
|
30
|
+
beforeEach(async () => {
|
|
31
|
+
dataContract = await getDataContractFixture();
|
|
32
32
|
stateTransition = new DataContractCreateTransition({
|
|
33
33
|
protocolVersion: protocolVersion.latestVersion,
|
|
34
34
|
dataContract: dataContract.toObject(),
|
|
@@ -37,8 +37,6 @@ describe('validateDataContractCreateTransitionStateFactory', () => {
|
|
|
37
37
|
|
|
38
38
|
executionContext = new StateTransitionExecutionContext();
|
|
39
39
|
|
|
40
|
-
stateTransition.setExecutionContext(executionContext);
|
|
41
|
-
|
|
42
40
|
dataContractFetched = false;
|
|
43
41
|
|
|
44
42
|
const stateRepositoryLike = {
|
|
@@ -47,22 +45,26 @@ describe('validateDataContractCreateTransitionStateFactory', () => {
|
|
|
47
45
|
},
|
|
48
46
|
};
|
|
49
47
|
|
|
50
|
-
factory = (t) => validateDataContractCreateTransitionState(
|
|
48
|
+
factory = (t) => validateDataContractCreateTransitionState(
|
|
49
|
+
stateRepositoryLike, t, executionContext,
|
|
50
|
+
);
|
|
51
51
|
});
|
|
52
52
|
|
|
53
53
|
it('should return invalid result if Data Contract is already exist', async () => {
|
|
54
54
|
// This time our state repository should return a data contract on fetch
|
|
55
55
|
const validator = new DataContractValidator();
|
|
56
56
|
const dataContractFactory = new DataContractFactory(1, validator);
|
|
57
|
-
const
|
|
57
|
+
const reCreatedDataContract = await dataContractFactory
|
|
58
|
+
.createFromBuffer(dataContract.toBuffer());
|
|
58
59
|
|
|
59
60
|
const stateRepositoryLikeWithContract = {
|
|
60
|
-
fetchDataContract: async () =>
|
|
61
|
+
fetchDataContract: async () => reCreatedDataContract,
|
|
61
62
|
};
|
|
62
63
|
|
|
63
64
|
const result = await validateDataContractCreateTransitionState(
|
|
64
65
|
stateRepositoryLikeWithContract,
|
|
65
66
|
stateTransition,
|
|
67
|
+
executionContext,
|
|
66
68
|
);
|
|
67
69
|
const [error] = result.getErrors();
|
|
68
70
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const varint = require('varint');
|
|
2
1
|
const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
3
2
|
const stateTransitionTypes = require('@dashevo/dpp/lib/stateTransition/stateTransitionTypes');
|
|
4
3
|
const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
|
|
@@ -62,11 +61,10 @@ describe('DataContractUpdateTransition', () => {
|
|
|
62
61
|
});
|
|
63
62
|
|
|
64
63
|
describe('#toBuffer', () => {
|
|
65
|
-
it('should return serialized State Transition
|
|
66
|
-
const protocolVersionBytes = Buffer.from(varint.encode(stateTransition.getProtocolVersion()));
|
|
67
|
-
|
|
64
|
+
it('should return serialized State Transition', () => {
|
|
68
65
|
const result = stateTransition.toBuffer();
|
|
69
|
-
expect(result
|
|
66
|
+
expect(result).to.be.instanceOf(Buffer);
|
|
67
|
+
expect(result).to.have.lengthOf(2239);
|
|
70
68
|
});
|
|
71
69
|
});
|
|
72
70
|
|
|
@@ -31,8 +31,6 @@ describe('applyDataContractUpdateTransitionFactory', () => {
|
|
|
31
31
|
|
|
32
32
|
executionContext = new StateTransitionExecutionContext();
|
|
33
33
|
|
|
34
|
-
stateTransition.setExecutionContext(executionContext);
|
|
35
|
-
|
|
36
34
|
const stateRepositoryLike = {
|
|
37
35
|
updateDataContract: async () => {
|
|
38
36
|
dataContractStored = true;
|
|
@@ -45,7 +43,7 @@ describe('applyDataContractUpdateTransitionFactory', () => {
|
|
|
45
43
|
});
|
|
46
44
|
|
|
47
45
|
it('should store a data contract from state transition in the repository', async () => {
|
|
48
|
-
await factory.applyDataContractUpdateTransition(stateTransition);
|
|
46
|
+
await factory.applyDataContractUpdateTransition(stateTransition, executionContext);
|
|
49
47
|
expect(dataContractStored).to.be.true();
|
|
50
48
|
});
|
|
51
49
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
2
1
|
const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
|
|
2
|
+
const getDataContractFixture = require('../../../../../../../lib/test/fixtures/getDataContractFixture');
|
|
3
3
|
|
|
4
4
|
const { default: loadWasmDpp } = require('../../../../../../../dist');
|
|
5
5
|
|
|
@@ -31,7 +31,7 @@ describe('validateDataContractUpdateTransitionStateFactory', () => {
|
|
|
31
31
|
});
|
|
32
32
|
|
|
33
33
|
beforeEach(async () => {
|
|
34
|
-
dataContract = getDataContractFixture();
|
|
34
|
+
dataContract = await getDataContractFixture();
|
|
35
35
|
|
|
36
36
|
const updatedRawDataContract = dataContract.toObject();
|
|
37
37
|
|
|
@@ -44,19 +44,19 @@ describe('validateDataContractUpdateTransitionStateFactory', () => {
|
|
|
44
44
|
|
|
45
45
|
executionContext = new StateTransitionExecutionContext();
|
|
46
46
|
|
|
47
|
-
stateTransition.setExecutionContext(executionContext);
|
|
48
|
-
|
|
49
47
|
const validator = new DataContractValidator();
|
|
50
48
|
const dataContractFactory = new DataContractFactory(protocolVersion.latestVersion, validator);
|
|
51
|
-
const
|
|
49
|
+
const reCreatedDataContract = await dataContractFactory
|
|
50
|
+
.createFromBuffer(dataContract.toBuffer());
|
|
52
51
|
|
|
53
52
|
const stateRepositoryLike = {
|
|
54
|
-
fetchDataContract: async () =>
|
|
53
|
+
fetchDataContract: async () => reCreatedDataContract,
|
|
55
54
|
};
|
|
56
55
|
|
|
57
56
|
validateTransitionWithExistingContract = (t) => validateDataContractUpdateTransitionState(
|
|
58
57
|
stateRepositoryLike,
|
|
59
58
|
t,
|
|
59
|
+
executionContext,
|
|
60
60
|
);
|
|
61
61
|
});
|
|
62
62
|
|
|
@@ -68,6 +68,7 @@ describe('validateDataContractUpdateTransitionStateFactory', () => {
|
|
|
68
68
|
const validateTransitionWithNoContract = (t) => validateDataContractUpdateTransitionState(
|
|
69
69
|
stateRepositoryLikeNoDataContract,
|
|
70
70
|
t,
|
|
71
|
+
executionContext,
|
|
71
72
|
);
|
|
72
73
|
|
|
73
74
|
const result = await validateTransitionWithNoContract(stateTransition);
|
|
@@ -114,6 +115,7 @@ describe('validateDataContractUpdateTransitionStateFactory', () => {
|
|
|
114
115
|
const validateTransitionWithNoContract = (t) => validateDataContractUpdateTransitionState(
|
|
115
116
|
stateRepositoryLikeNoDataContract,
|
|
116
117
|
t,
|
|
118
|
+
executionContext,
|
|
117
119
|
);
|
|
118
120
|
|
|
119
121
|
executionContext.enableDryRun();
|
|
@@ -4,7 +4,10 @@ const { encode } = require('@dashevo/dpp/lib/util/serializer');
|
|
|
4
4
|
let { decodeProtocolEntity, ProtocolVersionParsingError, SerializedObjectParsingError } = require('../..');
|
|
5
5
|
const { default: loadWasmDpp } = require('../..');
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
// TODO: decodeProtocolEntity was broken after serialization refactoring
|
|
8
|
+
// it was mostly used in js-drive and does not seem to be needed anymore
|
|
9
|
+
// can we remove it completely?
|
|
10
|
+
describe.skip('decodeProtocolEntityFactory', () => {
|
|
8
11
|
let parsedProtocolVersion;
|
|
9
12
|
let entityBuffer;
|
|
10
13
|
let protocolVersionBuffer;
|
|
@@ -411,15 +411,15 @@ describe('Document', () => {
|
|
|
411
411
|
});
|
|
412
412
|
|
|
413
413
|
describe('#toBuffer', () => {
|
|
414
|
-
it('
|
|
415
|
-
const jsBuffer = documentJs.toBuffer();
|
|
414
|
+
it('should return serialized Document', () => {
|
|
416
415
|
const buffer = document.toBuffer();
|
|
417
|
-
|
|
418
|
-
expect(
|
|
419
|
-
expect(jsBuffer).to.deep.equal(buffer);
|
|
416
|
+
expect(buffer).to.be.instanceOf(Buffer);
|
|
417
|
+
expect(buffer.length).to.equal(509);
|
|
420
418
|
});
|
|
421
419
|
|
|
422
|
-
|
|
420
|
+
// TODO: remove or replace?
|
|
421
|
+
// can not be compared to JS buffers anymore because uses bin code
|
|
422
|
+
it.skip('should return the same bytes as JS version when dynamic identifier is in Document', () => {
|
|
423
423
|
const jsId = generateRandomIdentifier();
|
|
424
424
|
const id = new Identifier(jsId.toBuffer());
|
|
425
425
|
const path = 'dataObject.binaryObject.identifier';
|
|
@@ -438,7 +438,9 @@ describe('Document', () => {
|
|
|
438
438
|
expect(jsBuffer).to.deep.equal(buffer);
|
|
439
439
|
});
|
|
440
440
|
|
|
441
|
-
|
|
441
|
+
// TODO: remove or replace?
|
|
442
|
+
// can not be compared to JS buffers anymore because uses bin code
|
|
443
|
+
it.skip('should return the same bytes as JS version when dynamic binaryData is in Document', () => {
|
|
442
444
|
const data = Buffer.alloc(32);
|
|
443
445
|
const path = 'dataObject.binaryObject.binaryData';
|
|
444
446
|
|
|
@@ -2,50 +2,38 @@ const bs58 = require('bs58');
|
|
|
2
2
|
|
|
3
3
|
const DocumentCreateTransition = require('@dashevo/dpp/lib/document/stateTransition/DocumentsBatchTransition/documentTransition/DocumentCreateTransition');
|
|
4
4
|
const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
|
|
5
|
-
const createDPPMock = require('@dashevo/dpp/lib/test/mocks/createDPPMock');
|
|
6
|
-
const DocumentFactoryJS = require('@dashevo/dpp/lib/document/DocumentFactory');
|
|
7
5
|
|
|
8
|
-
const
|
|
9
|
-
const
|
|
6
|
+
const getDataContractFixture = require('../../../lib/test/fixtures/getDataContractFixture');
|
|
7
|
+
const getDocumentsFixture = require('../../../lib/test/fixtures/getDocumentsFixture');
|
|
10
8
|
const createStateRepositoryMock = require('../../../lib/test/mocks/createStateRepositoryMock');
|
|
11
9
|
const generateRandomIdentifierAsync = require('../../../lib/test/utils/generateRandomIdentifierAsync');
|
|
12
10
|
|
|
13
11
|
let {
|
|
14
|
-
Identifier, DocumentFactory,
|
|
12
|
+
Identifier, DocumentFactory, ExtendedDocument, DocumentValidator,
|
|
15
13
|
ProtocolVersionValidator, InvalidDocumentTypeInDataContractError, InvalidDocumentError,
|
|
16
14
|
JsonSchemaError, NoDocumentsSuppliedError, MismatchOwnerIdsError, InvalidInitialRevisionError,
|
|
17
|
-
InvalidActionNameError,
|
|
15
|
+
InvalidActionNameError,
|
|
18
16
|
} = require('../../..');
|
|
19
17
|
|
|
20
|
-
const { default: loadWasmDpp } = require('../../..');
|
|
18
|
+
const { default: loadWasmDpp, SerializedObjectParsingError } = require('../../..');
|
|
21
19
|
|
|
22
20
|
describe('DocumentFactory', () => {
|
|
23
|
-
let decodeProtocolEntityMock;
|
|
24
|
-
let validateDocumentMock;
|
|
25
|
-
let fetchAndValidateDataContractMock;
|
|
26
21
|
let stateRepositoryMock;
|
|
27
22
|
let ownerIdJs;
|
|
28
23
|
let ownerId;
|
|
29
24
|
let dataContract;
|
|
30
25
|
let dataContractJs;
|
|
31
26
|
let document;
|
|
32
|
-
let documentJs;
|
|
33
|
-
let documentsJs;
|
|
34
27
|
let documents;
|
|
35
28
|
let rawDocument;
|
|
36
|
-
let rawDocumentJs;
|
|
37
|
-
let factoryJs;
|
|
38
29
|
let factory;
|
|
39
|
-
let fakeTime;
|
|
40
|
-
let fakeTimeDate;
|
|
41
|
-
let dppMock;
|
|
42
30
|
let dataContractId;
|
|
43
31
|
let documentValidator;
|
|
44
32
|
|
|
45
33
|
beforeEach(async () => {
|
|
46
34
|
({
|
|
47
35
|
Identifier, ProtocolVersionValidator, DocumentValidator, DocumentFactory,
|
|
48
|
-
|
|
36
|
+
ExtendedDocument,
|
|
49
37
|
// Errors:
|
|
50
38
|
InvalidDocumentTypeInDataContractError,
|
|
51
39
|
InvalidDocumentError,
|
|
@@ -54,62 +42,29 @@ describe('DocumentFactory', () => {
|
|
|
54
42
|
MismatchOwnerIdsError,
|
|
55
43
|
InvalidInitialRevisionError,
|
|
56
44
|
InvalidActionNameError,
|
|
57
|
-
PlatformValueError,
|
|
58
45
|
} = await loadWasmDpp());
|
|
59
46
|
});
|
|
60
47
|
|
|
61
|
-
beforeEach(function beforeEach() {
|
|
48
|
+
beforeEach(async function beforeEach() {
|
|
62
49
|
const protocolValidator = new ProtocolVersionValidator();
|
|
63
50
|
documentValidator = new DocumentValidator(protocolValidator);
|
|
64
51
|
|
|
65
|
-
|
|
66
|
-
|
|
52
|
+
dataContract = await getDataContractFixture();
|
|
53
|
+
dataContractId = dataContract.getId();
|
|
67
54
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const dc = DataContract.fromBuffer(dataContractJs.toBuffer());
|
|
71
|
-
dataContractId = dataContractJs.getId().toBuffer();
|
|
55
|
+
documents = await getDocumentsFixture(dataContract);
|
|
56
|
+
ownerId = documents[0].getOwnerId();
|
|
72
57
|
|
|
73
|
-
documentsJs = getDocumentsFixtureJs(dataContractJs);
|
|
74
|
-
documents = documentsJs.map((d) => {
|
|
75
|
-
const doc = new ExtendedDocument(d.toObject(), dataContract);
|
|
76
|
-
doc.setEntropy(d.entropy);
|
|
77
|
-
return doc;
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
([, , , documentJs] = documentsJs);
|
|
81
|
-
rawDocumentJs = documentJs.toObject();
|
|
82
58
|
([, , , document] = documents);
|
|
83
59
|
rawDocument = document.toObject();
|
|
84
60
|
|
|
85
|
-
decodeProtocolEntityMock = this.sinonSandbox.stub();
|
|
86
|
-
validateDocumentMock = this.sinonSandbox.stub();
|
|
87
|
-
|
|
88
|
-
validateDocumentMock.returns(new ValidationResult());
|
|
89
|
-
|
|
90
61
|
const fetchContractResult = new ValidationResult();
|
|
91
62
|
fetchContractResult.setData(dataContractJs);
|
|
92
63
|
|
|
93
64
|
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
94
|
-
stateRepositoryMock.fetchDataContract.resolves(
|
|
95
|
-
|
|
96
|
-
fetchAndValidateDataContractMock = this.sinonSandbox.stub().returns(fetchContractResult);
|
|
97
|
-
dppMock = createDPPMock();
|
|
65
|
+
stateRepositoryMock.fetchDataContract.resolves(dataContract);
|
|
98
66
|
|
|
99
67
|
factory = new DocumentFactory(1, documentValidator, stateRepositoryMock);
|
|
100
|
-
factoryJs = new DocumentFactoryJS(
|
|
101
|
-
dppMock,
|
|
102
|
-
validateDocumentMock,
|
|
103
|
-
fetchAndValidateDataContractMock,
|
|
104
|
-
decodeProtocolEntityMock,
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
fakeTimeDate = new Date();
|
|
108
|
-
fakeTime = this.sinonSandbox.useFakeTimers(fakeTimeDate);
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
afterEach(() => {
|
|
112
|
-
fakeTime.reset();
|
|
113
68
|
});
|
|
114
69
|
|
|
115
70
|
describe('create', () => {
|
|
@@ -118,7 +73,7 @@ describe('DocumentFactory', () => {
|
|
|
118
73
|
// should be valid for this test and it passes the DataContract validation.
|
|
119
74
|
// The previous version of test passed due to the fact that
|
|
120
75
|
// the mocked DataContract validator always returned true.
|
|
121
|
-
const [niceDocument] =
|
|
76
|
+
const [niceDocument] = documents;
|
|
122
77
|
|
|
123
78
|
const newRawDocument = niceDocument.toObject();
|
|
124
79
|
const contractId = bs58.decode('FQco85WbwNgb5ix8QQAH6wurMcgEC5ENSCv5ixG9cj12');
|
|
@@ -227,12 +182,11 @@ describe('DocumentFactory', () => {
|
|
|
227
182
|
});
|
|
228
183
|
|
|
229
184
|
it('should throw InvalidDocumentError if Data Contract is not valid', async () => {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
stateRepositoryMock.fetchDataContract.resolves(dc);
|
|
185
|
+
dataContract.setDocuments({ '$%34': { '^&*': 'Keck' } });
|
|
186
|
+
stateRepositoryMock.fetchDataContract.resolves(dataContract);
|
|
233
187
|
|
|
234
188
|
try {
|
|
235
|
-
await factory.createFromObject(
|
|
189
|
+
await factory.createFromObject(rawDocument);
|
|
236
190
|
|
|
237
191
|
expect.fail('InvalidDocumentTypeInDataContractError should be thrown');
|
|
238
192
|
} catch (e) {
|
|
@@ -241,7 +195,7 @@ describe('DocumentFactory', () => {
|
|
|
241
195
|
expect(stateRepositoryMock.fetchDataContract.callCount).to.be.equal(1);
|
|
242
196
|
const callArguments = stateRepositoryMock.fetchDataContract.getCall(0).args[0];
|
|
243
197
|
|
|
244
|
-
expect(callArguments.toBuffer()).to.be.deep.equal(
|
|
198
|
+
expect(callArguments.toBuffer()).to.be.deep.equal(dataContract.getId().toBuffer());
|
|
245
199
|
}
|
|
246
200
|
});
|
|
247
201
|
});
|
|
@@ -249,28 +203,22 @@ describe('DocumentFactory', () => {
|
|
|
249
203
|
describe('createFromBuffer', () => {
|
|
250
204
|
let serializedDocument;
|
|
251
205
|
|
|
252
|
-
beforeEach(
|
|
253
|
-
this.sinonSandbox.stub(factoryJs, 'createFromObject');
|
|
206
|
+
beforeEach(() => {
|
|
254
207
|
// eslint-disable-next-line prefer-destructuring
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
rawDocumentJs = documentJs.toObject();
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
afterEach(() => {
|
|
262
|
-
factoryJs.createFromObject.restore();
|
|
208
|
+
document = documents[8]; // document with binary fields
|
|
209
|
+
serializedDocument = document.toBuffer();
|
|
210
|
+
rawDocument = document.toObject();
|
|
263
211
|
});
|
|
264
212
|
|
|
265
213
|
it('should return new Document from serialized one', async () => {
|
|
266
214
|
const result = await factory.createFromBuffer(serializedDocument);
|
|
267
|
-
expect(result.toObject()).to.deep.equal(
|
|
215
|
+
expect(result.toObject()).to.deep.equal(document.toObject());
|
|
268
216
|
expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce();
|
|
269
217
|
});
|
|
270
218
|
|
|
271
219
|
it('should throw InvalidDocumentError if the decoding fails with consensus error', async () => {
|
|
272
|
-
|
|
273
|
-
serializedDocument =
|
|
220
|
+
stateRepositoryMock.fetchDataContract.resolves(null);
|
|
221
|
+
serializedDocument = document.toBuffer();
|
|
274
222
|
|
|
275
223
|
try {
|
|
276
224
|
await factory.createFromBuffer(serializedDocument);
|
|
@@ -281,18 +229,19 @@ describe('DocumentFactory', () => {
|
|
|
281
229
|
}
|
|
282
230
|
});
|
|
283
231
|
|
|
284
|
-
it('should throw an error if decoding fails with any other error
|
|
232
|
+
it('should throw an error if decoding fails with any other error', async () => {
|
|
285
233
|
const serializeDocument = Buffer.alloc(160, 1);
|
|
286
234
|
try {
|
|
287
235
|
await factory.createFromBuffer(serializeDocument);
|
|
288
236
|
|
|
289
237
|
expect.fail('should throw an error');
|
|
290
238
|
} catch (e) {
|
|
291
|
-
expect(e).to.be.instanceOf(
|
|
292
|
-
expect(e.getMessage()).to.equal('structure error: value is not a map');
|
|
239
|
+
expect(e).to.be.instanceOf(SerializedObjectParsingError);
|
|
293
240
|
}
|
|
294
241
|
});
|
|
295
|
-
});
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
describe('createStateTransition', () => {
|
|
296
245
|
it('should throw and error if documents have unknown action', async () => {
|
|
297
246
|
try {
|
|
298
247
|
factory.createStateTransition({
|
|
@@ -348,23 +297,22 @@ describe('DocumentFactory', () => {
|
|
|
348
297
|
});
|
|
349
298
|
|
|
350
299
|
it('should create DocumentsBatchTransition with passed documents', async () => {
|
|
351
|
-
const [
|
|
352
|
-
|
|
300
|
+
const [newDocument] = await getDocumentsFixture(dataContract);
|
|
301
|
+
newDocument.setData({ lastName: 'Keck' });
|
|
353
302
|
|
|
354
303
|
const stateTransition = factory.createStateTransition({
|
|
355
304
|
create: documents,
|
|
356
305
|
replace: [newDocument],
|
|
357
306
|
});
|
|
358
307
|
|
|
359
|
-
const
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
const transitions = stateTransition.getTransitions().map((t) => t.toObject());
|
|
365
|
-
const expectedTransitions = stateTransitionJs.getTransitions().map((t) => t.toObject());
|
|
308
|
+
const replaceDocuments = stateTransition.getTransitions()
|
|
309
|
+
.filter((t) => t.getAction() === 1);
|
|
310
|
+
const createDocuments = stateTransition.getTransitions()
|
|
311
|
+
.filter((t) => t.getAction() === 0);
|
|
366
312
|
|
|
367
|
-
expect(
|
|
313
|
+
expect(replaceDocuments[0].getId()).to.deep.equal(newDocument.getId());
|
|
314
|
+
expect(replaceDocuments[0].getRevision()).to.deep.equal(2);
|
|
315
|
+
expect(createDocuments).to.have.lengthOf(documents.length);
|
|
368
316
|
});
|
|
369
317
|
});
|
|
370
318
|
});
|
package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js
CHANGED
|
@@ -105,10 +105,9 @@ describe('DocumentsBatchTransition', () => {
|
|
|
105
105
|
|
|
106
106
|
describe('#toBuffer', () => {
|
|
107
107
|
it('should return the same bytes as JS version', () => {
|
|
108
|
-
const bufferJs = stateTransitionJs.toBuffer();
|
|
109
108
|
const buffer = stateTransition.toBuffer();
|
|
110
|
-
|
|
111
|
-
expect(
|
|
109
|
+
expect(buffer).to.be.instanceOf(Buffer);
|
|
110
|
+
expect(buffer).to.have.length(23960);
|
|
112
111
|
});
|
|
113
112
|
});
|
|
114
113
|
|
|
@@ -104,7 +104,6 @@ describe('applyDocumentsBatchTransitionFactory', () => {
|
|
|
104
104
|
executionContext = new StateTransitionExecutionContext();
|
|
105
105
|
|
|
106
106
|
stateTransitionJs.setExecutionContext(executionContextJs);
|
|
107
|
-
stateTransition.setExecutionContext(executionContext);
|
|
108
107
|
|
|
109
108
|
stateRepositoryMockJs = createStateRepositoryMock(this.sinonSandbox);
|
|
110
109
|
stateRepositoryMockJs.fetchDataContract.resolves(dataContractJs);
|
|
@@ -163,7 +162,7 @@ describe('applyDocumentsBatchTransitionFactory', () => {
|
|
|
163
162
|
});
|
|
164
163
|
|
|
165
164
|
it('should call `store`, `replace` and `remove` functions for specific type of transitions - Rust', async () => {
|
|
166
|
-
await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition);
|
|
165
|
+
await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition, executionContext);
|
|
167
166
|
expect(stateRepositoryMock.createDocument).to.have.been.calledOnce();
|
|
168
167
|
|
|
169
168
|
const [fetchContractId, fetchDocumentType] = stateRepositoryMock
|
|
@@ -203,7 +202,7 @@ describe('applyDocumentsBatchTransitionFactory', () => {
|
|
|
203
202
|
const replaceDocumentTransition = documentTransitionsJs[1];
|
|
204
203
|
|
|
205
204
|
try {
|
|
206
|
-
await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition);
|
|
205
|
+
await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition, executionContext);
|
|
207
206
|
expect.fail('Error was not thrown');
|
|
208
207
|
} catch (e) {
|
|
209
208
|
expect(e).to.be.an.instanceOf(DocumentNotProvidedError);
|
|
@@ -227,11 +226,11 @@ describe('applyDocumentsBatchTransitionFactory', () => {
|
|
|
227
226
|
transitions: documentTransitionsJs.map((t) => t.toObject()),
|
|
228
227
|
}, [dataContract]);
|
|
229
228
|
|
|
230
|
-
|
|
229
|
+
executionContext.enableDryRun();
|
|
231
230
|
|
|
232
|
-
await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition);
|
|
231
|
+
await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition, executionContext);
|
|
233
232
|
|
|
234
|
-
|
|
233
|
+
executionContext.disableDryRun();
|
|
235
234
|
|
|
236
235
|
const [documentTransition] = stateTransition.getTransitions();
|
|
237
236
|
|