@dashevo/wasm-dpp 0.25.0-dev.12 → 0.25.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.
- package/Cargo.toml +6 -5
- package/README.md +11 -6
- package/dist/wasm/wasm_dpp.d.ts +715 -653
- package/dist/wasm/wasm_dpp.js +1219 -1195
- package/dist/wasm/wasm_dpp_bg.js +1 -1
- package/lib/test/fixtures/getIdentityCreateTransitionFixture.js +2 -2
- package/lib/test/fixtures/js/generateRandomIdentifier.js +1 -0
- package/lib/test/fixtures/js/getChainAssetLockProofFixture.js +1 -0
- package/lib/test/fixtures/js/getDataContractFixture.js +1 -0
- package/lib/test/fixtures/js/getDocumentTransitionsFixture.js +1 -0
- package/lib/test/fixtures/js/getDocumentsFixture.js +1 -0
- package/lib/test/fixtures/js/getInstantAssetLockProofFixture.js +1 -0
- package/lib/test/mocks/createStateRepositoryMock.js +1 -0
- package/lib/wasm/wasm_dpp.d.ts +715 -653
- package/package.json +3 -3
- package/scripts/build-wasm.sh +32 -28
- package/src/data_contract/data_contract.rs +99 -54
- package/src/data_contract/data_contract_facade.rs +5 -2
- package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +0 -5
- package/src/data_contract_factory/data_contract_factory.rs +5 -1
- package/src/document/document_facade.rs +12 -0
- package/src/document/factory.rs +17 -0
- package/src/document/mod.rs +4 -4
- package/src/errors/consensus/consensus_error.rs +5 -0
- package/src/errors/consensus/state/document/document_timestamps_are_equal_error.rs +42 -0
- package/src/errors/consensus/state/document/mod.rs +2 -0
- package/src/errors/value_error.rs +5 -0
- package/src/identity/mod.rs +8 -1
- package/src/identity/state_transition/mod.rs +1 -0
- package/src/identity/state_transition/transition_types.rs +30 -0
- package/src/lib.rs +1 -2
- package/src/protocol_version.rs +7 -0
- package/src/state_transition/errors/invalid_state_transition_error.rs +12 -1
- package/src/state_transition/state_transition_facade.rs +6 -1
- package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +5 -5
- package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +5 -5
- package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +2 -2
- package/test/integration/document/DocumentFacade.spec.js +4 -4
- package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +5 -6
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +14 -14
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +1 -1
- package/test/integration/document/validation/validateDocumentFactory.spec.js +2 -2
- package/test/integration/identity/IdentityFacade.spec.js +8 -8
- package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +4 -6
- package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +3 -6
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +20 -23
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +1 -1
- package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +3 -3
- package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +5 -8
- package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +3 -4
- package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +2 -3
- package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +2 -6
- package/test/integration/identity/validation/validateIdentityFactory.spec.js +6 -5
- package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +4 -24
- package/test/integration/stateTransition/StateTransitionFacade.spec.js +11 -15
- package/test/unit/DashPlatformProtocol.spec.js +6 -7
- package/test/unit/dataContract/DataContract.spec.js +9 -9
- package/test/unit/dataContract/DataContractFactory.spec.js +3 -3
- package/test/unit/dataContract/createDataContract.spec.js +5 -5
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +14 -14
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +6 -8
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +3 -3
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +14 -12
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +6 -6
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +4 -4
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +5 -5
- package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +6 -6
- package/test/unit/document/Document.spec.js +5 -4
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +10 -11
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +8 -8
- package/test/unit/identity/Identity.spec.js +14 -6
- package/test/unit/identity/IdentityFactory.spec.js +11 -11
- package/test/unit/identity/IdentityPublicKey.spec.js +2 -2
- package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +13 -14
- package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +7 -13
- package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +3 -7
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +13 -14
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +5 -9
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +4 -8
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +11 -16
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +1 -1
- package/test/unit/stateTransition/StateTransitionFactory.spec.js +6 -7
- package/test/unit/stateTransition/createStateTransitionFactory.spec.js +41 -19
- package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +6 -12
- package/src/decode_protocol_entity.rs +0 -25
- package/test/integration/ajv/keywords/byteArray/addByteArrayKeyword.spec.js +0 -148
- package/test/integration/util/generateEntropy.spec.js +0 -17
- package/test/integration/util/serializer.spec.js +0 -24
- package/test/unit/decodeProtocolEntityFactory.spec.js +0 -72
- package/test/unit/identity/errors/InvalidIdentityError.spec.js +0 -46
- package/test/unit/stateTransition/errors/InvalidStateTransitionError.spec.js +0 -51
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dashevo/wasm-dpp",
|
|
3
|
-
"version": "0.25.0-dev.
|
|
3
|
+
"version": "0.25.0-dev.14",
|
|
4
4
|
"description": "The JavaScript implementation of the Dash Platform Protocol",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"@babel/core": "^7.15.5",
|
|
45
45
|
"@babel/preset-env": "^7.15.4",
|
|
46
46
|
"@dashevo/dashcore-lib": "~0.20.6",
|
|
47
|
-
"@dashevo/dpns-contract": "0.25.0-dev.
|
|
48
|
-
"@dashevo/dpp": "0.25.0-dev.
|
|
47
|
+
"@dashevo/dpns-contract": "0.25.0-dev.14",
|
|
48
|
+
"@dashevo/dpp": "0.25.0-dev.14",
|
|
49
49
|
"@dashevo/wasm-re2": "~1.0.2",
|
|
50
50
|
"@types/bs58": "^4.0.1",
|
|
51
51
|
"@types/node": "^14.6.0",
|
package/scripts/build-wasm.sh
CHANGED
|
@@ -1,46 +1,50 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
+
# shellcheck disable=SC2312
|
|
3
|
+
set -ex
|
|
2
4
|
|
|
3
5
|
TARGET=wasm32-unknown-unknown
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
elif [ "$CARGO_BUILD_PROFILE" != "debug" ]; then
|
|
13
|
-
PROFILE_ARG="--profile $CARGO_BUILD_PROFILE"
|
|
14
|
-
PROFILE="$CARGO_BUILD_PROFILE"
|
|
15
|
-
fi
|
|
7
|
+
# "--profile release" is equivalent of "--release", see
|
|
8
|
+
# https://github.com/rust-lang/cargo/blob/13413c64ff88dd6c2824e9eb9374fc5f10895d28/src/cargo/util/command_prelude.rs#L426
|
|
9
|
+
CARGO_BUILD_PROFILE="${CARGO_BUILD_PROFILE:-dev}"
|
|
10
|
+
PROFILE_ARG="--profile ${CARGO_BUILD_PROFILE}"
|
|
11
|
+
PROFILE="${CARGO_BUILD_PROFILE}"
|
|
12
|
+
if [[ "${CARGO_BUILD_PROFILE}" == "dev" ]]; then
|
|
13
|
+
PROFILE=debug
|
|
16
14
|
fi
|
|
17
15
|
|
|
18
|
-
OUTPUT_DIR="$PWD/wasm"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
OUTPUT_DIR="${PWD}/wasm"
|
|
17
|
+
WORKSPACE_ROOT="$(dirname "$0")/../../.."
|
|
18
|
+
# shellcheck disable=SC2034
|
|
19
|
+
OUTPUT_FILE="${OUTPUT_DIR}/wasm_dpp_bg.wasm"
|
|
20
|
+
BUILD_COMMAND="cargo build --config net.git-fetch-with-cli=true --target=${TARGET} ${PROFILE_ARG}"
|
|
21
|
+
BINDGEN_COMMAND="wasm-bindgen --out-dir=${OUTPUT_DIR} --target=web --omit-default-module-path ../../target/${TARGET}/${PROFILE}/wasm_dpp.wasm"
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
mkdir -p "$OUTPUT_DIR"
|
|
23
|
+
if ! [[ -d ${OUTPUT_DIR} ]]; then
|
|
24
|
+
mkdir -p "${OUTPUT_DIR}"
|
|
26
25
|
fi
|
|
27
26
|
|
|
28
|
-
if ! [ -x "$(command -v
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
if ! [[ -x "$(command -v cargo-lock)" ]]; then
|
|
28
|
+
echo 'cargo-lock is not installed. Installing'
|
|
29
|
+
cargo install cargo-lock --features=cli --profile "${CARGO_BUILD_PROFILE}"
|
|
31
30
|
fi
|
|
32
31
|
|
|
32
|
+
WASM_BINDGEN_VERSION=$(cargo-lock list --file "${WORKSPACE_ROOT}/Cargo.lock" --package wasm-bindgen | grep -Eo '[0-9.]+')
|
|
33
|
+
if ! [[ "$(wasm-bindgen --version)" =~ ${WASM_BINDGEN_VERSION} ]]; then
|
|
34
|
+
echo "Wasm-bindgen CLI ${WASM_BINDGEN_VERSION} is not installed. Installing"
|
|
35
|
+
cargo install --config net.git-fetch-with-cli=true --profile "${CARGO_BUILD_PROFILE}" -f "wasm-bindgen-cli@${WASM_BINDGEN_VERSION}"
|
|
36
|
+
fi
|
|
33
37
|
|
|
34
38
|
# On a mac, bundled clang won't work - you need to install LLVM manually through brew,
|
|
35
39
|
# and then set the correct env for the build to work
|
|
36
|
-
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
if [[ "${OSTYPE}" == "darwin"* ]]; then
|
|
41
|
+
AR_PATH=$(command -v llvm-ar)
|
|
42
|
+
CLANG_PATH=$(command -v clang)
|
|
43
|
+
AR=${AR_PATH} CC=${CLANG_PATH} ${BUILD_COMMAND}
|
|
44
|
+
AR=${AR_PATH} CC=${CLANG_PATH} ${BINDGEN_COMMAND}
|
|
41
45
|
else
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
${BUILD_COMMAND}
|
|
47
|
+
${BINDGEN_COMMAND}
|
|
44
48
|
fi
|
|
45
49
|
|
|
46
50
|
# EMCC_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0 --no-entry" cargo build --target=wasm32-unknown-emscripten --release
|
|
@@ -1,45 +1,77 @@
|
|
|
1
1
|
#![allow(clippy::from_over_into)]
|
|
2
2
|
|
|
3
3
|
use std::collections::BTreeMap;
|
|
4
|
-
use std::convert::
|
|
4
|
+
use std::convert::TryFrom;
|
|
5
5
|
|
|
6
6
|
pub use serde::{Deserialize, Serialize};
|
|
7
7
|
use serde_json::Value as JsonValue;
|
|
8
8
|
use wasm_bindgen::prelude::*;
|
|
9
9
|
|
|
10
|
-
use dpp::data_contract::{DataContract, SCHEMA_URI};
|
|
10
|
+
use dpp::data_contract::{CreatedDataContract, DataContract, SCHEMA_URI};
|
|
11
11
|
use dpp::platform_value::string_encoding::Encoding;
|
|
12
12
|
use dpp::platform_value::{Bytes32, Value};
|
|
13
13
|
|
|
14
14
|
use dpp::serialization_traits::PlatformSerializable;
|
|
15
|
-
use dpp::{platform_value, Convertible};
|
|
15
|
+
use dpp::{platform_value, Convertible, ProtocolError};
|
|
16
16
|
|
|
17
|
-
use crate::errors::RustConversionError;
|
|
18
17
|
use crate::identifier::identifier_from_js_value;
|
|
19
18
|
use crate::metadata::MetadataWasm;
|
|
20
|
-
use crate::utils::{IntoWasm, WithJsError};
|
|
19
|
+
use crate::utils::{Inner, IntoWasm, WithJsError};
|
|
21
20
|
use crate::{bail_js, with_js_error};
|
|
22
21
|
use crate::{buffer::Buffer, identifier::IdentifierWrapper};
|
|
23
22
|
|
|
24
23
|
#[wasm_bindgen(js_name=DataContract)]
|
|
25
24
|
#[derive(Debug, Clone)]
|
|
26
|
-
pub struct DataContractWasm
|
|
25
|
+
pub struct DataContractWasm {
|
|
26
|
+
inner: DataContract,
|
|
27
|
+
entropy_used: Option<Vec<u8>>,
|
|
28
|
+
}
|
|
27
29
|
|
|
30
|
+
/// CreatedDataContract contains entropy and is used to create
|
|
31
|
+
/// DataContractCreateTransition
|
|
32
|
+
impl std::convert::From<CreatedDataContract> for DataContractWasm {
|
|
33
|
+
fn from(v: CreatedDataContract) -> Self {
|
|
34
|
+
DataContractWasm {
|
|
35
|
+
inner: v.data_contract,
|
|
36
|
+
entropy_used: Some(v.entropy_used.to_vec()),
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/// Regular DataContract does not contain entropy and is used
|
|
42
|
+
/// in DataContractUpdateTransition
|
|
28
43
|
impl std::convert::From<DataContract> for DataContractWasm {
|
|
29
44
|
fn from(v: DataContract) -> Self {
|
|
30
|
-
DataContractWasm
|
|
45
|
+
DataContractWasm {
|
|
46
|
+
inner: v,
|
|
47
|
+
entropy_used: None,
|
|
48
|
+
}
|
|
31
49
|
}
|
|
32
50
|
}
|
|
33
51
|
|
|
34
52
|
impl std::convert::From<&DataContractWasm> for DataContract {
|
|
35
53
|
fn from(v: &DataContractWasm) -> Self {
|
|
36
|
-
v.
|
|
54
|
+
v.inner.clone()
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
impl std::convert::TryFrom<&DataContractWasm> for CreatedDataContract {
|
|
59
|
+
type Error = ProtocolError;
|
|
60
|
+
fn try_from(v: &DataContractWasm) -> Result<Self, Self::Error> {
|
|
61
|
+
Ok(Self {
|
|
62
|
+
data_contract: v.to_owned().into(),
|
|
63
|
+
entropy_used: if let Some(entropy_used) = &v.entropy_used {
|
|
64
|
+
Bytes32::from_vec(entropy_used.to_owned())?
|
|
65
|
+
} else {
|
|
66
|
+
Bytes32::default()
|
|
67
|
+
},
|
|
68
|
+
})
|
|
37
69
|
}
|
|
38
70
|
}
|
|
39
71
|
|
|
40
72
|
impl std::convert::Into<DataContract> for DataContractWasm {
|
|
41
73
|
fn into(self) -> DataContract {
|
|
42
|
-
self.
|
|
74
|
+
self.inner
|
|
43
75
|
}
|
|
44
76
|
}
|
|
45
77
|
|
|
@@ -96,54 +128,54 @@ impl DataContractWasm {
|
|
|
96
128
|
|
|
97
129
|
#[wasm_bindgen(js_name=getProtocolVersion)]
|
|
98
130
|
pub fn get_protocol_version(&self) -> u32 {
|
|
99
|
-
self.
|
|
131
|
+
self.inner.protocol_version
|
|
100
132
|
}
|
|
101
133
|
|
|
102
134
|
#[wasm_bindgen(js_name=getId)]
|
|
103
135
|
pub fn get_id(&self) -> IdentifierWrapper {
|
|
104
|
-
self.
|
|
136
|
+
self.inner.id.into()
|
|
105
137
|
}
|
|
106
138
|
|
|
107
139
|
#[wasm_bindgen(js_name=setId)]
|
|
108
140
|
pub fn set_id(&mut self, id: &JsValue) -> Result<(), JsValue> {
|
|
109
141
|
let id = identifier_from_js_value(id)?;
|
|
110
|
-
self.
|
|
142
|
+
self.inner.id = id;
|
|
111
143
|
Ok(())
|
|
112
144
|
}
|
|
113
145
|
|
|
114
146
|
#[wasm_bindgen(js_name=getOwnerId)]
|
|
115
147
|
pub fn get_owner_id(&self) -> IdentifierWrapper {
|
|
116
|
-
self.
|
|
148
|
+
self.inner.owner_id.into()
|
|
117
149
|
}
|
|
118
150
|
|
|
119
151
|
#[wasm_bindgen(js_name=getVersion)]
|
|
120
152
|
pub fn get_version(&self) -> u32 {
|
|
121
|
-
self.
|
|
153
|
+
self.inner.version
|
|
122
154
|
}
|
|
123
155
|
|
|
124
156
|
#[wasm_bindgen(js_name=setVersion)]
|
|
125
157
|
pub fn set_version(&mut self, v: u32) {
|
|
126
|
-
self.
|
|
158
|
+
self.inner.version = v;
|
|
127
159
|
}
|
|
128
160
|
|
|
129
161
|
#[wasm_bindgen(js_name=incrementVersion)]
|
|
130
162
|
pub fn increment_version(&mut self) {
|
|
131
|
-
self.
|
|
163
|
+
self.inner.increment_version()
|
|
132
164
|
}
|
|
133
165
|
|
|
134
166
|
#[wasm_bindgen(js_name=getJsonSchemaId)]
|
|
135
167
|
pub fn get_json_schema_id(&self) -> String {
|
|
136
|
-
self.
|
|
168
|
+
self.inner.id.to_string(Encoding::Base58)
|
|
137
169
|
}
|
|
138
170
|
|
|
139
171
|
#[wasm_bindgen(js_name=setJsonMetaSchema)]
|
|
140
172
|
pub fn set_json_meta_schema(&mut self, schema: String) {
|
|
141
|
-
self.
|
|
173
|
+
self.inner.schema = schema;
|
|
142
174
|
}
|
|
143
175
|
|
|
144
176
|
#[wasm_bindgen(js_name=getJsonMetaSchema)]
|
|
145
177
|
pub fn get_json_meta_schema(&self) -> String {
|
|
146
|
-
self.
|
|
178
|
+
self.inner.schema.clone()
|
|
147
179
|
}
|
|
148
180
|
#[wasm_bindgen(js_name=setDocuments)]
|
|
149
181
|
pub fn set_documents(&mut self, documents: JsValue) -> Result<(), JsValue> {
|
|
@@ -157,7 +189,7 @@ impl DataContractWasm {
|
|
|
157
189
|
}
|
|
158
190
|
docs.insert(k, v);
|
|
159
191
|
}
|
|
160
|
-
self.
|
|
192
|
+
self.inner.documents = docs;
|
|
161
193
|
} else {
|
|
162
194
|
bail_js!("the parameter 'documents' is not an JS object")
|
|
163
195
|
}
|
|
@@ -167,12 +199,12 @@ impl DataContractWasm {
|
|
|
167
199
|
#[wasm_bindgen(js_name=getDocuments)]
|
|
168
200
|
pub fn get_documents(&self) -> Result<JsValue, JsValue> {
|
|
169
201
|
let serializer = serde_wasm_bindgen::Serializer::json_compatible();
|
|
170
|
-
with_js_error!(self.
|
|
202
|
+
with_js_error!(self.inner.documents.serialize(&serializer))
|
|
171
203
|
}
|
|
172
204
|
|
|
173
205
|
#[wasm_bindgen(js_name=isDocumentDefined)]
|
|
174
206
|
pub fn is_document_defined(&self, doc_type: String) -> bool {
|
|
175
|
-
self.
|
|
207
|
+
self.inner.is_document_defined(&doc_type)
|
|
176
208
|
}
|
|
177
209
|
|
|
178
210
|
#[wasm_bindgen(js_name=setDocumentSchema)]
|
|
@@ -182,7 +214,7 @@ impl DataContractWasm {
|
|
|
182
214
|
schema: JsValue,
|
|
183
215
|
) -> Result<(), JsValue> {
|
|
184
216
|
let json_schema: JsonValue = with_js_error!(serde_wasm_bindgen::from_value(schema))?;
|
|
185
|
-
self.
|
|
217
|
+
self.inner
|
|
186
218
|
.set_document_schema(doc_type, json_schema)
|
|
187
219
|
.with_js_error()?;
|
|
188
220
|
Ok(())
|
|
@@ -190,7 +222,7 @@ impl DataContractWasm {
|
|
|
190
222
|
|
|
191
223
|
#[wasm_bindgen(js_name=getDocumentSchema)]
|
|
192
224
|
pub fn get_document_schema(&mut self, doc_type: &str) -> Result<JsValue, JsValue> {
|
|
193
|
-
let doc_schema = self.
|
|
225
|
+
let doc_schema = self.inner.get_document_schema(doc_type).with_js_error()?;
|
|
194
226
|
let serializer = serde_wasm_bindgen::Serializer::json_compatible();
|
|
195
227
|
with_js_error!(doc_schema.serialize(&serializer))
|
|
196
228
|
}
|
|
@@ -198,7 +230,10 @@ impl DataContractWasm {
|
|
|
198
230
|
#[wasm_bindgen(js_name=getDocumentSchemaRef)]
|
|
199
231
|
pub fn get_document_schema_ref(&self, doc_type: &str) -> Result<JsValue, JsValue> {
|
|
200
232
|
with_js_error!(serde_wasm_bindgen::to_value(
|
|
201
|
-
&self
|
|
233
|
+
&self
|
|
234
|
+
.inner
|
|
235
|
+
.get_document_schema_ref(doc_type)
|
|
236
|
+
.with_js_error()?
|
|
202
237
|
))
|
|
203
238
|
}
|
|
204
239
|
|
|
@@ -217,7 +252,7 @@ impl DataContractWasm {
|
|
|
217
252
|
if definitions.is_empty() {
|
|
218
253
|
bail_js!("`definitions` cannot be empty");
|
|
219
254
|
}
|
|
220
|
-
self.
|
|
255
|
+
self.inner.defs = Some(definitions);
|
|
221
256
|
} else {
|
|
222
257
|
bail_js!("the parameter 'definitions' is not an JS object");
|
|
223
258
|
}
|
|
@@ -227,31 +262,28 @@ impl DataContractWasm {
|
|
|
227
262
|
#[wasm_bindgen(js_name=getDefinitions)]
|
|
228
263
|
pub fn get_definitions(&self) -> Result<JsValue, JsValue> {
|
|
229
264
|
let serializer = serde_wasm_bindgen::Serializer::json_compatible();
|
|
230
|
-
with_js_error!(self.
|
|
265
|
+
with_js_error!(self.inner.defs.serialize(&serializer))
|
|
231
266
|
}
|
|
232
267
|
|
|
233
268
|
#[wasm_bindgen(js_name=setEntropy)]
|
|
234
269
|
pub fn set_entropy(&mut self, e: Vec<u8>) -> Result<(), JsValue> {
|
|
235
|
-
|
|
236
|
-
RustConversionError::Error(String::from(
|
|
237
|
-
"unable to turn the data into 32 bytes array of bytes",
|
|
238
|
-
))
|
|
239
|
-
.to_js_value()
|
|
240
|
-
})?;
|
|
241
|
-
self.0.entropy = Bytes32::new(entropy);
|
|
270
|
+
self.entropy_used = Some(e);
|
|
242
271
|
Ok(())
|
|
243
272
|
}
|
|
244
273
|
|
|
245
274
|
#[wasm_bindgen(js_name=getEntropy)]
|
|
246
|
-
pub fn get_entropy(&mut self) ->
|
|
247
|
-
|
|
275
|
+
pub fn get_entropy(&mut self) -> JsValue {
|
|
276
|
+
self.entropy_used
|
|
277
|
+
.as_ref()
|
|
278
|
+
.map(|e| Buffer::from_bytes(e.as_slice()).into())
|
|
279
|
+
.unwrap_or(JsValue::undefined())
|
|
248
280
|
}
|
|
249
281
|
|
|
250
282
|
#[wasm_bindgen(js_name=getBinaryProperties)]
|
|
251
283
|
pub fn get_binary_properties(&self, doc_type: &str) -> Result<JsValue, JsValue> {
|
|
252
284
|
let serializer = serde_wasm_bindgen::Serializer::json_compatible();
|
|
253
285
|
with_js_error!(self
|
|
254
|
-
.
|
|
286
|
+
.inner
|
|
255
287
|
.get_binary_properties(doc_type)
|
|
256
288
|
.with_js_error()?
|
|
257
289
|
.serialize(&serializer))
|
|
@@ -259,12 +291,12 @@ impl DataContractWasm {
|
|
|
259
291
|
|
|
260
292
|
#[wasm_bindgen(js_name=getMetadata)]
|
|
261
293
|
pub fn get_metadata(&self) -> Option<MetadataWasm> {
|
|
262
|
-
self.
|
|
294
|
+
self.inner.metadata.clone().map(Into::into)
|
|
263
295
|
}
|
|
264
296
|
|
|
265
297
|
#[wasm_bindgen(js_name=setMetadata)]
|
|
266
298
|
pub fn set_metadata(&mut self, metadata: JsValue) -> Result<(), JsValue> {
|
|
267
|
-
self.
|
|
299
|
+
self.inner.metadata = if !metadata.is_falsy() {
|
|
268
300
|
let metadata = metadata.to_wasm::<MetadataWasm>("Metadata")?;
|
|
269
301
|
Some(metadata.to_owned().into())
|
|
270
302
|
} else {
|
|
@@ -276,20 +308,20 @@ impl DataContractWasm {
|
|
|
276
308
|
|
|
277
309
|
#[wasm_bindgen(js_name=toObject)]
|
|
278
310
|
pub fn to_object(&self) -> Result<JsValue, JsValue> {
|
|
279
|
-
let value = self.
|
|
311
|
+
let value = self.inner.to_cleaned_object().with_js_error()?;
|
|
280
312
|
let serializer = serde_wasm_bindgen::Serializer::json_compatible();
|
|
281
313
|
let object = with_js_error!(value.serialize(&serializer))?;
|
|
282
314
|
|
|
283
315
|
js_sys::Reflect::set(
|
|
284
316
|
&object,
|
|
285
317
|
&Into::<JsValue>::into("$id".to_owned()),
|
|
286
|
-
&Into::<JsValue>::into(Buffer::from_bytes_owned(self.
|
|
318
|
+
&Into::<JsValue>::into(Buffer::from_bytes_owned(self.inner.id.to_vec())),
|
|
287
319
|
)
|
|
288
320
|
.expect("target is an object");
|
|
289
321
|
js_sys::Reflect::set(
|
|
290
322
|
&object,
|
|
291
323
|
&Into::<JsValue>::into("ownerId".to_owned()),
|
|
292
|
-
&Into::<JsValue>::into(Buffer::from_bytes_owned(self.
|
|
324
|
+
&Into::<JsValue>::into(Buffer::from_bytes_owned(self.inner.owner_id.to_vec())),
|
|
293
325
|
)
|
|
294
326
|
.expect("target is an object");
|
|
295
327
|
Ok(object)
|
|
@@ -297,20 +329,20 @@ impl DataContractWasm {
|
|
|
297
329
|
|
|
298
330
|
#[wasm_bindgen(js_name=toJSON)]
|
|
299
331
|
pub fn to_json(&self) -> Result<JsValue, JsValue> {
|
|
300
|
-
let json = self.
|
|
332
|
+
let json = self.inner.to_json().with_js_error()?;
|
|
301
333
|
let serializer = serde_wasm_bindgen::Serializer::json_compatible();
|
|
302
334
|
with_js_error!(json.serialize(&serializer))
|
|
303
335
|
}
|
|
304
336
|
|
|
305
337
|
#[wasm_bindgen(js_name=toBuffer)]
|
|
306
338
|
pub fn to_buffer(&self) -> Result<Buffer, JsValue> {
|
|
307
|
-
let bytes = PlatformSerializable::serialize(&self.
|
|
339
|
+
let bytes = PlatformSerializable::serialize(&self.inner).with_js_error()?;
|
|
308
340
|
Ok(Buffer::from_bytes(&bytes))
|
|
309
341
|
}
|
|
310
342
|
|
|
311
343
|
#[wasm_bindgen(js_name=hash)]
|
|
312
344
|
pub fn hash(&self) -> Result<Vec<u8>, JsValue> {
|
|
313
|
-
self.
|
|
345
|
+
self.inner.hash().with_js_error()
|
|
314
346
|
}
|
|
315
347
|
|
|
316
348
|
#[wasm_bindgen(js_name=from)]
|
|
@@ -333,6 +365,28 @@ impl DataContractWasm {
|
|
|
333
365
|
}
|
|
334
366
|
}
|
|
335
367
|
|
|
368
|
+
impl Inner for DataContractWasm {
|
|
369
|
+
type InnerItem = DataContract;
|
|
370
|
+
|
|
371
|
+
fn into_inner(self) -> DataContract {
|
|
372
|
+
self.inner
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
fn inner(&self) -> &DataContract {
|
|
376
|
+
&self.inner
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
fn inner_mut(&mut self) -> &mut DataContract {
|
|
380
|
+
&mut self.inner
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
impl DataContractWasm {
|
|
385
|
+
pub fn inner(&self) -> &DataContract {
|
|
386
|
+
&self.inner
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
336
390
|
#[wasm_bindgen(js_name=DataContractDefaults)]
|
|
337
391
|
pub struct DataContractDefaults;
|
|
338
392
|
|
|
@@ -343,12 +397,3 @@ impl DataContractDefaults {
|
|
|
343
397
|
SCHEMA_URI.to_string()
|
|
344
398
|
}
|
|
345
399
|
}
|
|
346
|
-
|
|
347
|
-
impl DataContractWasm {
|
|
348
|
-
pub fn inner(&self) -> &DataContract {
|
|
349
|
-
&self.0
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
#[test]
|
|
354
|
-
fn test_query_many() {}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
use crate::errors::protocol_error::from_protocol_error;
|
|
2
|
+
use std::convert::TryFrom;
|
|
2
3
|
|
|
3
4
|
use crate::{
|
|
4
5
|
js_value_to_data_contract_value, DataContractCreateTransitionWasm,
|
|
5
6
|
DataContractUpdateTransitionWasm, DataContractWasm,
|
|
6
7
|
};
|
|
7
|
-
use dpp::data_contract::{DataContract, DataContractFacade};
|
|
8
|
+
use dpp::data_contract::{CreatedDataContract, DataContract, DataContractFacade};
|
|
8
9
|
use dpp::identifier::Identifier;
|
|
9
10
|
use dpp::version::ProtocolVersionValidator;
|
|
10
11
|
|
|
@@ -114,7 +115,9 @@ impl DataContractFacadeWasm {
|
|
|
114
115
|
data_contract: &DataContractWasm,
|
|
115
116
|
) -> Result<DataContractCreateTransitionWasm, JsValue> {
|
|
116
117
|
self.0
|
|
117
|
-
.create_data_contract_create_transition(
|
|
118
|
+
.create_data_contract_create_transition(
|
|
119
|
+
CreatedDataContract::try_from(data_contract).with_js_error()?,
|
|
120
|
+
)
|
|
118
121
|
.map(DataContractCreateTransitionWasm::from)
|
|
119
122
|
.with_js_error()
|
|
120
123
|
}
|
|
@@ -84,11 +84,6 @@ impl DataContractUpdateTransitionWasm {
|
|
|
84
84
|
self.0.protocol_version
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
#[wasm_bindgen(js_name=getEntropy)]
|
|
88
|
-
pub fn get_entropy(&self) -> Buffer {
|
|
89
|
-
Buffer::from_bytes_owned(self.0.data_contract.entropy.to_vec())
|
|
90
|
-
}
|
|
91
|
-
|
|
92
87
|
#[wasm_bindgen(js_name=getOwnerId)]
|
|
93
88
|
pub fn get_owner_id(&self) -> IdentifierWrapper {
|
|
94
89
|
(*self.0.get_owner_id()).into()
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
use std::convert::TryFrom;
|
|
1
2
|
use std::sync::Arc;
|
|
2
3
|
|
|
4
|
+
use dpp::data_contract::CreatedDataContract;
|
|
3
5
|
use dpp::{
|
|
4
6
|
data_contract::{
|
|
5
7
|
validation::data_contract_validator::DataContractValidator, DataContractFactory,
|
|
@@ -156,7 +158,9 @@ impl DataContractFactoryWasm {
|
|
|
156
158
|
data_contract: &DataContractWasm,
|
|
157
159
|
) -> Result<DataContractCreateTransitionWasm, JsValue> {
|
|
158
160
|
self.0
|
|
159
|
-
.create_data_contract_create_transition(
|
|
161
|
+
.create_data_contract_create_transition(
|
|
162
|
+
CreatedDataContract::try_from(data_contract).with_js_error()?,
|
|
163
|
+
)
|
|
160
164
|
.map(Into::into)
|
|
161
165
|
.with_js_error()
|
|
162
166
|
}
|
|
@@ -89,6 +89,18 @@ impl DocumentFacadeWasm {
|
|
|
89
89
|
.await
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
// TODO(rs-drive-abci): add tests
|
|
93
|
+
#[wasm_bindgen(js_name=createExtendedDocumentFromDocumentBuffer)]
|
|
94
|
+
pub fn create_extended_from_document_buffer(
|
|
95
|
+
&self,
|
|
96
|
+
buffer: Vec<u8>,
|
|
97
|
+
document_type: &str,
|
|
98
|
+
data_contract: &DataContractWasm,
|
|
99
|
+
) -> Result<ExtendedDocumentWasm, JsValue> {
|
|
100
|
+
self.factory
|
|
101
|
+
.create_extended_from_document_buffer(buffer, document_type, data_contract)
|
|
102
|
+
}
|
|
103
|
+
|
|
92
104
|
/// Creates Documents State Transition
|
|
93
105
|
#[wasm_bindgen(js_name=createStateTransition)]
|
|
94
106
|
pub fn create_state_transition(
|
package/src/document/factory.rs
CHANGED
|
@@ -212,6 +212,23 @@ impl DocumentFactoryWASM {
|
|
|
212
212
|
|
|
213
213
|
Ok(document.into())
|
|
214
214
|
}
|
|
215
|
+
|
|
216
|
+
#[wasm_bindgen(js_name=createExtendedDocumentFromDocumentBuffer)]
|
|
217
|
+
pub fn create_extended_from_document_buffer(
|
|
218
|
+
&self,
|
|
219
|
+
buffer: Vec<u8>,
|
|
220
|
+
document_type: &str,
|
|
221
|
+
data_contract: &DataContractWasm,
|
|
222
|
+
) -> Result<ExtendedDocumentWasm, JsValue> {
|
|
223
|
+
self.0
|
|
224
|
+
.create_extended_from_document_buffer(
|
|
225
|
+
buffer.as_slice(),
|
|
226
|
+
document_type,
|
|
227
|
+
&data_contract.to_owned().into(),
|
|
228
|
+
)
|
|
229
|
+
.map(|document| document.into())
|
|
230
|
+
.with_js_error()
|
|
231
|
+
}
|
|
215
232
|
}
|
|
216
233
|
|
|
217
234
|
fn extract_documents_by_action(
|
package/src/document/mod.rs
CHANGED
|
@@ -238,7 +238,7 @@ impl DocumentWasm {
|
|
|
238
238
|
let mut value = self.0.to_object().with_js_error()?;
|
|
239
239
|
|
|
240
240
|
let (identifiers_paths, binary_paths) =
|
|
241
|
-
Document::get_identifiers_and_binary_paths(
|
|
241
|
+
Document::get_identifiers_and_binary_paths(data_contract.inner(), document_type_name)
|
|
242
242
|
.with_js_error()?;
|
|
243
243
|
let serializer = serde_wasm_bindgen::Serializer::json_compatible();
|
|
244
244
|
let js_value = value.serialize(&serializer)?;
|
|
@@ -287,12 +287,12 @@ impl DocumentWasm {
|
|
|
287
287
|
document_type_name: String,
|
|
288
288
|
) -> Result<Buffer, JsValue> {
|
|
289
289
|
let document_type = data_contract
|
|
290
|
-
.
|
|
290
|
+
.inner()
|
|
291
291
|
.document_type_for_name(document_type_name.as_str())
|
|
292
292
|
.with_js_error()?;
|
|
293
293
|
let bytes = self
|
|
294
294
|
.0
|
|
295
|
-
.hash(
|
|
295
|
+
.hash(data_contract.inner(), document_type)
|
|
296
296
|
.with_js_error()?;
|
|
297
297
|
Ok(Buffer::from_bytes(&bytes))
|
|
298
298
|
}
|
|
@@ -311,7 +311,7 @@ impl DocumentWasm {
|
|
|
311
311
|
document_type_name: String,
|
|
312
312
|
) -> BinaryType {
|
|
313
313
|
let maybe_binary_properties = data_contract
|
|
314
|
-
.
|
|
314
|
+
.inner()
|
|
315
315
|
.get_binary_properties(document_type_name.as_str());
|
|
316
316
|
|
|
317
317
|
if let Ok(binary_properties) = maybe_binary_properties {
|
|
@@ -115,6 +115,8 @@ use crate::errors::consensus::fee::BalanceIsNotEnoughErrorWasm;
|
|
|
115
115
|
use crate::errors::consensus::state::data_contract::data_trigger::DataTriggerInvalidResultErrorWasm;
|
|
116
116
|
use crate::errors::consensus::value_error::ValueErrorWasm;
|
|
117
117
|
|
|
118
|
+
use super::state::document::DocumentTimestampsAreEqualErrorWasm;
|
|
119
|
+
|
|
118
120
|
pub fn from_consensus_error_ref(e: &DPPConsensusError) -> JsValue {
|
|
119
121
|
match e {
|
|
120
122
|
DPPConsensusError::FeeError(e) => match e {
|
|
@@ -197,6 +199,9 @@ pub fn from_state_error(state_error: &StateError) -> JsValue {
|
|
|
197
199
|
let wasm_error: IdentityInsufficientBalanceErrorWasm = e.into();
|
|
198
200
|
wasm_error.into()
|
|
199
201
|
}
|
|
202
|
+
StateError::DocumentTimestampsAreEqualError(e) => {
|
|
203
|
+
DocumentTimestampsAreEqualErrorWasm::from(e).into()
|
|
204
|
+
}
|
|
200
205
|
}
|
|
201
206
|
}
|
|
202
207
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
use crate::buffer::Buffer;
|
|
2
|
+
use dpp::consensus::codes::ErrorWithCode;
|
|
3
|
+
use dpp::consensus::state::document::document_timestamps_are_equal_error::DocumentTimestampsAreEqualError;
|
|
4
|
+
use dpp::consensus::ConsensusError;
|
|
5
|
+
use wasm_bindgen::prelude::*;
|
|
6
|
+
|
|
7
|
+
#[wasm_bindgen(js_name=DocumentTimestampsAreEqualError)]
|
|
8
|
+
pub struct DocumentTimestampsAreEqualErrorWasm {
|
|
9
|
+
inner: DocumentTimestampsAreEqualError,
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
impl From<&DocumentTimestampsAreEqualError> for DocumentTimestampsAreEqualErrorWasm {
|
|
13
|
+
fn from(e: &DocumentTimestampsAreEqualError) -> Self {
|
|
14
|
+
Self { inner: e.clone() }
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
#[wasm_bindgen(js_class=DocumentTimestampsAreEqualError)]
|
|
18
|
+
impl DocumentTimestampsAreEqualErrorWasm {
|
|
19
|
+
#[wasm_bindgen(js_name=getDocumentId)]
|
|
20
|
+
pub fn document_id(&self) -> Buffer {
|
|
21
|
+
Buffer::from_bytes(self.inner.document_id().as_bytes())
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
#[wasm_bindgen(js_name=getCode)]
|
|
25
|
+
pub fn get_code(&self) -> u32 {
|
|
26
|
+
ConsensusError::from(self.inner.clone()).code()
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
#[wasm_bindgen(getter)]
|
|
30
|
+
pub fn message(&self) -> String {
|
|
31
|
+
self.inner.to_string()
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
#[wasm_bindgen(js_name=serialize)]
|
|
35
|
+
pub fn serialize(&self) -> Result<Buffer, JsError> {
|
|
36
|
+
let bytes = ConsensusError::from(self.inner.clone())
|
|
37
|
+
.serialize()
|
|
38
|
+
.map_err(|e| JsError::from(e))?;
|
|
39
|
+
|
|
40
|
+
Ok(Buffer::from_bytes(bytes.as_slice()))
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -2,6 +2,7 @@ mod document_already_present_error;
|
|
|
2
2
|
mod document_not_found_error;
|
|
3
3
|
mod document_owner_id_mismatch_error;
|
|
4
4
|
mod document_timestamp_window_violation_error;
|
|
5
|
+
mod document_timestamps_are_equal_error;
|
|
5
6
|
mod document_timestamps_mismatch_error;
|
|
6
7
|
mod duplicate_unique_index_error;
|
|
7
8
|
mod invalid_document_revision_error;
|
|
@@ -10,6 +11,7 @@ pub use document_already_present_error::*;
|
|
|
10
11
|
pub use document_not_found_error::*;
|
|
11
12
|
pub use document_owner_id_mismatch_error::*;
|
|
12
13
|
pub use document_timestamp_window_violation_error::*;
|
|
14
|
+
pub use document_timestamps_are_equal_error::*;
|
|
13
15
|
pub use document_timestamps_mismatch_error::*;
|
|
14
16
|
pub use duplicate_unique_index_error::*;
|
|
15
17
|
pub use invalid_document_revision_error::*;
|