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

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 (329) hide show
  1. package/Cargo.toml +34 -7
  2. package/README.md +12 -7
  3. package/dist/errors/patchConsensusErrors.js +94 -115
  4. package/dist/wasm/wasm_dpp.d.ts +2302 -4106
  5. package/dist/wasm/wasm_dpp.js +18149 -2639
  6. package/dist/wasm/wasm_dpp_bg.js +1 -1
  7. package/lib/bls/bls.js +48 -0
  8. package/lib/dpp.ts +1 -1
  9. package/lib/errors/patchConsensusErrors.ts +94 -93
  10. package/lib/test/bootstrap.js +5 -0
  11. package/lib/test/fixtures/getChainAssetLockProofFixture.js +20 -1
  12. package/lib/test/fixtures/getDataContractFixture.js +13 -9
  13. package/lib/test/fixtures/getDocumentTransitionsFixture.js +31 -1
  14. package/lib/test/fixtures/getDocumentsFixture.js +9 -5
  15. package/lib/test/fixtures/getIdentityCreateTransitionFixture.js +14 -20
  16. package/lib/test/fixtures/getIdentityCreditTransferTransitionFixture.js +14 -0
  17. package/lib/test/fixtures/getIdentityFixture.js +21 -32
  18. package/lib/test/fixtures/getIdentityTopUpTransitionFixture.js +7 -10
  19. package/lib/test/fixtures/getIdentityUpdateTransitionFixture.js +13 -28
  20. package/lib/test/fixtures/getInstantAssetLockProofFixture.js +32 -12
  21. package/lib/test/fixtures/getPrivateAndPublicKeyForSigningFixture.js +7 -9
  22. package/lib/test/mocks/createStateRepositoryMock.js +1 -0
  23. package/lib/test/mocks/getBlsAdapterMock.js +1 -1
  24. package/lib/utils/creditsConverter.js +14 -0
  25. package/lib/utils/hash.js +18 -0
  26. package/lib/wasm/wasm_dpp.d.ts +2302 -4106
  27. package/package.json +4 -6
  28. package/scripts/build-wasm.sh +30 -29
  29. package/src/bls_adapter.rs +1 -1
  30. package/src/dash_platform_protocol.rs +169 -192
  31. package/src/data_contract/data_contract.rs +309 -199
  32. package/src/data_contract/data_contract_facade.rs +28 -47
  33. package/src/data_contract/errors/mod.rs +1 -0
  34. package/src/data_contract/mod.rs +2 -2
  35. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +92 -79
  36. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +84 -77
  37. package/src/data_contract_factory/data_contract_factory.rs +43 -83
  38. package/src/document/document_facade.rs +81 -76
  39. package/src/document/errors/document_already_exists_error.rs +6 -6
  40. package/src/document/errors/document_no_revision_error.rs +1 -0
  41. package/src/document/errors/document_not_provided_error.rs +6 -6
  42. package/src/document/errors/invalid_document_action_error.rs +11 -7
  43. package/src/document/errors/invalid_document_error.rs +5 -0
  44. package/src/document/errors/invalid_initial_revision_error.rs +4 -4
  45. package/src/document/errors/mismatch_owners_ids_error.rs +5 -8
  46. package/src/document/errors/mod.rs +5 -0
  47. package/src/document/errors/revision_absent_error.rs +6 -6
  48. package/src/document/errors/trying_to_delete_immutable_document_error.rs +19 -0
  49. package/src/document/errors/trying_to_replace_immutable_document_error.rs +4 -4
  50. package/src/document/extended_document.rs +91 -76
  51. package/src/document/factory.rs +140 -119
  52. package/src/document/generate_document_id.rs +2 -2
  53. package/src/document/mod.rs +164 -150
  54. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +236 -229
  55. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +14 -14
  56. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +50 -38
  57. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +164 -152
  58. package/src/document/state_transition/document_batch_transition/mod.rs +232 -222
  59. package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +2 -9
  60. package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +1 -9
  61. package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +2 -10
  62. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +1 -9
  63. package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +1 -9
  64. package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +1 -9
  65. package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +1 -9
  66. package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +1 -9
  67. package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +1 -9
  68. package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +1 -9
  69. package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +1 -9
  70. package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +1 -9
  71. package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +1 -9
  72. package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +1 -9
  73. package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +1 -9
  74. package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +1 -9
  75. package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +1 -9
  76. package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +1 -9
  77. package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +10 -7
  78. package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +1 -9
  79. package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +1 -9
  80. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -9
  81. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -9
  82. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +1 -9
  83. package/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +1 -9
  84. package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +1 -9
  85. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +1 -9
  86. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +1 -9
  87. package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +1 -9
  88. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +1 -9
  89. package/src/errors/consensus/basic/document/missing_document_type_error.rs +1 -9
  90. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -9
  91. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -9
  92. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +3 -11
  93. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +1 -9
  94. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +2 -10
  95. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +1 -9
  96. package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +5 -11
  97. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +1 -9
  98. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +1 -9
  99. package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +1 -9
  100. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_proof_chain_lock_validation_error.rs +1 -1
  101. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +1 -9
  102. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +1 -9
  103. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +1 -9
  104. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +1 -9
  105. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +1 -9
  106. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +1 -9
  107. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -9
  108. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -9
  109. package/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +1 -9
  110. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +1 -9
  111. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +1 -9
  112. package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +1 -9
  113. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +1 -9
  114. package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +1 -9
  115. package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -9
  116. package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +7 -15
  117. package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +1 -9
  118. package/src/errors/consensus/basic/json_schema_compilation_error.rs +1 -9
  119. package/src/errors/consensus/basic/json_schema_error.rs +33 -11
  120. package/src/errors/consensus/basic/mod.rs +2 -0
  121. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -9
  122. package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +2 -11
  123. package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +1 -9
  124. package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +1 -9
  125. package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +1 -9
  126. package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +1 -9
  127. package/src/errors/consensus/basic/unsupported_version_error.rs +44 -0
  128. package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +1 -9
  129. package/src/errors/consensus/consensus_error.rs +44 -21
  130. package/src/errors/consensus/deserialize.rs +2 -1
  131. package/src/errors/consensus/fee/balance_is_not_enough_error.rs +5 -2
  132. package/src/errors/consensus/signature/basic_bls_error.rs +1 -9
  133. package/src/errors/consensus/signature/basic_ecdsa_error.rs +1 -9
  134. package/src/errors/consensus/signature/identity_not_found_error.rs +4 -2
  135. package/src/errors/consensus/signature/signature_should_not_be_present_error.rs +1 -9
  136. package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +3 -2
  137. package/src/errors/consensus/state/data_contract/data_contract_config_update_error.rs +42 -0
  138. package/src/errors/consensus/state/data_contract/data_contract_is_readonly_error.rs +44 -0
  139. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +2 -1
  140. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +2 -1
  141. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +2 -1
  142. package/src/errors/consensus/state/data_contract/mod.rs +7 -1
  143. package/src/errors/consensus/state/document/document_already_present_error.rs +1 -9
  144. package/src/errors/consensus/state/document/document_not_found_error.rs +1 -9
  145. package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +1 -9
  146. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +1 -9
  147. package/src/errors/consensus/state/document/document_timestamps_are_equal_error.rs +34 -0
  148. package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +1 -9
  149. package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +1 -9
  150. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +9 -12
  151. package/src/errors/consensus/state/document/mod.rs +2 -0
  152. package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +1 -9
  153. package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +1 -9
  154. package/src/errors/consensus/state/identity/identity_already_exists_error.rs +1 -9
  155. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +1 -9
  156. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +1 -9
  157. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +1 -9
  158. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +2 -9
  159. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +1 -9
  160. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +1 -9
  161. package/src/errors/consensus/value_error.rs +1 -9
  162. package/src/errors/from.rs +12 -8
  163. package/src/errors/mod.rs +7 -7
  164. package/src/errors/value_error.rs +5 -0
  165. package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +1 -2
  166. package/src/identity/factory_utils.rs +13 -13
  167. package/src/identity/identity.rs +275 -0
  168. package/src/identity/identity_facade.rs +94 -75
  169. package/src/identity/identity_factory.rs +74 -54
  170. package/src/identity/identity_public_key/mod.rs +87 -64
  171. package/src/identity/mod.rs +25 -247
  172. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +32 -17
  173. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +0 -1
  174. package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +3 -1
  175. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +24 -15
  176. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +0 -1
  177. package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +3 -1
  178. package/src/identity/state_transition/asset_lock_proof/mod.rs +124 -127
  179. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +72 -65
  180. package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +0 -1
  181. package/src/identity/state_transition/identity_create_transition/mod.rs +3 -3
  182. package/src/identity/state_transition/identity_create_transition/to_object.rs +11 -12
  183. package/src/identity/state_transition/identity_credit_transfer_transition/apply_identity_credit_transfer_transition.rs +31 -0
  184. package/src/identity/state_transition/identity_credit_transfer_transition/identity_credit_transfer_transition_basic_validator.rs +66 -0
  185. package/src/identity/state_transition/identity_credit_transfer_transition/identity_credit_transfer_transition_state_validator.rs +44 -0
  186. package/src/identity/state_transition/identity_credit_transfer_transition/mod.rs +8 -0
  187. package/src/identity/state_transition/identity_credit_transfer_transition/to_object.rs +49 -0
  188. package/src/identity/state_transition/identity_credit_transfer_transition/transition.rs +344 -0
  189. package/src/identity/state_transition/identity_public_key_transitions.rs +89 -75
  190. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +68 -62
  191. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +0 -2
  192. package/src/identity/state_transition/identity_topup_transition/mod.rs +3 -3
  193. package/src/identity/state_transition/identity_topup_transition/to_object.rs +9 -12
  194. package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +2 -2
  195. package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +99 -104
  196. package/src/identity/state_transition/identity_update_transition/mod.rs +4 -4
  197. package/src/identity/state_transition/identity_update_transition/to_object.rs +15 -19
  198. package/src/identity/state_transition/mod.rs +5 -2
  199. package/src/identity/state_transition/transition_types.rs +34 -0
  200. package/src/identity/state_transition/validate_public_key_signatures.rs +2 -2
  201. package/src/lib.rs +9 -10
  202. package/src/metadata.rs +3 -3
  203. package/src/protocol_version.rs +7 -0
  204. package/src/state_transition/conversion.rs +11 -1
  205. package/src/state_transition/errors/invalid_state_transition_error.rs +12 -1
  206. package/src/state_transition/fee/operations/pre_calculated_operation.rs +2 -1
  207. package/src/state_transition/mod.rs +137 -139
  208. package/src/state_transition/state_transition_facade.rs +11 -11
  209. package/src/state_transition/state_transition_factory.rs +142 -153
  210. package/src/state_transition/validation/state_transition_fee_validator.rs +1 -1
  211. package/src/state_transition/validation/validate_state_transition_identity_signature.rs +28 -10
  212. package/src/state_transition/validation/validate_state_transition_key_signature.rs +1 -1
  213. package/src/utils.rs +7 -8
  214. package/src/validation/mod.rs +2 -2
  215. package/src/validation/validation_result.rs +17 -15
  216. package/test/integration/dataContract/DataContractFacade.spec.js +25 -32
  217. package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +6 -6
  218. package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +11 -10
  219. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +3 -3
  220. package/test/integration/document/Document.spec.js +3 -3
  221. package/test/integration/document/DocumentFacade.spec.js +33 -48
  222. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +13 -24
  223. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +15 -15
  224. package/test/integration/document/validation/validateDocumentFactory.spec.js +3 -3
  225. package/test/integration/identity/IdentityFacade.spec.js +33 -63
  226. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +6 -8
  227. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +4 -7
  228. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +1 -1
  229. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +21 -24
  230. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +2 -2
  231. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +4 -4
  232. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +7 -10
  233. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +5 -6
  234. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +6 -6
  235. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +5 -9
  236. package/test/integration/identity/validation/validateIdentityFactory.spec.js +7 -6
  237. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +5 -25
  238. package/test/integration/stateTransition/StateTransitionFacade.spec.js +45 -58
  239. package/test/integration/util/generateTemporaryEcdsaPrivateKey.spec.js +1 -1
  240. package/test/unit/DashPlatformProtocol.spec.js +10 -25
  241. package/test/unit/dataContract/DataContract.spec.js +119 -148
  242. package/test/unit/dataContract/DataContractFactory.spec.js +42 -31
  243. package/test/unit/dataContract/createDataContract.spec.js +6 -6
  244. package/test/unit/dataContract/generateDataContractId.spec.js +1 -1
  245. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +34 -26
  246. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +10 -9
  247. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +34 -27
  248. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +5 -5
  249. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +11 -10
  250. package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +7 -7
  251. package/test/unit/document/Document.spec.js +59 -70
  252. package/test/unit/document/DocumentFactory.spec.js +46 -111
  253. package/test/unit/document/errors/InvalidDocumentError.spec.js +9 -9
  254. package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +1 -1
  255. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +160 -158
  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 +134 -136
  259. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +4 -4
  260. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +572 -595
  261. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +6 -14
  262. package/test/unit/identity/Identity.spec.js +48 -83
  263. package/test/unit/identity/IdentityFactory.spec.js +61 -75
  264. package/test/unit/identity/IdentityPublicKey.spec.js +34 -48
  265. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +30 -63
  266. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +5 -9
  267. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +13 -35
  268. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +5 -9
  269. package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +24 -46
  270. package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +9 -28
  271. package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +19 -27
  272. package/test/unit/identity/stateTransition/identityCreditTransferTransition/identityCreditTransferTransition.spec.js +130 -0
  273. package/test/unit/stateTransition/StateTransitionExecutionContext.spec.js +1 -1
  274. package/test/unit/stateTransition/StateTransitionFactory.spec.js +16 -22
  275. package/test/unit/stateTransition/createStateTransitionFactory.spec.js +43 -21
  276. package/test/unit/stateTransition/validation/validateStateTransitionBasicFactory.spec.js +3 -3
  277. package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +5 -17
  278. package/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js +9 -5
  279. package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +8 -14
  280. package/test/unit/stateTransition/validation/validateStateTransitionStateFactory.spec.js +1 -1
  281. package/test/unit/version/validateProtocolVersionFactory.spec.js +1 -1
  282. package/test-d/index.test-d.ts +2 -2
  283. package/lib/test/fixtures/getDashPayContractFixture.js +0 -1
  284. package/lib/test/fixtures/getDashPayDocumentFixture.js +0 -1
  285. package/lib/test/fixtures/getDpnsContractFixture.js +0 -1
  286. package/lib/test/fixtures/getDpnsDocumentFixture.js +0 -1
  287. package/lib/test/fixtures/getFeatureFlagsContractFixture.js +0 -1
  288. package/lib/test/fixtures/getFeatureFlagsDocumentsFixture.js +0 -1
  289. package/lib/test/fixtures/getIdentityTopUpTransitionFixtureJs.js +0 -1
  290. package/lib/test/fixtures/getMasternodeRewardShareDocumentsFixture.js +0 -1
  291. package/lib/test/fixtures/getMasternodeRewardSharesContractFixture.js +0 -1
  292. package/lib/test/fixtures/getPreorderDocumentFixture.js +0 -1
  293. package/lib/test/fixtures/getRawTransactionFixture.js +0 -1
  294. package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +0 -45
  295. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +0 -49
  296. package/src/decode_protocol_entity.rs +0 -25
  297. package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +0 -25
  298. package/test/integration/DashPlatformProtocol.spec.js +0 -53
  299. package/test/integration/ajv/keywords/byteArray/addByteArrayKeyword.spec.js +0 -148
  300. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +0 -195
  301. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -500
  302. package/test/integration/stateTransition/calculateStateTransitionFeeFromOperationsFactory.spec.js +0 -53
  303. package/test/integration/util/generateEntropy.spec.js +0 -17
  304. package/test/integration/util/serializer.spec.js +0 -24
  305. package/test/unit/dataContract/getBinaryPropertiesFromSchema.spec.js +0 -103
  306. package/test/unit/dataContract/getPropertyDefinitionByPath.spec.js +0 -84
  307. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +0 -47
  308. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +0 -49
  309. package/test/unit/dataTrigger/DataTrigger.spec.js +0 -132
  310. package/test/unit/dataTrigger/DataTriggerExecutionContext.spec.js +0 -29
  311. package/test/unit/dataTrigger/dashpayDataTriggers/createContactRequestDataTrigger.spec.js +0 -107
  312. package/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js +0 -382
  313. package/test/unit/dataTrigger/featureFlagDataTriggers/createFeatureFlagDataTrigger.spec.js +0 -99
  314. package/test/unit/dataTrigger/getDataTriggersFactory.spec.js +0 -113
  315. package/test/unit/dataTrigger/rejectDataTrigger.spec.js +0 -51
  316. package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +0 -202
  317. package/test/unit/decodeProtocolEntityFactory.spec.js +0 -69
  318. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +0 -257
  319. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +0 -94
  320. package/test/unit/errors/consensus/codes.spec.js +0 -102
  321. package/test/unit/identity/creditsConverter.spec.js +0 -34
  322. package/test/unit/identity/errors/InvalidIdentityError.spec.js +0 -46
  323. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +0 -89
  324. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +0 -142
  325. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +0 -100
  326. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +0 -36
  327. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +0 -63
  328. package/test/unit/identity/validation/validateRequiredPurposeAndSecurityLevelFactory.spec.js +0 -47
  329. package/test/unit/stateTransition/errors/InvalidStateTransitionError.spec.js +0 -51
@@ -1,202 +0,0 @@
1
- const SimplifiedMNListEntry = require('@dashevo/dashcore-lib/lib/deterministicmnlist/SimplifiedMNListEntry');
2
- const getIdentityFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityFixture');
3
- const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
4
- const getMasternodeRewardShareDocumentsFixture = require('@dashevo/dpp/lib/test/fixtures/getMasternodeRewardShareDocumentsFixture');
5
- const getMasternodeRewardSharesContractFixture = require('@dashevo/dpp/lib/test/fixtures/getMasternodeRewardSharesContractFixture');
6
- const getDocumentTransitionsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentTransitionsFixture');
7
- const createRewardShareDataTrigger = require('@dashevo/dpp/lib/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger');
8
- const DataTriggerExecutionResult = require('@dashevo/dpp/lib/dataTrigger/DataTriggerExecutionResult');
9
- const DataTriggerConditionError = require('@dashevo/dpp/lib/errors/consensus/state/dataContract/dataTrigger/DataTriggerConditionError');
10
- const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
11
-
12
- describe('createMasternodeRewardSharesDataTrigger', () => {
13
- let contextMock;
14
- let stateRepositoryMock;
15
- let documentTransition;
16
- let topLevelIdentityId;
17
- let smlStoreMock;
18
- let smlMock;
19
- let documentsFixture;
20
- let executionContext;
21
-
22
- beforeEach(function beforeEach() {
23
- topLevelIdentityId = Buffer.from('c286807d463b06c7aba3b9a60acf64c1fc03da8c1422005cd9b4293f08cf0562', 'hex');
24
-
25
- smlMock = {
26
- getQuorum: this.sinonSandbox.stub(),
27
- toSimplifiedMNListDiff: this.sinonSandbox.stub(),
28
- getQuorumsOfType: this.sinonSandbox.stub(),
29
- getValidMasternodesList: this.sinonSandbox.stub().returns([
30
- new SimplifiedMNListEntry({
31
- proRegTxHash: 'c286807d463b06c7aba3b9a60acf64c1fc03da8c1422005cd9b4293f08cf0562',
32
- confirmedHash: '4eb56228c535db3b234907113fd41d57bcc7cdcb8e0e00e57590af27ee88c119',
33
- service: '192.168.65.2:20101',
34
- pubKeyOperator: '809519c5f6f3be1c08782ac42ae9a83b6c7205eba43f9a96a4f032ec7a73f1a7c25fa78cce0d6d9c135f7e2c28527179',
35
- votingAddress: 'yXmprXYP51uzfMyndtWwxz96MnkCKkFc9x',
36
- nType: 0,
37
- isValid: true,
38
- }),
39
- new SimplifiedMNListEntry({
40
- proRegTxHash: 'a3e1edc6bd352eeaf0ae58e30781ef4b127854241a3fe7fddf36d5b7e1dc2b3f',
41
- confirmedHash: '27a0b637b56af038c45e2fd1f06c2401c8dadfa28ca5e0d19ca836cc984a8378',
42
- service: '192.168.65.2:20201',
43
- pubKeyOperator: '987a4873caba62cd45a2f7d4aa6d94519ee6753e9bef777c927cb94ade768a542b0ff34a93231d3a92b4e75ffdaa366e',
44
- votingAddress: 'ycL7L4mhYoaZdm9TH85svvpfeKtdfo249u',
45
- nType: 0,
46
- isValid: true,
47
- }),
48
- ]),
49
- };
50
-
51
- const dataContract = getMasternodeRewardSharesContractFixture();
52
-
53
- documentsFixture = getMasternodeRewardShareDocumentsFixture(undefined, undefined, dataContract);
54
-
55
- smlStoreMock = {
56
- getSMLbyHeight: this.sinonSandbox.stub().returns(smlMock),
57
- getCurrentSML: this.sinonSandbox.stub().returns(smlMock),
58
- };
59
-
60
- stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
61
- stateRepositoryMock.fetchSMLStore.resolves(smlStoreMock);
62
- stateRepositoryMock.fetchIdentity.resolves(getIdentityFixture());
63
- stateRepositoryMock.fetchDocuments.resolves([]);
64
-
65
- const [document] = getMasternodeRewardShareDocumentsFixture(undefined, undefined, dataContract);
66
-
67
- [documentTransition] = getDocumentTransitionsFixture({
68
- create: [document],
69
- });
70
-
71
- executionContext = new StateTransitionExecutionContext();
72
-
73
- contextMock = {
74
- getStateRepository: () => stateRepositoryMock,
75
- getOwnerId: this.sinonSandbox.stub(),
76
- getDataContract: () => dataContract,
77
- getStateTransitionExecutionContext: () => executionContext,
78
- };
79
- contextMock.getOwnerId.returns(topLevelIdentityId);
80
- });
81
-
82
- it('should return an error if percentage > 10000', async () => {
83
- stateRepositoryMock.fetchDocuments.resolves(documentsFixture);
84
- // documentsFixture contains percentage = 500
85
- documentTransition.data.percentage = 9501;
86
-
87
- const result = await createRewardShareDataTrigger(
88
- documentTransition, contextMock,
89
- );
90
-
91
- expect(result).to.be.an.instanceOf(DataTriggerExecutionResult);
92
- expect(result.isOk()).to.be.false();
93
-
94
- const [error] = result.getErrors();
95
-
96
- expect(error).to.be.an.instanceOf(DataTriggerConditionError);
97
- expect(error.message).to.equal('Percentage can not be more than 10000');
98
-
99
- expect(stateRepositoryMock.fetchSMLStore).to.be.calledOnce();
100
- expect(stateRepositoryMock.fetchIdentity).to.be.calledOnceWithExactly(
101
- documentTransition.data.payToId,
102
- executionContext,
103
- );
104
- });
105
-
106
- it('should return an error if payToId does not exist', async () => {
107
- stateRepositoryMock.fetchIdentity.resolves(null);
108
-
109
- const result = await createRewardShareDataTrigger(
110
- documentTransition, contextMock,
111
- );
112
-
113
- expect(result).to.be.an.instanceOf(DataTriggerExecutionResult);
114
- expect(result.isOk()).to.be.false();
115
-
116
- const [error] = result.getErrors();
117
-
118
- expect(error).to.be.an.instanceOf(DataTriggerConditionError);
119
- expect(error.message).to.equal(`Identity ${documentTransition.data.payToId} doesn't exist`);
120
-
121
- expect(stateRepositoryMock.fetchSMLStore).to.be.calledOnce();
122
- expect(stateRepositoryMock.fetchIdentity).to.be.calledOnceWithExactly(
123
- documentTransition.data.payToId,
124
- executionContext,
125
- );
126
- });
127
-
128
- it('should return an error if ownerId is not a masternode identity', async () => {
129
- contextMock.getOwnerId.returns(getIdentityFixture().getId());
130
-
131
- const result = await createRewardShareDataTrigger(
132
- documentTransition, contextMock,
133
- );
134
-
135
- expect(result).to.be.an.instanceOf(DataTriggerExecutionResult);
136
- expect(result.isOk()).to.be.false();
137
-
138
- const [error] = result.getErrors();
139
-
140
- expect(error).to.be.an.instanceOf(DataTriggerConditionError);
141
- expect(error.message).to.equal('Only masternode identities can share rewards');
142
-
143
- expect(stateRepositoryMock.fetchSMLStore).to.be.calledOnce();
144
- expect(stateRepositoryMock.fetchIdentity).to.be.not.called();
145
- });
146
-
147
- it('should pass', async () => {
148
- const result = await createRewardShareDataTrigger(
149
- documentTransition, contextMock,
150
- );
151
-
152
- expect(result).to.be.an.instanceOf(DataTriggerExecutionResult);
153
- expect(result.isOk()).to.be.true();
154
-
155
- expect(stateRepositoryMock.fetchSMLStore).to.be.calledOnce();
156
- expect(stateRepositoryMock.fetchIdentity).to.be.calledOnceWithExactly(
157
- documentTransition.data.payToId,
158
- executionContext,
159
- );
160
- });
161
-
162
- it('should pass on dry run', async () => {
163
- stateRepositoryMock.fetchIdentity.resolves(null);
164
-
165
- executionContext.enableDryRun();
166
-
167
- const result = await createRewardShareDataTrigger(
168
- documentTransition, contextMock,
169
- );
170
- executionContext.disableDryRun();
171
-
172
- expect(result).to.be.an.instanceOf(DataTriggerExecutionResult);
173
- expect(result.isOk()).to.be.true();
174
- expect(stateRepositoryMock.fetchSMLStore).to.not.be.called();
175
- expect(stateRepositoryMock.fetchIdentity).to.be.calledOnceWithExactly(
176
- documentTransition.data.payToId,
177
- executionContext,
178
- );
179
- });
180
-
181
- it('should return an error if there are 16 stored shares', async () => {
182
- stateRepositoryMock.fetchDocuments.resolves(new Array(16).fill(0));
183
-
184
- const result = await createRewardShareDataTrigger(
185
- documentTransition, contextMock,
186
- );
187
-
188
- expect(result).to.be.an.instanceOf(DataTriggerExecutionResult);
189
- expect(result.isOk()).to.be.false();
190
-
191
- const [error] = result.getErrors();
192
-
193
- expect(error).to.be.an.instanceOf(DataTriggerConditionError);
194
- expect(error.message).to.equal('Reward shares cannot contain more than 16 identities');
195
-
196
- expect(stateRepositoryMock.fetchSMLStore).to.be.calledOnce();
197
- expect(stateRepositoryMock.fetchIdentity).to.be.calledOnceWithExactly(
198
- documentTransition.data.payToId,
199
- executionContext,
200
- );
201
- });
202
- });
@@ -1,69 +0,0 @@
1
- const varint = require('varint');
2
- const { encode } = require('@dashevo/dpp/lib/util/serializer');
3
-
4
- let { decodeProtocolEntity, ProtocolVersionParsingError, SerializedObjectParsingError } = require('../..');
5
- const { default: loadWasmDpp } = require('../..');
6
-
7
- describe('decodeProtocolEntityFactory', () => {
8
- let parsedProtocolVersion;
9
- let entityBuffer;
10
- let protocolVersionBuffer;
11
- let rawEntity;
12
- let buffer;
13
-
14
- beforeEach(async () => {
15
- parsedProtocolVersion = 0;
16
-
17
- protocolVersionBuffer = Buffer.from(varint.encode(parsedProtocolVersion));
18
-
19
- rawEntity = { test: 'successful' };
20
- entityBuffer = encode(rawEntity);
21
-
22
- buffer = Buffer.concat([protocolVersionBuffer, entityBuffer]);
23
-
24
- ({
25
- decodeProtocolEntity,
26
- ProtocolVersionParsingError,
27
- SerializedObjectParsingError,
28
- } = await loadWasmDpp());
29
- });
30
-
31
- it('should throw ProtocolVersionParsingError if can\'t parse protocol version', () => {
32
- buffer = Buffer.alloc(0);
33
-
34
- try {
35
- decodeProtocolEntity(buffer);
36
-
37
- expect.fail('should throw ProtocolVersionParsingError');
38
- } catch (e) {
39
- expect(e).to.be.an.instanceOf(ProtocolVersionParsingError);
40
-
41
- expect(e.getParsingError()).to.equals('protocol version could not be decoded as a varint');
42
- expect(e.getCode()).to.equal(1000);
43
- }
44
- });
45
-
46
- it('should throw SerializedObjectParsingError if entity decoding fails', () => {
47
- entityBuffer = Buffer.from('invalid');
48
-
49
- buffer = Buffer.concat([protocolVersionBuffer, entityBuffer]);
50
-
51
- try {
52
- decodeProtocolEntity(buffer);
53
-
54
- expect.fail('should throw SerializedObjectParsingError');
55
- } catch (e) {
56
- expect(e).to.be.an.instanceOf(SerializedObjectParsingError);
57
-
58
- expect(e.getParsingError()).to.equals('Io(Error { kind: UnexpectedEof, message: "failed to fill whole buffer" })');
59
- expect(e.getCode()).to.equal(1001);
60
- }
61
- });
62
-
63
- it('should decode protocol version and entity successfully', () => {
64
- const [protocolVersion, actualRawEntity] = decodeProtocolEntity(buffer);
65
-
66
- expect(protocolVersion).to.equal(parsedProtocolVersion);
67
- expect(rawEntity).to.deep.equal(actualRawEntity);
68
- });
69
- });
@@ -1,257 +0,0 @@
1
- const DocumentJs = require('@dashevo/dpp/lib/document/Document');
2
- const DocumentsBatchTransitionJs = require(
3
- '@dashevo/dpp/lib/document/stateTransition/DocumentsBatchTransition/DocumentsBatchTransition',
4
- );
5
-
6
- const applyDocumentsBatchTransitionFactory = require(
7
- '@dashevo/dpp/lib/document/stateTransition/DocumentsBatchTransition/applyDocumentsBatchTransitionFactory',
8
- );
9
-
10
- const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
11
- const getDocumentsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentsFixture');
12
- const getDocumentTransitionsFixture = require(
13
- '@dashevo/dpp/lib/test/fixtures/getDocumentTransitionsFixture',
14
- );
15
-
16
- const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
17
-
18
- const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
19
- const StateTransitionExecutionContextJs = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
20
-
21
- const { default: loadWasmDpp } = require('../../../../../dist');
22
-
23
- let ExtendedDocument;
24
- let DocumentsBatchTransition;
25
- let DataContract;
26
- let StateTransitionExecutionContext;
27
- let applyDocumentsBatchTransition;
28
- let DocumentNotProvidedError;
29
-
30
- describe('applyDocumentsBatchTransitionFactory', () => {
31
- let documentsJs;
32
- let dataContractJs;
33
- let dataContract;
34
- let documentTransitionsJs;
35
- let ownerId;
36
- let replaceDocumentJs;
37
- let replaceDocument;
38
- let stateTransitionJs;
39
- let stateTransition;
40
- let documentsFixtureJs;
41
- let documentsFixture;
42
- let applyDocumentsBatchTransitionJs;
43
- let stateRepositoryMockJs;
44
- let stateRepositoryMock;
45
- let fetchExtendedDocumentsMock;
46
- let executionContextJs;
47
- let executionContext;
48
- let blockTimeMs;
49
-
50
- beforeEach(async function beforeEach() {
51
- ({
52
- DataContract,
53
- ExtendedDocument,
54
- DocumentsBatchTransition,
55
- StateTransitionExecutionContext,
56
- applyDocumentsBatchTransition,
57
- // Errors:
58
- DocumentNotProvidedError,
59
- } = await loadWasmDpp());
60
-
61
- dataContractJs = getDataContractFixture();
62
- dataContract = DataContract.fromBuffer(dataContractJs.toBuffer());
63
-
64
- documentsFixtureJs = getDocumentsFixture(dataContractJs);
65
- documentsFixture = documentsFixtureJs.map((d) => {
66
- const doc = new ExtendedDocument(d.toObject(), dataContract);
67
- doc.setEntropy(d.entropy);
68
- return doc;
69
- });
70
-
71
- ownerId = getDocumentsFixture.ownerId;
72
-
73
- replaceDocumentJs = new DocumentJs({
74
- ...documentsFixtureJs[1].toObject(),
75
- lastName: 'NotSoShiny',
76
- }, dataContractJs);
77
-
78
- replaceDocument = new ExtendedDocument({
79
- ...documentsFixture[1].toObject(),
80
- lastName: 'NotSoShiny',
81
- }, dataContract);
82
-
83
- blockTimeMs = Date.now();
84
- documentsJs = [replaceDocumentJs, documentsFixtureJs[2]];
85
- documentTransitionsJs = getDocumentTransitionsFixture({
86
- create: [documentsFixtureJs[0]],
87
- replace: [documentsJs[0]],
88
- delete: [documentsJs[1]],
89
- });
90
-
91
- stateTransitionJs = new DocumentsBatchTransitionJs({
92
- protocolVersion: protocolVersion.latestVersion,
93
- ownerId,
94
- transitions: documentTransitionsJs.map((t) => t.toObject()),
95
- }, [dataContractJs]);
96
-
97
- stateTransition = new DocumentsBatchTransition({
98
- protocolVersion: protocolVersion.latestVersion,
99
- ownerId,
100
- transitions: documentTransitionsJs.map((t) => t.toObject()),
101
- }, [dataContract]);
102
-
103
- executionContextJs = new StateTransitionExecutionContextJs();
104
- executionContext = new StateTransitionExecutionContext();
105
-
106
- stateTransitionJs.setExecutionContext(executionContextJs);
107
-
108
- stateRepositoryMockJs = createStateRepositoryMock(this.sinonSandbox);
109
- stateRepositoryMockJs.fetchDataContract.resolves(dataContractJs);
110
- stateRepositoryMockJs.fetchLatestPlatformBlockTime.resolves(blockTimeMs);
111
-
112
- fetchExtendedDocumentsMock = this.sinonSandbox.stub();
113
- fetchExtendedDocumentsMock.resolves([
114
- replaceDocumentJs,
115
- ]);
116
-
117
- stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
118
- stateRepositoryMock.fetchDataContract.resolves(dataContract);
119
- stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTimeMs);
120
- stateRepositoryMock.updateDocument.resolves(null);
121
- stateRepositoryMock.removeDocument.resolves(null);
122
- stateRepositoryMock.createDocument.resolves(null);
123
- stateRepositoryMock.fetchExtendedDocuments.resolves([replaceDocument]);
124
-
125
- applyDocumentsBatchTransitionJs = applyDocumentsBatchTransitionFactory(
126
- stateRepositoryMockJs,
127
- fetchExtendedDocumentsMock,
128
- );
129
- });
130
-
131
- it('should call `store`, `replace` and `remove` functions for specific type of transitions', async () => {
132
- await applyDocumentsBatchTransitionJs(stateTransitionJs);
133
-
134
- const replaceDocumentTransition = documentTransitionsJs[1];
135
-
136
- expect(fetchExtendedDocumentsMock).to.have.been.calledOnceWithExactly(
137
- [replaceDocumentTransition],
138
- executionContextJs,
139
- );
140
-
141
- expect(stateRepositoryMockJs.createDocument).to.have.been.calledOnce();
142
- expect(stateRepositoryMockJs.updateDocument).to.have.been.calledOnce();
143
-
144
- const callsArgs = [
145
- ...stateRepositoryMockJs.createDocument.getCall(0).args,
146
- ...stateRepositoryMockJs.updateDocument.getCall(0).args,
147
- ];
148
-
149
- expect(callsArgs).to.have.deep.members([
150
- documentsFixtureJs[0],
151
- documentsJs[0],
152
- executionContextJs,
153
- executionContextJs,
154
- ]);
155
-
156
- expect(stateRepositoryMockJs.removeDocument).to.have.been.calledOnceWithExactly(
157
- documentTransitionsJs[2].getDataContract(),
158
- documentTransitionsJs[2].getType(),
159
- documentTransitionsJs[2].getId(),
160
- executionContextJs,
161
- );
162
- });
163
-
164
- it('should call `store`, `replace` and `remove` functions for specific type of transitions - Rust', async () => {
165
- await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition, executionContext);
166
- expect(stateRepositoryMock.createDocument).to.have.been.calledOnce();
167
-
168
- const [fetchContractId, fetchDocumentType] = stateRepositoryMock
169
- .fetchExtendedDocuments.getCall(0).args;
170
- expect(fetchContractId.toBuffer()).to.deep.equal(documentTransitionsJs[1].getDataContractId());
171
- expect(fetchDocumentType).to.equal(documentTransitionsJs[1].getType());
172
-
173
- expect(stateRepositoryMock.updateDocument).to.have.been.calledOnce();
174
- expect(stateRepositoryMock.fetchExtendedDocuments).to.have.been.calledOnce();
175
-
176
- const [createDocument] = stateRepositoryMock.createDocument.getCall(0).args;
177
- const [updateDocument] = stateRepositoryMock.updateDocument.getCall(0).args;
178
- const [
179
- deleteDataContract,
180
- deleteDocumentType,
181
- deleteDocumentId,
182
- ] = stateRepositoryMock.removeDocument.getCall(0).args;
183
-
184
- expect(createDocument.toObject()).to.deep.equal(documentsFixtureJs[0].toObject());
185
- const expectDocument = documentsJs[0].toJSON();
186
-
187
- // ! Why we need to replace. Apparently, `applyDocumentsTransition` somehow
188
- // ! modifies `documentsJs` and increments revision and $updatedAt. I have
189
- // ! no clue how it's possible.
190
- expectDocument.$updatedAt = documentTransitionsJs[1].toJSON().$updatedAt;
191
- expectDocument.$revision = documentTransitionsJs[1].toJSON().$revision;
192
- expect(updateDocument.toJSON()).to.deep.equal(expectDocument);
193
-
194
- expect(deleteDataContract.toObject()).to.deep.equal(dataContract.toObject());
195
- expect(deleteDocumentType).to.deep.equal(documentTransitionsJs[2].getType());
196
- expect(deleteDocumentId.toBuffer()).to.deep.equal(documentTransitionsJs[2].getId());
197
- });
198
-
199
- it('should throw an error if document was not provided for a replacement - Rust', async () => {
200
- stateRepositoryMock.fetchExtendedDocuments.resolves([]);
201
-
202
- const replaceDocumentTransition = documentTransitionsJs[1];
203
-
204
- try {
205
- await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition, executionContext);
206
- expect.fail('Error was not thrown');
207
- } catch (e) {
208
- expect(e).to.be.an.instanceOf(DocumentNotProvidedError);
209
- expect(e.getDocumentTransition().toObject())
210
- .to.deep.equal(replaceDocumentTransition.toObject());
211
- }
212
- });
213
-
214
- it('should call `replace` functions on dry run - Rust', async function test() {
215
- this.timeout(10000);
216
- stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTimeMs);
217
- documentTransitionsJs = getDocumentTransitionsFixture({
218
- create: [],
219
- replace: [documentsJs[0]],
220
- delete: [],
221
- });
222
-
223
- stateTransition = new DocumentsBatchTransition({
224
- protocolVersion: protocolVersion.latestVersion,
225
- ownerId,
226
- transitions: documentTransitionsJs.map((t) => t.toObject()),
227
- }, [dataContract]);
228
-
229
- executionContext.enableDryRun();
230
-
231
- await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition, executionContext);
232
-
233
- executionContext.disableDryRun();
234
-
235
- const [documentTransition] = stateTransition.getTransitions();
236
-
237
- // the owner_id are 0s in dry_run
238
- const newDocument = new ExtendedDocument({
239
- $protocolVersion: stateTransitionJs.getProtocolVersion(),
240
- $id: documentTransition.getId(),
241
- $type: documentTransition.getType(),
242
- $dataContractId: documentTransition.getDataContractId(),
243
- $ownerId: ownerId,
244
- $createdAt: documentTransition.getUpdatedAt().getTime(),
245
- ...documentTransition.getData(),
246
- }, documentTransition.getDataContract());
247
-
248
- newDocument.setRevision(documentTransition.getRevision());
249
- newDocument.setData(documentTransition.getData());
250
- newDocument.setUpdatedAt(documentTransition.getUpdatedAt());
251
-
252
- expect(stateRepositoryMock.updateDocument).to.have.been.called.calledOnce();
253
- const [updateDocument] = stateRepositoryMock.updateDocument.getCall(0).args;
254
-
255
- expect(updateDocument.toObject()).to.be.deep.equal(newDocument.toObject());
256
- });
257
- });
@@ -1,94 +0,0 @@
1
- const getDocumentsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentsFixture');
2
- const getDocumentTransitionsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentTransitionsFixture');
3
-
4
- const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
5
-
6
- const generateRandomIdentifierJs = require('@dashevo/dpp/lib/test/utils/generateRandomIdentifier');
7
-
8
- const sinon = require('sinon');
9
- const { default: loadWasmDpp } = require('../../../../../../../dist');
10
-
11
- let Identifier;
12
- let DataContract;
13
- let fetchExtendedDocuments;
14
- let DocumentTransition;
15
- let DocumentCreateTransition;
16
- let StateTransitionExecutionContext;
17
- let ExtendedDocument;
18
-
19
- describe('fetchDocumentsFactory', () => {
20
- let stateRepositoryMock;
21
- let documentTransitionsJs;
22
- let documentTransitions;
23
- let documentsJs;
24
- let documents;
25
- let executionContext;
26
-
27
- beforeEach(async function beforeEach() {
28
- ({
29
- Identifier,
30
- DataContract,
31
- DocumentTransition,
32
- DocumentCreateTransition,
33
- StateTransitionExecutionContext,
34
- fetchExtendedDocuments,
35
- ExtendedDocument,
36
- } = await loadWasmDpp());
37
-
38
- stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
39
-
40
- executionContext = new StateTransitionExecutionContext();
41
-
42
- documentsJs = getDocumentsFixture().slice(0, 5);
43
- const dataContractBuffer = documentsJs[0].dataContract.toBuffer();
44
- const dataContract = DataContract.fromBuffer(dataContractBuffer);
45
-
46
- documents = documentsJs.map((document) => {
47
- document.toObject();
48
-
49
- return new ExtendedDocument(
50
- document.toObject(), dataContract.clone(), // document.getType(),
51
- );
52
- });
53
- documentTransitionsJs = getDocumentTransitionsFixture({
54
- create: documentsJs,
55
- });
56
- documentTransitions = documentTransitionsJs.map(
57
- (transition) => DocumentTransition.fromTransitionCreate(
58
- new DocumentCreateTransition(
59
- transition.toObject(), dataContract.clone(),
60
- ),
61
- ),
62
- );
63
- });
64
-
65
- it('should fetch specified Documents using StateRepository - Rust', async () => {
66
- const firstDocumentDataContractId = generateRandomIdentifierJs().toBuffer();
67
-
68
- documentTransitions[0].setDataContractId(firstDocumentDataContractId);
69
- documents[0].setDataContractId(firstDocumentDataContractId);
70
-
71
- stateRepositoryMock.fetchExtendedDocuments.withArgs(
72
- sinon.match.instanceOf(Identifier),
73
- documentTransitions[0].getType(),
74
- ).resolves([documents[0]]);
75
-
76
- stateRepositoryMock.fetchExtendedDocuments.withArgs(
77
- sinon.match.instanceOf(Identifier),
78
- documentTransitions[1].getType(),
79
- ).resolves([documents[1], documents[2]]);
80
-
81
- stateRepositoryMock.fetchExtendedDocuments.withArgs(
82
- sinon.match.instanceOf(Identifier),
83
- documentTransitionsJs[3].getType(),
84
- ).resolves([documents[3], documents[4]]);
85
-
86
- await fetchExtendedDocuments(
87
- stateRepositoryMock,
88
- documentTransitions,
89
- executionContext,
90
- );
91
-
92
- expect(stateRepositoryMock.fetchExtendedDocuments).to.have.been.calledThrice();
93
- });
94
- });