@dashevo/wasm-dpp 0.24.0-dev.30 → 0.25.0-dev.1

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 (170) hide show
  1. package/Cargo.toml +2 -2
  2. package/dist/wasm/wasm_dpp.d.ts +722 -571
  3. package/dist/wasm/wasm_dpp.js +169 -106
  4. package/dist/wasm/wasm_dpp_bg.js +1 -1
  5. package/lib/wasm/wasm_dpp.d.ts +722 -571
  6. package/package.json +3 -3
  7. package/src/data_contract/data_contract.rs +1 -1
  8. package/src/data_contract/data_contract_facade.rs +2 -2
  9. package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +1 -1
  10. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +2 -12
  11. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +5 -3
  12. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +6 -2
  13. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +2 -14
  14. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +6 -4
  15. package/src/decode_protocol_entity.rs +19 -19
  16. package/src/document/extended_document.rs +4 -1
  17. package/src/document/fetch_and_validate_data_contract.rs +2 -2
  18. package/src/document/mod.rs +5 -3
  19. package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +9 -6
  20. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +1 -1
  21. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +1 -1
  22. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +1 -2
  23. package/src/document/state_transition/document_batch_transition/mod.rs +13 -17
  24. package/src/document/state_transition/document_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs +4 -4
  25. package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_batch_transitions_state.rs +3 -1
  26. package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +1 -1
  27. package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +3 -3
  28. package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +1 -1
  29. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +1 -1
  30. package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +1 -1
  31. package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +3 -3
  32. package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +3 -3
  33. package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +4 -4
  34. package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +1 -1
  35. package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +1 -1
  36. package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +1 -1
  37. package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +1 -1
  38. package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +1 -1
  39. package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +1 -1
  40. package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +1 -1
  41. package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +1 -1
  42. package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +1 -1
  43. package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +2 -2
  44. package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +1 -1
  45. package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +1 -1
  46. package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +1 -1
  47. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -1
  48. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -1
  49. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +2 -2
  50. package/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +1 -1
  51. package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +1 -1
  52. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +2 -2
  53. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +1 -1
  54. package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +1 -1
  55. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +1 -1
  56. package/src/errors/consensus/basic/document/missing_document_type_error.rs +1 -1
  57. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -1
  58. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -1
  59. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +1 -1
  60. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +1 -1
  61. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +1 -1
  62. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +1 -1
  63. package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +1 -1
  64. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +1 -1
  65. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +1 -1
  66. package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +1 -1
  67. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_proof_chain_lock_validation_error.rs +35 -0
  68. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +1 -1
  69. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +1 -1
  70. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +1 -1
  71. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +1 -1
  72. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +1 -1
  73. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +1 -1
  74. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -1
  75. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -1
  76. package/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +1 -1
  77. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +1 -1
  78. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +1 -1
  79. package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +1 -1
  80. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +1 -1
  81. package/src/errors/consensus/basic/identity/mod.rs +2 -0
  82. package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +2 -2
  83. package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -1
  84. package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +7 -3
  85. package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +1 -1
  86. package/src/errors/consensus/basic/json_schema_compilation_error.rs +1 -1
  87. package/src/errors/consensus/basic/json_schema_error.rs +1 -3
  88. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -1
  89. package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +2 -2
  90. package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +1 -1
  91. package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +1 -1
  92. package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +1 -1
  93. package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +1 -1
  94. package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +1 -1
  95. package/src/errors/consensus/consensus_error.rs +24 -4
  96. package/src/errors/consensus/deserialize.rs +1 -1
  97. package/src/errors/consensus/fee/balance_is_not_enough_error.rs +1 -1
  98. package/src/errors/consensus/signature/basic_bls_error.rs +38 -0
  99. package/src/errors/consensus/signature/basic_ecdsa_error.rs +38 -0
  100. package/src/errors/consensus/signature/mod.rs +6 -0
  101. package/src/errors/consensus/signature/signature_should_not_be_present_error.rs +38 -0
  102. package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +2 -2
  103. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +58 -1
  104. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +66 -1
  105. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +50 -1
  106. package/src/errors/consensus/state/document/document_already_present_error.rs +1 -1
  107. package/src/errors/consensus/state/document/document_not_found_error.rs +1 -1
  108. package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +1 -1
  109. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +2 -2
  110. package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +1 -1
  111. package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +1 -1
  112. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +1 -1
  113. package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +1 -1
  114. package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +1 -1
  115. package/src/errors/consensus/state/identity/identity_already_exists_error.rs +1 -1
  116. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +1 -1
  117. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +1 -1
  118. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +1 -1
  119. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +1 -1
  120. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +1 -1
  121. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +1 -1
  122. package/src/errors/consensus/state/identity/missing_identity_public_key_ids_error.rs +26 -0
  123. package/src/errors/consensus/state/identity/mod.rs +2 -0
  124. package/src/errors/consensus/value_error.rs +1 -1
  125. package/src/errors/from.rs +0 -1
  126. package/src/generate_temporary_ecdsa_private_key.rs +2 -6
  127. package/src/identity/factory_utils.rs +4 -4
  128. package/src/identity/identity_public_key/key_type.rs +2 -0
  129. package/src/identity/identity_public_key/purpose.rs +7 -0
  130. package/src/identity/mod.rs +1 -1
  131. package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +6 -2
  132. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +8 -18
  133. package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +3 -1
  134. package/src/identity/state_transition/identity_create_transition/to_object.rs +2 -2
  135. package/src/identity/state_transition/identity_public_key_transitions.rs +11 -11
  136. package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +6 -2
  137. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +1 -12
  138. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +3 -1
  139. package/src/identity/state_transition/identity_update_transition/apply_identity_update_transition.rs +3 -1
  140. package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +2 -2
  141. package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +5 -18
  142. package/src/identity/state_transition/identity_update_transition/identity_update_transition_state_validator.rs +3 -2
  143. package/src/identity/state_transition/identity_update_transition/to_object.rs +2 -2
  144. package/src/identity/state_transition/validate_public_key_signatures.rs +2 -2
  145. package/src/state_repository.rs +3 -2
  146. package/src/state_transition/fee/calculate_state_transition_fee.rs +8 -5
  147. package/src/state_transition/state_transition_facade.rs +16 -15
  148. package/src/state_transition/validation/state_transition_fee_validator.rs +3 -1
  149. package/src/state_transition/validation/validate_state_transition_identity_signature.rs +3 -1
  150. package/src/state_transition/validation/validate_state_transition_key_signature.rs +7 -1
  151. package/src/utils.rs +2 -4
  152. package/src/validation/validation_result.rs +12 -7
  153. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +0 -17
  154. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +10 -3
  155. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +4 -7
  156. package/test/integration/stateTransition/StateTransitionFacade.spec.js +20 -7
  157. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +0 -7
  158. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +4 -3
  159. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +1 -3
  160. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +3 -2
  161. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +5 -6
  162. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +20 -18
  163. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +1 -2
  164. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +7 -3
  165. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +1 -2
  166. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +5 -1
  167. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +3 -3
  168. package/test/unit/stateTransition/validation/validateStateTransitionBasicFactory.spec.js +10 -4
  169. package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +3 -1
  170. package/test/unit/stateTransition/validation/validateStateTransitionStateFactory.spec.js +7 -3
@@ -21,6 +21,7 @@ describe('StateTransitionFacade', () => {
21
21
  let dataContract;
22
22
  let identityPublicKey;
23
23
  let identity;
24
+ let executionContext;
24
25
 
25
26
  let DashPlatformProtocol;
26
27
  let DataContractFactory;
@@ -37,6 +38,7 @@ describe('StateTransitionFacade', () => {
37
38
  let InvalidStateTransitionSignatureError;
38
39
  let DataContractAlreadyPresentError;
39
40
  let BalanceIsNotEnoughError;
41
+ let StateTransitionExecutionContext;
40
42
 
41
43
  before(async () => {
42
44
  ({
@@ -55,6 +57,7 @@ describe('StateTransitionFacade', () => {
55
57
  InvalidStateTransitionSignatureError,
56
58
  DataContractAlreadyPresentError,
57
59
  BalanceIsNotEnoughError,
60
+ StateTransitionExecutionContext,
58
61
  } = await loadWasmDpp());
59
62
  });
60
63
 
@@ -64,6 +67,8 @@ describe('StateTransitionFacade', () => {
64
67
  const publicKey = privateKeyModel.toPublicKey().toBuffer();
65
68
  const publicKeyId = 1;
66
69
 
70
+ executionContext = new StateTransitionExecutionContext();
71
+
67
72
  identityPublicKey = new IdentityPublicKey({
68
73
  id: publicKeyId,
69
74
  type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
@@ -148,7 +153,7 @@ describe('StateTransitionFacade', () => {
148
153
  const rawStateTransition = dataContractCreateTransition.toObject();
149
154
  rawStateTransition.protocolVersion = 100;
150
155
 
151
- const result = await dpp.stateTransition.validate(rawStateTransition);
156
+ const result = await dpp.stateTransition.validate(rawStateTransition, executionContext);
152
157
 
153
158
  expect(result).to.be.an.instanceOf(ValidationResult);
154
159
  expect(result.isValid()).to.be.false();
@@ -161,7 +166,7 @@ describe('StateTransitionFacade', () => {
161
166
  const rawStateTransition = dataContractCreateTransition.toObject();
162
167
  rawStateTransition.signature = Buffer.alloc(65).fill(1);
163
168
 
164
- const result = await dpp.stateTransition.validate(rawStateTransition);
169
+ const result = await dpp.stateTransition.validate(rawStateTransition, executionContext);
165
170
 
166
171
  expect(result).to.be.an.instanceOf(ValidationResult);
167
172
  expect(result.isValid()).to.be.false();
@@ -173,7 +178,9 @@ describe('StateTransitionFacade', () => {
173
178
  it('should return invalid result if not enough balance to pay fee for State Transition', async () => {
174
179
  identity.setBalance(0);
175
180
  stateRepositoryMock.fetchIdentityBalance.resolves(0);
176
- const result = await dpp.stateTransition.validate(dataContractCreateTransition);
181
+ const result = await dpp.stateTransition.validate(
182
+ dataContractCreateTransition, executionContext,
183
+ );
177
184
 
178
185
  expect(result).to.be.an.instanceOf(ValidationResult);
179
186
  expect(result.isValid()).to.be.false();
@@ -185,7 +192,9 @@ describe('StateTransitionFacade', () => {
185
192
  it('should return invalid result if State Transition is invalid against state', async () => {
186
193
  stateRepositoryMock.fetchDataContract.resolves(dataContract);
187
194
 
188
- const result = await dpp.stateTransition.validate(dataContractCreateTransition);
195
+ const result = await dpp.stateTransition.validate(
196
+ dataContractCreateTransition, executionContext,
197
+ );
189
198
 
190
199
  expect(result).to.be.an.instanceOf(ValidationResult);
191
200
  expect(result.isValid()).to.be.false();
@@ -197,6 +206,7 @@ describe('StateTransitionFacade', () => {
197
206
  it('should validate DataContractCreateTransition', async () => {
198
207
  const result = await dpp.stateTransition.validate(
199
208
  dataContractCreateTransition,
209
+ executionContext,
200
210
  );
201
211
 
202
212
  expect(result).to.be.an.instanceOf(ValidationResult);
@@ -210,6 +220,7 @@ describe('StateTransitionFacade', () => {
210
220
  stateRepositoryMock.fetchDataContract.resolves(dataContract);
211
221
  const result = await dpp.stateTransition.validate(
212
222
  documentsBatchTransition,
223
+ executionContext,
213
224
  );
214
225
 
215
226
  expect(result).to.be.an.instanceOf(ValidationResult);
@@ -220,7 +231,7 @@ describe('StateTransitionFacade', () => {
220
231
  describe('validateBasic', () => {
221
232
  it('should validate State Transition', async () => {
222
233
  const result = await dpp.stateTransition.validateBasic(
223
- dataContractCreateTransition.toObject(),
234
+ dataContractCreateTransition.toObject(), executionContext,
224
235
  );
225
236
 
226
237
  expect(result).to.be.an.instanceOf(ValidationResult);
@@ -231,7 +242,7 @@ describe('StateTransitionFacade', () => {
231
242
  describe('validateSignature', () => {
232
243
  it('should validate identity signed State Transition', async () => {
233
244
  const result = await dpp.stateTransition.validateSignature(
234
- dataContractCreateTransition,
245
+ dataContractCreateTransition, executionContext,
235
246
  );
236
247
 
237
248
  expect(result).to.be.an.instanceOf(ValidationResult);
@@ -254,7 +265,7 @@ describe('StateTransitionFacade', () => {
254
265
  );
255
266
 
256
267
  const result = await dpp.stateTransition.validateSignature(
257
- identityCreateTransition,
268
+ identityCreateTransition, executionContext,
258
269
  );
259
270
 
260
271
  expect(result).to.be.an.instanceOf(ValidationResult);
@@ -266,6 +277,7 @@ describe('StateTransitionFacade', () => {
266
277
  it('should validate State Transition', async () => {
267
278
  const result = await dpp.stateTransition.validateFee(
268
279
  dataContractCreateTransition,
280
+ executionContext,
269
281
  );
270
282
 
271
283
  expect(result).to.be.an.instanceOf(ValidationResult);
@@ -277,6 +289,7 @@ describe('StateTransitionFacade', () => {
277
289
  it('should validate State Transition', async () => {
278
290
  const result = await dpp.stateTransition.validateState(
279
291
  dataContractCreateTransition,
292
+ executionContext,
280
293
  );
281
294
 
282
295
  expect(result).to.be.an.instanceOf(ValidationResult);
@@ -8,10 +8,8 @@ describe('applyDataContractCreateTransitionFactory', () => {
8
8
  let stateTransition;
9
9
  let dataContract;
10
10
  let factory;
11
- let executionContext;
12
11
  let DataContractCreateTransition;
13
12
  let ApplyDataContractCreateTransition;
14
- let StateTransitionExecutionContext;
15
13
 
16
14
  let dataContractStored;
17
15
 
@@ -19,7 +17,6 @@ describe('applyDataContractCreateTransitionFactory', () => {
19
17
  ({
20
18
  DataContractCreateTransition,
21
19
  ApplyDataContractCreateTransition,
22
- StateTransitionExecutionContext,
23
20
  } = await loadWasmDpp());
24
21
  });
25
22
 
@@ -32,10 +29,6 @@ describe('applyDataContractCreateTransitionFactory', () => {
32
29
  entropy: Buffer.alloc(32),
33
30
  });
34
31
 
35
- executionContext = new StateTransitionExecutionContext();
36
-
37
- stateTransition.setExecutionContext(executionContext);
38
-
39
32
  const stateRepositoryLike = {
40
33
  createDataContract: async () => {
41
34
  dataContractStored = true;
@@ -37,8 +37,6 @@ describe('validateDataContractCreateTransitionStateFactory', () => {
37
37
 
38
38
  executionContext = new StateTransitionExecutionContext();
39
39
 
40
- stateTransition.setExecutionContext(executionContext);
41
-
42
40
  dataContractFetched = false;
43
41
 
44
42
  const stateRepositoryLike = {
@@ -47,7 +45,9 @@ describe('validateDataContractCreateTransitionStateFactory', () => {
47
45
  },
48
46
  };
49
47
 
50
- factory = (t) => validateDataContractCreateTransitionState(stateRepositoryLike, t);
48
+ factory = (t) => validateDataContractCreateTransitionState(
49
+ stateRepositoryLike, t, executionContext,
50
+ );
51
51
  });
52
52
 
53
53
  it('should return invalid result if Data Contract is already exist', async () => {
@@ -63,6 +63,7 @@ describe('validateDataContractCreateTransitionStateFactory', () => {
63
63
  const result = await validateDataContractCreateTransitionState(
64
64
  stateRepositoryLikeWithContract,
65
65
  stateTransition,
66
+ executionContext,
66
67
  );
67
68
  const [error] = result.getErrors();
68
69
 
@@ -31,8 +31,6 @@ describe('applyDataContractUpdateTransitionFactory', () => {
31
31
 
32
32
  executionContext = new StateTransitionExecutionContext();
33
33
 
34
- stateTransition.setExecutionContext(executionContext);
35
-
36
34
  const stateRepositoryLike = {
37
35
  updateDataContract: async () => {
38
36
  dataContractStored = true;
@@ -45,7 +43,7 @@ describe('applyDataContractUpdateTransitionFactory', () => {
45
43
  });
46
44
 
47
45
  it('should store a data contract from state transition in the repository', async () => {
48
- await factory.applyDataContractUpdateTransition(stateTransition);
46
+ await factory.applyDataContractUpdateTransition(stateTransition, executionContext);
49
47
  expect(dataContractStored).to.be.true();
50
48
  });
51
49
  });
@@ -44,8 +44,6 @@ describe('validateDataContractUpdateTransitionStateFactory', () => {
44
44
 
45
45
  executionContext = new StateTransitionExecutionContext();
46
46
 
47
- stateTransition.setExecutionContext(executionContext);
48
-
49
47
  const validator = new DataContractValidator();
50
48
  const dataContractFactory = new DataContractFactory(protocolVersion.latestVersion, validator);
51
49
  const wasmDataContract = await dataContractFactory.createFromBuffer(dataContract.toBuffer());
@@ -57,6 +55,7 @@ describe('validateDataContractUpdateTransitionStateFactory', () => {
57
55
  validateTransitionWithExistingContract = (t) => validateDataContractUpdateTransitionState(
58
56
  stateRepositoryLike,
59
57
  t,
58
+ executionContext,
60
59
  );
61
60
  });
62
61
 
@@ -68,6 +67,7 @@ describe('validateDataContractUpdateTransitionStateFactory', () => {
68
67
  const validateTransitionWithNoContract = (t) => validateDataContractUpdateTransitionState(
69
68
  stateRepositoryLikeNoDataContract,
70
69
  t,
70
+ executionContext,
71
71
  );
72
72
 
73
73
  const result = await validateTransitionWithNoContract(stateTransition);
@@ -114,6 +114,7 @@ describe('validateDataContractUpdateTransitionStateFactory', () => {
114
114
  const validateTransitionWithNoContract = (t) => validateDataContractUpdateTransitionState(
115
115
  stateRepositoryLikeNoDataContract,
116
116
  t,
117
+ executionContext,
117
118
  );
118
119
 
119
120
  executionContext.enableDryRun();
@@ -104,7 +104,6 @@ describe('applyDocumentsBatchTransitionFactory', () => {
104
104
  executionContext = new StateTransitionExecutionContext();
105
105
 
106
106
  stateTransitionJs.setExecutionContext(executionContextJs);
107
- stateTransition.setExecutionContext(executionContext);
108
107
 
109
108
  stateRepositoryMockJs = createStateRepositoryMock(this.sinonSandbox);
110
109
  stateRepositoryMockJs.fetchDataContract.resolves(dataContractJs);
@@ -163,7 +162,7 @@ describe('applyDocumentsBatchTransitionFactory', () => {
163
162
  });
164
163
 
165
164
  it('should call `store`, `replace` and `remove` functions for specific type of transitions - Rust', async () => {
166
- await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition);
165
+ await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition, executionContext);
167
166
  expect(stateRepositoryMock.createDocument).to.have.been.calledOnce();
168
167
 
169
168
  const [fetchContractId, fetchDocumentType] = stateRepositoryMock
@@ -203,7 +202,7 @@ describe('applyDocumentsBatchTransitionFactory', () => {
203
202
  const replaceDocumentTransition = documentTransitionsJs[1];
204
203
 
205
204
  try {
206
- await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition);
205
+ await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition, executionContext);
207
206
  expect.fail('Error was not thrown');
208
207
  } catch (e) {
209
208
  expect(e).to.be.an.instanceOf(DocumentNotProvidedError);
@@ -227,11 +226,11 @@ describe('applyDocumentsBatchTransitionFactory', () => {
227
226
  transitions: documentTransitionsJs.map((t) => t.toObject()),
228
227
  }, [dataContract]);
229
228
 
230
- stateTransition.getExecutionContext().enableDryRun();
229
+ executionContext.enableDryRun();
231
230
 
232
- await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition);
231
+ await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition, executionContext);
233
232
 
234
- stateTransition.getExecutionContext().disableDryRun();
233
+ executionContext.disableDryRun();
235
234
 
236
235
  const [documentTransition] = stateTransition.getTransitions();
237
236
 
@@ -92,7 +92,6 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
92
92
  executionContext = new StateTransitionExecutionContext();
93
93
 
94
94
  stateTransitionJs.setExecutionContext(executionContextJs);
95
- stateTransition.setExecutionContext(executionContext);
96
95
 
97
96
  stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
98
97
  stateRepositoryMockJs = createStateRepositoryMock(this.sinonSandbox);
@@ -124,7 +123,9 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
124
123
  stateRepositoryMock.fetchDataContract.resolves(null);
125
124
 
126
125
  try {
127
- await validateDocumentsBatchTransitionState(stateRepositoryMock, stateTransition);
126
+ await validateDocumentsBatchTransitionState(
127
+ stateRepositoryMock, stateTransition, executionContext,
128
+ );
128
129
 
129
130
  expect.fail('should throw DataContractNotPresentError');
130
131
  } catch (e) {
@@ -142,7 +143,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
142
143
  stateRepositoryMock.fetchDocuments.resolves([documents[0].getDocument()]);
143
144
 
144
145
  const result = await validateDocumentsBatchTransitionState(
145
- stateRepositoryMock, stateTransition,
146
+ stateRepositoryMock, stateTransition, executionContext,
146
147
  );
147
148
 
148
149
  expect(result.isValid()).is.not.true();
@@ -170,7 +171,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
170
171
  }, [dataContract]);
171
172
 
172
173
  const result = await validateDocumentsBatchTransitionState(
173
- stateRepositoryMock, stateTransition,
174
+ stateRepositoryMock, stateTransition, executionContext,
174
175
  );
175
176
  expect(result).is.instanceOf(ValidationResult);
176
177
 
@@ -200,7 +201,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
200
201
  }, [dataContract]);
201
202
 
202
203
  const result = await validateDocumentsBatchTransitionState(
203
- stateRepositoryMock, stateTransition,
204
+ stateRepositoryMock, stateTransition, executionContext,
204
205
  );
205
206
 
206
207
  expect(result).is.instanceOf(ValidationResult);
@@ -237,7 +238,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
237
238
  stateRepositoryMock.fetchDocuments.resolves([documents[0].getDocument()]);
238
239
 
239
240
  const result = await validateDocumentsBatchTransitionState(
240
- stateRepositoryMock, stateTransition,
241
+ stateRepositoryMock, stateTransition, executionContext,
241
242
  );
242
243
 
243
244
  expect(result).is.instanceOf(ValidationResult);
@@ -280,6 +281,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
280
281
  const result = await validateDocumentsBatchTransitionState(
281
282
  stateRepositoryMock,
282
283
  stateTransition,
284
+ executionContext,
283
285
  );
284
286
 
285
287
  expect(result).is.instanceOf(ValidationResult);
@@ -357,7 +359,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
357
359
  stateTransition.setTransitions(transitions);
358
360
 
359
361
  const result = await validateDocumentsBatchTransitionState(
360
- stateRepositoryMock, stateTransition,
362
+ stateRepositoryMock, stateTransition, executionContext,
361
363
  );
362
364
 
363
365
  expect(result).is.instanceOf(ValidationResult);
@@ -387,7 +389,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
387
389
  stateTransition.setTransitions(transitions);
388
390
 
389
391
  const result = await validateDocumentsBatchTransitionState(
390
- stateRepositoryMock, stateTransition,
392
+ stateRepositoryMock, stateTransition, executionContext,
391
393
  );
392
394
 
393
395
  expect(result).is.instanceOf(ValidationResult);
@@ -425,7 +427,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
425
427
  stateTransition.setTransitions(transitions);
426
428
 
427
429
  const result = await validateDocumentsBatchTransitionState(
428
- stateRepositoryMock, stateTransition,
430
+ stateRepositoryMock, stateTransition, executionContext,
429
431
  );
430
432
 
431
433
  expect(result).is.instanceOf(ValidationResult);
@@ -471,10 +473,10 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
471
473
  t.setCreatedAt(undefined);
472
474
  });
473
475
  stateTransition.setTransitions(transitions);
474
- stateTransition.getExecutionContext().enableDryRun();
476
+ executionContext.enableDryRun();
475
477
 
476
478
  const result = await validateDocumentsBatchTransitionState(
477
- stateRepositoryMock, stateTransition,
479
+ stateRepositoryMock, stateTransition, executionContext,
478
480
  );
479
481
 
480
482
  expect(result).to.be.an.instanceOf(ValidationResult);
@@ -501,10 +503,10 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
501
503
  // eslint-disable-next-line no-param-reassign
502
504
  t.setUpdatedAt(new Date());
503
505
  });
504
- stateTransition.getExecutionContext().enableDryRun();
506
+ executionContext.enableDryRun();
505
507
 
506
508
  const result = await validateDocumentsBatchTransitionState(
507
- stateRepositoryMock, stateTransition,
509
+ stateRepositoryMock, stateTransition, executionContext,
508
510
  );
509
511
 
510
512
  expect(result).to.be.an.instanceOf(ValidationResult);
@@ -540,7 +542,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
540
542
  stateTransition.setTransitions(transitions);
541
543
 
542
544
  const result = await validateDocumentsBatchTransitionState(
543
- stateRepositoryMock, stateTransition,
545
+ stateRepositoryMock, stateTransition, executionContext,
544
546
  );
545
547
 
546
548
  expect(result).is.instanceOf(ValidationResult);
@@ -585,10 +587,10 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
585
587
  t.setUpdatedAt(new Date(createdAtMinus6Mins));
586
588
  });
587
589
  stateTransition.setTransitions(transitions);
588
- stateTransition.getExecutionContext().enableDryRun();
590
+ executionContext.enableDryRun();
589
591
 
590
592
  const result = await validateDocumentsBatchTransitionState(
591
- stateRepositoryMock, stateTransition,
593
+ stateRepositoryMock, stateTransition, executionContext,
592
594
  );
593
595
 
594
596
  expect(result).to.be.an.instanceOf(ValidationResult);
@@ -621,7 +623,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
621
623
  }, [dataContract]);
622
624
 
623
625
  const result = await validateDocumentsBatchTransitionState(
624
- stateRepositoryMock, stateTransition,
626
+ stateRepositoryMock, stateTransition, executionContext,
625
627
  );
626
628
 
627
629
  expect(result).to.be.an.instanceOf(ValidationResult);
@@ -658,7 +660,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
658
660
  }, [dataContract]);
659
661
 
660
662
  const result = await validateDocumentsBatchTransitionState(
661
- stateRepositoryMock, stateTransition,
663
+ stateRepositoryMock, stateTransition, executionContext,
662
664
  );
663
665
 
664
666
  expect(result).to.be.an.instanceOf(ValidationResult);
@@ -42,13 +42,12 @@ describe('applyIdentityCreateTransitionFactory', () => {
42
42
 
43
43
  executionContext = new StateTransitionExecutionContext();
44
44
 
45
- stateTransition.setExecutionContext(executionContext);
46
-
47
45
  output = stateTransition.getAssetLockProof().getOutput();
48
46
 
49
47
  applyIdentityCreateTransition = (st) => applyIdentityCreateTransitionDPP(
50
48
  stateRepositoryMock,
51
49
  st,
50
+ executionContext,
52
51
  );
53
52
  });
54
53
 
@@ -9,11 +9,13 @@ describe('validateIdentityCreateTransitionStateFactory', () => {
9
9
  let validateIdentityCreateTransitionState;
10
10
  let stateTransition;
11
11
  let stateRepositoryMock;
12
+ let executionContext;
12
13
 
13
14
  let IdentityCreateTransition;
14
15
  let IdentityPublicKey;
15
16
  let IdentityAlreadyExistsError;
16
17
  let IdentityCreateTransitionStateValidator;
18
+ let StateTransitionExecutionContext;
17
19
 
18
20
  before(async () => {
19
21
  ({
@@ -21,15 +23,17 @@ describe('validateIdentityCreateTransitionStateFactory', () => {
21
23
  IdentityAlreadyExistsError,
22
24
  IdentityPublicKey,
23
25
  IdentityCreateTransitionStateValidator,
26
+ StateTransitionExecutionContext,
24
27
  } = await loadWasmDpp());
25
28
  });
26
29
 
27
30
  beforeEach(async function () {
31
+ executionContext = new StateTransitionExecutionContext();
28
32
  const privateKey = Buffer.from('af432c476f65211f45f48f1d42c9c0b497e56696aa1736b40544ef1a496af837', 'hex');
29
33
  stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
30
34
 
31
35
  const validator = new IdentityCreateTransitionStateValidator(stateRepositoryMock);
32
- validateIdentityCreateTransitionState = (st) => validator.validate(st);
36
+ validateIdentityCreateTransitionState = (st) => validator.validate(st, executionContext);
33
37
 
34
38
  stateTransition = new IdentityCreateTransition(
35
39
  getIdentityCreateTransitionFixture().toObject(),
@@ -69,11 +73,11 @@ describe('validateIdentityCreateTransitionStateFactory', () => {
69
73
  it('should return valid result on dry run', async () => {
70
74
  stateRepositoryMock.fetchIdentityBalance.resolves(1);
71
75
 
72
- stateTransition.getExecutionContext().enableDryRun();
76
+ executionContext.enableDryRun();
73
77
 
74
78
  const result = await validateIdentityCreateTransitionState(stateTransition);
75
79
 
76
- stateTransition.getExecutionContext().disableDryRun();
80
+ executionContext.disableDryRun();
77
81
 
78
82
  expect(result.isValid()).to.be.true();
79
83
  });
@@ -45,11 +45,10 @@ describe('applyIdentityTopUpTransitionFactory', () => {
45
45
 
46
46
  executionContext = new StateTransitionExecutionContext();
47
47
 
48
- stateTransition.setExecutionContext(executionContext);
49
-
50
48
  applyIdentityTopUpTransition = (st) => applyIdentityTopUpTransitionDPP(
51
49
  stateRepositoryMock,
52
50
  st,
51
+ executionContext,
53
52
  );
54
53
  });
55
54
 
@@ -7,14 +7,17 @@ describe('validateIdentityTopUpTransitionStateFactory', () => {
7
7
  let validateIdentityTopUpTransitionState;
8
8
  let stateTransition;
9
9
  let stateRepositoryMock;
10
+ let executionContext;
10
11
 
11
12
  let IdentityTopUpTransition;
12
13
  let IdentityTopUpTransitionStateValidator;
14
+ let StateTransitionExecutionContext;
13
15
 
14
16
  before(async () => {
15
17
  ({
16
18
  IdentityTopUpTransition,
17
19
  IdentityTopUpTransitionStateValidator,
20
+ StateTransitionExecutionContext,
18
21
  } = await loadWasmDpp());
19
22
  });
20
23
 
@@ -27,8 +30,9 @@ describe('validateIdentityTopUpTransitionStateFactory', () => {
27
30
 
28
31
  const validator = new IdentityTopUpTransitionStateValidator(stateRepositoryMock);
29
32
 
33
+ executionContext = new StateTransitionExecutionContext();
30
34
  validateIdentityTopUpTransitionState = (st) => validator.validate(
31
- st,
35
+ st, executionContext,
32
36
  );
33
37
  });
34
38
 
@@ -25,7 +25,6 @@ describe('applyIdentityUpdateTransition', () => {
25
25
  stateTransition.setRevision(stateTransition.getRevision() + 1);
26
26
 
27
27
  executionContext = new StateTransitionExecutionContext();
28
- stateTransition.setExecutionContext(executionContext);
29
28
 
30
29
  stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
31
30
  stateRepositoryMock.updateIdentityRevision.resolves();
@@ -35,6 +34,7 @@ describe('applyIdentityUpdateTransition', () => {
35
34
  applyIdentityUpdateTransition = (st) => applyIdentityUpdateTransitionDPP(
36
35
  stateRepositoryMock,
37
36
  st,
37
+ executionContext,
38
38
  );
39
39
  });
40
40
 
@@ -69,11 +69,11 @@ describe('applyIdentityUpdateTransition', () => {
69
69
  it('should add and disable public keys on dry run', async function () {
70
70
  const { match } = this.sinonSandbox;
71
71
 
72
- stateTransition.getExecutionContext().enableDryRun();
72
+ executionContext.enableDryRun();
73
73
 
74
74
  await applyIdentityUpdateTransition(stateTransition);
75
75
 
76
- stateTransition.getExecutionContext().disableDryRun();
76
+ executionContext.disableDryRun();
77
77
 
78
78
  expect(stateRepositoryMock.updateIdentityRevision).to.be.calledOnceWithExactly(
79
79
  match((id) => id.toBuffer().equals(stateTransition.getOwnerId().toBuffer())),
@@ -13,6 +13,7 @@ let {
13
13
  StateTransitionMaxSizeExceededError,
14
14
  JsonSchemaError,
15
15
  ValidationResult,
16
+ StateTransitionExecutionContext,
16
17
  } = require('../../../..');
17
18
 
18
19
  describe('validateStateTransitionBasicFactory', () => {
@@ -20,6 +21,7 @@ describe('validateStateTransitionBasicFactory', () => {
20
21
  let dataContract;
21
22
  let stateTransition;
22
23
  let dpp;
24
+ let executionContext;
23
25
 
24
26
  beforeEach(async function beforeEach() {
25
27
  ({
@@ -27,6 +29,7 @@ describe('validateStateTransitionBasicFactory', () => {
27
29
  MissingStateTransitionTypeError,
28
30
  InvalidStateTransitionTypeError,
29
31
  StateTransitionMaxSizeExceededError,
32
+ StateTransitionExecutionContext,
30
33
  JsonSchemaError,
31
34
  ValidationResult,
32
35
  } = await loadWasmDpp());
@@ -45,12 +48,14 @@ describe('validateStateTransitionBasicFactory', () => {
45
48
  await stateTransition.sign(identityPublicKey, privateKey, getBlsMock());
46
49
 
47
50
  rawStateTransition = stateTransition.toObject();
51
+
52
+ executionContext = new StateTransitionExecutionContext();
48
53
  });
49
54
 
50
55
  it('should return invalid result if ST type is missing', async () => {
51
56
  delete rawStateTransition.type;
52
57
 
53
- const result = await dpp.stateTransition.validateBasic(rawStateTransition);
58
+ const result = await dpp.stateTransition.validateBasic(rawStateTransition, executionContext);
54
59
 
55
60
  await expectValidationError(result);
56
61
 
@@ -62,7 +67,7 @@ describe('validateStateTransitionBasicFactory', () => {
62
67
  it('should return invalid result if ST type is not valid', async () => {
63
68
  rawStateTransition.type = 66;
64
69
 
65
- const result = await dpp.stateTransition.validateBasic(rawStateTransition);
70
+ const result = await dpp.stateTransition.validateBasic(rawStateTransition, executionContext);
66
71
 
67
72
  await expectValidationError(result);
68
73
 
@@ -73,7 +78,7 @@ describe('validateStateTransitionBasicFactory', () => {
73
78
 
74
79
  it('should return invalid result if ST is invalid against validation function', async () => {
75
80
  delete rawStateTransition.signaturePublicKeyId;
76
- const result = await dpp.stateTransition.validateBasic(rawStateTransition);
81
+ const result = await dpp.stateTransition.validateBasic(rawStateTransition, executionContext);
77
82
 
78
83
  await expectValidationError(result);
79
84
 
@@ -95,6 +100,7 @@ describe('validateStateTransitionBasicFactory', () => {
95
100
 
96
101
  const result = await dpp.stateTransition.validateBasic(
97
102
  rawStateTransition,
103
+ executionContext,
98
104
  );
99
105
 
100
106
  await expectValidationError(result, StateTransitionMaxSizeExceededError);
@@ -105,7 +111,7 @@ describe('validateStateTransitionBasicFactory', () => {
105
111
  });
106
112
 
107
113
  it('should return valid result', async () => {
108
- const result = await dpp.stateTransition.validateBasic(rawStateTransition);
114
+ const result = await dpp.stateTransition.validateBasic(rawStateTransition, executionContext);
109
115
 
110
116
  expect(result).to.be.an.instanceOf(ValidationResult);
111
117
  expect(result.isValid()).to.be.true();
@@ -11,6 +11,7 @@ describe('validateStateTransitionKeySignatureFactory', () => {
11
11
  let stateTransition;
12
12
  let stateRepositoryMock;
13
13
  let validateStateTransitionKeySignature;
14
+ let executionContext;
14
15
 
15
16
  let InvalidStateTransitionSignatureError;
16
17
  let StateTransitionKeySignatureValidator;
@@ -33,6 +34,7 @@ describe('validateStateTransitionKeySignatureFactory', () => {
33
34
  });
34
35
 
35
36
  beforeEach(function beforeEach() {
37
+ executionContext = new StateTransitionExecutionContext();
36
38
  const stateTransitionJS = getIdentityCreateTransitionFixture();
37
39
  const rawStateTransition = stateTransitionJS.toObject();
38
40
 
@@ -42,7 +44,7 @@ describe('validateStateTransitionKeySignatureFactory', () => {
42
44
 
43
45
  const validator = new StateTransitionKeySignatureValidator(stateRepositoryMock);
44
46
 
45
- validateStateTransitionKeySignature = (st) => validator.validate(st);
47
+ validateStateTransitionKeySignature = (st) => validator.validate(st, executionContext);
46
48
  });
47
49
 
48
50
  it('should return invalid result if signature is not valid', async () => {