@dashevo/wasm-dpp 0.24.0-dev.12 → 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.
Files changed (118) hide show
  1. package/Cargo.toml +3 -0
  2. package/README.md +5 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.LICENSE.txt +9 -0
  5. package/dist/wasm/wasm_dpp.d.ts +1495 -565
  6. package/karma.conf.js +5 -0
  7. package/lib/identifier/patchIdentifier.ts +5 -4
  8. package/lib/index.ts +1 -1
  9. package/lib/test/bootstrap.js +5 -0
  10. package/lib/test/mocks/getBlsAdapterMock.js +36 -0
  11. package/lib/test/utils/newDocumentsContainer.js +36 -0
  12. package/package.json +7 -4
  13. package/src/bls_adapter.rs +16 -1
  14. package/src/data_contract/data_contract.rs +35 -7
  15. package/src/data_contract/errors/invalid_document_type.rs +1 -1
  16. package/src/data_contract/index.rs +56 -1
  17. package/src/data_contract/mod.rs +1 -0
  18. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +2 -4
  19. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +3 -3
  20. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +2 -4
  21. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +9 -6
  22. package/src/data_contract_factory/data_contract_factory.rs +4 -6
  23. package/src/document/errors/invalid_document_error.rs +10 -9
  24. package/src/document/errors/invalid_initial_revision_error.rs +1 -1
  25. package/src/document/errors/mismatch_owners_ids_error.rs +14 -4
  26. package/src/document/errors/mod.rs +17 -13
  27. package/src/document/errors/no_documents_supplied_error.rs +4 -4
  28. package/src/document/factory.rs +192 -0
  29. package/src/document/mod.rs +222 -30
  30. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +47 -1
  31. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +25 -1
  32. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +65 -0
  33. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +123 -3
  34. package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
  35. package/src/document/validator.rs +30 -0
  36. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
  37. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
  38. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
  39. package/src/errors/dpp_error.rs +17 -0
  40. package/src/errors/from.rs +5 -0
  41. package/src/errors/js_conversion.rs +19 -4
  42. package/src/errors/mod.rs +2 -0
  43. package/src/errors/protocol_error.rs +7 -4
  44. package/src/identifier/mod.rs +48 -3
  45. package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
  46. package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
  47. package/src/identity/errors/mod.rs +7 -0
  48. package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
  49. package/src/identity/identity_facade.rs +2 -4
  50. package/src/identity/identity_public_key/mod.rs +41 -7
  51. package/src/identity/mod.rs +14 -5
  52. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
  53. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
  54. package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
  55. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
  56. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
  57. package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
  58. package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
  59. package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
  60. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +335 -0
  61. package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
  62. package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
  63. package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
  64. package/src/identity/state_transition/identity_create_transition/to_object.rs +46 -0
  65. package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
  66. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +280 -0
  67. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
  68. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
  69. package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
  70. package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
  71. package/src/identity/state_transition/mod.rs +9 -0
  72. package/src/identity/state_transition/validate_public_key_signatures.rs +59 -0
  73. package/src/identity/validation/public_keys_validator.rs +16 -10
  74. package/src/identity_public_key/public_keys_validator.rs +44 -0
  75. package/src/lib.rs +2 -0
  76. package/src/lodash.rs +7 -0
  77. package/src/state_repository.rs +188 -36
  78. package/src/state_transition/mod.rs +12 -0
  79. package/src/utils.rs +102 -7
  80. package/src/validation/json_schema_validator.rs +41 -0
  81. package/src/validation/mod.rs +2 -0
  82. package/src/validation/validation_result.rs +23 -5
  83. package/src/version/mod.rs +2 -0
  84. package/src/version/protocol_version.rs +26 -0
  85. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +579 -502
  86. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +175 -165
  87. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +83 -114
  88. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +82 -91
  89. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +75 -31
  90. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -148
  91. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +63 -75
  92. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +48 -19
  93. package/test/unit/dataContract/DataContract.spec.js +3 -3
  94. package/test/unit/dataContract/createDataContract.spec.js +0 -1
  95. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
  96. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +3 -3
  97. package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
  98. package/test/unit/document/Document.spec.js +147 -155
  99. package/test/unit/document/DocumentFactory.spec.js +325 -91
  100. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +142 -64
  101. package/test/unit/identity/Identity.spec.js +2 -2
  102. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +69 -30
  103. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +32 -32
  104. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +56 -25
  105. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
  106. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +48 -46
  107. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
  108. package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
  109. package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
  110. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
  111. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
  112. package/wasm/package.json +5 -0
  113. package/wasm/wasm_dpp.d.ts +1495 -565
  114. package/wasm/wasm_dpp.js +3654 -1206
  115. package/wasm/wasm_dpp_bg.js +1 -1
  116. package/wasm/wasm_dpp_bg.wasm +0 -0
  117. package/wasm/wasm_dpp_bg.wasm.d.ts +557 -386
  118. package/webpack.config.js +9 -0
@@ -1,83 +1,86 @@
1
- const { getRE2Class } = require('@dashevo/wasm-re2');
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 validateIdentityCreateTransitionBasicFactory = require(
10
- '@dashevo/dpp/lib/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory',
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
- beforeEach(async function beforeEach() {
37
- validatePublicKeysMock = this.sinonSandbox.stub()
38
- .returns(new ValidationResult());
14
+ let stateRepositoryMock;
15
+ let mockIdentityPublicKey;
16
+ let executionContext;
39
17
 
40
- validatePublicKeysInIdentityCreateTransition = this.sinonSandbox.stub()
41
- .returns(new ValidationResult());
18
+ let validateIdentityCreateTransitionBasic;
42
19
 
43
- assetLockPublicKeyHash = Buffer.alloc(20, 1);
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
- const assetLockValidationResult = new ValidationResult();
54
+ beforeEach(async function () {
55
+ stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
56
+ stateRepositoryMock.verifyInstantLock.returns(true);
46
57
 
47
- assetLockValidationResult.setData(assetLockPublicKeyHash);
58
+ executionContext = new StateTransitionExecutionContext();
48
59
 
49
- const RE2 = await getRE2Class();
50
- const ajv = createAjv(RE2);
60
+ const blsAdapter = await getBlsAdapterMock();
51
61
 
52
- const jsonSchemaValidator = new JsonSchemaValidator(ajv);
62
+ const validator = new IdentityCreateTransitionBasicValidator(stateRepositoryMock, blsAdapter);
63
+ validateIdentityCreateTransitionBasic = (st, context) => validator.validate(st, context);
53
64
 
54
- const proofValidationResult = new ValidationResult();
55
- proofValidationResult.setData(assetLockPublicKeyHash);
65
+ const stateTransitionJS = getIdentityCreateTransitionFixture();
66
+ stateTransition = new IdentityCreateTransition(stateTransitionJS.toObject());
56
67
 
57
- proofValidationFunctionsByTypeMock = {
58
- [InstantAssetLockProof.type]: this.sinonSandbox.stub().resolves(proofValidationResult),
59
- [ChainAssetLockProof.type]: this.sinonSandbox.stub().resolves(proofValidationResult),
60
- };
68
+ const privateKey = new PrivateKey('9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2');
69
+ const publicKey = privateKey.toPublicKey();
61
70
 
62
- validateProtocolVersionMock = this.sinonSandbox.stub().returns(new ValidationResult());
71
+ const identityPublicKey = mockIdentityPublicKey(publicKey.toBuffer());
63
72
 
64
- validatePublicKeySignaturesMock = this.sinonSandbox.stub()
65
- .returns(new ValidationResult());
73
+ stateTransition.setPublicKeys([identityPublicKey]);
66
74
 
67
- validateIdentityCreateTransitionBasic = validateIdentityCreateTransitionBasicFactory(
68
- jsonSchemaValidator,
69
- validatePublicKeysMock,
70
- validatePublicKeysInIdentityCreateTransition,
71
- proofValidationFunctionsByTypeMock,
72
- validateProtocolVersionMock,
73
- validatePublicKeySignaturesMock,
75
+ await stateTransition.signByPrivateKey(
76
+ privateKey.toBuffer(),
77
+ identityPublicKey.type,
74
78
  );
75
79
 
76
- stateTransition = getIdentityCreateTransitionFixture();
77
-
78
- const privateKey = '9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2';
80
+ const signature = stateTransition.getSignature();
81
+ identityPublicKey.setSignature(signature);
79
82
 
80
- await stateTransition.signByPrivateKey(privateKey, IdentityPublicKey.TYPES.ECDSA_SECP256K1);
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(rawStateTransition);
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(rawStateTransition);
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 = -1;
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
- expect(error).to.equal(protocolVersionError);
130
-
131
- expect(validateProtocolVersionMock).to.be.calledOnceWith(
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(rawStateTransition);
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(rawStateTransition);
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(rawStateTransition);
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
- const assetLockError = new SomeConsensusError('test');
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.equal(assetLockError);
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 publicKeysError = new SomeConsensusError('test');
294
- const publicKeysResult = new ValidationResult([
295
- publicKeysError,
296
- ]);
291
+ const privateKey = new PrivateKey();
297
292
 
298
- validatePublicKeysMock.returns(publicKeysResult);
293
+ // Mess up public key
294
+ const identityPublicKey = mockIdentityPublicKey(Buffer.alloc(33));
299
295
 
300
- const result = await validateIdentityCreateTransitionBasic(
301
- rawStateTransition,
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
- expectValidationError(result);
305
-
306
- const [error] = result.getErrors();
304
+ rawStateTransition = stateTransition.toObject();
307
305
 
308
- expect(error).to.equal(publicKeysError);
306
+ const result = await validateIdentityCreateTransitionBasic(
307
+ rawStateTransition,
308
+ executionContext,
309
+ );
309
310
 
310
- expect(validatePublicKeysMock)
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 publicKeysError = new SomeConsensusError('test');
316
- const publicKeysResult = new ValidationResult([
317
- publicKeysError,
318
- ]);
315
+ const privateKey = new PrivateKey();
319
316
 
320
- validatePublicKeysInIdentityCreateTransition.returns(publicKeysResult);
317
+ // Mess up public key's purpose
318
+ const identityPublicKey = mockIdentityPublicKey(privateKey.toPublicKey().toBuffer());
319
+ identityPublicKey.setPurpose(2);
321
320
 
322
- const result = await validateIdentityCreateTransitionBasic(
323
- rawStateTransition,
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
- expectValidationError(result);
327
-
328
- const [error] = result.getErrors();
329
+ rawStateTransition = stateTransition.toObject();
329
330
 
330
- expect(error).to.equal(publicKeysError);
331
+ const result = await validateIdentityCreateTransitionBasic(
332
+ rawStateTransition,
333
+ executionContext,
334
+ );
331
335
 
332
- expect(validatePublicKeysInIdentityCreateTransition)
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 publicKeysError = new SomeConsensusError('test');
338
- const publicKeysResult = new ValidationResult([
339
- publicKeysError,
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(rawStateTransition);
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.instancePath).to.equal('');
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(rawStateTransition);
374
+ const result = await validateIdentityCreateTransitionBasic(
375
+ rawStateTransition,
376
+ executionContext,
377
+ );
375
378
 
376
- expectJsonSchemaError(result, 2);
379
+ await expectJsonSchemaError(result, 65);
377
380
 
378
- const [error, byteArrayError] = result.getErrors();
381
+ const firstError = result.getErrors()[0];
382
+ const lastError = result.getErrors()[64];
379
383
 
380
- expect(error.instancePath).to.equal('/signature/0');
381
- expect(error.getKeyword()).to.equal('type');
384
+ expect(firstError.getInstancePath()).to.equal('/signature/0');
385
+ expect(firstError.getKeyword()).to.equal('type');
382
386
 
383
- expect(byteArrayError.getKeyword()).to.equal('byteArray');
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(rawStateTransition);
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.instancePath).to.equal('/signature');
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(rawStateTransition);
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.instancePath).to.equal('/signature');
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(rawStateTransition);
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
  });