@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,35 +1,41 @@
1
- use std::convert::TryInto;
1
+ use dpp::platform_value::Value;
2
+ use serde_json::Value as JsonValue;
2
3
  use std::default::Default;
3
4
 
4
5
  use wasm_bindgen::__rt::Ref;
5
6
  use wasm_bindgen::prelude::*;
6
7
 
8
+ use crate::bls_adapter::BlsAdapter;
9
+ use crate::errors::from_dpp_err;
10
+ use dpp::identity::KeyType;
11
+ use dpp::platform_value::BinaryData;
12
+ use dpp::version::PlatformVersion;
13
+
7
14
  use crate::identifier::IdentifierWrapper;
8
15
 
16
+ use crate::identity::state_transition::asset_lock_proof::create_asset_lock_proof_from_wasm_instance;
17
+
9
18
  use crate::{
10
19
  buffer::Buffer,
11
- create_asset_lock_proof_from_wasm_instance,
12
20
  errors::RustConversionError,
13
21
  identity::state_transition::asset_lock_proof::{
14
22
  ChainAssetLockProofWasm, InstantAssetLockProofWasm,
15
23
  },
16
24
  identity::state_transition::identity_public_key_transitions::IdentityPublicKeyWithWitnessWasm,
17
- with_js_error,
25
+ utils, with_js_error,
18
26
  };
19
27
 
20
- use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
21
- use dpp::state_transition::StateTransition;
22
-
23
- use crate::utils::{generic_of_js_val, ToSerdeJSONExt, WithJsError};
24
- use dpp::identity::KeyType;
28
+ use crate::bls_adapter::JsBlsAdapter;
29
+ use crate::utils::{generic_of_js_val, WithJsError};
30
+ use dpp::platform_value::string_encoding;
25
31
  use dpp::platform_value::string_encoding::Encoding;
26
- use dpp::platform_value::{string_encoding, BinaryData};
27
- use dpp::serialization_traits::PlatformSerializable;
32
+ use dpp::serialization::{PlatformSerializable, ValueConvertible};
33
+ use dpp::state_transition::identity_create_transition::accessors::IdentityCreateTransitionAccessorsV0;
34
+ use dpp::state_transition::StateTransition;
28
35
  use dpp::{
29
- identity::state_transition::{
30
- asset_lock_proof::AssetLockProof, identity_create_transition::IdentityCreateTransition,
31
- identity_public_key_transitions::IdentityPublicKeyInCreation,
32
- },
36
+ identity::state_transition::asset_lock_proof::AssetLockProof,
37
+ state_transition::identity::identity_create_transition::IdentityCreateTransition,
38
+ state_transition::identity::public_key_in_creation::IdentityPublicKeyInCreation,
33
39
  state_transition::StateTransitionLike,
34
40
  };
35
41
 
@@ -52,14 +58,13 @@ impl From<IdentityCreateTransitionWasm> for IdentityCreateTransition {
52
58
  #[wasm_bindgen(js_class = IdentityCreateTransition)]
53
59
  impl IdentityCreateTransitionWasm {
54
60
  #[wasm_bindgen(constructor)]
55
- pub fn new(raw_parameters: JsValue) -> Result<IdentityCreateTransitionWasm, JsValue> {
56
- let mut raw_state_transition = raw_parameters.with_serde_to_platform_value()?;
57
- IdentityCreateTransition::clean_value(&mut raw_state_transition).with_js_error()?;
58
- let identity_create_transition =
59
- IdentityCreateTransition::from_raw_object(raw_state_transition)
60
- .map_err(|e| RustConversionError::Error(e.to_string()).to_js_value())?;
61
-
62
- Ok(identity_create_transition.into())
61
+ pub fn new(platform_version: u32) -> Result<IdentityCreateTransitionWasm, JsValue> {
62
+ let platform_version =
63
+ &PlatformVersion::get(platform_version).map_err(|e| JsValue::from(e.to_string()))?;
64
+
65
+ IdentityCreateTransition::default_versioned(&platform_version)
66
+ .map(Into::into)
67
+ .map_err(from_dpp_err)
63
68
  }
64
69
 
65
70
  #[wasm_bindgen(js_name=setAssetLockProof)]
@@ -80,7 +85,7 @@ impl IdentityCreateTransitionWasm {
80
85
 
81
86
  #[wasm_bindgen(js_name=getAssetLockProof)]
82
87
  pub fn get_asset_lock_proof(&self) -> JsValue {
83
- let asset_lock_proof = self.0.get_asset_lock_proof().to_owned();
88
+ let asset_lock_proof = self.0.asset_lock_proof().to_owned();
84
89
 
85
90
  match asset_lock_proof {
86
91
  AssetLockProof::Chain(chain_asset_lock_proof) => {
@@ -133,7 +138,7 @@ impl IdentityCreateTransitionWasm {
133
138
  #[wasm_bindgen(js_name=getPublicKeys)]
134
139
  pub fn get_public_keys(&self) -> Vec<JsValue> {
135
140
  self.0
136
- .get_public_keys()
141
+ .public_keys()
137
142
  .iter()
138
143
  .map(IdentityPublicKeyInCreation::to_owned)
139
144
  .map(IdentityPublicKeyWithWitnessWasm::from)
@@ -148,7 +153,7 @@ impl IdentityCreateTransitionWasm {
148
153
 
149
154
  #[wasm_bindgen(js_name=getType)]
150
155
  pub fn get_type(&self) -> u8 {
151
- self.0.get_type() as u8
156
+ self.0.state_transition_type() as u8
152
157
  }
153
158
 
154
159
  #[wasm_bindgen(getter, js_name=identityId)]
@@ -158,12 +163,12 @@ impl IdentityCreateTransitionWasm {
158
163
 
159
164
  #[wasm_bindgen(js_name=getIdentityId)]
160
165
  pub fn get_identity_id(&self) -> IdentifierWrapper {
161
- (*self.0.get_identity_id()).into()
166
+ self.0.identity_id().into()
162
167
  }
163
168
 
164
169
  #[wasm_bindgen(js_name=getOwnerId)]
165
170
  pub fn get_owner_id(&self) -> IdentifierWrapper {
166
- (*self.0.get_owner_id()).into()
171
+ (IdentityCreateTransitionAccessorsV0::owner_id(&self.0)).into()
167
172
  }
168
173
 
169
174
  #[wasm_bindgen(js_name=toObject)]
@@ -174,22 +179,22 @@ impl IdentityCreateTransitionWasm {
174
179
  Default::default()
175
180
  };
176
181
 
177
- let _skip_signature = opts.skip_signature;
178
- let object = super::to_object::to_object_struct(&self.0, opts);
182
+ let object = super::to_object::to_object_struct(&self.0, &opts);
183
+
179
184
  let js_object = js_sys::Object::new();
180
185
 
186
+ let version = match self.0 {
187
+ IdentityCreateTransition::V0(_) => "0",
188
+ };
189
+
190
+ js_sys::Reflect::set(&js_object, &"$version".to_owned().into(), &version.into())?;
191
+
181
192
  js_sys::Reflect::set(
182
193
  &js_object,
183
194
  &"type".to_owned().into(),
184
195
  &object.transition_type.into(),
185
196
  )?;
186
197
 
187
- js_sys::Reflect::set(
188
- &js_object,
189
- &"protocolVersion".to_owned().into(),
190
- &object.protocol_version.into(),
191
- )?;
192
-
193
198
  if let Some(signature) = object.signature {
194
199
  let signature_value: JsValue = if signature.is_empty() {
195
200
  JsValue::undefined()
@@ -219,7 +224,7 @@ impl IdentityCreateTransitionWasm {
219
224
  .public_keys
220
225
  .into_iter()
221
226
  .map(IdentityPublicKeyWithWitnessWasm::from)
222
- .map(|key| key.to_object(options.clone()))
227
+ .map(|key| key.to_object(opts.skip_signature.unwrap_or(false)))
223
228
  .collect::<Result<js_sys::Array, _>>()?;
224
229
 
225
230
  js_sys::Reflect::set(&js_object, &"publicKeys".to_owned().into(), &keys_objects)?;
@@ -229,29 +234,30 @@ impl IdentityCreateTransitionWasm {
229
234
 
230
235
  #[wasm_bindgen(js_name=toBuffer)]
231
236
  pub fn to_buffer(&self) -> Result<Buffer, JsValue> {
232
- let bytes =
233
- PlatformSerializable::serialize(&StateTransition::IdentityCreate(self.0.clone()))
234
- .with_js_error()?;
237
+ let bytes = PlatformSerializable::serialize_to_bytes(&StateTransition::IdentityCreate(
238
+ self.0.clone(),
239
+ ))
240
+ .with_js_error()?;
235
241
  Ok(Buffer::from_bytes(&bytes))
236
242
  }
237
243
 
238
244
  #[wasm_bindgen(js_name=toJSON)]
239
245
  pub fn to_json(&self) -> Result<JsValue, JsValue> {
240
- let object = super::to_object::to_object_struct(&self.0, Default::default());
246
+ let object = super::to_object::to_object_struct(&self.0, &Default::default());
241
247
  let js_object = js_sys::Object::new();
242
248
 
249
+ let version = match self.0 {
250
+ IdentityCreateTransition::V0(_) => "0",
251
+ };
252
+
253
+ js_sys::Reflect::set(&js_object, &"$version".to_owned().into(), &version.into())?;
254
+
243
255
  js_sys::Reflect::set(
244
256
  &js_object,
245
257
  &"type".to_owned().into(),
246
258
  &object.transition_type.into(),
247
259
  )?;
248
260
 
249
- js_sys::Reflect::set(
250
- &js_object,
251
- &"protocolVersion".to_owned().into(),
252
- &object.protocol_version.into(),
253
- )?;
254
-
255
261
  if let Some(signature) = object.signature {
256
262
  let signature_value: JsValue = if signature.is_empty() {
257
263
  JsValue::undefined()
@@ -290,8 +296,8 @@ impl IdentityCreateTransitionWasm {
290
296
  }
291
297
 
292
298
  #[wasm_bindgen(js_name=getModifiedDataIds)]
293
- pub fn get_modified_data_ids(&self) -> Vec<IdentifierWrapper> {
294
- let ids = self.0.get_modified_data_ids();
299
+ pub fn modified_data_ids(&self) -> Vec<IdentifierWrapper> {
300
+ let ids = self.0.modified_data_ids();
295
301
 
296
302
  ids.into_iter().map(IdentifierWrapper::from).collect()
297
303
  }
@@ -335,17 +341,25 @@ impl IdentityCreateTransitionWasm {
335
341
  BlsAdapter(JsValue::undefined().into())
336
342
  };
337
343
 
338
- self.0
344
+ // TODO: not the best approach because it involves cloning the transition
345
+ // Probably it worth to return `sign_by_private_key` per state transition
346
+ let mut wrapper = StateTransition::IdentityCreate(self.0.clone());
347
+ wrapper
339
348
  .sign_by_private_key(private_key.as_slice(), key_type, &bls_adapter)
340
- .with_js_error()
349
+ .with_js_error()?;
350
+
351
+ self.0.set_signature(wrapper.signature().to_owned());
352
+
353
+ Ok(())
341
354
  }
342
355
 
343
356
  #[wasm_bindgen(js_name=getSignature)]
344
357
  pub fn get_signature(&self) -> Buffer {
345
- Buffer::from_bytes_owned(self.0.get_signature().to_vec())
358
+ Buffer::from_bytes_owned(self.0.signature().to_vec())
346
359
  }
347
360
  #[wasm_bindgen(js_name=setSignature)]
348
361
  pub fn set_signature(&mut self, signature: Option<Vec<u8>>) {
349
- self.0.signature = BinaryData::new(signature.unwrap_or(vec![]))
362
+ self.0
363
+ .set_signature(BinaryData::new(signature.unwrap_or(vec![])))
350
364
  }
351
365
  }
@@ -7,7 +7,6 @@ use dpp::identity::state_transition::validate_public_key_signatures::PublicKeysS
7
7
  use dpp::identity::validation::{
8
8
  PublicKeysValidator, RequiredPurposeAndSecurityLevelValidator, PUBLIC_KEY_SCHEMA_FOR_TRANSITION,
9
9
  };
10
- use dpp::state_transition::state_transition_execution_context::StateTransitionExecutionContext;
11
10
 
12
11
  use dpp::version::{ProtocolVersionValidator, COMPATIBILITY_MAP, LATEST_VERSION};
13
12
  use dpp::ProtocolError;
@@ -1,8 +1,8 @@
1
1
  pub use identity_create_transition::*;
2
2
 
3
- pub mod apply_identity_create_transition;
3
+ // pub mod apply_identity_create_transition;
4
4
  pub mod identity_create_transition;
5
- pub mod identity_create_transition_basic_validator;
6
- pub mod identity_create_transition_state_validator;
5
+ // pub mod identity_create_transition_basic_validator;
6
+ // pub mod identity_create_transition_state_validator;
7
7
 
8
8
  mod to_object;
@@ -1,8 +1,8 @@
1
1
  use dpp::identity::state_transition::asset_lock_proof::AssetLockProof;
2
- use dpp::identity::state_transition::identity_public_key_transitions::IdentityPublicKeyInCreation;
2
+ use dpp::state_transition::identity_create_transition::accessors::IdentityCreateTransitionAccessorsV0;
3
+ use dpp::state_transition::public_key_in_creation::IdentityPublicKeyInCreation;
3
4
  use dpp::{
4
- identifier::Identifier,
5
- identity::state_transition::identity_create_transition::IdentityCreateTransition,
5
+ identifier::Identifier, state_transition::identity_create_transition::IdentityCreateTransition,
6
6
  state_transition::StateTransitionLike,
7
7
  };
8
8
  use serde::Deserialize;
@@ -17,7 +17,6 @@ pub struct ToObjectOptions {
17
17
  #[derive(Default)]
18
18
  pub struct ToObject {
19
19
  pub transition_type: u8,
20
- pub protocol_version: u32,
21
20
  pub identity_id: Identifier,
22
21
  pub asset_lock_proof: AssetLockProof,
23
22
  pub public_keys: Vec<IdentityPublicKeyInCreation>,
@@ -26,19 +25,18 @@ pub struct ToObject {
26
25
 
27
26
  pub fn to_object_struct(
28
27
  transition: &IdentityCreateTransition,
29
- options: ToObjectOptions,
28
+ options: &ToObjectOptions,
30
29
  ) -> ToObject {
31
30
  let mut to_object = ToObject {
32
- transition_type: transition.get_type() as u8,
33
- protocol_version: transition.get_protocol_version(),
34
- public_keys: transition.get_public_keys().to_owned(),
35
- asset_lock_proof: transition.get_asset_lock_proof().to_owned(),
36
- identity_id: transition.get_identity_id().to_owned(),
31
+ transition_type: transition.state_transition_type() as u8,
32
+ public_keys: transition.public_keys().to_owned(),
33
+ asset_lock_proof: transition.asset_lock_proof().to_owned(),
34
+ identity_id: transition.identity_id().to_owned(),
37
35
  signature: None,
38
36
  };
39
37
 
40
38
  if !options.skip_signature.unwrap_or(false) {
41
- to_object.signature = Some(transition.get_signature().to_vec());
39
+ to_object.signature = Some(transition.signature().to_vec());
42
40
  }
43
41
 
44
42
  to_object
@@ -0,0 +1,31 @@
1
+ use dpp::identity::state_transition::identity_credit_transfer_transition::apply_identity_credit_transfer::ApplyIdentityCreditTransferTransition;
2
+ use std::sync::Arc;
3
+ use wasm_bindgen::prelude::*;
4
+
5
+ use crate::identity::state_transition::identity_credit_transfer_transition::transition::IdentityCreditTransferTransitionWasm;
6
+ use crate::{
7
+ state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
8
+ StateTransitionExecutionContextWasm,
9
+ };
10
+
11
+ #[wasm_bindgen(js_name=applyIdentityCreditTransferTransition)]
12
+ pub async fn apply_identity_credit_transfer_transition_wasm(
13
+ state_repository: ExternalStateRepositoryLike,
14
+ state_transition: &IdentityCreditTransferTransitionWasm,
15
+ execution_context: &StateTransitionExecutionContextWasm,
16
+ ) -> Result<(), JsValue> {
17
+ let wrapped_state_repository =
18
+ Arc::new(ExternalStateRepositoryLikeWrapper::new(state_repository));
19
+
20
+ let instance = ApplyIdentityCreditTransferTransition::new(wrapped_state_repository);
21
+
22
+ instance
23
+ .apply(
24
+ &state_transition.to_owned().into(),
25
+ &execution_context.to_owned().into(),
26
+ )
27
+ .await
28
+ .map_err(|e| JsValue::from_str(&e.to_string()))?;
29
+
30
+ Ok(())
31
+ }
@@ -0,0 +1,66 @@
1
+ use dpp::identity::state_transition::identity_credit_transfer_transition::validation::basic::identity_credit_transfer_basic::IdentityCreditTransferTransitionBasicValidator;
2
+
3
+ use dpp::version::{ProtocolVersionValidator, COMPATIBILITY_MAP, LATEST_VERSION};
4
+ use dpp::ProtocolError;
5
+
6
+ use wasm_bindgen::prelude::*;
7
+
8
+ use crate::errors::from_dpp_err;
9
+ use crate::utils::ToSerdeJSONExt;
10
+ use crate::validation::ValidationResultWasm;
11
+
12
+ #[wasm_bindgen(js_name=IdentityCreditTransferTransitionBasicValidator)]
13
+ pub struct IdentityCreditTransferTransitionBasicValidatorWasm(
14
+ IdentityCreditTransferTransitionBasicValidator,
15
+ );
16
+
17
+ impl From<IdentityCreditTransferTransitionBasicValidator>
18
+ for IdentityCreditTransferTransitionBasicValidatorWasm
19
+ {
20
+ fn from(validator: IdentityCreditTransferTransitionBasicValidator) -> Self {
21
+ Self(validator)
22
+ }
23
+ }
24
+
25
+ #[wasm_bindgen(js_class=IdentityCreditTransferTransitionBasicValidator)]
26
+ impl IdentityCreditTransferTransitionBasicValidatorWasm {
27
+ #[wasm_bindgen(constructor)]
28
+ pub fn new() -> Result<IdentityCreditTransferTransitionBasicValidatorWasm, JsValue> {
29
+ let protocol_version_validator = ProtocolVersionValidator::new(
30
+ LATEST_VERSION,
31
+ LATEST_VERSION,
32
+ COMPATIBILITY_MAP.clone(),
33
+ );
34
+
35
+ let validator =
36
+ IdentityCreditTransferTransitionBasicValidator::new(protocol_version_validator)
37
+ .map_err(|e| from_dpp_err(ProtocolError::Generic(e.to_string())))?;
38
+
39
+ Ok(validator.into())
40
+ }
41
+
42
+ #[wasm_bindgen]
43
+ pub async fn validate(
44
+ mut self,
45
+ raw_state_transition: JsValue,
46
+ ) -> Result<ValidationResultWasm, JsValue> {
47
+ let current_protocol_version =
48
+ js_sys::Reflect::get(&raw_state_transition, &"protocolVersion".into())
49
+ .map(|v| v.as_f64().unwrap_or(LATEST_VERSION as f64) as u32)
50
+ .unwrap_or(LATEST_VERSION);
51
+
52
+ self.0
53
+ .protocol_version_validator()
54
+ .set_current_protocol_version(current_protocol_version);
55
+
56
+ let state_transition_object = raw_state_transition.with_serde_to_platform_value()?;
57
+
58
+ let validation_result = self
59
+ .0
60
+ .validate(&state_transition_object)
61
+ .await
62
+ .map_err(|e| from_dpp_err(e.into()))?;
63
+
64
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
65
+ }
66
+ }
@@ -0,0 +1,44 @@
1
+ use crate::errors::from_dpp_err;
2
+ use crate::state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper};
3
+ use crate::validation::ValidationResultWasm;
4
+ use crate::{IdentityCreditTransferTransitionWasm, StateTransitionExecutionContextWasm};
5
+ use dpp::identity::state_transition::identity_credit_transfer_transition::validation::state::IdentityCreditTransferTransitionStateValidator;
6
+ use dpp::identity::state_transition::identity_credit_transfer_transition::IdentityCreditTransferTransition;
7
+ use wasm_bindgen::prelude::*;
8
+ use wasm_bindgen::JsValue;
9
+
10
+ #[wasm_bindgen(js_name=IdentityCreditTransferTransitionStateValidator)]
11
+ pub struct IdentityCreditTransferTransitionStateValidatorWasm(
12
+ IdentityCreditTransferTransitionStateValidator<ExternalStateRepositoryLikeWrapper>,
13
+ );
14
+
15
+ #[wasm_bindgen(js_class=IdentityCreditTransferTransitionStateValidator)]
16
+ impl IdentityCreditTransferTransitionStateValidatorWasm {
17
+ #[wasm_bindgen(constructor)]
18
+ pub fn new(
19
+ state_repository: ExternalStateRepositoryLike,
20
+ ) -> Result<IdentityCreditTransferTransitionStateValidatorWasm, JsValue> {
21
+ let state_repository = ExternalStateRepositoryLikeWrapper::new(state_repository);
22
+
23
+ let validator = IdentityCreditTransferTransitionStateValidator::new(state_repository);
24
+
25
+ Ok(Self(validator))
26
+ }
27
+
28
+ #[wasm_bindgen]
29
+ pub async fn validate(
30
+ &self,
31
+ state_transition: &IdentityCreditTransferTransitionWasm,
32
+ execution_context: &StateTransitionExecutionContextWasm,
33
+ ) -> Result<ValidationResultWasm, JsValue> {
34
+ let state_transition: IdentityCreditTransferTransition = state_transition.to_owned().into();
35
+
36
+ let validation_result = self
37
+ .0
38
+ .validate(&state_transition, &execution_context.to_owned().into())
39
+ .await
40
+ .map_err(from_dpp_err)?;
41
+
42
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
43
+ }
44
+ }
@@ -0,0 +1,8 @@
1
+ pub use transition::*;
2
+
3
+ // pub mod apply_identity_credit_transfer_transition;
4
+ // pub mod identity_credit_transfer_transition_basic_validator;
5
+ // pub mod identity_credit_transfer_transition_state_validator;
6
+ pub mod transition;
7
+
8
+ mod to_object;
@@ -0,0 +1,49 @@
1
+ use dpp::identity::KeyID;
2
+
3
+ use dpp::state_transition::identity_credit_transfer_transition::accessors::IdentityCreditTransferTransitionAccessorsV0;
4
+ use dpp::state_transition::identity_credit_transfer_transition::IdentityCreditTransferTransition;
5
+ use dpp::state_transition::StateTransitionIdentitySigned;
6
+ use dpp::{identifier::Identifier, state_transition::StateTransitionLike};
7
+ use serde::Deserialize;
8
+ use std::default::Default;
9
+
10
+ #[derive(Deserialize, Default)]
11
+ #[serde(rename_all = "camelCase")]
12
+ pub struct ToObjectOptions {
13
+ pub skip_signature: Option<bool>,
14
+ }
15
+
16
+ #[derive(Default)]
17
+ pub struct ToObject {
18
+ pub transition_type: u8,
19
+ pub identity_id: Identifier,
20
+ pub recipient_id: Identifier,
21
+ pub amount: u64,
22
+ pub signature: Option<Vec<u8>>,
23
+ pub signature_public_key_id: Option<KeyID>,
24
+ }
25
+
26
+ pub fn to_object_struct(
27
+ transition: &IdentityCreditTransferTransition,
28
+ options: ToObjectOptions,
29
+ ) -> ToObject {
30
+ let mut to_object = ToObject {
31
+ transition_type: transition.state_transition_type() as u8,
32
+ identity_id: transition.identity_id(),
33
+ recipient_id: transition.recipient_id(),
34
+ amount: transition.amount(),
35
+ ..ToObject::default()
36
+ };
37
+
38
+ if !options.skip_signature.unwrap_or(false) {
39
+ let signature = Some(transition.signature().to_vec());
40
+ if let Some(signature) = &signature {
41
+ if !signature.is_empty() {
42
+ to_object.signature_public_key_id = Some(transition.signature_public_key_id())
43
+ }
44
+ }
45
+ to_object.signature = signature;
46
+ }
47
+
48
+ to_object
49
+ }