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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/Cargo.toml +33 -7
  2. package/README.md +11 -6
  3. package/dist/errors/patchConsensusErrors.js +94 -115
  4. package/dist/wasm/wasm_dpp.d.ts +2213 -4113
  5. package/dist/wasm/wasm_dpp.js +17748 -2639
  6. package/dist/wasm/wasm_dpp_bg.js +1 -1
  7. package/lib/dpp.ts +1 -1
  8. package/lib/errors/patchConsensusErrors.ts +94 -93
  9. package/lib/test/bootstrap.js +5 -0
  10. package/lib/test/fixtures/getDataContractFixture.js +11 -5
  11. package/lib/test/fixtures/getDocumentsFixture.js +9 -5
  12. package/lib/test/fixtures/getIdentityCreateTransitionFixture.js +14 -20
  13. package/lib/test/fixtures/getIdentityCreditTransferTransitionFixture.js +14 -0
  14. package/lib/test/fixtures/getIdentityFixture.js +21 -32
  15. package/lib/test/fixtures/getIdentityTopUpTransitionFixture.js +7 -10
  16. package/lib/test/fixtures/getIdentityUpdateTransitionFixture.js +13 -28
  17. package/lib/test/fixtures/getPrivateAndPublicKeyForSigningFixture.js +7 -9
  18. package/lib/test/fixtures/js/generateRandomIdentifier.js +1 -0
  19. package/lib/test/fixtures/js/getChainAssetLockProofFixture.js +1 -0
  20. package/lib/test/fixtures/js/getDataContractFixture.js +1 -0
  21. package/lib/test/fixtures/js/getDocumentTransitionsFixture.js +1 -0
  22. package/lib/test/fixtures/js/getDocumentsFixture.js +1 -0
  23. package/lib/test/fixtures/js/getInstantAssetLockProofFixture.js +1 -0
  24. package/lib/test/mocks/createStateRepositoryMock.js +1 -0
  25. package/lib/wasm/wasm_dpp.d.ts +2213 -4113
  26. package/package.json +6 -6
  27. package/scripts/build-wasm.sh +30 -29
  28. package/src/bls_adapter.rs +1 -1
  29. package/src/dash_platform_protocol.rs +173 -196
  30. package/src/data_contract/data_contract.rs +309 -199
  31. package/src/data_contract/data_contract_facade.rs +28 -47
  32. package/src/data_contract/errors/mod.rs +1 -0
  33. package/src/data_contract/mod.rs +2 -2
  34. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +92 -79
  35. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +84 -77
  36. package/src/data_contract_factory/data_contract_factory.rs +43 -83
  37. package/src/document/document_facade.rs +81 -76
  38. package/src/document/errors/document_already_exists_error.rs +6 -6
  39. package/src/document/errors/document_no_revision_error.rs +1 -0
  40. package/src/document/errors/document_not_provided_error.rs +6 -6
  41. package/src/document/errors/invalid_document_action_error.rs +11 -7
  42. package/src/document/errors/invalid_initial_revision_error.rs +4 -4
  43. package/src/document/errors/mismatch_owners_ids_error.rs +5 -8
  44. package/src/document/errors/mod.rs +5 -0
  45. package/src/document/errors/revision_absent_error.rs +6 -6
  46. package/src/document/errors/trying_to_delete_immutable_document_error.rs +19 -0
  47. package/src/document/errors/trying_to_replace_immutable_document_error.rs +4 -4
  48. package/src/document/extended_document.rs +76 -76
  49. package/src/document/factory.rs +140 -119
  50. package/src/document/generate_document_id.rs +2 -2
  51. package/src/document/mod.rs +164 -150
  52. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +50 -48
  53. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +14 -14
  54. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +50 -38
  55. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +165 -153
  56. package/src/document/state_transition/document_batch_transition/mod.rs +232 -222
  57. package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +2 -9
  58. package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +1 -9
  59. package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +2 -10
  60. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +1 -9
  61. package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +1 -9
  62. package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +1 -9
  63. package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +1 -9
  64. package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +1 -9
  65. package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +1 -9
  66. package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +1 -9
  67. package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +1 -9
  68. package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +1 -9
  69. package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +1 -9
  70. package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +1 -9
  71. package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +1 -9
  72. package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +1 -9
  73. package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +1 -9
  74. package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +1 -9
  75. package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +10 -7
  76. package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +1 -9
  77. package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +1 -9
  78. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -9
  79. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -9
  80. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +1 -9
  81. package/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +1 -9
  82. package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +1 -9
  83. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +1 -9
  84. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +1 -9
  85. package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +1 -9
  86. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +1 -9
  87. package/src/errors/consensus/basic/document/missing_document_type_error.rs +1 -9
  88. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -9
  89. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -9
  90. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +3 -11
  91. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +1 -9
  92. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +2 -10
  93. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +1 -9
  94. package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +1 -9
  95. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +1 -9
  96. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +1 -9
  97. package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +1 -9
  98. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_proof_chain_lock_validation_error.rs +1 -1
  99. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +1 -9
  100. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +1 -9
  101. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +1 -9
  102. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +1 -9
  103. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +1 -9
  104. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +1 -9
  105. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -9
  106. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -9
  107. package/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +1 -9
  108. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +1 -9
  109. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +1 -9
  110. package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +1 -9
  111. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +1 -9
  112. package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +1 -9
  113. package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -9
  114. package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +7 -15
  115. package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +1 -9
  116. package/src/errors/consensus/basic/json_schema_compilation_error.rs +1 -9
  117. package/src/errors/consensus/basic/json_schema_error.rs +1 -9
  118. package/src/errors/consensus/basic/mod.rs +2 -0
  119. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -9
  120. package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +2 -11
  121. package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +1 -9
  122. package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +1 -9
  123. package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +1 -9
  124. package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +1 -9
  125. package/src/errors/consensus/basic/unsupported_version_error.rs +44 -0
  126. package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +1 -9
  127. package/src/errors/consensus/consensus_error.rs +44 -21
  128. package/src/errors/consensus/deserialize.rs +2 -1
  129. package/src/errors/consensus/fee/balance_is_not_enough_error.rs +5 -2
  130. package/src/errors/consensus/signature/basic_bls_error.rs +1 -9
  131. package/src/errors/consensus/signature/basic_ecdsa_error.rs +1 -9
  132. package/src/errors/consensus/signature/identity_not_found_error.rs +4 -2
  133. package/src/errors/consensus/signature/signature_should_not_be_present_error.rs +1 -9
  134. package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +3 -2
  135. package/src/errors/consensus/state/data_contract/data_contract_config_update_error.rs +42 -0
  136. package/src/errors/consensus/state/data_contract/data_contract_is_readonly_error.rs +44 -0
  137. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +2 -1
  138. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +2 -1
  139. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +2 -1
  140. package/src/errors/consensus/state/data_contract/mod.rs +7 -1
  141. package/src/errors/consensus/state/document/document_already_present_error.rs +1 -9
  142. package/src/errors/consensus/state/document/document_not_found_error.rs +1 -9
  143. package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +1 -9
  144. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +1 -9
  145. package/src/errors/consensus/state/document/document_timestamps_are_equal_error.rs +34 -0
  146. package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +1 -9
  147. package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +1 -9
  148. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +9 -12
  149. package/src/errors/consensus/state/document/mod.rs +2 -0
  150. package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +1 -9
  151. package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +1 -9
  152. package/src/errors/consensus/state/identity/identity_already_exists_error.rs +1 -9
  153. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +1 -9
  154. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +1 -9
  155. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +1 -9
  156. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +2 -9
  157. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +1 -9
  158. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +1 -9
  159. package/src/errors/consensus/value_error.rs +1 -9
  160. package/src/errors/from.rs +12 -8
  161. package/src/errors/mod.rs +7 -7
  162. package/src/errors/value_error.rs +5 -0
  163. package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +1 -2
  164. package/src/identity/factory_utils.rs +13 -13
  165. package/src/identity/identity.rs +275 -0
  166. package/src/identity/identity_facade.rs +87 -70
  167. package/src/identity/identity_factory.rs +74 -54
  168. package/src/identity/identity_public_key/mod.rs +87 -64
  169. package/src/identity/mod.rs +25 -247
  170. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +0 -1
  171. package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +3 -1
  172. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +2 -2
  173. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +0 -1
  174. package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +3 -1
  175. package/src/identity/state_transition/asset_lock_proof/mod.rs +112 -116
  176. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +71 -65
  177. package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +0 -1
  178. package/src/identity/state_transition/identity_create_transition/mod.rs +3 -3
  179. package/src/identity/state_transition/identity_create_transition/to_object.rs +10 -12
  180. package/src/identity/state_transition/identity_credit_transfer_transition/apply_identity_credit_transfer_transition.rs +31 -0
  181. package/src/identity/state_transition/identity_credit_transfer_transition/identity_credit_transfer_transition_basic_validator.rs +66 -0
  182. package/src/identity/state_transition/identity_credit_transfer_transition/identity_credit_transfer_transition_state_validator.rs +44 -0
  183. package/src/identity/state_transition/identity_credit_transfer_transition/mod.rs +8 -0
  184. package/src/identity/state_transition/identity_credit_transfer_transition/to_object.rs +49 -0
  185. package/src/identity/state_transition/identity_credit_transfer_transition/transition.rs +344 -0
  186. package/src/identity/state_transition/identity_public_key_transitions.rs +89 -75
  187. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +67 -62
  188. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +0 -2
  189. package/src/identity/state_transition/identity_topup_transition/mod.rs +3 -3
  190. package/src/identity/state_transition/identity_topup_transition/to_object.rs +8 -12
  191. package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +2 -2
  192. package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +99 -104
  193. package/src/identity/state_transition/identity_update_transition/mod.rs +4 -4
  194. package/src/identity/state_transition/identity_update_transition/to_object.rs +15 -19
  195. package/src/identity/state_transition/mod.rs +5 -2
  196. package/src/identity/state_transition/transition_types.rs +34 -0
  197. package/src/identity/state_transition/validate_public_key_signatures.rs +2 -2
  198. package/src/lib.rs +10 -11
  199. package/src/metadata.rs +3 -3
  200. package/src/protocol_version.rs +7 -0
  201. package/src/state_transition/conversion.rs +11 -1
  202. package/src/state_transition/errors/invalid_state_transition_error.rs +12 -1
  203. package/src/state_transition/fee/operations/pre_calculated_operation.rs +2 -1
  204. package/src/state_transition/mod.rs +137 -139
  205. package/src/state_transition/state_transition_facade.rs +11 -11
  206. package/src/state_transition/state_transition_factory.rs +142 -153
  207. package/src/state_transition/validation/state_transition_fee_validator.rs +1 -1
  208. package/src/state_transition/validation/validate_state_transition_identity_signature.rs +28 -10
  209. package/src/state_transition/validation/validate_state_transition_key_signature.rs +1 -1
  210. package/src/utils.rs +7 -8
  211. package/src/validation/validation_result.rs +1 -0
  212. package/test/integration/dataContract/DataContractFacade.spec.js +25 -32
  213. package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +6 -6
  214. package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +11 -10
  215. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +3 -3
  216. package/test/integration/document/Document.spec.js +3 -3
  217. package/test/integration/document/DocumentFacade.spec.js +39 -38
  218. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +6 -7
  219. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +15 -15
  220. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +2 -2
  221. package/test/integration/document/validation/validateDocumentFactory.spec.js +3 -3
  222. package/test/integration/identity/IdentityFacade.spec.js +33 -62
  223. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +6 -8
  224. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +4 -7
  225. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +1 -1
  226. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +21 -24
  227. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +2 -2
  228. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +4 -4
  229. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +7 -10
  230. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +4 -5
  231. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +6 -6
  232. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +3 -7
  233. package/test/integration/identity/validation/validateIdentityFactory.spec.js +7 -6
  234. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +5 -25
  235. package/test/integration/stateTransition/StateTransitionFacade.spec.js +45 -58
  236. package/test/integration/util/generateTemporaryEcdsaPrivateKey.spec.js +1 -1
  237. package/test/unit/DashPlatformProtocol.spec.js +10 -25
  238. package/test/unit/dataContract/DataContract.spec.js +119 -148
  239. package/test/unit/dataContract/DataContractFactory.spec.js +42 -31
  240. package/test/unit/dataContract/createDataContract.spec.js +6 -6
  241. package/test/unit/dataContract/generateDataContractId.spec.js +1 -1
  242. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +34 -26
  243. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +7 -9
  244. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +10 -9
  245. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +28 -19
  246. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +7 -7
  247. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +5 -5
  248. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +11 -10
  249. package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +7 -7
  250. package/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js +1 -1
  251. package/test/unit/document/Document.spec.js +31 -20
  252. package/test/unit/document/DocumentFactory.spec.js +45 -110
  253. package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +1 -1
  254. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +6 -7
  255. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +11 -12
  256. package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +1 -1
  257. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +1 -1
  258. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +1 -1
  259. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +1 -1
  260. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +1 -1
  261. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +9 -9
  262. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +1 -1
  263. package/test/unit/identity/Identity.spec.js +46 -81
  264. package/test/unit/identity/IdentityFactory.spec.js +61 -75
  265. package/test/unit/identity/IdentityPublicKey.spec.js +34 -48
  266. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +30 -63
  267. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +9 -15
  268. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +5 -9
  269. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +13 -35
  270. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +9 -13
  271. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +5 -9
  272. package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +24 -46
  273. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +4 -4
  274. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +1 -1
  275. package/test/unit/identity/stateTransition/identityCreditTransferTransition/identityCreditTransferTransition.spec.js +130 -0
  276. package/test/unit/stateTransition/StateTransitionExecutionContext.spec.js +1 -1
  277. package/test/unit/stateTransition/StateTransitionFactory.spec.js +16 -22
  278. package/test/unit/stateTransition/createStateTransitionFactory.spec.js +43 -21
  279. package/test/unit/stateTransition/validation/validateStateTransitionBasicFactory.spec.js +3 -3
  280. package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +5 -17
  281. package/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js +9 -5
  282. package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +8 -14
  283. package/test/unit/stateTransition/validation/validateStateTransitionStateFactory.spec.js +1 -1
  284. package/test/unit/version/validateProtocolVersionFactory.spec.js +1 -1
  285. package/test-d/index.test-d.ts +2 -2
  286. package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +0 -45
  287. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +0 -49
  288. package/src/decode_protocol_entity.rs +0 -25
  289. package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +0 -25
  290. package/test/integration/ajv/keywords/byteArray/addByteArrayKeyword.spec.js +0 -148
  291. package/test/integration/util/generateEntropy.spec.js +0 -17
  292. package/test/integration/util/serializer.spec.js +0 -24
  293. package/test/unit/decodeProtocolEntityFactory.spec.js +0 -69
  294. package/test/unit/identity/errors/InvalidIdentityError.spec.js +0 -46
  295. package/test/unit/stateTransition/errors/InvalidStateTransitionError.spec.js +0 -51
@@ -1,37 +1,40 @@
1
- use crate::errors::protocol_error::from_protocol_error;
1
+ use std::convert::TryFrom;
2
2
 
3
- use crate::{
4
- js_value_to_data_contract_value, DataContractCreateTransitionWasm,
5
- DataContractUpdateTransitionWasm, DataContractWasm,
6
- };
7
- use dpp::data_contract::{DataContract, DataContractFacade};
3
+ use dpp::data_contract::created_data_contract::CreatedDataContract;
4
+ use dpp::data_contract::DataContract;
5
+ use dpp::data_contract::DataContractFacade;
8
6
  use dpp::identifier::Identifier;
9
- use dpp::version::ProtocolVersionValidator;
10
7
 
8
+ use crate::data_contract::state_transition::DataContractCreateTransitionWasm;
9
+ use crate::data_contract::state_transition::DataContractUpdateTransitionWasm;
10
+ use crate::data_contract::DataContractWasm;
11
11
  use crate::entropy_generator::ExternalEntropyGenerator;
12
- use crate::utils::{get_bool_from_options, IntoWasm, WithJsError, SKIP_VALIDATION_PROPERTY_NAME};
13
- use crate::validation::ValidationResultWasm;
12
+ use crate::errors::protocol_error::from_protocol_error;
13
+ use crate::utils::{
14
+ get_bool_from_options, IntoWasm, ToSerdeJSONExt, WithJsError, SKIP_VALIDATION_PROPERTY_NAME,
15
+ };
14
16
 
15
- use dpp::{Convertible, ProtocolError};
17
+ use dpp::ProtocolError;
16
18
  use std::sync::Arc;
17
19
 
20
+ use crate::identity::identity_facade::IdentityFacadeWasm;
21
+ use dpp::identity::IdentityFacade;
18
22
  use wasm_bindgen::prelude::*;
19
23
 
24
+ impl From<DataContractFacade> for DataContractFacadeWasm {
25
+ fn from(facade: DataContractFacade) -> Self {
26
+ Self(Arc::new(facade))
27
+ }
28
+ }
29
+
20
30
  #[wasm_bindgen(js_name=DataContractFacade)]
21
31
  #[derive(Clone)]
22
- pub struct DataContractFacadeWasm(Arc<DataContractFacade>);
32
+ pub struct DataContractFacadeWasm(pub(crate) Arc<DataContractFacade>);
23
33
 
24
34
  impl DataContractFacadeWasm {
25
- pub fn new(
26
- protocol_version: u32,
27
- protocol_version_validator: Arc<ProtocolVersionValidator>,
28
- entropy_generator: ExternalEntropyGenerator,
29
- ) -> Self {
30
- let inner = DataContractFacade::new_with_entropy_generator(
31
- protocol_version,
32
- protocol_version_validator,
33
- Box::new(entropy_generator),
34
- );
35
+ pub fn new(protocol_version: u32, entropy_generator: ExternalEntropyGenerator) -> Self {
36
+ let inner = DataContractFacade::new(protocol_version, Some(Box::new(entropy_generator)))
37
+ .expect("should create facade");
35
38
 
36
39
  Self(Arc::new(inner))
37
40
  }
@@ -80,10 +83,9 @@ impl DataContractFacadeWasm {
80
83
 
81
84
  self.0
82
85
  .create_from_object(
83
- js_value_to_data_contract_value(js_raw_data_contract)?,
86
+ js_raw_data_contract.with_serde_to_platform_value()?,
84
87
  skip_validation,
85
88
  )
86
- .await
87
89
  .map(DataContractWasm::from)
88
90
  .map_err(from_protocol_error)
89
91
  }
@@ -102,7 +104,6 @@ impl DataContractFacadeWasm {
102
104
  };
103
105
  self.0
104
106
  .create_from_buffer(buffer, skip_validation)
105
- .await
106
107
  .map(Into::into)
107
108
  .map_err(from_protocol_error)
108
109
  }
@@ -114,7 +115,9 @@ impl DataContractFacadeWasm {
114
115
  data_contract: &DataContractWasm,
115
116
  ) -> Result<DataContractCreateTransitionWasm, JsValue> {
116
117
  self.0
117
- .create_data_contract_create_transition(data_contract.clone().into())
118
+ .create_data_contract_create_transition(
119
+ CreatedDataContract::try_from(data_contract).with_js_error()?,
120
+ )
118
121
  .map(DataContractCreateTransitionWasm::from)
119
122
  .with_js_error()
120
123
  }
@@ -130,26 +133,4 @@ impl DataContractFacadeWasm {
130
133
  .map(Into::into)
131
134
  .map_err(from_protocol_error)
132
135
  }
133
-
134
- /// Validate Data Contract
135
- pub async fn validate(
136
- &self,
137
- js_raw_data_contract: JsValue,
138
- ) -> Result<ValidationResultWasm, JsValue> {
139
- let raw_data_contract = if let Ok(data_contract_ref) =
140
- js_raw_data_contract.to_wasm::<DataContractWasm>("DataContract")
141
- {
142
- let data_contract: DataContract = data_contract_ref.to_owned().into();
143
- data_contract.to_cleaned_object().with_js_error()?
144
- } else {
145
- js_value_to_data_contract_value(js_raw_data_contract)?
146
- };
147
-
148
- self.0
149
- .validate(raw_data_contract)
150
- .await
151
- .map(|v| v.map(|_| JsValue::UNDEFINED))
152
- .map(Into::into)
153
- .map_err(from_protocol_error)
154
- }
155
136
  }
@@ -6,6 +6,7 @@ use wasm_bindgen::prelude::*;
6
6
 
7
7
  pub use data_contract_generic_error::*;
8
8
  use dpp::data_contract::errors::DataContractError;
9
+ use dpp::ProtocolError;
9
10
  pub use invalid_data_contract::*;
10
11
 
11
12
  pub fn from_data_contract_to_js_error(e: DataContractError) -> JsValue {
@@ -8,7 +8,7 @@ pub mod errors;
8
8
  mod state_transition;
9
9
 
10
10
  mod data_contract_facade;
11
- mod index;
11
+ // mod index;
12
12
 
13
13
  pub use data_contract_facade::DataContractFacadeWasm;
14
- pub use index::*;
14
+ // pub use index::*;
@@ -1,31 +1,30 @@
1
- mod apply;
2
- mod validation;
1
+ // mod validation;
3
2
 
4
3
  use std::collections::HashMap;
5
4
 
6
- pub use apply::*;
7
- pub use validation::*;
8
-
9
- use dpp::consensus::signature::SignatureError;
10
- use dpp::consensus::ConsensusError;
11
- use dpp::{
12
- data_contract::state_transition::data_contract_create_transition::DataContractCreateTransition,
13
- platform_value,
14
- state_transition::{
15
- StateTransitionConvert, StateTransitionIdentitySigned, StateTransitionLike,
16
- },
17
- ProtocolError,
18
- };
19
- use serde::{Deserialize, Serialize};
5
+ // pub use validation::*;
6
+
7
+ use crate::errors::protocol_error::from_protocol_error;
8
+ use dpp::data_contract::JsonValue;
9
+ use dpp::errors::consensus::signature::SignatureError;
10
+ use dpp::errors::consensus::ConsensusError;
11
+ use dpp::platform_value::Value;
12
+ use dpp::serialization::{PlatformDeserializable, PlatformSerializable};
13
+ use dpp::state_transition::data_contract_create_transition::accessors::DataContractCreateTransitionAccessorsV0;
14
+ use dpp::state_transition::data_contract_create_transition::DataContractCreateTransition;
15
+ use dpp::state_transition::StateTransitionIdentitySigned;
16
+ use dpp::state_transition::{JsonStateTransitionSerializationOptions, StateTransitionJsonConvert};
17
+ use dpp::state_transition::{StateTransition, StateTransitionValueConvert};
18
+ use dpp::version::{PlatformVersion, TryIntoPlatformVersioned};
19
+ use dpp::{state_transition::StateTransitionLike, ProtocolError};
20
+ use serde::Serialize;
20
21
  use wasm_bindgen::prelude::*;
21
22
 
22
23
  use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
23
- use crate::errors::protocol_error::from_protocol_error;
24
- use crate::utils::WithJsError;
25
- use crate::{
26
- buffer::Buffer, identifier::IdentifierWrapper, with_js_error, DataContractParameters,
27
- DataContractWasm, IdentityPublicKeyWasm,
28
- };
24
+ use crate::data_contract::DataContractWasm;
25
+ use crate::identity::IdentityPublicKeyWasm;
26
+ use crate::utils::{ToSerdeJSONExt, WithJsError};
27
+ use crate::{buffer::Buffer, identifier::IdentifierWrapper, with_js_error};
29
28
 
30
29
  #[derive(Clone)]
31
30
  #[wasm_bindgen(js_name=DataContractCreateTransition)]
@@ -43,82 +42,87 @@ impl From<DataContractCreateTransitionWasm> for DataContractCreateTransition {
43
42
  }
44
43
  }
45
44
 
46
- #[derive(Debug, Serialize, Deserialize)]
47
- #[serde(rename_all = "camelCase")]
48
- struct DataContractCreateTransitionParameters {
49
- #[serde(skip_serializing_if = "Option::is_none", default)]
50
- data_contract: Option<DataContractParameters>,
51
- #[serde(skip_serializing_if = "Option::is_none", default)]
52
- entropy: Option<Vec<u8>>,
53
- #[serde(skip_serializing_if = "Option::is_none", default)]
54
- signature: Option<Vec<u8>>,
55
- #[serde(flatten)]
56
- extra: HashMap<String, serde_json::Value>,
57
- }
58
-
59
45
  #[wasm_bindgen(js_class=DataContractCreateTransition)]
60
46
  impl DataContractCreateTransitionWasm {
61
47
  #[wasm_bindgen(constructor)]
62
- pub fn new(raw_parameters: JsValue) -> Result<DataContractCreateTransitionWasm, JsValue> {
63
- let parameters: DataContractCreateTransitionParameters =
64
- with_js_error!(serde_wasm_bindgen::from_value(raw_parameters))?;
65
- let transition_object = platform_value::to_value(parameters)
66
- .map_err(ProtocolError::ValueError)
67
- .with_js_error()?;
68
- DataContractCreateTransition::from_raw_object(transition_object)
69
- .map(Into::into)
70
- .with_js_error()
48
+ pub fn new(value: JsValue) -> Result<DataContractCreateTransitionWasm, JsValue> {
49
+ let platform_value = PlatformVersion::first();
50
+
51
+ DataContractCreateTransition::from_object(
52
+ value.with_serde_to_platform_value()?,
53
+ platform_value,
54
+ )
55
+ .map(Into::into)
56
+ .with_js_error()
71
57
  }
72
58
 
73
59
  #[wasm_bindgen(js_name=getDataContract)]
74
60
  pub fn get_data_contract(&self) -> DataContractWasm {
75
- self.0.data_contract.clone().into()
61
+ DataContractWasm::try_from_serialization_format(self.0.data_contract().clone(), false)
62
+ .expect("should convert from serialziation format")
76
63
  }
77
64
 
78
- #[wasm_bindgen(js_name=getProtocolVersion)]
79
- pub fn get_protocol_version(&self) -> u32 {
80
- self.0.protocol_version
81
- }
65
+ // #[wasm_bindgen(js_name=setDataContractConfig)]
66
+ // pub fn set_data_contract_config(&mut self, config: JsValue) -> Result<(), JsValue> {
67
+ // let res = serde_wasm_bindgen::from_value(config);
68
+ // self.0.data_contract.config = res.unwrap();
69
+ // Ok(())
70
+ // }
82
71
 
83
72
  #[wasm_bindgen(js_name=getEntropy)]
84
73
  pub fn get_entropy(&self) -> Buffer {
85
- Buffer::from_bytes_owned(self.0.entropy.to_vec())
74
+ Buffer::from_bytes_owned(self.0.entropy().to_vec())
86
75
  }
87
76
 
88
77
  #[wasm_bindgen(js_name=getOwnerId)]
89
78
  pub fn get_owner_id(&self) -> IdentifierWrapper {
90
- (*self.0.get_owner_id()).into()
79
+ self.0.owner_id().into()
91
80
  }
92
81
 
93
82
  #[wasm_bindgen(js_name=getType)]
94
83
  pub fn get_type(&self) -> u32 {
95
- self.0.get_type() as u32
96
- }
97
-
98
- #[wasm_bindgen(js_name=toJSON)]
99
- pub fn to_json(&self, skip_signature: Option<bool>) -> Result<JsValue, JsValue> {
100
- let serializer = serde_wasm_bindgen::Serializer::json_compatible();
101
- Ok(self
102
- .0
103
- .to_json(skip_signature.unwrap_or(false))
104
- .with_js_error()?
105
- .serialize(&serializer)
106
- .expect("JSON is a valid object"))
107
- }
84
+ self.0.state_transition_type() as u32
85
+ }
86
+ //
87
+ // #[wasm_bindgen(js_name=toJSON)]
88
+ // pub fn to_json(&self, skip_signature: Option<bool>) -> Result<JsValue, JsValue> {
89
+ // let serializer = serde_wasm_bindgen::Serializer::json_compatible();
90
+ //
91
+ // let options = JsonStateTransitionSerializationOptions {
92
+ // skip_signature: skip_signature.unwrap_or(false),
93
+ // ..Default::default()
94
+ // };
95
+ //
96
+ // let platform_version = PlatformVersion::first();
97
+ //
98
+ // let json: Value = self.0.to_json(options).with_js_error()?.into();
99
+ //
100
+ // Ok(json.serialize(&serializer).expect("JSON is a valid object"))
101
+ // }
108
102
 
109
103
  #[wasm_bindgen(js_name=toBuffer)]
110
- pub fn to_buffer(&self, skip_signature: Option<bool>) -> Result<Buffer, JsValue> {
111
- let bytes = self
112
- .0
113
- .to_cbor_buffer(skip_signature.unwrap_or(false))
114
- .with_js_error()?;
104
+ pub fn to_buffer(&self) -> Result<Buffer, JsValue> {
105
+ let bytes = PlatformSerializable::serialize_to_bytes(&StateTransition::DataContractCreate(
106
+ self.0.clone(),
107
+ ))
108
+ .with_js_error()?;
115
109
  Ok(Buffer::from_bytes(&bytes))
116
110
  }
117
111
 
112
+ #[wasm_bindgen(js_name=fromBuffer)]
113
+ pub fn from_buffer(buffer: Vec<u8>) -> Result<DataContractCreateTransitionWasm, JsValue> {
114
+ let state_transition: StateTransition =
115
+ PlatformDeserializable::deserialize_from_bytes(&buffer).with_js_error()?;
116
+ match state_transition {
117
+ StateTransition::DataContractCreate(dct) => Ok(dct.into()),
118
+ _ => Err(JsValue::from_str("Invalid state transition type")),
119
+ }
120
+ }
121
+
118
122
  #[wasm_bindgen(js_name=getModifiedDataIds)]
119
- pub fn get_modified_data_ids(&self) -> Vec<JsValue> {
123
+ pub fn modified_data_ids(&self) -> Vec<JsValue> {
120
124
  self.0
121
- .get_modified_data_ids()
125
+ .modified_data_ids()
122
126
  .into_iter()
123
127
  .map(|identifier| Into::<IdentifierWrapper>::into(identifier).into())
124
128
  .collect()
@@ -145,9 +149,10 @@ impl DataContractCreateTransitionWasm {
145
149
  .0
146
150
  .to_cleaned_object(skip_signature.unwrap_or(false))
147
151
  .map_err(from_protocol_error)?;
148
- serde_object
149
- .serialize(&serde_wasm_bindgen::Serializer::json_compatible())
150
- .map_err(|e| e.into())
152
+
153
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
154
+
155
+ serde_object.serialize(&serializer).map_err(|e| e.into())
151
156
  }
152
157
 
153
158
  #[wasm_bindgen]
@@ -158,14 +163,23 @@ impl DataContractCreateTransitionWasm {
158
163
  bls: JsBlsAdapter,
159
164
  ) -> Result<(), JsValue> {
160
165
  let bls_adapter = BlsAdapter(bls);
161
-
162
- self.0
166
+ // TODO: come up with a better way to set signature to the binding.
167
+ let mut state_transition = StateTransition::DataContractCreate(self.0.clone());
168
+ state_transition
163
169
  .sign(
164
170
  &identity_public_key.to_owned().into(),
165
171
  &private_key,
166
172
  &bls_adapter,
167
173
  )
168
- .with_js_error()
174
+ .with_js_error()?;
175
+
176
+ let signature = state_transition.signature().to_owned();
177
+ let signature_public_key_id = state_transition.signature_public_key_id().unwrap_or(0);
178
+
179
+ self.0.set_signature(signature);
180
+ self.0.set_signature_public_key_id(signature_public_key_id);
181
+
182
+ Ok(())
169
183
  }
170
184
 
171
185
  #[wasm_bindgen(js_name=verifySignature)]
@@ -176,8 +190,7 @@ impl DataContractCreateTransitionWasm {
176
190
  ) -> Result<bool, JsValue> {
177
191
  let bls_adapter = BlsAdapter(bls);
178
192
 
179
- let verification_result = self
180
- .0
193
+ let verification_result = StateTransition::DataContractCreate(self.0.clone())
181
194
  .verify_signature(&identity_public_key.to_owned().into(), &bls_adapter);
182
195
 
183
196
  match verification_result {
@@ -1,33 +1,34 @@
1
- mod apply;
2
- mod validation;
1
+ // mod validation;
3
2
 
4
3
  use std::collections::HashMap;
4
+ use std::hash::Hash;
5
5
 
6
- pub use apply::*;
7
- pub use validation::*;
6
+ // pub use validation::*;
8
7
 
9
8
  use dpp::consensus::ConsensusError;
9
+ use dpp::ed25519_dalek::ed25519::signature::SignerMut;
10
+ use dpp::serialization::{PlatformDeserializable, PlatformSerializable};
11
+ use dpp::state_transition::data_contract_update_transition::accessors::DataContractUpdateTransitionAccessorsV0;
12
+ use dpp::state_transition::data_contract_update_transition::DataContractUpdateTransition;
13
+ use dpp::state_transition::StateTransitionIdentitySigned;
14
+ use dpp::state_transition::{StateTransition, StateTransitionValueConvert};
15
+ use dpp::version::PlatformVersion;
10
16
  use dpp::{
11
- consensus::signature::SignatureError,
12
- data_contract::state_transition::data_contract_update_transition::DataContractUpdateTransition,
13
- platform_value,
14
- state_transition::{
15
- StateTransitionConvert, StateTransitionIdentitySigned, StateTransitionLike,
16
- },
17
+ consensus::signature::SignatureError, platform_value, state_transition::StateTransitionLike,
17
18
  ProtocolError,
18
19
  };
19
20
  use serde::{Deserialize, Serialize};
20
21
  use wasm_bindgen::prelude::*;
21
22
 
23
+ use crate::data_contract::DataContractWasm;
24
+ use crate::errors::protocol_error::from_protocol_error;
25
+ use crate::identity::IdentityPublicKeyWasm;
26
+ use crate::utils::ToSerdeJSONExt;
22
27
  use crate::{
23
28
  bls_adapter::{BlsAdapter, JsBlsAdapter},
24
29
  utils::WithJsError,
25
- IdentityPublicKeyWasm,
26
- };
27
- use crate::{
28
- buffer::Buffer, errors::protocol_error::from_protocol_error, identifier::IdentifierWrapper,
29
- with_js_error, DataContractParameters, DataContractWasm,
30
30
  };
31
+ use crate::{buffer::Buffer, identifier::IdentifierWrapper, with_js_error};
31
32
 
32
33
  #[derive(Clone)]
33
34
  #[wasm_bindgen(js_name=DataContractUpdateTransition)]
@@ -45,82 +46,79 @@ impl From<DataContractUpdateTransitionWasm> for DataContractUpdateTransition {
45
46
  }
46
47
  }
47
48
 
48
- #[derive(Debug, Serialize, Deserialize)]
49
- #[serde(rename_all = "camelCase")]
50
- struct DataContractUpdateTransitionParameters {
51
- #[serde(skip_serializing_if = "Option::is_none", default)]
52
- data_contract: Option<DataContractParameters>,
53
- #[serde(skip_serializing_if = "Option::is_none", default)]
54
- entropy: Option<Vec<u8>>,
55
- #[serde(skip_serializing_if = "Option::is_none", default)]
56
- signature: Option<Vec<u8>>,
57
- #[serde(flatten)]
58
- extra: HashMap<String, serde_json::Value>,
59
- }
60
-
61
49
  #[wasm_bindgen(js_class=DataContractUpdateTransition)]
62
50
  impl DataContractUpdateTransitionWasm {
63
51
  #[wasm_bindgen(constructor)]
64
52
  pub fn new(raw_parameters: JsValue) -> Result<DataContractUpdateTransitionWasm, JsValue> {
65
- let parameters: DataContractUpdateTransitionParameters =
66
- with_js_error!(serde_wasm_bindgen::from_value(raw_parameters))?;
67
- let raw_data_contract_update_transition = platform_value::to_value(parameters)
68
- .map_err(ProtocolError::ValueError)
69
- .with_js_error()?;
70
- DataContractUpdateTransition::from_raw_object(raw_data_contract_update_transition)
71
- .map(Into::into)
72
- .with_js_error()
53
+ let platform_version = PlatformVersion::first();
54
+
55
+ DataContractUpdateTransition::from_object(
56
+ raw_parameters.with_serde_to_platform_value()?,
57
+ platform_version,
58
+ )
59
+ .map(Into::into)
60
+ .with_js_error()
73
61
  }
74
62
 
75
63
  #[wasm_bindgen(js_name=getDataContract)]
76
64
  pub fn get_data_contract(&self) -> DataContractWasm {
77
- self.0.data_contract.clone().into()
78
- }
65
+ let platform_version = PlatformVersion::first();
79
66
 
80
- #[wasm_bindgen(js_name=getProtocolVersion)]
81
- pub fn get_protocol_version(&self) -> u32 {
82
- self.0.protocol_version
67
+ DataContractWasm::try_from_serialization_format(self.0.data_contract().clone(), false)
68
+ .expect("should create data contract from serialized format")
83
69
  }
84
70
 
85
- #[wasm_bindgen(js_name=getEntropy)]
86
- pub fn get_entropy(&self) -> Buffer {
87
- Buffer::from_bytes_owned(self.0.data_contract.entropy.to_vec())
88
- }
71
+ // #[wasm_bindgen(js_name=setDataContractConfig)]
72
+ // pub fn set_data_contract_config(&mut self, config: JsValue) -> Result<(), JsValue> {
73
+ // let res = serde_wasm_bindgen::from_value(config);
74
+ // self.0.data_contract.config = res.unwrap();
75
+ // Ok(())
76
+ // }
89
77
 
90
78
  #[wasm_bindgen(js_name=getOwnerId)]
91
79
  pub fn get_owner_id(&self) -> IdentifierWrapper {
92
- (*self.0.get_owner_id()).into()
80
+ self.0.owner_id().into()
93
81
  }
94
82
 
95
83
  #[wasm_bindgen(js_name=getType)]
96
84
  pub fn get_type(&self) -> u32 {
97
- self.0.get_type() as u32
85
+ self.0.state_transition_type() as u32
98
86
  }
99
87
 
100
- #[wasm_bindgen(js_name=toJSON)]
101
- pub fn to_json(&self, skip_signature: Option<bool>) -> Result<JsValue, JsValue> {
102
- let serializer = serde_wasm_bindgen::Serializer::json_compatible();
103
- Ok(self
104
- .0
105
- .to_json(skip_signature.unwrap_or(false))
106
- .with_js_error()?
107
- .serialize(&serializer)
108
- .expect("JSON is a valid object"))
109
- }
88
+ // #[wasm_bindgen(js_name=toJSON)]
89
+ // pub fn to_json(&self, skip_signature: Option<bool>) -> Result<JsValue, JsValue> {
90
+ // let serializer = serde_wasm_bindgen::Serializer::json_compatible();
91
+ // Ok(self
92
+ // .0
93
+ // .to_json(skip_signature.unwrap_or(false))
94
+ // .with_js_error()?
95
+ // .serialize(&serializer)
96
+ // .expect("JSON is a valid object"))
97
+ // }
110
98
 
111
99
  #[wasm_bindgen(js_name=toBuffer)]
112
- pub fn to_buffer(&self, skip_signature: Option<bool>) -> Result<Buffer, JsValue> {
113
- let bytes = self
114
- .0
115
- .to_cbor_buffer(skip_signature.unwrap_or(false))
116
- .with_js_error()?;
100
+ pub fn to_buffer(&self) -> Result<Buffer, JsValue> {
101
+ let bytes = PlatformSerializable::serialize_to_bytes(&StateTransition::DataContractUpdate(
102
+ self.0.clone(),
103
+ ))
104
+ .with_js_error()?;
117
105
  Ok(Buffer::from_bytes(&bytes))
118
106
  }
119
107
 
108
+ #[wasm_bindgen(js_name=fromBuffer)]
109
+ pub fn from_buffer(buffer: Vec<u8>) -> Result<DataContractUpdateTransitionWasm, JsValue> {
110
+ let state_transition: StateTransition =
111
+ PlatformDeserializable::deserialize_from_bytes(&buffer).with_js_error()?;
112
+ match state_transition {
113
+ StateTransition::DataContractUpdate(dct) => Ok(dct.into()),
114
+ _ => Err(JsValue::from_str("Invalid state transition type")),
115
+ }
116
+ }
117
+
120
118
  #[wasm_bindgen(js_name=getModifiedDataIds)]
121
- pub fn get_modified_data_ids(&self) -> Vec<JsValue> {
119
+ pub fn modified_data_ids(&self) -> Vec<JsValue> {
122
120
  self.0
123
- .get_modified_data_ids()
121
+ .modified_data_ids()
124
122
  .into_iter()
125
123
  .map(|identifier| Into::<IdentifierWrapper>::into(identifier).into())
126
124
  .collect()
@@ -141,14 +139,14 @@ impl DataContractUpdateTransitionWasm {
141
139
  self.0.is_identity_state_transition()
142
140
  }
143
141
 
144
- #[wasm_bindgen(js_name=hash)]
145
- pub fn hash(&self, skip_signature: Option<bool>) -> Result<Buffer, JsValue> {
146
- let bytes = self
147
- .0
148
- .hash(skip_signature.unwrap_or(false))
149
- .with_js_error()?;
150
- Ok(Buffer::from_bytes(&bytes))
151
- }
142
+ // #[wasm_bindgen(js_name=hash)]
143
+ // pub fn hash(&self, skip_signature: Option<bool>) -> Result<Buffer, JsValue> {
144
+ // let bytes = self
145
+ // .0
146
+ // .hash(skip_signature.unwrap_or(false))
147
+ // .with_js_error()?;
148
+ // Ok(Buffer::from_bytes(&bytes))
149
+ // }
152
150
 
153
151
  #[wasm_bindgen(js_name=toObject)]
154
152
  pub fn to_object(&self, skip_signature: Option<bool>) -> Result<JsValue, JsValue> {
@@ -156,6 +154,7 @@ impl DataContractUpdateTransitionWasm {
156
154
  .0
157
155
  .to_cleaned_object(skip_signature.unwrap_or(false))
158
156
  .map_err(from_protocol_error)?;
157
+
159
158
  serde_object
160
159
  .serialize(&serde_wasm_bindgen::Serializer::json_compatible())
161
160
  .map_err(|e| e.into())
@@ -169,14 +168,23 @@ impl DataContractUpdateTransitionWasm {
169
168
  bls: JsBlsAdapter,
170
169
  ) -> Result<(), JsValue> {
171
170
  let bls_adapter = BlsAdapter(bls);
172
-
173
- self.0
171
+ // TODO: come up with a better way to set signature to the binding.
172
+ let mut state_transition = StateTransition::DataContractUpdate(self.0.clone());
173
+ state_transition
174
174
  .sign(
175
175
  &identity_public_key.to_owned().into(),
176
176
  &private_key,
177
177
  &bls_adapter,
178
178
  )
179
- .with_js_error()
179
+ .with_js_error()?;
180
+
181
+ let signature = state_transition.signature().to_owned();
182
+ let signature_public_key_id = state_transition.signature_public_key_id().unwrap_or(0);
183
+
184
+ self.0.set_signature(signature);
185
+ self.0.set_signature_public_key_id(signature_public_key_id);
186
+
187
+ Ok(())
180
188
  }
181
189
 
182
190
  #[wasm_bindgen(js_name=verifySignature)]
@@ -187,8 +195,7 @@ impl DataContractUpdateTransitionWasm {
187
195
  ) -> Result<bool, JsValue> {
188
196
  let bls_adapter = BlsAdapter(bls);
189
197
 
190
- let verification_result = self
191
- .0
198
+ let verification_result = StateTransition::DataContractUpdate(self.0.clone())
192
199
  .verify_signature(&identity_public_key.to_owned().into(), &bls_adapter);
193
200
 
194
201
  match verification_result {