@dashevo/wasm-dpp 0.23.0-dev.14 → 0.24.0-dev.10

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 (272) hide show
  1. package/.eslintignore +1 -0
  2. package/Cargo.toml +23 -0
  3. package/README.md +21 -6
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.js +2 -0
  6. package/dist/index.js.LICENSE.txt +8 -0
  7. package/dist/lib/patchIdentifier.d.ts +2 -0
  8. package/dist/wasm/wasm_dpp.d.ts +2756 -0
  9. package/index.ts +30 -0
  10. package/karma.conf.js +6 -3
  11. package/lib/patchIdentifier.ts +37 -0
  12. package/lib/test/.eslintrc +9 -0
  13. package/lib/test/bootstrap.js +27 -0
  14. package/lib/test/expect/expectError.js +34 -0
  15. package/lib/test/karma/loader.js +6 -0
  16. package/lib/test/utils/generateRandomIdentifierAsync.js +14 -0
  17. package/package.json +31 -55
  18. package/scripts/build.sh +69 -0
  19. package/scripts/clean.sh +4 -0
  20. package/src/bls_adapter.rs +71 -0
  21. package/src/buffer.rs +15 -0
  22. package/src/dash_platform_protocol.rs +26 -0
  23. package/src/data_contract/data_contract.rs +290 -0
  24. package/src/data_contract/errors/data_contract_already_exists.rs +1 -0
  25. package/src/data_contract/errors/invalid_data_contract.rs +29 -0
  26. package/src/data_contract/errors/invalid_document_type.rs +33 -0
  27. package/src/data_contract/errors/mod.rs +37 -0
  28. package/src/data_contract/index.rs +61 -0
  29. package/src/data_contract/mod.rs +10 -0
  30. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +37 -0
  31. package/src/data_contract/state_transition/mod.rs +3 -0
  32. package/src/data_contract_factory/data_contract_factory.rs +155 -0
  33. package/src/data_contract_factory/mod.rs +1 -0
  34. package/src/document/errors/document_already_exists_error.rs +28 -0
  35. package/src/document/errors/document_not_provided_error.rs +28 -0
  36. package/src/document/errors/invalid_action_name_error.rs +24 -0
  37. package/src/document/errors/invalid_document_action_error.rs +28 -0
  38. package/src/document/errors/invalid_document_error.rs +32 -0
  39. package/src/document/errors/invalid_initial_revision_error.rs +25 -0
  40. package/src/document/errors/mismatch_owners_ids_error.rs +27 -0
  41. package/src/document/errors/mod.rs +55 -0
  42. package/src/document/errors/no_documents_supplied_error.rs +22 -0
  43. package/src/document/mod.rs +158 -0
  44. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +22 -0
  45. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +22 -0
  46. package/src/document/state_transition/document_batch_transition/document_transition/document_update_transition.rs +22 -0
  47. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +24 -0
  48. package/src/document/state_transition/document_batch_transition/mod.rs +1 -0
  49. package/src/document/state_transition/mod.rs +1 -0
  50. package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +36 -0
  51. package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +36 -0
  52. package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +36 -0
  53. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +26 -0
  54. package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +36 -0
  55. package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +36 -0
  56. package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +66 -0
  57. package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +43 -0
  58. package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +39 -0
  59. package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +39 -0
  60. package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +59 -0
  61. package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +67 -0
  62. package/src/errors/consensus/basic/data_contract/index_error/mod.rs +15 -0
  63. package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +51 -0
  64. package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +51 -0
  65. package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +36 -0
  66. package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +37 -0
  67. package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +36 -0
  68. package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +26 -0
  69. package/src/errors/consensus/basic/data_contract/mod.rs +25 -0
  70. package/src/errors/consensus/basic/decode/mod.rs +5 -0
  71. package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +29 -0
  72. package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +29 -0
  73. package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +32 -0
  74. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +36 -0
  75. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +40 -0
  76. package/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +26 -0
  77. package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +38 -0
  78. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +39 -0
  79. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +20 -0
  80. package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +20 -0
  81. package/src/errors/consensus/basic/document/missing_document_type_error.rs +20 -0
  82. package/src/errors/consensus/basic/document/mod.rs +19 -0
  83. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +32 -0
  84. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +32 -0
  85. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +38 -0
  86. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +31 -0
  87. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +37 -0
  88. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +29 -0
  89. package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +33 -0
  90. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +34 -0
  91. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +34 -0
  92. package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +29 -0
  93. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +60 -0
  94. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +29 -0
  95. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +29 -0
  96. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +32 -0
  97. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +29 -0
  98. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +39 -0
  99. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +42 -0
  100. package/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +30 -0
  101. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +22 -0
  102. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +24 -0
  103. package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +22 -0
  104. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +29 -0
  105. package/src/errors/consensus/basic/identity/mod.rs +45 -0
  106. package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +32 -0
  107. package/src/errors/consensus/basic/invalid_identifier_error.rs +36 -0
  108. package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +41 -0
  109. package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +20 -0
  110. package/src/errors/consensus/basic/json_schema_compilation_error.rs +26 -0
  111. package/src/errors/consensus/basic/json_schema_error.rs +274 -0
  112. package/src/errors/consensus/basic/mod.rs +30 -0
  113. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +30 -0
  114. package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +41 -0
  115. package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +29 -0
  116. package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +20 -0
  117. package/src/errors/consensus/basic/state_transition/mod.rs +7 -0
  118. package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +36 -0
  119. package/src/errors/consensus/basic/test_consensus_error.rs +21 -0
  120. package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +32 -0
  121. package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +37 -0
  122. package/src/errors/consensus/fee/balance_is_not_enough_error.rs +32 -0
  123. package/src/errors/consensus/fee/mod.rs +3 -0
  124. package/src/errors/consensus/mod.rs +4 -0
  125. package/src/errors/consensus/signature/identity_not_found_error.rs +29 -0
  126. package/src/errors/consensus/signature/mod.rs +3 -0
  127. package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +31 -0
  128. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +74 -0
  129. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +82 -0
  130. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +66 -0
  131. package/src/errors/consensus/state/data_contract/data_trigger/mod.rs +7 -0
  132. package/src/errors/consensus/state/data_contract/mod.rs +4 -0
  133. package/src/errors/consensus/state/document/document_already_present_error.rs +28 -0
  134. package/src/errors/consensus/state/document/document_not_found_error.rs +28 -0
  135. package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +50 -0
  136. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +72 -0
  137. package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +28 -0
  138. package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +42 -0
  139. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +38 -0
  140. package/src/errors/consensus/state/document/mod.rs +15 -0
  141. package/src/errors/consensus/state/identity/identity_already_exists_error.rs +28 -0
  142. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +49 -0
  143. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +31 -0
  144. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +28 -0
  145. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +28 -0
  146. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +38 -0
  147. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +26 -0
  148. package/src/errors/consensus/state/identity/mod.rs +15 -0
  149. package/src/errors/consensus/state/mod.rs +3 -0
  150. package/src/errors/consensus_error.rs +612 -0
  151. package/src/errors/from.rs +24 -0
  152. package/src/errors/js_conversion.rs +63 -0
  153. package/src/errors/mod.rs +10 -0
  154. package/src/errors/public_key_validation_error.rs +23 -0
  155. package/src/identifier.rs +103 -0
  156. package/src/identity.rs +253 -0
  157. package/src/identity_facade.rs +55 -0
  158. package/src/identity_public_key/key_type.rs +22 -0
  159. package/src/identity_public_key/mod.rs +192 -0
  160. package/src/identity_public_key/public_keys_validator.rs +44 -0
  161. package/src/identity_public_key/purpose.rs +24 -0
  162. package/src/identity_public_key/security_level.rs +21 -0
  163. package/src/lib.rs +28 -0
  164. package/src/metadata.rs +54 -0
  165. package/src/utils.rs +59 -0
  166. package/src/validation_result.rs +41 -0
  167. package/test/integration/DashPlatformProtocol.spec.js +4 -4
  168. package/test/integration/ajv/keywords/byteArray/addByteArrayKeyword.spec.js +2 -2
  169. package/test/integration/dataContract/DataContractFacade.spec.js +6 -6
  170. package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +10 -10
  171. package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +14 -14
  172. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +22 -22
  173. package/test/integration/document/Document.spec.js +10 -5
  174. package/test/integration/document/DocumentFacade.spec.js +11 -11
  175. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +5 -5
  176. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +25 -25
  177. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +15 -15
  178. package/test/integration/document/validation/validateDocumentFactory.spec.js +12 -12
  179. package/test/integration/error/consensus/createConsensusError.spec.js +3 -3
  180. package/test/integration/identity/IdentityFacade.spec.js +13 -13
  181. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +12 -12
  182. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +11 -11
  183. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +8 -8
  184. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +24 -39
  185. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +7 -7
  186. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +29 -35
  187. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +8 -8
  188. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +11 -11
  189. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +10 -10
  190. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +7 -7
  191. package/test/integration/identity/validation/validateIdentityFactory.spec.js +8 -8
  192. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +50 -24
  193. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +14 -14
  194. package/test/integration/stateTransition/StateTransitionFacade.spec.js +15 -19
  195. package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +8 -11
  196. package/test/integration/util/generateEntropy.spec.js +1 -1
  197. package/test/integration/util/serializer.spec.js +2 -2
  198. package/test/unit/DashPlatformProtocol.spec.js +4 -4
  199. package/test/unit/Identifier.spec.js +2 -2
  200. package/test/unit/Metadata.spec.js +1 -1
  201. package/test/unit/dataContract/DataContract.spec.js +100 -159
  202. package/test/unit/dataContract/DataContractFactory.spec.js +55 -111
  203. package/test/unit/dataContract/createDataContract.spec.js +20 -10
  204. package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +2 -2
  205. package/test/unit/dataContract/generateDataContractId.spec.js +23 -6
  206. package/test/unit/dataContract/getBinaryPropertiesFromSchema.spec.js +1 -1
  207. package/test/unit/dataContract/getPropertyDefinitionByPath.spec.js +1 -1
  208. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +8 -8
  209. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +6 -6
  210. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +8 -8
  211. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +8 -8
  212. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +6 -6
  213. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +6 -6
  214. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +9 -9
  215. package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +6 -6
  216. package/test/unit/dataContract/validation/validateDataContractPatternsFactory.spec.js +3 -3
  217. package/test/unit/dataTrigger/DataTrigger.spec.js +8 -8
  218. package/test/unit/dataTrigger/DataTriggerExecutionContext.spec.js +4 -4
  219. package/test/unit/dataTrigger/dashpayDataTriggers/createContactRequestDataTrigger.spec.js +13 -15
  220. package/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js +12 -12
  221. package/test/unit/dataTrigger/featureFlagDataTriggers/createFeatureFlagDataTrigger.spec.js +11 -13
  222. package/test/unit/dataTrigger/getDataTriggersFactory.spec.js +7 -7
  223. package/test/unit/dataTrigger/rejectDataTrigger.spec.js +8 -8
  224. package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +9 -9
  225. package/test/unit/decodeProtocolEntityFactory.spec.js +4 -4
  226. package/test/unit/document/Document.spec.js +9 -9
  227. package/test/unit/document/DocumentFactory.spec.js +19 -19
  228. package/test/unit/document/errors/InvalidDocumentError.spec.js +2 -2
  229. package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +8 -8
  230. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +8 -8
  231. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +16 -17
  232. package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +1 -1
  233. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +2 -2
  234. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +6 -6
  235. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +7 -7
  236. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +6 -6
  237. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +27 -34
  238. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +9 -9
  239. package/test/unit/errors/consensus/codes.spec.js +7 -7
  240. package/test/unit/identity/Identity.spec.js +98 -69
  241. package/test/unit/identity/IdentityFactory.spec.js +15 -15
  242. package/test/unit/identity/IdentityPublicKey.spec.js +53 -66
  243. package/test/unit/identity/creditsConverter.spec.js +1 -1
  244. package/test/unit/identity/errors/InvalidIdentityError.spec.js +2 -2
  245. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +7 -7
  246. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +8 -8
  247. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +6 -6
  248. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +4 -4
  249. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +7 -7
  250. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +2 -2
  251. package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +6 -6
  252. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +6 -6
  253. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +5 -5
  254. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +3 -3
  255. package/test/unit/identity/validation/validateRequiredPurposeAndSecurityLevelFactory.spec.js +5 -5
  256. package/test/unit/stateTransition/StateTransitionFactory.spec.js +8 -8
  257. package/test/unit/stateTransition/createStateTransitionFactory.spec.js +8 -8
  258. package/test/unit/stateTransition/errors/InvalidStateTransitionError.spec.js +3 -3
  259. package/test/unit/stateTransition/validation/validateStateTransitionBasicFactory.spec.js +12 -12
  260. package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +15 -15
  261. package/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js +22 -22
  262. package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +6 -6
  263. package/test/unit/stateTransition/validation/validateStateTransitionStateFactory.spec.js +9 -9
  264. package/test/unit/version/validateProtocolVersionFactory.spec.js +7 -7
  265. package/tsconfig.json +18 -0
  266. package/wasm/wasm_dpp.d.ts +2756 -0
  267. package/wasm/wasm_dpp.js +7750 -0
  268. package/wasm/wasm_dpp_bg.js +1 -0
  269. package/wasm/wasm_dpp_bg.wasm +0 -0
  270. package/wasm/wasm_dpp_bg.wasm.d.ts +518 -0
  271. package/webpack.config.js +22 -19
  272. package/CHANGELOG.md +0 -397
package/index.ts ADDED
@@ -0,0 +1,30 @@
1
+ import init, * as dpp_module from './wasm/wasm_dpp';
2
+ // @ts-ignore
3
+ import wasmBase from './wasm/wasm_dpp_bg.js';
4
+ import patchIdentifier from "./lib/patchIdentifier";
5
+
6
+ let isInitialized = false;
7
+
8
+ export default async function loadDpp() {
9
+ if (isInitialized) {
10
+ return dpp_module;
11
+ } else {
12
+ // @ts-ignore
13
+ let bytes = Buffer.from(wasmBase, 'base64');
14
+
15
+ if (typeof fetch !== 'undefined') {
16
+ let blob = new Blob([bytes], { type: "application/wasm" });
17
+ let wasmUrl = URL.createObjectURL(blob);
18
+ await init(wasmUrl);
19
+ isInitialized = true;
20
+ } else {
21
+ dpp_module.initSync(bytes);
22
+ isInitialized = true;
23
+ }
24
+
25
+ patchIdentifier(dpp_module);
26
+
27
+ return dpp_module;
28
+ }
29
+ };
30
+
package/karma.conf.js CHANGED
@@ -24,15 +24,18 @@ module.exports = (config) => {
24
24
  minimize: false,
25
25
  moduleIds: 'named',
26
26
  },
27
- plugins: webpackConfig[0].plugins,
28
- resolve: webpackConfig[0].resolve,
27
+ plugins: webpackConfig.plugins,
28
+ resolve: webpackConfig.resolve,
29
29
  },
30
30
  reporters: ['mocha'],
31
31
  port: 9876,
32
32
  colors: true,
33
33
  logLevel: config.LOG_INFO,
34
34
  autoWatch: false,
35
- browsers: ['ChromeHeadless', 'FirefoxHeadless'],
35
+ browsers: [
36
+ 'ChromeHeadless',
37
+ 'FirefoxHeadless',
38
+ ],
36
39
  singleRun: false,
37
40
  concurrency: Infinity,
38
41
  plugins: [
@@ -0,0 +1,37 @@
1
+ import * as dpp_module from "../wasm/wasm_dpp";
2
+ // import { inspect } from 'util';
3
+
4
+ export default function (dppModule: typeof dpp_module) {
5
+ // As Identifier is now exported from WASM, it can no longer
6
+ // patched the same way as JS implementation did. This module
7
+ // adds everything that's currently missing from Identifier that can't
8
+ // be implemented in Rust directly.
9
+ const { Identifier } = dppModule;
10
+
11
+ //@ts-ignore
12
+ Object.setPrototypeOf(Identifier.prototype, Buffer.prototype);
13
+
14
+ Identifier.prototype.valueOf = function() {
15
+ return Buffer.from(this.inner());
16
+ }
17
+
18
+ // @ts-ignore
19
+ Identifier.prototype.encodeCBOR = function encodeCBOR(encoder) {
20
+ // @ts-ignore
21
+ encoder.pushAny(this.valueOf());
22
+
23
+ return true;
24
+ };
25
+
26
+ // @ts-ignore
27
+ Identifier.prototype.inspect = function(...args) {
28
+ return this.valueOf().inspect(...args);
29
+ }
30
+
31
+ // TODO: THIS MAKES BUFFERS PRINTABLE IN NODE.JS, BUT FOR THIS TO WORK
32
+ // target: node has to be specified and utils have to be included __without__ using
33
+ // polyfills. This in turn will make web version not work. The code is as follows:
34
+ // console.log("custom:", inspect.custom);
35
+ // //@ts-ignore
36
+ // Identifier.prototype[inspect.custom] = Identifier.prototype.inspect;
37
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "env": {
3
+ "node": true,
4
+ "mocha": true
5
+ },
6
+ "rules": {
7
+ "import/no-extraneous-dependencies": "off"
8
+ }
9
+ }
@@ -0,0 +1,27 @@
1
+ const { expect, use } = require('chai');
2
+ const sinon = require('sinon');
3
+ const sinonChai = require('sinon-chai');
4
+ const dirtyChai = require('dirty-chai');
5
+ const chaiAsPromised = require('chai-as-promised');
6
+ const chaiString = require('chai-string');
7
+ const chaiExclude = require('chai-exclude');
8
+
9
+ use(sinonChai);
10
+ use(chaiAsPromised);
11
+ use(dirtyChai);
12
+ use(chaiString);
13
+ use(chaiExclude);
14
+
15
+ beforeEach(function beforeEach() {
16
+ if (!this.sinonSandbox) {
17
+ this.sinonSandbox = sinon.createSandbox();
18
+ } else {
19
+ this.sinonSandbox.restore();
20
+ }
21
+ });
22
+
23
+ afterEach(function afterEach() {
24
+ this.sinonSandbox.restore();
25
+ });
26
+
27
+ global.expect = expect;
@@ -0,0 +1,34 @@
1
+ const { expect } = require('chai');
2
+
3
+ const { default: loadWasmDpp } = require('../../../dist');
4
+
5
+ const expectError = {
6
+ /**
7
+ * @param {ValidationResult} result
8
+ * @param {AbstractConsensusError} [errorClass]
9
+ * @param {number} [count]
10
+ */
11
+ async expectValidationError(result, errorClass, count = 1) {
12
+ const wasmDpp = await loadWasmDpp();
13
+ if (!errorClass) {
14
+ // eslint-disable-next-line no-param-reassign
15
+ errorClass = wasmDpp.ValidationResult;
16
+ }
17
+ expect(result).to.be.an.instanceOf(wasmDpp.ValidationResult);
18
+ expect(result.getErrors()).to.have.lengthOf(count);
19
+
20
+ result.getErrors().forEach((error) => expect(error).to.be.an.instanceOf(errorClass));
21
+ },
22
+
23
+ /**
24
+ *
25
+ * @param {ValidationResult} result
26
+ * @param [count]
27
+ */
28
+ async expectJsonSchemaError(result, count = 1) {
29
+ const wasmDpp = await loadWasmDpp();
30
+ await expectError.expectValidationError(result, wasmDpp.JsonSchemaError, count);
31
+ },
32
+ };
33
+
34
+ module.exports = expectError;
@@ -0,0 +1,6 @@
1
+ // This file is used for compiling tests with webpack into one file for using with karma
2
+ require('../bootstrap');
3
+
4
+ const testsContext = require.context('../../../test', true, /\.spec\.js$/);
5
+
6
+ testsContext.keys().forEach(testsContext);
@@ -0,0 +1,14 @@
1
+ const crypto = require('crypto');
2
+ const { default: loadWasmDpp } = require('../../../dist');
3
+
4
+ /**
5
+ * Generate random identity ID
6
+ *
7
+ * @return {Identifier}
8
+ */
9
+ async function generateRandomIdentifierAsync() {
10
+ const { Identifier } = await loadWasmDpp();
11
+ return new Identifier(crypto.randomBytes(32));
12
+ }
13
+
14
+ module.exports = generateRandomIdentifierAsync;
package/package.json CHANGED
@@ -1,64 +1,61 @@
1
1
  {
2
2
  "name": "@dashevo/wasm-dpp",
3
- "version": "0.23.0-dev.14",
3
+ "version": "0.24.0-dev.10",
4
4
  "description": "The JavaScript implementation of the Dash Platform Protocol",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
5
7
  "scripts": {
6
- "lint": "eslint .",
7
- "test": "yarn run test:coverage && yarn run test:browsers",
8
- "build:web": "webpack --stats-error-details",
9
- "test:node": "NODE_ENV=test mocha",
8
+ "build": "yarn exec scripts/build.sh && webpack",
9
+ "test": "yarn run test:node && yarn run test:browsers",
10
10
  "test:browsers": "karma start ./karma.conf.js --single-run",
11
- "test:coverage": "NODE_ENV=test nyc --check-coverage --stmts=98 --branch=94 --funcs=95 --lines=97 yarn run mocha 'test/unit/**/*.spec.js' 'test/integration/**/*.spec.js'",
12
- "prepublishOnly": "yarn run build:web"
11
+ "test:node": "NODE_ENV=test mocha",
12
+ "webpack": "webpack",
13
+ "lint": "eslint . && cargo clippy && cargo fmt --check",
14
+ "lint:fix": "eslint . --fix && cargo clippy --fix && cargo fmt",
15
+ "clean": "yarn exec scripts/clean.sh"
13
16
  },
14
17
  "ultra": {
15
18
  "concurrent": [
16
- "test"
19
+ "test",
20
+ "lint"
17
21
  ]
18
22
  },
19
- "main": "lib/index.js",
23
+ "author": "Dash Core Team",
20
24
  "contributors": [
21
25
  {
22
26
  "name": "Anton Suprunchuk",
23
- "email": "anton.suprunchuk@dash.org",
27
+ "email": "anton.suprunchuk@gmail.com",
24
28
  "url": "https://github.com/antouhou"
25
- },
26
- {
27
- "name": "Ivan Shumkov",
28
- "email": "ivan@shumkov.ru",
29
- "url": "https://github.com/shumkov"
30
- },
31
- {
32
- "name": "Djavid Gabibiyan",
33
- "email": "djavid@dash.org",
34
- "url": "https://github.com/jawid-h"
35
- },
36
- {
37
- "name": "Konstantin Shuplenkov",
38
- "email": "konstantin.shuplenkov@dash.org",
39
- "url": "https://github.com/shuplenkov"
40
29
  }
41
30
  ],
42
31
  "license": "MIT",
32
+ "dependencies": {
33
+ "@dashevo/bls": "~1.0.0-beta.2"
34
+ },
43
35
  "devDependencies": {
44
- "@babel/core": "^7.15.5",
45
- "@babel/preset-env": "^7.15.4",
46
- "acorn": "^8.5.0",
36
+ "@apidevtools/json-schema-ref-parser": "^8.0.0",
37
+ "@dashevo/dashcore-lib": "~0.19.44",
38
+ "@dashevo/dpns-contract": "0.24.0-dev.10",
39
+ "@dashevo/dpp": "0.24.0-dev.10",
40
+ "@dashevo/wasm-re2": "~1.0.2",
41
+ "@types/node": "^14.6.0",
42
+ "ajv": "^8.6.0",
47
43
  "assert": "^2.0.0",
48
- "babel-loader": "^8.2.2",
44
+ "bs58": "^4.0.1",
49
45
  "buffer": "^6.0.3",
50
46
  "chai": "^4.3.4",
51
47
  "chai-as-promised": "^7.1.1",
52
48
  "chai-exclude": "^2.1.0",
53
49
  "chai-string": "^1.5.0",
54
- "core-js": "^3.17.2",
55
50
  "crypto-browserify": "^3.12.0",
56
51
  "dirty-chai": "^2.0.1",
57
52
  "eslint": "^7.32.0",
58
53
  "eslint-config-airbnb-base": "^14.2.1",
59
54
  "eslint-plugin-import": "^2.24.2",
60
55
  "events": "^3.3.0",
56
+ "fast-json-patch": "^3.1.0",
61
57
  "https-browserify": "^1.0.0",
58
+ "json-schema-diff-validator": "^0.4.1",
62
59
  "karma": "^6.4.1",
63
60
  "karma-chai": "^0.1.0",
64
61
  "karma-chrome-launcher": "^3.1.0",
@@ -66,9 +63,9 @@
66
63
  "karma-mocha": "^2.0.1",
67
64
  "karma-mocha-reporter": "^2.2.5",
68
65
  "karma-webpack": "^5.0.0",
66
+ "lodash": "^4.17.21",
67
+ "long": "^5.2.0",
69
68
  "mocha": "^9.1.2",
70
- "node-inspect-extracted": "^1.0.8",
71
- "nyc": "^15.1.0",
72
69
  "path-browserify": "^1.0.1",
73
70
  "process": "^0.11.10",
74
71
  "sinon": "^11.1.2",
@@ -76,32 +73,11 @@
76
73
  "stream-browserify": "^3.0.0",
77
74
  "stream-http": "^3.2.0",
78
75
  "string_decoder": "^1.3.0",
76
+ "ts-loader": "^8.0.2",
77
+ "typescript": "^3.9.5",
79
78
  "url": "^0.11.0",
80
79
  "util": "^0.12.4",
81
80
  "webpack": "^5.59.1",
82
81
  "webpack-cli": "^4.9.1"
83
- },
84
- "dependencies": {
85
- "@apidevtools/json-schema-ref-parser": "^8.0.0",
86
- "@dashevo/dashcore-lib": "~0.19.44",
87
- "@dashevo/dashpay-contract": "0.24.0-dev.5",
88
- "@dashevo/dpns-contract": "0.24.0-dev.5",
89
- "@dashevo/feature-flags-contract": "0.24.0-dev.5",
90
- "@dashevo/masternode-reward-shares-contract": "0.24.0-dev.5",
91
- "@dashevo/wasm-re2": "~1.0.2",
92
- "ajv": "^8.6.0",
93
- "ajv-formats": "^2.1.1",
94
- "bignumber.js": "^9.0.1",
95
- "bls-signatures": "^0.2.5",
96
- "bs58": "^4.0.1",
97
- "cbor": "^8.0.0",
98
- "fast-json-patch": "^3.1.0",
99
- "json-schema-diff-validator": "^0.4.1",
100
- "json-schema-traverse": "^1.0.0",
101
- "lodash.clonedeep": "^4.5.0",
102
- "lodash.clonedeepwith": "^4.5.0",
103
- "lodash.get": "^4.4.2",
104
- "lodash.set": "^4.3.2",
105
- "long": "^5.2.0"
106
82
  }
107
83
  }
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env bash
2
+
3
+ TARGET=wasm32-unknown-unknown
4
+
5
+ PROFILE_ARG=""
6
+ PROFILE="debug"
7
+
8
+ if [ -n "$CARGO_BUILD_PROFILE" ]; then
9
+ if [ "$CARGO_BUILD_PROFILE" == "release" ]; then
10
+ PROFILE_ARG="--release"
11
+ PROFILE="release"
12
+ elif [ "$CARGO_BUILD_PROFILE" != "debug" ]; then
13
+ PROFILE_ARG="--profile $CARGO_BUILD_PROFILE"
14
+ PROFILE="$CARGO_BUILD_PROFILE"
15
+ fi
16
+ fi
17
+
18
+ OUTPUT_DIR="$PWD/wasm"
19
+ OUTPUT_FILE="$OUTPUT_DIR/wasm_dpp_bg.wasm"
20
+ OUTPUT_FILE_JS="$OUTPUT_DIR/wasm_dpp_bg.js"
21
+ BUILD_COMMAND="cargo build --target=$TARGET $PROFILE_ARG"
22
+ BINDGEN_COMMAND="wasm-bindgen --out-dir=$OUTPUT_DIR --target=web --omit-default-module-path ../../target/$TARGET/$PROFILE/wasm_dpp.wasm"
23
+
24
+ DIST_TYPINGS="$PWD/dist/wasm/wasm_dpp.d.ts"
25
+ WASM_TYPINGS_PATH="$OUTPUT_DIR/wasm_dpp.d.ts"
26
+
27
+
28
+ if ! [[ -d $OUTPUT_DIR ]]; then
29
+ mkdir -p "$OUTPUT_DIR"
30
+ fi
31
+
32
+ if ! [ -x "$(command -v wasm-bindgen)" ]; then
33
+ echo 'Wasm-bindgen CLI is not installed. Installing';
34
+ cargo install -f wasm-bindgen-cli
35
+ fi
36
+
37
+
38
+ # On a mac, bundled clang won't work - you need to install LLVM manually through brew,
39
+ # and then set the correct env for the build to work
40
+ if [[ "$OSTYPE" == "darwin"* ]]; then
41
+ AR_PATH=$(which llvm-ar)
42
+ CLANG_PATH=$(which clang)
43
+ AR=$AR_PATH CC=$CLANG_PATH $BUILD_COMMAND
44
+ AR=$AR_PATH CC=$CLANG_PATH $BINDGEN_COMMAND
45
+ else
46
+ $BUILD_COMMAND
47
+ $BINDGEN_COMMAND
48
+ fi
49
+
50
+ # EMCC_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0 --no-entry" cargo build --target=wasm32-unknown-emscripten --release
51
+ # EMCC_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0 --no-entry" wasm-bindgen --out-dir=wasm --target=web --omit-default-module-path ../../target/wasm32-unknown-emscripten/release/wasm_dpp.wasm
52
+
53
+ # TODO: Must be somehow preinstalled?
54
+ #if [ "$PROFILE" == "release" ]; then
55
+ # echo "Optimizing wasm using Binaryen"
56
+ # wasm-opt -Os "$OUTPUT_FILE" -o "$OUTPUT_FILE"
57
+ #fi
58
+
59
+ # Converting wasm into base64 so it can be bundled
60
+ echo "Converting wasm binary into base64 module for bundling with Webpack"
61
+ WASM_BUILD_BASE_64=$(base64 -i "$OUTPUT_FILE")
62
+ echo 'module.exports = "'${WASM_BUILD_BASE_64}'"' > "$OUTPUT_FILE_JS"
63
+
64
+ mkdir "$PWD/dist/"
65
+
66
+ echo "Copying wasm typings"
67
+ mkdir "$PWD/dist/wasm"
68
+ cp "$WASM_TYPINGS_PATH" "$DIST_TYPINGS"
69
+ echo "Typings copied"
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env bash
2
+
3
+ rm -rf "$PWD"/dist
4
+ rm -rf "$PWD"/wasm
@@ -0,0 +1,71 @@
1
+ use dpp::dashcore::anyhow::anyhow;
2
+ use dpp::{BlsModule, PublicKeyValidationError};
3
+ use wasm_bindgen::prelude::*;
4
+
5
+ #[wasm_bindgen]
6
+ extern "C" {
7
+ pub type JsBlsAdapter;
8
+
9
+ #[wasm_bindgen(method)]
10
+ pub fn validatePublicKey(this: &JsBlsAdapter, pk: &[u8]) -> bool;
11
+
12
+ #[wasm_bindgen(method, catch)]
13
+ pub fn verifySignature(
14
+ this: &JsBlsAdapter,
15
+ signature: &[u8],
16
+ data: &[u8],
17
+ public_key: &[u8],
18
+ ) -> Result<bool, JsValue>;
19
+
20
+ #[wasm_bindgen(method, catch)]
21
+ pub fn privateKeyToPublicKey(
22
+ this: &JsBlsAdapter,
23
+ private_key: &[u8],
24
+ ) -> Result<js_sys::Uint8Array, JsValue>;
25
+
26
+ #[wasm_bindgen(method, catch)]
27
+ pub fn sign(
28
+ this: &JsBlsAdapter,
29
+ data: &[u8],
30
+ private_key: &[u8],
31
+ ) -> Result<js_sys::Uint8Array, JsValue>;
32
+ }
33
+
34
+ pub struct BlsAdapter(pub JsBlsAdapter);
35
+
36
+ impl BlsModule for BlsAdapter {
37
+ fn validate_public_key(&self, pk: &[u8]) -> Result<(), PublicKeyValidationError> {
38
+ let is_valid = self.0.validatePublicKey(pk);
39
+
40
+ if !is_valid {
41
+ return Err(PublicKeyValidationError::new("Invalid public key"));
42
+ }
43
+
44
+ Ok(())
45
+ }
46
+
47
+ fn verify_signature(
48
+ &self,
49
+ signature: &[u8],
50
+ data: &[u8],
51
+ public_key: &[u8],
52
+ ) -> Result<bool, dpp::ProtocolError> {
53
+ self.0
54
+ .verifySignature(signature, data, public_key)
55
+ .map_err(|_v| anyhow!("Can't verify signature").into())
56
+ }
57
+
58
+ fn private_key_to_public_key(&self, private_key: &[u8]) -> Result<Vec<u8>, dpp::ProtocolError> {
59
+ self.0
60
+ .privateKeyToPublicKey(private_key)
61
+ .map(|arr| arr.to_vec())
62
+ .map_err(|_v| anyhow!("Can't convert private key to public key").into())
63
+ }
64
+
65
+ fn sign(&self, data: &[u8], private_key: &[u8]) -> Result<Vec<u8>, dpp::ProtocolError> {
66
+ self.0
67
+ .sign(data, private_key)
68
+ .map(|arr| arr.to_vec())
69
+ .map_err(|_v| anyhow!("Can't sign").into())
70
+ }
71
+ }
package/src/buffer.rs ADDED
@@ -0,0 +1,15 @@
1
+ use wasm_bindgen::prelude::*;
2
+
3
+ #[wasm_bindgen]
4
+ extern "C" {
5
+ pub type Buffer;
6
+
7
+ #[wasm_bindgen(constructor)]
8
+ pub fn new() -> Buffer;
9
+
10
+ #[wasm_bindgen(constructor, js_name = "from")]
11
+ pub fn from_bytes(js_sys: &[u8]) -> Buffer;
12
+
13
+ #[wasm_bindgen(constructor, js_name = "from")]
14
+ pub fn from_string(js_sys: String) -> Buffer;
15
+ }
@@ -0,0 +1,26 @@
1
+ use std::sync::Arc;
2
+
3
+ use wasm_bindgen::prelude::*;
4
+
5
+ use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
6
+ use dpp::identity::validation::PublicKeysValidator;
7
+ use dpp::identity::IdentityFacade;
8
+ use dpp::version::ProtocolVersionValidator;
9
+
10
+ #[wasm_bindgen(js_name=DashPlatformProtocol)]
11
+ pub struct DashPlatformProtocol(IdentityFacade<BlsAdapter>);
12
+
13
+ #[wasm_bindgen(js_class=DashPlatformProtocol)]
14
+ impl DashPlatformProtocol {
15
+ #[wasm_bindgen(constructor)]
16
+ pub fn new(bls_adapter: JsBlsAdapter) -> DashPlatformProtocol {
17
+ let bls = BlsAdapter(bls_adapter);
18
+ // TODO: remove default validator and make a real one instead
19
+ let validator = ProtocolVersionValidator::default();
20
+ let public_keys_validator = PublicKeysValidator::new(bls).unwrap();
21
+ let identity_facade =
22
+ IdentityFacade::new(Arc::new(validator), Arc::new(public_keys_validator)).unwrap();
23
+
24
+ DashPlatformProtocol(identity_facade)
25
+ }
26
+ }