@dashevo/wasm-dpp 0.25.0-dev.15 → 0.25.0-dev.17

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 (271) hide show
  1. package/Cargo.toml +27 -3
  2. package/dist/errors/patchConsensusErrors.js +94 -115
  3. package/dist/wasm/wasm_dpp.d.ts +2124 -4081
  4. package/dist/wasm/wasm_dpp.js +17746 -2656
  5. package/dist/wasm/wasm_dpp_bg.js +1 -1
  6. package/lib/dpp.ts +1 -1
  7. package/lib/errors/patchConsensusErrors.ts +94 -93
  8. package/lib/test/bootstrap.js +5 -0
  9. package/lib/test/fixtures/getDataContractFixture.js +11 -5
  10. package/lib/test/fixtures/getDocumentsFixture.js +4 -4
  11. package/lib/test/fixtures/getIdentityCreateTransitionFixture.js +13 -19
  12. package/lib/test/fixtures/getIdentityCreditTransferTransitionFixture.js +14 -0
  13. package/lib/test/fixtures/getIdentityFixture.js +21 -32
  14. package/lib/test/fixtures/getIdentityTopUpTransitionFixture.js +7 -10
  15. package/lib/test/fixtures/getIdentityUpdateTransitionFixture.js +13 -28
  16. package/lib/test/fixtures/getPrivateAndPublicKeyForSigningFixture.js +7 -9
  17. package/lib/wasm/wasm_dpp.d.ts +2124 -4081
  18. package/package.json +5 -5
  19. package/scripts/build-wasm.sh +6 -9
  20. package/src/dash_platform_protocol.rs +172 -195
  21. package/src/data_contract/data_contract.rs +264 -200
  22. package/src/data_contract/data_contract_facade.rs +24 -46
  23. package/src/data_contract/errors/mod.rs +1 -0
  24. package/src/data_contract/mod.rs +2 -2
  25. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +91 -79
  26. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +84 -73
  27. package/src/data_contract_factory/data_contract_factory.rs +39 -83
  28. package/src/document/document_facade.rs +74 -81
  29. package/src/document/errors/document_already_exists_error.rs +6 -6
  30. package/src/document/errors/document_no_revision_error.rs +1 -0
  31. package/src/document/errors/document_not_provided_error.rs +6 -6
  32. package/src/document/errors/invalid_document_action_error.rs +11 -7
  33. package/src/document/errors/invalid_initial_revision_error.rs +4 -4
  34. package/src/document/errors/mismatch_owners_ids_error.rs +5 -8
  35. package/src/document/errors/mod.rs +5 -0
  36. package/src/document/errors/revision_absent_error.rs +6 -6
  37. package/src/document/errors/trying_to_delete_immutable_document_error.rs +19 -0
  38. package/src/document/errors/trying_to_replace_immutable_document_error.rs +4 -4
  39. package/src/document/extended_document.rs +76 -76
  40. package/src/document/factory.rs +127 -123
  41. package/src/document/generate_document_id.rs +2 -2
  42. package/src/document/mod.rs +162 -148
  43. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +50 -48
  44. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +14 -14
  45. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +50 -38
  46. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +165 -153
  47. package/src/document/state_transition/document_batch_transition/mod.rs +230 -217
  48. package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +2 -10
  49. package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +1 -10
  50. package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +2 -11
  51. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +1 -10
  52. package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +1 -10
  53. package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +1 -10
  54. package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +1 -10
  55. package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +1 -10
  56. package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +1 -10
  57. package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +1 -10
  58. package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +1 -10
  59. package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +1 -10
  60. package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +1 -10
  61. package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +1 -10
  62. package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +1 -10
  63. package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +1 -10
  64. package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +1 -10
  65. package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +1 -10
  66. package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +10 -8
  67. package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +1 -10
  68. package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +1 -10
  69. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -10
  70. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -10
  71. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +1 -10
  72. package/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +1 -10
  73. package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +1 -10
  74. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +1 -10
  75. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +1 -10
  76. package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +1 -10
  77. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +1 -10
  78. package/src/errors/consensus/basic/document/missing_document_type_error.rs +1 -10
  79. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -10
  80. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -10
  81. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +1 -10
  82. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +1 -10
  83. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +1 -10
  84. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +1 -10
  85. package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +1 -10
  86. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +1 -10
  87. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +1 -10
  88. package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +1 -10
  89. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +1 -10
  90. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +1 -10
  91. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +1 -10
  92. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +1 -10
  93. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +1 -10
  94. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +1 -10
  95. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -10
  96. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -10
  97. package/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +1 -10
  98. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +1 -10
  99. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +1 -10
  100. package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +1 -10
  101. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +1 -10
  102. package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +1 -10
  103. package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -10
  104. package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +1 -10
  105. package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +1 -10
  106. package/src/errors/consensus/basic/json_schema_compilation_error.rs +1 -10
  107. package/src/errors/consensus/basic/json_schema_error.rs +1 -9
  108. package/src/errors/consensus/basic/mod.rs +2 -0
  109. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -10
  110. package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +2 -11
  111. package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +1 -10
  112. package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +1 -10
  113. package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +1 -10
  114. package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +1 -10
  115. package/src/errors/consensus/basic/unsupported_version_error.rs +44 -0
  116. package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +1 -10
  117. package/src/errors/consensus/consensus_error.rs +39 -21
  118. package/src/errors/consensus/deserialize.rs +2 -2
  119. package/src/errors/consensus/fee/balance_is_not_enough_error.rs +5 -3
  120. package/src/errors/consensus/signature/basic_bls_error.rs +1 -10
  121. package/src/errors/consensus/signature/basic_ecdsa_error.rs +1 -10
  122. package/src/errors/consensus/signature/identity_not_found_error.rs +4 -3
  123. package/src/errors/consensus/signature/signature_should_not_be_present_error.rs +1 -10
  124. package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +3 -3
  125. package/src/errors/consensus/state/data_contract/data_contract_config_update_error.rs +42 -0
  126. package/src/errors/consensus/state/data_contract/data_contract_is_readonly_error.rs +44 -0
  127. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +2 -2
  128. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +2 -2
  129. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +2 -2
  130. package/src/errors/consensus/state/data_contract/mod.rs +7 -1
  131. package/src/errors/consensus/state/document/document_already_present_error.rs +1 -10
  132. package/src/errors/consensus/state/document/document_not_found_error.rs +1 -10
  133. package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +1 -10
  134. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +1 -10
  135. package/src/errors/consensus/state/document/document_timestamps_are_equal_error.rs +1 -10
  136. package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +1 -10
  137. package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +1 -10
  138. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +9 -13
  139. package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +1 -10
  140. package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +1 -10
  141. package/src/errors/consensus/state/identity/identity_already_exists_error.rs +1 -10
  142. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +1 -10
  143. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +1 -10
  144. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +1 -10
  145. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +2 -10
  146. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +1 -10
  147. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +1 -10
  148. package/src/errors/consensus/value_error.rs +1 -10
  149. package/src/errors/from.rs +12 -8
  150. package/src/errors/mod.rs +7 -7
  151. package/src/identity/factory_utils.rs +10 -10
  152. package/src/identity/identity.rs +275 -0
  153. package/src/identity/identity_facade.rs +87 -70
  154. package/src/identity/identity_factory.rs +74 -54
  155. package/src/identity/identity_public_key/mod.rs +86 -62
  156. package/src/identity/mod.rs +25 -256
  157. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +0 -1
  158. package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +3 -1
  159. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +0 -1
  160. package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +3 -1
  161. package/src/identity/state_transition/asset_lock_proof/mod.rs +112 -116
  162. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +66 -52
  163. package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +0 -1
  164. package/src/identity/state_transition/identity_create_transition/mod.rs +3 -3
  165. package/src/identity/state_transition/identity_create_transition/to_object.rs +9 -11
  166. package/src/identity/state_transition/identity_credit_transfer_transition/apply_identity_credit_transfer_transition.rs +31 -0
  167. package/src/identity/state_transition/identity_credit_transfer_transition/identity_credit_transfer_transition_basic_validator.rs +66 -0
  168. package/src/identity/state_transition/identity_credit_transfer_transition/identity_credit_transfer_transition_state_validator.rs +44 -0
  169. package/src/identity/state_transition/identity_credit_transfer_transition/mod.rs +8 -0
  170. package/src/identity/state_transition/identity_credit_transfer_transition/to_object.rs +49 -0
  171. package/src/identity/state_transition/identity_credit_transfer_transition/transition.rs +344 -0
  172. package/src/identity/state_transition/identity_public_key_transitions.rs +81 -66
  173. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +64 -51
  174. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +0 -2
  175. package/src/identity/state_transition/identity_topup_transition/mod.rs +3 -3
  176. package/src/identity/state_transition/identity_topup_transition/to_object.rs +8 -12
  177. package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +95 -92
  178. package/src/identity/state_transition/identity_update_transition/mod.rs +4 -4
  179. package/src/identity/state_transition/identity_update_transition/to_object.rs +14 -18
  180. package/src/identity/state_transition/mod.rs +4 -2
  181. package/src/identity/state_transition/transition_types.rs +4 -0
  182. package/src/lib.rs +9 -9
  183. package/src/metadata.rs +3 -3
  184. package/src/protocol_version.rs +2 -2
  185. package/src/state_transition/conversion.rs +11 -1
  186. package/src/state_transition/errors/invalid_state_transition_error.rs +9 -9
  187. package/src/state_transition/fee/operations/pre_calculated_operation.rs +2 -1
  188. package/src/state_transition/mod.rs +137 -139
  189. package/src/state_transition/state_transition_facade.rs +2 -3
  190. package/src/state_transition/state_transition_factory.rs +142 -153
  191. package/src/state_transition/validation/state_transition_fee_validator.rs +1 -1
  192. package/src/state_transition/validation/validate_state_transition_identity_signature.rs +8 -4
  193. package/src/state_transition/validation/validate_state_transition_key_signature.rs +1 -1
  194. package/src/utils.rs +4 -2
  195. package/src/validation/validation_result.rs +1 -1
  196. package/test/integration/dataContract/DataContractFacade.spec.js +11 -15
  197. package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +1 -1
  198. package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +1 -1
  199. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +1 -1
  200. package/test/integration/document/Document.spec.js +3 -3
  201. package/test/integration/document/DocumentFacade.spec.js +34 -33
  202. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +1 -1
  203. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +1 -1
  204. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +1 -1
  205. package/test/integration/document/validation/validateDocumentFactory.spec.js +1 -1
  206. package/test/integration/identity/IdentityFacade.spec.js +29 -58
  207. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +2 -2
  208. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +1 -1
  209. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +1 -1
  210. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +2 -2
  211. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +2 -2
  212. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +1 -1
  213. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +2 -2
  214. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +1 -1
  215. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +4 -3
  216. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +1 -1
  217. package/test/integration/identity/validation/validateIdentityFactory.spec.js +2 -2
  218. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +1 -1
  219. package/test/integration/stateTransition/StateTransitionFacade.spec.js +39 -48
  220. package/test/integration/util/generateTemporaryEcdsaPrivateKey.spec.js +1 -1
  221. package/test/unit/DashPlatformProtocol.spec.js +4 -18
  222. package/test/unit/dataContract/DataContract.spec.js +100 -121
  223. package/test/unit/dataContract/DataContractFactory.spec.js +21 -1
  224. package/test/unit/dataContract/createDataContract.spec.js +1 -1
  225. package/test/unit/dataContract/generateDataContractId.spec.js +1 -1
  226. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +23 -13
  227. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +1 -1
  228. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +1 -1
  229. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +16 -7
  230. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +1 -1
  231. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +1 -1
  232. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +1 -1
  233. package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +1 -1
  234. package/test/unit/document/Document.spec.js +18 -10
  235. package/test/unit/document/DocumentFactory.spec.js +10 -23
  236. package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +1 -1
  237. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +4 -4
  238. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +1 -1
  239. package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +1 -1
  240. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +1 -1
  241. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +1 -1
  242. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +1 -1
  243. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +1 -1
  244. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +1 -1
  245. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +1 -1
  246. package/test/unit/identity/Identity.spec.js +34 -74
  247. package/test/unit/identity/IdentityFactory.spec.js +55 -68
  248. package/test/unit/identity/IdentityPublicKey.spec.js +30 -47
  249. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +23 -55
  250. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +2 -2
  251. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +2 -2
  252. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +7 -28
  253. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +4 -4
  254. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +2 -2
  255. package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +19 -36
  256. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +3 -3
  257. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +1 -1
  258. package/test/unit/identity/stateTransition/identityCreditTransferTransition/identityCreditTransferTransition.spec.js +130 -0
  259. package/test/unit/stateTransition/StateTransitionExecutionContext.spec.js +1 -1
  260. package/test/unit/stateTransition/StateTransitionFactory.spec.js +13 -18
  261. package/test/unit/stateTransition/createStateTransitionFactory.spec.js +1 -1
  262. package/test/unit/stateTransition/validation/validateStateTransitionBasicFactory.spec.js +1 -1
  263. package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +1 -1
  264. package/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js +1 -1
  265. package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +2 -2
  266. package/test/unit/stateTransition/validation/validateStateTransitionStateFactory.spec.js +1 -1
  267. package/test/unit/version/validateProtocolVersionFactory.spec.js +1 -1
  268. package/test-d/index.test-d.ts +2 -2
  269. package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +0 -45
  270. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +0 -49
  271. package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +0 -25
@@ -4,20 +4,29 @@ use std::collections::BTreeMap;
4
4
  use std::convert::TryFrom;
5
5
 
6
6
  pub use serde::{Deserialize, Serialize};
7
- use serde_json::Value as JsonValue;
8
7
  use wasm_bindgen::prelude::*;
9
8
 
10
- use dpp::data_contract::{CreatedDataContract, DataContract, SCHEMA_URI};
11
- use dpp::platform_value::string_encoding::Encoding;
12
- use dpp::platform_value::{Bytes32, Value};
13
-
14
- use dpp::serialization_traits::PlatformSerializable;
15
- use dpp::{platform_value, Convertible, ProtocolError};
9
+ use dpp::data_contract::schema::DataContractSchemaMethodsV0;
10
+ use dpp::data_contract::{DataContract, DocumentName, JsonValue};
11
+ use dpp::platform_value::{platform_value, Bytes32, Value};
12
+
13
+ use dpp::data_contract::accessors::v0::{DataContractV0Getters, DataContractV0Setters};
14
+ use dpp::data_contract::config::DataContractConfig;
15
+ use dpp::data_contract::conversion::json::DataContractJsonConversionMethodsV0;
16
+ use dpp::data_contract::conversion::value::v0::DataContractValueConversionMethodsV0;
17
+ use dpp::data_contract::created_data_contract::CreatedDataContract;
18
+ use dpp::data_contract::document_type::accessors::DocumentTypeV0Getters;
19
+ use dpp::data_contract::serialized_version::DataContractInSerializationFormat;
20
+ use dpp::serialization::{PlatformSerializable, PlatformSerializableWithPlatformVersion};
21
+ use dpp::version::PlatformVersion;
22
+ use dpp::{platform_value, ProtocolError};
16
23
 
17
24
  use crate::identifier::identifier_from_js_value;
18
25
  use crate::metadata::MetadataWasm;
19
- use crate::utils::{Inner, IntoWasm, WithJsError};
20
- use crate::{bail_js, with_js_error};
26
+ use crate::utils::get_bool_from_options;
27
+ use crate::utils::SKIP_VALIDATION_PROPERTY_NAME;
28
+ use crate::utils::{Inner, IntoWasm, ToSerdeJSONExt, WithJsError};
29
+ use crate::{bail_js, console_log, with_js_error};
21
30
  use crate::{buffer::Buffer, identifier::IdentifierWrapper};
22
31
 
23
32
  #[wasm_bindgen(js_name=DataContract)]
@@ -29,18 +38,18 @@ pub struct DataContractWasm {
29
38
 
30
39
  /// CreatedDataContract contains entropy and is used to create
31
40
  /// DataContractCreateTransition
32
- impl std::convert::From<CreatedDataContract> for DataContractWasm {
41
+ impl From<CreatedDataContract> for DataContractWasm {
33
42
  fn from(v: CreatedDataContract) -> Self {
34
43
  DataContractWasm {
35
- inner: v.data_contract,
36
- entropy_used: Some(v.entropy_used.to_vec()),
44
+ inner: v.data_contract().clone(),
45
+ entropy_used: Some(v.entropy_used().to_vec()),
37
46
  }
38
47
  }
39
48
  }
40
49
 
41
50
  /// Regular DataContract does not contain entropy and is used
42
51
  /// in DataContractUpdateTransition
43
- impl std::convert::From<DataContract> for DataContractWasm {
52
+ impl From<DataContract> for DataContractWasm {
44
53
  fn from(v: DataContract) -> Self {
45
54
  DataContractWasm {
46
55
  inner: v,
@@ -49,113 +58,88 @@ impl std::convert::From<DataContract> for DataContractWasm {
49
58
  }
50
59
  }
51
60
 
52
- impl std::convert::From<&DataContractWasm> for DataContract {
61
+ impl From<&DataContractWasm> for DataContract {
53
62
  fn from(v: &DataContractWasm) -> Self {
54
63
  v.inner.clone()
55
64
  }
56
65
  }
57
66
 
58
- impl std::convert::TryFrom<&DataContractWasm> for CreatedDataContract {
67
+ impl TryFrom<&DataContractWasm> for CreatedDataContract {
59
68
  type Error = ProtocolError;
60
69
  fn try_from(v: &DataContractWasm) -> Result<Self, Self::Error> {
61
- Ok(Self {
62
- data_contract: v.to_owned().into(),
63
- entropy_used: if let Some(entropy_used) = &v.entropy_used {
64
- Bytes32::from_vec(entropy_used.to_owned())?
65
- } else {
66
- Bytes32::default()
67
- },
68
- })
70
+ let entropy = if let Some(entropy_used) = &v.entropy_used {
71
+ Bytes32::from_vec(entropy_used.to_owned())?
72
+ } else {
73
+ Bytes32::default()
74
+ };
75
+
76
+ let platform_version = PlatformVersion::first();
77
+
78
+ CreatedDataContract::from_contract_and_entropy(
79
+ v.to_owned().into(),
80
+ entropy,
81
+ platform_version,
82
+ )
69
83
  }
70
84
  }
71
85
 
72
- impl std::convert::Into<DataContract> for DataContractWasm {
86
+ impl Into<DataContract> for DataContractWasm {
73
87
  fn into(self) -> DataContract {
74
88
  self.inner
75
89
  }
76
90
  }
77
91
 
78
- #[derive(Debug, Serialize, Deserialize)]
79
- #[serde(rename_all = "camelCase")]
80
- pub(crate) struct DataContractParameters {
81
- #[serde(
82
- rename = "$schema",
83
- skip_serializing_if = "serde_json::Value::is_null",
84
- default
85
- )]
86
- schema: serde_json::Value,
87
- #[serde(rename = "$id", skip_serializing_if = "Option::is_none")]
88
- id: Option<Vec<u8>>,
89
- #[serde(skip_serializing_if = "Option::is_none")]
90
- owner_id: Option<Vec<u8>>,
91
- #[serde(skip_serializing_if = "serde_json::Value::is_null", default)]
92
- documents: serde_json::Value,
93
- #[serde(
94
- skip_serializing_if = "serde_json::Value::is_null",
95
- default,
96
- rename = "$defs"
97
- )]
98
- defs: serde_json::Value,
99
- #[serde(skip_serializing_if = "serde_json::Value::is_null", default)]
100
- protocol_version: serde_json::Value,
101
- #[serde(skip_serializing_if = "serde_json::Value::is_null", default)]
102
- version: serde_json::Value,
103
-
104
- #[serde(flatten)]
105
- _extras: serde_json::Value, // Captures excess fields to trigger validation failure later.
106
- }
107
-
108
- pub fn js_value_to_data_contract_value(object: JsValue) -> Result<Value, JsValue> {
109
- let parameters: DataContractParameters =
110
- with_js_error!(serde_wasm_bindgen::from_value(object))?;
111
-
112
- platform_value::to_value(parameters).map_err(|e| e.to_string().into())
113
- }
114
-
115
92
  #[wasm_bindgen(js_class=DataContract)]
116
93
  impl DataContractWasm {
117
94
  #[wasm_bindgen(constructor)]
118
- pub fn new(raw_parameters: JsValue) -> Result<DataContractWasm, JsValue> {
119
- let parameters: DataContractParameters =
120
- with_js_error!(serde_wasm_bindgen::from_value(raw_parameters))?;
95
+ pub fn new(
96
+ raw_parameters: JsValue,
97
+ options: Option<js_sys::Object>,
98
+ ) -> Result<DataContractWasm, JsValue> {
99
+ let skip_validation = if let Some(opts) = options {
100
+ get_bool_from_options(opts.into(), SKIP_VALIDATION_PROPERTY_NAME, false)?
101
+ } else {
102
+ false
103
+ };
104
+
105
+ let platform_version = PlatformVersion::first();
121
106
 
122
- DataContract::from_raw_object(
123
- platform_value::to_value(parameters).expect("Implements Serialize"),
107
+ DataContract::from_value(
108
+ raw_parameters.with_serde_to_platform_value()?,
109
+ !skip_validation,
110
+ platform_version,
124
111
  )
125
112
  .with_js_error()
126
113
  .map(Into::into)
127
114
  }
128
115
 
129
- #[wasm_bindgen(js_name=getProtocolVersion)]
130
- pub fn get_protocol_version(&self) -> u32 {
131
- self.inner.protocol_version
132
- }
133
-
134
116
  #[wasm_bindgen(js_name=getId)]
135
- pub fn get_id(&self) -> IdentifierWrapper {
136
- self.inner.id.into()
117
+ pub fn id(&self) -> IdentifierWrapper {
118
+ self.inner.id().into()
137
119
  }
138
120
 
139
121
  #[wasm_bindgen(js_name=setId)]
140
122
  pub fn set_id(&mut self, id: &JsValue) -> Result<(), JsValue> {
141
123
  let id = identifier_from_js_value(id)?;
142
- self.inner.id = id;
124
+
125
+ self.inner.set_id(id);
126
+
143
127
  Ok(())
144
128
  }
145
129
 
146
130
  #[wasm_bindgen(js_name=getOwnerId)]
147
- pub fn get_owner_id(&self) -> IdentifierWrapper {
148
- self.inner.owner_id.into()
131
+ pub fn owner_id(&self) -> IdentifierWrapper {
132
+ self.inner.owner_id().into()
149
133
  }
150
134
 
151
135
  #[wasm_bindgen(js_name=getVersion)]
152
- pub fn get_version(&self) -> u32 {
153
- self.inner.version
136
+ pub fn version(&self) -> u32 {
137
+ self.inner.version()
154
138
  }
155
139
 
156
140
  #[wasm_bindgen(js_name=setVersion)]
157
141
  pub fn set_version(&mut self, v: u32) {
158
- self.inner.version = v;
142
+ self.inner.set_version(v);
159
143
  }
160
144
 
161
145
  #[wasm_bindgen(js_name=incrementVersion)]
@@ -163,106 +147,161 @@ impl DataContractWasm {
163
147
  self.inner.increment_version()
164
148
  }
165
149
 
166
- #[wasm_bindgen(js_name=getJsonSchemaId)]
167
- pub fn get_json_schema_id(&self) -> String {
168
- self.inner.id.to_string(Encoding::Base58)
169
- }
150
+ #[wasm_bindgen(js_name=getBinaryProperties)]
151
+ pub fn get_binary_properties(&self, doc_type: &str) -> Result<JsValue, JsValue> {
152
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
170
153
 
171
- #[wasm_bindgen(js_name=setJsonMetaSchema)]
172
- pub fn set_json_meta_schema(&mut self, schema: String) {
173
- self.inner.schema = schema;
174
- }
154
+ let document_type = self
155
+ .inner
156
+ .document_type_for_name(doc_type)
157
+ .with_js_error()?;
158
+
159
+ let binary_paths_o = document_type.binary_paths();
160
+
161
+ let mut binary_paths = BTreeMap::new();
175
162
 
176
- #[wasm_bindgen(js_name=getJsonMetaSchema)]
177
- pub fn get_json_meta_schema(&self) -> String {
178
- self.inner.schema.clone()
163
+ document_type.binary_paths().iter().for_each(
164
+ (|path| {
165
+ binary_paths.insert(path.to_owned(), platform_value!({}));
166
+ }),
167
+ );
168
+
169
+ document_type.identifier_paths().iter().for_each(
170
+ (|path| {
171
+ binary_paths.insert(
172
+ path.to_owned(),
173
+ platform_value!({
174
+ "contentMediaType": "application/x.dash.dpp.identifier"
175
+ }),
176
+ );
177
+ }),
178
+ );
179
+
180
+ with_js_error!(binary_paths.serialize(&serializer))
179
181
  }
180
- #[wasm_bindgen(js_name=setDocuments)]
181
- pub fn set_documents(&mut self, documents: JsValue) -> Result<(), JsValue> {
182
- let json_value: JsonValue = with_js_error!(serde_wasm_bindgen::from_value(documents))?;
183
182
 
184
- let mut docs: BTreeMap<String, JsonValue> = BTreeMap::new();
185
- if let JsonValue::Object(o) = json_value {
186
- for (k, v) in o.into_iter() {
187
- if !v.is_object() {
188
- bail_js!("is not an object")
189
- }
190
- docs.insert(k, v);
191
- }
192
- self.inner.documents = docs;
183
+ #[wasm_bindgen(js_name=setDocumentSchemas)]
184
+ pub fn set_document_schemas(
185
+ &mut self,
186
+ schemas: JsValue,
187
+ options: Option<js_sys::Object>,
188
+ ) -> Result<(), JsValue> {
189
+ let (skip_validation, defs) = if let Some(opts) = options {
190
+ let opts_value = opts.with_serde_to_platform_value()?;
191
+
192
+ (
193
+ get_bool_from_options(opts.into(), SKIP_VALIDATION_PROPERTY_NAME, false)?,
194
+ opts_value
195
+ .get_optional_value("defs")
196
+ .map_err(JsError::from)?
197
+ .map(|defs| defs.clone().into_btree_string_map())
198
+ .transpose()
199
+ .map_err(JsError::from)?,
200
+ )
193
201
  } else {
194
- bail_js!("the parameter 'documents' is not an JS object")
195
- }
196
- Ok(())
197
- }
202
+ (false, None)
203
+ };
198
204
 
199
- #[wasm_bindgen(js_name=getDocuments)]
200
- pub fn get_documents(&self) -> Result<JsValue, JsValue> {
201
- let serializer = serde_wasm_bindgen::Serializer::json_compatible();
202
- with_js_error!(self.inner.documents.serialize(&serializer))
203
- }
205
+ let document_schemas: Value = schemas.with_serde_to_platform_value()?;
206
+ let document_schemas_map = document_schemas
207
+ .into_btree_string_map()
208
+ .map_err(JsError::from)?;
204
209
 
205
- #[wasm_bindgen(js_name=isDocumentDefined)]
206
- pub fn is_document_defined(&self, doc_type: String) -> bool {
207
- self.inner.is_document_defined(&doc_type)
210
+ let platform_version = PlatformVersion::first();
211
+
212
+ self.inner
213
+ .set_document_schemas(
214
+ document_schemas_map,
215
+ defs,
216
+ !skip_validation,
217
+ &platform_version,
218
+ )
219
+ .with_js_error()
208
220
  }
209
221
 
210
222
  #[wasm_bindgen(js_name=setDocumentSchema)]
211
223
  pub fn set_document_schema(
212
224
  &mut self,
213
- doc_type: String,
225
+ name: &str,
214
226
  schema: JsValue,
227
+ options: Option<js_sys::Object>,
215
228
  ) -> Result<(), JsValue> {
216
- let json_schema: JsonValue = with_js_error!(serde_wasm_bindgen::from_value(schema))?;
229
+ let (skip_validation) = if let Some(options) = options {
230
+ get_bool_from_options(options.into(), SKIP_VALIDATION_PROPERTY_NAME, false)?
231
+ } else {
232
+ false
233
+ };
234
+
235
+ let schema_value: Value = schema.with_serde_to_platform_value()?;
236
+
237
+ let platform_version = PlatformVersion::first();
238
+
217
239
  self.inner
218
- .set_document_schema(doc_type, json_schema)
219
- .with_js_error()?;
220
- Ok(())
240
+ .set_document_schema(name, schema_value, !skip_validation, &platform_version)
241
+ .with_js_error()
221
242
  }
222
243
 
223
244
  #[wasm_bindgen(js_name=getDocumentSchema)]
224
- pub fn get_document_schema(&mut self, doc_type: &str) -> Result<JsValue, JsValue> {
225
- let doc_schema = self.inner.get_document_schema(doc_type).with_js_error()?;
245
+ pub fn document_schema(&mut self, name: &str) -> Result<JsValue, JsValue> {
246
+ let document_type = self.inner.document_type_for_name(name).with_js_error()?;
247
+
226
248
  let serializer = serde_wasm_bindgen::Serializer::json_compatible();
227
- with_js_error!(doc_schema.serialize(&serializer))
228
- }
229
-
230
- #[wasm_bindgen(js_name=getDocumentSchemaRef)]
231
- pub fn get_document_schema_ref(&self, doc_type: &str) -> Result<JsValue, JsValue> {
232
- with_js_error!(serde_wasm_bindgen::to_value(
233
- &self
234
- .inner
235
- .get_document_schema_ref(doc_type)
236
- .with_js_error()?
237
- ))
238
- }
239
-
240
- #[wasm_bindgen(js_name=setDefinitions)]
241
- pub fn set_definitions(&mut self, definitions: JsValue) -> Result<(), JsValue> {
242
- let json_value: JsonValue = with_js_error!(serde_wasm_bindgen::from_value(definitions))?;
243
- let mut definitions: BTreeMap<String, JsonValue> = BTreeMap::new();
244
- if let JsonValue::Object(o) = json_value {
245
- for (k, v) in o.into_iter() {
246
- // v must be a Object
247
- if !v.is_object() {
248
- bail_js!("{:?} is not an object", v);
249
- }
250
- definitions.insert(k, v);
251
- }
252
- if definitions.is_empty() {
253
- bail_js!("`definitions` cannot be empty");
254
- }
255
- self.inner.defs = Some(definitions);
249
+
250
+ document_type
251
+ .schema()
252
+ .serialize(&serializer)
253
+ .map_err(JsError::from)
254
+ .map_err(Into::into)
255
+ }
256
+
257
+ #[wasm_bindgen(js_name=getDocumentSchemas)]
258
+ pub fn document_schemas(&self) -> JsValue {
259
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
260
+
261
+ self.inner
262
+ .document_schemas()
263
+ .serialize(&serializer)
264
+ .expect("document schemas defs to js value")
265
+ }
266
+
267
+ #[wasm_bindgen(js_name=getSchemaDefs)]
268
+ pub fn schema_defs(&self) -> JsValue {
269
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
270
+
271
+ self.inner
272
+ .schema_defs()
273
+ .serialize(&serializer)
274
+ .expect("document schemas defs to js value")
275
+ }
276
+
277
+ #[wasm_bindgen(js_name=setSchemaDefs)]
278
+ pub fn set_schema_defs(
279
+ &mut self,
280
+ defs: Option<js_sys::Object>,
281
+ options: Option<js_sys::Object>,
282
+ ) -> Result<(), JsValue> {
283
+ let (skip_validation) = if let Some(options) = options {
284
+ get_bool_from_options(options.into(), SKIP_VALIDATION_PROPERTY_NAME, false)?
256
285
  } else {
257
- bail_js!("the parameter 'definitions' is not an JS object");
258
- }
286
+ false
287
+ };
288
+
289
+ let platform_version = PlatformVersion::first();
290
+
291
+ let maybe_schema_defs = defs
292
+ .map(|js_value| serde_wasm_bindgen::from_value(js_value.into()))
293
+ .transpose()?;
294
+
295
+ self.inner
296
+ .set_schema_defs(maybe_schema_defs, !skip_validation, platform_version)
297
+ .with_js_error()?;
298
+
259
299
  Ok(())
260
300
  }
261
301
 
262
- #[wasm_bindgen(js_name=getDefinitions)]
263
- pub fn get_definitions(&self) -> Result<JsValue, JsValue> {
264
- let serializer = serde_wasm_bindgen::Serializer::json_compatible();
265
- with_js_error!(self.inner.defs.serialize(&serializer))
302
+ #[wasm_bindgen(js_name=hasDocumentType)]
303
+ pub fn has_document_type(&self, doc_type: String) -> bool {
304
+ self.inner.has_document_type_for_name(&doc_type)
266
305
  }
267
306
 
268
307
  #[wasm_bindgen(js_name=setEntropy)]
@@ -272,97 +311,133 @@ impl DataContractWasm {
272
311
  }
273
312
 
274
313
  #[wasm_bindgen(js_name=getEntropy)]
275
- pub fn get_entropy(&mut self) -> JsValue {
314
+ pub fn entropy(&mut self) -> JsValue {
276
315
  self.entropy_used
277
316
  .as_ref()
278
317
  .map(|e| Buffer::from_bytes(e.as_slice()).into())
279
318
  .unwrap_or(JsValue::undefined())
280
319
  }
281
320
 
282
- #[wasm_bindgen(js_name=getBinaryProperties)]
283
- pub fn get_binary_properties(&self, doc_type: &str) -> Result<JsValue, JsValue> {
284
- let serializer = serde_wasm_bindgen::Serializer::json_compatible();
285
- with_js_error!(self
286
- .inner
287
- .get_binary_properties(doc_type)
288
- .with_js_error()?
289
- .serialize(&serializer))
290
- }
291
-
292
321
  #[wasm_bindgen(js_name=getMetadata)]
293
- pub fn get_metadata(&self) -> Option<MetadataWasm> {
294
- self.inner.metadata.clone().map(Into::into)
322
+ pub fn metadata(&self) -> Option<MetadataWasm> {
323
+ self.inner.metadata().cloned().map(Into::into)
295
324
  }
296
325
 
297
326
  #[wasm_bindgen(js_name=setMetadata)]
298
327
  pub fn set_metadata(&mut self, metadata: JsValue) -> Result<(), JsValue> {
299
- self.inner.metadata = if !metadata.is_falsy() {
328
+ let metadata = if !metadata.is_falsy() {
300
329
  let metadata = metadata.to_wasm::<MetadataWasm>("Metadata")?;
301
330
  Some(metadata.to_owned().into())
302
331
  } else {
303
332
  None
304
333
  };
305
334
 
335
+ self.inner.set_metadata(metadata);
336
+
306
337
  Ok(())
307
338
  }
308
339
 
309
340
  #[wasm_bindgen(js_name=toObject)]
310
341
  pub fn to_object(&self) -> Result<JsValue, JsValue> {
311
- let value = self.inner.to_cleaned_object().with_js_error()?;
342
+ let platform_version = PlatformVersion::first();
343
+
344
+ let value = self.inner.to_value(platform_version).with_js_error()?;
345
+
312
346
  let serializer = serde_wasm_bindgen::Serializer::json_compatible();
347
+
313
348
  let object = with_js_error!(value.serialize(&serializer))?;
314
349
 
315
350
  js_sys::Reflect::set(
316
351
  &object,
317
- &Into::<JsValue>::into("$id".to_owned()),
318
- &Into::<JsValue>::into(Buffer::from_bytes_owned(self.inner.id.to_vec())),
352
+ &Into::<JsValue>::into("id".to_owned()),
353
+ &Into::<JsValue>::into(Buffer::from_bytes_owned(self.inner.id().to_vec())),
319
354
  )
320
355
  .expect("target is an object");
321
356
  js_sys::Reflect::set(
322
357
  &object,
323
358
  &Into::<JsValue>::into("ownerId".to_owned()),
324
- &Into::<JsValue>::into(Buffer::from_bytes_owned(self.inner.owner_id.to_vec())),
359
+ &Into::<JsValue>::into(Buffer::from_bytes_owned(self.inner.owner_id().to_vec())),
325
360
  )
326
361
  .expect("target is an object");
327
362
  Ok(object)
328
363
  }
329
364
 
365
+ #[wasm_bindgen(js_name=getConfig)]
366
+ pub fn config(&self) -> Result<JsValue, JsValue> {
367
+ Ok(serde_wasm_bindgen::to_value(&self.inner.config())?)
368
+ }
369
+
370
+ #[wasm_bindgen(js_name=setConfig)]
371
+ pub fn set_config(&mut self, config: JsValue) -> Result<(), JsValue> {
372
+ let value = config.with_serde_to_platform_value()?;
373
+
374
+ let platform_version = &PlatformVersion::first();
375
+
376
+ let data_contract_config =
377
+ DataContractConfig::from_value(value, platform_version).with_js_error()?;
378
+
379
+ self.inner.set_config(data_contract_config);
380
+
381
+ Ok(())
382
+ }
383
+
330
384
  #[wasm_bindgen(js_name=toJSON)]
331
385
  pub fn to_json(&self) -> Result<JsValue, JsValue> {
332
- let json = self.inner.to_json().with_js_error()?;
386
+ let platform_version = PlatformVersion::first();
387
+
388
+ let json = self.inner.to_json(platform_version).with_js_error()?;
333
389
  let serializer = serde_wasm_bindgen::Serializer::json_compatible();
334
390
  with_js_error!(json.serialize(&serializer))
335
391
  }
336
392
 
337
393
  #[wasm_bindgen(js_name=toBuffer)]
338
394
  pub fn to_buffer(&self) -> Result<Buffer, JsValue> {
339
- let bytes = PlatformSerializable::serialize(&self.inner).with_js_error()?;
395
+ let platform_version = PlatformVersion::first();
396
+
397
+ let bytes = self
398
+ .inner
399
+ .serialize_to_bytes_with_platform_version(platform_version)
400
+ .with_js_error()?;
401
+
340
402
  Ok(Buffer::from_bytes(&bytes))
341
403
  }
342
404
 
343
405
  #[wasm_bindgen(js_name=hash)]
344
406
  pub fn hash(&self) -> Result<Vec<u8>, JsValue> {
345
- self.inner.hash().with_js_error()
346
- }
407
+ let platform_version = PlatformVersion::first();
347
408
 
348
- #[wasm_bindgen(js_name=from)]
349
- pub fn from_js_value(v: JsValue) -> Result<DataContractWasm, JsValue> {
350
- let json_contract: JsonValue = with_js_error!(serde_wasm_bindgen::from_value(v))?;
351
- Ok(DataContract::try_from(json_contract)
352
- .with_js_error()?
353
- .into())
409
+ self.inner.hash(platform_version).with_js_error()
354
410
  }
355
411
 
356
- #[wasm_bindgen(js_name=fromBuffer)]
357
- pub fn from_buffer(b: &[u8]) -> Result<DataContractWasm, JsValue> {
358
- let data_contract = DataContract::from_cbor(b).with_js_error()?;
359
- Ok(data_contract.into())
360
- }
412
+ // #[wasm_bindgen(js_name=from)]
413
+ // pub fn from_js_value(v: JsValue) -> Result<DataContractWasm, JsValue> {
414
+ // let json_contract: JsonValue = with_js_error!(serde_wasm_bindgen::from_value(v))?;
415
+ // Ok(DataContract::try_from(json_contract)
416
+ // .with_js_error()?
417
+ // .into())
418
+ // }
419
+
420
+ // #[wasm_bindgen(js_name=fromBuffer)]
421
+ // pub fn from_buffer(b: &[u8]) -> Result<DataContractWasm, JsValue> {
422
+ // let data_contract = DataContract::from_cbor(b).with_js_error()?;
423
+ // Ok(data_contract.into())
424
+ // }
361
425
 
362
426
  #[wasm_bindgen(js_name=clone)]
363
427
  pub fn deep_clone(&self) -> Self {
364
428
  self.clone()
365
429
  }
430
+
431
+ pub(crate) fn try_from_serialization_format(
432
+ value: DataContractInSerializationFormat,
433
+ validate: bool,
434
+ ) -> Result<Self, JsValue> {
435
+ let platform_version = PlatformVersion::first();
436
+
437
+ DataContract::try_from_platform_versioned(value, validate, platform_version)
438
+ .with_js_error()
439
+ .map(Into::into)
440
+ }
366
441
  }
367
442
 
368
443
  impl Inner for DataContractWasm {
@@ -386,14 +461,3 @@ impl DataContractWasm {
386
461
  &self.inner
387
462
  }
388
463
  }
389
-
390
- #[wasm_bindgen(js_name=DataContractDefaults)]
391
- pub struct DataContractDefaults;
392
-
393
- #[wasm_bindgen(js_class=DataContractDefaults)]
394
- impl DataContractDefaults {
395
- #[wasm_bindgen(getter = SCHEMA)]
396
- pub fn get_default_schema() -> String {
397
- SCHEMA_URI.to_string()
398
- }
399
- }