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

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