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

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