@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
|
@@ -1,83 +1,86 @@
|
|
|
1
|
-
const {
|
|
2
|
-
|
|
3
|
-
const createAjv = require('@dashevo/dpp/lib/ajv/createAjv');
|
|
4
|
-
|
|
5
|
-
const JsonSchemaValidator = require('@dashevo/dpp/lib/validation/JsonSchemaValidator');
|
|
1
|
+
const { PrivateKey } = require('@dashevo/dashcore-lib');
|
|
6
2
|
|
|
7
3
|
const getIdentityCreateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityCreateTransitionFixture');
|
|
8
4
|
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
);
|
|
12
|
-
|
|
13
|
-
const {
|
|
14
|
-
expectJsonSchemaError,
|
|
15
|
-
expectValidationError,
|
|
16
|
-
} = require('@dashevo/dpp/lib/test/expect/expectError');
|
|
17
|
-
|
|
18
|
-
const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
|
|
19
|
-
const InstantAssetLockProof = require('@dashevo/dpp/lib/identity/stateTransition/assetLockProof/instant/InstantAssetLockProof');
|
|
20
|
-
const ChainAssetLockProof = require('@dashevo/dpp/lib/identity/stateTransition/assetLockProof/chain/ChainAssetLockProof');
|
|
21
|
-
const SomeConsensusError = require('@dashevo/dpp/lib/test/mocks/SomeConsensusError');
|
|
22
|
-
const IdentityPublicKey = require('@dashevo/dpp/lib/identity/IdentityPublicKey');
|
|
23
|
-
const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
|
|
5
|
+
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
6
|
+
const { expectValidationError, expectJsonSchemaError } = require('../../../../../../../lib/test/expect/expectError');
|
|
7
|
+
const { default: loadWasmDpp } = require('../../../../../../../dist');
|
|
8
|
+
const getBlsAdapterMock = require('../../../../../../../lib/test/mocks/getBlsAdapterMock');
|
|
24
9
|
|
|
25
10
|
describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
26
|
-
let validateIdentityCreateTransitionBasic;
|
|
27
11
|
let rawStateTransition;
|
|
28
12
|
let stateTransition;
|
|
29
|
-
let validatePublicKeysMock;
|
|
30
|
-
let validatePublicKeysInIdentityCreateTransition;
|
|
31
|
-
let assetLockPublicKeyHash;
|
|
32
|
-
let proofValidationFunctionsByTypeMock;
|
|
33
|
-
let validateProtocolVersionMock;
|
|
34
|
-
let validatePublicKeySignaturesMock;
|
|
35
13
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
14
|
+
let stateRepositoryMock;
|
|
15
|
+
let mockIdentityPublicKey;
|
|
16
|
+
let executionContext;
|
|
39
17
|
|
|
40
|
-
|
|
41
|
-
.returns(new ValidationResult());
|
|
18
|
+
let validateIdentityCreateTransitionBasic;
|
|
42
19
|
|
|
43
|
-
|
|
20
|
+
let StateTransitionExecutionContext;
|
|
21
|
+
let IdentityCreateTransition;
|
|
22
|
+
let IdentityPublicKey;
|
|
23
|
+
let UnsupportedProtocolVersionError;
|
|
24
|
+
let InvalidInstantAssetLockProofSignatureError;
|
|
25
|
+
let InvalidIdentityPublicKeySecurityLevelError;
|
|
26
|
+
let InvalidIdentityPublicKeyDataError;
|
|
27
|
+
let InvalidIdentityKeySignatureError;
|
|
28
|
+
let IdentityCreateTransitionBasicValidator;
|
|
29
|
+
|
|
30
|
+
before(async () => {
|
|
31
|
+
({
|
|
32
|
+
IdentityCreateTransition,
|
|
33
|
+
StateTransitionExecutionContext,
|
|
34
|
+
UnsupportedProtocolVersionError,
|
|
35
|
+
InvalidInstantAssetLockProofSignatureError,
|
|
36
|
+
InvalidIdentityPublicKeySecurityLevelError,
|
|
37
|
+
InvalidIdentityPublicKeyDataError,
|
|
38
|
+
InvalidIdentityKeySignatureError,
|
|
39
|
+
IdentityPublicKey,
|
|
40
|
+
IdentityCreateTransitionBasicValidator,
|
|
41
|
+
} = await loadWasmDpp());
|
|
42
|
+
|
|
43
|
+
mockIdentityPublicKey = (publicKey, opts = {}) => new IdentityPublicKey({
|
|
44
|
+
id: 0,
|
|
45
|
+
type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
|
|
46
|
+
data: publicKey,
|
|
47
|
+
purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
|
|
48
|
+
securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
|
|
49
|
+
readOnly: false,
|
|
50
|
+
...opts,
|
|
51
|
+
});
|
|
52
|
+
});
|
|
44
53
|
|
|
45
|
-
|
|
54
|
+
beforeEach(async function () {
|
|
55
|
+
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
56
|
+
stateRepositoryMock.verifyInstantLock.returns(true);
|
|
46
57
|
|
|
47
|
-
|
|
58
|
+
executionContext = new StateTransitionExecutionContext();
|
|
48
59
|
|
|
49
|
-
const
|
|
50
|
-
const ajv = createAjv(RE2);
|
|
60
|
+
const blsAdapter = await getBlsAdapterMock();
|
|
51
61
|
|
|
52
|
-
const
|
|
62
|
+
const validator = new IdentityCreateTransitionBasicValidator(stateRepositoryMock, blsAdapter);
|
|
63
|
+
validateIdentityCreateTransitionBasic = (st, context) => validator.validate(st, context);
|
|
53
64
|
|
|
54
|
-
const
|
|
55
|
-
|
|
65
|
+
const stateTransitionJS = getIdentityCreateTransitionFixture();
|
|
66
|
+
stateTransition = new IdentityCreateTransition(stateTransitionJS.toObject());
|
|
56
67
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
[ChainAssetLockProof.type]: this.sinonSandbox.stub().resolves(proofValidationResult),
|
|
60
|
-
};
|
|
68
|
+
const privateKey = new PrivateKey('9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2');
|
|
69
|
+
const publicKey = privateKey.toPublicKey();
|
|
61
70
|
|
|
62
|
-
|
|
71
|
+
const identityPublicKey = mockIdentityPublicKey(publicKey.toBuffer());
|
|
63
72
|
|
|
64
|
-
|
|
65
|
-
.returns(new ValidationResult());
|
|
73
|
+
stateTransition.setPublicKeys([identityPublicKey]);
|
|
66
74
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
validatePublicKeysInIdentityCreateTransition,
|
|
71
|
-
proofValidationFunctionsByTypeMock,
|
|
72
|
-
validateProtocolVersionMock,
|
|
73
|
-
validatePublicKeySignaturesMock,
|
|
75
|
+
await stateTransition.signByPrivateKey(
|
|
76
|
+
privateKey.toBuffer(),
|
|
77
|
+
identityPublicKey.type,
|
|
74
78
|
);
|
|
75
79
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const privateKey = '9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2';
|
|
80
|
+
const signature = stateTransition.getSignature();
|
|
81
|
+
identityPublicKey.setSignature(signature);
|
|
79
82
|
|
|
80
|
-
|
|
83
|
+
stateTransition.setPublicKeys([identityPublicKey]);
|
|
81
84
|
|
|
82
85
|
rawStateTransition = stateTransition.toObject();
|
|
83
86
|
});
|
|
@@ -86,9 +89,12 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
86
89
|
it('should be present', async () => {
|
|
87
90
|
delete rawStateTransition.protocolVersion;
|
|
88
91
|
|
|
89
|
-
const result = await validateIdentityCreateTransitionBasic(
|
|
92
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
93
|
+
rawStateTransition,
|
|
94
|
+
executionContext,
|
|
95
|
+
);
|
|
90
96
|
|
|
91
|
-
expectJsonSchemaError(result);
|
|
97
|
+
await expectJsonSchemaError(result);
|
|
92
98
|
|
|
93
99
|
const [error] = result.getErrors();
|
|
94
100
|
|
|
@@ -100,9 +106,12 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
100
106
|
it('should be an integer', async () => {
|
|
101
107
|
rawStateTransition.protocolVersion = '1';
|
|
102
108
|
|
|
103
|
-
const result = await validateIdentityCreateTransitionBasic(
|
|
109
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
110
|
+
rawStateTransition,
|
|
111
|
+
executionContext,
|
|
112
|
+
);
|
|
104
113
|
|
|
105
|
-
expectJsonSchemaError(result);
|
|
114
|
+
await expectJsonSchemaError(result);
|
|
106
115
|
|
|
107
116
|
const [error] = result.getErrors();
|
|
108
117
|
|
|
@@ -111,26 +120,14 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
111
120
|
});
|
|
112
121
|
|
|
113
122
|
it('should be valid', async () => {
|
|
114
|
-
rawStateTransition.protocolVersion =
|
|
115
|
-
|
|
116
|
-
const protocolVersionError = new SomeConsensusError('test');
|
|
117
|
-
const protocolVersionResult = new ValidationResult([
|
|
118
|
-
protocolVersionError,
|
|
119
|
-
]);
|
|
120
|
-
|
|
121
|
-
validateProtocolVersionMock.returns(protocolVersionResult);
|
|
122
|
-
|
|
123
|
-
const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
|
|
124
|
-
|
|
125
|
-
expectValidationError(result, SomeConsensusError);
|
|
126
|
-
|
|
127
|
-
const [error] = result.getErrors();
|
|
123
|
+
rawStateTransition.protocolVersion = 1000;
|
|
128
124
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
rawStateTransition.protocolVersion,
|
|
125
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
126
|
+
rawStateTransition,
|
|
127
|
+
executionContext,
|
|
133
128
|
);
|
|
129
|
+
|
|
130
|
+
await expectValidationError(result, UnsupportedProtocolVersionError);
|
|
134
131
|
});
|
|
135
132
|
});
|
|
136
133
|
|
|
@@ -138,9 +135,12 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
138
135
|
it('should be present', async () => {
|
|
139
136
|
delete rawStateTransition.type;
|
|
140
137
|
|
|
141
|
-
const result = await validateIdentityCreateTransitionBasic(
|
|
138
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
139
|
+
rawStateTransition,
|
|
140
|
+
executionContext,
|
|
141
|
+
);
|
|
142
142
|
|
|
143
|
-
expectJsonSchemaError(result);
|
|
143
|
+
await expectJsonSchemaError(result);
|
|
144
144
|
|
|
145
145
|
const [error] = result.getErrors();
|
|
146
146
|
|
|
@@ -152,9 +152,12 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
152
152
|
it('should be equal to 2', async () => {
|
|
153
153
|
rawStateTransition.type = 666;
|
|
154
154
|
|
|
155
|
-
const result = await validateIdentityCreateTransitionBasic(
|
|
155
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
156
|
+
rawStateTransition,
|
|
157
|
+
executionContext,
|
|
158
|
+
);
|
|
156
159
|
|
|
157
|
-
expectJsonSchemaError(result);
|
|
160
|
+
await expectJsonSchemaError(result);
|
|
158
161
|
|
|
159
162
|
const [error] = result.getErrors();
|
|
160
163
|
|
|
@@ -170,9 +173,10 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
170
173
|
|
|
171
174
|
const result = await validateIdentityCreateTransitionBasic(
|
|
172
175
|
rawStateTransition,
|
|
176
|
+
executionContext,
|
|
173
177
|
);
|
|
174
178
|
|
|
175
|
-
expectJsonSchemaError(result);
|
|
179
|
+
await expectJsonSchemaError(result);
|
|
176
180
|
|
|
177
181
|
const [error] = result.getErrors();
|
|
178
182
|
|
|
@@ -184,9 +188,12 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
184
188
|
it('should be an object', async () => {
|
|
185
189
|
rawStateTransition.assetLockProof = 1;
|
|
186
190
|
|
|
187
|
-
const result = await validateIdentityCreateTransitionBasic(
|
|
191
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
192
|
+
rawStateTransition,
|
|
193
|
+
executionContext,
|
|
194
|
+
);
|
|
188
195
|
|
|
189
|
-
expectJsonSchemaError(result, 1);
|
|
196
|
+
await expectJsonSchemaError(result, 1);
|
|
190
197
|
|
|
191
198
|
const [error] = result.getErrors();
|
|
192
199
|
|
|
@@ -195,31 +202,18 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
195
202
|
});
|
|
196
203
|
|
|
197
204
|
it('should be valid', async () => {
|
|
198
|
-
|
|
199
|
-
const assetLockResult = new ValidationResult([
|
|
200
|
-
assetLockError,
|
|
201
|
-
]);
|
|
202
|
-
|
|
203
|
-
const executionContext = new StateTransitionExecutionContext();
|
|
204
|
-
|
|
205
|
-
proofValidationFunctionsByTypeMock[InstantAssetLockProof.type].resolves(assetLockResult);
|
|
205
|
+
stateRepositoryMock.verifyInstantLock.returns(false);
|
|
206
206
|
|
|
207
207
|
const result = await validateIdentityCreateTransitionBasic(
|
|
208
208
|
rawStateTransition,
|
|
209
209
|
executionContext,
|
|
210
210
|
);
|
|
211
211
|
|
|
212
|
-
expectValidationError(result);
|
|
212
|
+
await expectValidationError(result);
|
|
213
213
|
|
|
214
214
|
const [error] = result.getErrors();
|
|
215
215
|
|
|
216
|
-
expect(error).to.
|
|
217
|
-
|
|
218
|
-
expect(proofValidationFunctionsByTypeMock[InstantAssetLockProof.type])
|
|
219
|
-
.to.be.calledOnceWithExactly(
|
|
220
|
-
rawStateTransition.assetLockProof,
|
|
221
|
-
executionContext,
|
|
222
|
-
);
|
|
216
|
+
expect(error).to.be.instanceOf(InvalidInstantAssetLockProofSignatureError);
|
|
223
217
|
});
|
|
224
218
|
});
|
|
225
219
|
|
|
@@ -229,9 +223,10 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
229
223
|
|
|
230
224
|
const result = await validateIdentityCreateTransitionBasic(
|
|
231
225
|
rawStateTransition,
|
|
226
|
+
executionContext,
|
|
232
227
|
);
|
|
233
228
|
|
|
234
|
-
expectJsonSchemaError(result);
|
|
229
|
+
await expectJsonSchemaError(result);
|
|
235
230
|
|
|
236
231
|
const [error] = result.getErrors();
|
|
237
232
|
|
|
@@ -245,9 +240,10 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
245
240
|
|
|
246
241
|
const result = await validateIdentityCreateTransitionBasic(
|
|
247
242
|
rawStateTransition,
|
|
243
|
+
executionContext,
|
|
248
244
|
);
|
|
249
245
|
|
|
250
|
-
expectJsonSchemaError(result);
|
|
246
|
+
await expectJsonSchemaError(result);
|
|
251
247
|
|
|
252
248
|
const [error] = result.getErrors();
|
|
253
249
|
|
|
@@ -259,14 +255,15 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
259
255
|
const [key] = rawStateTransition.publicKeys;
|
|
260
256
|
|
|
261
257
|
for (let i = 0; i < 10; i++) {
|
|
262
|
-
rawStateTransition.publicKeys.push(key);
|
|
258
|
+
rawStateTransition.publicKeys.push({ ...key, id: i + 1 });
|
|
263
259
|
}
|
|
264
260
|
|
|
265
261
|
const result = await validateIdentityCreateTransitionBasic(
|
|
266
262
|
rawStateTransition,
|
|
263
|
+
executionContext,
|
|
267
264
|
);
|
|
268
265
|
|
|
269
|
-
expectJsonSchemaError(result);
|
|
266
|
+
await expectJsonSchemaError(result);
|
|
270
267
|
|
|
271
268
|
const [error] = result.getErrors();
|
|
272
269
|
|
|
@@ -279,9 +276,10 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
279
276
|
|
|
280
277
|
const result = await validateIdentityCreateTransitionBasic(
|
|
281
278
|
rawStateTransition,
|
|
279
|
+
executionContext,
|
|
282
280
|
);
|
|
283
281
|
|
|
284
|
-
expectJsonSchemaError(result);
|
|
282
|
+
await expectJsonSchemaError(result);
|
|
285
283
|
|
|
286
284
|
const [error] = result.getErrors();
|
|
287
285
|
|
|
@@ -290,66 +288,65 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
290
288
|
});
|
|
291
289
|
|
|
292
290
|
it('should be valid', async () => {
|
|
293
|
-
const
|
|
294
|
-
const publicKeysResult = new ValidationResult([
|
|
295
|
-
publicKeysError,
|
|
296
|
-
]);
|
|
291
|
+
const privateKey = new PrivateKey();
|
|
297
292
|
|
|
298
|
-
|
|
293
|
+
// Mess up public key
|
|
294
|
+
const identityPublicKey = mockIdentityPublicKey(Buffer.alloc(33));
|
|
299
295
|
|
|
300
|
-
|
|
301
|
-
|
|
296
|
+
stateTransition.setPublicKeys([identityPublicKey]);
|
|
297
|
+
await stateTransition.signByPrivateKey(
|
|
298
|
+
privateKey.toBuffer(),
|
|
299
|
+
identityPublicKey.type,
|
|
302
300
|
);
|
|
301
|
+
identityPublicKey.setSignature(stateTransition.getSignature());
|
|
302
|
+
stateTransition.setPublicKeys([identityPublicKey]);
|
|
303
303
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
const [error] = result.getErrors();
|
|
304
|
+
rawStateTransition = stateTransition.toObject();
|
|
307
305
|
|
|
308
|
-
|
|
306
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
307
|
+
rawStateTransition,
|
|
308
|
+
executionContext,
|
|
309
|
+
);
|
|
309
310
|
|
|
310
|
-
|
|
311
|
-
.to.be.calledOnceWithExactly(rawStateTransition.publicKeys);
|
|
311
|
+
await expectValidationError(result, InvalidIdentityPublicKeyDataError);
|
|
312
312
|
});
|
|
313
313
|
|
|
314
314
|
it('should have at least 1 master key', async () => {
|
|
315
|
-
const
|
|
316
|
-
const publicKeysResult = new ValidationResult([
|
|
317
|
-
publicKeysError,
|
|
318
|
-
]);
|
|
315
|
+
const privateKey = new PrivateKey();
|
|
319
316
|
|
|
320
|
-
|
|
317
|
+
// Mess up public key's purpose
|
|
318
|
+
const identityPublicKey = mockIdentityPublicKey(privateKey.toPublicKey().toBuffer());
|
|
319
|
+
identityPublicKey.setPurpose(2);
|
|
321
320
|
|
|
322
|
-
|
|
323
|
-
|
|
321
|
+
stateTransition.setPublicKeys([identityPublicKey]);
|
|
322
|
+
await stateTransition.signByPrivateKey(
|
|
323
|
+
privateKey.toBuffer(),
|
|
324
|
+
identityPublicKey.type,
|
|
324
325
|
);
|
|
326
|
+
identityPublicKey.setSignature(stateTransition.getSignature());
|
|
327
|
+
stateTransition.setPublicKeys([identityPublicKey]);
|
|
325
328
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
const [error] = result.getErrors();
|
|
329
|
+
rawStateTransition = stateTransition.toObject();
|
|
329
330
|
|
|
330
|
-
|
|
331
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
332
|
+
rawStateTransition,
|
|
333
|
+
executionContext,
|
|
334
|
+
);
|
|
331
335
|
|
|
332
|
-
|
|
333
|
-
.to.be.calledOnceWithExactly(rawStateTransition.publicKeys);
|
|
336
|
+
await expectValidationError(result, InvalidIdentityPublicKeySecurityLevelError);
|
|
334
337
|
});
|
|
335
338
|
|
|
336
339
|
it('should have valid signatures', async () => {
|
|
337
|
-
const
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
]);
|
|
341
|
-
|
|
342
|
-
validatePublicKeySignaturesMock.resolves(publicKeysResult);
|
|
340
|
+
const invalidSignature = Buffer.alloc(65);
|
|
341
|
+
rawStateTransition.signature = invalidSignature;
|
|
342
|
+
rawStateTransition.publicKeys[0].signature = invalidSignature;
|
|
343
343
|
|
|
344
344
|
const result = await validateIdentityCreateTransitionBasic(
|
|
345
345
|
rawStateTransition,
|
|
346
|
+
executionContext,
|
|
346
347
|
);
|
|
347
348
|
|
|
348
|
-
expectValidationError(result);
|
|
349
|
-
|
|
350
|
-
const [error] = result.getErrors();
|
|
351
|
-
|
|
352
|
-
expect(error).to.equal(publicKeysError);
|
|
349
|
+
await expectValidationError(result, InvalidIdentityKeySignatureError);
|
|
353
350
|
});
|
|
354
351
|
});
|
|
355
352
|
|
|
@@ -357,13 +354,16 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
357
354
|
it('should be present', async () => {
|
|
358
355
|
delete rawStateTransition.signature;
|
|
359
356
|
|
|
360
|
-
const result = await validateIdentityCreateTransitionBasic(
|
|
357
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
358
|
+
rawStateTransition,
|
|
359
|
+
executionContext,
|
|
360
|
+
);
|
|
361
361
|
|
|
362
|
-
expectJsonSchemaError(result);
|
|
362
|
+
await expectJsonSchemaError(result);
|
|
363
363
|
|
|
364
364
|
const [error] = result.getErrors();
|
|
365
365
|
|
|
366
|
-
expect(error.
|
|
366
|
+
expect(error.getInstancePath()).to.equal('');
|
|
367
367
|
expect(error.getKeyword()).to.equal('required');
|
|
368
368
|
expect(error.getParams().missingProperty).to.equal('signature');
|
|
369
369
|
});
|
|
@@ -371,52 +371,62 @@ describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
|
371
371
|
it('should be a byte array', async () => {
|
|
372
372
|
rawStateTransition.signature = new Array(65).fill('string');
|
|
373
373
|
|
|
374
|
-
const result = await validateIdentityCreateTransitionBasic(
|
|
374
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
375
|
+
rawStateTransition,
|
|
376
|
+
executionContext,
|
|
377
|
+
);
|
|
375
378
|
|
|
376
|
-
expectJsonSchemaError(result,
|
|
379
|
+
await expectJsonSchemaError(result, 65);
|
|
377
380
|
|
|
378
|
-
const
|
|
381
|
+
const firstError = result.getErrors()[0];
|
|
382
|
+
const lastError = result.getErrors()[64];
|
|
379
383
|
|
|
380
|
-
expect(
|
|
381
|
-
expect(
|
|
384
|
+
expect(firstError.getInstancePath()).to.equal('/signature/0');
|
|
385
|
+
expect(firstError.getKeyword()).to.equal('type');
|
|
382
386
|
|
|
383
|
-
expect(
|
|
387
|
+
expect(lastError.getInstancePath()).to.equal('/signature/64');
|
|
388
|
+
expect(lastError.getKeyword()).to.equal('type');
|
|
384
389
|
});
|
|
385
390
|
|
|
386
391
|
it('should be not shorter than 65 bytes', async () => {
|
|
387
392
|
rawStateTransition.signature = Buffer.alloc(64);
|
|
388
393
|
|
|
389
|
-
const result = await validateIdentityCreateTransitionBasic(
|
|
394
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
395
|
+
rawStateTransition,
|
|
396
|
+
executionContext,
|
|
397
|
+
);
|
|
390
398
|
|
|
391
|
-
expectJsonSchemaError(result);
|
|
399
|
+
await expectJsonSchemaError(result);
|
|
392
400
|
|
|
393
401
|
const [error] = result.getErrors();
|
|
394
402
|
|
|
395
|
-
expect(error.
|
|
403
|
+
expect(error.getInstancePath()).to.equal('/signature');
|
|
396
404
|
expect(error.getKeyword()).to.equal('minItems');
|
|
397
405
|
});
|
|
398
406
|
|
|
399
407
|
it('should be not longer than 65 bytes', async () => {
|
|
400
408
|
rawStateTransition.signature = Buffer.alloc(66);
|
|
401
409
|
|
|
402
|
-
const result = await validateIdentityCreateTransitionBasic(
|
|
410
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
411
|
+
rawStateTransition,
|
|
412
|
+
executionContext,
|
|
413
|
+
);
|
|
403
414
|
|
|
404
|
-
expectJsonSchemaError(result);
|
|
415
|
+
await expectJsonSchemaError(result);
|
|
405
416
|
|
|
406
417
|
const [error] = result.getErrors();
|
|
407
418
|
|
|
408
|
-
expect(error.
|
|
419
|
+
expect(error.getInstancePath()).to.equal('/signature');
|
|
409
420
|
expect(error.getKeyword()).to.equal('maxItems');
|
|
410
421
|
});
|
|
411
422
|
});
|
|
412
423
|
|
|
413
424
|
it('should return valid result', async () => {
|
|
414
|
-
const result = await validateIdentityCreateTransitionBasic(
|
|
425
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
426
|
+
rawStateTransition,
|
|
427
|
+
executionContext,
|
|
428
|
+
);
|
|
415
429
|
|
|
416
430
|
expect(result.isValid()).to.be.true();
|
|
417
|
-
|
|
418
|
-
expect(validatePublicKeysMock).to.be.calledOnceWithExactly(
|
|
419
|
-
rawStateTransition.publicKeys,
|
|
420
|
-
);
|
|
421
431
|
});
|
|
422
432
|
});
|