@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,33 +1,46 @@
1
- const { Transaction } = require('@dashevo/dashcore-lib');
1
+ const { Transaction, PrivateKey, Script } = require('@dashevo/dashcore-lib');
2
2
 
3
- const DashCoreLib = require('@dashevo/dashcore-lib');
4
- const validateAssetLockTransactionFactory = require('@dashevo/dpp/lib/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory');
5
3
  const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
6
4
 
7
- const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
8
-
9
- const { expectValidationError } = require('@dashevo/dpp/lib/test/expect/expectError');
10
-
11
- const InvalidIdentityAssetLockTransactionError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidIdentityAssetLockTransactionError');
12
- const IdentityAssetLockTransactionOutputNotFoundError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/IdentityAssetLockTransactionOutputNotFoundError');
13
- const IdentityAssetLockTransactionOutPointAlreadyExistsError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/IdentityAssetLockTransactionOutPointAlreadyExistsError');
14
- const InvalidIdentityAssetLockTransactionOutputError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidIdentityAssetLockTransactionOutputError');
15
- const InvalidAssetLockTransactionOutputReturnSizeError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidAssetLockTransactionOutputReturnSizeError');
16
- const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
5
+ const { expect } = require('chai');
6
+ const { default: loadWasmDpp } = require('../../../../../dist');
7
+ const { expectValidationError } = require('../../../../../lib/test/expect/expectError');
17
8
 
18
9
  describe('validateAssetLockTransactionFactory', () => {
19
10
  let stateRepositoryMock;
20
- let validateAssetLockTransaction;
21
11
  let rawTransaction;
22
12
  let outputIndex;
23
- let transactionInstance;
24
- let transactionMock;
25
13
  let executionContext;
26
14
 
15
+ let StateTransitionExecutionContext;
16
+ let InvalidIdentityAssetLockTransactionError;
17
+ let IdentityAssetLockTransactionOutputNotFoundError;
18
+ let InvalidIdentityAssetLockTransactionOutputError;
19
+ let InvalidAssetLockTransactionOutputReturnSizeError;
20
+ let IdentityAssetLockTransactionOutPointAlreadyExistsError;
21
+ let TransactionDecodeError;
22
+ let ValidationResult;
23
+
24
+ let validateAssetLockTransaction;
25
+ let validateAssetLockTransactionDPP;
26
+
27
+ before(async () => {
28
+ ({
29
+ StateTransitionExecutionContext,
30
+ ValidationResult,
31
+ TransactionDecodeError,
32
+ InvalidIdentityAssetLockTransactionError,
33
+ IdentityAssetLockTransactionOutputNotFoundError,
34
+ InvalidIdentityAssetLockTransactionOutputError,
35
+ InvalidAssetLockTransactionOutputReturnSizeError,
36
+ IdentityAssetLockTransactionOutPointAlreadyExistsError,
37
+ validateAssetLockTransaction: validateAssetLockTransactionDPP,
38
+ } = await loadWasmDpp());
39
+ });
40
+
27
41
  beforeEach(function beforeEach() {
28
42
  rawTransaction = '030000000137feb5676d0851337ea3c9a992496aab7a0b3eee60aeeb9774000b7f4bababa5000000006b483045022100d91557de37645c641b948c6cd03b4ae3791a63a650db3e2fee1dcf5185d1b10402200e8bd410bf516ca61715867666d31e44495428ce5c1090bf2294a829ebcfa4ef0121025c3cc7fbfc52f710c941497fd01876c189171ea227458f501afcb38a297d65b4ffffffff021027000000000000166a14152073ca2300a86b510fa2f123d3ea7da3af68dcf77cb0090a0000001976a914152073ca2300a86b510fa2f123d3ea7da3af68dc88ac00000000';
29
43
  outputIndex = 0;
30
- transactionInstance = new Transaction(rawTransaction);
31
44
 
32
45
  executionContext = new StateTransitionExecutionContext();
33
46
 
@@ -35,32 +48,29 @@ describe('validateAssetLockTransactionFactory', () => {
35
48
 
36
49
  stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.returns(false);
37
50
 
38
- validateAssetLockTransaction = validateAssetLockTransactionFactory(stateRepositoryMock);
39
- });
40
-
41
- afterEach(() => {
42
- if (transactionMock) {
43
- transactionMock.restore();
44
- }
51
+ validateAssetLockTransaction = (tx, index, context) => validateAssetLockTransactionDPP(
52
+ stateRepositoryMock,
53
+ tx,
54
+ index,
55
+ context,
56
+ );
45
57
  });
46
58
 
47
59
  it('should be valid transaction', async () => {
48
60
  rawTransaction = '030000000137feb5676d085133';
49
61
 
50
- validateAssetLockTransaction = validateAssetLockTransactionFactory(stateRepositoryMock);
51
-
52
62
  const result = await validateAssetLockTransaction(
53
63
  rawTransaction,
54
64
  outputIndex,
55
65
  executionContext,
56
66
  );
57
67
 
58
- expectValidationError(result, InvalidIdentityAssetLockTransactionError);
68
+ await expectValidationError(result, InvalidIdentityAssetLockTransactionError);
59
69
 
60
70
  const [error] = result.getErrors();
61
71
 
62
72
  expect(error.getCode()).to.equal(1038);
63
- expect(error.getValidationError()).to.be.instanceOf(Error);
73
+ expect(error.getValidationError()).to.be.instanceOf(TransactionDecodeError);
64
74
 
65
75
  expect(result.getData()).to.be.undefined();
66
76
  expect(stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed).to.not.be.called();
@@ -75,7 +85,7 @@ describe('validateAssetLockTransactionFactory', () => {
75
85
  executionContext,
76
86
  );
77
87
 
78
- expectValidationError(result, IdentityAssetLockTransactionOutputNotFoundError);
88
+ await expectValidationError(result, IdentityAssetLockTransactionOutputNotFoundError);
79
89
 
80
90
  const [error] = result.getErrors();
81
91
 
@@ -86,30 +96,19 @@ describe('validateAssetLockTransactionFactory', () => {
86
96
  expect(stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed).to.not.be.called();
87
97
  });
88
98
 
89
- it('should point to output with OR_RETURN', async function it() {
90
- const isDataOut = this.sinonSandbox.stub().returns(false);
91
-
92
- const stubInstance = this.sinonSandbox.createStubInstance(Transaction);
93
-
94
- stubInstance.outputs = [{
95
- script: {
96
- isDataOut,
97
- },
98
- }];
99
-
100
- stubInstance.getOutPointBuffer.returns(transactionInstance.getOutPointBuffer(outputIndex));
101
-
102
- transactionMock = this.sinonSandbox.stub(DashCoreLib, 'Transaction').returns(
103
- stubInstance,
104
- );
99
+ it('should point to output with OR_RETURN', async () => {
100
+ const regularTransaction = new Transaction(Buffer.from(rawTransaction, 'hex'));
101
+ // Mess up expected TX output script
102
+ regularTransaction.outputs[0]
103
+ .setScript(Script.buildPublicKeyHashOut(new PrivateKey().toAddress()).toString());
105
104
 
106
105
  const result = await validateAssetLockTransaction(
107
- rawTransaction,
106
+ regularTransaction.toBuffer().toString('hex'),
108
107
  outputIndex,
109
108
  executionContext,
110
109
  );
111
110
 
112
- expectValidationError(result, InvalidIdentityAssetLockTransactionOutputError);
111
+ await expectValidationError(result, InvalidIdentityAssetLockTransactionOutputError);
113
112
 
114
113
  const [error] = result.getErrors();
115
114
 
@@ -117,30 +116,18 @@ describe('validateAssetLockTransactionFactory', () => {
117
116
  expect(error.getOutputIndex()).to.equal(outputIndex);
118
117
  });
119
118
 
120
- it('should contain valid public key hash', async function it() {
121
- const isDataOut = this.sinonSandbox.stub().returns(true);
122
- const getData = this.sinonSandbox.stub().returns(Buffer.alloc(0));
123
-
124
- const stubInstance = this.sinonSandbox.createStubInstance(Transaction);
125
- stubInstance.outputs = [{
126
- script: {
127
- isDataOut,
128
- getData,
129
- },
130
- }];
131
- stubInstance.getOutPointBuffer.returns(transactionInstance.getOutPointBuffer(outputIndex));
132
-
133
- transactionMock = this.sinonSandbox.stub(DashCoreLib, 'Transaction').returns(
134
- stubInstance,
135
- );
119
+ it('should contain valid public key hash', async () => {
120
+ const regularTransaction = new Transaction(Buffer.from(rawTransaction, 'hex'));
121
+ regularTransaction.outputs[0]
122
+ .setScript(Script.buildDataOut(Buffer.alloc(0)));
136
123
 
137
124
  const result = await validateAssetLockTransaction(
138
- rawTransaction,
125
+ regularTransaction.toBuffer().toString('hex'),
139
126
  outputIndex,
140
127
  executionContext,
141
128
  );
142
129
 
143
- expectValidationError(result, InvalidAssetLockTransactionOutputReturnSizeError);
130
+ await expectValidationError(result, InvalidAssetLockTransactionOutputReturnSizeError);
144
131
 
145
132
  const [error] = result.getErrors();
146
133
 
@@ -148,7 +135,7 @@ describe('validateAssetLockTransactionFactory', () => {
148
135
  expect(error.getOutputIndex()).to.equal(outputIndex);
149
136
  });
150
137
 
151
- it('should return IdentityAssetLockTransactionOutPointAlreadyExistsError if outPoint was already used', async () => {
138
+ it('should return IdentityAssetLockTransactionOutPointAlreadyExistsError if outPoint was already used', async function () {
152
139
  stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed.returns(true);
153
140
 
154
141
  const result = await validateAssetLockTransaction(
@@ -157,7 +144,7 @@ describe('validateAssetLockTransactionFactory', () => {
157
144
  executionContext,
158
145
  );
159
146
 
160
- expectValidationError(result, IdentityAssetLockTransactionOutPointAlreadyExistsError);
147
+ await expectValidationError(result, IdentityAssetLockTransactionOutPointAlreadyExistsError);
161
148
 
162
149
  const [error] = result.getErrors();
163
150
 
@@ -165,19 +152,19 @@ describe('validateAssetLockTransactionFactory', () => {
165
152
 
166
153
  const transaction = new Transaction(rawTransaction);
167
154
 
168
- expect(Buffer.isBuffer(error.getTransactionId())).to.be.true();
169
155
  expect(error.getTransactionId()).to.deep.equal(Buffer.from(transaction.id, 'hex'));
170
156
  expect(error.getOutputIndex()).to.deep.equal(outputIndex);
171
157
 
172
158
  expect(result.getData()).to.be.undefined();
173
159
  expect(stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed)
174
160
  .to.be.calledOnceWithExactly(
175
- transaction.getOutPointBuffer(outputIndex),
176
- executionContext,
161
+ this.sinonSandbox.match((val) => Buffer.from(val)
162
+ .equals(transaction.getOutPointBuffer(outputIndex))),
163
+ this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
177
164
  );
178
165
  });
179
166
 
180
- it('should return valid result', async () => {
167
+ it('should return valid result', async function () {
181
168
  const result = await validateAssetLockTransaction(
182
169
  rawTransaction,
183
170
  outputIndex,
@@ -193,13 +180,14 @@ describe('validateAssetLockTransactionFactory', () => {
193
180
 
194
181
  expect(stateRepositoryMock.isAssetLockTransactionOutPointAlreadyUsed)
195
182
  .to.be.calledOnceWithExactly(
196
- initialTransaction.getOutPointBuffer(outputIndex),
197
- executionContext,
183
+ this.sinonSandbox.match((val) => Buffer.from(val)
184
+ .equals(initialTransaction.getOutPointBuffer(outputIndex))),
185
+ this.sinonSandbox.match.instanceOf(StateTransitionExecutionContext),
198
186
  );
199
187
 
200
188
  const { transaction, publicKeyHash } = result.getData();
201
189
  expect(publicKeyHash).to.deep.equal(initialPublicKeyHash);
202
- expect(transaction).to.be.an.instanceOf(Transaction);
203
- expect(transaction.toJSON()).to.deep.equal(initialTransaction.toJSON());
190
+ expect(new Transaction(Buffer.from(transaction)).toJSON())
191
+ .to.deep.equal(initialTransaction.toJSON());
204
192
  });
205
193
  });
@@ -3,22 +3,42 @@ const { PrivateKey, crypto: { Hash } } = require('@dashevo/dashcore-lib');
3
3
  const crypto = require('crypto');
4
4
 
5
5
  const getIdentityCreateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityCreateTransitionFixture');
6
- const IdentityPublicKey = require('@dashevo/dpp/lib/identity/IdentityPublicKey');
7
6
  const BlsSignatures = require('@dashevo/dpp/lib/bls/bls');
8
- const validatePublicKeySignaturesFactory = require('@dashevo/dpp/lib/identity/stateTransition/validatePublicKeySignaturesFactory');
9
- const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
10
- const { expectValidationError } = require('@dashevo/dpp/lib/test/expect/expectError');
11
- const InvalidIdentityKeySignatureError = require('@dashevo/dpp/lib/errors/consensus/basic/identity/InvalidIdentityKeySignatureError');
7
+
8
+ const { expect } = require('chai');
9
+ const { expectValidationError } = require('../../../../lib/test/expect/expectError');
10
+ const getBlsAdapterMock = require('../../../../lib/test/mocks/getBlsAdapterMock');
11
+
12
+ const { default: loadWasmDpp } = require('../../../../dist');
12
13
 
13
14
  describe('validatePublicKeySignaturesFactory', () => {
14
15
  let identityCreateTransition;
15
16
  let rawIdentityCreateTransition;
16
17
  let validatePublicKeySignatures;
17
18
 
18
- beforeEach(async function beforeEach() {
19
- identityCreateTransition = getIdentityCreateTransitionFixture();
19
+ let IdentityCreateTransition;
20
+ let IdentityPublicKey;
21
+ let InvalidIdentityKeySignatureError;
22
+ let ValidationResult;
23
+ let PublicKeysSignaturesValidator;
24
+ let blsAdapter;
25
+
26
+ before(async () => {
27
+ ({
28
+ IdentityCreateTransition,
29
+ IdentityPublicKey,
30
+ InvalidIdentityKeySignatureError,
31
+ PublicKeysSignaturesValidator,
32
+ ValidationResult,
33
+ } = await loadWasmDpp());
34
+ });
20
35
 
21
- const privateKey1 = new PrivateKey();
36
+ beforeEach(async () => {
37
+ identityCreateTransition = new IdentityCreateTransition(
38
+ getIdentityCreateTransitionFixture().toObject(),
39
+ );
40
+
41
+ const privateKey1 = new PrivateKey('17e0b1703e226204c557bce68b0871683ea409ae90c7a733b72a33f7c129c959');
22
42
  const publicKey1 = privateKey1.toPublicKey();
23
43
 
24
44
  const identityPublicKey1 = new IdentityPublicKey({
@@ -30,7 +50,7 @@ describe('validatePublicKeySignaturesFactory', () => {
30
50
  readOnly: false,
31
51
  });
32
52
 
33
- const privateKey2 = new PrivateKey();
53
+ const privateKey2 = new PrivateKey('afc20afac882f676af5a268a2eca9c763996c36dbeb3660648df2108006820c7');
34
54
  const publicKey2 = privateKey2.toPublicKey();
35
55
 
36
56
  const identityPublicKey2 = new IdentityPublicKey({
@@ -42,11 +62,13 @@ describe('validatePublicKeySignaturesFactory', () => {
42
62
  readOnly: false,
43
63
  });
44
64
 
45
- const { PrivateKey: BlsPrivateKey } = await BlsSignatures.getInstance();
65
+ const blsModule = await BlsSignatures.getInstance();
66
+ blsAdapter = await getBlsAdapterMock();
67
+
68
+ const { PrivateKey: BlsPrivateKey } = blsModule;
46
69
 
47
70
  const randomBytes = new Uint8Array(crypto.randomBytes(256));
48
71
  const privateKey3 = BlsPrivateKey.fromBytes(randomBytes, true);
49
- // blsPrivateKeyHex = Buffer.from(blsPrivateKey.serialize()).toString('hex');
50
72
  const publicKey3 = privateKey3.getPublicKey();
51
73
 
52
74
  const identityPublicKey3 = new IdentityPublicKey({
@@ -65,14 +87,14 @@ describe('validatePublicKeySignaturesFactory', () => {
65
87
  ]);
66
88
 
67
89
  await identityCreateTransition.signByPrivateKey(
68
- privateKey1,
90
+ privateKey1.toBuffer(),
69
91
  IdentityPublicKey.TYPES.ECDSA_SECP256K1,
70
92
  );
71
93
 
72
94
  const signature1 = identityCreateTransition.getSignature();
73
95
 
74
96
  await identityCreateTransition.signByPrivateKey(
75
- privateKey2,
97
+ privateKey2.toBuffer(),
76
98
  IdentityPublicKey.TYPES.ECDSA_HASH160,
77
99
  );
78
100
 
@@ -81,6 +103,7 @@ describe('validatePublicKeySignaturesFactory', () => {
81
103
  await identityCreateTransition.signByPrivateKey(
82
104
  Buffer.from(privateKey3.serialize()),
83
105
  IdentityPublicKey.TYPES.BLS12_381,
106
+ blsAdapter,
84
107
  );
85
108
 
86
109
  const signature3 = identityCreateTransition.getSignature();
@@ -89,11 +112,18 @@ describe('validatePublicKeySignaturesFactory', () => {
89
112
  identityPublicKey2.setSignature(signature2);
90
113
  identityPublicKey3.setSignature(signature3);
91
114
 
92
- rawIdentityCreateTransition = identityCreateTransition.toObject();
115
+ identityCreateTransition.setPublicKeys([
116
+ identityPublicKey1,
117
+ identityPublicKey2,
118
+ identityPublicKey3,
119
+ ]);
93
120
 
94
- const createStateTransitionMock = this.sinonSandbox.stub().resolves(identityCreateTransition);
121
+ rawIdentityCreateTransition = identityCreateTransition.toObject();
95
122
 
96
- validatePublicKeySignatures = validatePublicKeySignaturesFactory(createStateTransitionMock);
123
+ const validator = new PublicKeysSignaturesValidator(blsAdapter);
124
+ validatePublicKeySignatures = (
125
+ stateTransition, keys,
126
+ ) => validator.validate(stateTransition, keys);
97
127
  });
98
128
 
99
129
  it('should return InvalidIdentityKeySignatureError if signature is not valid', async () => {
@@ -104,10 +134,9 @@ describe('validatePublicKeySignaturesFactory', () => {
104
134
  const result = await validatePublicKeySignatures(
105
135
  rawIdentityCreateTransition,
106
136
  rawIdentityCreateTransition.publicKeys,
107
- identityCreateTransition.getExecutionContext(),
108
137
  );
109
138
 
110
- expectValidationError(result, InvalidIdentityKeySignatureError);
139
+ await expectValidationError(result, InvalidIdentityKeySignatureError);
111
140
 
112
141
  const error = result.getFirstError();
113
142
 
@@ -118,7 +147,7 @@ describe('validatePublicKeySignaturesFactory', () => {
118
147
  const result = await validatePublicKeySignatures(
119
148
  rawIdentityCreateTransition,
120
149
  rawIdentityCreateTransition.publicKeys,
121
- identityCreateTransition.getExecutionContext(),
150
+ blsAdapter,
122
151
  );
123
152
 
124
153
  expect(result).to.be.instanceOf(ValidationResult);
@@ -198,7 +198,7 @@ describe('DataContract', () => {
198
198
  dataContract.getDocumentSchema('undefinedObject');
199
199
  expect.fail('Error was not thrown');
200
200
  } catch (e) {
201
- expect(e.getDocType()).to.equal('undefinedObject');
201
+ expect(e.getType()).to.equal('undefinedObject');
202
202
  }
203
203
  });
204
204
 
@@ -215,7 +215,7 @@ describe('DataContract', () => {
215
215
  dataContract.getDocumentSchemaRef('undefinedObject');
216
216
  expect.fail('Error was not thrown');
217
217
  } catch (e) {
218
- expect(e.getDocType()).to.equal('undefinedObject');
218
+ expect(e.getType()).to.equal('undefinedObject');
219
219
  }
220
220
  });
221
221
 
@@ -326,7 +326,7 @@ describe('DataContract', () => {
326
326
  dataContract.getBinaryProperties('unknown');
327
327
  expect.fail('Error was not thrown');
328
328
  } catch (e) {
329
- expect(e.getDocType()).to.equal('unknown');
329
+ expect(e.getType()).to.equal('unknown');
330
330
  }
331
331
  });
332
332
  });
@@ -16,7 +16,6 @@ describe('createDataContract', () => {
16
16
  rawDataContract = {
17
17
  $id: generateRandomIdentifier().toBuffer(),
18
18
  ownerId: generateRandomIdentifier().toBuffer(),
19
- contractId: generateRandomIdentifier().toBuffer(),
20
19
  protocolVersion: 4,
21
20
  version: 20,
22
21
  $schema: 'http://test.com/schema',
@@ -1,3 +1,4 @@
1
+ const varint = require('varint');
1
2
  const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
2
3
  const stateTransitionTypes = require('@dashevo/dpp/lib/stateTransition/stateTransitionTypes');
3
4
 
@@ -64,11 +65,10 @@ describe('DataContractCreateTransition', () => {
64
65
 
65
66
  describe('#toBuffer', () => {
66
67
  it('should return serialized State Transition', () => {
67
- const protocolVersionUInt32 = Buffer.alloc(4);
68
- protocolVersionUInt32.writeUInt32LE(stateTransition.getProtocolVersion(), 0);
68
+ const protocolVersionBytes = Buffer.from(varint.encode(stateTransition.getProtocolVersion()));
69
69
 
70
70
  const result = stateTransition.toBuffer();
71
- expect(result.compare(protocolVersionUInt32, 0, 4, 0, 4)).equals(0);
71
+ expect(result.compare(protocolVersionBytes, 0, 1, 0, 1)).equals(0);
72
72
  });
73
73
  });
74
74
 
@@ -1,3 +1,4 @@
1
+ const varint = require('varint');
1
2
  const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
2
3
  const stateTransitionTypes = require('@dashevo/dpp/lib/stateTransition/stateTransitionTypes');
3
4
  const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
@@ -62,11 +63,10 @@ describe('DataContractUpdateTransition', () => {
62
63
 
63
64
  describe('#toBuffer', () => {
64
65
  it('should return serialized State Transition that starts with protocol version', () => {
65
- const protocolVersionUInt32 = Buffer.alloc(4);
66
- protocolVersionUInt32.writeUInt32LE(stateTransition.getProtocolVersion(), 0);
66
+ const protocolVersionBytes = Buffer.from(varint.encode(stateTransition.getProtocolVersion()));
67
67
 
68
68
  const result = stateTransition.toBuffer();
69
- expect(result.compare(protocolVersionUInt32, 0, 4, 0, 4)).equals(0);
69
+ expect(result.compare(protocolVersionBytes, 0, 1, 0, 1)).equals(0);
70
70
  });
71
71
  });
72
72
 
@@ -1,3 +1,4 @@
1
+ const varint = require('varint');
1
2
  const decodeProtocolEntityFactory = require('@dashevo/dpp/lib/decodeProtocolEntityFactory');
2
3
  const ProtocolVersionParsingError = require('@dashevo/dpp/lib/errors/consensus/basic/decode/ProtocolVersionParsingError');
3
4
  const SerializedObjectParsingError = require('@dashevo/dpp/lib/errors/consensus/basic/decode/SerializedObjectParsingError');
@@ -16,8 +17,7 @@ describe('decodeProtocolEntityFactory', () => {
16
17
  beforeEach(() => {
17
18
  parsedProtocolVersion = 0;
18
19
 
19
- protocolVersionBuffer = Buffer.alloc(4);
20
- protocolVersionBuffer.writeUInt32LE(parsedProtocolVersion, 0);
20
+ protocolVersionBuffer = Buffer.from(varint.encode(parsedProtocolVersion));
21
21
 
22
22
  rawEntity = { test: 'successful' };
23
23
  entityBuffer = encode(rawEntity);