@dashevo/wasm-dpp 0.24.0-dev.12 → 0.24.0-dev.14

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 (245) hide show
  1. package/.mocharc.yml +1 -1
  2. package/Cargo.toml +5 -2
  3. package/README.md +5 -1
  4. package/dist/index.js +1 -1
  5. package/dist/index.js.LICENSE.txt +9 -0
  6. package/dist/wasm/wasm_dpp.d.ts +3397 -1237
  7. package/karma.conf.js +5 -0
  8. package/lib/identifier/patchIdentifier.ts +5 -4
  9. package/lib/index.ts +1 -1
  10. package/lib/test/bootstrap.js +5 -0
  11. package/lib/test/fixtures/getDataContractFixture.js +267 -0
  12. package/lib/test/fixtures/getDocumentsFixture.js +43 -0
  13. package/lib/test/mocks/createStateRepositoryMock.js +64 -0
  14. package/lib/test/mocks/getBlsAdapterMock.js +51 -0
  15. package/package.json +11 -8
  16. package/src/bls_adapter.rs +17 -1
  17. package/src/buffer.rs +3 -0
  18. package/src/dash_platform_protocol.rs +107 -10
  19. package/src/data_contract/data_contract.rs +59 -10
  20. package/src/data_contract/data_contract_facade.rs +128 -0
  21. package/src/data_contract/errors/invalid_data_contract.rs +16 -16
  22. package/src/data_contract/errors/invalid_document_type.rs +8 -8
  23. package/src/data_contract/errors/mod.rs +10 -16
  24. package/src/data_contract/index.rs +56 -1
  25. package/src/data_contract/mod.rs +4 -0
  26. package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +1 -1
  27. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +41 -10
  28. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +35 -4
  29. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +1 -1
  30. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +20 -7
  31. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +47 -11
  32. package/src/data_contract_factory/data_contract_factory.rs +19 -17
  33. package/src/data_trigger/data_trigger_execution_context.rs +95 -0
  34. package/src/data_trigger/data_trigger_execution_result.rs +48 -0
  35. package/src/data_trigger/execute_data_triggers_factory.rs +60 -0
  36. package/src/data_trigger/get_data_triggers_factory.rs +65 -0
  37. package/src/data_trigger/mod.rs +121 -0
  38. package/src/document/document_facade.rs +125 -0
  39. package/src/document/errors/invalid_document_error.rs +10 -9
  40. package/src/document/errors/invalid_initial_revision_error.rs +1 -1
  41. package/src/document/errors/mismatch_owners_ids_error.rs +14 -4
  42. package/src/document/errors/mod.rs +17 -13
  43. package/src/document/errors/no_documents_supplied_error.rs +4 -4
  44. package/src/document/factory.rs +257 -0
  45. package/src/document/fetch_and_validate_data_contract.rs +77 -0
  46. package/src/document/generate_document_id.rs +17 -0
  47. package/src/document/mod.rs +311 -37
  48. package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +22 -0
  49. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +253 -1
  50. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +60 -1
  51. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +263 -0
  52. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +302 -3
  53. package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
  54. package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_id.rs +40 -0
  55. package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_indices.rs +50 -0
  56. package/src/document/state_transition/document_batch_transition/validation/basic/mod.rs +8 -0
  57. package/src/document/state_transition/document_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs +34 -0
  58. package/src/document/state_transition/document_batch_transition/validation/basic/validate_partial_compound_indices.rs +39 -0
  59. package/src/document/state_transition/document_batch_transition/validation/mod.rs +2 -0
  60. package/src/document/state_transition/document_batch_transition/validation/state/fetch_documents.rs +43 -0
  61. package/src/document/state_transition/document_batch_transition/validation/state/mod.rs +3 -0
  62. package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_batch_transitions_state.rs +27 -0
  63. package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_uniqueness_by_indices.rs +47 -0
  64. package/src/document/validator.rs +52 -0
  65. package/src/errors/compatible_protocol_version_is_not_defined_error.rs +24 -0
  66. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -1
  67. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -1
  68. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +2 -2
  69. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +15 -1
  70. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +16 -2
  71. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -1
  72. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -1
  73. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
  74. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
  75. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
  76. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +2 -2
  77. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +29 -0
  78. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +4 -3
  79. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -1
  80. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -1
  81. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +4 -3
  82. package/src/errors/consensus/basic/identity/mod.rs +2 -0
  83. package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -1
  84. package/src/errors/consensus/basic/json_schema_error.rs +8 -2
  85. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -1
  86. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +9 -9
  87. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +4 -4
  88. package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +35 -0
  89. package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +34 -0
  90. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +10 -7
  91. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +2 -3
  92. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +7 -3
  93. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +2 -3
  94. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +7 -4
  95. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +2 -1
  96. package/src/errors/consensus/state/identity/mod.rs +4 -0
  97. package/src/errors/consensus_error.rs +218 -268
  98. package/src/errors/data_contract_not_present_error.rs +23 -0
  99. package/src/errors/dpp_error.rs +17 -0
  100. package/src/errors/from.rs +22 -0
  101. package/src/errors/js_conversion.rs +52 -5
  102. package/src/errors/mod.rs +6 -0
  103. package/src/errors/protocol_error.rs +14 -3
  104. package/src/identifier/errors.rs +30 -0
  105. package/src/identifier/mod.rs +95 -11
  106. package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
  107. package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
  108. package/src/identity/errors/invalid_identity_error.rs +32 -0
  109. package/src/identity/errors/mod.rs +9 -0
  110. package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
  111. package/src/identity/factory_utils.rs +87 -0
  112. package/src/identity/identity_facade.rs +194 -20
  113. package/src/identity/identity_factory.rs +209 -0
  114. package/src/identity/identity_public_key/mod.rs +51 -40
  115. package/src/identity/mod.rs +31 -17
  116. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
  117. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
  118. package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
  119. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
  120. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
  121. package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
  122. package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
  123. package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
  124. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +337 -0
  125. package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
  126. package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
  127. package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
  128. package/src/identity/state_transition/identity_create_transition/to_object.rs +45 -0
  129. package/src/identity/state_transition/identity_public_key_transitions.rs +207 -0
  130. package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
  131. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +278 -0
  132. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
  133. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
  134. package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
  135. package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
  136. package/src/identity/state_transition/identity_update_transition/apply_identity_update_transition.rs +24 -0
  137. package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +55 -0
  138. package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +448 -0
  139. package/src/identity/state_transition/identity_update_transition/identity_update_transition_basic_validator.rs +94 -0
  140. package/src/identity/state_transition/identity_update_transition/identity_update_transition_state_validator.rs +53 -0
  141. package/src/identity/state_transition/identity_update_transition/mod.rs +9 -0
  142. package/src/identity/state_transition/identity_update_transition/to_object.rs +66 -0
  143. package/src/identity/state_transition/mod.rs +12 -0
  144. package/src/identity/state_transition/validate_public_key_signatures.rs +61 -0
  145. package/src/identity/validation/identity_validator.rs +50 -0
  146. package/src/identity/validation/mod.rs +2 -0
  147. package/src/identity/validation/public_keys_validator.rs +14 -13
  148. package/src/identity_public_key/public_keys_validator.rs +44 -0
  149. package/src/lib.rs +6 -0
  150. package/src/lodash.rs +7 -0
  151. package/src/metadata.rs +54 -10
  152. package/src/state_repository.rs +598 -101
  153. package/src/state_transition/conversion.rs +104 -0
  154. package/src/state_transition/errors/invalid_state_transition_error.rs +32 -0
  155. package/src/state_transition/errors/mod.rs +1 -0
  156. package/src/state_transition/mod.rs +46 -0
  157. package/src/state_transition/state_transition_facade.rs +263 -0
  158. package/src/state_transition/state_transition_factory.rs +216 -0
  159. package/src/state_transition/validation/mod.rs +1 -0
  160. package/src/state_transition/validation/validate_state_transition_key_signature.rs +62 -0
  161. package/src/utils.rs +210 -8
  162. package/src/validation/json_schema_validator.rs +41 -0
  163. package/src/validation/mod.rs +2 -0
  164. package/src/validation/validation_result.rs +29 -5
  165. package/src/version/mod.rs +2 -0
  166. package/src/version/protocol_version.rs +103 -0
  167. package/test/integration/dataContract/DataContractFacade.spec.js +46 -30
  168. package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +45 -127
  169. package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +91 -139
  170. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +577 -503
  171. package/test/integration/document/Document.spec.js +55 -29
  172. package/test/integration/document/DocumentFacade.spec.js +51 -64
  173. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +38 -16
  174. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +341 -396
  175. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +116 -218
  176. package/test/integration/document/validation/validateDocumentFactory.spec.js +123 -171
  177. package/test/integration/identity/IdentityFacade.spec.js +52 -27
  178. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +185 -164
  179. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +84 -114
  180. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +120 -137
  181. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +106 -91
  182. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +50 -16
  183. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +78 -86
  184. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +74 -30
  185. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -147
  186. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +65 -77
  187. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +60 -23
  188. package/test/integration/identity/validation/validateIdentityFactory.spec.js +46 -114
  189. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +9 -3
  190. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +12 -8
  191. package/test/integration/stateTransition/StateTransitionFacade.spec.js +95 -233
  192. package/test/integration/stateTransition/calculateStateTransitionFeeFromOperationsFactory.spec.js +53 -0
  193. package/test/unit/Identifier.spec.js +36 -36
  194. package/test/unit/Metadata.spec.js +17 -3
  195. package/test/unit/dataContract/DataContract.spec.js +9 -4
  196. package/test/unit/dataContract/createDataContract.spec.js +0 -1
  197. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
  198. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +1 -1
  199. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +2 -2
  200. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +3 -3
  201. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +1 -1
  202. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +25 -31
  203. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +3 -3
  204. package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +2 -0
  205. package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
  206. package/test/unit/document/Document.spec.js +147 -155
  207. package/test/unit/document/DocumentFactory.spec.js +153 -153
  208. package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +59 -14
  209. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +131 -62
  210. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +144 -56
  211. package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +38 -8
  212. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +11 -7
  213. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +29 -18
  214. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +38 -29
  215. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +53 -91
  216. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +357 -493
  217. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +133 -72
  218. package/test/unit/identity/Identity.spec.js +26 -9
  219. package/test/unit/identity/IdentityFactory.spec.js +81 -89
  220. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +73 -30
  221. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +38 -38
  222. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +34 -25
  223. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
  224. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +85 -50
  225. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
  226. package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +44 -22
  227. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +58 -103
  228. package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
  229. package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
  230. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
  231. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
  232. package/test/unit/stateTransition/StateTransitionFactory.spec.js +49 -101
  233. package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +23 -25
  234. package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +73 -46
  235. package/test/unit/version/validateProtocolVersionFactory.spec.js +45 -27
  236. package/wasm/package.json +5 -0
  237. package/wasm/wasm_dpp.d.ts +3397 -1237
  238. package/wasm/wasm_dpp.js +7158 -1384
  239. package/wasm/wasm_dpp_bg.js +1 -1
  240. package/wasm/wasm_dpp_bg.wasm +0 -0
  241. package/wasm/wasm_dpp_bg.wasm.d.ts +777 -389
  242. package/webpack.config.js +9 -0
  243. package/src/document/state_transition/document_batch_transition/document_transition/document_update_transition.rs +0 -22
  244. package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +0 -135
  245. package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +0 -54
@@ -1,14 +1,274 @@
1
1
  mod document_create_transition;
2
2
  mod document_delete_transition;
3
- mod document_update_transition;
3
+ mod document_replace_transition;
4
4
 
5
+ use anyhow::Context;
5
6
  pub use document_create_transition::*;
6
7
  pub use document_delete_transition::*;
7
- pub use document_update_transition::*;
8
+ pub use document_replace_transition::*;
8
9
 
9
- use dpp::prelude::DocumentTransition;
10
+ use dpp::{
11
+ document::document_transition::{
12
+ DocumentCreateTransition, DocumentDeleteTransition, DocumentReplaceTransition,
13
+ DocumentTransitionExt, DocumentTransitionObjectLike,
14
+ },
15
+ prelude::{DocumentTransition, Identifier},
16
+ util::{json_schema::JsonSchemaExt, json_value::JsonValueExt},
17
+ };
18
+ use serde::Serialize;
19
+ use serde_json::Value;
10
20
  use wasm_bindgen::prelude::*;
11
21
 
22
+ use crate::{
23
+ buffer::Buffer,
24
+ identifier::{identifier_from_js_value, IdentifierWrapper},
25
+ lodash::lodash_set,
26
+ utils::{try_to_u64, Inner, ToSerdeJSONExt, WithJsError},
27
+ with_js_error, BinaryType, ConversionOptions, DataContractWasm,
28
+ };
29
+
30
+ #[wasm_bindgen(js_name=DocumentTransition)]
31
+ #[derive(Debug, Clone)]
32
+ pub struct DocumentTransitionWasm(DocumentTransition);
33
+
34
+ #[wasm_bindgen(js_class=DocumentTransition)]
35
+ impl DocumentTransitionWasm {
36
+ #[wasm_bindgen(js_name=getId)]
37
+ pub fn get_id(&self) -> IdentifierWrapper {
38
+ self.0.get_id().to_owned().into()
39
+ }
40
+
41
+ #[wasm_bindgen(js_name=getType)]
42
+ pub fn get_type(&self) -> String {
43
+ self.0.get_document_type().to_owned()
44
+ }
45
+
46
+ #[wasm_bindgen(js_name=getAction)]
47
+ pub fn get_action(&self) -> u8 {
48
+ self.0.get_action().into()
49
+ }
50
+
51
+ #[wasm_bindgen(js_name=getDataContract)]
52
+ pub fn get_data_contract(&self) -> DataContractWasm {
53
+ self.0.get_data_contract().to_owned().into()
54
+ }
55
+
56
+ #[wasm_bindgen(js_name=getDataContractId)]
57
+ pub fn get_data_contract_id(&self) -> IdentifierWrapper {
58
+ self.0.get_data_contract_id().to_owned().into()
59
+ }
60
+
61
+ #[wasm_bindgen(js_name=setDataContractId)]
62
+ pub fn set_data_contract_id(&mut self, js_data_contract_id: &JsValue) -> Result<(), JsValue> {
63
+ let identifier = identifier_from_js_value(js_data_contract_id)?;
64
+ self.0.set_data_contract_id(identifier);
65
+ Ok(())
66
+ }
67
+
68
+ #[wasm_bindgen(js_name=getRevision)]
69
+ pub fn get_revision(&self) -> JsValue {
70
+ if let Some(revision) = self.0.get_revision() {
71
+ (revision as f64).into()
72
+ } else {
73
+ JsValue::NULL
74
+ }
75
+ }
76
+
77
+ #[wasm_bindgen(js_name=getCreatedAt)]
78
+ pub fn get_created_at(&self) -> JsValue {
79
+ if let Some(created_at) = self.0.get_created_at() {
80
+ (created_at as f64).into()
81
+ } else {
82
+ JsValue::NULL
83
+ }
84
+ }
85
+ #[wasm_bindgen(js_name=getUpdatedAt)]
86
+ pub fn get_updated_at(&self) -> JsValue {
87
+ if let Some(updated_at) = self.0.get_updated_at() {
88
+ (updated_at as f64).into()
89
+ } else {
90
+ JsValue::NULL
91
+ }
92
+ }
93
+
94
+ #[wasm_bindgen(js_name=setUpdatedAt)]
95
+ pub fn set_updated_at(&mut self, js_timestamp_millis: JsValue) -> Result<(), JsValue> {
96
+ if js_timestamp_millis.is_undefined() || js_timestamp_millis.is_null() {
97
+ self.0.set_updated_at(None);
98
+ return Ok(());
99
+ }
100
+ let timestamp_millis = try_to_u64(js_timestamp_millis)
101
+ .context("setting updatedAt in DocumentsBatchTransition")
102
+ .with_js_error()?;
103
+ self.0.set_updated_at(Some(timestamp_millis as i64));
104
+
105
+ Ok(())
106
+ }
107
+
108
+ #[wasm_bindgen(js_name=setCreatedAt)]
109
+ pub fn set_created_at(&mut self, js_timestamp_millis: JsValue) -> Result<(), JsValue> {
110
+ if js_timestamp_millis.is_undefined() || js_timestamp_millis.is_null() {
111
+ self.0.set_created_at(None);
112
+ return Ok(());
113
+ }
114
+ let timestamp_millis = try_to_u64(js_timestamp_millis)
115
+ .context("setting createdAt in DocumentsBatchTransition")
116
+ .with_js_error()?;
117
+ self.0.set_created_at(Some(timestamp_millis as i64));
118
+
119
+ Ok(())
120
+ }
121
+
122
+ #[wasm_bindgen(js_name=getData)]
123
+ pub fn get_data(&self) -> Result<JsValue, JsValue> {
124
+ if let Some(data) = self.0.get_data() {
125
+ let (identifier_paths, binary_paths) = self
126
+ .0
127
+ .get_data_contract()
128
+ .get_identifiers_and_binary_paths(self.0.get_document_type())
129
+ .with_js_error()?;
130
+
131
+ let js_value = to_object(
132
+ data.to_owned(),
133
+ &JsValue::NULL,
134
+ identifier_paths,
135
+ binary_paths,
136
+ )?;
137
+ Ok(js_value)
138
+ } else {
139
+ Ok(JsValue::NULL)
140
+ }
141
+ }
142
+
143
+ #[wasm_bindgen(js_name=get)]
144
+ pub fn get(&self, path: &str) -> JsValue {
145
+ let binary_type = self.get_binary_type_of_path(path);
146
+
147
+ if let Some(value) = self.0.get_dynamic_property(path) {
148
+ match binary_type {
149
+ BinaryType::Identifier => {
150
+ if let Ok(bytes) = serde_json::from_value::<Vec<u8>>(value.to_owned()) {
151
+ let id: IdentifierWrapper = Identifier::from_bytes(&bytes).unwrap().into();
152
+
153
+ return id.into();
154
+ }
155
+ }
156
+ BinaryType::Buffer => {
157
+ if let Ok(bytes) = serde_json::from_value::<Vec<u8>>(value.to_owned()) {
158
+ return Buffer::from_bytes(&bytes).into();
159
+ }
160
+ }
161
+ BinaryType::None => {
162
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
163
+ if let Ok(js_value) = value.serialize(&serializer) {
164
+ return js_value;
165
+ }
166
+ }
167
+ }
168
+ }
169
+
170
+ JsValue::undefined()
171
+ }
172
+
173
+ #[wasm_bindgen(js_name=toObject)]
174
+ pub fn to_object(&self, options: &JsValue) -> Result<JsValue, JsValue> {
175
+ match self.0 {
176
+ DocumentTransition::Create(ref t) => {
177
+ DocumentCreateTransitionWasm::from(t.to_owned()).to_object(options)
178
+ }
179
+ DocumentTransition::Replace(ref t) => {
180
+ DocumentReplaceTransitionWasm::from(t.to_owned()).to_object(options)
181
+ }
182
+ DocumentTransition::Delete(ref t) => {
183
+ DocumentDeleteTransitionWasm::from(t.to_owned()).to_object(options)
184
+ }
185
+ }
186
+ }
187
+
188
+ #[wasm_bindgen(js_name=toJSON)]
189
+ pub fn to_json(&self) -> Result<JsValue, JsValue> {
190
+ let json_value = self.0.to_json().with_js_error()?;
191
+ with_js_error!(json_value.serialize(&serde_wasm_bindgen::Serializer::json_compatible()))
192
+ }
193
+
194
+ #[wasm_bindgen(js_name=fromTransitionCreate)]
195
+ pub fn from_transition_create(
196
+ js_create_transition: DocumentCreateTransitionWasm,
197
+ ) -> DocumentTransitionWasm {
198
+ let transition_create: DocumentCreateTransition = js_create_transition.into();
199
+ let document_transition = DocumentTransition::Create(transition_create);
200
+
201
+ document_transition.into()
202
+ }
203
+
204
+ #[wasm_bindgen(js_name=fromTransitionReplace)]
205
+ pub fn from_transition_replace(
206
+ js_replace_transition: DocumentReplaceTransitionWasm,
207
+ ) -> DocumentTransitionWasm {
208
+ let transition_replace: DocumentReplaceTransition = js_replace_transition.into();
209
+ let document_transition = DocumentTransition::Replace(transition_replace);
210
+
211
+ document_transition.into()
212
+ }
213
+
214
+ #[wasm_bindgen(js_name=fromTransitionDelete)]
215
+ pub fn from_transition_delete(
216
+ js_delete_transition: DocumentDeleteTransitionWasm,
217
+ ) -> DocumentTransitionWasm {
218
+ let transition_delete: DocumentDeleteTransition = js_delete_transition.into();
219
+ let document_transition = DocumentTransition::Delete(transition_delete);
220
+
221
+ document_transition.into()
222
+ }
223
+ }
224
+
225
+ impl DocumentTransitionWasm {
226
+ fn get_binary_type_of_path(&self, path: impl AsRef<str>) -> BinaryType {
227
+ let maybe_binary_properties = self
228
+ .0
229
+ .get_data_contract()
230
+ .get_binary_properties(self.0.get_document_type());
231
+
232
+ if let Ok(binary_properties) = maybe_binary_properties {
233
+ if let Some(data) = binary_properties.get(path.as_ref()) {
234
+ if data.is_type_of_identifier() {
235
+ return BinaryType::Identifier;
236
+ }
237
+ return BinaryType::Buffer;
238
+ }
239
+ }
240
+ BinaryType::None
241
+ }
242
+ }
243
+
244
+ impl From<DocumentTransition> for DocumentTransitionWasm {
245
+ fn from(v: DocumentTransition) -> Self {
246
+ DocumentTransitionWasm(v)
247
+ }
248
+ }
249
+
250
+ impl From<DocumentTransitionWasm> for DocumentTransition {
251
+ fn from(v: DocumentTransitionWasm) -> Self {
252
+ v.0
253
+ }
254
+ }
255
+
256
+ impl Inner for DocumentTransitionWasm {
257
+ type InnerItem = DocumentTransition;
258
+
259
+ fn into_inner(self) -> Self::InnerItem {
260
+ self.0
261
+ }
262
+
263
+ fn inner(&self) -> &Self::InnerItem {
264
+ &self.0
265
+ }
266
+
267
+ fn inner_mut(&mut self) -> &mut Self::InnerItem {
268
+ &mut self.0
269
+ }
270
+ }
271
+
12
272
  pub fn from_document_transition_to_js_value(document_transition: DocumentTransition) -> JsValue {
13
273
  match document_transition {
14
274
  DocumentTransition::Create(create_transition) => {
@@ -22,3 +282,42 @@ pub fn from_document_transition_to_js_value(document_transition: DocumentTransit
22
282
  }
23
283
  }
24
284
  }
285
+
286
+ pub(crate) fn to_object<'a>(
287
+ value: Value,
288
+ options: &JsValue,
289
+ identifiers_paths: impl IntoIterator<Item = &'a str>,
290
+ binary_paths: impl IntoIterator<Item = &'a str>,
291
+ ) -> Result<JsValue, JsValue> {
292
+ let mut value = value;
293
+ let options: ConversionOptions = if options.is_object() {
294
+ let raw_options = options.with_serde_to_json_value()?;
295
+ serde_json::from_value(raw_options).with_js_error()?
296
+ } else {
297
+ Default::default()
298
+ };
299
+
300
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
301
+ let js_value = value.serialize(&serializer)?;
302
+
303
+ for path in identifiers_paths.into_iter() {
304
+ if let Ok(bytes) = value.remove_path_into::<Vec<u8>>(path) {
305
+ let buffer = Buffer::from_bytes(&bytes);
306
+ if !options.skip_identifiers_conversion {
307
+ lodash_set(&js_value, path, buffer.into());
308
+ } else {
309
+ let id = IdentifierWrapper::new(buffer.into())?;
310
+ lodash_set(&js_value, path, id.into());
311
+ }
312
+ }
313
+ }
314
+
315
+ for path in binary_paths.into_iter() {
316
+ if let Ok(bytes) = value.remove_path_into::<Vec<u8>>(path) {
317
+ let buffer = Buffer::from_bytes(&bytes);
318
+ lodash_set(&js_value, path, buffer.into());
319
+ }
320
+ }
321
+
322
+ Ok(js_value)
323
+ }
@@ -1 +1,379 @@
1
+ use dpp::identity::KeyID;
2
+ use dpp::{
3
+ document::{
4
+ document_transition::document_base_transition,
5
+ state_transition::documents_batch_transition::{self, property_names},
6
+ DocumentsBatchTransition,
7
+ },
8
+ prelude::{DataContract, DocumentTransition, Identifier},
9
+ state_transition::{
10
+ StateTransitionConvert, StateTransitionIdentitySigned, StateTransitionLike,
11
+ StateTransitionType,
12
+ },
13
+ util::json_value::JsonValueExt,
14
+ };
15
+ use js_sys::{Array, Reflect};
16
+ use serde::{Deserialize, Serialize};
17
+ use serde_json::Value;
18
+ use wasm_bindgen::prelude::*;
19
+
20
+ use crate::{
21
+ bls_adapter::{BlsAdapter, JsBlsAdapter},
22
+ buffer::Buffer,
23
+ document_batch_transition::document_transition::DocumentTransitionWasm,
24
+ identifier::IdentifierWrapper,
25
+ lodash::lodash_set,
26
+ utils::{
27
+ replace_identifiers_with_bytes_without_failing, Inner, IntoWasm, ToSerdeJSONExt,
28
+ WithJsError,
29
+ },
30
+ IdentityPublicKeyWasm, StateTransitionExecutionContextWasm,
31
+ };
32
+ pub mod apply_document_batch_transition;
1
33
  pub mod document_transition;
34
+ pub mod validation;
35
+
36
+ #[derive(Clone, Debug)]
37
+ #[wasm_bindgen(js_name = DocumentsBatchTransition)]
38
+ pub struct DocumentsBatchTransitionWasm(DocumentsBatchTransition);
39
+
40
+ #[derive(Debug, Serialize, Deserialize, Default, Clone, Copy)]
41
+ #[serde(rename_all = "camelCase")]
42
+ pub struct ToObjectOptions {
43
+ #[serde(default)]
44
+ skip_signature: bool,
45
+ #[serde(default)]
46
+ skip_identifiers_conversion: bool,
47
+ }
48
+
49
+ #[wasm_bindgen(js_class=DocumentsBatchTransition)]
50
+ impl DocumentsBatchTransitionWasm {
51
+ #[wasm_bindgen(constructor)]
52
+ pub fn from_raw_object(
53
+ js_raw_transition: JsValue,
54
+ data_contracts: Array,
55
+ ) -> Result<DocumentsBatchTransitionWasm, JsValue> {
56
+ let data_contracts_array_js = Array::from(&data_contracts);
57
+
58
+ let mut data_contracts: Vec<DataContract> = vec![];
59
+ for contract in data_contracts_array_js.iter() {
60
+ let json_value = contract.with_serde_to_json_value()?;
61
+ let data_contract = DataContract::from_json_object(json_value).with_js_error()?;
62
+ data_contracts.push(data_contract);
63
+ }
64
+
65
+ let mut batch_transition_value = js_raw_transition.with_serde_to_json_value()?;
66
+ replace_identifiers_with_bytes_without_failing(
67
+ &mut batch_transition_value,
68
+ DocumentsBatchTransition::identifiers_property_paths(),
69
+ );
70
+
71
+ if let Some(Value::Array(ref mut transitions)) =
72
+ batch_transition_value.get_mut(documents_batch_transition::property_names::TRANSITIONS)
73
+ {
74
+ for t in transitions {
75
+ replace_identifiers_with_bytes_without_failing(
76
+ t,
77
+ document_base_transition::IDENTIFIER_FIELDS,
78
+ );
79
+ }
80
+ }
81
+
82
+ let documents_batch_transition =
83
+ DocumentsBatchTransition::from_raw_object(batch_transition_value, data_contracts)
84
+ .with_js_error()?;
85
+
86
+ Ok(documents_batch_transition.into())
87
+ }
88
+
89
+ #[wasm_bindgen(js_name=getType)]
90
+ pub fn get_type(&self) -> u8 {
91
+ StateTransitionType::DocumentsBatch.into()
92
+ }
93
+
94
+ #[wasm_bindgen(js_name=getOwnerId)]
95
+ pub fn get_owner_id(&self) -> IdentifierWrapper {
96
+ self.0.get_owner_id().to_owned().into()
97
+ }
98
+
99
+ #[wasm_bindgen(js_name=getTransitions)]
100
+ pub fn get_transitions(&self) -> js_sys::Array {
101
+ let array = js_sys::Array::new();
102
+ let transitions = self.0.get_transitions();
103
+
104
+ for tr in transitions.iter().cloned() {
105
+ let transition: DocumentTransitionWasm = tr.into();
106
+ array.push(&transition.into());
107
+ }
108
+
109
+ array
110
+ }
111
+
112
+ #[wasm_bindgen(js_name=setTransitions)]
113
+ pub fn set_transitions(&mut self, js_transitions: Array) -> Result<(), JsValue> {
114
+ let mut transitions = vec![];
115
+ for js_transition in js_transitions.iter() {
116
+ let transition: DocumentTransition = js_transition
117
+ .to_wasm::<DocumentTransitionWasm>("DocumentTransition")?
118
+ .to_owned()
119
+ .into();
120
+ transitions.push(transition)
121
+ }
122
+
123
+ self.0.transitions = transitions;
124
+ Ok(())
125
+ }
126
+
127
+ #[wasm_bindgen(js_name=toJSON)]
128
+ pub fn to_json(&self) -> Result<JsValue, JsValue> {
129
+ let value = self.0.to_json(false).with_js_error()?;
130
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
131
+
132
+ let is_null_signature = value.get(property_names::SIGNATURE).is_none();
133
+ let is_null_signature_public_key_id =
134
+ value.get(property_names::SIGNATURE_PUBLIC_KEY_ID).is_none();
135
+
136
+ let js_value = value.serialize(&serializer)?;
137
+
138
+ if is_null_signature {
139
+ js_sys::Reflect::set(
140
+ &js_value,
141
+ &property_names::SIGNATURE.into(),
142
+ &JsValue::undefined(),
143
+ )?;
144
+ }
145
+ if is_null_signature_public_key_id {
146
+ js_sys::Reflect::set(
147
+ &js_value,
148
+ &property_names::SIGNATURE_PUBLIC_KEY_ID.into(),
149
+ &JsValue::undefined(),
150
+ )?;
151
+ }
152
+
153
+ Ok(js_value)
154
+ }
155
+
156
+ #[wasm_bindgen(js_name=toObject)]
157
+ pub fn to_object(&self, js_options: &JsValue) -> Result<JsValue, JsValue> {
158
+ let options: ToObjectOptions = if js_options.is_object() {
159
+ let raw_options = js_options.with_serde_to_json_value()?;
160
+ serde_json::from_value(raw_options).with_js_error()?
161
+ } else {
162
+ Default::default()
163
+ };
164
+
165
+ let mut value = self.0.to_object(options.skip_signature).with_js_error()?;
166
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
167
+ let js_value = value.serialize(&serializer)?;
168
+ let is_signature_present = value.get(property_names::SIGNATURE).is_some();
169
+
170
+ // Transform every transition individually
171
+ let transitions = Array::new();
172
+ for transition in self.0.transitions.iter() {
173
+ let js_value =
174
+ DocumentTransitionWasm::from(transition.to_owned()).to_object(js_options)?;
175
+ transitions.push(&js_value);
176
+ }
177
+ // Replace the whole collection of transitions
178
+ Reflect::set(
179
+ &js_value,
180
+ &property_names::TRANSITIONS.into(),
181
+ &transitions.into(),
182
+ )?;
183
+
184
+ // Transform paths that are specific to the DocumentsBatchTransition
185
+ for path in DocumentsBatchTransition::binary_property_paths() {
186
+ if let Ok(bytes) = value.remove_path_into::<Vec<u8>>(path) {
187
+ let buffer = Buffer::from_bytes(&bytes);
188
+ lodash_set(&js_value, path, buffer.into());
189
+ }
190
+ }
191
+ for path in DocumentsBatchTransition::identifiers_property_paths() {
192
+ if let Ok(bytes) = value.remove_path_into::<Vec<u8>>(path) {
193
+ let buffer = Buffer::from_bytes(&bytes);
194
+ if !options.skip_identifiers_conversion {
195
+ lodash_set(&js_value, path, buffer.into());
196
+ } else {
197
+ let id = IdentifierWrapper::new(buffer.into())?;
198
+ lodash_set(&js_value, path, id.into());
199
+ }
200
+ }
201
+ }
202
+
203
+ if !is_signature_present && !options.skip_signature {
204
+ js_sys::Reflect::set(
205
+ &js_value,
206
+ &property_names::SIGNATURE.into(),
207
+ &JsValue::undefined(),
208
+ )?;
209
+ }
210
+ if value.get(property_names::SIGNATURE_PUBLIC_KEY_ID).is_none() {
211
+ js_sys::Reflect::set(
212
+ &js_value,
213
+ &property_names::SIGNATURE_PUBLIC_KEY_ID.into(),
214
+ &JsValue::undefined(),
215
+ )?;
216
+ }
217
+
218
+ Ok(js_value)
219
+ }
220
+
221
+ #[wasm_bindgen(js_name=getModifiedDataIds)]
222
+ pub fn get_modified_ids(&self) -> Array {
223
+ let array = Array::new();
224
+
225
+ for id in self.0.get_modified_data_ids() {
226
+ let id = <IdentifierWrapper as From<Identifier>>::from(id.to_owned());
227
+ array.push(&id.into());
228
+ }
229
+
230
+ array
231
+ }
232
+
233
+ // AbstractSTateTransitionIdentitySigned methods
234
+ #[wasm_bindgen(js_name=getSignaturePublicKeyId)]
235
+ pub fn get_signature_public_key_id(&self) -> Option<f64> {
236
+ self.0.get_signature_public_key_id().map(|v| v as f64)
237
+ }
238
+
239
+ #[wasm_bindgen(js_name=sign)]
240
+ pub fn sign(
241
+ &mut self,
242
+ identity_public_key: &IdentityPublicKeyWasm,
243
+ private_key: &[u8],
244
+ bls: JsBlsAdapter,
245
+ ) -> Result<(), JsValue> {
246
+ self.0
247
+ .sign(
248
+ &identity_public_key.to_owned().into(),
249
+ private_key,
250
+ &BlsAdapter(bls),
251
+ )
252
+ .with_js_error()
253
+ }
254
+
255
+ #[wasm_bindgen(js_name=verifyPublicKeyLevelAndPurpose)]
256
+ pub fn verify_public_key_level_and_purpose(
257
+ &self,
258
+ public_key: &IdentityPublicKeyWasm,
259
+ ) -> Result<(), JsValue> {
260
+ self.0
261
+ .verify_public_key_level_and_purpose(public_key.inner())
262
+ .with_js_error()
263
+ }
264
+
265
+ #[wasm_bindgen(js_name=verifyPublicKeyIsEnabled)]
266
+ pub fn verify_public_key_is_enabled(
267
+ &self,
268
+ public_key: &IdentityPublicKeyWasm,
269
+ ) -> Result<(), JsValue> {
270
+ self.0
271
+ .verify_public_key_is_enabled(public_key.inner())
272
+ .with_js_error()
273
+ }
274
+
275
+ #[wasm_bindgen(js_name=verifySignature)]
276
+ pub fn verify_signature(
277
+ &self,
278
+ public_key: &IdentityPublicKeyWasm,
279
+ bls: JsBlsAdapter,
280
+ ) -> Result<(), JsValue> {
281
+ self.0
282
+ .verify_signature(public_key.inner(), &BlsAdapter(bls))
283
+ .with_js_error()
284
+ }
285
+
286
+ #[wasm_bindgen(js_name=setSignaturePublicKey)]
287
+ pub fn set_signature_public_key(&mut self, key_id: KeyID) {
288
+ self.0.set_signature_public_key_id(key_id)
289
+ }
290
+
291
+ #[wasm_bindgen(js_name=getKeySecurityLevelRequirement)]
292
+ pub fn get_security_level_requirement(&self) -> u8 {
293
+ self.0.get_security_level_requirement() as u8
294
+ }
295
+
296
+ // AbstractStateTransition methods
297
+ #[wasm_bindgen(js_name=getProtocolVersion)]
298
+ pub fn get_protocol_version(&self) -> u32 {
299
+ self.0.get_protocol_version()
300
+ }
301
+
302
+ #[wasm_bindgen(js_name=getSignature)]
303
+ pub fn get_signature(&self) -> Vec<u8> {
304
+ self.0.get_signature().to_owned()
305
+ }
306
+
307
+ #[wasm_bindgen(js_name=setSignature)]
308
+ pub fn set_signature(&mut self, signature: Vec<u8>) {
309
+ self.0.set_signature(signature)
310
+ }
311
+
312
+ #[wasm_bindgen(js_name=calculateFee)]
313
+ pub fn calculate_fee(&self) -> i64 {
314
+ self.0.calculate_fee()
315
+ }
316
+
317
+ #[wasm_bindgen(js_name=isDocumentStateTransition)]
318
+ pub fn is_document_state_transition(&self) -> bool {
319
+ self.0.is_document_state_transition()
320
+ }
321
+
322
+ #[wasm_bindgen(js_name=isDataContractStateTransition)]
323
+ pub fn is_data_contract_state_transition(&self) -> bool {
324
+ self.0.is_data_contract_state_transition()
325
+ }
326
+
327
+ #[wasm_bindgen(js_name=isIdentityStateTransition)]
328
+ pub fn is_identity_state_transition(&self) -> bool {
329
+ self.0.is_identity_state_transition()
330
+ }
331
+
332
+ #[wasm_bindgen(js_name=setExecutionContext)]
333
+ pub fn set_execution_context(&mut self, context: StateTransitionExecutionContextWasm) {
334
+ self.0.set_execution_context(context.into())
335
+ }
336
+
337
+ #[wasm_bindgen(js_name=getExecutionContext)]
338
+ pub fn get_execution_context(&mut self) -> StateTransitionExecutionContextWasm {
339
+ self.0.get_execution_context().clone().into()
340
+ }
341
+
342
+ #[wasm_bindgen(js_name=toBuffer)]
343
+ pub fn to_buffer(&self, options: &JsValue) -> Result<Buffer, JsValue> {
344
+ let skip_signature = if options.is_object() {
345
+ let options = options.with_serde_to_json_value()?;
346
+ options.get_bool("skipSignature").unwrap_or_default()
347
+ } else {
348
+ false
349
+ };
350
+ let bytes = self.0.to_buffer(skip_signature).with_js_error()?;
351
+
352
+ Ok(Buffer::from_bytes(&bytes))
353
+ }
354
+
355
+ #[wasm_bindgen(js_name=hash)]
356
+ pub fn hash(&self, options: JsValue) -> Result<Buffer, JsValue> {
357
+ let skip_signature = if options.is_object() {
358
+ let options = options.with_serde_to_json_value()?;
359
+ options.get_bool("skipSignature").unwrap_or_default()
360
+ } else {
361
+ false
362
+ };
363
+ let bytes = self.0.hash(skip_signature).with_js_error()?;
364
+
365
+ Ok(Buffer::from_bytes(&bytes))
366
+ }
367
+ }
368
+
369
+ impl From<DocumentsBatchTransition> for DocumentsBatchTransitionWasm {
370
+ fn from(t: DocumentsBatchTransition) -> Self {
371
+ DocumentsBatchTransitionWasm(t)
372
+ }
373
+ }
374
+
375
+ impl From<DocumentsBatchTransitionWasm> for DocumentsBatchTransition {
376
+ fn from(t: DocumentsBatchTransitionWasm) -> Self {
377
+ t.0
378
+ }
379
+ }