@dashevo/wasm-dpp 0.24.0-dev.11 → 0.24.0-dev.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) 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/lib/dpp.d.ts +9 -0
  6. package/dist/lib/errors/AbstractConsensusError.d.ts +10 -0
  7. package/dist/lib/errors/DPPError.d.ts +5 -0
  8. package/dist/lib/errors/patchConsensusErrors.d.ts +1 -0
  9. package/dist/lib/{patchIdentifier.d.ts → identifier/patchIdentifier.d.ts} +1 -1
  10. package/dist/{index.d.ts → lib/index.d.ts} +1 -1
  11. package/dist/lib/utils/extend.d.ts +1 -0
  12. package/dist/wasm/wasm_dpp.d.ts +1595 -518
  13. package/karma.conf.js +5 -0
  14. package/lib/dpp.ts +24 -0
  15. package/lib/errors/AbstractConsensusError.ts +13 -0
  16. package/lib/errors/DPPError.ts +15 -0
  17. package/lib/errors/patchConsensusErrors.ts +175 -0
  18. package/lib/{patchIdentifier.ts → identifier/patchIdentifier.ts} +6 -5
  19. package/{index.ts → lib/index.ts} +5 -4
  20. package/lib/test/bootstrap.js +5 -0
  21. package/lib/test/expect/expectError.js +4 -2
  22. package/lib/test/mocks/getBlsAdapterMock.js +36 -0
  23. package/lib/test/utils/newDocumentsContainer.js +36 -0
  24. package/lib/utils/extend.ts +6 -0
  25. package/package.json +9 -6
  26. package/src/bls_adapter.rs +16 -1
  27. package/src/data_contract/data_contract.rs +35 -7
  28. package/src/data_contract/errors/invalid_data_contract.rs +21 -0
  29. package/src/data_contract/errors/invalid_document_type.rs +1 -1
  30. package/src/data_contract/index.rs +56 -1
  31. package/src/data_contract/mod.rs +1 -0
  32. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +6 -8
  33. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +4 -4
  34. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +44 -0
  35. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +145 -0
  36. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +49 -0
  37. package/src/data_contract/state_transition/mod.rs +2 -0
  38. package/src/data_contract_factory/data_contract_factory.rs +25 -12
  39. package/src/document/errors/invalid_document_error.rs +10 -9
  40. package/src/document/errors/invalid_initial_revision_error.rs +1 -1
  41. package/src/document/errors/mismatch_owners_ids_error.rs +14 -4
  42. package/src/document/errors/mod.rs +17 -13
  43. package/src/document/errors/no_documents_supplied_error.rs +4 -4
  44. package/src/document/factory.rs +192 -0
  45. package/src/document/mod.rs +222 -30
  46. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +47 -1
  47. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +25 -1
  48. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +65 -0
  49. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +123 -3
  50. package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
  51. package/src/document/validator.rs +30 -0
  52. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +5 -5
  53. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +4 -4
  54. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +36 -0
  55. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +20 -0
  56. package/src/errors/consensus/basic/document/mod.rs +4 -0
  57. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +2 -2
  58. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +2 -2
  59. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
  60. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
  61. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
  62. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +2 -2
  63. package/src/errors/consensus/basic/json_schema_error.rs +1 -1
  64. package/src/errors/consensus_error.rs +15 -8
  65. package/src/errors/dpp_error.rs +17 -0
  66. package/src/errors/from.rs +6 -1
  67. package/src/errors/js_conversion.rs +19 -4
  68. package/src/errors/mod.rs +3 -0
  69. package/src/errors/protocol_error.rs +15 -0
  70. package/src/{identifier.rs → identifier/mod.rs} +48 -3
  71. package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
  72. package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
  73. package/src/identity/errors/mod.rs +7 -0
  74. package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
  75. package/src/{identity_facade.rs → identity/identity_facade.rs} +3 -5
  76. package/src/{identity_public_key → identity/identity_public_key}/key_type.rs +0 -0
  77. package/src/{identity_public_key → identity/identity_public_key}/mod.rs +41 -10
  78. package/src/{identity_public_key → identity/identity_public_key}/purpose.rs +0 -0
  79. package/src/{identity_public_key → identity/identity_public_key}/security_level.rs +0 -0
  80. package/src/{identity.rs → identity/mod.rs} +20 -12
  81. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
  82. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
  83. package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
  84. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
  85. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
  86. package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
  87. package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
  88. package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
  89. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +335 -0
  90. package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
  91. package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
  92. package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
  93. package/src/identity/state_transition/identity_create_transition/to_object.rs +46 -0
  94. package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
  95. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +280 -0
  96. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
  97. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
  98. package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
  99. package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
  100. package/src/identity/state_transition/mod.rs +9 -0
  101. package/src/identity/state_transition/validate_public_key_signatures.rs +59 -0
  102. package/src/identity/validation/mod.rs +3 -0
  103. package/src/identity/validation/public_keys_validator.rs +76 -0
  104. package/src/identity_public_key/public_keys_validator.rs +1 -1
  105. package/src/lib.rs +3 -6
  106. package/src/lodash.rs +7 -0
  107. package/src/state_repository.rs +188 -36
  108. package/src/state_transition/mod.rs +12 -0
  109. package/src/utils.rs +102 -7
  110. package/src/validation/json_schema_validator.rs +41 -0
  111. package/src/validation/mod.rs +5 -0
  112. package/src/{validation_result.rs → validation/validation_result.rs} +23 -5
  113. package/src/version/mod.rs +2 -0
  114. package/src/version/protocol_version.rs +26 -0
  115. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +579 -502
  116. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +175 -165
  117. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +83 -114
  118. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +1 -1
  119. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +82 -91
  120. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +75 -31
  121. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -148
  122. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +63 -75
  123. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +48 -19
  124. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +79 -114
  125. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -11
  126. package/test/integration/stateTransition/StateTransitionFacade.spec.js +1 -1
  127. package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +135 -0
  128. package/test/unit/dataContract/DataContract.spec.js +5 -9
  129. package/test/unit/dataContract/DataContractFactory.spec.js +13 -6
  130. package/test/unit/dataContract/createDataContract.spec.js +0 -1
  131. package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +11 -3
  132. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
  133. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +20 -16
  134. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +24 -60
  135. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +27 -23
  136. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +29 -12
  137. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +66 -49
  138. package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +73 -0
  139. package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
  140. package/test/unit/document/Document.spec.js +147 -155
  141. package/test/unit/document/DocumentFactory.spec.js +325 -91
  142. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +142 -64
  143. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +1 -1
  144. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +1 -1
  145. package/test/unit/identity/Identity.spec.js +2 -2
  146. package/test/unit/identity/IdentityPublicKey.spec.js +25 -31
  147. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +69 -30
  148. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +32 -32
  149. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +56 -25
  150. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
  151. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +48 -46
  152. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
  153. package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
  154. package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
  155. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
  156. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
  157. package/tsconfig.json +1 -1
  158. package/wasm/package.json +5 -0
  159. package/wasm/wasm_dpp.d.ts +1595 -518
  160. package/wasm/wasm_dpp.js +5007 -2172
  161. package/wasm/wasm_dpp_bg.js +1 -1
  162. package/wasm/wasm_dpp_bg.wasm +0 -0
  163. package/wasm/wasm_dpp_bg.wasm.d.ts +566 -365
  164. package/webpack.config.js +10 -1
  165. package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +0 -32
  166. package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +0 -93
  167. package/test/unit/dataContract/validation/validateDataContractPatternsFactory.spec.js +0 -64
@@ -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);