@dashevo/wasm-dpp 0.25.0-dev.9 → 0.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -8,26 +8,29 @@ use wasm_bindgen::prelude::*;
8
8
 
9
9
  use crate::buffer::Buffer;
10
10
 
11
+ use crate::data_contract::DataContractWasm;
11
12
  use crate::identifier::IdentifierWrapper;
12
13
  use crate::lodash::lodash_set;
13
14
  use crate::utils::WithJsError;
14
15
  use crate::utils::{with_serde_to_json_value, ToSerdeJSONExt};
15
16
  use crate::with_js_error;
16
- use crate::DataContractWasm;
17
-
17
+ use dpp::document::document_methods::DocumentMethodsV0;
18
+ use dpp::document::DocumentV0Getters;
18
19
  pub mod errors;
19
20
  pub use state_transition::*;
20
21
  pub mod document_facade;
21
22
  mod extended_document;
22
- mod factory;
23
- pub mod fetch_and_validate_data_contract;
23
+ pub mod factory;
24
+ // pub mod fetch_and_validate_data_contract;
24
25
  pub mod generate_document_id;
25
26
  pub mod state_transition;
26
- mod validator;
27
+ // mod validator;
27
28
 
28
- pub use document_batch_transition::DocumentsBatchTransitionWasm;
29
+ // pub use document_batch_transition::DocumentsBatchTransitionWasm;
29
30
 
30
- use dpp::document::{Document, EXTENDED_DOCUMENT_IDENTIFIER_FIELDS, IDENTIFIER_FIELDS};
31
+ use dpp::document::{
32
+ Document, DocumentV0Setters, EXTENDED_DOCUMENT_IDENTIFIER_FIELDS, IDENTIFIER_FIELDS,
33
+ };
31
34
 
32
35
  pub use extended_document::ExtendedDocumentWasm;
33
36
 
@@ -38,9 +41,12 @@ use dpp::platform_value::converter::serde_json::BTreeValueJsonConverter;
38
41
  use dpp::platform_value::ReplacementType;
39
42
  use dpp::platform_value::Value;
40
43
  use dpp::{platform_value, ProtocolError};
41
- pub use factory::DocumentFactoryWASM;
44
+
45
+ use dpp::data_contract::accessors::v0::DataContractV0Getters;
46
+ use dpp::data_contract::document_type::accessors::DocumentTypeV0Getters;
47
+ use dpp::document::serialization_traits::DocumentPlatformValueMethodsV0;
48
+ use dpp::version::PlatformVersion;
42
49
  use serde_json::Value as JsonValue;
43
- pub use validator::DocumentValidatorWasm;
44
50
 
45
51
  #[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
46
52
  #[serde(rename_all = "camelCase")]
@@ -77,67 +83,70 @@ impl DocumentWasm {
77
83
  ))
78
84
  .with_js_error()?;
79
85
 
80
- let (identifier_paths, _) = js_data_contract
86
+ let document_type = js_data_contract
81
87
  .inner()
82
- .get_identifiers_and_binary_paths(document_type_name.as_str())
88
+ .document_type_for_name(document_type_name.as_str())
83
89
  .with_js_error()?;
84
90
 
91
+ let identifier_paths = document_type.identifier_paths().iter().map(|s| s.as_str());
92
+
85
93
  // TODO: figure out a better way to replace identifiers
86
94
  raw_document
87
95
  .replace_at_paths(
88
- identifier_paths
89
- .into_iter()
90
- .chain(EXTENDED_DOCUMENT_IDENTIFIER_FIELDS),
96
+ identifier_paths.chain(EXTENDED_DOCUMENT_IDENTIFIER_FIELDS),
91
97
  ReplacementType::Identifier,
92
98
  )
93
99
  .map_err(ProtocolError::ValueError)
94
100
  .with_js_error()?;
95
101
  // The binary paths are not being converted, because they always should be a `Buffer`. `Buffer` is always an Array
96
102
 
97
- let document = Document::from_platform_value(raw_document).with_js_error()?;
103
+ let document = Document::from_platform_value(raw_document, PlatformVersion::first())
104
+ .with_js_error()?;
98
105
 
99
106
  Ok(document.into())
100
107
  }
101
108
 
102
109
  #[wasm_bindgen(js_name=getId)]
103
110
  pub fn get_id(&self) -> IdentifierWrapper {
104
- self.0.id.into()
111
+ self.0.id().into()
105
112
  }
106
113
 
107
114
  #[wasm_bindgen(js_name=setId)]
108
115
  pub fn set_id(&mut self, js_id: IdentifierWrapper) {
109
- self.0.id = js_id.into();
116
+ self.0.set_id(js_id.into());
110
117
  }
111
118
 
112
119
  #[wasm_bindgen(js_name=setOwnerId)]
113
120
  pub fn set_owner_id(&mut self, owner_id: IdentifierWrapper) {
114
- self.0.owner_id = owner_id.into();
121
+ self.0.set_owner_id(owner_id.into());
115
122
  }
116
123
 
117
124
  #[wasm_bindgen(js_name=getOwnerId)]
118
125
  pub fn get_owner_id(&self) -> IdentifierWrapper {
119
- self.0.owner_id.into()
126
+ self.0.owner_id().into()
120
127
  }
121
128
 
122
129
  #[wasm_bindgen(js_name=setRevision)]
123
130
  pub fn set_revision(&mut self, revision: Option<u32>) {
124
131
  // TODO: JS feeding Number here (u32). Is it okay to cast u32 to u64?
125
- self.0.revision = revision.map(|r| r as u64);
132
+ self.0.set_revision(revision.map(|r| r as u64));
126
133
  }
127
134
 
128
135
  #[wasm_bindgen(js_name=getRevision)]
129
136
  pub fn get_revision(&self) -> Option<u32> {
130
137
  // TODO: JS tests expecting Number (u32). Is it okay to cast u64 to u32 here?
131
- self.0.revision.map(|r| r as u32)
138
+ self.0.revision().map(|r| r as u32)
132
139
  }
133
140
 
134
141
  #[wasm_bindgen(js_name=setData)]
135
142
  pub fn set_data(&mut self, d: JsValue) -> Result<(), JsValue> {
136
143
  let properties_as_value = d.with_serde_to_platform_value()?;
137
- self.0.properties = properties_as_value
138
- .into_btree_string_map()
139
- .map_err(ProtocolError::ValueError)
140
- .with_js_error()?;
144
+ self.0.set_properties(
145
+ properties_as_value
146
+ .into_btree_string_map()
147
+ .map_err(ProtocolError::ValueError)
148
+ .with_js_error()?,
149
+ );
141
150
  Ok(())
142
151
  }
143
152
 
@@ -145,7 +154,7 @@ impl DocumentWasm {
145
154
  pub fn get_data(&mut self) -> Result<JsValue, JsValue> {
146
155
  let json_value: JsonValue = self
147
156
  .0
148
- .properties
157
+ .properties()
149
158
  .to_json_value()
150
159
  .map_err(ProtocolError::ValueError)
151
160
  .with_js_error()?;
@@ -198,87 +207,89 @@ impl DocumentWasm {
198
207
 
199
208
  #[wasm_bindgen(js_name=setCreatedAt)]
200
209
  pub fn set_created_at(&mut self, created_at: Option<js_sys::Date>) {
201
- self.0.created_at = created_at.map(|timestamp| timestamp.get_time() as TimestampMillis);
210
+ self.0
211
+ .set_created_at(created_at.map(|timestamp| timestamp.get_time() as TimestampMillis));
202
212
  }
203
213
 
204
214
  #[wasm_bindgen(js_name=setUpdatedAt)]
205
215
  pub fn set_updated_at(&mut self, updated_at: Option<js_sys::Date>) {
206
- self.0.updated_at = updated_at.map(|timestamp| timestamp.get_time() as TimestampMillis);
216
+ self.0
217
+ .set_updated_at(updated_at.map(|timestamp| timestamp.get_time() as TimestampMillis));
207
218
  }
208
219
 
209
220
  #[wasm_bindgen(js_name=getCreatedAt)]
210
221
  pub fn get_created_at(&self) -> Option<js_sys::Date> {
211
222
  self.0
212
- .created_at
223
+ .created_at()
213
224
  .map(|v| js_sys::Date::new(&JsValue::from_f64(v as f64)))
214
225
  }
215
226
 
216
227
  #[wasm_bindgen(js_name=getUpdatedAt)]
217
228
  pub fn get_updated_at(&self) -> Option<js_sys::Date> {
218
229
  self.0
219
- .updated_at
230
+ .updated_at()
220
231
  .map(|v| js_sys::Date::new(&JsValue::from_f64(v as f64)))
221
232
  }
222
233
 
223
- #[wasm_bindgen(js_name=toObject)]
224
- pub fn to_object(
225
- &self,
226
- options: &JsValue,
227
- data_contract: &DataContractWasm,
228
- document_type_name: &str,
229
- ) -> Result<JsValue, JsValue> {
230
- let options: ConversionOptions = if !options.is_undefined() && options.is_object() {
231
- let raw_options = options.with_serde_to_platform_value()?;
232
- platform_value::from_value(raw_options)
233
- .map_err(ProtocolError::ValueError)
234
- .with_js_error()?
235
- } else {
236
- Default::default()
237
- };
238
- let mut value = self.0.to_object().with_js_error()?;
239
-
240
- let (identifiers_paths, binary_paths) =
241
- Document::get_identifiers_and_binary_paths(&data_contract.0, document_type_name)
242
- .with_js_error()?;
243
- let serializer = serde_wasm_bindgen::Serializer::json_compatible();
244
- let js_value = value.serialize(&serializer)?;
245
-
246
- for path in identifiers_paths.into_iter().chain(IDENTIFIER_FIELDS) {
247
- if let Ok(bytes) = value.remove_value_at_path_as_bytes(path) {
248
- let buffer = Buffer::from_bytes_owned(bytes);
249
- if !options.skip_identifiers_conversion {
250
- lodash_set(&js_value, path, buffer.into());
251
- } else {
252
- let id = IdentifierWrapper::new(buffer.into());
253
- lodash_set(&js_value, path, id.into());
254
- }
255
- }
256
- }
257
-
258
- for path in binary_paths {
259
- if let Ok(bytes) = value.remove_value_at_path_as_bytes(path) {
260
- let buffer = Buffer::from_bytes_owned(bytes);
261
- lodash_set(&js_value, path, buffer.into());
262
- }
263
- }
264
-
265
- Ok(js_value)
266
- }
267
-
268
- #[wasm_bindgen(js_name=toJSON)]
269
- pub fn to_json(&self) -> Result<JsValue, JsValue> {
270
- let value = self.0.to_cbor().with_js_error()?;
271
- let serializer = serde_wasm_bindgen::Serializer::json_compatible();
272
-
273
- with_js_error!(value.serialize(&serializer))
274
- }
275
-
276
- #[wasm_bindgen(js_name=toBuffer)]
277
- pub fn to_buffer(&self) -> Result<Buffer, JsValue> {
278
- let bytes = self.0.to_cbor().with_js_error()?;
279
-
280
- Ok(Buffer::from_bytes(&bytes))
281
- }
234
+ // #[wasm_bindgen(js_name=toObject)]
235
+ // pub fn to_object(
236
+ // &self,
237
+ // options: &JsValue,
238
+ // data_contract: &DataContractWasm,
239
+ // document_type_name: &str,
240
+ // ) -> Result<JsValue, JsValue> {
241
+ // let options: ConversionOptions = if !options.is_undefined() && options.is_object() {
242
+ // let raw_options = options.with_serde_to_platform_value()?;
243
+ // platform_value::from_value(raw_options)
244
+ // .map_err(ProtocolError::ValueError)
245
+ // .with_js_error()?
246
+ // } else {
247
+ // Default::default()
248
+ // };
249
+ // let mut value = self.0.to_object().with_js_error()?;
250
+ //
251
+ // let (identifiers_paths, binary_paths) =
252
+ // Document::get_identifiers_and_binary_paths(data_contract.inner(), document_type_name)
253
+ // .with_js_error()?;
254
+ // let serializer = serde_wasm_bindgen::Serializer::json_compatible();
255
+ // let js_value = value.serialize(&serializer)?;
256
+ //
257
+ // for path in identifiers_paths.into_iter().chain(IDENTIFIER_FIELDS) {
258
+ // if let Ok(bytes) = value.remove_value_at_path_as_bytes(path) {
259
+ // let buffer = Buffer::from_bytes_owned(bytes);
260
+ // if !options.skip_identifiers_conversion {
261
+ // lodash_set(&js_value, path, buffer.into());
262
+ // } else {
263
+ // let id = IdentifierWrapper::new(buffer.into());
264
+ // lodash_set(&js_value, path, id.into());
265
+ // }
266
+ // }
267
+ // }
268
+ //
269
+ // for path in binary_paths {
270
+ // if let Ok(bytes) = value.remove_value_at_path_as_bytes(path) {
271
+ // let buffer = Buffer::from_bytes_owned(bytes);
272
+ // lodash_set(&js_value, path, buffer.into());
273
+ // }
274
+ // }
275
+ //
276
+ // Ok(js_value)
277
+ // }
278
+ //
279
+ // #[wasm_bindgen(js_name=toJSON)]
280
+ // pub fn to_json(&self) -> Result<JsValue, JsValue> {
281
+ // let value = self.0.to_cbor().with_js_error()?;
282
+ // let serializer = serde_wasm_bindgen::Serializer::json_compatible();
283
+ //
284
+ // with_js_error!(value.serialize(&serializer))
285
+ // }
286
+ //
287
+ // #[wasm_bindgen(js_name=toBuffer)]
288
+ // pub fn to_buffer(&self) -> Result<Buffer, JsValue> {
289
+ // let bytes = self.0.to_cbor().with_js_error()?;
290
+ //
291
+ // Ok(Buffer::from_bytes(&bytes))
292
+ // }
282
293
 
283
294
  #[wasm_bindgen(js_name=hash)]
284
295
  pub fn hash(
@@ -287,12 +298,16 @@ impl DocumentWasm {
287
298
  document_type_name: String,
288
299
  ) -> Result<Buffer, JsValue> {
289
300
  let document_type = data_contract
290
- .0
301
+ .inner()
291
302
  .document_type_for_name(document_type_name.as_str())
292
303
  .with_js_error()?;
293
304
  let bytes = self
294
305
  .0
295
- .hash(&data_contract.0, document_type)
306
+ .hash(
307
+ data_contract.inner(),
308
+ document_type,
309
+ PlatformVersion::first(),
310
+ )
296
311
  .with_js_error()?;
297
312
  Ok(Buffer::from_bytes(&bytes))
298
313
  }
@@ -309,72 +324,71 @@ impl DocumentWasm {
309
324
  path: &String,
310
325
  data_contract: &DataContractWasm,
311
326
  document_type_name: String,
312
- ) -> BinaryType {
313
- let maybe_binary_properties = data_contract
314
- .0
315
- .get_binary_properties(document_type_name.as_str());
327
+ ) -> Result<BinaryType, JsValue> {
328
+ let document_type = data_contract
329
+ .inner()
330
+ .document_type_for_name(document_type_name.as_str())
331
+ .with_js_error()?;
316
332
 
317
- if let Ok(binary_properties) = maybe_binary_properties {
318
- if let Some(data) = binary_properties.get(path) {
319
- if data.is_type_of_identifier() {
320
- return BinaryType::Identifier;
321
- }
322
- return BinaryType::Buffer;
323
- }
333
+ if document_type.binary_paths().contains(path) {
334
+ Ok(BinaryType::Buffer)
335
+ } else if document_type.identifier_paths().contains(path) {
336
+ Ok(BinaryType::Identifier)
337
+ } else {
338
+ Ok(BinaryType::None)
324
339
  }
325
- BinaryType::None
326
340
  }
327
341
  }
328
342
 
329
343
  /// document's dynamic data, regardless they are identifiers or binary, they should
330
344
  /// be stored as arrays of int
331
- pub(crate) fn document_data_to_bytes(
332
- document: &mut Document,
333
- contract: &DataContract,
334
- document_type: &str,
335
- ) -> Result<(), JsValue> {
336
- let (identifier_paths, binary_paths): (Vec<_>, Vec<_>) = contract
337
- .get_identifiers_and_binary_paths_owned(document_type)
338
- .with_js_error()?;
339
- document
340
- .properties
341
- .replace_at_paths(identifier_paths, ReplacementType::Identifier)
342
- .map_err(ProtocolError::ValueError)
343
- .with_js_error()?;
344
- document
345
- .properties
346
- .replace_at_paths(binary_paths, ReplacementType::BinaryBytes)
347
- .map_err(ProtocolError::ValueError)
348
- .with_js_error()?;
349
- Ok(())
350
- }
351
-
352
- pub(crate) fn raw_document_from_js_value(
353
- js_raw_document: &JsValue,
354
- data_contract: &DataContract,
355
- ) -> Result<Value, JsValue> {
356
- let mut raw_document = js_raw_document.with_serde_to_platform_value()?;
357
-
358
- let document_type_name = raw_document
359
- .get_str(property_names::DOCUMENT_TYPE)
360
- .map_err(ProtocolError::ValueError)
361
- .with_js_error()?;
362
-
363
- let (identifier_paths, binary_paths) = data_contract
364
- .get_identifiers_and_binary_paths(document_type_name)
365
- .with_js_error()?;
366
-
367
- raw_document
368
- .replace_at_paths(identifier_paths, ReplacementType::Identifier)
369
- .map_err(ProtocolError::ValueError)
370
- .with_js_error()?;
371
- raw_document
372
- .replace_at_paths(binary_paths, ReplacementType::BinaryBytes)
373
- .map_err(ProtocolError::ValueError)
374
- .with_js_error()?;
375
-
376
- Ok(raw_document)
377
- }
345
+ // pub(crate) fn document_data_to_bytes(
346
+ // document: &mut Document,
347
+ // contract: &DataContract,
348
+ // document_type: &str,
349
+ // ) -> Result<(), JsValue> {
350
+ // let (identifier_paths, binary_paths): (Vec<_>, Vec<_>) = contract
351
+ // .get_identifiers_and_binary_paths_owned(document_type)
352
+ // .with_js_error()?;
353
+ // document
354
+ // .properties()
355
+ // .replace_at_paths(identifier_paths, ReplacementType::Identifier)
356
+ // .map_err(ProtocolError::ValueError)
357
+ // .with_js_error()?;
358
+ // document
359
+ // .properties()
360
+ // .replace_at_paths(binary_paths, ReplacementType::BinaryBytes)
361
+ // .map_err(ProtocolError::ValueError)
362
+ // .with_js_error()?;
363
+ // Ok(())
364
+ // }
365
+
366
+ // pub(crate) fn raw_document_from_js_value(
367
+ // js_raw_document: &JsValue,
368
+ // data_contract: &DataContract,
369
+ // ) -> Result<Value, JsValue> {
370
+ // let mut raw_document = js_raw_document.with_serde_to_platform_value()?;
371
+ //
372
+ // let document_type_name = raw_document
373
+ // .get_str(property_names::DOCUMENT_TYPE_NAME)
374
+ // .map_err(ProtocolError::ValueError)
375
+ // .with_js_error()?;
376
+ //
377
+ // let (identifier_paths, binary_paths) = data_contract
378
+ // .get_identifiers_and_binary_paths(document_type_name)
379
+ // .with_js_error()?;
380
+ //
381
+ // raw_document
382
+ // .replace_at_paths(identifier_paths, ReplacementType::Identifier)
383
+ // .map_err(ProtocolError::ValueError)
384
+ // .with_js_error()?;
385
+ // raw_document
386
+ // .replace_at_paths(binary_paths, ReplacementType::BinaryBytes)
387
+ // .map_err(ProtocolError::ValueError)
388
+ // .with_js_error()?;
389
+ //
390
+ // Ok(raw_document)
391
+ // }
378
392
 
379
393
  impl From<Document> for DocumentWasm {
380
394
  fn from(d: Document) -> Self {
@@ -1,19 +1,27 @@
1
1
  use std::convert;
2
2
  use std::convert::TryInto;
3
3
 
4
- use dpp::document::document_transition::document_base_transition::JsonValue;
4
+ use serde_json::Value as JsonValue;
5
5
 
6
+ use dpp::data_contract::accessors::v0::DataContractV0Getters;
7
+ use dpp::data_contract::document_type::accessors::DocumentTypeV0Getters;
6
8
  use dpp::platform_value::btreemap_extensions::{
7
9
  BTreeValueMapHelper, BTreeValueMapPathHelper, BTreeValueMapReplacementPathHelper,
8
10
  };
9
11
  use dpp::platform_value::converter::serde_json::BTreeValueJsonConverter;
10
12
  use dpp::platform_value::ReplacementType;
11
13
  use dpp::prelude::Revision;
14
+ use dpp::state_transition::documents_batch_transition::document_base_transition::v0::v0_methods::DocumentBaseTransitionV0Methods;
15
+ use dpp::state_transition::documents_batch_transition::document_base_transition::v0::DocumentTransitionObjectLike;
16
+ use dpp::state_transition::documents_batch_transition::document_create_transition::v0::v0_methods::DocumentCreateTransitionV0Methods;
17
+ use dpp::state_transition::documents_batch_transition::document_create_transition::DocumentCreateTransition;
18
+ use dpp::state_transition::documents_batch_transition::document_transition::action_type::DocumentTransitionActionType;
12
19
  use dpp::{
13
- document::document_transition::{
14
- self, document_create_transition, DocumentCreateTransition, DocumentTransitionObjectLike,
15
- },
20
+ document::INITIAL_REVISION,
16
21
  prelude::{DataContract, Identifier},
22
+ state_transition::documents_batch_transition::{
23
+ document_create_transition, DocumentsBatchTransition,
24
+ },
17
25
  util::json_schema::JsonSchemaExt,
18
26
  ProtocolError,
19
27
  };
@@ -22,13 +30,15 @@ use wasm_bindgen::prelude::*;
22
30
 
23
31
  use crate::{
24
32
  buffer::Buffer,
25
- document_batch_transition::document_transition::to_object,
33
+ document::document_batch_transition::document_transition::to_object,
26
34
  identifier::IdentifierWrapper,
27
35
  lodash::lodash_set,
28
36
  utils::{ToSerdeJSONExt, WithJsError},
29
- BinaryType, DataContractWasm,
30
37
  };
31
38
 
39
+ use crate::data_contract::DataContractWasm;
40
+ use crate::document::BinaryType;
41
+
32
42
  #[wasm_bindgen(js_name=DocumentCreateTransition)]
33
43
  #[derive(Debug, Clone)]
34
44
  pub struct DocumentCreateTransitionWasm {
@@ -50,24 +60,24 @@ impl From<DocumentCreateTransitionWasm> for DocumentCreateTransition {
50
60
  #[wasm_bindgen(js_class=DocumentCreateTransition)]
51
61
  impl DocumentCreateTransitionWasm {
52
62
  #[wasm_bindgen(constructor)]
53
- pub fn from_raw_object(
63
+ pub fn from_object(
54
64
  raw_object: JsValue,
55
65
  data_contract: &DataContractWasm,
56
66
  ) -> Result<DocumentCreateTransitionWasm, JsValue> {
57
67
  let data_contract: DataContract = data_contract.clone().into();
58
68
  let mut value = raw_object.with_serde_to_platform_value_map()?;
59
- let document_type = value
60
- .get_string(dpp::document::extended_document::property_names::DOCUMENT_TYPE)
61
- .map_err(ProtocolError::ValueError)
62
- .with_js_error()?;
63
-
64
- let (identifier_paths, _): (Vec<_>, Vec<_>) = data_contract
65
- .get_identifiers_and_binary_paths_owned(document_type.as_str())
66
- .with_js_error()?;
67
- value
68
- .replace_at_paths(identifier_paths, ReplacementType::Identifier)
69
- .map_err(ProtocolError::ValueError)
70
- .with_js_error()?;
69
+ // let document_type = value
70
+ // .get_string(dpp::document::extended_document::property_names::DOCUMENT_TYPE_NAME)
71
+ // .map_err(ProtocolError::ValueError)
72
+ // .with_js_error()?;
73
+ //
74
+ // let (identifier_paths, _): (Vec<_>, Vec<_>) = data_contract
75
+ // .get_identifiers_and_binary_paths_owned(document_type.as_str())
76
+ // .with_js_error()?;
77
+ // value
78
+ // .replace_at_paths(identifier_paths, ReplacementType::Identifier)
79
+ // .map_err(ProtocolError::ValueError)
80
+ // .with_js_error()?;
71
81
  let transition =
72
82
  DocumentCreateTransition::from_value_map(value, data_contract).with_js_error()?;
73
83
 
@@ -77,61 +87,52 @@ impl DocumentCreateTransitionWasm {
77
87
  // DocumentCreateTransition
78
88
  #[wasm_bindgen(js_name=getEntropy)]
79
89
  pub fn entropy(&self) -> Vec<u8> {
80
- self.inner.entropy.to_vec()
90
+ self.inner.entropy().to_vec()
81
91
  }
82
92
 
83
93
  #[wasm_bindgen(js_name=getCreatedAt)]
84
94
  pub fn created_at(&self) -> Option<js_sys::Date> {
85
95
  self.inner
86
- .created_at
96
+ .created_at()
87
97
  .map(|timestamp| js_sys::Date::new(&JsValue::from_f64(timestamp as f64)))
88
98
  }
89
99
 
90
100
  #[wasm_bindgen(js_name=getUpdatedAt)]
91
101
  pub fn updated_at(&self) -> Option<js_sys::Date> {
92
102
  self.inner
93
- .updated_at
103
+ .updated_at()
94
104
  .map(|timestamp| js_sys::Date::new(&JsValue::from_f64(timestamp as f64)))
95
105
  }
96
106
 
97
107
  #[wasm_bindgen(js_name=getRevision)]
98
108
  pub fn revision(&self) -> Revision {
99
- document_transition::INITIAL_REVISION
109
+ INITIAL_REVISION
100
110
  }
101
111
 
102
112
  // AbstractDocumentTransitionMethods
103
113
  #[wasm_bindgen(js_name=getId)]
104
114
  pub fn id(&self) -> IdentifierWrapper {
105
- self.inner.base.id.into()
115
+ self.inner.base().id().into()
106
116
  }
107
117
 
108
118
  #[wasm_bindgen(js_name=getType)]
109
119
  pub fn document_type(&self) -> String {
110
- self.inner.base.document_type_name.clone()
120
+ self.inner.base().document_type_name().clone()
111
121
  }
112
122
 
113
123
  #[wasm_bindgen(js_name=getAction)]
114
124
  pub fn action(&self) -> u8 {
115
- self.inner.base.action as u8
116
- }
117
-
118
- #[wasm_bindgen(js_name=getDataContract)]
119
- pub fn data_contract(&self) -> DataContractWasm {
120
- self.inner.base.data_contract.clone().into()
125
+ DocumentTransitionActionType::Create as u8
121
126
  }
122
127
 
123
128
  #[wasm_bindgen(js_name=getDataContractId)]
124
129
  pub fn data_contract_id(&self) -> IdentifierWrapper {
125
- self.inner.base.data_contract.id.into()
130
+ self.inner.base().data_contract_id().into()
126
131
  }
127
132
 
128
133
  #[wasm_bindgen]
129
- pub fn get(&self, path: String) -> Result<JsValue, JsValue> {
130
- let document_data = if let Some(ref data) = self.inner.data {
131
- data
132
- } else {
133
- return Ok(JsValue::undefined());
134
- };
134
+ pub fn get(&self, path: String, data_contract: &DataContractWasm) -> Result<JsValue, JsValue> {
135
+ let document_data = self.inner.data();
135
136
 
136
137
  let value = if let Ok(value) = document_data.get_at_path(&path) {
137
138
  value.clone()
@@ -174,12 +175,13 @@ impl DocumentCreateTransitionWasm {
174
175
  .map_err(ProtocolError::ValueError)
175
176
  .with_js_error()?;
176
177
  let js_value = json_value.serialize(&serde_wasm_bindgen::Serializer::json_compatible())?;
177
- let (identifier_paths, binary_paths) = self
178
- .inner
179
- .base
180
- .data_contract
181
- .get_identifiers_and_binary_paths(&self.inner.base.document_type_name)
178
+
179
+ let document_type = data_contract
180
+ .inner()
181
+ .document_type_for_name(self.inner.base().document_type_name())
182
182
  .with_js_error()?;
183
+ let identifier_paths = document_type.identifier_paths();
184
+ let binary_paths = document_type.binary_paths();
183
185
 
184
186
  for property_path in identifier_paths {
185
187
  if property_path.starts_with(&path) {
@@ -220,9 +222,9 @@ impl DocumentCreateTransitionWasm {
220
222
  pub fn to_object(&self, options: &JsValue) -> Result<JsValue, JsValue> {
221
223
  let (identifiers_paths, binary_paths) = self
222
224
  .inner
223
- .base
225
+ .base()
224
226
  .data_contract
225
- .get_identifiers_and_binary_paths(&self.inner.base.document_type_name)
227
+ .get_identifiers_and_binary_paths(&self.inner.base().document_type_name)
226
228
  .with_js_error()?;
227
229
 
228
230
  to_object(
@@ -230,10 +232,10 @@ impl DocumentCreateTransitionWasm {
230
232
  options,
231
233
  identifiers_paths
232
234
  .into_iter()
233
- .chain(document_create_transition::IDENTIFIER_FIELDS),
235
+ .chain(document_create_transition::v0::IDENTIFIER_FIELDS),
234
236
  binary_paths
235
237
  .into_iter()
236
- .chain(document_create_transition::BINARY_FIELDS),
238
+ .chain(document_create_transition::v0::BINARY_FIELDS),
237
239
  )
238
240
  }
239
241
 
@@ -248,7 +250,7 @@ impl DocumentCreateTransitionWasm {
248
250
  // AbstractDataDocumentTransition
249
251
  #[wasm_bindgen(js_name=getData)]
250
252
  pub fn get_data(&self) -> Result<JsValue, JsValue> {
251
- let json_data = if let Some(ref data) = self.inner.data {
253
+ let json_data = if let Some(ref data) = self.inner.data() {
252
254
  data.to_json_value()
253
255
  .map_err(ProtocolError::ValueError)
254
256
  .with_js_error()?