@dashevo/wasm-dpp 0.25.0-dev.8 → 0.25.0

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 (295) hide show
  1. package/Cargo.toml +33 -7
  2. package/README.md +11 -6
  3. package/dist/errors/patchConsensusErrors.js +94 -115
  4. package/dist/wasm/wasm_dpp.d.ts +2213 -4113
  5. package/dist/wasm/wasm_dpp.js +17748 -2639
  6. package/dist/wasm/wasm_dpp_bg.js +1 -1
  7. package/lib/dpp.ts +1 -1
  8. package/lib/errors/patchConsensusErrors.ts +94 -93
  9. package/lib/test/bootstrap.js +5 -0
  10. package/lib/test/fixtures/getDataContractFixture.js +11 -5
  11. package/lib/test/fixtures/getDocumentsFixture.js +9 -5
  12. package/lib/test/fixtures/getIdentityCreateTransitionFixture.js +14 -20
  13. package/lib/test/fixtures/getIdentityCreditTransferTransitionFixture.js +14 -0
  14. package/lib/test/fixtures/getIdentityFixture.js +21 -32
  15. package/lib/test/fixtures/getIdentityTopUpTransitionFixture.js +7 -10
  16. package/lib/test/fixtures/getIdentityUpdateTransitionFixture.js +13 -28
  17. package/lib/test/fixtures/getPrivateAndPublicKeyForSigningFixture.js +7 -9
  18. package/lib/test/fixtures/js/generateRandomIdentifier.js +1 -0
  19. package/lib/test/fixtures/js/getChainAssetLockProofFixture.js +1 -0
  20. package/lib/test/fixtures/js/getDataContractFixture.js +1 -0
  21. package/lib/test/fixtures/js/getDocumentTransitionsFixture.js +1 -0
  22. package/lib/test/fixtures/js/getDocumentsFixture.js +1 -0
  23. package/lib/test/fixtures/js/getInstantAssetLockProofFixture.js +1 -0
  24. package/lib/test/mocks/createStateRepositoryMock.js +1 -0
  25. package/lib/wasm/wasm_dpp.d.ts +2213 -4113
  26. package/package.json +6 -6
  27. package/scripts/build-wasm.sh +30 -29
  28. package/src/bls_adapter.rs +1 -1
  29. package/src/dash_platform_protocol.rs +173 -196
  30. package/src/data_contract/data_contract.rs +309 -199
  31. package/src/data_contract/data_contract_facade.rs +28 -47
  32. package/src/data_contract/errors/mod.rs +1 -0
  33. package/src/data_contract/mod.rs +2 -2
  34. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +92 -79
  35. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +84 -77
  36. package/src/data_contract_factory/data_contract_factory.rs +43 -83
  37. package/src/document/document_facade.rs +81 -76
  38. package/src/document/errors/document_already_exists_error.rs +6 -6
  39. package/src/document/errors/document_no_revision_error.rs +1 -0
  40. package/src/document/errors/document_not_provided_error.rs +6 -6
  41. package/src/document/errors/invalid_document_action_error.rs +11 -7
  42. package/src/document/errors/invalid_initial_revision_error.rs +4 -4
  43. package/src/document/errors/mismatch_owners_ids_error.rs +5 -8
  44. package/src/document/errors/mod.rs +5 -0
  45. package/src/document/errors/revision_absent_error.rs +6 -6
  46. package/src/document/errors/trying_to_delete_immutable_document_error.rs +19 -0
  47. package/src/document/errors/trying_to_replace_immutable_document_error.rs +4 -4
  48. package/src/document/extended_document.rs +76 -76
  49. package/src/document/factory.rs +140 -119
  50. package/src/document/generate_document_id.rs +2 -2
  51. package/src/document/mod.rs +164 -150
  52. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +50 -48
  53. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +14 -14
  54. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +50 -38
  55. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +165 -153
  56. package/src/document/state_transition/document_batch_transition/mod.rs +232 -222
  57. package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +2 -9
  58. package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +1 -9
  59. package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +2 -10
  60. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +1 -9
  61. package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +1 -9
  62. package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +1 -9
  63. package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +1 -9
  64. package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +1 -9
  65. package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +1 -9
  66. package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +1 -9
  67. package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +1 -9
  68. package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +1 -9
  69. package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +1 -9
  70. package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +1 -9
  71. package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +1 -9
  72. package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +1 -9
  73. package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +1 -9
  74. package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +1 -9
  75. package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +10 -7
  76. package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +1 -9
  77. package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +1 -9
  78. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -9
  79. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -9
  80. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +1 -9
  81. package/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +1 -9
  82. package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +1 -9
  83. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +1 -9
  84. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +1 -9
  85. package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +1 -9
  86. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +1 -9
  87. package/src/errors/consensus/basic/document/missing_document_type_error.rs +1 -9
  88. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -9
  89. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -9
  90. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +3 -11
  91. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +1 -9
  92. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +2 -10
  93. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +1 -9
  94. package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +1 -9
  95. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +1 -9
  96. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +1 -9
  97. package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +1 -9
  98. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_proof_chain_lock_validation_error.rs +1 -1
  99. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +1 -9
  100. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +1 -9
  101. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +1 -9
  102. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +1 -9
  103. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +1 -9
  104. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +1 -9
  105. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -9
  106. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -9
  107. package/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +1 -9
  108. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +1 -9
  109. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +1 -9
  110. package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +1 -9
  111. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +1 -9
  112. package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +1 -9
  113. package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -9
  114. package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +7 -15
  115. package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +1 -9
  116. package/src/errors/consensus/basic/json_schema_compilation_error.rs +1 -9
  117. package/src/errors/consensus/basic/json_schema_error.rs +1 -9
  118. package/src/errors/consensus/basic/mod.rs +2 -0
  119. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -9
  120. package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +2 -11
  121. package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +1 -9
  122. package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +1 -9
  123. package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +1 -9
  124. package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +1 -9
  125. package/src/errors/consensus/basic/unsupported_version_error.rs +44 -0
  126. package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +1 -9
  127. package/src/errors/consensus/consensus_error.rs +44 -21
  128. package/src/errors/consensus/deserialize.rs +2 -1
  129. package/src/errors/consensus/fee/balance_is_not_enough_error.rs +5 -2
  130. package/src/errors/consensus/signature/basic_bls_error.rs +1 -9
  131. package/src/errors/consensus/signature/basic_ecdsa_error.rs +1 -9
  132. package/src/errors/consensus/signature/identity_not_found_error.rs +4 -2
  133. package/src/errors/consensus/signature/signature_should_not_be_present_error.rs +1 -9
  134. package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +3 -2
  135. package/src/errors/consensus/state/data_contract/data_contract_config_update_error.rs +42 -0
  136. package/src/errors/consensus/state/data_contract/data_contract_is_readonly_error.rs +44 -0
  137. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +2 -1
  138. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +2 -1
  139. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +2 -1
  140. package/src/errors/consensus/state/data_contract/mod.rs +7 -1
  141. package/src/errors/consensus/state/document/document_already_present_error.rs +1 -9
  142. package/src/errors/consensus/state/document/document_not_found_error.rs +1 -9
  143. package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +1 -9
  144. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +1 -9
  145. package/src/errors/consensus/state/document/document_timestamps_are_equal_error.rs +34 -0
  146. package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +1 -9
  147. package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +1 -9
  148. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +9 -12
  149. package/src/errors/consensus/state/document/mod.rs +2 -0
  150. package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +1 -9
  151. package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +1 -9
  152. package/src/errors/consensus/state/identity/identity_already_exists_error.rs +1 -9
  153. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +1 -9
  154. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +1 -9
  155. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +1 -9
  156. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +2 -9
  157. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +1 -9
  158. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +1 -9
  159. package/src/errors/consensus/value_error.rs +1 -9
  160. package/src/errors/from.rs +12 -8
  161. package/src/errors/mod.rs +7 -7
  162. package/src/errors/value_error.rs +5 -0
  163. package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +1 -2
  164. package/src/identity/factory_utils.rs +13 -13
  165. package/src/identity/identity.rs +275 -0
  166. package/src/identity/identity_facade.rs +87 -70
  167. package/src/identity/identity_factory.rs +74 -54
  168. package/src/identity/identity_public_key/mod.rs +87 -64
  169. package/src/identity/mod.rs +25 -247
  170. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +0 -1
  171. package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +3 -1
  172. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +2 -2
  173. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +0 -1
  174. package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +3 -1
  175. package/src/identity/state_transition/asset_lock_proof/mod.rs +112 -116
  176. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +71 -65
  177. package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +0 -1
  178. package/src/identity/state_transition/identity_create_transition/mod.rs +3 -3
  179. package/src/identity/state_transition/identity_create_transition/to_object.rs +10 -12
  180. package/src/identity/state_transition/identity_credit_transfer_transition/apply_identity_credit_transfer_transition.rs +31 -0
  181. package/src/identity/state_transition/identity_credit_transfer_transition/identity_credit_transfer_transition_basic_validator.rs +66 -0
  182. package/src/identity/state_transition/identity_credit_transfer_transition/identity_credit_transfer_transition_state_validator.rs +44 -0
  183. package/src/identity/state_transition/identity_credit_transfer_transition/mod.rs +8 -0
  184. package/src/identity/state_transition/identity_credit_transfer_transition/to_object.rs +49 -0
  185. package/src/identity/state_transition/identity_credit_transfer_transition/transition.rs +344 -0
  186. package/src/identity/state_transition/identity_public_key_transitions.rs +89 -75
  187. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +67 -62
  188. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +0 -2
  189. package/src/identity/state_transition/identity_topup_transition/mod.rs +3 -3
  190. package/src/identity/state_transition/identity_topup_transition/to_object.rs +8 -12
  191. package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +2 -2
  192. package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +99 -104
  193. package/src/identity/state_transition/identity_update_transition/mod.rs +4 -4
  194. package/src/identity/state_transition/identity_update_transition/to_object.rs +15 -19
  195. package/src/identity/state_transition/mod.rs +5 -2
  196. package/src/identity/state_transition/transition_types.rs +34 -0
  197. package/src/identity/state_transition/validate_public_key_signatures.rs +2 -2
  198. package/src/lib.rs +10 -11
  199. package/src/metadata.rs +3 -3
  200. package/src/protocol_version.rs +7 -0
  201. package/src/state_transition/conversion.rs +11 -1
  202. package/src/state_transition/errors/invalid_state_transition_error.rs +12 -1
  203. package/src/state_transition/fee/operations/pre_calculated_operation.rs +2 -1
  204. package/src/state_transition/mod.rs +137 -139
  205. package/src/state_transition/state_transition_facade.rs +11 -11
  206. package/src/state_transition/state_transition_factory.rs +142 -153
  207. package/src/state_transition/validation/state_transition_fee_validator.rs +1 -1
  208. package/src/state_transition/validation/validate_state_transition_identity_signature.rs +28 -10
  209. package/src/state_transition/validation/validate_state_transition_key_signature.rs +1 -1
  210. package/src/utils.rs +7 -8
  211. package/src/validation/validation_result.rs +1 -0
  212. package/test/integration/dataContract/DataContractFacade.spec.js +25 -32
  213. package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +6 -6
  214. package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +11 -10
  215. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +3 -3
  216. package/test/integration/document/Document.spec.js +3 -3
  217. package/test/integration/document/DocumentFacade.spec.js +39 -38
  218. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +6 -7
  219. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +15 -15
  220. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +2 -2
  221. package/test/integration/document/validation/validateDocumentFactory.spec.js +3 -3
  222. package/test/integration/identity/IdentityFacade.spec.js +33 -62
  223. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +6 -8
  224. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +4 -7
  225. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +1 -1
  226. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +21 -24
  227. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +2 -2
  228. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +4 -4
  229. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +7 -10
  230. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +4 -5
  231. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +6 -6
  232. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +3 -7
  233. package/test/integration/identity/validation/validateIdentityFactory.spec.js +7 -6
  234. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +5 -25
  235. package/test/integration/stateTransition/StateTransitionFacade.spec.js +45 -58
  236. package/test/integration/util/generateTemporaryEcdsaPrivateKey.spec.js +1 -1
  237. package/test/unit/DashPlatformProtocol.spec.js +10 -25
  238. package/test/unit/dataContract/DataContract.spec.js +119 -148
  239. package/test/unit/dataContract/DataContractFactory.spec.js +42 -31
  240. package/test/unit/dataContract/createDataContract.spec.js +6 -6
  241. package/test/unit/dataContract/generateDataContractId.spec.js +1 -1
  242. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +34 -26
  243. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +7 -9
  244. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +10 -9
  245. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +28 -19
  246. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +7 -7
  247. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +5 -5
  248. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +11 -10
  249. package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +7 -7
  250. package/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js +1 -1
  251. package/test/unit/document/Document.spec.js +31 -20
  252. package/test/unit/document/DocumentFactory.spec.js +45 -110
  253. package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +1 -1
  254. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +6 -7
  255. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +11 -12
  256. package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +1 -1
  257. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +1 -1
  258. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +1 -1
  259. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +1 -1
  260. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +1 -1
  261. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +9 -9
  262. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +1 -1
  263. package/test/unit/identity/Identity.spec.js +46 -81
  264. package/test/unit/identity/IdentityFactory.spec.js +61 -75
  265. package/test/unit/identity/IdentityPublicKey.spec.js +34 -48
  266. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +30 -63
  267. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +9 -15
  268. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +5 -9
  269. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +13 -35
  270. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +9 -13
  271. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +5 -9
  272. package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +24 -46
  273. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +4 -4
  274. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +1 -1
  275. package/test/unit/identity/stateTransition/identityCreditTransferTransition/identityCreditTransferTransition.spec.js +130 -0
  276. package/test/unit/stateTransition/StateTransitionExecutionContext.spec.js +1 -1
  277. package/test/unit/stateTransition/StateTransitionFactory.spec.js +16 -22
  278. package/test/unit/stateTransition/createStateTransitionFactory.spec.js +43 -21
  279. package/test/unit/stateTransition/validation/validateStateTransitionBasicFactory.spec.js +3 -3
  280. package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +5 -17
  281. package/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js +9 -5
  282. package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +8 -14
  283. package/test/unit/stateTransition/validation/validateStateTransitionStateFactory.spec.js +1 -1
  284. package/test/unit/version/validateProtocolVersionFactory.spec.js +1 -1
  285. package/test-d/index.test-d.ts +2 -2
  286. package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +0 -45
  287. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +0 -49
  288. package/src/decode_protocol_entity.rs +0 -25
  289. package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +0 -25
  290. package/test/integration/ajv/keywords/byteArray/addByteArrayKeyword.spec.js +0 -148
  291. package/test/integration/util/generateEntropy.spec.js +0 -17
  292. package/test/integration/util/serializer.spec.js +0 -24
  293. package/test/unit/decodeProtocolEntityFactory.spec.js +0 -69
  294. package/test/unit/identity/errors/InvalidIdentityError.spec.js +0 -46
  295. package/test/unit/stateTransition/errors/InvalidStateTransitionError.spec.js +0 -51
@@ -1,46 +1,31 @@
1
1
  const crypto = require('crypto');
2
- const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
3
2
 
4
- const createStateRepositoryMock = require('../../lib/test/mocks/createStateRepositoryMock');
5
- const getBlsAdapterMock = require('../../lib/test/mocks/getBlsAdapterMock');
6
- let { DashPlatformProtocol } = require('../..');
3
+ const { DashPlatformProtocol, getLatestProtocolVersion } = require('../..');
7
4
  const { default: loadWasmDpp } = require('../..');
8
5
 
9
6
  describe('DashPlatformProtocol', () => {
10
7
  let dpp;
11
- let stateRepositoryMock;
12
8
 
13
- beforeEach(async function beforeEach() {
14
- ({ DashPlatformProtocol } = await loadWasmDpp());
15
- stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
9
+ beforeEach(async () => {
10
+ await loadWasmDpp();
16
11
 
17
12
  dpp = new DashPlatformProtocol(
18
- getBlsAdapterMock(),
19
- stateRepositoryMock,
20
13
  { generate: () => crypto.randomBytes(32) },
21
- protocolVersion.latestVersion,
14
+ getLatestProtocolVersion(),
22
15
  );
23
16
  });
24
17
 
25
- describe('constructor', () => {
18
+ describe.skip('constructor', () => {
26
19
  it('should set default protocol version', () => {
27
20
  dpp = new DashPlatformProtocol();
28
21
 
29
- expect(dpp.protocolVersion).to.equal(protocolVersion.latestVersion);
22
+ expect(dpp.protocolVersion).to.equal(getLatestProtocolVersion());
30
23
  });
31
24
  });
32
25
 
33
- describe('getStateRepository', () => {
34
- it('should return StateRepository', () => {
35
- const result = dpp.getStateRepository();
36
-
37
- expect(result).to.equal(stateRepositoryMock);
38
- });
39
- });
40
-
41
- describe('setProtocolVersion', () => {
26
+ describe.skip('setProtocolVersion', () => {
42
27
  it('should set protocol version', () => {
43
- expect(dpp.protocolVersion).to.equal(protocolVersion.latestVersion);
28
+ expect(dpp.protocolVersion).to.equal(getLatestProtocolVersion());
44
29
 
45
30
  dpp.setProtocolVersion(42);
46
31
 
@@ -48,9 +33,9 @@ describe('DashPlatformProtocol', () => {
48
33
  });
49
34
  });
50
35
 
51
- describe('getProtocolVersion', () => {
36
+ describe.skip('getProtocolVersion', () => {
52
37
  it('should get protocol version', () => {
53
- expect(dpp.protocolVersion).to.equal(protocolVersion.latestVersion);
38
+ expect(dpp.protocolVersion).to.equal(getLatestProtocolVersion());
54
39
 
55
40
  dpp.setProtocolVersion(42);
56
41
 
@@ -1,97 +1,80 @@
1
1
  const bs58 = require('bs58');
2
2
 
3
- const generateRandomIdentifier = require('@dashevo/dpp/lib/test/utils/generateRandomIdentifier');
4
- const JsDataContract = require('@dashevo/dpp/lib/dataContract/DataContract');
3
+ const generateRandomIdentifier = require('../../../lib/test/utils/generateRandomIdentifierAsync');
5
4
 
6
5
  const { default: loadWasmDpp } = require('../../../dist');
7
6
 
8
7
  describe('DataContract', () => {
9
8
  let documentType;
10
9
  let documentSchema;
11
- let documents;
12
- let jsDataContract;
10
+ let documentSchemas;
13
11
  let ownerId;
14
12
  let entropy;
15
13
  let contractId;
16
14
  let dataContract;
17
- let defs;
15
+ let schemaDefs;
18
16
 
19
17
  let DataContract;
20
- let DataContractDefaults;
21
18
  let Identifier;
22
19
  let Metadata;
23
20
 
24
21
  before(async () => {
25
22
  ({
26
- DataContract, DataContractDefaults, Identifier, Metadata,
23
+ DataContract, Identifier, Metadata,
27
24
  } = await loadWasmDpp());
28
25
  });
29
26
 
30
- beforeEach(() => {
27
+ beforeEach(async () => {
31
28
  documentType = 'niceDocument';
32
29
 
33
30
  documentSchema = {
31
+ type: 'object',
34
32
  properties: {
35
33
  nice: {
36
34
  type: 'boolean',
37
35
  },
38
36
  aBinaryProperty: {
39
- type: 'object',
37
+ type: 'array',
40
38
  byteArray: true,
41
39
  },
42
40
  },
41
+ additionalProperties: false,
43
42
  };
44
43
 
45
- documents = {
44
+ documentSchemas = {
46
45
  [documentType]: documentSchema,
47
46
  };
48
47
 
49
- ownerId = generateRandomIdentifier();
48
+ ownerId = (await generateRandomIdentifier()).toBuffer();
50
49
  entropy = Buffer.alloc(32, 420);
51
- contractId = generateRandomIdentifier();
52
-
53
- defs = { something: { type: 'string' } };
50
+ contractId = (await generateRandomIdentifier()).toBuffer();
54
51
 
55
- jsDataContract = new JsDataContract({
56
- $schema: JsDataContract.DEFAULTS.SCHEMA,
57
- $id: contractId,
58
- version: 1,
59
- protocolVersion: 1,
60
- ownerId,
61
- documents,
62
- $defs: defs,
63
- });
52
+ schemaDefs = { something: { type: 'string' } };
64
53
 
65
54
  dataContract = new DataContract({
66
- $schema: DataContractDefaults.SCHEMA,
67
- $id: contractId,
55
+ $format_version: '0',
56
+ id: contractId,
68
57
  version: 1,
69
- protocolVersion: 1,
70
58
  ownerId,
71
- documents,
72
- $defs: defs,
59
+ documentSchemas,
73
60
  });
74
61
  });
75
62
 
76
63
  describe('constructor', () => {
77
- it('should create new DataContract', () => {
78
- const id = generateRandomIdentifier();
79
-
64
+ it('should create new DataContract', async () => {
80
65
  dataContract = new DataContract({
81
- $schema: DataContractDefaults.SCHEMA,
82
- $id: id,
83
- ownerId,
84
- protocolVersion: 1,
66
+ $format_version: '0',
67
+ id: contractId,
85
68
  version: 1,
86
- documents,
87
- $defs: defs,
69
+ ownerId,
70
+ documentSchemas,
71
+ schemaDefs,
88
72
  });
89
73
 
90
- expect(dataContract.getId().toBuffer()).to.deep.equal(id.toBuffer());
91
- expect(dataContract.getOwnerId().toBuffer()).to.deep.equal(ownerId.toBuffer());
92
- expect(dataContract.getJsonMetaSchema()).to.deep.equal(DataContractDefaults.SCHEMA);
93
- expect(dataContract.getDocuments()).to.deep.equal(documents);
94
- expect(dataContract.getDefinitions()).to.deep.equal(defs);
74
+ expect(dataContract.getId().toBuffer()).to.deep.equal(contractId);
75
+ expect(dataContract.getOwnerId().toBuffer()).to.deep.equal(ownerId);
76
+ expect(dataContract.getDocumentSchemas()).to.deep.equal(documentSchemas);
77
+ expect(dataContract.getSchemaDefs()).to.deep.equal(schemaDefs);
95
78
  });
96
79
  });
97
80
 
@@ -99,76 +82,54 @@ describe('DataContract', () => {
99
82
  it('should return DataContract Identifier', () => {
100
83
  const result = dataContract.getId();
101
84
 
102
- expect(result.toBuffer()).to.deep.equal(contractId.toBuffer());
85
+ expect(result.toBuffer()).to.deep.equal(contractId);
103
86
  expect(result).to.be.instanceof(Identifier);
104
87
  });
105
88
  });
106
89
 
107
- describe('#getJsonSchemaId', () => {
108
- it('should return JSON Schema ID', () => {
109
- const result = dataContract.getJsonSchemaId();
110
-
111
- expect(result).to.equal(dataContract.getId().toString());
112
- });
113
- });
114
-
115
- describe('#setJsonMetaSchema', () => {
116
- it('should set meta schema', () => {
117
- const metaSchema = 'http://test.com/schema';
118
-
119
- dataContract.setJsonMetaSchema(metaSchema);
120
-
121
- expect(dataContract.getJsonMetaSchema()).to.deep.equal(metaSchema);
122
- });
123
- });
124
-
125
- describe('#getJsonMetaSchema', () => {
126
- it('should return meta schema', () => {
127
- const result = dataContract.getJsonMetaSchema();
128
-
129
- expect(result).to.deep.equal(DataContractDefaults.SCHEMA);
130
- });
131
- });
132
-
133
- describe('#getDocuments', () => {
90
+ describe('#getDocumentSchemas', () => {
134
91
  it('should get Documents definition', () => {
135
92
  const anotherDocuments = {
136
93
  anotherDocument: {
94
+ type: 'object',
137
95
  properties: {
138
96
  name: { type: 'string' },
139
97
  },
98
+ additionalProperties: false,
140
99
  },
141
100
  };
142
101
 
143
- dataContract.setDocuments(anotherDocuments);
144
- expect(dataContract.getDocuments()).to.deep.equal(anotherDocuments);
102
+ dataContract.setDocumentSchemas(anotherDocuments);
103
+ expect(dataContract.getDocumentSchemas()).to.deep.equal(anotherDocuments);
145
104
  });
146
105
  });
147
106
 
148
- describe('#setDocuments', () => {
107
+ describe('#setDocumentSchemas', () => {
149
108
  it('should set Documents definition', () => {
150
109
  const anotherDocuments = {
151
110
  anotherDocument: {
111
+ type: 'object',
152
112
  properties: {
153
113
  name: { type: 'string' },
154
114
  },
115
+ additionalProperties: false,
155
116
  },
156
117
  };
157
118
 
158
- dataContract.setDocuments(anotherDocuments);
159
- expect(dataContract.getDocuments()).to.deep.equal(anotherDocuments);
119
+ dataContract.setDocumentSchemas(anotherDocuments);
120
+ expect(dataContract.getDocumentSchemas()).to.deep.equal(anotherDocuments);
160
121
  });
161
122
  });
162
123
 
163
- describe('#isDocumentDefined', () => {
124
+ describe('#hasDocumentType', () => {
164
125
  it('should return true if Document schema is defined', () => {
165
- const result = dataContract.isDocumentDefined('niceDocument');
126
+ const result = dataContract.hasDocumentType('niceDocument');
166
127
 
167
128
  expect(result).to.equal(true);
168
129
  });
169
130
 
170
131
  it('should return false if Document schema is not defined', () => {
171
- const result = dataContract.isDocumentDefined('undefinedDocument');
132
+ const result = dataContract.hasDocumentType('undefinedDocument');
172
133
 
173
134
  expect(result).to.equal(false);
174
135
  });
@@ -178,18 +139,22 @@ describe('DataContract', () => {
178
139
  it('should set Document schema', () => {
179
140
  const anotherType = 'prettyDocument';
180
141
  const anotherDefinition = {
142
+ type: 'object',
181
143
  properties: {
182
- name: { type: 'string' },
144
+ test: {
145
+ type: 'string',
146
+ },
183
147
  },
148
+ additionalProperties: false,
184
149
  };
185
150
 
186
151
  dataContract.setDocumentSchema(anotherType, anotherDefinition);
187
152
 
188
- const anotherDocuments = dataContract.getDocuments();
153
+ const anotherDocuments = dataContract.getDocumentSchemas();
189
154
 
190
155
  expect(anotherDocuments).to.have.property(anotherType);
191
156
  expect(anotherDocuments[anotherType]).to.deep.equal(anotherDefinition);
192
- expect(dataContract.isDocumentDefined(anotherType)).to.be.true();
157
+ expect(dataContract.hasDocumentType(anotherType)).to.be.true();
193
158
  });
194
159
  });
195
160
 
@@ -199,7 +164,7 @@ describe('DataContract', () => {
199
164
  dataContract.getDocumentSchema('undefinedObject');
200
165
  expect.fail('Error was not thrown');
201
166
  } catch (e) {
202
- expect(e.getType()).to.equal('undefinedObject');
167
+ expect(e.getMessage()).to.equal('data contract error: document type not found: can not get document type from contract');
203
168
  }
204
169
  });
205
170
 
@@ -210,40 +175,31 @@ describe('DataContract', () => {
210
175
  });
211
176
  });
212
177
 
213
- describe('#getDocumentSchemaRef', () => {
214
- it('should throw error if Document is not defined', () => {
215
- try {
216
- dataContract.getDocumentSchemaRef('undefinedObject');
217
- expect.fail('Error was not thrown');
218
- } catch (e) {
219
- expect(e.getType()).to.equal('undefinedObject');
220
- }
221
- });
222
-
223
- it('should return schema ref', () => {
224
- const result = dataContract.getDocumentSchemaRef(documentType);
225
-
226
- expect(result).to.equal(`${dataContract.getJsonSchemaId()}#/documents/niceDocument`);
227
- });
228
- });
229
-
230
- describe('#setDefinitions', () => {
178
+ describe('#setSchemaDefs', () => {
231
179
  it('should set $defs', () => {
232
180
  const $defs = {
233
- subSchema: { type: 'object' },
181
+ subSchema: {
182
+ type: 'object',
183
+ properties: {
184
+ test: {
185
+ type: 'string',
186
+ },
187
+ },
188
+ additionalProperties: false,
189
+ },
234
190
  };
235
191
 
236
- dataContract.setDefinitions($defs);
192
+ dataContract.setSchemaDefs($defs);
237
193
 
238
- expect(dataContract.getDefinitions()).to.deep.equal($defs);
194
+ expect(dataContract.getSchemaDefs()).to.deep.equal($defs);
239
195
  });
240
196
  });
241
197
 
242
- describe('#getDefinitions', () => {
198
+ describe('#getSchemaDefs', () => {
243
199
  it('should return $defs', () => {
244
- const result = dataContract.getDefinitions();
200
+ const result = dataContract.getSchemaDefs();
245
201
 
246
- expect(result).to.deep.equal(defs);
202
+ expect(result).to.be.null();
247
203
  });
248
204
  });
249
205
 
@@ -252,54 +208,72 @@ describe('DataContract', () => {
252
208
  const result = dataContract.toJSON();
253
209
 
254
210
  expect(result).to.deep.equal({
255
- protocolVersion: dataContract.getProtocolVersion(),
256
- $id: bs58.encode(contractId),
257
- $schema: DataContractDefaults.SCHEMA,
211
+ $format_version: '0',
212
+ config: {
213
+ $format_version: '0',
214
+ canBeDeleted: false,
215
+ documentsKeepHistoryContractDefault: false,
216
+ documentsMutableContractDefault: true,
217
+ keepsHistory: false,
218
+ readonly: false,
219
+ requiresIdentityDecryptionBoundedKey: null,
220
+ requiresIdentityEncryptionBoundedKey: null,
221
+ },
222
+ id: bs58.encode(contractId),
258
223
  version: 1,
259
224
  ownerId: bs58.encode(ownerId),
260
- documents,
261
- $defs: defs,
225
+ schemaDefs: null,
226
+ documentSchemas,
262
227
  });
263
228
  });
264
229
 
265
230
  it('should return plain object with "$defs" if present', () => {
266
231
  const $defs = {
267
- subSchema: { type: 'object' },
232
+ subSchema: { type: 'string' },
268
233
  };
269
234
 
270
- dataContract.setDefinitions($defs);
235
+ dataContract.setSchemaDefs($defs);
271
236
 
272
237
  const result = dataContract.toJSON();
273
238
 
274
239
  expect(result).to.deep.equal({
275
- protocolVersion: dataContract.getProtocolVersion(),
276
- $schema: DataContractDefaults.SCHEMA,
277
- $id: bs58.encode(contractId),
240
+ $format_version: '0',
241
+ config: {
242
+ $format_version: '0',
243
+ canBeDeleted: false,
244
+ documentsKeepHistoryContractDefault: false,
245
+ documentsMutableContractDefault: true,
246
+ keepsHistory: false,
247
+ readonly: false,
248
+ requiresIdentityDecryptionBoundedKey: null,
249
+ requiresIdentityEncryptionBoundedKey: null,
250
+ },
251
+ id: bs58.encode(contractId),
278
252
  version: 1,
279
253
  ownerId: bs58.encode(ownerId),
280
- documents,
281
- $defs,
254
+ documentSchemas,
255
+ schemaDefs: $defs,
282
256
  });
283
257
  });
284
258
  });
285
259
 
286
260
  describe('#toBuffer', () => {
287
261
  it('should return DataContract as a Buffer', () => {
288
- expect(jsDataContract.getProtocolVersion()).to.deep.equal(dataContract.getProtocolVersion());
289
-
290
- const jsResult = jsDataContract.toBuffer();
291
- const wasmResult = dataContract.toBuffer();
292
-
293
- expect(wasmResult).to.deep.equal(jsResult);
262
+ const result = dataContract.toBuffer();
263
+ expect(result).to.be.instanceOf(Buffer);
264
+ expect(result).to.have.lengthOf(211);
294
265
  });
295
266
  });
296
267
 
268
+ // TODO: can not compare to JS because rust
269
+ // DataContract does not match JS anymore
297
270
  describe('#hash', () => {
298
271
  it('should return DataContract hash', () => {
299
- const jsResult = jsDataContract.hash();
272
+ // const jsResult = jsDataContract.hash();
300
273
  const wasmResult = dataContract.hash();
301
-
302
- expect(wasmResult).to.deep.equal(jsResult);
274
+ //
275
+ // expect(wasmResult).to.deep.equal(jsResult);
276
+ expect(wasmResult).to.be.instanceOf(Uint8Array);
303
277
  });
304
278
  });
305
279
 
@@ -311,27 +285,6 @@ describe('DataContract', () => {
311
285
  });
312
286
  });
313
287
 
314
- describe('#getBinaryProperties', () => {
315
- it('should return flat map of properties with `contentEncoding` keywords', () => {
316
- const result = dataContract.getBinaryProperties(documentType);
317
- expect(result).to.deep.equal({
318
- aBinaryProperty: {
319
- type: 'object',
320
- byteArray: true,
321
- },
322
- });
323
- });
324
-
325
- it('should throw an error if document type is not found', () => {
326
- try {
327
- dataContract.getBinaryProperties('unknown');
328
- expect.fail('Error was not thrown');
329
- } catch (e) {
330
- expect(e.getType()).to.equal('unknown');
331
- }
332
- });
333
- });
334
-
335
288
  describe('#setMetadata', () => {
336
289
  it('should set metadata', () => {
337
290
  const otherMetadata = new Metadata({
@@ -347,4 +300,22 @@ describe('DataContract', () => {
347
300
  expect(dataContract.getMetadata().toObject()).to.deep.equal(otherMetadataToObject);
348
301
  });
349
302
  });
303
+
304
+ describe.skip('#setConfig', () => {
305
+ it('should set config', () => {
306
+ const config = {
307
+ allow: true,
308
+ readonly: true,
309
+ keepsHistory: true,
310
+ documentsKeepHistoryContractDefault: true,
311
+ documentsMutableContractDefault: true,
312
+ };
313
+
314
+ dataContract.setConfig(config);
315
+
316
+ const restoredConfig = dataContract.getConfig();
317
+
318
+ expect(config).to.deep.equal(restoredConfig);
319
+ });
320
+ });
350
321
  });
@@ -1,19 +1,17 @@
1
- const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
1
+ const getDataContractFixture = require('../../../lib/test/fixtures/getDataContractFixture');
2
2
 
3
- const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
3
+ const { default: loadWasmDpp, UnsupportedProtocolVersionError } = require('../../..');
4
+ const { getLatestProtocolVersion } = require('../../..');
4
5
 
5
- const { default: loadWasmDpp } = require('../../../dist');
6
-
7
- describe('DataContractFactory', () => {
6
+ describe.skip('DataContractFactory', () => {
8
7
  let DataContractFactory;
9
8
  let DataContractValidator;
10
9
  let DataContract;
11
10
  let InvalidDataContractError;
12
- let SerializedObjectParsingError;
13
11
  let JsonSchemaError;
14
12
 
15
13
  let factory;
16
- let jsDataContract;
14
+ let dataContract;
17
15
  let rawDataContract;
18
16
  let dataContractValidator;
19
17
 
@@ -23,18 +21,13 @@ describe('DataContractFactory', () => {
23
21
  DataContractValidator,
24
22
  DataContract,
25
23
  InvalidDataContractError,
26
- SerializedObjectParsingError,
27
24
  JsonSchemaError,
28
25
  } = await loadWasmDpp());
29
26
  });
30
27
 
31
- beforeEach(() => {
32
- jsDataContract = getDataContractFixture();
33
-
34
- // For some reason fixture has empty $defs which violates meta schema
35
- delete jsDataContract.$defs;
36
-
37
- rawDataContract = jsDataContract.toObject();
28
+ beforeEach(async () => {
29
+ dataContract = await getDataContractFixture();
30
+ rawDataContract = dataContract.toObject();
38
31
 
39
32
  dataContractValidator = new DataContractValidator();
40
33
 
@@ -47,12 +40,32 @@ describe('DataContractFactory', () => {
47
40
  describe('create', () => {
48
41
  it('should return new Data Contract with specified name and documents definition', () => {
49
42
  const result = factory.create(
50
- jsDataContract.ownerId.toBuffer(),
43
+ dataContract.getOwnerId(),
51
44
  rawDataContract.documents,
52
45
  ).toObject();
53
46
 
54
47
  expect(result).excluding('$id').to.deep.equal(rawDataContract);
55
48
  });
49
+
50
+ it('should pass config', () => {
51
+ const config = {
52
+ canBeDeleted: false,
53
+ readonly: false,
54
+ keepsHistory: true,
55
+ documentsKeepHistoryContractDefault: false,
56
+ documentsMutableContractDefault: true,
57
+ };
58
+ const contract = factory.create(
59
+ dataContract.getOwnerId(),
60
+ rawDataContract.documents,
61
+ config,
62
+ );
63
+
64
+ const result = contract.toObject();
65
+
66
+ expect(contract.getConfig()).to.be.deep.equal(config);
67
+ expect(result).excluding('$id').to.deep.equal(rawDataContract);
68
+ });
56
69
  });
57
70
 
58
71
  describe('createFromObject', () => {
@@ -62,8 +75,7 @@ describe('DataContractFactory', () => {
62
75
  });
63
76
 
64
77
  it('should return new Data Contract without validation if "skipValidation" option is passed', async () => {
65
- const alteredContract = jsDataContract.toObject();
66
- alteredContract.$defs = {}; // Empty defs are bad!
78
+ const alteredContract = dataContract.toObject();
67
79
 
68
80
  const resultSkipValidation = await factory.createFromObject(alteredContract, true);
69
81
 
@@ -71,8 +83,7 @@ describe('DataContractFactory', () => {
71
83
  });
72
84
 
73
85
  it('should throw an error if passed object is not valid', async () => {
74
- const alteredContract = jsDataContract.toObject();
75
- alteredContract.$defs = {}; // Empty defs are bad!
86
+ const alteredContract = dataContract.toObject();
76
87
 
77
88
  try {
78
89
  await factory.createFromObject(alteredContract);
@@ -91,24 +102,24 @@ describe('DataContractFactory', () => {
91
102
  let serializedDataContract;
92
103
 
93
104
  beforeEach(() => {
94
- serializedDataContract = jsDataContract.toBuffer();
105
+ serializedDataContract = dataContract.toBuffer();
95
106
  });
96
107
 
97
108
  it('should return new Data Contract from serialized contract', async () => {
98
109
  const result = await factory.createFromBuffer(serializedDataContract);
99
110
 
100
- expect(result.toObject()).to.deep.equal(jsDataContract.toObject());
111
+ expect(result.toObject()).to.deep.equal(dataContract.toObject());
101
112
  });
102
113
 
103
114
  it('should throw InvalidDataContractError if the decoding fails with consensus error', async () => {
104
115
  try {
105
116
  // Casually break serialized data contract:
106
- serializedDataContract[5] += 1337;
117
+ serializedDataContract[0] = 3;
107
118
  await factory.createFromBuffer(serializedDataContract);
108
119
  expect.fail('should throw InvalidDataContractError');
109
120
  } catch (e) {
110
- expect(e).to.be.an.instanceOf(SerializedObjectParsingError);
111
- expect(e.getParsingError()).to.equals('Syntax(1)');
121
+ expect(e).to.be.an.instanceOf(InvalidDataContractError);
122
+ expect(e.getErrors()[0]).to.be.an.instanceOf(UnsupportedProtocolVersionError);
112
123
  }
113
124
  });
114
125
  });
@@ -116,14 +127,14 @@ describe('DataContractFactory', () => {
116
127
  describe('createDataContractCreateTransition', () => {
117
128
  it('should return new DataContractCreateTransition with passed DataContract', async () => {
118
129
  // Create wasm version of DataContract
119
- const dataContract = new DataContract(rawDataContract);
120
- dataContract.setEntropy(jsDataContract.getEntropy());
130
+ const newDataContract = new DataContract(rawDataContract);
131
+ newDataContract.setEntropy(dataContract.getEntropy());
121
132
 
122
- const result = await factory.createDataContractCreateTransition(dataContract);
133
+ const result = await factory.createDataContractCreateTransition(newDataContract);
123
134
 
124
- expect(result.getProtocolVersion()).to.equal(protocolVersion.latestVersion);
125
- expect(result.getEntropy()).to.deep.equal(jsDataContract.getEntropy());
126
- expect(result.getDataContract().toObject()).to.deep.equal(jsDataContract.toObject());
135
+ expect(result.getProtocolVersion()).to.equal(getLatestProtocolVersion());
136
+ expect(result.getEntropy()).to.deep.equal(dataContract.getEntropy());
137
+ expect(result.getDataContract().toObject()).to.deep.equal(dataContract.toObject());
127
138
  });
128
139
  });
129
140
  });