@dashevo/wasm-dpp 0.24.0-dev.11 → 0.24.0-dev.13

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 (167) hide show
  1. package/Cargo.toml +3 -0
  2. package/README.md +5 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.LICENSE.txt +9 -0
  5. package/dist/lib/dpp.d.ts +9 -0
  6. package/dist/lib/errors/AbstractConsensusError.d.ts +10 -0
  7. package/dist/lib/errors/DPPError.d.ts +5 -0
  8. package/dist/lib/errors/patchConsensusErrors.d.ts +1 -0
  9. package/dist/lib/{patchIdentifier.d.ts → identifier/patchIdentifier.d.ts} +1 -1
  10. package/dist/{index.d.ts → lib/index.d.ts} +1 -1
  11. package/dist/lib/utils/extend.d.ts +1 -0
  12. package/dist/wasm/wasm_dpp.d.ts +1595 -518
  13. package/karma.conf.js +5 -0
  14. package/lib/dpp.ts +24 -0
  15. package/lib/errors/AbstractConsensusError.ts +13 -0
  16. package/lib/errors/DPPError.ts +15 -0
  17. package/lib/errors/patchConsensusErrors.ts +175 -0
  18. package/lib/{patchIdentifier.ts → identifier/patchIdentifier.ts} +6 -5
  19. package/{index.ts → lib/index.ts} +5 -4
  20. package/lib/test/bootstrap.js +5 -0
  21. package/lib/test/expect/expectError.js +4 -2
  22. package/lib/test/mocks/getBlsAdapterMock.js +36 -0
  23. package/lib/test/utils/newDocumentsContainer.js +36 -0
  24. package/lib/utils/extend.ts +6 -0
  25. package/package.json +9 -6
  26. package/src/bls_adapter.rs +16 -1
  27. package/src/data_contract/data_contract.rs +35 -7
  28. package/src/data_contract/errors/invalid_data_contract.rs +21 -0
  29. package/src/data_contract/errors/invalid_document_type.rs +1 -1
  30. package/src/data_contract/index.rs +56 -1
  31. package/src/data_contract/mod.rs +1 -0
  32. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +6 -8
  33. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +4 -4
  34. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +44 -0
  35. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +145 -0
  36. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +49 -0
  37. package/src/data_contract/state_transition/mod.rs +2 -0
  38. package/src/data_contract_factory/data_contract_factory.rs +25 -12
  39. package/src/document/errors/invalid_document_error.rs +10 -9
  40. package/src/document/errors/invalid_initial_revision_error.rs +1 -1
  41. package/src/document/errors/mismatch_owners_ids_error.rs +14 -4
  42. package/src/document/errors/mod.rs +17 -13
  43. package/src/document/errors/no_documents_supplied_error.rs +4 -4
  44. package/src/document/factory.rs +192 -0
  45. package/src/document/mod.rs +222 -30
  46. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +47 -1
  47. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +25 -1
  48. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +65 -0
  49. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +123 -3
  50. package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
  51. package/src/document/validator.rs +30 -0
  52. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +5 -5
  53. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +4 -4
  54. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +36 -0
  55. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +20 -0
  56. package/src/errors/consensus/basic/document/mod.rs +4 -0
  57. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +2 -2
  58. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +2 -2
  59. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
  60. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
  61. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
  62. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +2 -2
  63. package/src/errors/consensus/basic/json_schema_error.rs +1 -1
  64. package/src/errors/consensus_error.rs +15 -8
  65. package/src/errors/dpp_error.rs +17 -0
  66. package/src/errors/from.rs +6 -1
  67. package/src/errors/js_conversion.rs +19 -4
  68. package/src/errors/mod.rs +3 -0
  69. package/src/errors/protocol_error.rs +15 -0
  70. package/src/{identifier.rs → identifier/mod.rs} +48 -3
  71. package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
  72. package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
  73. package/src/identity/errors/mod.rs +7 -0
  74. package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
  75. package/src/{identity_facade.rs → identity/identity_facade.rs} +3 -5
  76. package/src/{identity_public_key → identity/identity_public_key}/key_type.rs +0 -0
  77. package/src/{identity_public_key → identity/identity_public_key}/mod.rs +41 -10
  78. package/src/{identity_public_key → identity/identity_public_key}/purpose.rs +0 -0
  79. package/src/{identity_public_key → identity/identity_public_key}/security_level.rs +0 -0
  80. package/src/{identity.rs → identity/mod.rs} +20 -12
  81. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
  82. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
  83. package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
  84. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
  85. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
  86. package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
  87. package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
  88. package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
  89. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +335 -0
  90. package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
  91. package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
  92. package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
  93. package/src/identity/state_transition/identity_create_transition/to_object.rs +46 -0
  94. package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
  95. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +280 -0
  96. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
  97. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
  98. package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
  99. package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
  100. package/src/identity/state_transition/mod.rs +9 -0
  101. package/src/identity/state_transition/validate_public_key_signatures.rs +59 -0
  102. package/src/identity/validation/mod.rs +3 -0
  103. package/src/identity/validation/public_keys_validator.rs +76 -0
  104. package/src/identity_public_key/public_keys_validator.rs +1 -1
  105. package/src/lib.rs +3 -6
  106. package/src/lodash.rs +7 -0
  107. package/src/state_repository.rs +188 -36
  108. package/src/state_transition/mod.rs +12 -0
  109. package/src/utils.rs +102 -7
  110. package/src/validation/json_schema_validator.rs +41 -0
  111. package/src/validation/mod.rs +5 -0
  112. package/src/{validation_result.rs → validation/validation_result.rs} +23 -5
  113. package/src/version/mod.rs +2 -0
  114. package/src/version/protocol_version.rs +26 -0
  115. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +579 -502
  116. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +175 -165
  117. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +83 -114
  118. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +1 -1
  119. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +82 -91
  120. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +75 -31
  121. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -148
  122. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +63 -75
  123. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +48 -19
  124. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +79 -114
  125. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -11
  126. package/test/integration/stateTransition/StateTransitionFacade.spec.js +1 -1
  127. package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +135 -0
  128. package/test/unit/dataContract/DataContract.spec.js +5 -9
  129. package/test/unit/dataContract/DataContractFactory.spec.js +13 -6
  130. package/test/unit/dataContract/createDataContract.spec.js +0 -1
  131. package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +11 -3
  132. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
  133. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +20 -16
  134. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +24 -60
  135. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +27 -23
  136. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +29 -12
  137. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +66 -49
  138. package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +73 -0
  139. package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
  140. package/test/unit/document/Document.spec.js +147 -155
  141. package/test/unit/document/DocumentFactory.spec.js +325 -91
  142. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +142 -64
  143. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +1 -1
  144. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +1 -1
  145. package/test/unit/identity/Identity.spec.js +2 -2
  146. package/test/unit/identity/IdentityPublicKey.spec.js +25 -31
  147. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +69 -30
  148. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +32 -32
  149. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +56 -25
  150. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
  151. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +48 -46
  152. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
  153. package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
  154. package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
  155. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
  156. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
  157. package/tsconfig.json +1 -1
  158. package/wasm/package.json +5 -0
  159. package/wasm/wasm_dpp.d.ts +1595 -518
  160. package/wasm/wasm_dpp.js +5007 -2172
  161. package/wasm/wasm_dpp_bg.js +1 -1
  162. package/wasm/wasm_dpp_bg.wasm +0 -0
  163. package/wasm/wasm_dpp_bg.wasm.d.ts +566 -365
  164. package/webpack.config.js +10 -1
  165. package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +0 -32
  166. package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +0 -93
  167. package/test/unit/dataContract/validation/validateDataContractPatternsFactory.spec.js +0 -64
@@ -1,27 +1,36 @@
1
- const validateDataContractUpdateTransitionStateFactory = require('@dashevo/dpp/lib/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory');
2
- const DataContractUpdateTransition = require('@dashevo/dpp/lib/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition');
3
-
4
- const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
5
1
  const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
2
+ const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
6
3
 
7
- const { expectValidationError } = require('@dashevo/dpp/lib/test/expect/expectError');
8
-
9
- const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
10
-
11
- const DataContractNotPresentError = require('@dashevo/dpp/lib/errors/consensus/basic/document/DataContractNotPresentError');
12
- const InvalidDataContractVersionError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/InvalidDataContractVersionError');
13
- const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
4
+ const { default: loadWasmDpp } = require('../../../../../../../dist');
14
5
 
15
6
  describe('validateDataContractUpdateTransitionStateFactory', () => {
16
7
  let validateDataContractUpdateTransitionState;
17
8
  let dataContract;
18
9
  let stateTransition;
19
- let stateRepositoryMock;
20
10
  let executionContext;
11
+ let DataContractUpdateTransition;
12
+ let StateTransitionExecutionContext;
13
+ let DataContractFactory;
14
+ let DataContractValidator;
15
+ let validateTransitionWithExistingContract;
16
+ let DataContractNotPresentError;
17
+ let InvalidDataContractVersionError;
18
+ let ValidationResult;
19
+
20
+ before(async () => {
21
+ ({
22
+ DataContractUpdateTransition,
23
+ StateTransitionExecutionContext,
24
+ validateDataContractUpdateTransitionState,
25
+ ValidationResult,
26
+ DataContractFactory,
27
+ DataContractValidator,
28
+ DataContractNotPresentError,
29
+ InvalidDataContractVersionError,
30
+ } = await loadWasmDpp());
31
+ });
21
32
 
22
- beforeEach(function beforeEach() {
23
- stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
24
-
33
+ beforeEach(async () => {
25
34
  dataContract = getDataContractFixture();
26
35
 
27
36
  const updatedRawDataContract = dataContract.toObject();
@@ -30,82 +39,90 @@ describe('validateDataContractUpdateTransitionStateFactory', () => {
30
39
 
31
40
  stateTransition = new DataContractUpdateTransition({
32
41
  dataContract: updatedRawDataContract,
42
+ protocolVersion: protocolVersion.latestVersion,
33
43
  });
34
44
 
35
45
  executionContext = new StateTransitionExecutionContext();
36
46
 
37
47
  stateTransition.setExecutionContext(executionContext);
38
48
 
39
- stateRepositoryMock.fetchDataContract.resolves(dataContract);
49
+ const validator = new DataContractValidator();
50
+ const dataContractFactory = new DataContractFactory(protocolVersion.latestVersion, validator);
51
+ const wasmDataContract = await dataContractFactory.createFromBuffer(dataContract.toBuffer());
52
+
53
+ const stateRepositoryLike = {
54
+ fetchDataContract: () => wasmDataContract,
55
+ };
40
56
 
41
- validateDataContractUpdateTransitionState = validateDataContractUpdateTransitionStateFactory(
42
- stateRepositoryMock,
57
+ validateTransitionWithExistingContract = (t) => validateDataContractUpdateTransitionState(
58
+ stateRepositoryLike,
59
+ t,
43
60
  );
44
61
  });
45
62
 
46
63
  it('should return invalid result if Data Contract with specified contractId was not found', async () => {
47
- stateRepositoryMock.fetchDataContract.resolves(undefined);
64
+ const stateRepositoryLikeNoDataContract = {
65
+ fetchDataContract: () => undefined,
66
+ };
48
67
 
49
- const result = await validateDataContractUpdateTransitionState(stateTransition);
68
+ const validateTransitionWithNoContract = (t) => validateDataContractUpdateTransitionState(
69
+ stateRepositoryLikeNoDataContract,
70
+ t,
71
+ );
72
+
73
+ const result = await validateTransitionWithNoContract(stateTransition);
50
74
 
51
- expectValidationError(result, DataContractNotPresentError);
75
+ expect(result.isValid()).to.be.false();
52
76
 
53
77
  const [error] = result.getErrors();
54
78
 
79
+ expect(error).to.be.an.instanceOf(DataContractNotPresentError);
55
80
  expect(error.getCode()).to.equal(1018);
56
- expect(Buffer.isBuffer(error.getDataContractId())).to.be.true();
57
81
  expect(error.getDataContractId()).to.deep.equal(dataContract.getId().toBuffer());
58
-
59
- expect(stateRepositoryMock.fetchDataContract).to.be.calledOnceWithExactly(
60
- dataContract.getId(),
61
- executionContext,
62
- );
63
82
  });
64
83
 
65
84
  it('should return invalid result if Data Contract version is not larger by 1', async () => {
66
- dataContract.version -= 1;
85
+ const badlyUpdatedRawDataContract = dataContract.toObject();
86
+ badlyUpdatedRawDataContract.version += 2;
67
87
 
68
- const result = await validateDataContractUpdateTransitionState(stateTransition);
88
+ const badStateTransition = new DataContractUpdateTransition({
89
+ dataContract: badlyUpdatedRawDataContract,
90
+ protocolVersion: protocolVersion.latestVersion,
91
+ });
69
92
 
70
- expectValidationError(result, InvalidDataContractVersionError);
93
+ const result = await validateTransitionWithExistingContract(badStateTransition);
71
94
 
72
- const [error] = result.getErrors();
95
+ expect(result.isValid()).to.be.false();
73
96
 
97
+ const [error] = result.getErrors();
98
+ expect(error).to.be.an.instanceOf(InvalidDataContractVersionError);
74
99
  expect(error.getCode()).to.equal(1050);
75
-
76
- expect(stateRepositoryMock.fetchDataContract).to.be.calledOnceWithExactly(
77
- dataContract.getId(),
78
- executionContext,
79
- );
80
100
  });
81
101
 
82
102
  it('should return valid result', async () => {
83
- const result = await validateDataContractUpdateTransitionState(stateTransition);
103
+ const result = await validateTransitionWithExistingContract(stateTransition);
84
104
 
85
105
  expect(result).to.be.an.instanceOf(ValidationResult);
86
106
  expect(result.isValid()).to.be.true();
87
-
88
- expect(stateRepositoryMock.fetchDataContract).to.be.calledOnceWithExactly(
89
- dataContract.getId(),
90
- executionContext,
91
- );
92
107
  });
93
108
 
94
109
  it('should return valid result on dry run', async () => {
95
- stateRepositoryMock.fetchDataContract.resolves(undefined);
110
+ const stateRepositoryLikeNoDataContract = {
111
+ fetchDataContract: () => undefined,
112
+ };
113
+
114
+ const validateTransitionWithNoContract = (t) => validateDataContractUpdateTransitionState(
115
+ stateRepositoryLikeNoDataContract,
116
+ t,
117
+ );
96
118
 
97
119
  executionContext.enableDryRun();
98
120
 
99
- const result = await validateDataContractUpdateTransitionState(stateTransition);
121
+ const result = await validateTransitionWithNoContract(stateTransition);
100
122
 
101
123
  executionContext.disableDryRun();
102
124
 
103
125
  expect(result).to.be.an.instanceOf(ValidationResult);
104
126
  expect(result.isValid()).to.be.true();
105
-
106
- expect(stateRepositoryMock.fetchDataContract).to.be.calledOnceWithExactly(
107
- dataContract.getId(),
108
- executionContext,
109
- );
110
127
  });
111
128
  });
@@ -0,0 +1,73 @@
1
+ const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
2
+
3
+ const { default: loadWasmDpp } = require('../../../../dist');
4
+
5
+ describe('validateDataContractPatterns', () => {
6
+ let DataContractValidator;
7
+ let IncompatibleRe2PatternError;
8
+
9
+ before(async () => {
10
+ ({
11
+ DataContractValidator,
12
+ IncompatibleRe2PatternError,
13
+ } = await loadWasmDpp());
14
+ });
15
+
16
+ it('should return valid result', () => {
17
+ const rawDataContract = getDataContractFixture().toObject();
18
+ delete rawDataContract.$defs;
19
+
20
+ const schema = {
21
+ type: 'object',
22
+ properties: {
23
+ foo: { type: 'integer' },
24
+ bar: {
25
+ type: 'string',
26
+ pattern: '([a-z]+)+$',
27
+ maxLength: 1337,
28
+ },
29
+ },
30
+ required: ['foo'],
31
+ additionalProperties: false,
32
+ };
33
+
34
+ rawDataContract.documents.totallyFineDocument = schema;
35
+
36
+ const validator = new DataContractValidator();
37
+
38
+ const result = validator.validate(rawDataContract);
39
+ expect(result.isValid()).to.be.true();
40
+ });
41
+
42
+ it('should return invalid result on incompatible pattern', () => {
43
+ const rawDataContract = getDataContractFixture().toObject();
44
+ delete rawDataContract.$defs;
45
+
46
+ const schema = {
47
+ type: 'object',
48
+ properties: {
49
+ foo: { type: 'integer' },
50
+ bar: {
51
+ type: 'string',
52
+ pattern: '^((?!-|_)[a-zA-Z0-9-_]{0,62}[a-zA-Z0-9])$',
53
+ maxLength: 1337,
54
+ },
55
+ },
56
+ required: ['foo'],
57
+ additionalProperties: false,
58
+ };
59
+
60
+ rawDataContract.documents.notFineDocument = schema;
61
+
62
+ const validator = new DataContractValidator();
63
+
64
+ const result = validator.validate(rawDataContract);
65
+
66
+ const [error] = result.getErrors();
67
+
68
+ expect(error).to.be.instanceOf(IncompatibleRe2PatternError);
69
+ expect(error.getCode()).to.equal(1009);
70
+ expect(error.getPattern()).to.equal('^((?!-|_)[a-zA-Z0-9-_]{0,62}[a-zA-Z0-9])$');
71
+ expect(error.getPath()).to.equal('/documents/notFineDocument/properties/bar');
72
+ });
73
+ });
@@ -1,3 +1,4 @@
1
+ const varint = require('varint');
1
2
  const decodeProtocolEntityFactory = require('@dashevo/dpp/lib/decodeProtocolEntityFactory');
2
3
  const ProtocolVersionParsingError = require('@dashevo/dpp/lib/errors/consensus/basic/decode/ProtocolVersionParsingError');
3
4
  const SerializedObjectParsingError = require('@dashevo/dpp/lib/errors/consensus/basic/decode/SerializedObjectParsingError');
@@ -16,8 +17,7 @@ describe('decodeProtocolEntityFactory', () => {
16
17
  beforeEach(() => {
17
18
  parsedProtocolVersion = 0;
18
19
 
19
- protocolVersionBuffer = Buffer.alloc(4);
20
- protocolVersionBuffer.writeUInt32LE(parsedProtocolVersion, 0);
20
+ protocolVersionBuffer = Buffer.from(varint.encode(parsedProtocolVersion));
21
21
 
22
22
  rawEntity = { test: 'successful' };
23
23
  entityBuffer = encode(rawEntity);