@dashevo/wasm-dpp 0.25.8 → 0.25.9

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 (95) hide show
  1. package/Cargo.toml +3 -2
  2. package/README.md +1 -1
  3. package/dist/wasm/wasm_dpp.d.ts +808 -712
  4. package/dist/wasm/wasm_dpp.js +853 -452
  5. package/dist/wasm/wasm_dpp_bg.js +1 -1
  6. package/lib/bls/bls.js +48 -0
  7. package/lib/test/fixtures/getChainAssetLockProofFixture.js +20 -1
  8. package/lib/test/fixtures/getDataContractFixture.js +4 -6
  9. package/lib/test/fixtures/getDocumentTransitionsFixture.js +31 -1
  10. package/lib/test/fixtures/getInstantAssetLockProofFixture.js +32 -12
  11. package/lib/test/mocks/getBlsAdapterMock.js +1 -1
  12. package/lib/utils/creditsConverter.js +14 -0
  13. package/lib/utils/hash.js +18 -0
  14. package/lib/wasm/wasm_dpp.d.ts +808 -712
  15. package/package.json +3 -5
  16. package/src/dash_platform_protocol.rs +5 -5
  17. package/src/document/errors/invalid_document_error.rs +5 -0
  18. package/src/document/extended_document.rs +15 -0
  19. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +219 -214
  20. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +1 -1
  21. package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +4 -2
  22. package/src/errors/consensus/basic/json_schema_error.rs +35 -5
  23. package/src/identity/identity_facade.rs +7 -5
  24. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +32 -17
  25. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +22 -13
  26. package/src/identity/state_transition/asset_lock_proof/mod.rs +12 -11
  27. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +1 -0
  28. package/src/identity/state_transition/identity_create_transition/to_object.rs +1 -0
  29. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +1 -0
  30. package/src/identity/state_transition/identity_topup_transition/to_object.rs +1 -0
  31. package/src/lib.rs +1 -1
  32. package/src/validation/mod.rs +2 -2
  33. package/src/validation/validation_result.rs +16 -15
  34. package/test/integration/document/DocumentFacade.spec.js +11 -27
  35. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +9 -19
  36. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +2 -2
  37. package/test/integration/document/validation/validateDocumentFactory.spec.js +2 -2
  38. package/test/integration/identity/IdentityFacade.spec.js +1 -2
  39. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +2 -2
  40. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +2 -2
  41. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +6 -8
  42. package/test/unit/document/Document.spec.js +30 -52
  43. package/test/unit/document/DocumentFactory.spec.js +2 -2
  44. package/test/unit/document/errors/InvalidDocumentError.spec.js +9 -9
  45. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +158 -155
  46. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +132 -134
  47. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +3 -3
  48. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +568 -591
  49. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +5 -13
  50. package/test/unit/identity/Identity.spec.js +2 -2
  51. package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +9 -28
  52. package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +19 -27
  53. package/lib/test/fixtures/getDashPayContractFixture.js +0 -1
  54. package/lib/test/fixtures/getDashPayDocumentFixture.js +0 -1
  55. package/lib/test/fixtures/getDpnsContractFixture.js +0 -1
  56. package/lib/test/fixtures/getDpnsDocumentFixture.js +0 -1
  57. package/lib/test/fixtures/getFeatureFlagsContractFixture.js +0 -1
  58. package/lib/test/fixtures/getFeatureFlagsDocumentsFixture.js +0 -1
  59. package/lib/test/fixtures/getIdentityTopUpTransitionFixtureJs.js +0 -1
  60. package/lib/test/fixtures/getMasternodeRewardShareDocumentsFixture.js +0 -1
  61. package/lib/test/fixtures/getMasternodeRewardSharesContractFixture.js +0 -1
  62. package/lib/test/fixtures/getPreorderDocumentFixture.js +0 -1
  63. package/lib/test/fixtures/getRawTransactionFixture.js +0 -1
  64. package/lib/test/fixtures/js/generateRandomIdentifier.js +0 -1
  65. package/lib/test/fixtures/js/getChainAssetLockProofFixture.js +0 -1
  66. package/lib/test/fixtures/js/getDataContractFixture.js +0 -1
  67. package/lib/test/fixtures/js/getDocumentTransitionsFixture.js +0 -1
  68. package/lib/test/fixtures/js/getDocumentsFixture.js +0 -1
  69. package/lib/test/fixtures/js/getInstantAssetLockProofFixture.js +0 -1
  70. package/test/integration/DashPlatformProtocol.spec.js +0 -53
  71. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +0 -195
  72. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -500
  73. package/test/integration/stateTransition/calculateStateTransitionFeeFromOperationsFactory.spec.js +0 -53
  74. package/test/unit/dataContract/getBinaryPropertiesFromSchema.spec.js +0 -103
  75. package/test/unit/dataContract/getPropertyDefinitionByPath.spec.js +0 -84
  76. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +0 -45
  77. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +0 -49
  78. package/test/unit/dataTrigger/DataTrigger.spec.js +0 -132
  79. package/test/unit/dataTrigger/DataTriggerExecutionContext.spec.js +0 -29
  80. package/test/unit/dataTrigger/dashpayDataTriggers/createContactRequestDataTrigger.spec.js +0 -107
  81. package/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js +0 -382
  82. package/test/unit/dataTrigger/featureFlagDataTriggers/createFeatureFlagDataTrigger.spec.js +0 -99
  83. package/test/unit/dataTrigger/getDataTriggersFactory.spec.js +0 -113
  84. package/test/unit/dataTrigger/rejectDataTrigger.spec.js +0 -51
  85. package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +0 -202
  86. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +0 -256
  87. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +0 -94
  88. package/test/unit/errors/consensus/codes.spec.js +0 -102
  89. package/test/unit/identity/creditsConverter.spec.js +0 -34
  90. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +0 -83
  91. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +0 -138
  92. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +0 -100
  93. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +0 -36
  94. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +0 -63
  95. package/test/unit/identity/validation/validateRequiredPurposeAndSecurityLevelFactory.spec.js +0 -47
@@ -1,500 +0,0 @@
1
- const { PrivateKey, crypto: { Hash } } = require('@dashevo/dashcore-lib');
2
-
3
- const crypto = require('crypto');
4
-
5
- const StateTransitionMock = require('@dashevo/dpp/lib/test/mocks/StateTransitionMock');
6
- const IdentityPublicKey = require('@dashevo/dpp/lib/identity/IdentityPublicKey');
7
- const InvalidSignatureTypeError = require('@dashevo/dpp/lib/stateTransition/errors/InvalidIdentityPublicKeyTypeError');
8
- const InvalidSignaturePublicKeyError = require('@dashevo/dpp/lib/stateTransition/errors/InvalidSignaturePublicKeyError');
9
- const PublicKeySecurityLevelNotMetError = require('@dashevo/dpp/lib/stateTransition/errors/PublicKeySecurityLevelNotMetError');
10
- const WrongPublicKeyPurposeError = require('@dashevo/dpp/lib/stateTransition/errors/WrongPublicKeyPurposeError');
11
- const StateTransitionIsNotSignedError = require('@dashevo/dpp/lib/stateTransition/errors/StateTransitionIsNotSignedError');
12
- const PublicKeyMismatchError = require('@dashevo/dpp/lib/stateTransition/errors/PublicKeyMismatchError');
13
- const BlsSignatures = require('@dashevo/dpp/lib/bls/bls');
14
- const PublicKeyIsDisabledError = require('@dashevo/dpp/lib/stateTransition/errors/PublicKeyIsDisabledError');
15
- const InvalidSignaturePublicKeySecurityLevelError = require('@dashevo/dpp/lib/stateTransition/errors/InvalidSignaturePublicKeySecurityLevelError');
16
- const stateTransitionTypes = require('@dashevo/dpp/lib/stateTransition/stateTransitionTypes');
17
-
18
- describe('AbstractStateTransitionIdentitySigned', () => {
19
- let stateTransition;
20
- let protocolVersion;
21
- let privateKeyHex;
22
- let privateKeyWIF;
23
- let publicKeyId;
24
- let identityPublicKey;
25
- let blsPrivateKey;
26
- let blsPrivateKeyHex;
27
- let blsInstance;
28
-
29
- beforeEach(async () => {
30
- const privateKeyModel = new PrivateKey();
31
- privateKeyWIF = privateKeyModel.toWIF();
32
- privateKeyHex = privateKeyModel.toBuffer().toString('hex');
33
- const publicKey = privateKeyModel.toPublicKey().toBuffer();
34
- publicKeyId = 1;
35
-
36
- protocolVersion = 1;
37
-
38
- stateTransition = new StateTransitionMock({
39
- protocolVersion,
40
- });
41
-
42
- blsInstance = await BlsSignatures.getInstance();
43
- const {
44
- BasicSchemeMPL,
45
- } = blsInstance;
46
-
47
- const randomBytes = new Uint8Array(crypto.randomBytes(256));
48
- blsPrivateKey = BasicSchemeMPL.keyGen(randomBytes);
49
- blsPrivateKeyHex = Buffer.from(blsPrivateKey.serialize()).toString('hex');
50
-
51
- identityPublicKey = new IdentityPublicKey()
52
- .setId(publicKeyId)
53
- .setType(IdentityPublicKey.TYPES.ECDSA_SECP256K1)
54
- .setData(publicKey)
55
- .setSecurityLevel(IdentityPublicKey.SECURITY_LEVELS.HIGH)
56
- .setPurpose(IdentityPublicKey.PURPOSES.AUTHENTICATION);
57
- });
58
-
59
- afterEach(() => {
60
- blsPrivateKey.delete();
61
- });
62
-
63
- describe('#toObject', () => {
64
- it('should return raw state transition', () => {
65
- const rawStateTransition = stateTransition.toObject();
66
-
67
- expect(rawStateTransition).to.deep.equal({
68
- protocolVersion,
69
- signature: undefined,
70
- signaturePublicKeyId: undefined,
71
- type: 0,
72
- });
73
- });
74
-
75
- it('should return raw state transition without signature ', () => {
76
- const rawStateTransition = stateTransition.toObject({ skipSignature: true });
77
-
78
- expect(rawStateTransition).to.deep.equal({
79
- protocolVersion,
80
- type: 0,
81
- });
82
- });
83
- });
84
-
85
- describe('#toJSON', () => {
86
- it('should return state transition as JSON', () => {
87
- const jsonStateTransition = stateTransition.toJSON();
88
-
89
- expect(jsonStateTransition).to.deep.equal({
90
- signaturePublicKeyId: undefined,
91
- signature: undefined,
92
- protocolVersion,
93
- type: 0,
94
- });
95
- });
96
- });
97
-
98
- describe('#hash', () => {
99
- it.skip('should return serialized hash', () => {
100
- const hash = stateTransition.hash();
101
-
102
- expect(hash).to.be.equal('9177fcb220cbab84abcb9ebd5c048facf47f455f6826bf37d97a9908e09fcafd');
103
- });
104
- });
105
-
106
- describe('#toBuffer', () => {
107
- it.skip('should return serialized data', () => {
108
- const serializedData = stateTransition.toBuffer();
109
-
110
- expect(serializedData.toString('hex')).to.be.equal('a4647479706500697369676e6174757265f66f70726f746f636f6c56657273696f6ef6747369676e61747572655075626c69634b65794964f6');
111
- });
112
-
113
- it.skip('should return serialized data without signature data', () => {
114
- const serializedData = stateTransition.toBuffer({ skipSignature: true });
115
-
116
- expect(serializedData.toString('hex')).to.be.equal('a26474797065006f70726f746f636f6c56657273696f6ef6');
117
- });
118
- });
119
-
120
- describe('#getSignaturePublicKeyId', () => {
121
- it('should return public key ID', async () => {
122
- await stateTransition.sign(identityPublicKey, privateKeyHex);
123
-
124
- const keyId = stateTransition.getSignaturePublicKeyId();
125
- expect(keyId).to.be.equal(publicKeyId);
126
- });
127
- });
128
-
129
- describe('#sign', () => {
130
- it('should sign data and validate signature with private key in hex format', async () => {
131
- await stateTransition.sign(identityPublicKey, privateKeyHex);
132
-
133
- expect(stateTransition.signature).to.be.an.instanceOf(Buffer);
134
-
135
- const isValid = await stateTransition.verifySignature(identityPublicKey);
136
-
137
- expect(isValid).to.be.true();
138
- });
139
-
140
- it('should sign data and validate signature with private key in buffer format', async () => {
141
- await stateTransition.sign(identityPublicKey, privateKeyWIF);
142
-
143
- expect(stateTransition.signature).to.be.an.instanceOf(Buffer);
144
-
145
- const isValid = await stateTransition.verifySignature(identityPublicKey);
146
-
147
- expect(isValid).to.be.true();
148
- });
149
-
150
- it('should sign data and validate signature with ECDSA_HASH160 identityPublicKey', async () => {
151
- identityPublicKey.setType(IdentityPublicKey.TYPES.ECDSA_HASH160);
152
- identityPublicKey.setData(
153
- Hash.sha256ripemd160(identityPublicKey.getData()),
154
- );
155
-
156
- await stateTransition.sign(identityPublicKey, privateKeyHex);
157
-
158
- expect(stateTransition.signature).to.be.an.instanceOf(Buffer);
159
-
160
- const isValid = await stateTransition.verifySignature(identityPublicKey);
161
-
162
- expect(isValid).to.be.true();
163
- });
164
-
165
- it('should throw an error if we try to sign with wrong public key', async () => {
166
- const publicKey = new PrivateKey()
167
- .toPublicKey()
168
- .toBuffer();
169
-
170
- identityPublicKey.setData(publicKey);
171
-
172
- try {
173
- await stateTransition.sign(identityPublicKey, privateKeyHex);
174
-
175
- expect.fail('Should throw InvalidSignaturePublicKeyError');
176
- } catch (e) {
177
- expect(e).to.be.instanceOf(InvalidSignaturePublicKeyError);
178
- expect(e.getSignaturePublicKey()).to.deep.equal(identityPublicKey.getData());
179
- }
180
- });
181
-
182
- it('should throw InvalidSignatureTypeError if signature type is not equal ECDSA', async () => {
183
- identityPublicKey.setType(30000);
184
-
185
- try {
186
- await stateTransition.sign(identityPublicKey, privateKeyHex);
187
-
188
- expect.fail('Should throw InvalidSignatureTypeError');
189
- } catch (e) {
190
- expect(e).to.be.instanceOf(InvalidSignatureTypeError);
191
- expect(e.getPublicKeyType()).to.be.equal(identityPublicKey.getType());
192
- }
193
- });
194
-
195
- it('should throw an error if the key security level is not met', async function it() {
196
- stateTransition.getRequiredKeySecurityLevel = this.sinonSandbox
197
- .stub()
198
- .returns(IdentityPublicKey.SECURITY_LEVELS.MASTER);
199
-
200
- identityPublicKey.setSecurityLevel(IdentityPublicKey.SECURITY_LEVELS.MEDIUM);
201
-
202
- try {
203
- await stateTransition.sign(identityPublicKey, privateKeyHex);
204
-
205
- expect.fail('Should throw PublicKeySecurityLevelNotMetError');
206
- } catch (e) {
207
- expect(e).to.be.instanceOf(PublicKeySecurityLevelNotMetError);
208
- expect(e.getPublicKeySecurityLevel())
209
- .to.be.deep.equal(identityPublicKey.getSecurityLevel());
210
- expect(e.getKeySecurityLevelRequirement())
211
- .to.be.deep.equal(IdentityPublicKey.SECURITY_LEVELS.HIGH);
212
- }
213
- });
214
-
215
- it('should throw an error if the key purpose is not authentication', async () => {
216
- identityPublicKey.setPurpose(IdentityPublicKey.PURPOSES.ENCRYPTION);
217
-
218
- try {
219
- await stateTransition.sign(identityPublicKey, privateKeyHex);
220
-
221
- expect.fail('Should throw WrongPublicKeyPurposeError');
222
- } catch (e) {
223
- expect(e).to.be.instanceOf(WrongPublicKeyPurposeError);
224
- expect(e.getPublicKeyPurpose()).to.be.deep.equal(identityPublicKey.getPurpose());
225
- expect(e.getKeyPurposeRequirement())
226
- .to.be.deep.equal(IdentityPublicKey.PURPOSES.AUTHENTICATION);
227
- }
228
- });
229
-
230
- it('should sign data and validate signature with BLS12_381 identityPublicKey', async () => {
231
- identityPublicKey.setType(IdentityPublicKey.TYPES.BLS12_381);
232
- identityPublicKey.setData(Buffer.from(blsPrivateKey.getG1().serialize()));
233
-
234
- await stateTransition.sign(identityPublicKey, blsPrivateKeyHex);
235
-
236
- expect(stateTransition.signature).to.be.an.instanceOf(Buffer);
237
-
238
- const isValid = await stateTransition.verifySignature(identityPublicKey);
239
-
240
- expect(isValid).to.be.true();
241
- });
242
- });
243
-
244
- describe('#signByPrivateKey', () => {
245
- it('should sign and validate with private key', async () => {
246
- privateKeyHex = '9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2';
247
-
248
- await stateTransition.signByPrivateKey(
249
- privateKeyHex,
250
- IdentityPublicKey.TYPES.ECDSA_SECP256K1,
251
- );
252
-
253
- expect(stateTransition.signature).to.be.an.instanceOf(Buffer);
254
- });
255
-
256
- it('should sign and validate with BLS private key', async () => {
257
- identityPublicKey.setType(IdentityPublicKey.TYPES.BLS12_381);
258
- identityPublicKey.setData(Buffer.from(blsPrivateKey.getG1().serialize()));
259
-
260
- await stateTransition.signByPrivateKey(blsPrivateKeyHex, IdentityPublicKey.TYPES.BLS12_381);
261
-
262
- expect(stateTransition.signature).to.be.an.instanceOf(Buffer);
263
-
264
- const isValid = await stateTransition.verifyBLSSignatureByPublicKey(
265
- blsPrivateKey.getG1(),
266
- );
267
-
268
- expect(isValid).to.be.true();
269
- });
270
- });
271
-
272
- describe('#verifySignature', () => {
273
- it('should validate signature', async () => {
274
- await stateTransition.sign(identityPublicKey, privateKeyHex);
275
-
276
- expect(stateTransition.signature).to.be.an.instanceOf(Buffer);
277
-
278
- const isValid = await stateTransition.verifySignature(identityPublicKey);
279
-
280
- expect(isValid).to.be.true();
281
- });
282
-
283
- it('should throw an StateTransitionIsNotSignedError error if transition is not signed', async () => {
284
- try {
285
- await stateTransition.verifySignature(identityPublicKey);
286
-
287
- expect.fail('should throw StateTransitionIsNotSignedError');
288
- } catch (e) {
289
- expect(e).to.be.instanceOf(StateTransitionIsNotSignedError);
290
- expect(e.getStateTransition()).to.equal(stateTransition);
291
- }
292
- });
293
-
294
- it('should throw an PublicKeyMismatchError error if public key id not equals public key id in state transition', async () => {
295
- await stateTransition.sign(identityPublicKey, privateKeyHex);
296
-
297
- identityPublicKey.setId(identityPublicKey.getId() + 1);
298
-
299
- try {
300
- await stateTransition.verifySignature(identityPublicKey);
301
-
302
- expect.fail('should throw PublicKeyMismatchError');
303
- } catch (e) {
304
- expect(e).to.be.instanceOf(PublicKeyMismatchError);
305
- expect(e.getPublicKey()).to.equal(identityPublicKey);
306
- }
307
- });
308
-
309
- it('should not verify signature with wrong public key', async () => {
310
- await stateTransition.sign(identityPublicKey, privateKeyHex);
311
- const publicKey = new PrivateKey()
312
- .toPublicKey()
313
- .toBuffer();
314
-
315
- identityPublicKey.setData(publicKey);
316
-
317
- const isValid = await stateTransition.verifySignature(identityPublicKey);
318
-
319
- expect(isValid).to.be.false();
320
- });
321
-
322
- it('should throw an error if the key security level is not met', async () => {
323
- await stateTransition.sign(identityPublicKey, privateKeyHex);
324
-
325
- // Set key security level after the signing, since otherwise .sign method won't work
326
- identityPublicKey.setSecurityLevel(IdentityPublicKey.SECURITY_LEVELS.MEDIUM);
327
-
328
- try {
329
- await stateTransition.verifySignature(identityPublicKey);
330
-
331
- expect.fail('Should throw PublicKeySecurityLevelNotMetError');
332
- } catch (e) {
333
- expect(e).to.be.instanceOf(PublicKeySecurityLevelNotMetError);
334
- expect(e.getPublicKeySecurityLevel())
335
- .to.be.deep.equal(identityPublicKey.getSecurityLevel());
336
- expect(e.getKeySecurityLevelRequirement())
337
- .to.be.deep.equal(IdentityPublicKey.SECURITY_LEVELS.HIGH);
338
- }
339
- });
340
-
341
- it('should throw an error if the key purpose is not equal to authentication', async () => {
342
- await stateTransition.sign(identityPublicKey, privateKeyHex);
343
-
344
- // Set key security level after the signing, since otherwise .sign method won't work
345
- identityPublicKey.setPurpose(IdentityPublicKey.PURPOSES.ENCRYPTION);
346
-
347
- try {
348
- await stateTransition.verifySignature(identityPublicKey);
349
-
350
- expect.fail('Should throw WrongPublicKeyPurposeError');
351
- } catch (e) {
352
- expect(e).to.be.instanceOf(WrongPublicKeyPurposeError);
353
- expect(e.getPublicKeyPurpose()).to.be.deep.equal(identityPublicKey.getPurpose());
354
- expect(e.getKeyPurposeRequirement())
355
- .to.be.deep.equal(IdentityPublicKey.PURPOSES.AUTHENTICATION);
356
- }
357
- });
358
-
359
- it('should validate BLS signature', async () => {
360
- identityPublicKey.setType(IdentityPublicKey.TYPES.BLS12_381);
361
- identityPublicKey.setData(Buffer.from(blsPrivateKey.getG1().serialize()));
362
-
363
- await stateTransition.sign(identityPublicKey, blsPrivateKeyHex);
364
-
365
- expect(stateTransition.signature).to.be.an.instanceOf(Buffer);
366
-
367
- const isValid = await stateTransition.verifySignature(identityPublicKey);
368
-
369
- expect(isValid).to.be.true();
370
- });
371
-
372
- it('should throw PublicKeyIsDisabledError if public key is disabled', async () => {
373
- identityPublicKey.setDisabledAt(new Date().getTime());
374
-
375
- try {
376
- await stateTransition.sign(identityPublicKey, privateKeyHex);
377
-
378
- expect.fail('Should throw PublicKeyIsDisabledError');
379
- } catch (e) {
380
- expect(e).to.be.instanceOf(PublicKeyIsDisabledError);
381
- expect(e.getPublicKey()).to.be.deep.equal(identityPublicKey);
382
- }
383
- });
384
-
385
- it('should throw InvalidSignaturePublicKeySecurityLevelError if public key with master level is using to sign non update state transition', async () => {
386
- stateTransition.type = stateTransitionTypes.DATA_CONTRACT_CREATE;
387
- identityPublicKey.setSecurityLevel(IdentityPublicKey.SECURITY_LEVELS.MASTER);
388
-
389
- try {
390
- await stateTransition.sign(identityPublicKey, blsPrivateKeyHex);
391
-
392
- expect.fail('Should throw PublicKeyIsDisabledError');
393
- } catch (e) {
394
- expect(e).to.be.instanceOf(InvalidSignaturePublicKeySecurityLevelError);
395
- expect(e.getPublicKeySecurityLevel()).to.equal(IdentityPublicKey.SECURITY_LEVELS.MASTER);
396
- expect(e.getKeySecurityLevelRequirement()).to.equal(
397
- IdentityPublicKey.SECURITY_LEVELS.HIGH,
398
- );
399
- }
400
- });
401
- });
402
-
403
- describe('#verifyESDSAHash160SignatureByPublicKeyHash', () => {
404
- it('should validate sign by public key hash', async () => {
405
- privateKeyHex = 'fdfa0d878967ac17ca3e6fa6ca7f647fea51cffac85e41424c6954fcbe97721c';
406
- const publicKey = 'dLfavDCp+ARA3O0AXsOFJ0W//mg=';
407
-
408
- await stateTransition.signByPrivateKey(privateKeyHex, IdentityPublicKey.TYPES.ECDSA_HASH160);
409
-
410
- const isValid = stateTransition.verifyESDSAHash160SignatureByPublicKeyHash(Buffer.from(publicKey, 'base64'));
411
-
412
- expect(isValid).to.be.true();
413
- });
414
-
415
- it('should throw an StateTransitionIsNotSignedError error if transition is not signed', async () => {
416
- const publicKey = 'dLfavDCp+ARA3O0AXsOFJ0W//mg=';
417
- try {
418
- stateTransition.verifyESDSAHash160SignatureByPublicKeyHash(Buffer.from(publicKey, 'base64'));
419
-
420
- expect.fail('should throw StateTransitionIsNotSignedError');
421
- } catch (e) {
422
- expect(e).to.be.instanceOf(StateTransitionIsNotSignedError);
423
- expect(e.getStateTransition()).to.equal(stateTransition);
424
- }
425
- });
426
- });
427
-
428
- describe('#verifyECDSASignatureByPublicKey', () => {
429
- it('should validate sign by public key', async () => {
430
- privateKeyHex = '9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2';
431
- const publicKey = 'A1eUrJ7lM6F1m6dbIyk+vXimKfzki+QRMHMwoAmggt6L';
432
-
433
- await stateTransition.signByPrivateKey(
434
- privateKeyHex,
435
- IdentityPublicKey.TYPES.ECDSA_SECP256K1,
436
- );
437
-
438
- const isValid = stateTransition.verifyECDSASignatureByPublicKey(Buffer.from(publicKey, 'base64'));
439
-
440
- expect(isValid).to.be.true();
441
- });
442
-
443
- it('should throw an StateTransitionIsNotSignedError error if transition is not signed', async () => {
444
- const publicKey = 'A1eUrJ7lM6F1m6dbIyk+vXimKfzki+QRMHMwoAmggt6L';
445
- try {
446
- stateTransition.verifyECDSASignatureByPublicKey(Buffer.from(publicKey, 'base64'));
447
-
448
- expect.fail('should throw StateTransitionIsNotSignedError');
449
- } catch (e) {
450
- expect(e).to.be.instanceOf(StateTransitionIsNotSignedError);
451
- expect(e.getStateTransition()).to.equal(stateTransition);
452
- }
453
- });
454
- });
455
-
456
- describe('#verifyBLSSignatureByPublicKey', () => {
457
- it('should validate sign by public key', async () => {
458
- const publicKey = blsPrivateKey.getG1();
459
-
460
- identityPublicKey.setType(IdentityPublicKey.TYPES.BLS12_381);
461
- identityPublicKey.setData(Buffer.from(publicKey.serialize()));
462
-
463
- await stateTransition.signByPrivateKey(blsPrivateKeyHex, IdentityPublicKey.TYPES.BLS12_381);
464
-
465
- const isValid = await stateTransition.verifyBLSSignatureByPublicKey(publicKey);
466
-
467
- expect(isValid).to.be.true();
468
- });
469
-
470
- it('should throw an StateTransitionIsNotSignedError error if transition is not signed', async () => {
471
- const publicKey = Buffer.from(blsPrivateKey.getG1().serialize());
472
- try {
473
- await stateTransition.verifyBLSSignatureByPublicKey(publicKey);
474
-
475
- expect.fail('should throw StateTransitionIsNotSignedError');
476
- } catch (e) {
477
- expect(e).to.be.instanceOf(StateTransitionIsNotSignedError);
478
- expect(e.getStateTransition()).to.equal(stateTransition);
479
- }
480
- });
481
- });
482
-
483
- describe('#setSignature', () => {
484
- it('should set signature', () => {
485
- const signature = 'A1eUrA';
486
- stateTransition.setSignature(signature);
487
-
488
- expect(stateTransition.signature.toString()).to.equal(signature);
489
- });
490
- });
491
-
492
- describe('#setSignaturePublicKeyId', () => {
493
- it('should set signature public key id', async () => {
494
- const signaturePublicKeyId = 1;
495
- stateTransition.setSignaturePublicKeyId(signaturePublicKeyId);
496
-
497
- expect(stateTransition.signaturePublicKeyId).to.equal(signaturePublicKeyId);
498
- });
499
- });
500
- });
@@ -1,53 +0,0 @@
1
- const calculateStateTransitionFeeFromOperationsFactory = require('@dashevo/dpp/lib/stateTransition/fee/calculateStateTransitionFeeFromOperationsFactory');
2
- const generateRandomIdentifier = require('@dashevo/dpp/lib/test/utils/generateRandomIdentifier');
3
-
4
- describe('calculateStateTransitionFeeFromOperationsFactory', () => {
5
- let stateTransition;
6
- let calculateStateTransitionFeeFromOperations;
7
- let calculateOperationFeesMock;
8
-
9
- beforeEach(async function beforeEach() {
10
- calculateOperationFeesMock = this.sinonSandbox.stub();
11
-
12
- calculateStateTransitionFeeFromOperations = calculateStateTransitionFeeFromOperationsFactory(
13
- calculateOperationFeesMock,
14
- );
15
- });
16
-
17
- it('should calculate fee based on executed operations', async () => {
18
- const identityId = generateRandomIdentifier();
19
- const storageFee = 10000;
20
- const processingFee = 1000;
21
- const totalRefunds = 1000 + 500;
22
- const requiredAmount = storageFee - totalRefunds;
23
- const desiredAmount = storageFee + processingFee - totalRefunds;
24
- const feeRefunds = [
25
- {
26
- identifier: identityId.toBuffer(),
27
- creditsPerEpoch: {
28
- 0: 1000,
29
- 1: 500,
30
- },
31
- },
32
- ];
33
-
34
- const calculatedOperationsFeesResult = {
35
- storageFee,
36
- processingFee,
37
- feeRefunds,
38
- };
39
-
40
- calculateOperationFeesMock.returns(calculatedOperationsFeesResult);
41
-
42
- const result = calculateStateTransitionFeeFromOperations(stateTransition, identityId);
43
-
44
- expect(result).to.deep.equal({
45
- storageFee,
46
- processingFee,
47
- requiredAmount,
48
- desiredAmount,
49
- feeRefunds,
50
- totalRefunds: 1500,
51
- });
52
- });
53
- });
@@ -1,103 +0,0 @@
1
- const { getBinaryPropertiesFromSchema } = require(
2
- '@dashevo/dpp/lib/dataContract/getBinaryPropertiesFromSchema',
3
- );
4
-
5
- describe('getBinaryPropertiesFromSchema', () => {
6
- let documentSchema;
7
-
8
- beforeEach(() => {
9
- documentSchema = {
10
- properties: {
11
- simple: {
12
- type: 'string',
13
- },
14
- withByteArray: {
15
- type: 'object',
16
- byteArray: true,
17
- },
18
- nestedObject: {
19
- type: 'object',
20
- properties: {
21
- simple: {
22
- type: 'string',
23
- },
24
- withByteArray: {
25
- type: 'object',
26
- byteArray: true,
27
- },
28
- },
29
- },
30
- arrayOfObject: {
31
- type: 'array',
32
- items: {
33
- type: 'object',
34
- properties: {
35
- simple: {
36
- type: 'string',
37
- },
38
- withByteArray: {
39
- type: 'object',
40
- byteArray: true,
41
- },
42
- },
43
- },
44
- },
45
- arrayOfObjects: {
46
- type: 'array',
47
- items: [
48
- {
49
- type: 'object',
50
- properties: {
51
- simple: {
52
- type: 'string',
53
- },
54
- withByteArray: {
55
- type: 'object',
56
- byteArray: true,
57
- },
58
- },
59
- },
60
- {
61
- type: 'string',
62
- },
63
- {
64
- type: 'array',
65
- items: [
66
- {
67
- type: 'object',
68
- properties: {
69
- simple: {
70
- type: 'string',
71
- },
72
- withByteArray: {
73
- type: 'object',
74
- byteArray: true,
75
- },
76
- },
77
- },
78
- ],
79
- },
80
- ],
81
- },
82
- },
83
- };
84
- });
85
-
86
- it('should return an empty object if not `properties` property found', () => {
87
- const result = getBinaryPropertiesFromSchema({});
88
-
89
- expect(result).to.deep.equal({});
90
- });
91
-
92
- it('should return flat object with properties having contentEncoding keyword', () => {
93
- const result = getBinaryPropertiesFromSchema(documentSchema);
94
-
95
- expect(result).to.deep.equal({
96
- withByteArray: { type: 'object', byteArray: true },
97
- 'nestedObject.withByteArray': { type: 'object', byteArray: true },
98
- 'arrayOfObject.withByteArray': { type: 'object', byteArray: true },
99
- 'arrayOfObjects[0].withByteArray': { type: 'object', byteArray: true },
100
- 'arrayOfObjects[2][0].withByteArray': { type: 'object', byteArray: true },
101
- });
102
- });
103
- });