@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
package/karma.conf.js CHANGED
@@ -9,6 +9,11 @@ const webpackConfig = require('./webpack.config');
9
9
 
10
10
  module.exports = (config) => {
11
11
  config.set({
12
+ client: {
13
+ mocha: {
14
+ timeout: 5000,
15
+ },
16
+ },
12
17
  frameworks: ['mocha', 'chai', 'webpack'],
13
18
  files: [
14
19
  'lib/test/karma/loader.js',
@@ -11,8 +11,8 @@ export default function (dppModule: typeof dpp_module) {
11
11
  //@ts-ignore
12
12
  Object.setPrototypeOf(Identifier.prototype, Buffer.prototype);
13
13
 
14
- Identifier.prototype.valueOf = function() {
15
- return Buffer.from(this.inner());
14
+ Identifier.prototype.valueOf = function () {
15
+ return Buffer.from(this.toBytes());
16
16
  }
17
17
 
18
18
  // @ts-ignore
@@ -24,7 +24,7 @@ export default function (dppModule: typeof dpp_module) {
24
24
  };
25
25
 
26
26
  // @ts-ignore
27
- Identifier.prototype.inspect = function(...args) {
27
+ Identifier.prototype.inspect = function (...args) {
28
28
  return this.valueOf().inspect(...args);
29
29
  }
30
30
 
@@ -34,4 +34,5 @@ export default function (dppModule: typeof dpp_module) {
34
34
  // console.log("custom:", inspect.custom);
35
35
  // //@ts-ignore
36
36
  // Identifier.prototype[inspect.custom] = Identifier.prototype.inspect;
37
- }
37
+ }
38
+
package/lib/index.ts CHANGED
@@ -18,7 +18,7 @@ export default async function loadDpp() {
18
18
  let wasmUrl = URL.createObjectURL(blob);
19
19
  await init(wasmUrl);
20
20
  isInitialized = true;
21
- } else {
21
+ } else {
22
22
  dpp_module.initSync(bytes);
23
23
  isInitialized = true;
24
24
  }
@@ -5,6 +5,7 @@ const dirtyChai = require('dirty-chai');
5
5
  const chaiAsPromised = require('chai-as-promised');
6
6
  const chaiString = require('chai-string');
7
7
  const chaiExclude = require('chai-exclude');
8
+ const crypto = require('crypto');
8
9
 
9
10
  use(sinonChai);
10
11
  use(chaiAsPromised);
@@ -12,6 +13,10 @@ use(dirtyChai);
12
13
  use(chaiString);
13
14
  use(chaiExclude);
14
15
 
16
+ /* eslint-disable */
17
+ // TODO this should be loaded with library - not with tests.
18
+ globalThis.crypto = crypto.webcrypto;
19
+
15
20
  beforeEach(function beforeEach() {
16
21
  if (!this.sinonSandbox) {
17
22
  this.sinonSandbox = sinon.createSandbox();
@@ -0,0 +1,267 @@
1
+ const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
2
+ const JsIdentifier = require('@dashevo/dpp/lib/identifier/Identifier');
3
+ const generateRandomIdentifierAsync = require('../utils/generateRandomIdentifierAsync');
4
+ const { default: loadWasmDpp } = require('../../..');
5
+ let { DataContractFactory, DataContractValidator } = require('../../..');
6
+
7
+ let randomOwnerId = null;
8
+
9
+ /**
10
+ *
11
+ * @param {Buffer} [ownerId]
12
+ * @return {Promise<DataContract>}
13
+ */
14
+ module.exports = async function getDataContractFixture(ownerId = randomOwnerId) {
15
+ ({ DataContractFactory, DataContractValidator } = await loadWasmDpp());
16
+
17
+ if (!randomOwnerId) {
18
+ randomOwnerId = await generateRandomIdentifierAsync();
19
+ }
20
+
21
+ if (!ownerId) {
22
+ // eslint-disable-next-line no-param-reassign
23
+ ownerId = randomOwnerId;
24
+ }
25
+
26
+ const documents = {
27
+ niceDocument: {
28
+ type: 'object',
29
+ properties: {
30
+ name: {
31
+ type: 'string',
32
+ },
33
+ },
34
+ required: ['$createdAt'],
35
+ additionalProperties: false,
36
+ },
37
+ prettyDocument: {
38
+ type: 'object',
39
+ properties: {
40
+ lastName: {
41
+ type: 'string',
42
+ },
43
+ },
44
+ required: ['lastName', '$updatedAt'],
45
+ additionalProperties: false,
46
+ },
47
+ indexedDocument: {
48
+ type: 'object',
49
+ indices: [
50
+ {
51
+ name: 'index1',
52
+ properties: [
53
+ { $ownerId: 'asc' },
54
+ { firstName: 'asc' },
55
+ ],
56
+ unique: true,
57
+ },
58
+ {
59
+ name: 'index2',
60
+ properties: [
61
+ { $ownerId: 'asc' },
62
+ { lastName: 'asc' },
63
+ ],
64
+ unique: true,
65
+ },
66
+ {
67
+ name: 'index3',
68
+ properties: [
69
+ { lastName: 'asc' },
70
+ ],
71
+ unique: false,
72
+ },
73
+ {
74
+ name: 'index4',
75
+ properties: [
76
+ { $createdAt: 'asc' },
77
+ { $updatedAt: 'asc' },
78
+ ],
79
+ },
80
+ {
81
+ name: 'index5',
82
+ properties: [
83
+ { $updatedAt: 'asc' },
84
+ ],
85
+ },
86
+ {
87
+ name: 'index6',
88
+ properties: [
89
+ { $createdAt: 'asc' },
90
+ ],
91
+ },
92
+ ],
93
+ properties: {
94
+ firstName: {
95
+ type: 'string',
96
+ maxLength: 63,
97
+ },
98
+ lastName: {
99
+ type: 'string',
100
+ maxLength: 63,
101
+ },
102
+ otherProperty: {
103
+ type: 'string',
104
+ maxLength: 42,
105
+ },
106
+ },
107
+ required: ['firstName', '$createdAt', '$updatedAt', 'lastName'],
108
+ additionalProperties: false,
109
+ },
110
+ // indexedArray: {
111
+ // type: 'object',
112
+ // indices: [
113
+ // {
114
+ // name: 'index1',
115
+ // properties: [
116
+ // { mentions: 'asc' },
117
+ // ],
118
+ // },
119
+ // ],
120
+ // properties: {
121
+ // mentions: {
122
+ // type: 'array',
123
+ // prefixItems: [
124
+ // {
125
+ // type: 'string',
126
+ // maxLength: 100,
127
+ // },
128
+ // ],
129
+ // minItems: 1,
130
+ // maxItems: 5,
131
+ // items: false,
132
+ // },
133
+ // },
134
+ // additionalProperties: false,
135
+ // },
136
+ noTimeDocument: {
137
+ type: 'object',
138
+ properties: {
139
+ name: {
140
+ type: 'string',
141
+ },
142
+ },
143
+ additionalProperties: false,
144
+ },
145
+ uniqueDates: {
146
+ type: 'object',
147
+ indices: [
148
+ {
149
+ name: 'index1',
150
+ properties: [
151
+ { $createdAt: 'asc' },
152
+ { $updatedAt: 'asc' },
153
+ ],
154
+ unique: true,
155
+ },
156
+ {
157
+ name: 'index2',
158
+ properties: [
159
+ { $updatedAt: 'asc' },
160
+ ],
161
+ },
162
+ ],
163
+ properties: {
164
+ firstName: {
165
+ type: 'string',
166
+ },
167
+ lastName: {
168
+ type: 'string',
169
+ },
170
+ },
171
+ required: ['firstName', '$createdAt', '$updatedAt'],
172
+ additionalProperties: false,
173
+ },
174
+ withByteArrays: {
175
+ type: 'object',
176
+ indices: [
177
+ {
178
+ name: 'index1',
179
+ properties: [
180
+ { byteArrayField: 'asc' },
181
+ ],
182
+ },
183
+ ],
184
+ properties: {
185
+ byteArrayField: {
186
+ type: 'array',
187
+ byteArray: true,
188
+ maxItems: 16,
189
+ },
190
+ identifierField: {
191
+ type: 'array',
192
+ byteArray: true,
193
+ contentMediaType: JsIdentifier.MEDIA_TYPE,
194
+ minItems: 32,
195
+ maxItems: 32,
196
+ },
197
+ },
198
+ required: ['byteArrayField'],
199
+ additionalProperties: false,
200
+ },
201
+ optionalUniqueIndexedDocument: {
202
+ type: 'object',
203
+ properties: {
204
+ firstName: {
205
+ type: 'string',
206
+ maxLength: 63,
207
+ },
208
+ lastName: {
209
+ type: 'string',
210
+ maxLength: 63,
211
+ },
212
+ country: {
213
+ type: 'string',
214
+ maxLength: 63,
215
+ },
216
+ city: {
217
+ type: 'string',
218
+ maxLength: 63,
219
+ },
220
+ },
221
+ indices: [
222
+ {
223
+ name: 'index1',
224
+ properties: [
225
+ { firstName: 'asc' },
226
+ ],
227
+ unique: true,
228
+ },
229
+ {
230
+ name: 'index2',
231
+ properties: [
232
+ { $ownerId: 'asc' },
233
+ { firstName: 'asc' },
234
+ { lastName: 'asc' },
235
+ ],
236
+ unique: true,
237
+ },
238
+ {
239
+ name: 'index3',
240
+ properties: [
241
+ { country: 'asc' },
242
+ { city: 'asc' },
243
+ ],
244
+ unique: true,
245
+ },
246
+ ],
247
+ required: ['firstName', 'lastName'],
248
+ additionalProperties: false,
249
+ },
250
+ };
251
+
252
+ const dataContractValidator = new DataContractValidator();
253
+ const factory = new DataContractFactory(
254
+ protocolVersion.latestProtocolVersion,
255
+ dataContractValidator,
256
+ );
257
+
258
+ const dataContract = factory.create(ownerId, documents);
259
+
260
+ // dataContract.setDefinitions({
261
+ // lastName: {
262
+ // type: 'string',
263
+ // },
264
+ // });
265
+
266
+ return dataContract;
267
+ };
@@ -0,0 +1,43 @@
1
+ const crypto = require('crypto');
2
+
3
+ const getDataContractFixture = require('./getDataContractFixture');
4
+
5
+ const { default: loadWasmDpp } = require('../../..');
6
+ let { DocumentFactory, DocumentValidator, ProtocolVersionValidator } = require('../../..');
7
+ const generateRandomIdentifierAsync = require('../utils/generateRandomIdentifierAsync');
8
+
9
+ /**
10
+ * @param {DataContract} [dataContract]
11
+ * @return {Promise<Document[]>}
12
+ */
13
+ module.exports = async function getDocumentsFixture(
14
+ dataContract,
15
+ ) {
16
+ if (!dataContract) {
17
+ // eslint-disable-next-line no-param-reassign
18
+ dataContract = await getDataContractFixture();
19
+ }
20
+
21
+ ({ DocumentFactory, DocumentValidator, ProtocolVersionValidator } = await loadWasmDpp());
22
+
23
+ const documentValidator = new DocumentValidator(new ProtocolVersionValidator());
24
+ const factory = new DocumentFactory(1, documentValidator, {});
25
+
26
+ const ownerId = await generateRandomIdentifierAsync();
27
+
28
+ return [
29
+ factory.create(dataContract, ownerId, 'niceDocument', { name: 'Cutie' }),
30
+ factory.create(dataContract, ownerId, 'prettyDocument', { lastName: 'Shiny' }),
31
+ factory.create(dataContract, ownerId, 'prettyDocument', { lastName: 'Sweety' }),
32
+ factory.create(dataContract, ownerId, 'indexedDocument', { firstName: 'William', lastName: 'Birkin' }),
33
+ factory.create(dataContract, ownerId, 'indexedDocument', { firstName: 'Leon', lastName: 'Kennedy' }),
34
+ factory.create(dataContract, ownerId, 'noTimeDocument', { name: 'ImOutOfTime' }),
35
+ factory.create(dataContract, ownerId, 'uniqueDates', { firstName: 'John' }),
36
+ factory.create(dataContract, ownerId, 'indexedDocument', { firstName: 'Bill', lastName: 'Gates' }),
37
+ factory.create(dataContract, ownerId, 'withByteArrays', {
38
+ byteArrayField: crypto.randomBytes(10),
39
+ identifierField: (await generateRandomIdentifierAsync()).toBuffer(),
40
+ }),
41
+ factory.create(dataContract, ownerId, 'optionalUniqueIndexedDocument', { firstName: 'Jacques-Yves', lastName: 'Cousteau' }),
42
+ ];
43
+ };
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @typedef {createStateRepositoryMock}
3
+ * @param sinonSandbox
4
+ * @return {{
5
+ * fetchDataContract: *,
6
+ * createDataContract: *,
7
+ * updateDataContract: *,
8
+ * fetchDocuments: *,
9
+ * createDocument: *,
10
+ * updateDocument: *,
11
+ * removeDocument: *,
12
+ * fetchTransaction: *,
13
+ * fetchIdentity: *,
14
+ * createIdentity: *,
15
+ * updateIdentityRevision: *,
16
+ * disableIdentityKeys: *,
17
+ * addKeysToIdentity: *,
18
+ * fetchIdentityBalance: *,
19
+ * fetchIdentityBalanceWithDebt: *,
20
+ * addToIdentityBalance: *,
21
+ * addToSystemCredits: *,
22
+ * fetchLatestPlatformBlockHeight: *,
23
+ * fetchLatestPlatformCoreChainLockedHeight: *,
24
+ * verifyInstantLock: *,
25
+ * markAssetLockTransactionOutPointAsUsed: *,
26
+ * verifyChainLockHeight: *,
27
+ * isAssetLockTransactionOutPointAlreadyUsed: *,
28
+ * fetchSMLStore: *,
29
+ * fetchLatestWithdrawalTransactionIndex: *,
30
+ * enqueueWithdrawalTransaction: *,
31
+ * fetchLatestPlatformBlockTime: *,
32
+ * }}
33
+ */
34
+ module.exports = function createStateRepositoryMock(sinonSandbox) {
35
+ return {
36
+ fetchDataContract: sinonSandbox.stub(),
37
+ createDataContract: sinonSandbox.stub(),
38
+ updateDataContract: sinonSandbox.stub(),
39
+ fetchDocuments: sinonSandbox.stub(),
40
+ createDocument: sinonSandbox.stub(),
41
+ updateDocument: sinonSandbox.stub(),
42
+ removeDocument: sinonSandbox.stub(),
43
+ fetchTransaction: sinonSandbox.stub(),
44
+ fetchIdentity: sinonSandbox.stub(),
45
+ createIdentity: sinonSandbox.stub(),
46
+ addKeysToIdentity: sinonSandbox.stub(),
47
+ disableIdentityKeys: sinonSandbox.stub(),
48
+ updateIdentityRevision: sinonSandbox.stub(),
49
+ addToIdentityBalance: sinonSandbox.stub(),
50
+ fetchIdentityBalance: sinonSandbox.stub(),
51
+ fetchIdentityBalanceWithDebt: sinonSandbox.stub(),
52
+ addToSystemCredits: sinonSandbox.stub(),
53
+ fetchLatestPlatformBlockHeight: sinonSandbox.stub(),
54
+ fetchLatestPlatformCoreChainLockedHeight: sinonSandbox.stub(),
55
+ verifyInstantLock: sinonSandbox.stub(),
56
+ markAssetLockTransactionOutPointAsUsed: sinonSandbox.stub(),
57
+ verifyChainLockHeight: sinonSandbox.stub(),
58
+ isAssetLockTransactionOutPointAlreadyUsed: sinonSandbox.stub(),
59
+ fetchSMLStore: sinonSandbox.stub(),
60
+ fetchLatestWithdrawalTransactionIndex: sinonSandbox.stub(),
61
+ enqueueWithdrawalTransaction: sinonSandbox.stub(),
62
+ fetchLatestPlatformBlockTime: sinonSandbox.stub(),
63
+ };
64
+ };
@@ -0,0 +1,51 @@
1
+ const BlsSignatures = require('@dashevo/dpp/lib/bls/bls');
2
+
3
+ module.exports = async function getBlsAdapterMock() {
4
+ const bls = await BlsSignatures.getInstance();
5
+
6
+ const blsAdapter = {
7
+ validatePublicKey(publicKeyBuffer) {
8
+ let pk;
9
+
10
+ try {
11
+ pk = bls.G1Element.fromBytes(Uint8Array.from(publicKeyBuffer));
12
+ } catch (e) {
13
+ return false;
14
+ } finally {
15
+ if (pk) {
16
+ pk.delete();
17
+ }
18
+ }
19
+
20
+ return Boolean(pk);
21
+ },
22
+ sign(data, key) {
23
+ const blsKey = bls.PrivateKey.fromBytes(Uint8Array.from(key), true);
24
+ const signature = bls.BasicSchemeMPL.sign(blsKey, data);
25
+ const result = Buffer.from(signature.serialize());
26
+
27
+ signature.delete();
28
+ blsKey.delete();
29
+
30
+ return result;
31
+ },
32
+ verifySignature(signature, data, publicKey) {
33
+ const { G1Element, G2Element, BasicSchemeMPL } = bls;
34
+
35
+ const blsKey = G1Element.fromBytes(Uint8Array.from(publicKey));
36
+
37
+ const blsSignature = G2Element.fromBytes(
38
+ Uint8Array.from(signature),
39
+ );
40
+
41
+ const result = BasicSchemeMPL.verify(blsKey, Uint8Array.from(data), blsSignature);
42
+
43
+ blsKey.delete();
44
+ blsSignature.delete();
45
+
46
+ return result;
47
+ },
48
+ };
49
+
50
+ return blsAdapter;
51
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dashevo/wasm-dpp",
3
- "version": "0.24.0-dev.12",
3
+ "version": "0.24.0-dev.14",
4
4
  "description": "The JavaScript implementation of the Dash Platform Protocol",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/lib/index.d.ts",
@@ -10,8 +10,8 @@
10
10
  "test:browsers": "karma start ./karma.conf.js --single-run",
11
11
  "test:node": "NODE_ENV=test mocha",
12
12
  "webpack": "webpack",
13
- "lint": "eslint . && cargo clippy && cargo fmt --check",
14
- "lint:fix": "eslint . --fix && cargo clippy --fix && cargo fmt",
13
+ "lint": "eslint .",
14
+ "lint:fix": "eslint . --fix",
15
15
  "clean": "yarn exec scripts/clean.sh"
16
16
  },
17
17
  "ultra": {
@@ -30,13 +30,15 @@
30
30
  ],
31
31
  "license": "MIT",
32
32
  "dependencies": {
33
- "@dashevo/bls": "~1.0.0-beta.2"
33
+ "@dashevo/bls": "~1.2.9",
34
+ "lodash": "^4.17.21",
35
+ "varint": "^6.0.0"
34
36
  },
35
37
  "devDependencies": {
36
38
  "@apidevtools/json-schema-ref-parser": "^8.0.0",
37
- "@dashevo/dashcore-lib": "~0.19.44",
38
- "@dashevo/dpns-contract": "0.24.0-dev.12",
39
- "@dashevo/dpp": "0.24.0-dev.12",
39
+ "@dashevo/dashcore-lib": "~0.20.0",
40
+ "@dashevo/dpns-contract": "0.24.0-dev.14",
41
+ "@dashevo/dpp": "0.24.0-dev.14",
40
42
  "@dashevo/wasm-re2": "~1.0.2",
41
43
  "@types/node": "^14.6.0",
42
44
  "ajv": "^8.6.0",
@@ -73,11 +75,12 @@
73
75
  "stream-browserify": "^3.0.0",
74
76
  "stream-http": "^3.2.0",
75
77
  "string_decoder": "^1.3.0",
78
+ "terser-webpack-plugin": "^5.3.1",
76
79
  "ts-loader": "^8.0.2",
77
80
  "typescript": "^3.9.5",
78
81
  "url": "^0.11.0",
79
82
  "util": "^0.12.4",
80
- "webpack": "^5.59.1",
83
+ "webpack": "^5.76.1",
81
84
  "webpack-cli": "^4.9.1"
82
85
  }
83
86
  }
@@ -1,9 +1,11 @@
1
1
  use dpp::dashcore::anyhow::anyhow;
2
2
  use dpp::{BlsModule, PublicKeyValidationError};
3
3
  use wasm_bindgen::prelude::*;
4
+ use wasm_bindgen::JsCast;
4
5
 
5
6
  #[wasm_bindgen]
6
7
  extern "C" {
8
+ #[derive(Clone)]
7
9
  pub type JsBlsAdapter;
8
10
 
9
11
  #[wasm_bindgen(method)]
@@ -31,6 +33,7 @@ extern "C" {
31
33
  ) -> Result<js_sys::Uint8Array, JsValue>;
32
34
  }
33
35
 
36
+ #[derive(Clone)]
34
37
  pub struct BlsAdapter(pub JsBlsAdapter);
35
38
 
36
39
  impl BlsModule for BlsAdapter {
@@ -66,6 +69,19 @@ impl BlsModule for BlsAdapter {
66
69
  self.0
67
70
  .sign(data, private_key)
68
71
  .map(|arr| arr.to_vec())
69
- .map_err(|_v| anyhow!("Can't sign").into())
72
+ .map_err(|e: JsValue| {
73
+ let error = e.dyn_into::<js_sys::Error>();
74
+
75
+ match error {
76
+ Ok(e) => {
77
+ let message: String = e
78
+ .message()
79
+ .as_string()
80
+ .unwrap_or_else(|| String::from("Unknown error, can't sign"));
81
+ anyhow!(message).into()
82
+ }
83
+ Err(_) => anyhow!("Unknown error, can't sign").into(),
84
+ }
85
+ })
70
86
  }
71
87
  }
package/src/buffer.rs CHANGED
@@ -10,6 +10,9 @@ extern "C" {
10
10
  #[wasm_bindgen(constructor, js_name = "from")]
11
11
  pub fn from_bytes(js_sys: &[u8]) -> Buffer;
12
12
 
13
+ #[wasm_bindgen(constructor, js_name = "from")]
14
+ pub fn from_bytes_owned(js_sys: Vec<u8>) -> Buffer;
15
+
13
16
  #[wasm_bindgen(constructor, js_name = "from")]
14
17
  pub fn from_string(js_sys: String) -> Buffer;
15
18
  }