@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,4 +1,6 @@
1
+ mod factory_utils;
1
2
  pub mod identity_facade;
3
+ mod identity_factory;
2
4
  mod identity_public_key;
3
5
  mod validation;
4
6
 
@@ -19,15 +21,24 @@ use crate::utils::to_vec_of_serde_values;
19
21
  use crate::MetadataWasm;
20
22
  pub use identity_public_key::*;
21
23
 
24
+ pub use state_transition::*;
25
+
26
+ pub mod errors;
27
+ pub mod state_transition;
28
+
22
29
  #[wasm_bindgen(js_name=Identity)]
23
30
  #[derive(Clone)]
24
31
  pub struct IdentityWasm(Identity);
25
32
 
26
- #[wasm_bindgen(js_name=AssetLockProof)]
27
- pub struct AssetLockProofWasm(AssetLockProof);
28
- impl From<AssetLockProof> for AssetLockProofWasm {
29
- fn from(v: AssetLockProof) -> Self {
30
- AssetLockProofWasm(v)
33
+ impl From<IdentityWasm> for Identity {
34
+ fn from(identity: IdentityWasm) -> Self {
35
+ identity.0
36
+ }
37
+ }
38
+
39
+ impl From<Identity> for IdentityWasm {
40
+ fn from(identity: Identity) -> Self {
41
+ Self(identity)
31
42
  }
32
43
  }
33
44
 
@@ -50,7 +61,7 @@ impl IdentityWasm {
50
61
 
51
62
  #[wasm_bindgen(js_name=getId)]
52
63
  pub fn get_id(&self) -> IdentifierWrapper {
53
- self.0.get_id().clone().into()
64
+ (*self.0.get_id()).into()
54
65
  }
55
66
 
56
67
  #[wasm_bindgen(js_name=setPublicKeys)]
@@ -62,7 +73,7 @@ impl IdentityWasm {
62
73
 
63
74
  let public_keys = raw_public_keys
64
75
  .into_iter()
65
- .map(IdentityPublicKey::from_json_object)
76
+ .map(|v| IdentityPublicKey::from_json_object(v).map(|key| (key.id, key)))
66
77
  .collect::<Result<_, _>>()
67
78
  .map_err(|e| format!("converting to collection of IdentityPublicKeys failed: {e:#}"))?;
68
79
 
@@ -76,7 +87,7 @@ impl IdentityWasm {
76
87
  self.0
77
88
  .get_public_keys()
78
89
  .iter()
79
- .map(IdentityPublicKey::to_owned)
90
+ .map(|(_, k)| k.to_owned())
80
91
  .map(IdentityPublicKeyWasm::from)
81
92
  .map(JsValue::from)
82
93
  .collect()
@@ -112,9 +123,10 @@ impl IdentityWasm {
112
123
  }
113
124
 
114
125
  #[wasm_bindgen(js_name=setAssetLockProof)]
115
- pub fn set_asset_lock_proof(&mut self, lock: JsValue) {
116
- self.0
117
- .set_asset_lock_proof(serde_wasm_bindgen::from_value(lock).unwrap());
126
+ pub fn set_asset_lock_proof(&mut self, lock: JsValue) -> Result<(), JsValue> {
127
+ let asset_lock_proof = create_asset_lock_proof_from_wasm_instance(&lock)?;
128
+ self.0.set_asset_lock_proof(asset_lock_proof);
129
+ Ok(())
118
130
  }
119
131
 
120
132
  #[wasm_bindgen(js_name=getAssetLockProof)]
@@ -159,7 +171,7 @@ impl IdentityWasm {
159
171
  let pks = self
160
172
  .0
161
173
  .public_keys
162
- .iter()
174
+ .values()
163
175
  .map(|pk| pk.to_json())
164
176
  .collect::<Result<Vec<serde_json::Value>, SerdeParsingError>>()
165
177
  .map_err(|e| from_dpp_err(e.into()))?;
@@ -181,11 +193,11 @@ impl IdentityWasm {
181
193
  }
182
194
 
183
195
  #[wasm_bindgen(js_name=toObject)]
184
- pub fn to_object(&self, _some_option: Option<bool>) -> Result<JsValue, JsValue> {
196
+ pub fn to_object(&self) -> Result<JsValue, JsValue> {
185
197
  let js_public_keys = js_sys::Array::new();
186
- for pk in self.0.public_keys.iter() {
198
+ for pk in self.0.public_keys.values() {
187
199
  let pk_wasm = IdentityPublicKeyWasm::from(pk.to_owned());
188
- js_public_keys.push(&pk_wasm.to_object(None)?);
200
+ js_public_keys.push(&pk_wasm.to_object()?);
189
201
  }
190
202
 
191
203
  let identity_json =
@@ -194,7 +206,7 @@ impl IdentityWasm {
194
206
  serde_json::to_string(&identity_json).map_err(|e| from_dpp_err(e.into()))?;
195
207
  let js_object = js_sys::JSON::parse(&identity_json_string)?;
196
208
 
197
- let id: IdentifierWrapper = self.0.id.clone().into();
209
+ let id: IdentifierWrapper = self.0.id.into();
198
210
 
199
211
  js_sys::Reflect::set(
200
212
  &js_object,
@@ -222,7 +234,9 @@ impl IdentityWasm {
222
234
 
223
235
  #[wasm_bindgen(js_name=addPublicKey)]
224
236
  pub fn add_public_key(&mut self, public_key: IdentityPublicKeyWasm) {
225
- self.0.public_keys.push(public_key.into());
237
+ self.0
238
+ .public_keys
239
+ .insert(public_key.get_id(), public_key.into());
226
240
  }
227
241
 
228
242
  // The method `addPublicKeys()` takes an variadic array of `IdentityPublicKeyWasm` as an input. But elements of the array
@@ -0,0 +1,132 @@
1
+ use serde::{Deserialize, Serialize};
2
+ use std::convert::TryInto;
3
+ use wasm_bindgen::prelude::*;
4
+
5
+ use crate::{
6
+ buffer::Buffer,
7
+ errors::{from_dpp_err, RustConversionError},
8
+ identifier::IdentifierWrapper,
9
+ with_js_error,
10
+ };
11
+ use dpp::identity::state_transition::asset_lock_proof::chain::ChainAssetLockProof;
12
+ use dpp::util::string_encoding;
13
+ use dpp::util::string_encoding::Encoding;
14
+
15
+ #[wasm_bindgen(js_name=ChainAssetLockProof)]
16
+ #[derive(Clone)]
17
+ pub struct ChainAssetLockProofWasm(ChainAssetLockProof);
18
+
19
+ #[derive(Debug, Serialize, Deserialize)]
20
+ #[serde(rename_all = "camelCase")]
21
+ struct ChainAssetLockProofParams {
22
+ #[serde(rename = "type")]
23
+ lock_type: u8,
24
+ core_chain_locked_height: u32,
25
+ out_point: Vec<u8>,
26
+ }
27
+
28
+ impl From<ChainAssetLockProof> for ChainAssetLockProofWasm {
29
+ fn from(v: ChainAssetLockProof) -> Self {
30
+ ChainAssetLockProofWasm(v)
31
+ }
32
+ }
33
+
34
+ impl From<ChainAssetLockProofWasm> for ChainAssetLockProof {
35
+ fn from(v: ChainAssetLockProofWasm) -> Self {
36
+ v.0
37
+ }
38
+ }
39
+
40
+ #[wasm_bindgen(js_class = ChainAssetLockProof)]
41
+ impl ChainAssetLockProofWasm {
42
+ #[wasm_bindgen(constructor)]
43
+ pub fn new(raw_parameters: JsValue) -> Result<ChainAssetLockProofWasm, JsValue> {
44
+ let parameters: ChainAssetLockProofParams =
45
+ with_js_error!(serde_wasm_bindgen::from_value(raw_parameters))?;
46
+
47
+ let out_point: [u8; 36] = parameters.out_point.try_into().map_err(|_| {
48
+ RustConversionError::Error(String::from("outPoint must be a 36 byte array"))
49
+ .to_js_value()
50
+ })?;
51
+
52
+ let chain_asset_lock_proof =
53
+ ChainAssetLockProof::new(parameters.core_chain_locked_height, out_point);
54
+
55
+ Ok(ChainAssetLockProofWasm(chain_asset_lock_proof))
56
+ }
57
+
58
+ #[wasm_bindgen(js_name=getType)]
59
+ pub fn get_type(&self) -> u8 {
60
+ ChainAssetLockProof::asset_lock_type()
61
+ }
62
+
63
+ #[wasm_bindgen(js_name=getCoreChainLockedHeight)]
64
+ pub fn get_core_chain_locked_height(&self) -> u32 {
65
+ self.0.core_chain_locked_height()
66
+ }
67
+
68
+ #[wasm_bindgen(js_name=setCoreChainLockedHeight)]
69
+ pub fn set_core_chain_locked_height(&mut self, value: u32) {
70
+ self.0.set_core_chain_locked_height(value);
71
+ }
72
+
73
+ #[wasm_bindgen(js_name=getOutPoint)]
74
+ pub fn get_out_point(&self) -> Buffer {
75
+ Buffer::from_bytes(self.0.out_point())
76
+ }
77
+
78
+ #[wasm_bindgen(js_name=setOutPoint)]
79
+ pub fn set_out_point(&mut self, out_point: Vec<u8>) -> Result<(), JsValue> {
80
+ let out_point: [u8; 36] = out_point.try_into().map_err(|_| {
81
+ RustConversionError::Error(String::from("outPoint must be a 36 byte array"))
82
+ .to_js_value()
83
+ })?;
84
+ self.0.set_out_point(out_point);
85
+
86
+ Ok(())
87
+ }
88
+
89
+ #[wasm_bindgen(js_name=toJSON)]
90
+ pub fn to_json(&self) -> Result<JsValue, JsValue> {
91
+ let js_object = self.to_object()?;
92
+
93
+ let out_point_base64 = string_encoding::encode(self.0.out_point(), Encoding::Base64);
94
+
95
+ js_sys::Reflect::set(
96
+ &js_object,
97
+ &"outPoint".to_owned().into(),
98
+ &JsValue::from(out_point_base64),
99
+ )?;
100
+
101
+ Ok(js_object)
102
+ }
103
+
104
+ #[wasm_bindgen(js_name=toObject)]
105
+ pub fn to_object(&self) -> Result<JsValue, JsValue> {
106
+ let asset_lock_json =
107
+ serde_json::to_value(self.0.clone()).map_err(|e| from_dpp_err(e.into()))?;
108
+
109
+ let asset_lock_json_string =
110
+ serde_json::to_string(&asset_lock_json).map_err(|e| from_dpp_err(e.into()))?;
111
+ let js_object = js_sys::JSON::parse(&asset_lock_json_string)?;
112
+
113
+ let out_point = self.get_out_point();
114
+
115
+ js_sys::Reflect::set(
116
+ &js_object,
117
+ &"outPoint".to_owned().into(),
118
+ &JsValue::from(out_point),
119
+ )?;
120
+
121
+ Ok(js_object)
122
+ }
123
+
124
+ #[wasm_bindgen(js_name=createIdentifier)]
125
+ pub fn create_identifier(&self) -> Result<IdentifierWrapper, JsValue> {
126
+ let identifier = self
127
+ .0
128
+ .create_identifier()
129
+ .map_err(|e| from_dpp_err(e.into()))?;
130
+ Ok(identifier.into())
131
+ }
132
+ }
@@ -0,0 +1,72 @@
1
+ use dpp::identity::state_transition::asset_lock_proof::{
2
+ AssetLockTransactionValidator, ChainAssetLockProofStructureValidator,
3
+ };
4
+ use dpp::state_transition::state_transition_execution_context::StateTransitionExecutionContext;
5
+ use dpp::ProtocolError;
6
+ use std::sync::Arc;
7
+ use wasm_bindgen::prelude::*;
8
+
9
+ use crate::buffer::Buffer;
10
+ use crate::utils::ToSerdeJSONExt;
11
+ use crate::{
12
+ errors::from_dpp_err,
13
+ state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
14
+ validation::ValidationResultWasm,
15
+ StateTransitionExecutionContextWasm,
16
+ };
17
+
18
+ #[wasm_bindgen(js_name = ChainAssetLockProofStructureValidator)]
19
+ pub struct ChainAssetLockProofStructureValidatorWasm(
20
+ ChainAssetLockProofStructureValidator<ExternalStateRepositoryLikeWrapper>,
21
+ );
22
+
23
+ impl From<ChainAssetLockProofStructureValidator<ExternalStateRepositoryLikeWrapper>>
24
+ for ChainAssetLockProofStructureValidatorWasm
25
+ {
26
+ fn from(
27
+ validator: ChainAssetLockProofStructureValidator<ExternalStateRepositoryLikeWrapper>,
28
+ ) -> Self {
29
+ Self(validator)
30
+ }
31
+ }
32
+
33
+ #[wasm_bindgen(js_class = ChainAssetLockProofStructureValidator)]
34
+ impl ChainAssetLockProofStructureValidatorWasm {
35
+ #[wasm_bindgen(constructor)]
36
+ pub fn new(
37
+ state_repository: ExternalStateRepositoryLike,
38
+ ) -> Result<ChainAssetLockProofStructureValidatorWasm, JsValue> {
39
+ let state_repository_wrapper =
40
+ Arc::new(ExternalStateRepositoryLikeWrapper::new(state_repository));
41
+
42
+ let tx_validator = Arc::new(AssetLockTransactionValidator::new(
43
+ state_repository_wrapper.clone(),
44
+ ));
45
+
46
+ let validator =
47
+ ChainAssetLockProofStructureValidator::new(state_repository_wrapper, tx_validator)
48
+ .map_err(|e| from_dpp_err(ProtocolError::Generic(e.to_string())))?;
49
+
50
+ Ok(validator.into())
51
+ }
52
+
53
+ #[wasm_bindgen]
54
+ pub async fn validate(
55
+ &self,
56
+ raw_asset_lock_proof: JsValue,
57
+ execution_context: &StateTransitionExecutionContextWasm,
58
+ ) -> Result<ValidationResultWasm, JsValue> {
59
+ let asset_lock_proof_json = raw_asset_lock_proof.with_serde_to_json_value()?;
60
+
61
+ let context: &StateTransitionExecutionContext = execution_context.into();
62
+ let validation_result = self
63
+ .0
64
+ .validate(&asset_lock_proof_json, context)
65
+ .await
66
+ .map_err(|e| from_dpp_err(e.into()))?;
67
+
68
+ Ok(validation_result
69
+ .map(|item| JsValue::from(Buffer::from_bytes(&item)))
70
+ .into())
71
+ }
72
+ }
@@ -0,0 +1,4 @@
1
+ pub use chain_asset_lock_proof::*;
2
+
3
+ pub mod chain_asset_lock_proof;
4
+ pub mod chain_asset_lock_proof_structure_validator;
@@ -0,0 +1,177 @@
1
+ use dpp::{
2
+ dashcore::{
3
+ blockdata::{script::Script, transaction::txout::TxOut},
4
+ consensus::encode::serialize,
5
+ },
6
+ util::string_encoding,
7
+ util::string_encoding::Encoding,
8
+ };
9
+
10
+ use serde::{Deserialize, Serialize};
11
+ use std::convert::TryInto;
12
+ use wasm_bindgen::prelude::*;
13
+
14
+ use crate::{
15
+ buffer::Buffer,
16
+ errors::{from_dpp_err, RustConversionError},
17
+ identifier::IdentifierWrapper,
18
+ with_js_error,
19
+ };
20
+ use dpp::identity::state_transition::asset_lock_proof::instant::{
21
+ InstantAssetLockProof, RawInstantLock,
22
+ };
23
+
24
+ #[derive(Serialize, Deserialize)]
25
+ #[serde(remote = "TxOut")]
26
+ struct TxOutJS {
27
+ #[serde(rename = "satoshis")]
28
+ value: u64,
29
+ #[serde(rename = "script")]
30
+ script_pubkey: Script,
31
+ }
32
+
33
+ #[derive(Serialize)]
34
+ struct TxOutSerdeHelper<'a>(#[serde(with = "TxOutJS")] &'a TxOut);
35
+
36
+ #[derive(Debug, Clone, Deserialize, Serialize)]
37
+ #[wasm_bindgen(js_name=InstantAssetLockProof)]
38
+ pub struct InstantAssetLockProofWasm(InstantAssetLockProof);
39
+
40
+ impl From<InstantAssetLockProof> for InstantAssetLockProofWasm {
41
+ fn from(v: InstantAssetLockProof) -> Self {
42
+ InstantAssetLockProofWasm(v)
43
+ }
44
+ }
45
+
46
+ impl From<InstantAssetLockProofWasm> for InstantAssetLockProof {
47
+ fn from(v: InstantAssetLockProofWasm) -> Self {
48
+ v.0
49
+ }
50
+ }
51
+
52
+ #[wasm_bindgen(js_class = InstantAssetLockProof)]
53
+ impl InstantAssetLockProofWasm {
54
+ #[wasm_bindgen(constructor)]
55
+ pub fn new(raw_parameters: JsValue) -> Result<InstantAssetLockProofWasm, JsValue> {
56
+ let raw_instant_lock: RawInstantLock =
57
+ with_js_error!(serde_wasm_bindgen::from_value(raw_parameters))?;
58
+
59
+ let instant_asset_lock_proof: InstantAssetLockProof =
60
+ raw_instant_lock.try_into().map_err(|_| {
61
+ RustConversionError::Error(String::from("object passed is not a raw Instant Lock"))
62
+ .to_js_value()
63
+ })?;
64
+
65
+ Ok(instant_asset_lock_proof.into())
66
+ }
67
+
68
+ #[wasm_bindgen(js_name=getType)]
69
+ pub fn get_type(&self) -> u8 {
70
+ self.0.asset_lock_type()
71
+ }
72
+
73
+ #[wasm_bindgen(js_name=getOutputIndex)]
74
+ pub fn get_output_index(&self) -> usize {
75
+ self.0.output_index()
76
+ }
77
+
78
+ #[wasm_bindgen(js_name=getOutPoint)]
79
+ pub fn get_out_point(&self) -> Option<Buffer> {
80
+ self.0
81
+ .out_point()
82
+ .map(|out_point| Buffer::from_bytes(&out_point))
83
+ }
84
+
85
+ #[wasm_bindgen(js_name=getOutput)]
86
+ pub fn get_output(&self) -> Result<JsValue, JsValue> {
87
+ let output = self.0.output().unwrap();
88
+ let output_json_string =
89
+ serde_json::to_string(&TxOutSerdeHelper(output)).map_err(|e| from_dpp_err(e.into()))?;
90
+
91
+ let js_object = js_sys::JSON::parse(&output_json_string)?;
92
+ Ok(js_object)
93
+ }
94
+
95
+ #[wasm_bindgen(js_name=createIdentifier)]
96
+ pub fn create_identifier(&self) -> Result<IdentifierWrapper, JsValue> {
97
+ let identifier = self
98
+ .0
99
+ .create_identifier()
100
+ .map_err(|e| from_dpp_err(e.into()))?;
101
+ Ok(identifier.into())
102
+ }
103
+
104
+ #[wasm_bindgen(js_name=getInstantLock)]
105
+ pub fn get_instant_lock(&self) -> Buffer {
106
+ let instant_lock = self.0.instant_lock();
107
+ let serialized_instant_lock = serialize(instant_lock);
108
+ Buffer::from_bytes(&serialized_instant_lock)
109
+ }
110
+
111
+ #[wasm_bindgen(js_name=getTransaction)]
112
+ pub fn get_transaction(&self) -> Buffer {
113
+ let transaction = self.0.transaction();
114
+ let serialized_transaction = serialize(transaction);
115
+ Buffer::from_bytes(&serialized_transaction)
116
+ }
117
+
118
+ #[wasm_bindgen(js_name=toObject)]
119
+ pub fn to_object(&self) -> Result<JsValue, JsValue> {
120
+ let asset_lock_json =
121
+ serde_json::to_value(self.0.clone()).map_err(|e| from_dpp_err(e.into()))?;
122
+
123
+ let asset_lock_json_string =
124
+ serde_json::to_string(&asset_lock_json).map_err(|e| from_dpp_err(e.into()))?;
125
+ let js_object = js_sys::JSON::parse(&asset_lock_json_string)?;
126
+
127
+ let transaction = self.get_transaction();
128
+ let instant_lock = self.get_instant_lock();
129
+
130
+ js_sys::Reflect::set(
131
+ &js_object,
132
+ &"transaction".to_owned().into(),
133
+ &JsValue::from(transaction),
134
+ )?;
135
+
136
+ js_sys::Reflect::set(
137
+ &js_object,
138
+ &"instantLock".to_owned().into(),
139
+ &JsValue::from(instant_lock),
140
+ )?;
141
+
142
+ Ok(js_object)
143
+ }
144
+
145
+ #[wasm_bindgen(js_name=toJSON)]
146
+ pub fn to_json(&self) -> Result<JsValue, JsValue> {
147
+ let js_object = self.to_object()?;
148
+
149
+ let transaction = self.0.transaction();
150
+ let serialized_transaction = serialize(transaction);
151
+
152
+ let instant_lock = self.0.instant_lock();
153
+ let serialized_instant_lock = serialize(instant_lock);
154
+
155
+ let instant_lock_base64 =
156
+ string_encoding::encode(serialized_instant_lock.as_slice(), Encoding::Base64);
157
+
158
+ let mut transaction_hex = String::new();
159
+ for &byte in serialized_transaction.as_slice() {
160
+ transaction_hex.push_str(&format!("{:02x}", byte));
161
+ }
162
+
163
+ js_sys::Reflect::set(
164
+ &js_object,
165
+ &"transaction".to_owned().into(),
166
+ &JsValue::from(transaction_hex),
167
+ )?;
168
+
169
+ js_sys::Reflect::set(
170
+ &js_object,
171
+ &"instantLock".to_owned().into(),
172
+ &JsValue::from(instant_lock_base64),
173
+ )?;
174
+
175
+ Ok(js_object)
176
+ }
177
+ }
@@ -0,0 +1,72 @@
1
+ use dpp::identity::state_transition::asset_lock_proof::{
2
+ AssetLockTransactionValidator, InstantAssetLockProofStructureValidator,
3
+ };
4
+ use dpp::state_transition::state_transition_execution_context::StateTransitionExecutionContext;
5
+ use dpp::ProtocolError;
6
+ use std::sync::Arc;
7
+ use wasm_bindgen::prelude::*;
8
+
9
+ use crate::buffer::Buffer;
10
+ use crate::utils::ToSerdeJSONExt;
11
+ use crate::{
12
+ errors::from_dpp_err,
13
+ state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
14
+ validation::ValidationResultWasm,
15
+ StateTransitionExecutionContextWasm,
16
+ };
17
+
18
+ #[wasm_bindgen(js_name = InstantAssetLockProofStructureValidator)]
19
+ pub struct InstantAssetLockProofStructureValidatorWasm(
20
+ InstantAssetLockProofStructureValidator<ExternalStateRepositoryLikeWrapper>,
21
+ );
22
+
23
+ impl From<InstantAssetLockProofStructureValidator<ExternalStateRepositoryLikeWrapper>>
24
+ for InstantAssetLockProofStructureValidatorWasm
25
+ {
26
+ fn from(
27
+ validator: InstantAssetLockProofStructureValidator<ExternalStateRepositoryLikeWrapper>,
28
+ ) -> Self {
29
+ Self(validator)
30
+ }
31
+ }
32
+
33
+ #[wasm_bindgen(js_class = InstantAssetLockProofStructureValidator)]
34
+ impl InstantAssetLockProofStructureValidatorWasm {
35
+ #[wasm_bindgen(constructor)]
36
+ pub fn new(
37
+ state_repository: ExternalStateRepositoryLike,
38
+ ) -> Result<InstantAssetLockProofStructureValidatorWasm, JsValue> {
39
+ let state_repository_wrapper =
40
+ Arc::new(ExternalStateRepositoryLikeWrapper::new(state_repository));
41
+
42
+ let tx_validator = Arc::new(AssetLockTransactionValidator::new(
43
+ state_repository_wrapper.clone(),
44
+ ));
45
+
46
+ let validator =
47
+ InstantAssetLockProofStructureValidator::new(state_repository_wrapper, tx_validator)
48
+ .map_err(|e| from_dpp_err(ProtocolError::Generic(e.to_string())))?;
49
+
50
+ Ok(validator.into())
51
+ }
52
+
53
+ #[wasm_bindgen]
54
+ pub async fn validate(
55
+ &self,
56
+ raw_asset_lock_proof: JsValue,
57
+ execution_context: &StateTransitionExecutionContextWasm,
58
+ ) -> Result<ValidationResultWasm, JsValue> {
59
+ let asset_lock_proof_json = raw_asset_lock_proof.with_serde_to_json_value()?;
60
+
61
+ let context: &StateTransitionExecutionContext = execution_context.into();
62
+ let validation_result = self
63
+ .0
64
+ .validate(&asset_lock_proof_json, context)
65
+ .await
66
+ .map_err(|e| from_dpp_err(e.into()))?;
67
+
68
+ Ok(validation_result
69
+ .map(|item| JsValue::from(Buffer::from_bytes(&item)))
70
+ .into())
71
+ }
72
+ }
@@ -0,0 +1,4 @@
1
+ pub use instant_asset_lock_proof::*;
2
+
3
+ pub mod instant_asset_lock_proof;
4
+ pub mod instant_asset_lock_proof_structure_validator;