@dashevo/wasm-dpp 0.24.0-dev.11 → 0.24.0-dev.12
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/dist/index.js +1 -1
- package/dist/lib/dpp.d.ts +9 -0
- package/dist/lib/errors/AbstractConsensusError.d.ts +10 -0
- package/dist/lib/errors/DPPError.d.ts +5 -0
- package/dist/lib/errors/patchConsensusErrors.d.ts +1 -0
- package/dist/lib/{patchIdentifier.d.ts → identifier/patchIdentifier.d.ts} +1 -1
- package/dist/{index.d.ts → lib/index.d.ts} +1 -1
- package/dist/lib/utils/extend.d.ts +1 -0
- package/dist/wasm/wasm_dpp.d.ts +352 -205
- package/lib/dpp.ts +24 -0
- package/lib/errors/AbstractConsensusError.ts +13 -0
- package/lib/errors/DPPError.ts +15 -0
- package/lib/errors/patchConsensusErrors.ts +175 -0
- package/lib/{patchIdentifier.ts → identifier/patchIdentifier.ts} +1 -1
- package/{index.ts → lib/index.ts} +4 -3
- package/lib/test/expect/expectError.js +4 -2
- package/lib/utils/extend.ts +6 -0
- package/package.json +5 -5
- package/src/data_contract/errors/invalid_data_contract.rs +21 -0
- package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +4 -4
- package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +2 -2
- package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +44 -0
- package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +147 -0
- package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +46 -0
- package/src/data_contract/state_transition/mod.rs +2 -0
- package/src/data_contract_factory/data_contract_factory.rs +27 -12
- package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +5 -5
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +4 -4
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +36 -0
- package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +20 -0
- package/src/errors/consensus/basic/document/mod.rs +4 -0
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +2 -2
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +2 -2
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +2 -2
- package/src/errors/consensus/basic/json_schema_error.rs +1 -1
- package/src/errors/consensus_error.rs +15 -8
- package/src/errors/from.rs +1 -1
- package/src/errors/mod.rs +1 -0
- package/src/errors/protocol_error.rs +12 -0
- package/src/{identifier.rs → identifier/mod.rs} +0 -0
- package/src/{identity_facade.rs → identity/identity_facade.rs} +1 -1
- package/src/{identity_public_key → identity/identity_public_key}/key_type.rs +0 -0
- package/src/{identity_public_key → identity/identity_public_key}/mod.rs +0 -3
- package/src/{identity_public_key → identity/identity_public_key}/purpose.rs +0 -0
- package/src/{identity_public_key → identity/identity_public_key}/security_level.rs +0 -0
- package/src/{identity.rs → identity/mod.rs} +6 -7
- package/src/identity/validation/mod.rs +3 -0
- package/src/identity/validation/public_keys_validator.rs +70 -0
- package/src/lib.rs +1 -6
- package/src/utils.rs +2 -2
- package/src/validation/mod.rs +3 -0
- package/src/{validation_result.rs → validation/validation_result.rs} +0 -0
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +1 -1
- package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +79 -114
- package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -11
- package/test/integration/stateTransition/StateTransitionFacade.spec.js +1 -1
- package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +135 -0
- package/test/unit/dataContract/DataContract.spec.js +5 -9
- package/test/unit/dataContract/DataContractFactory.spec.js +13 -6
- package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +11 -3
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +20 -16
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +23 -59
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +27 -23
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +29 -12
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +66 -49
- package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +73 -0
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +1 -1
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +1 -1
- package/test/unit/identity/IdentityPublicKey.spec.js +25 -31
- package/tsconfig.json +1 -1
- package/wasm/wasm_dpp.d.ts +352 -205
- package/wasm/wasm_dpp.js +759 -372
- package/wasm/wasm_dpp_bg.js +1 -1
- package/wasm/wasm_dpp_bg.wasm +0 -0
- package/wasm/wasm_dpp_bg.wasm.d.ts +205 -175
- package/webpack.config.js +1 -1
- package/src/identity_public_key/public_keys_validator.rs +0 -44
- package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +0 -32
- package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +0 -93
- package/test/unit/dataContract/validation/validateDataContractPatternsFactory.spec.js +0 -64
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
|
|
2
|
-
|
|
3
|
-
use crate::utils::{to_vec_of_serde_values, ToSerdeJSONExt};
|
|
4
|
-
use crate::validation_result::ValidationResultWasm;
|
|
5
|
-
use dpp::identity::validation::{PublicKeysValidator, TPublicKeysValidator};
|
|
6
|
-
|
|
7
|
-
use wasm_bindgen::prelude::*;
|
|
8
|
-
|
|
9
|
-
#[wasm_bindgen(js_name = PublicKeysValidator)]
|
|
10
|
-
pub struct PublicKeysValidatorWasm(PublicKeysValidator<BlsAdapter>);
|
|
11
|
-
|
|
12
|
-
#[wasm_bindgen(js_class = PublicKeysValidator)]
|
|
13
|
-
impl PublicKeysValidatorWasm {
|
|
14
|
-
#[wasm_bindgen(constructor)]
|
|
15
|
-
pub fn new(adapter: JsBlsAdapter) -> PublicKeysValidatorWasm {
|
|
16
|
-
Self(PublicKeysValidator::new(BlsAdapter(adapter)).unwrap())
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
#[wasm_bindgen(js_name=validateKeys)]
|
|
20
|
-
pub fn validate_keys(
|
|
21
|
-
&self,
|
|
22
|
-
public_keys: js_sys::Array,
|
|
23
|
-
) -> Result<ValidationResultWasm, JsValue> {
|
|
24
|
-
let raw_public_keys = to_vec_of_serde_values(public_keys.iter())?;
|
|
25
|
-
|
|
26
|
-
self.0
|
|
27
|
-
.validate_keys(&raw_public_keys)
|
|
28
|
-
.map(ValidationResultWasm::from)
|
|
29
|
-
.map_err(|e| JsValue::from(e.to_string()))
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
#[wasm_bindgen(js_name=validatePublicKeyStructure)]
|
|
33
|
-
pub fn validate_public_key_structure(
|
|
34
|
-
&self,
|
|
35
|
-
public_key: JsValue,
|
|
36
|
-
) -> Result<ValidationResultWasm, JsValue> {
|
|
37
|
-
let pk_serde_json = public_key.to_serde_json_value()?;
|
|
38
|
-
|
|
39
|
-
self.0
|
|
40
|
-
.validate_public_key_structure(&pk_serde_json)
|
|
41
|
-
.map(ValidationResultWasm::from)
|
|
42
|
-
.map_err(|e| JsValue::from(e.to_string()))
|
|
43
|
-
}
|
|
44
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
const calculateStateTransitionFee = require('@dashevo/dpp/lib/stateTransition/fee/calculateStateTransitionFee');
|
|
2
|
-
|
|
3
|
-
const getIdentityCreateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityCreateTransitionFixture');
|
|
4
|
-
const IdentityPublicKey = require('@dashevo/dpp/lib/identity/IdentityPublicKey');
|
|
5
|
-
const ReadOperation = require('@dashevo/dpp/lib/stateTransition/fee/operations/ReadOperation');
|
|
6
|
-
const PreCalculatedOperation = require('@dashevo/dpp/lib/stateTransition/fee/operations/PreCalculatedOperation');
|
|
7
|
-
const DummyFeeResult = require('@dashevo/dpp/lib/stateTransition/fee/DummyFeeResult');
|
|
8
|
-
|
|
9
|
-
describe('calculateStateTransitionFee', () => {
|
|
10
|
-
let stateTransition;
|
|
11
|
-
|
|
12
|
-
beforeEach(async () => {
|
|
13
|
-
const privateKey = 'af432c476f65211f45f48f1d42c9c0b497e56696aa1736b40544ef1a496af837';
|
|
14
|
-
|
|
15
|
-
stateTransition = getIdentityCreateTransitionFixture();
|
|
16
|
-
await stateTransition.signByPrivateKey(privateKey, IdentityPublicKey.TYPES.ECDSA_SECP256K1);
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
// TODO: Must be more comprehensive. After we settle all factors and formula.
|
|
20
|
-
it('should calculate fee based on executed operations', () => {
|
|
21
|
-
const executionContext = stateTransition.getExecutionContext();
|
|
22
|
-
|
|
23
|
-
executionContext.addOperation(
|
|
24
|
-
new ReadOperation(10),
|
|
25
|
-
new PreCalculatedOperation(new DummyFeeResult(12, 12)),
|
|
26
|
-
);
|
|
27
|
-
|
|
28
|
-
const result = calculateStateTransitionFee(stateTransition);
|
|
29
|
-
|
|
30
|
-
expect(result).to.equal(17088);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
const validateDataContractMaxDepthFactory = require('@dashevo/dpp/lib/dataContract/validation/validateDataContractMaxDepthFactory');
|
|
2
|
-
const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
|
|
3
|
-
const { expectValidationError } = require('@dashevo/dpp/lib/test/expect/expectError');
|
|
4
|
-
const DataContractMaxDepthExceedError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/DataContractMaxDepthExceedError');
|
|
5
|
-
const generateDeepJson = require('@dashevo/dpp/lib/test/utils/generateDeepJson');
|
|
6
|
-
const InvalidJsonSchemaRefError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/InvalidJsonSchemaRefError');
|
|
7
|
-
|
|
8
|
-
describe('validateDataContractMaxDepthFactory', () => {
|
|
9
|
-
let refParserMock;
|
|
10
|
-
let validateDataContractMaxDepth;
|
|
11
|
-
let dataContractFixture;
|
|
12
|
-
|
|
13
|
-
beforeEach(function beforeEach() {
|
|
14
|
-
dataContractFixture = {};
|
|
15
|
-
|
|
16
|
-
refParserMock = {
|
|
17
|
-
dereference: this.sinonSandbox.stub(),
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
validateDataContractMaxDepth = validateDataContractMaxDepthFactory(refParserMock);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('should throw error if depth > MAX_DEPTH', async () => {
|
|
24
|
-
dataContractFixture = generateDeepJson(DataContractMaxDepthExceedError.MAX_DEPTH + 1);
|
|
25
|
-
|
|
26
|
-
refParserMock.dereference.resolves(dataContractFixture);
|
|
27
|
-
|
|
28
|
-
const result = await validateDataContractMaxDepth(dataContractFixture);
|
|
29
|
-
|
|
30
|
-
expectValidationError(result);
|
|
31
|
-
|
|
32
|
-
const [error] = result.getErrors();
|
|
33
|
-
|
|
34
|
-
expect(error).to.be.an.instanceOf(DataContractMaxDepthExceedError);
|
|
35
|
-
expect(error.getCode()).to.equal(1007);
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('should return valid result if depth = MAX_DEPTH', async () => {
|
|
39
|
-
dataContractFixture = generateDeepJson(DataContractMaxDepthExceedError.MAX_DEPTH);
|
|
40
|
-
|
|
41
|
-
refParserMock.dereference.resolves(dataContractFixture);
|
|
42
|
-
|
|
43
|
-
const result = await validateDataContractMaxDepth(dataContractFixture);
|
|
44
|
-
|
|
45
|
-
expect(result).to.be.an.instanceOf(ValidationResult);
|
|
46
|
-
expect(result.isValid()).to.be.true();
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('should throw error if contract contains array with depth > MAX_DEPTH', async () => {
|
|
50
|
-
const deepJson = generateDeepJson(DataContractMaxDepthExceedError.MAX_DEPTH + 1);
|
|
51
|
-
|
|
52
|
-
dataContractFixture = {
|
|
53
|
-
array: [
|
|
54
|
-
0, deepJson,
|
|
55
|
-
],
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
refParserMock.dereference.resolves(dataContractFixture);
|
|
59
|
-
|
|
60
|
-
const result = await validateDataContractMaxDepth(dataContractFixture);
|
|
61
|
-
|
|
62
|
-
expectValidationError(result);
|
|
63
|
-
|
|
64
|
-
const [error] = result.getErrors();
|
|
65
|
-
|
|
66
|
-
expect(error).to.be.an.instanceOf(DataContractMaxDepthExceedError);
|
|
67
|
-
expect(error.getCode()).to.equal(1007);
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it('should return error if refParser throws an error', async () => {
|
|
71
|
-
const refParserError = new Error('refParser error');
|
|
72
|
-
|
|
73
|
-
refParserMock.dereference.throws(refParserError);
|
|
74
|
-
|
|
75
|
-
const result = await validateDataContractMaxDepth(dataContractFixture);
|
|
76
|
-
|
|
77
|
-
expectValidationError(result);
|
|
78
|
-
|
|
79
|
-
const [error] = result.getErrors();
|
|
80
|
-
|
|
81
|
-
expect(error).to.be.an.instanceOf(InvalidJsonSchemaRefError);
|
|
82
|
-
expect(error.message).to.equal(`Invalid JSON Schema $ref: ${refParserError.message}`);
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it('should return valid result', async () => {
|
|
86
|
-
refParserMock.dereference.resolves(dataContractFixture);
|
|
87
|
-
|
|
88
|
-
const result = await validateDataContractMaxDepth(dataContractFixture);
|
|
89
|
-
|
|
90
|
-
expect(result).to.be.an.instanceOf(ValidationResult);
|
|
91
|
-
expect(result.isValid()).to.be.true();
|
|
92
|
-
});
|
|
93
|
-
});
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
const { getRE2Class } = require('@dashevo/wasm-re2');
|
|
2
|
-
|
|
3
|
-
const validateDataContractPatternsFactory = require('@dashevo/dpp/lib/dataContract/validation/validateDataContractPatternsFactory');
|
|
4
|
-
const { expectValidationError } = require(
|
|
5
|
-
'@dashevo/dpp/lib/test/expect/expectError',
|
|
6
|
-
);
|
|
7
|
-
const IncompatibleRe2PatternError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/IncompatibleRe2PatternError');
|
|
8
|
-
|
|
9
|
-
describe('validateDataContractPatternsFactory', () => {
|
|
10
|
-
let validateDataContractPatterns;
|
|
11
|
-
let RE2;
|
|
12
|
-
|
|
13
|
-
before(async () => {
|
|
14
|
-
RE2 = await getRE2Class();
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
validateDataContractPatterns = validateDataContractPatternsFactory(RE2);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('should return valid result', () => {
|
|
22
|
-
const schema = {
|
|
23
|
-
type: 'object',
|
|
24
|
-
properties: {
|
|
25
|
-
foo: { type: 'integer' },
|
|
26
|
-
bar: {
|
|
27
|
-
type: 'string',
|
|
28
|
-
pattern: '([a-z]+)+$',
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
required: ['foo'],
|
|
32
|
-
additionalProperties: false,
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const result = validateDataContractPatterns(schema);
|
|
36
|
-
|
|
37
|
-
expect(result.isValid()).to.be.true();
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('should return invalid result on incompatible pattern', () => {
|
|
41
|
-
const schema = {
|
|
42
|
-
type: 'object',
|
|
43
|
-
properties: {
|
|
44
|
-
foo: { type: 'integer' },
|
|
45
|
-
bar: {
|
|
46
|
-
type: 'string',
|
|
47
|
-
pattern: '^((?!-|_)[a-zA-Z0-9-_]{0,62}[a-zA-Z0-9])$',
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
required: ['foo'],
|
|
51
|
-
additionalProperties: false,
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
const result = validateDataContractPatterns(schema);
|
|
55
|
-
|
|
56
|
-
expectValidationError(result, IncompatibleRe2PatternError);
|
|
57
|
-
const [error] = result.getErrors();
|
|
58
|
-
|
|
59
|
-
expect(error.getCode()).to.equal(1009);
|
|
60
|
-
expect(error.getPattern()).to.equal('^((?!-|_)[a-zA-Z0-9-_]{0,62}[a-zA-Z0-9])$');
|
|
61
|
-
expect(error.getPath()).to.equal('/properties/bar');
|
|
62
|
-
expect(error.getPatternError()).to.be.instanceOf(Error);
|
|
63
|
-
});
|
|
64
|
-
});
|