@dashevo/wasm-dpp 0.24.0-dev.11 → 0.24.0-dev.13
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 +3 -0
- package/README.md +5 -1
- package/dist/index.js +1 -1
- package/dist/index.js.LICENSE.txt +9 -0
- package/dist/lib/dpp.d.ts +9 -0
- package/dist/lib/errors/AbstractConsensusError.d.ts +10 -0
- package/dist/lib/errors/DPPError.d.ts +5 -0
- package/dist/lib/errors/patchConsensusErrors.d.ts +1 -0
- package/dist/lib/{patchIdentifier.d.ts → identifier/patchIdentifier.d.ts} +1 -1
- package/dist/{index.d.ts → lib/index.d.ts} +1 -1
- package/dist/lib/utils/extend.d.ts +1 -0
- package/dist/wasm/wasm_dpp.d.ts +1595 -518
- package/karma.conf.js +5 -0
- package/lib/dpp.ts +24 -0
- package/lib/errors/AbstractConsensusError.ts +13 -0
- package/lib/errors/DPPError.ts +15 -0
- package/lib/errors/patchConsensusErrors.ts +175 -0
- package/lib/{patchIdentifier.ts → identifier/patchIdentifier.ts} +6 -5
- package/{index.ts → lib/index.ts} +5 -4
- package/lib/test/bootstrap.js +5 -0
- package/lib/test/expect/expectError.js +4 -2
- package/lib/test/mocks/getBlsAdapterMock.js +36 -0
- package/lib/test/utils/newDocumentsContainer.js +36 -0
- package/lib/utils/extend.ts +6 -0
- package/package.json +9 -6
- package/src/bls_adapter.rs +16 -1
- package/src/data_contract/data_contract.rs +35 -7
- package/src/data_contract/errors/invalid_data_contract.rs +21 -0
- package/src/data_contract/errors/invalid_document_type.rs +1 -1
- package/src/data_contract/index.rs +56 -1
- package/src/data_contract/mod.rs +1 -0
- package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +6 -8
- package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +4 -4
- package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +44 -0
- package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +145 -0
- package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +49 -0
- package/src/data_contract/state_transition/mod.rs +2 -0
- package/src/data_contract_factory/data_contract_factory.rs +25 -12
- 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 +192 -0
- package/src/document/mod.rs +222 -30
- package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +47 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +25 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +65 -0
- package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +123 -3
- package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
- package/src/document/validator.rs +30 -0
- package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +5 -5
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +4 -4
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +36 -0
- package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +20 -0
- package/src/errors/consensus/basic/document/mod.rs +4 -0
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +2 -2
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +2 -2
- 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_public_key_security_level_error.rs +2 -2
- package/src/errors/consensus/basic/json_schema_error.rs +1 -1
- package/src/errors/consensus_error.rs +15 -8
- package/src/errors/dpp_error.rs +17 -0
- package/src/errors/from.rs +6 -1
- package/src/errors/js_conversion.rs +19 -4
- package/src/errors/mod.rs +3 -0
- package/src/errors/protocol_error.rs +15 -0
- package/src/{identifier.rs → identifier/mod.rs} +48 -3
- 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/mod.rs +7 -0
- package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
- package/src/{identity_facade.rs → identity/identity_facade.rs} +3 -5
- package/src/{identity_public_key → identity/identity_public_key}/key_type.rs +0 -0
- package/src/{identity_public_key → identity/identity_public_key}/mod.rs +41 -10
- package/src/{identity_public_key → identity/identity_public_key}/purpose.rs +0 -0
- package/src/{identity_public_key → identity/identity_public_key}/security_level.rs +0 -0
- package/src/{identity.rs → identity/mod.rs} +20 -12
- 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 +335 -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 +46 -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 +280 -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/mod.rs +9 -0
- package/src/identity/state_transition/validate_public_key_signatures.rs +59 -0
- package/src/identity/validation/mod.rs +3 -0
- package/src/identity/validation/public_keys_validator.rs +76 -0
- package/src/identity_public_key/public_keys_validator.rs +1 -1
- package/src/lib.rs +3 -6
- package/src/lodash.rs +7 -0
- package/src/state_repository.rs +188 -36
- package/src/state_transition/mod.rs +12 -0
- package/src/utils.rs +102 -7
- package/src/validation/json_schema_validator.rs +41 -0
- package/src/validation/mod.rs +5 -0
- package/src/{validation_result.rs → validation/validation_result.rs} +23 -5
- package/src/version/mod.rs +2 -0
- package/src/version/protocol_version.rs +26 -0
- package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +579 -502
- package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +175 -165
- package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +83 -114
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +1 -1
- package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +82 -91
- package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +75 -31
- package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -148
- package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +63 -75
- package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +48 -19
- package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +79 -114
- package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -11
- package/test/integration/stateTransition/StateTransitionFacade.spec.js +1 -1
- package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +135 -0
- package/test/unit/dataContract/DataContract.spec.js +5 -9
- package/test/unit/dataContract/DataContractFactory.spec.js +13 -6
- package/test/unit/dataContract/createDataContract.spec.js +0 -1
- package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +11 -3
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +20 -16
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +24 -60
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +27 -23
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +29 -12
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +66 -49
- package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +73 -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 +325 -91
- package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +142 -64
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +1 -1
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +1 -1
- package/test/unit/identity/Identity.spec.js +2 -2
- package/test/unit/identity/IdentityPublicKey.spec.js +25 -31
- package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +69 -30
- package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +32 -32
- package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +56 -25
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +48 -46
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
- 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/tsconfig.json +1 -1
- package/wasm/package.json +5 -0
- package/wasm/wasm_dpp.d.ts +1595 -518
- package/wasm/wasm_dpp.js +5007 -2172
- package/wasm/wasm_dpp_bg.js +1 -1
- package/wasm/wasm_dpp_bg.wasm +0 -0
- package/wasm/wasm_dpp_bg.wasm.d.ts +566 -365
- package/webpack.config.js +10 -1
- package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +0 -32
- package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +0 -93
- package/test/unit/dataContract/validation/validateDataContractPatternsFactory.spec.js +0 -64
|
@@ -194,13 +194,12 @@ describe('DataContract', () => {
|
|
|
194
194
|
|
|
195
195
|
describe('#getDocumentSchema', () => {
|
|
196
196
|
it('should throw error if Document is not defined', () => {
|
|
197
|
-
let error;
|
|
198
197
|
try {
|
|
199
198
|
dataContract.getDocumentSchema('undefinedObject');
|
|
199
|
+
expect.fail('Error was not thrown');
|
|
200
200
|
} catch (e) {
|
|
201
|
-
|
|
201
|
+
expect(e.getType()).to.equal('undefinedObject');
|
|
202
202
|
}
|
|
203
|
-
expect(error.getDocType()).to.equal('undefinedObject');
|
|
204
203
|
});
|
|
205
204
|
|
|
206
205
|
it('should return Document Schema', () => {
|
|
@@ -212,13 +211,12 @@ describe('DataContract', () => {
|
|
|
212
211
|
|
|
213
212
|
describe('#getDocumentSchemaRef', () => {
|
|
214
213
|
it('should throw error if Document is not defined', () => {
|
|
215
|
-
let error;
|
|
216
214
|
try {
|
|
217
215
|
dataContract.getDocumentSchemaRef('undefinedObject');
|
|
216
|
+
expect.fail('Error was not thrown');
|
|
218
217
|
} catch (e) {
|
|
219
|
-
|
|
218
|
+
expect(e.getType()).to.equal('undefinedObject');
|
|
220
219
|
}
|
|
221
|
-
expect(error.getDocType()).to.equal('undefinedObject');
|
|
222
220
|
});
|
|
223
221
|
|
|
224
222
|
it('should return schema ref', () => {
|
|
@@ -324,14 +322,12 @@ describe('DataContract', () => {
|
|
|
324
322
|
});
|
|
325
323
|
|
|
326
324
|
it('should throw an error if document type is not found', () => {
|
|
327
|
-
let error;
|
|
328
325
|
try {
|
|
329
326
|
dataContract.getBinaryProperties('unknown');
|
|
330
327
|
expect.fail('Error was not thrown');
|
|
331
328
|
} catch (e) {
|
|
332
|
-
|
|
329
|
+
expect(e.getType()).to.equal('unknown');
|
|
333
330
|
}
|
|
334
|
-
expect(error.getDocType()).to.equal('unknown');
|
|
335
331
|
});
|
|
336
332
|
});
|
|
337
333
|
|
|
@@ -9,6 +9,8 @@ describe('DataContractFactory', () => {
|
|
|
9
9
|
let DataContractValidator;
|
|
10
10
|
let DataContract;
|
|
11
11
|
let InvalidDataContractError;
|
|
12
|
+
let SerializedObjectParsingError;
|
|
13
|
+
let JsonSchemaError;
|
|
12
14
|
|
|
13
15
|
let factory;
|
|
14
16
|
let jsDataContract;
|
|
@@ -17,7 +19,12 @@ describe('DataContractFactory', () => {
|
|
|
17
19
|
|
|
18
20
|
before(async () => {
|
|
19
21
|
({
|
|
20
|
-
DataContractFactory,
|
|
22
|
+
DataContractFactory,
|
|
23
|
+
DataContractValidator,
|
|
24
|
+
DataContract,
|
|
25
|
+
InvalidDataContractError,
|
|
26
|
+
SerializedObjectParsingError,
|
|
27
|
+
JsonSchemaError,
|
|
21
28
|
} = await loadWasmDpp());
|
|
22
29
|
});
|
|
23
30
|
|
|
@@ -73,8 +80,9 @@ describe('DataContractFactory', () => {
|
|
|
73
80
|
expect(e).to.be.an.instanceOf(InvalidDataContractError);
|
|
74
81
|
expect(e.getRawDataContract()).to.deep.equal(alteredContract);
|
|
75
82
|
expect(e.getErrors()).to.have.length(1);
|
|
76
|
-
|
|
77
|
-
|
|
83
|
+
|
|
84
|
+
const [consensusError] = e.getErrors();
|
|
85
|
+
expect(consensusError).to.be.an.instanceOf(JsonSchemaError);
|
|
78
86
|
}
|
|
79
87
|
});
|
|
80
88
|
});
|
|
@@ -99,9 +107,8 @@ describe('DataContractFactory', () => {
|
|
|
99
107
|
await factory.createFromBuffer(serializedDataContract);
|
|
100
108
|
expect.fail('should throw InvalidDataContractError');
|
|
101
109
|
} catch (e) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
expect(e).to.match(/Parsing of serialized object failed/);
|
|
110
|
+
expect(e).to.be.an.instanceOf(SerializedObjectParsingError);
|
|
111
|
+
expect(e.getParsingError()).to.match(/Decode protocol entity/);
|
|
105
112
|
}
|
|
106
113
|
});
|
|
107
114
|
});
|
|
@@ -16,7 +16,6 @@ describe('createDataContract', () => {
|
|
|
16
16
|
rawDataContract = {
|
|
17
17
|
$id: generateRandomIdentifier().toBuffer(),
|
|
18
18
|
ownerId: generateRandomIdentifier().toBuffer(),
|
|
19
|
-
contractId: generateRandomIdentifier().toBuffer(),
|
|
20
19
|
protocolVersion: 4,
|
|
21
20
|
version: 20,
|
|
22
21
|
$schema: 'http://test.com/schema',
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
-
const InvalidDataContractError = require('@dashevo/dpp/lib/dataContract/errors/InvalidDataContractError');
|
|
2
1
|
const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
3
2
|
|
|
3
|
+
const { default: loadWasmDpp } = require('../../../../dist');
|
|
4
|
+
|
|
4
5
|
describe('InvalidDataContractError', () => {
|
|
5
6
|
let rawDataContract;
|
|
6
7
|
let error;
|
|
8
|
+
let InvalidDataContractError;
|
|
9
|
+
|
|
10
|
+
before(async () => {
|
|
11
|
+
({
|
|
12
|
+
InvalidDataContractError,
|
|
13
|
+
} = await loadWasmDpp());
|
|
14
|
+
});
|
|
7
15
|
|
|
8
16
|
beforeEach(() => {
|
|
9
17
|
error = new Error('Some error');
|
|
@@ -33,7 +41,7 @@ describe('InvalidDataContractError', () => {
|
|
|
33
41
|
|
|
34
42
|
const invalidDataContractError = new InvalidDataContractError(errors, rawDataContract);
|
|
35
43
|
|
|
36
|
-
expect(invalidDataContractError.
|
|
44
|
+
expect(invalidDataContractError.getMessage()).to.equal(`Data contract decode error: "${error.message}"`);
|
|
37
45
|
});
|
|
38
46
|
|
|
39
47
|
it('should contain message for multiple errors', async () => {
|
|
@@ -41,6 +49,6 @@ describe('InvalidDataContractError', () => {
|
|
|
41
49
|
|
|
42
50
|
const invalidDataContractError = new InvalidDataContractError(errors, rawDataContract);
|
|
43
51
|
|
|
44
|
-
expect(invalidDataContractError.
|
|
52
|
+
expect(invalidDataContractError.getMessage()).to.equal(`Data contract decode error: "${error.message}" and 1 more`);
|
|
45
53
|
});
|
|
46
54
|
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const varint = require('varint');
|
|
1
2
|
const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
2
3
|
const stateTransitionTypes = require('@dashevo/dpp/lib/stateTransition/stateTransitionTypes');
|
|
3
4
|
|
|
@@ -64,11 +65,10 @@ describe('DataContractCreateTransition', () => {
|
|
|
64
65
|
|
|
65
66
|
describe('#toBuffer', () => {
|
|
66
67
|
it('should return serialized State Transition', () => {
|
|
67
|
-
const
|
|
68
|
-
protocolVersionUInt32.writeUInt32LE(stateTransition.getProtocolVersion(), 0);
|
|
68
|
+
const protocolVersionBytes = Buffer.from(varint.encode(stateTransition.getProtocolVersion()));
|
|
69
69
|
|
|
70
70
|
const result = stateTransition.toBuffer();
|
|
71
|
-
expect(result.compare(
|
|
71
|
+
expect(result.compare(protocolVersionBytes, 0, 1, 0, 1)).equals(0);
|
|
72
72
|
});
|
|
73
73
|
});
|
|
74
74
|
|
|
@@ -13,6 +13,8 @@ describe('validateDataContractCreateTransitionStateFactory', () => {
|
|
|
13
13
|
let StateTransitionExecutionContext;
|
|
14
14
|
let factory;
|
|
15
15
|
let dataContractFetched;
|
|
16
|
+
let DataContractFactory;
|
|
17
|
+
let DataContractValidator;
|
|
16
18
|
|
|
17
19
|
before(async () => {
|
|
18
20
|
({
|
|
@@ -20,6 +22,8 @@ describe('validateDataContractCreateTransitionStateFactory', () => {
|
|
|
20
22
|
StateTransitionExecutionContext,
|
|
21
23
|
validateDataContractCreateTransitionState,
|
|
22
24
|
ValidationResult,
|
|
25
|
+
DataContractFactory,
|
|
26
|
+
DataContractValidator,
|
|
23
27
|
} = await loadWasmDpp());
|
|
24
28
|
});
|
|
25
29
|
|
|
@@ -46,25 +50,25 @@ describe('validateDataContractCreateTransitionStateFactory', () => {
|
|
|
46
50
|
factory = (t) => validateDataContractCreateTransitionState(stateRepositoryLike, t);
|
|
47
51
|
});
|
|
48
52
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
it('should return invalid result if Data Contract is already exist', async () => {
|
|
54
|
+
// This time our state repository should return a data contract on fetch
|
|
55
|
+
const validator = new DataContractValidator();
|
|
56
|
+
const dataContractFactory = new DataContractFactory(1, validator);
|
|
57
|
+
const wasmDataContract = await dataContractFactory.createFromBuffer(dataContract.toBuffer());
|
|
52
58
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
// const [error] = result.getErrors();
|
|
59
|
+
const stateRepositoryLikeWithContract = {
|
|
60
|
+
fetchDataContract: () => wasmDataContract,
|
|
61
|
+
};
|
|
58
62
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
const result = await validateDataContractCreateTransitionState(
|
|
64
|
+
stateRepositoryLikeWithContract,
|
|
65
|
+
stateTransition,
|
|
66
|
+
);
|
|
67
|
+
const [error] = result.getErrors();
|
|
62
68
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
// );
|
|
67
|
-
// });
|
|
69
|
+
expect(error.getCode()).to.equal(4000);
|
|
70
|
+
expect(error.getDataContractId()).to.deep.equal(dataContract.getId().toBuffer());
|
|
71
|
+
});
|
|
68
72
|
|
|
69
73
|
it('should return valid result', async () => {
|
|
70
74
|
const result = await factory(stateTransition);
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
+
const varint = require('varint');
|
|
1
2
|
const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
2
3
|
const stateTransitionTypes = require('@dashevo/dpp/lib/stateTransition/stateTransitionTypes');
|
|
3
|
-
|
|
4
|
-
const Identifier = require('@dashevo/dpp/lib/identifier/Identifier');
|
|
5
4
|
const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
const
|
|
5
|
+
const JsDataContractUpdateTransition = require('@dashevo/dpp/lib/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition');
|
|
6
|
+
|
|
7
|
+
const { default: loadWasmDpp } = require('../../../../../dist');
|
|
9
8
|
|
|
10
9
|
describe('DataContractUpdateTransition', () => {
|
|
11
10
|
let stateTransition;
|
|
12
11
|
let dataContract;
|
|
13
|
-
let
|
|
14
|
-
let
|
|
12
|
+
let DataContractUpdateTransition;
|
|
13
|
+
let Identifier;
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
before(async () => {
|
|
16
|
+
({
|
|
17
|
+
DataContractUpdateTransition, Identifier,
|
|
18
|
+
} = await loadWasmDpp());
|
|
19
|
+
});
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
dataContract = getDataContractFixture();
|
|
21
23
|
|
|
22
24
|
stateTransition = new DataContractUpdateTransition({
|
|
23
25
|
protocolVersion: protocolVersion.latestVersion,
|
|
@@ -25,11 +27,6 @@ describe('DataContractUpdateTransition', () => {
|
|
|
25
27
|
});
|
|
26
28
|
});
|
|
27
29
|
|
|
28
|
-
afterEach(() => {
|
|
29
|
-
encodeMock.restore();
|
|
30
|
-
hashMock.restore();
|
|
31
|
-
});
|
|
32
|
-
|
|
33
30
|
describe('#getProtocolVersion', () => {
|
|
34
31
|
it('should return the current protocol version', () => {
|
|
35
32
|
const result = stateTransition.getProtocolVersion();
|
|
@@ -56,73 +53,40 @@ describe('DataContractUpdateTransition', () => {
|
|
|
56
53
|
|
|
57
54
|
describe('#toJSON', () => {
|
|
58
55
|
it('should return State Transition as plain JS object', () => {
|
|
59
|
-
expect(stateTransition.toJSON()).to.deep.equal({
|
|
56
|
+
expect(stateTransition.toJSON(true)).to.deep.equal({
|
|
60
57
|
protocolVersion: protocolVersion.latestVersion,
|
|
61
58
|
type: stateTransitionTypes.DATA_CONTRACT_UPDATE,
|
|
62
59
|
dataContract: dataContract.toJSON(),
|
|
63
|
-
signaturePublicKeyId: undefined,
|
|
64
|
-
signature: undefined,
|
|
65
60
|
});
|
|
66
61
|
});
|
|
67
62
|
});
|
|
68
63
|
|
|
69
64
|
describe('#toBuffer', () => {
|
|
70
|
-
it('should return serialized State Transition', () => {
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
encodeMock.returns(serializedStateTransition);
|
|
74
|
-
|
|
75
|
-
const protocolVersionUInt32 = Buffer.alloc(4);
|
|
76
|
-
protocolVersionUInt32.writeUInt32LE(stateTransition.protocolVersion, 0);
|
|
65
|
+
it('should return serialized State Transition that starts with protocol version', () => {
|
|
66
|
+
const protocolVersionBytes = Buffer.from(varint.encode(stateTransition.getProtocolVersion()));
|
|
77
67
|
|
|
78
68
|
const result = stateTransition.toBuffer();
|
|
79
|
-
|
|
80
|
-
expect(result).to.deep.equal(
|
|
81
|
-
Buffer.concat([protocolVersionUInt32, serializedStateTransition]),
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
const dataToEncode = stateTransition.toObject();
|
|
85
|
-
delete dataToEncode.protocolVersion;
|
|
86
|
-
|
|
87
|
-
expect(encodeMock.getCall(0).args).to.have.deep.members([
|
|
88
|
-
dataToEncode,
|
|
89
|
-
]);
|
|
69
|
+
expect(result.compare(protocolVersionBytes, 0, 1, 0, 1)).equals(0);
|
|
90
70
|
});
|
|
91
71
|
});
|
|
92
72
|
|
|
93
|
-
describe('#hash', () => {
|
|
73
|
+
describe.skip('#hash', () => {
|
|
94
74
|
it('should return State Transition hash as hex', () => {
|
|
95
|
-
const
|
|
96
|
-
const hashedDocument = '456';
|
|
97
|
-
|
|
98
|
-
encodeMock.returns(serializedDocument);
|
|
99
|
-
hashMock.returns(hashedDocument);
|
|
75
|
+
const jsStateTransition = new JsDataContractUpdateTransition(stateTransition.toJSON());
|
|
100
76
|
|
|
101
77
|
const result = stateTransition.hash();
|
|
78
|
+
const resultJs = jsStateTransition.hash();
|
|
102
79
|
|
|
103
|
-
expect(result).to.equal(
|
|
104
|
-
|
|
105
|
-
const dataToEncode = stateTransition.toObject();
|
|
106
|
-
delete dataToEncode.protocolVersion;
|
|
107
|
-
|
|
108
|
-
expect(encodeMock.getCall(0).args).to.have.deep.members([
|
|
109
|
-
dataToEncode,
|
|
110
|
-
]);
|
|
111
|
-
|
|
112
|
-
const protocolVersionUInt32 = Buffer.alloc(4);
|
|
113
|
-
protocolVersionUInt32.writeUInt32LE(stateTransition.protocolVersion, 0);
|
|
114
|
-
|
|
115
|
-
expect(hashMock).to.have.been.calledOnceWith(
|
|
116
|
-
Buffer.concat([protocolVersionUInt32, serializedDocument]),
|
|
117
|
-
);
|
|
80
|
+
expect(result).to.equal(resultJs);
|
|
118
81
|
});
|
|
119
82
|
});
|
|
120
83
|
|
|
121
84
|
describe('#getOwnerId', () => {
|
|
122
85
|
it('should return owner id', async () => {
|
|
123
86
|
const result = stateTransition.getOwnerId();
|
|
87
|
+
const reference = stateTransition.getDataContract().getOwnerId();
|
|
124
88
|
|
|
125
|
-
expect(result).to.equal(
|
|
89
|
+
expect(result.toBuffer()).to.deep.equal(reference.toBuffer());
|
|
126
90
|
});
|
|
127
91
|
});
|
|
128
92
|
|
|
@@ -134,7 +98,7 @@ describe('DataContractUpdateTransition', () => {
|
|
|
134
98
|
const contractId = result[0];
|
|
135
99
|
|
|
136
100
|
expect(contractId).to.be.an.instanceOf(Identifier);
|
|
137
|
-
expect(contractId).to.be.deep.equal(dataContract.getId());
|
|
101
|
+
expect(contractId.toBuffer()).to.be.deep.equal(dataContract.getId().toBuffer());
|
|
138
102
|
});
|
|
139
103
|
});
|
|
140
104
|
|
|
@@ -1,47 +1,51 @@
|
|
|
1
|
-
const DataContractUpdateTransition = require(
|
|
2
|
-
'@dashevo/dpp/lib/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition',
|
|
3
|
-
);
|
|
4
|
-
|
|
5
1
|
const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
2
|
+
const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
|
|
6
3
|
|
|
7
|
-
const
|
|
8
|
-
'@dashevo/dpp/lib/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory',
|
|
9
|
-
);
|
|
10
|
-
|
|
11
|
-
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
12
|
-
const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
|
|
4
|
+
const { default: loadWasmDpp } = require('../../../../../dist');
|
|
13
5
|
|
|
14
6
|
describe('applyDataContractUpdateTransitionFactory', () => {
|
|
15
7
|
let stateTransition;
|
|
16
8
|
let dataContract;
|
|
17
|
-
let stateRepositoryMock;
|
|
18
|
-
let applyDataContractUpdateTransition;
|
|
19
9
|
let executionContext;
|
|
10
|
+
let dataContractStored;
|
|
11
|
+
let factory;
|
|
12
|
+
let DataContractUpdateTransition;
|
|
13
|
+
let ApplyDataContractUpdateTransition;
|
|
14
|
+
let StateTransitionExecutionContext;
|
|
15
|
+
|
|
16
|
+
before(async () => {
|
|
17
|
+
({
|
|
18
|
+
DataContractUpdateTransition,
|
|
19
|
+
ApplyDataContractUpdateTransition,
|
|
20
|
+
StateTransitionExecutionContext,
|
|
21
|
+
} = await loadWasmDpp());
|
|
22
|
+
});
|
|
20
23
|
|
|
21
|
-
beforeEach(
|
|
24
|
+
beforeEach(() => {
|
|
22
25
|
dataContract = getDataContractFixture();
|
|
23
26
|
|
|
24
27
|
stateTransition = new DataContractUpdateTransition({
|
|
25
28
|
dataContract: dataContract.toObject(),
|
|
29
|
+
protocolVersion: protocolVersion.latestVersion,
|
|
26
30
|
});
|
|
27
31
|
|
|
28
32
|
executionContext = new StateTransitionExecutionContext();
|
|
29
33
|
|
|
30
34
|
stateTransition.setExecutionContext(executionContext);
|
|
31
35
|
|
|
32
|
-
|
|
36
|
+
const stateRepositoryLike = {
|
|
37
|
+
storeDataContract: () => {
|
|
38
|
+
dataContractStored = true;
|
|
39
|
+
},
|
|
40
|
+
};
|
|
33
41
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
42
|
+
factory = new ApplyDataContractUpdateTransition(stateRepositoryLike);
|
|
43
|
+
|
|
44
|
+
dataContractStored = false;
|
|
37
45
|
});
|
|
38
46
|
|
|
39
47
|
it('should store a data contract from state transition in the repository', async () => {
|
|
40
|
-
await applyDataContractUpdateTransition(stateTransition);
|
|
41
|
-
|
|
42
|
-
expect(stateRepositoryMock.updateDataContract).to.have.been.calledOnceWithExactly(
|
|
43
|
-
stateTransition.getDataContract(),
|
|
44
|
-
executionContext,
|
|
45
|
-
);
|
|
48
|
+
await factory.applyDataContractUpdateTransition(stateTransition);
|
|
49
|
+
expect(dataContractStored).to.be.true();
|
|
46
50
|
});
|
|
47
51
|
});
|
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
const validateIndicesAreBackwardCompatible = require('@dashevo/dpp/lib/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible');
|
|
2
|
-
const DataContractHaveNewIndexWithOldPropertiesError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/DataContractInvalidIndexDefinitionUpdateError');
|
|
3
|
-
const DataContractHaveNewUniqueIndexError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/DataContractHaveNewUniqueIndexError');
|
|
4
|
-
const DataContractIndicesChangedError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/DataContractUniqueIndicesChangedError');
|
|
5
1
|
const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
|
|
6
|
-
|
|
2
|
+
|
|
3
|
+
const { default: loadWasmDpp } = require('../../../../../../../dist');
|
|
7
4
|
|
|
8
5
|
describe('validateIndicesAreBackwardCompatible', () => {
|
|
9
6
|
let oldDocumentsSchema;
|
|
10
7
|
let newDocumentsSchema;
|
|
8
|
+
let validateIndicesAreBackwardCompatible;
|
|
9
|
+
let DataContractUniqueIndicesChangedError;
|
|
10
|
+
let DataContractInvalidIndexDefinitionUpdateError;
|
|
11
|
+
let DataContractHaveNewUniqueIndexError;
|
|
12
|
+
|
|
13
|
+
before(async () => {
|
|
14
|
+
({
|
|
15
|
+
validateIndicesAreBackwardCompatible,
|
|
16
|
+
DataContractUniqueIndicesChangedError,
|
|
17
|
+
DataContractInvalidIndexDefinitionUpdateError,
|
|
18
|
+
DataContractHaveNewUniqueIndexError,
|
|
19
|
+
} = await loadWasmDpp());
|
|
20
|
+
});
|
|
11
21
|
|
|
12
22
|
beforeEach(() => {
|
|
13
23
|
const oldDataContract = getDataContractFixture();
|
|
@@ -37,20 +47,19 @@ describe('validateIndicesAreBackwardCompatible', () => {
|
|
|
37
47
|
});
|
|
38
48
|
|
|
39
49
|
it('should return invalid result if some of unique indices have changed', async () => {
|
|
40
|
-
newDocumentsSchema.indexedDocument.indices[0].properties[
|
|
41
|
-
|
|
50
|
+
newDocumentsSchema.indexedDocument.indices[0].properties[1].firstName = 'desc';
|
|
42
51
|
const result = validateIndicesAreBackwardCompatible(oldDocumentsSchema, newDocumentsSchema);
|
|
43
52
|
|
|
44
53
|
expect(result.isValid()).to.be.false();
|
|
45
54
|
|
|
46
55
|
const error = result.getErrors()[0];
|
|
47
56
|
|
|
48
|
-
expect(error).to.be.an.instanceOf(
|
|
57
|
+
expect(error).to.be.an.instanceOf(DataContractUniqueIndicesChangedError);
|
|
49
58
|
expect(error.getIndexName()).to.equal(newDocumentsSchema.indexedDocument.indices[0].name);
|
|
50
59
|
});
|
|
51
60
|
|
|
52
61
|
it('should return invalid result if non-unique index update failed due to changed old properties', async () => {
|
|
53
|
-
newDocumentsSchema.indexedDocument.indices[2].properties[0]
|
|
62
|
+
newDocumentsSchema.indexedDocument.indices[2].properties[0].lastName = 'desc';
|
|
54
63
|
|
|
55
64
|
const result = validateIndicesAreBackwardCompatible(oldDocumentsSchema, newDocumentsSchema);
|
|
56
65
|
|
|
@@ -63,7 +72,14 @@ describe('validateIndicesAreBackwardCompatible', () => {
|
|
|
63
72
|
});
|
|
64
73
|
|
|
65
74
|
it('should return invalid result if non-unique index update failed due old properties used', async () => {
|
|
66
|
-
newDocumentsSchema.indexedDocument.indices
|
|
75
|
+
newDocumentsSchema.indexedDocument.indices.push({
|
|
76
|
+
name: 'oldFieldIndex',
|
|
77
|
+
properties: [
|
|
78
|
+
{
|
|
79
|
+
otherProperty: 'asc',
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
});
|
|
67
83
|
|
|
68
84
|
const result = validateIndicesAreBackwardCompatible(oldDocumentsSchema, newDocumentsSchema);
|
|
69
85
|
|
|
@@ -72,7 +88,7 @@ describe('validateIndicesAreBackwardCompatible', () => {
|
|
|
72
88
|
const error = result.getErrors()[0];
|
|
73
89
|
|
|
74
90
|
expect(error).to.be.an.instanceOf(DataContractInvalidIndexDefinitionUpdateError);
|
|
75
|
-
expect(error.getIndexName()).to.equal(
|
|
91
|
+
expect(error.getIndexName()).to.equal('oldFieldIndex');
|
|
76
92
|
});
|
|
77
93
|
|
|
78
94
|
it('should return invalid result if one of new indices contains old properties in the wrong order', async () => {
|
|
@@ -90,7 +106,8 @@ describe('validateIndicesAreBackwardCompatible', () => {
|
|
|
90
106
|
|
|
91
107
|
const error = result.getErrors()[0];
|
|
92
108
|
|
|
93
|
-
|
|
109
|
+
// TODO
|
|
110
|
+
// expect(error).to.be.an.instanceOf(DataContractHaveNewIndexWithOldPropertiesError);
|
|
94
111
|
expect(error.getIndexName()).to.equal('index_other');
|
|
95
112
|
});
|
|
96
113
|
|