@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.
- package/.eslintignore +1 -0
- package/Cargo.toml +23 -0
- package/README.md +21 -6
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.LICENSE.txt +8 -0
- package/dist/lib/patchIdentifier.d.ts +2 -0
- package/dist/wasm/wasm_dpp.d.ts +2756 -0
- package/index.ts +30 -0
- package/karma.conf.js +6 -3
- package/lib/patchIdentifier.ts +37 -0
- package/lib/test/.eslintrc +9 -0
- package/lib/test/bootstrap.js +27 -0
- package/lib/test/expect/expectError.js +34 -0
- package/lib/test/karma/loader.js +6 -0
- package/lib/test/utils/generateRandomIdentifierAsync.js +14 -0
- package/package.json +31 -55
- package/scripts/build.sh +69 -0
- package/scripts/clean.sh +4 -0
- package/src/bls_adapter.rs +71 -0
- package/src/buffer.rs +15 -0
- package/src/dash_platform_protocol.rs +26 -0
- package/src/data_contract/data_contract.rs +290 -0
- package/src/data_contract/errors/data_contract_already_exists.rs +1 -0
- package/src/data_contract/errors/invalid_data_contract.rs +29 -0
- package/src/data_contract/errors/invalid_document_type.rs +33 -0
- package/src/data_contract/errors/mod.rs +37 -0
- package/src/data_contract/index.rs +61 -0
- package/src/data_contract/mod.rs +10 -0
- package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +37 -0
- package/src/data_contract/state_transition/mod.rs +3 -0
- package/src/data_contract_factory/data_contract_factory.rs +155 -0
- package/src/data_contract_factory/mod.rs +1 -0
- package/src/document/errors/document_already_exists_error.rs +28 -0
- package/src/document/errors/document_not_provided_error.rs +28 -0
- package/src/document/errors/invalid_action_name_error.rs +24 -0
- package/src/document/errors/invalid_document_action_error.rs +28 -0
- package/src/document/errors/invalid_document_error.rs +32 -0
- package/src/document/errors/invalid_initial_revision_error.rs +25 -0
- package/src/document/errors/mismatch_owners_ids_error.rs +27 -0
- package/src/document/errors/mod.rs +55 -0
- package/src/document/errors/no_documents_supplied_error.rs +22 -0
- package/src/document/mod.rs +158 -0
- package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +22 -0
- package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +22 -0
- package/src/document/state_transition/document_batch_transition/document_transition/document_update_transition.rs +22 -0
- package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +24 -0
- package/src/document/state_transition/document_batch_transition/mod.rs +1 -0
- package/src/document/state_transition/mod.rs +1 -0
- package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +36 -0
- package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +36 -0
- package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +36 -0
- package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +26 -0
- package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +36 -0
- package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +36 -0
- package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +66 -0
- package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +43 -0
- package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +39 -0
- package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +39 -0
- package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +59 -0
- package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +67 -0
- package/src/errors/consensus/basic/data_contract/index_error/mod.rs +15 -0
- package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +51 -0
- package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +51 -0
- package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +36 -0
- package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +37 -0
- package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +36 -0
- package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +26 -0
- package/src/errors/consensus/basic/data_contract/mod.rs +25 -0
- package/src/errors/consensus/basic/decode/mod.rs +5 -0
- package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +29 -0
- package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +29 -0
- package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +32 -0
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +36 -0
- package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +40 -0
- package/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +26 -0
- package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +38 -0
- package/src/errors/consensus/basic/document/invalid_document_type_error.rs +39 -0
- package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +20 -0
- package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +20 -0
- package/src/errors/consensus/basic/document/missing_document_type_error.rs +20 -0
- package/src/errors/consensus/basic/document/mod.rs +19 -0
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +32 -0
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +32 -0
- package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +38 -0
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +31 -0
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +37 -0
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +29 -0
- package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +33 -0
- package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +34 -0
- package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +34 -0
- package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +29 -0
- package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +60 -0
- package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +29 -0
- package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +29 -0
- package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +32 -0
- package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +29 -0
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +39 -0
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +42 -0
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +30 -0
- package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +22 -0
- package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +24 -0
- package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +22 -0
- package/src/errors/consensus/basic/identity/missing_public_key_error.rs +29 -0
- package/src/errors/consensus/basic/identity/mod.rs +45 -0
- package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +32 -0
- package/src/errors/consensus/basic/invalid_identifier_error.rs +36 -0
- package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +41 -0
- package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +20 -0
- package/src/errors/consensus/basic/json_schema_compilation_error.rs +26 -0
- package/src/errors/consensus/basic/json_schema_error.rs +274 -0
- package/src/errors/consensus/basic/mod.rs +30 -0
- package/src/errors/consensus/basic/public_key_is_disabled_error.rs +30 -0
- package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +41 -0
- package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +29 -0
- package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +20 -0
- package/src/errors/consensus/basic/state_transition/mod.rs +7 -0
- package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +36 -0
- package/src/errors/consensus/basic/test_consensus_error.rs +21 -0
- package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +32 -0
- package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +37 -0
- package/src/errors/consensus/fee/balance_is_not_enough_error.rs +32 -0
- package/src/errors/consensus/fee/mod.rs +3 -0
- package/src/errors/consensus/mod.rs +4 -0
- package/src/errors/consensus/signature/identity_not_found_error.rs +29 -0
- package/src/errors/consensus/signature/mod.rs +3 -0
- package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +31 -0
- package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +74 -0
- package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +82 -0
- package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +66 -0
- package/src/errors/consensus/state/data_contract/data_trigger/mod.rs +7 -0
- package/src/errors/consensus/state/data_contract/mod.rs +4 -0
- package/src/errors/consensus/state/document/document_already_present_error.rs +28 -0
- package/src/errors/consensus/state/document/document_not_found_error.rs +28 -0
- package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +50 -0
- package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +72 -0
- package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +28 -0
- package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +42 -0
- package/src/errors/consensus/state/document/invalid_document_revision_error.rs +38 -0
- package/src/errors/consensus/state/document/mod.rs +15 -0
- package/src/errors/consensus/state/identity/identity_already_exists_error.rs +28 -0
- package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +49 -0
- package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +31 -0
- package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +28 -0
- package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +28 -0
- package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +38 -0
- package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +26 -0
- package/src/errors/consensus/state/identity/mod.rs +15 -0
- package/src/errors/consensus/state/mod.rs +3 -0
- package/src/errors/consensus_error.rs +612 -0
- package/src/errors/from.rs +24 -0
- package/src/errors/js_conversion.rs +63 -0
- package/src/errors/mod.rs +10 -0
- package/src/errors/public_key_validation_error.rs +23 -0
- package/src/identifier.rs +103 -0
- package/src/identity.rs +253 -0
- package/src/identity_facade.rs +55 -0
- package/src/identity_public_key/key_type.rs +22 -0
- package/src/identity_public_key/mod.rs +192 -0
- package/src/identity_public_key/public_keys_validator.rs +44 -0
- package/src/identity_public_key/purpose.rs +24 -0
- package/src/identity_public_key/security_level.rs +21 -0
- package/src/lib.rs +28 -0
- package/src/metadata.rs +54 -0
- package/src/utils.rs +59 -0
- package/src/validation_result.rs +41 -0
- package/test/integration/DashPlatformProtocol.spec.js +4 -4
- package/test/integration/ajv/keywords/byteArray/addByteArrayKeyword.spec.js +2 -2
- package/test/integration/dataContract/DataContractFacade.spec.js +6 -6
- package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +10 -10
- package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +14 -14
- package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +22 -22
- package/test/integration/document/Document.spec.js +10 -5
- package/test/integration/document/DocumentFacade.spec.js +11 -11
- package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +5 -5
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +25 -25
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +15 -15
- package/test/integration/document/validation/validateDocumentFactory.spec.js +12 -12
- package/test/integration/error/consensus/createConsensusError.spec.js +3 -3
- package/test/integration/identity/IdentityFacade.spec.js +13 -13
- package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +12 -12
- package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +11 -11
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +8 -8
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +24 -39
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +7 -7
- package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +29 -35
- package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +8 -8
- package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +11 -11
- package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +10 -10
- package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +7 -7
- package/test/integration/identity/validation/validateIdentityFactory.spec.js +8 -8
- package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +50 -24
- package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +14 -14
- package/test/integration/stateTransition/StateTransitionFacade.spec.js +15 -19
- package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +8 -11
- package/test/integration/util/generateEntropy.spec.js +1 -1
- package/test/integration/util/serializer.spec.js +2 -2
- package/test/unit/DashPlatformProtocol.spec.js +4 -4
- package/test/unit/Identifier.spec.js +2 -2
- package/test/unit/Metadata.spec.js +1 -1
- package/test/unit/dataContract/DataContract.spec.js +100 -159
- package/test/unit/dataContract/DataContractFactory.spec.js +55 -111
- package/test/unit/dataContract/createDataContract.spec.js +20 -10
- package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +2 -2
- package/test/unit/dataContract/generateDataContractId.spec.js +23 -6
- package/test/unit/dataContract/getBinaryPropertiesFromSchema.spec.js +1 -1
- package/test/unit/dataContract/getPropertyDefinitionByPath.spec.js +1 -1
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +8 -8
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +6 -6
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +8 -8
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +8 -8
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +6 -6
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +6 -6
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +9 -9
- package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +6 -6
- package/test/unit/dataContract/validation/validateDataContractPatternsFactory.spec.js +3 -3
- package/test/unit/dataTrigger/DataTrigger.spec.js +8 -8
- package/test/unit/dataTrigger/DataTriggerExecutionContext.spec.js +4 -4
- package/test/unit/dataTrigger/dashpayDataTriggers/createContactRequestDataTrigger.spec.js +13 -15
- package/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js +12 -12
- package/test/unit/dataTrigger/featureFlagDataTriggers/createFeatureFlagDataTrigger.spec.js +11 -13
- package/test/unit/dataTrigger/getDataTriggersFactory.spec.js +7 -7
- package/test/unit/dataTrigger/rejectDataTrigger.spec.js +8 -8
- package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +9 -9
- package/test/unit/decodeProtocolEntityFactory.spec.js +4 -4
- package/test/unit/document/Document.spec.js +9 -9
- package/test/unit/document/DocumentFactory.spec.js +19 -19
- package/test/unit/document/errors/InvalidDocumentError.spec.js +2 -2
- package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +8 -8
- package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +8 -8
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +16 -17
- package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +1 -1
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +2 -2
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +6 -6
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +7 -7
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +6 -6
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +27 -34
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +9 -9
- package/test/unit/errors/consensus/codes.spec.js +7 -7
- package/test/unit/identity/Identity.spec.js +98 -69
- package/test/unit/identity/IdentityFactory.spec.js +15 -15
- package/test/unit/identity/IdentityPublicKey.spec.js +53 -66
- package/test/unit/identity/creditsConverter.spec.js +1 -1
- package/test/unit/identity/errors/InvalidIdentityError.spec.js +2 -2
- package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +7 -7
- package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +8 -8
- package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +6 -6
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +4 -4
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +7 -7
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +2 -2
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +6 -6
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +6 -6
- package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +5 -5
- package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +3 -3
- package/test/unit/identity/validation/validateRequiredPurposeAndSecurityLevelFactory.spec.js +5 -5
- package/test/unit/stateTransition/StateTransitionFactory.spec.js +8 -8
- package/test/unit/stateTransition/createStateTransitionFactory.spec.js +8 -8
- package/test/unit/stateTransition/errors/InvalidStateTransitionError.spec.js +3 -3
- package/test/unit/stateTransition/validation/validateStateTransitionBasicFactory.spec.js +12 -12
- package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +15 -15
- package/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js +22 -22
- package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +6 -6
- package/test/unit/stateTransition/validation/validateStateTransitionStateFactory.spec.js +9 -9
- package/test/unit/version/validateProtocolVersionFactory.spec.js +7 -7
- package/tsconfig.json +18 -0
- package/wasm/wasm_dpp.d.ts +2756 -0
- package/wasm/wasm_dpp.js +7750 -0
- package/wasm/wasm_dpp_bg.js +1 -0
- package/wasm/wasm_dpp_bg.wasm +0 -0
- package/wasm/wasm_dpp_bg.wasm.d.ts +518 -0
- package/webpack.config.js +22 -19
- 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
|
|
28
|
-
resolve: webpackConfig
|
|
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: [
|
|
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,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,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.
|
|
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
|
-
"
|
|
7
|
-
"test": "yarn run test:
|
|
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:
|
|
12
|
-
"
|
|
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
|
-
"
|
|
23
|
+
"author": "Dash Core Team",
|
|
20
24
|
"contributors": [
|
|
21
25
|
{
|
|
22
26
|
"name": "Anton Suprunchuk",
|
|
23
|
-
"email": "anton.suprunchuk@
|
|
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
|
-
"@
|
|
45
|
-
"@
|
|
46
|
-
"
|
|
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
|
-
"
|
|
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
|
}
|
package/scripts/build.sh
ADDED
|
@@ -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"
|
package/scripts/clean.sh
ADDED
|
@@ -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
|
+
}
|