@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
@@ -3,36 +3,68 @@ const getDocumentsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocuments
3
3
  const stateTransitionTypes = require('@dashevo/dpp/lib/stateTransition/stateTransitionTypes');
4
4
  const createDPPMock = require('@dashevo/dpp/lib/test/mocks/createDPPMock');
5
5
  const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
6
- const DocumentFactory = require('@dashevo/dpp/lib/document/DocumentFactory');
7
- const serializer = require('@dashevo/dpp/lib/util/serializer');
8
- const hash = require('@dashevo/dpp/lib/util/hash');
6
+ const DocumentFactoryJs = require('@dashevo/dpp/lib/document/DocumentFactory');
7
+ const lodash = require('lodash');
8
+ const { default: loadWasmDpp } = require('../../../../../dist');
9
+ const newDocumentsContainer = require('../../../../../lib/test/utils/newDocumentsContainer');
10
+
11
+ let Identifier;
12
+ let DocumentFactory;
13
+ let DataContract;
14
+ let Document;
15
+ let DocumentValidator;
16
+ let ProtocolVersionValidator;
9
17
 
10
18
  describe('DocumentsBatchTransition', () => {
19
+ let stateTransitionJs;
11
20
  let stateTransition;
21
+ let documentsJs;
12
22
  let documents;
13
- let hashMock;
14
- let encodeMock;
23
+ let dataContractJs;
15
24
  let dataContract;
25
+ let factoryJs;
16
26
 
17
- beforeEach(function beforeEach() {
18
- dataContract = getDataContractFixture();
19
- documents = getDocumentsFixture(dataContract);
27
+ beforeEach(async () => {
28
+ ({
29
+ Identifier, ProtocolVersionValidator, DocumentValidator, DocumentFactory, DataContract,
30
+ Document,
31
+ } = await loadWasmDpp());
32
+ });
20
33
 
21
- encodeMock = this.sinonSandbox.stub(serializer, 'encode');
22
- hashMock = this.sinonSandbox.stub(hash, 'hash');
34
+ beforeEach(async () => {
35
+ dataContractJs = getDataContractFixture();
36
+ dataContract = DataContract.fromBuffer(dataContractJs.toBuffer());
23
37
 
24
- const factory = new DocumentFactory(createDPPMock(), undefined, undefined);
25
- stateTransition = factory.createStateTransition({
26
- create: documents,
38
+ documentsJs = getDocumentsFixture(dataContractJs);
39
+ documents = documentsJs.map((d) => {
40
+ const doc = new Document(d.toObject(), dataContract);
41
+ doc.setEntropy(d.entropy);
42
+ return doc;
27
43
  });
28
- });
29
44
 
30
- afterEach(() => {
31
- encodeMock.restore();
32
- hashMock.restore();
45
+ const protocolVersionValidatorRs = new ProtocolVersionValidator();
46
+ const documentValidatorRs = new DocumentValidator(protocolVersionValidatorRs);
47
+ const factory = new DocumentFactory(1, documentValidatorRs, {});
48
+ factoryJs = new DocumentFactoryJs(createDPPMock(), undefined, undefined);
49
+
50
+ stateTransitionJs = factoryJs.createStateTransition({
51
+ create: documentsJs,
52
+ });
53
+
54
+ stateTransition = factory.createStateTransition(await newDocumentsContainer({
55
+ create: documents,
56
+ }));
33
57
  });
34
58
 
35
59
  describe('#getProtocolVersion', () => {
60
+ it('should return the current protocol version', () => {
61
+ const result = stateTransitionJs.getProtocolVersion();
62
+
63
+ expect(result).to.equal(protocolVersion.latestVersion);
64
+ });
65
+ });
66
+
67
+ describe('#getProtocolVersion - Rust', () => {
36
68
  it('should return the current protocol version', () => {
37
69
  const result = stateTransition.getProtocolVersion();
38
70
 
@@ -41,6 +73,14 @@ describe('DocumentsBatchTransition', () => {
41
73
  });
42
74
 
43
75
  describe('#getType', () => {
76
+ it('should return State Transition type', () => {
77
+ const result = stateTransitionJs.getType();
78
+
79
+ expect(result).to.equal(stateTransitionTypes.DOCUMENTS_BATCH);
80
+ });
81
+ });
82
+
83
+ describe('#getType - Rust', () => {
44
84
  it('should return State Transition type', () => {
45
85
  const result = stateTransition.getType();
46
86
 
@@ -50,19 +90,38 @@ describe('DocumentsBatchTransition', () => {
50
90
 
51
91
  describe('#getTransitions', () => {
52
92
  it('should return document transitions', () => {
53
- const result = stateTransition.getTransitions();
93
+ const result = stateTransitionJs.getTransitions();
54
94
 
55
- expect(result).to.equal(stateTransition.transitions);
95
+ expect(result).to.equal(stateTransitionJs.transitions);
96
+ });
97
+ });
98
+
99
+ describe('#getTransitions - Rust', () => {
100
+ it('should return document transitions', () => {
101
+ const transitionsJs = stateTransitionJs.getTransitions().map((t) => t.toJSON());
102
+ const transitions = stateTransition.getTransitions().map((t) => t.toJSON());
103
+ expect(transitionsJs).to.deep.equal(transitions);
56
104
  });
57
105
  });
58
106
 
59
107
  describe('#toJSON', () => {
60
108
  it('should return State Transition as JSON', () => {
109
+ expect(stateTransitionJs.toJSON()).to.deep.equal({
110
+ protocolVersion: protocolVersion.latestVersion,
111
+ type: stateTransitionTypes.DOCUMENTS_BATCH,
112
+ ownerId: documentsJs[0].getOwnerId().toString(),
113
+ transitions: stateTransitionJs.getTransitions().map((d) => d.toJSON()),
114
+ signaturePublicKeyId: undefined,
115
+ signature: undefined,
116
+ });
117
+ });
118
+
119
+ it('should return State Transition as JSON - Rust', () => {
61
120
  expect(stateTransition.toJSON()).to.deep.equal({
62
121
  protocolVersion: protocolVersion.latestVersion,
63
122
  type: stateTransitionTypes.DOCUMENTS_BATCH,
64
- ownerId: documents[0].getOwnerId().toString(),
65
- transitions: stateTransition.getTransitions().map((d) => d.toJSON()),
123
+ ownerId: documentsJs[0].getOwnerId().toString(),
124
+ transitions: stateTransitionJs.getTransitions().map((d) => d.toJSON()),
66
125
  signaturePublicKeyId: undefined,
67
126
  signature: undefined,
68
127
  });
@@ -71,77 +130,78 @@ describe('DocumentsBatchTransition', () => {
71
130
 
72
131
  describe('#toObject', () => {
73
132
  it('should return State Transition as plain object', () => {
74
- expect(stateTransition.toObject()).to.deep.equal({
133
+ expect(stateTransitionJs.toObject()).to.deep.equal({
75
134
  protocolVersion: protocolVersion.latestVersion,
76
135
  type: stateTransitionTypes.DOCUMENTS_BATCH,
77
- ownerId: documents[0].getOwnerId(),
78
- transitions: stateTransition.getTransitions().map((d) => d.toObject()),
136
+ ownerId: documentsJs[0].getOwnerId(),
137
+ transitions: stateTransitionJs.getTransitions().map((d) => d.toObject()),
79
138
  signaturePublicKeyId: undefined,
80
139
  signature: undefined,
81
140
  });
82
141
  });
83
- });
84
-
85
- describe('#toBuffer', () => {
86
- it('should return serialized Documents State Transition', () => {
87
- const serializedStateTransition = Buffer.from('123');
88
-
89
- encodeMock.returns(serializedStateTransition);
90
-
91
- const result = stateTransition.toBuffer();
92
142
 
93
- const protocolVersionUInt32 = Buffer.alloc(4);
94
- protocolVersionUInt32.writeUInt32LE(stateTransition.protocolVersion, 0);
143
+ it('should return State Transition as plain object - Rust', () => {
144
+ const rawObject = stateTransition.toObject();
145
+ const rawObjectJs = stateTransitionJs.toObject();
146
+ /* eslint-disable */
147
+ const rawObjectWithBuffers = lodash.cloneDeepWith(rawObject, (value) => {
148
+ if (value instanceof Identifier) {
149
+ return value.toBuffer();
150
+ }
151
+ });
95
152
 
96
- expect(result).to.deep.equal(
97
- Buffer.concat([protocolVersionUInt32, serializedStateTransition]),
98
- );
153
+ expect(rawObjectWithBuffers).to.deep.equal(rawObjectJs);
154
+ });
155
+ });
99
156
 
100
- const dataToEncode = stateTransition.toObject();
101
- delete dataToEncode.protocolVersion;
157
+ describe('#toBuffer', () => {
158
+ it('should return the same bytes as JS version', () => {
159
+ const bufferJs = stateTransitionJs.toBuffer();
160
+ const buffer = stateTransition.toBuffer();
102
161
 
103
- expect(encodeMock).to.have.been.calledOnceWith(dataToEncode);
162
+ expect(bufferJs).to.deep.equal(buffer);
104
163
  });
105
164
  });
106
165
 
107
166
  describe('#hash', () => {
108
- it('should return Documents State Transition hash as hex', () => {
109
- const serializedDocument = Buffer.from('123');
110
- const hashedDocument = '456';
111
-
112
- encodeMock.returns(serializedDocument);
113
- hashMock.returns(hashedDocument);
167
+ it('should return the same hash as the JS version', () => {
168
+ const hashJs = stateTransitionJs.hash();
169
+ const hash = stateTransitionJs.hash();
114
170
 
115
- const result = stateTransition.hash();
116
-
117
- expect(result).to.equal(hashedDocument);
118
-
119
- const dataToEncode = stateTransition.toObject();
120
- delete dataToEncode.protocolVersion;
121
-
122
- expect(encodeMock).to.have.been.calledOnceWith(dataToEncode);
171
+ expect(hash).to.deep.equal(hashJs);
172
+ });
173
+ });
123
174
 
124
- const protocolVersionUInt32 = Buffer.alloc(4);
125
- protocolVersionUInt32.writeUInt32LE(stateTransition.protocolVersion, 0);
175
+ describe('#getOwnerId', () => {
176
+ it('should return owner id', async () => {
177
+ const result = stateTransitionJs.getOwnerId();
126
178
 
127
- expect(hashMock).to.have.been.calledOnceWith(
128
- Buffer.concat([protocolVersionUInt32, serializedDocument]),
129
- );
179
+ expect(result).to.deep.equal(getDocumentsFixture.ownerId);
130
180
  });
131
181
  });
132
182
 
133
- describe('#getOwnerId', () => {
183
+ describe('#getOwnerId - Rust', () => {
134
184
  it('should return owner id', async () => {
135
185
  const result = stateTransition.getOwnerId();
136
186
 
137
- expect(result).to.deep.equal(getDocumentsFixture.ownerId);
187
+ expect(result.toBuffer()).to.deep.equal(getDocumentsFixture.ownerId.toBuffer());
138
188
  });
139
189
  });
140
190
 
141
191
  describe('#getModifiedDataIds', () => {
142
192
  it('should return ids of affected documents', () => {
143
- const expectedIds = documents.map((doc) => doc.getId());
144
- const result = stateTransition.getModifiedDataIds();
193
+ const expectedIds = documentsJs.map((doc) => doc.getId());
194
+ const result = stateTransitionJs.getModifiedDataIds();
195
+
196
+ expect(result.length).to.be.equal(10);
197
+ expect(result).to.be.deep.equal(expectedIds);
198
+ });
199
+ });
200
+
201
+ describe('#getModifiedDataIds - Rust', () => {
202
+ it('should return ids of affected documents', () => {
203
+ const expectedIds = documentsJs.map((doc) => doc.getId().toBuffer());
204
+ const result = stateTransition.getModifiedDataIds().map((id) => id.toBuffer());
145
205
 
146
206
  expect(result.length).to.be.equal(10);
147
207
  expect(result).to.be.deep.equal(expectedIds);
@@ -149,18 +209,36 @@ describe('DocumentsBatchTransition', () => {
149
209
  });
150
210
 
151
211
  describe('#isDataContractStateTransition', () => {
212
+ it('should return false', () => {
213
+ expect(stateTransitionJs.isDataContractStateTransition()).to.be.false();
214
+ });
215
+ });
216
+
217
+ describe('#isDataContractStateTransition - Rust', () => {
152
218
  it('should return false', () => {
153
219
  expect(stateTransition.isDataContractStateTransition()).to.be.false();
154
220
  });
155
221
  });
156
222
 
157
223
  describe('#isDocumentStateTransition', () => {
224
+ it('should return true', () => {
225
+ expect(stateTransitionJs.isDocumentStateTransition()).to.be.true();
226
+ });
227
+ });
228
+
229
+ describe('#isDocumentStateTransition - Rust', () => {
158
230
  it('should return true', () => {
159
231
  expect(stateTransition.isDocumentStateTransition()).to.be.true();
160
232
  });
161
233
  });
162
234
 
163
235
  describe('#isIdentityStateTransition', () => {
236
+ it('should return false', () => {
237
+ expect(stateTransitionJs.isIdentityStateTransition()).to.be.false();
238
+ });
239
+ });
240
+
241
+ describe('#isIdentityStateTransition - Rust', () => {
164
242
  it('should return false', () => {
165
243
  expect(stateTransition.isIdentityStateTransition()).to.be.false();
166
244
  });
@@ -66,7 +66,7 @@ describe('applyDocumentsBatchTransitionFactory', () => {
66
66
 
67
67
  stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
68
68
  stateRepositoryMock.fetchDataContract.resolves(dataContract);
69
- stateRepositoryMock.fetchLatestPlatformBlockTime.returns(blockTimeMs);
69
+ stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTimeMs);
70
70
 
71
71
  fetchDocumentsMock = this.sinonSandbox.stub();
72
72
  fetchDocumentsMock.resolves([
@@ -68,7 +68,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
68
68
 
69
69
  blockTime = Date.now();
70
70
 
71
- stateRepositoryMock.fetchLatestPlatformBlockTime.returns(blockTime);
71
+ stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTime);
72
72
 
73
73
  fetchDocumentsMock = this.sinonSandbox.stub().resolves([]);
74
74
 
@@ -1,3 +1,4 @@
1
+ const varint = require('varint');
1
2
  const JSIdentityPublicKey = require('@dashevo/dpp/lib/identity/IdentityPublicKey');
2
3
  const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
3
4
  const JSIdentity = require('@dashevo/dpp/lib/identity/Identity');
@@ -145,8 +146,7 @@ describe('Identity', () => {
145
146
  const identityDataToEncode = identity.toObject();
146
147
  delete identityDataToEncode.protocolVersion;
147
148
 
148
- const protocolVersionUInt32 = Buffer.alloc(4);
149
- protocolVersionUInt32.writeUInt32LE(identity.getProtocolVersion(), 0);
149
+ varint.encode(identity.getProtocolVersion());
150
150
 
151
151
  expect(result).to.deep.equal(expectedHash);
152
152
  });
@@ -4,24 +4,18 @@ describe('IdentityPublicKey', () => {
4
4
  let rawPublicKey;
5
5
  let publicKey;
6
6
  let IdentityPublicKey;
7
- let KeyPurpose;
8
- let KeyType;
9
- let KeySecurityLevel;
10
7
 
11
8
  beforeEach(async () => {
12
- ({
13
- IdentityPublicKey, KeyPurpose, KeyType, KeySecurityLevel,
14
- } = await loadWasmDpp());
9
+ ({ IdentityPublicKey } = await loadWasmDpp());
15
10
 
16
11
  rawPublicKey = {
17
12
  id: 0,
18
- type: KeyType.ECDSA_SECP256K1,
13
+ type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
19
14
  data: Buffer.from('AkVuTKyF3YgKLAQlLEtaUL2HTditwGILfWUVqjzYnIgH', 'base64'),
20
- purpose: KeyPurpose.AUTHENTICATION,
21
- securityLevel: KeySecurityLevel.MASTER,
15
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
16
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
22
17
  readOnly: false,
23
18
  };
24
-
25
19
  publicKey = new IdentityPublicKey(rawPublicKey);
26
20
  });
27
21
 
@@ -89,9 +83,9 @@ describe('IdentityPublicKey', () => {
89
83
 
90
84
  describe('#setPurpose', () => {
91
85
  it('should set data', () => {
92
- publicKey.setPurpose(KeyPurpose.DECRYPTION);
86
+ publicKey.setPurpose(IdentityPublicKey.PURPOSES.DECRYPTION);
93
87
 
94
- expect(publicKey.getPurpose()).to.equal(KeyPurpose.DECRYPTION);
88
+ expect(publicKey.getPurpose()).to.equal(IdentityPublicKey.PURPOSES.DECRYPTION);
95
89
  });
96
90
  });
97
91
 
@@ -103,9 +97,9 @@ describe('IdentityPublicKey', () => {
103
97
 
104
98
  describe('#setSecurityLevel', () => {
105
99
  it('should set data', () => {
106
- publicKey.setSecurityLevel(KeySecurityLevel.MEDIUM);
100
+ publicKey.setSecurityLevel(IdentityPublicKey.SECURITY_LEVELS.MEDIUM);
107
101
 
108
- expect(publicKey.getSecurityLevel()).to.equal(KeySecurityLevel.MEDIUM);
102
+ expect(publicKey.getSecurityLevel()).to.equal(IdentityPublicKey.SECURITY_LEVELS.MEDIUM);
109
103
  });
110
104
  });
111
105
 
@@ -151,10 +145,10 @@ describe('IdentityPublicKey', () => {
151
145
  it('should return data in case ECDSA_HASH160', () => {
152
146
  rawPublicKey = {
153
147
  id: 0,
154
- type: KeyType.ECDSA_HASH160,
148
+ type: IdentityPublicKey.TYPES.ECDSA_HASH160,
155
149
  data: Buffer.from('AkVuTKyF3YgKLAQlLEtaUL2HTditwGILfWUVqjzYnIgH', 'base64'),
156
- purpose: KeyPurpose.AUTHENTICATION,
157
- securityLevel: KeySecurityLevel.MASTER,
150
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
151
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
158
152
  readOnly: false,
159
153
  disabledAt: 123,
160
154
  };
@@ -171,10 +165,10 @@ describe('IdentityPublicKey', () => {
171
165
  it('should return original public key hash in case BLS12_381', () => {
172
166
  rawPublicKey = {
173
167
  id: 0,
174
- type: KeyType.BLS12_381,
168
+ type: IdentityPublicKey.TYPES.BLS12_381,
175
169
  data: Buffer.from('01fac99ca2c8f39c286717c213e190aba4b7af76db320ec43f479b7d9a2012313a0ae59ca576edf801444bc694686694', 'hex'),
176
- purpose: KeyPurpose.AUTHENTICATION,
177
- securityLevel: KeySecurityLevel.MASTER,
170
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
171
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
178
172
  readOnly: false,
179
173
  disabledAt: 123,
180
174
  };
@@ -191,10 +185,10 @@ describe('IdentityPublicKey', () => {
191
185
  it('should return data in case BIP13_SCRIPT_HASH', () => {
192
186
  rawPublicKey = {
193
187
  id: 0,
194
- type: KeyType.BIP13_SCRIPT_HASH,
188
+ type: IdentityPublicKey.TYPES.BIP13_SCRIPT_HASH,
195
189
  data: Buffer.from('54c557e07dde5bb6cb791c7a540e0a4796f5e97e', 'hex'),
196
- purpose: KeyPurpose.AUTHENTICATION,
197
- securityLevel: KeySecurityLevel.MASTER,
190
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
191
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
198
192
  readOnly: false,
199
193
  disabledAt: 123,
200
194
  };
@@ -215,10 +209,10 @@ describe('IdentityPublicKey', () => {
215
209
 
216
210
  expect(jsonPublicKey).to.deep.equal({
217
211
  id: 0,
218
- type: KeyType.ECDSA_SECP256K1,
212
+ type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
219
213
  data: 'AkVuTKyF3YgKLAQlLEtaUL2HTditwGILfWUVqjzYnIgH',
220
- purpose: KeyPurpose.AUTHENTICATION,
221
- securityLevel: KeySecurityLevel.MASTER,
214
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
215
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
222
216
  readOnly: false,
223
217
  });
224
218
  });
@@ -230,10 +224,10 @@ describe('IdentityPublicKey', () => {
230
224
 
231
225
  expect(jsonPublicKey).to.deep.equal({
232
226
  id: 0,
233
- type: KeyType.ECDSA_SECP256K1,
227
+ type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
234
228
  data: 'AkVuTKyF3YgKLAQlLEtaUL2HTditwGILfWUVqjzYnIgH',
235
- purpose: KeyPurpose.AUTHENTICATION,
236
- securityLevel: KeySecurityLevel.MASTER,
229
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
230
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
237
231
  readOnly: false,
238
232
  disabledAt: 42,
239
233
  });
@@ -242,7 +236,7 @@ describe('IdentityPublicKey', () => {
242
236
 
243
237
  describe('#isMaster', () => {
244
238
  it('should return true when public key has MASTER security level', () => {
245
- publicKey.setSecurityLevel(KeySecurityLevel.MASTER);
239
+ publicKey.setSecurityLevel(IdentityPublicKey.SECURITY_LEVELS.MASTER);
246
240
 
247
241
  const result = publicKey.isMaster();
248
242
 
@@ -250,7 +244,7 @@ describe('IdentityPublicKey', () => {
250
244
  });
251
245
 
252
246
  it('should return false when public key doesn\'t have MASTER security level', () => {
253
- publicKey.setSecurityLevel(KeySecurityLevel.HIGH);
247
+ publicKey.setSecurityLevel(IdentityPublicKey.SECURITY_LEVELS.HIGH);
254
248
 
255
249
  const result = publicKey.isMaster();
256
250
 
@@ -1,35 +1,65 @@
1
- const IdentityPublicKey = require('@dashevo/dpp/lib/identity/IdentityPublicKey');
2
-
3
- const stateTransitionTypes = require(
4
- '@dashevo/dpp/lib/stateTransition/stateTransitionTypes',
5
- );
1
+ const getIdentityCreateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityCreateTransitionFixture');
2
+ const getChainAssetLockProofFixture = require('@dashevo/dpp/lib/test/fixtures/getChainAssetLockProofFixture');
6
3
 
4
+ const stateTransitionTypes = require('@dashevo/dpp/lib/stateTransition/stateTransitionTypes');
7
5
  const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
8
- const IdentityCreateTransition = require('@dashevo/dpp/lib/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition');
9
- const Identifier = require('@dashevo/dpp/lib/identifier/Identifier');
10
-
11
- const getIdentityCreateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityCreateTransitionFixture');
12
- const InstantAssetLockProof = require('@dashevo/dpp/lib/identity/stateTransition/assetLockProof/instant/InstantAssetLockProof');
6
+ const { default: loadWasmDpp } = require('../../../../../dist');
13
7
 
14
8
  describe('IdentityCreateTransition', () => {
15
9
  let rawStateTransition;
16
10
  let stateTransition;
17
11
 
12
+ let IdentityCreateTransition;
13
+ let InstantAssetLockProof;
14
+ let KeyType;
15
+ let KeyPurpose;
16
+ let KeySecurityLevel;
17
+ let IdentityPublicKey;
18
+ let Identifier;
19
+
20
+ const mockRawPublicKey = (params = {}) => ({
21
+ id: 0,
22
+ type: KeyType.ECDSA_SECP256K1,
23
+ data: Buffer.from('AkVuTKyF3YgKLAQlLEtaUL2HTditwGILfWUVqjzYnIgH', 'base64'),
24
+ purpose: KeyPurpose.AUTHENTICATION,
25
+ securityLevel: KeySecurityLevel.MASTER,
26
+ signature: Buffer.alloc(32).fill(1),
27
+ readOnly: false,
28
+ ...params,
29
+ });
30
+
31
+ before(async () => {
32
+ ({
33
+ IdentityCreateTransition, IdentityPublicKey, KeyType, KeyPurpose, KeySecurityLevel,
34
+ InstantAssetLockProof, Identifier,
35
+ } = await loadWasmDpp());
36
+ });
37
+
18
38
  beforeEach(() => {
19
- stateTransition = getIdentityCreateTransitionFixture();
20
- rawStateTransition = stateTransition.toObject();
39
+ rawStateTransition = getIdentityCreateTransitionFixture().toObject();
40
+ stateTransition = new IdentityCreateTransition(
41
+ rawStateTransition,
42
+ );
21
43
  });
22
44
 
23
45
  describe('#constructor', () => {
24
- it('should create an instance with specified data', () => {
46
+ it('should create instance with specified data', () => {
25
47
  expect(stateTransition.getAssetLockProof().toObject()).to.deep.equal(
26
48
  rawStateTransition.assetLockProof,
27
49
  );
28
50
 
29
- expect(stateTransition.publicKeys).to.deep.equal([
30
- new IdentityPublicKey(rawStateTransition.publicKeys[0]),
51
+ expect(stateTransition.publicKeys.map((key) => key.toObject())).to.deep.equal([
52
+ new IdentityPublicKey(rawStateTransition.publicKeys[0]).toObject(),
31
53
  ]);
32
54
  });
55
+
56
+ it('should create instance with chain asset lock proof', () => {
57
+ const stObject = stateTransition.toObject();
58
+ stObject.assetLockProof = getChainAssetLockProofFixture().toObject();
59
+ stateTransition = new IdentityCreateTransition(stObject);
60
+ expect(stateTransition.getAssetLockProof().toObject())
61
+ .to.deep.equal(stObject.assetLockProof);
62
+ });
33
63
  });
34
64
 
35
65
  describe('#getType', () => {
@@ -53,8 +83,8 @@ describe('IdentityCreateTransition', () => {
53
83
  new InstantAssetLockProof(rawStateTransition.assetLockProof),
54
84
  );
55
85
 
56
- expect(stateTransition.identityId).to.deep.equal(
57
- stateTransition.getAssetLockProof().createIdentifier(),
86
+ expect(stateTransition.identityId.toBuffer()).to.deep.equal(
87
+ stateTransition.getAssetLockProof().createIdentifier().toBuffer(),
58
88
  );
59
89
  });
60
90
  });
@@ -69,44 +99,53 @@ describe('IdentityCreateTransition', () => {
69
99
 
70
100
  describe('#setPublicKeys', () => {
71
101
  it('should set public keys', () => {
72
- const publicKeys = [new IdentityPublicKey(), new IdentityPublicKey()];
102
+ const publicKeys = [
103
+ new IdentityPublicKey(mockRawPublicKey({ id: 0 })),
104
+ new IdentityPublicKey(mockRawPublicKey({ id: 1 })),
105
+ ];
73
106
 
74
107
  stateTransition.setPublicKeys(publicKeys);
75
108
 
76
- expect(stateTransition.publicKeys).to.have.deep.members(publicKeys);
109
+ expect(stateTransition.publicKeys.map((key) => key.toObject()))
110
+ .to.have.deep.members(publicKeys.map((key) => key.toObject()));
77
111
  });
78
112
  });
79
113
 
80
114
  describe('#getPublicKeys', () => {
81
115
  it('should return set public keys', () => {
82
- expect(stateTransition.getPublicKeys()).to.deep.equal(
83
- rawStateTransition.publicKeys.map((rawPublicKey) => new IdentityPublicKey(rawPublicKey)),
116
+ expect(stateTransition.getPublicKeys().map((key) => key.toObject())).to.deep.equal(
117
+ rawStateTransition.publicKeys
118
+ .map((rawPublicKey) => new IdentityPublicKey(rawPublicKey).toObject()),
84
119
  );
85
120
  });
86
121
  });
87
122
 
88
123
  describe('#addPublicKeys', () => {
89
124
  it('should add more public keys', () => {
90
- const publicKeys = [new IdentityPublicKey(), new IdentityPublicKey()];
125
+ const publicKeys = [
126
+ new IdentityPublicKey(mockRawPublicKey({ id: 0 })),
127
+ new IdentityPublicKey(mockRawPublicKey({ id: 1 })),
128
+ ];
91
129
 
92
- stateTransition.publicKeys = [];
130
+ stateTransition.setPublicKeys([]);
93
131
  stateTransition.addPublicKeys(publicKeys);
94
- expect(stateTransition.getPublicKeys()).to.have.deep.members(publicKeys);
132
+ expect(stateTransition.getPublicKeys().map((key) => key.toObject()))
133
+ .to.have.deep.members(publicKeys.map((key) => key.toObject()));
95
134
  });
96
135
  });
97
136
 
98
137
  describe('#getIdentityId', () => {
99
138
  it('should return identity id', () => {
100
- expect(stateTransition.getIdentityId()).to.deep.equal(
101
- stateTransition.getAssetLockProof().createIdentifier(),
139
+ expect(stateTransition.getIdentityId().toBuffer()).to.deep.equal(
140
+ stateTransition.getAssetLockProof().createIdentifier().toBuffer(),
102
141
  );
103
142
  });
104
143
  });
105
144
 
106
145
  describe('#getOwnerId', () => {
107
146
  it('should return owner id', () => {
108
- expect(stateTransition.getOwnerId()).to.equal(
109
- stateTransition.getIdentityId(),
147
+ expect(stateTransition.getOwnerId().toBuffer()).to.deep.equal(
148
+ stateTransition.getIdentityId().toBuffer(),
110
149
  );
111
150
  });
112
151
  });
@@ -158,8 +197,8 @@ describe('IdentityCreateTransition', () => {
158
197
  const identityId = result[0];
159
198
 
160
199
  expect(identityId).to.be.an.instanceOf(Identifier);
161
- expect(identityId).to.be.deep.equal(
162
- new IdentityCreateTransition(rawStateTransition).getIdentityId(),
200
+ expect(identityId.toBuffer()).to.be.deep.equal(
201
+ new IdentityCreateTransition(rawStateTransition).getIdentityId().toBuffer(),
163
202
  );
164
203
  });
165
204
  });