@dashevo/wasm-dpp 0.24.0-dev.33 → 0.25.0-dev.10

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 (186) hide show
  1. package/Cargo.toml +2 -2
  2. package/dist/wasm/wasm_dpp.d.ts +600 -454
  3. package/dist/wasm/wasm_dpp.js +178 -120
  4. package/dist/wasm/wasm_dpp_bg.js +1 -1
  5. package/lib/test/fixtures/getDocumentsFixture.js +5 -1
  6. package/lib/wasm/wasm_dpp.d.ts +600 -454
  7. package/package.json +4 -4
  8. package/src/dash_platform_protocol.rs +1 -1
  9. package/src/data_contract/data_contract.rs +2 -1
  10. package/src/data_contract/data_contract_facade.rs +2 -2
  11. package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +1 -1
  12. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +7 -16
  13. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +5 -3
  14. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +6 -2
  15. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +7 -18
  16. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +6 -4
  17. package/src/decode_protocol_entity.rs +19 -19
  18. package/src/document/extended_document.rs +5 -2
  19. package/src/document/fetch_and_validate_data_contract.rs +2 -2
  20. package/src/document/mod.rs +5 -3
  21. package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +9 -6
  22. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +1 -1
  23. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +1 -1
  24. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +1 -2
  25. package/src/document/state_transition/document_batch_transition/mod.rs +18 -25
  26. package/src/document/state_transition/document_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs +4 -4
  27. package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_batch_transitions_state.rs +3 -1
  28. package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +1 -1
  29. package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +3 -3
  30. package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +1 -1
  31. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +1 -1
  32. package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +1 -1
  33. package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +3 -3
  34. package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +3 -3
  35. package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +4 -4
  36. package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +1 -1
  37. package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +1 -1
  38. package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +1 -1
  39. package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +1 -1
  40. package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +1 -1
  41. package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +1 -1
  42. package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +1 -1
  43. package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +1 -1
  44. package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +1 -1
  45. package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +2 -2
  46. package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +1 -1
  47. package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +1 -1
  48. package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +1 -1
  49. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -1
  50. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -1
  51. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +2 -2
  52. package/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +1 -1
  53. package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +1 -1
  54. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +2 -2
  55. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +1 -1
  56. package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +1 -1
  57. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +1 -1
  58. package/src/errors/consensus/basic/document/missing_document_type_error.rs +1 -1
  59. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -1
  60. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -1
  61. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +1 -1
  62. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +1 -1
  63. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +1 -1
  64. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +1 -1
  65. package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +1 -1
  66. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +1 -1
  67. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +1 -1
  68. package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +1 -1
  69. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_proof_chain_lock_validation_error.rs +35 -0
  70. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +1 -1
  71. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +1 -1
  72. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +1 -1
  73. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +1 -1
  74. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +1 -1
  75. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +1 -1
  76. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -1
  77. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -1
  78. package/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +1 -1
  79. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +1 -1
  80. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +1 -1
  81. package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +1 -1
  82. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +1 -1
  83. package/src/errors/consensus/basic/identity/mod.rs +2 -0
  84. package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +2 -2
  85. package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -1
  86. package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +7 -3
  87. package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +1 -1
  88. package/src/errors/consensus/basic/json_schema_compilation_error.rs +1 -1
  89. package/src/errors/consensus/basic/json_schema_error.rs +1 -3
  90. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -1
  91. package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +2 -2
  92. package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +1 -1
  93. package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +1 -1
  94. package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +1 -1
  95. package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +1 -1
  96. package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +1 -1
  97. package/src/errors/consensus/consensus_error.rs +24 -4
  98. package/src/errors/consensus/deserialize.rs +1 -1
  99. package/src/errors/consensus/fee/balance_is_not_enough_error.rs +1 -1
  100. package/src/errors/consensus/signature/basic_bls_error.rs +38 -0
  101. package/src/errors/consensus/signature/basic_ecdsa_error.rs +38 -0
  102. package/src/errors/consensus/signature/mod.rs +6 -0
  103. package/src/errors/consensus/signature/signature_should_not_be_present_error.rs +38 -0
  104. package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +2 -2
  105. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +58 -1
  106. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +66 -1
  107. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +50 -1
  108. package/src/errors/consensus/state/document/document_already_present_error.rs +1 -1
  109. package/src/errors/consensus/state/document/document_not_found_error.rs +1 -1
  110. package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +1 -1
  111. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +2 -2
  112. package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +1 -1
  113. package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +1 -1
  114. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +1 -1
  115. package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +1 -1
  116. package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +1 -1
  117. package/src/errors/consensus/state/identity/identity_already_exists_error.rs +1 -1
  118. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +1 -1
  119. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +1 -1
  120. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +1 -1
  121. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +1 -1
  122. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +1 -1
  123. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +1 -1
  124. package/src/errors/consensus/state/identity/missing_identity_public_key_ids_error.rs +26 -0
  125. package/src/errors/consensus/state/identity/mod.rs +2 -0
  126. package/src/errors/consensus/value_error.rs +1 -1
  127. package/src/errors/from.rs +0 -1
  128. package/src/generate_temporary_ecdsa_private_key.rs +2 -6
  129. package/src/identity/factory_utils.rs +4 -4
  130. package/src/identity/identity_public_key/key_type.rs +2 -0
  131. package/src/identity/identity_public_key/purpose.rs +7 -0
  132. package/src/identity/mod.rs +4 -2
  133. package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +6 -2
  134. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +14 -32
  135. package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +3 -1
  136. package/src/identity/state_transition/identity_create_transition/to_object.rs +2 -2
  137. package/src/identity/state_transition/identity_public_key_transitions.rs +11 -11
  138. package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +6 -2
  139. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +7 -26
  140. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +3 -1
  141. package/src/identity/state_transition/identity_update_transition/apply_identity_update_transition.rs +3 -1
  142. package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +2 -2
  143. package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +11 -32
  144. package/src/identity/state_transition/identity_update_transition/identity_update_transition_state_validator.rs +3 -2
  145. package/src/identity/state_transition/identity_update_transition/to_object.rs +2 -2
  146. package/src/identity/state_transition/validate_public_key_signatures.rs +2 -2
  147. package/src/state_repository.rs +3 -2
  148. package/src/state_transition/fee/calculate_state_transition_fee.rs +8 -5
  149. package/src/state_transition/state_transition_facade.rs +18 -21
  150. package/src/state_transition/validation/state_transition_fee_validator.rs +3 -1
  151. package/src/state_transition/validation/validate_state_transition_identity_signature.rs +22 -6
  152. package/src/state_transition/validation/validate_state_transition_key_signature.rs +7 -1
  153. package/src/utils.rs +2 -4
  154. package/src/validation/validation_result.rs +12 -7
  155. package/test/integration/dataContract/DataContractFacade.spec.js +17 -20
  156. package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +5 -4
  157. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +0 -17
  158. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +10 -3
  159. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +4 -7
  160. package/test/integration/stateTransition/StateTransitionFacade.spec.js +21 -8
  161. package/test/unit/dataContract/DataContract.spec.js +9 -21
  162. package/test/unit/dataContract/DataContractFactory.spec.js +19 -28
  163. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +2 -4
  164. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +0 -7
  165. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +10 -8
  166. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +3 -5
  167. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +1 -3
  168. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +8 -6
  169. package/test/unit/decodeProtocolEntityFactory.spec.js +4 -1
  170. package/test/unit/document/Document.spec.js +9 -7
  171. package/test/unit/document/DocumentFactory.spec.js +38 -90
  172. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +2 -3
  173. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +5 -6
  174. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +20 -18
  175. package/test/unit/identity/Identity.spec.js +3 -8
  176. package/test/unit/identity/IdentityFactory.spec.js +3 -4
  177. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +1 -2
  178. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +7 -3
  179. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +1 -2
  180. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +5 -1
  181. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +3 -3
  182. package/test/unit/stateTransition/validation/validateStateTransitionBasicFactory.spec.js +12 -6
  183. package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +4 -16
  184. package/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js +8 -4
  185. package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +3 -1
  186. package/test/unit/stateTransition/validation/validateStateTransitionStateFactory.spec.js +7 -3
@@ -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;
@@ -1,5 +1,5 @@
1
- const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
2
1
  const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
2
+ const getDataContractFixture = require('../../../../../../../lib/test/fixtures/getDataContractFixture');
3
3
 
4
4
  const { default: loadWasmDpp } = require('../../../../../../../dist');
5
5
 
@@ -27,8 +27,8 @@ describe('validateDataContractCreateTransitionStateFactory', () => {
27
27
  } = await loadWasmDpp());
28
28
  });
29
29
 
30
- beforeEach(() => {
31
- dataContract = getDataContractFixture();
30
+ beforeEach(async () => {
31
+ dataContract = await getDataContractFixture();
32
32
  stateTransition = new DataContractCreateTransition({
33
33
  protocolVersion: protocolVersion.latestVersion,
34
34
  dataContract: dataContract.toObject(),
@@ -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,22 +45,26 @@ 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 () => {
54
54
  // This time our state repository should return a data contract on fetch
55
55
  const validator = new DataContractValidator();
56
56
  const dataContractFactory = new DataContractFactory(1, validator);
57
- const wasmDataContract = await dataContractFactory.createFromBuffer(dataContract.toBuffer());
57
+ const reCreatedDataContract = await dataContractFactory
58
+ .createFromBuffer(dataContract.toBuffer());
58
59
 
59
60
  const stateRepositoryLikeWithContract = {
60
- fetchDataContract: async () => wasmDataContract,
61
+ fetchDataContract: async () => reCreatedDataContract,
61
62
  };
62
63
 
63
64
  const result = await validateDataContractCreateTransitionState(
64
65
  stateRepositoryLikeWithContract,
65
66
  stateTransition,
67
+ executionContext,
66
68
  );
67
69
  const [error] = result.getErrors();
68
70
 
@@ -1,4 +1,3 @@
1
- const varint = require('varint');
2
1
  const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
3
2
  const stateTransitionTypes = require('@dashevo/dpp/lib/stateTransition/stateTransitionTypes');
4
3
  const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
@@ -62,11 +61,10 @@ describe('DataContractUpdateTransition', () => {
62
61
  });
63
62
 
64
63
  describe('#toBuffer', () => {
65
- it('should return serialized State Transition that starts with protocol version', () => {
66
- const protocolVersionBytes = Buffer.from(varint.encode(stateTransition.getProtocolVersion()));
67
-
64
+ it('should return serialized State Transition', () => {
68
65
  const result = stateTransition.toBuffer();
69
- expect(result.compare(protocolVersionBytes, 0, 1, 0, 1)).equals(0);
66
+ expect(result).to.be.instanceOf(Buffer);
67
+ expect(result).to.have.lengthOf(2239);
70
68
  });
71
69
  });
72
70
 
@@ -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
  });
@@ -1,5 +1,5 @@
1
- const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
2
1
  const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
2
+ const getDataContractFixture = require('../../../../../../../lib/test/fixtures/getDataContractFixture');
3
3
 
4
4
  const { default: loadWasmDpp } = require('../../../../../../../dist');
5
5
 
@@ -31,7 +31,7 @@ describe('validateDataContractUpdateTransitionStateFactory', () => {
31
31
  });
32
32
 
33
33
  beforeEach(async () => {
34
- dataContract = getDataContractFixture();
34
+ dataContract = await getDataContractFixture();
35
35
 
36
36
  const updatedRawDataContract = dataContract.toObject();
37
37
 
@@ -44,19 +44,19 @@ 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
- const wasmDataContract = await dataContractFactory.createFromBuffer(dataContract.toBuffer());
49
+ const reCreatedDataContract = await dataContractFactory
50
+ .createFromBuffer(dataContract.toBuffer());
52
51
 
53
52
  const stateRepositoryLike = {
54
- fetchDataContract: async () => wasmDataContract,
53
+ fetchDataContract: async () => reCreatedDataContract,
55
54
  };
56
55
 
57
56
  validateTransitionWithExistingContract = (t) => validateDataContractUpdateTransitionState(
58
57
  stateRepositoryLike,
59
58
  t,
59
+ executionContext,
60
60
  );
61
61
  });
62
62
 
@@ -68,6 +68,7 @@ describe('validateDataContractUpdateTransitionStateFactory', () => {
68
68
  const validateTransitionWithNoContract = (t) => validateDataContractUpdateTransitionState(
69
69
  stateRepositoryLikeNoDataContract,
70
70
  t,
71
+ executionContext,
71
72
  );
72
73
 
73
74
  const result = await validateTransitionWithNoContract(stateTransition);
@@ -114,6 +115,7 @@ describe('validateDataContractUpdateTransitionStateFactory', () => {
114
115
  const validateTransitionWithNoContract = (t) => validateDataContractUpdateTransitionState(
115
116
  stateRepositoryLikeNoDataContract,
116
117
  t,
118
+ executionContext,
117
119
  );
118
120
 
119
121
  executionContext.enableDryRun();
@@ -4,7 +4,10 @@ const { encode } = require('@dashevo/dpp/lib/util/serializer');
4
4
  let { decodeProtocolEntity, ProtocolVersionParsingError, SerializedObjectParsingError } = require('../..');
5
5
  const { default: loadWasmDpp } = require('../..');
6
6
 
7
- describe('decodeProtocolEntityFactory', () => {
7
+ // TODO: decodeProtocolEntity was broken after serialization refactoring
8
+ // it was mostly used in js-drive and does not seem to be needed anymore
9
+ // can we remove it completely?
10
+ describe.skip('decodeProtocolEntityFactory', () => {
8
11
  let parsedProtocolVersion;
9
12
  let entityBuffer;
10
13
  let protocolVersionBuffer;
@@ -411,15 +411,15 @@ describe('Document', () => {
411
411
  });
412
412
 
413
413
  describe('#toBuffer', () => {
414
- it('returned bytes should be the same as JS version', () => {
415
- const jsBuffer = documentJs.toBuffer();
414
+ it('should return serialized Document', () => {
416
415
  const buffer = document.toBuffer();
417
-
418
- expect(jsBuffer.length).to.equal(buffer.length);
419
- expect(jsBuffer).to.deep.equal(buffer);
416
+ expect(buffer).to.be.instanceOf(Buffer);
417
+ expect(buffer.length).to.equal(509);
420
418
  });
421
419
 
422
- it('should return the same bytes as JS version when dynamic identifier is in Document', () => {
420
+ // TODO: remove or replace?
421
+ // can not be compared to JS buffers anymore because uses bin code
422
+ it.skip('should return the same bytes as JS version when dynamic identifier is in Document', () => {
423
423
  const jsId = generateRandomIdentifier();
424
424
  const id = new Identifier(jsId.toBuffer());
425
425
  const path = 'dataObject.binaryObject.identifier';
@@ -438,7 +438,9 @@ describe('Document', () => {
438
438
  expect(jsBuffer).to.deep.equal(buffer);
439
439
  });
440
440
 
441
- it('should return the same bytes as JS version when dynamic binaryData is in Document', () => {
441
+ // TODO: remove or replace?
442
+ // can not be compared to JS buffers anymore because uses bin code
443
+ it.skip('should return the same bytes as JS version when dynamic binaryData is in Document', () => {
442
444
  const data = Buffer.alloc(32);
443
445
  const path = 'dataObject.binaryObject.binaryData';
444
446
 
@@ -2,50 +2,38 @@ const bs58 = require('bs58');
2
2
 
3
3
  const DocumentCreateTransition = require('@dashevo/dpp/lib/document/stateTransition/DocumentsBatchTransition/documentTransition/DocumentCreateTransition');
4
4
  const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
5
- const createDPPMock = require('@dashevo/dpp/lib/test/mocks/createDPPMock');
6
- const DocumentFactoryJS = require('@dashevo/dpp/lib/document/DocumentFactory');
7
5
 
8
- const getDataContractFixtureJs = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
9
- const getDocumentsFixtureJs = require('@dashevo/dpp/lib/test/fixtures/getDocumentsFixture');
6
+ const getDataContractFixture = require('../../../lib/test/fixtures/getDataContractFixture');
7
+ const getDocumentsFixture = require('../../../lib/test/fixtures/getDocumentsFixture');
10
8
  const createStateRepositoryMock = require('../../../lib/test/mocks/createStateRepositoryMock');
11
9
  const generateRandomIdentifierAsync = require('../../../lib/test/utils/generateRandomIdentifierAsync');
12
10
 
13
11
  let {
14
- Identifier, DocumentFactory, DataContract, ExtendedDocument, DocumentValidator,
12
+ Identifier, DocumentFactory, ExtendedDocument, DocumentValidator,
15
13
  ProtocolVersionValidator, InvalidDocumentTypeInDataContractError, InvalidDocumentError,
16
14
  JsonSchemaError, NoDocumentsSuppliedError, MismatchOwnerIdsError, InvalidInitialRevisionError,
17
- InvalidActionNameError, PlatformValueError,
15
+ InvalidActionNameError,
18
16
  } = require('../../..');
19
17
 
20
- const { default: loadWasmDpp } = require('../../..');
18
+ const { default: loadWasmDpp, SerializedObjectParsingError } = require('../../..');
21
19
 
22
20
  describe('DocumentFactory', () => {
23
- let decodeProtocolEntityMock;
24
- let validateDocumentMock;
25
- let fetchAndValidateDataContractMock;
26
21
  let stateRepositoryMock;
27
22
  let ownerIdJs;
28
23
  let ownerId;
29
24
  let dataContract;
30
25
  let dataContractJs;
31
26
  let document;
32
- let documentJs;
33
- let documentsJs;
34
27
  let documents;
35
28
  let rawDocument;
36
- let rawDocumentJs;
37
- let factoryJs;
38
29
  let factory;
39
- let fakeTime;
40
- let fakeTimeDate;
41
- let dppMock;
42
30
  let dataContractId;
43
31
  let documentValidator;
44
32
 
45
33
  beforeEach(async () => {
46
34
  ({
47
35
  Identifier, ProtocolVersionValidator, DocumentValidator, DocumentFactory,
48
- DataContract, ExtendedDocument,
36
+ ExtendedDocument,
49
37
  // Errors:
50
38
  InvalidDocumentTypeInDataContractError,
51
39
  InvalidDocumentError,
@@ -54,62 +42,29 @@ describe('DocumentFactory', () => {
54
42
  MismatchOwnerIdsError,
55
43
  InvalidInitialRevisionError,
56
44
  InvalidActionNameError,
57
- PlatformValueError,
58
45
  } = await loadWasmDpp());
59
46
  });
60
47
 
61
- beforeEach(function beforeEach() {
48
+ beforeEach(async function beforeEach() {
62
49
  const protocolValidator = new ProtocolVersionValidator();
63
50
  documentValidator = new DocumentValidator(protocolValidator);
64
51
 
65
- ([{ ownerId: ownerIdJs }] = getDocumentsFixtureJs());
66
- ownerId = Identifier.from(ownerIdJs);
52
+ dataContract = await getDataContractFixture();
53
+ dataContractId = dataContract.getId();
67
54
 
68
- dataContractJs = getDataContractFixtureJs();
69
- dataContract = DataContract.fromBuffer(dataContractJs.toBuffer());
70
- const dc = DataContract.fromBuffer(dataContractJs.toBuffer());
71
- dataContractId = dataContractJs.getId().toBuffer();
55
+ documents = await getDocumentsFixture(dataContract);
56
+ ownerId = documents[0].getOwnerId();
72
57
 
73
- documentsJs = getDocumentsFixtureJs(dataContractJs);
74
- documents = documentsJs.map((d) => {
75
- const doc = new ExtendedDocument(d.toObject(), dataContract);
76
- doc.setEntropy(d.entropy);
77
- return doc;
78
- });
79
-
80
- ([, , , documentJs] = documentsJs);
81
- rawDocumentJs = documentJs.toObject();
82
58
  ([, , , document] = documents);
83
59
  rawDocument = document.toObject();
84
60
 
85
- decodeProtocolEntityMock = this.sinonSandbox.stub();
86
- validateDocumentMock = this.sinonSandbox.stub();
87
-
88
- validateDocumentMock.returns(new ValidationResult());
89
-
90
61
  const fetchContractResult = new ValidationResult();
91
62
  fetchContractResult.setData(dataContractJs);
92
63
 
93
64
  stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
94
- stateRepositoryMock.fetchDataContract.resolves(dc);
95
-
96
- fetchAndValidateDataContractMock = this.sinonSandbox.stub().returns(fetchContractResult);
97
- dppMock = createDPPMock();
65
+ stateRepositoryMock.fetchDataContract.resolves(dataContract);
98
66
 
99
67
  factory = new DocumentFactory(1, documentValidator, stateRepositoryMock);
100
- factoryJs = new DocumentFactoryJS(
101
- dppMock,
102
- validateDocumentMock,
103
- fetchAndValidateDataContractMock,
104
- decodeProtocolEntityMock,
105
- );
106
-
107
- fakeTimeDate = new Date();
108
- fakeTime = this.sinonSandbox.useFakeTimers(fakeTimeDate);
109
- });
110
-
111
- afterEach(() => {
112
- fakeTime.reset();
113
68
  });
114
69
 
115
70
  describe('create', () => {
@@ -118,7 +73,7 @@ describe('DocumentFactory', () => {
118
73
  // should be valid for this test and it passes the DataContract validation.
119
74
  // The previous version of test passed due to the fact that
120
75
  // the mocked DataContract validator always returned true.
121
- const [niceDocument] = documentsJs;
76
+ const [niceDocument] = documents;
122
77
 
123
78
  const newRawDocument = niceDocument.toObject();
124
79
  const contractId = bs58.decode('FQco85WbwNgb5ix8QQAH6wurMcgEC5ENSCv5ixG9cj12');
@@ -227,12 +182,11 @@ describe('DocumentFactory', () => {
227
182
  });
228
183
 
229
184
  it('should throw InvalidDocumentError if Data Contract is not valid', async () => {
230
- const dc = DataContract.fromBuffer(dataContractJs.toBuffer());
231
- dc.setDocuments({ '$%34': { '^&*': 'Keck' } });
232
- stateRepositoryMock.fetchDataContract.resolves(dc);
185
+ dataContract.setDocuments({ '$%34': { '^&*': 'Keck' } });
186
+ stateRepositoryMock.fetchDataContract.resolves(dataContract);
233
187
 
234
188
  try {
235
- await factory.createFromObject(rawDocumentJs);
189
+ await factory.createFromObject(rawDocument);
236
190
 
237
191
  expect.fail('InvalidDocumentTypeInDataContractError should be thrown');
238
192
  } catch (e) {
@@ -241,7 +195,7 @@ describe('DocumentFactory', () => {
241
195
  expect(stateRepositoryMock.fetchDataContract.callCount).to.be.equal(1);
242
196
  const callArguments = stateRepositoryMock.fetchDataContract.getCall(0).args[0];
243
197
 
244
- expect(callArguments.toBuffer()).to.be.deep.equal(dc.getId().toBuffer());
198
+ expect(callArguments.toBuffer()).to.be.deep.equal(dataContract.getId().toBuffer());
245
199
  }
246
200
  });
247
201
  });
@@ -249,28 +203,22 @@ describe('DocumentFactory', () => {
249
203
  describe('createFromBuffer', () => {
250
204
  let serializedDocument;
251
205
 
252
- beforeEach(function beforeEach() {
253
- this.sinonSandbox.stub(factoryJs, 'createFromObject');
206
+ beforeEach(() => {
254
207
  // eslint-disable-next-line prefer-destructuring
255
- documentJs = documentsJs[8]; // document with binary fields
256
-
257
- serializedDocument = documentJs.toBuffer();
258
- rawDocumentJs = documentJs.toObject();
259
- });
260
-
261
- afterEach(() => {
262
- factoryJs.createFromObject.restore();
208
+ document = documents[8]; // document with binary fields
209
+ serializedDocument = document.toBuffer();
210
+ rawDocument = document.toObject();
263
211
  });
264
212
 
265
213
  it('should return new Document from serialized one', async () => {
266
214
  const result = await factory.createFromBuffer(serializedDocument);
267
- expect(result.toObject()).to.deep.equal(documentJs.toObject());
215
+ expect(result.toObject()).to.deep.equal(document.toObject());
268
216
  expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce();
269
217
  });
270
218
 
271
219
  it('should throw InvalidDocumentError if the decoding fails with consensus error', async () => {
272
- documentJs.data = 'Not a valid data';
273
- serializedDocument = documentJs.toBuffer();
220
+ stateRepositoryMock.fetchDataContract.resolves(null);
221
+ serializedDocument = document.toBuffer();
274
222
 
275
223
  try {
276
224
  await factory.createFromBuffer(serializedDocument);
@@ -281,18 +229,19 @@ describe('DocumentFactory', () => {
281
229
  }
282
230
  });
283
231
 
284
- it('should throw an error if decoding fails with any other error - Rust', async () => {
232
+ it('should throw an error if decoding fails with any other error', async () => {
285
233
  const serializeDocument = Buffer.alloc(160, 1);
286
234
  try {
287
235
  await factory.createFromBuffer(serializeDocument);
288
236
 
289
237
  expect.fail('should throw an error');
290
238
  } catch (e) {
291
- expect(e).to.be.instanceOf(PlatformValueError);
292
- expect(e.getMessage()).to.equal('structure error: value is not a map');
239
+ expect(e).to.be.instanceOf(SerializedObjectParsingError);
293
240
  }
294
241
  });
295
- }); describe('createStateTransition', () => {
242
+ });
243
+
244
+ describe('createStateTransition', () => {
296
245
  it('should throw and error if documents have unknown action', async () => {
297
246
  try {
298
247
  factory.createStateTransition({
@@ -348,23 +297,22 @@ describe('DocumentFactory', () => {
348
297
  });
349
298
 
350
299
  it('should create DocumentsBatchTransition with passed documents', async () => {
351
- const [newDocumentJs] = getDocumentsFixtureJs(dataContractJs);
352
- const newDocument = new ExtendedDocument(newDocumentJs.toObject(), dataContract);
300
+ const [newDocument] = await getDocumentsFixture(dataContract);
301
+ newDocument.setData({ lastName: 'Keck' });
353
302
 
354
303
  const stateTransition = factory.createStateTransition({
355
304
  create: documents,
356
305
  replace: [newDocument],
357
306
  });
358
307
 
359
- const stateTransitionJs = factoryJs.createStateTransition({
360
- create: documentsJs,
361
- replace: [newDocumentJs],
362
- });
363
-
364
- const transitions = stateTransition.getTransitions().map((t) => t.toObject());
365
- const expectedTransitions = stateTransitionJs.getTransitions().map((t) => t.toObject());
308
+ const replaceDocuments = stateTransition.getTransitions()
309
+ .filter((t) => t.getAction() === 1);
310
+ const createDocuments = stateTransition.getTransitions()
311
+ .filter((t) => t.getAction() === 0);
366
312
 
367
- expect(transitions).to.deep.includes.members(expectedTransitions);
313
+ expect(replaceDocuments[0].getId()).to.deep.equal(newDocument.getId());
314
+ expect(replaceDocuments[0].getRevision()).to.deep.equal(2);
315
+ expect(createDocuments).to.have.lengthOf(documents.length);
368
316
  });
369
317
  });
370
318
  });
@@ -105,10 +105,9 @@ describe('DocumentsBatchTransition', () => {
105
105
 
106
106
  describe('#toBuffer', () => {
107
107
  it('should return the same bytes as JS version', () => {
108
- const bufferJs = stateTransitionJs.toBuffer();
109
108
  const buffer = stateTransition.toBuffer();
110
-
111
- expect(bufferJs).to.deep.equal(buffer);
109
+ expect(buffer).to.be.instanceOf(Buffer);
110
+ expect(buffer).to.have.length(23960);
112
111
  });
113
112
  });
114
113
 
@@ -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