@dashevo/wasm-dpp 0.24.0-dev.12 → 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 (118) 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/wasm/wasm_dpp.d.ts +1495 -565
  6. package/karma.conf.js +5 -0
  7. package/lib/identifier/patchIdentifier.ts +5 -4
  8. package/lib/index.ts +1 -1
  9. package/lib/test/bootstrap.js +5 -0
  10. package/lib/test/mocks/getBlsAdapterMock.js +36 -0
  11. package/lib/test/utils/newDocumentsContainer.js +36 -0
  12. package/package.json +7 -4
  13. package/src/bls_adapter.rs +16 -1
  14. package/src/data_contract/data_contract.rs +35 -7
  15. package/src/data_contract/errors/invalid_document_type.rs +1 -1
  16. package/src/data_contract/index.rs +56 -1
  17. package/src/data_contract/mod.rs +1 -0
  18. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +2 -4
  19. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +3 -3
  20. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +2 -4
  21. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +9 -6
  22. package/src/data_contract_factory/data_contract_factory.rs +4 -6
  23. package/src/document/errors/invalid_document_error.rs +10 -9
  24. package/src/document/errors/invalid_initial_revision_error.rs +1 -1
  25. package/src/document/errors/mismatch_owners_ids_error.rs +14 -4
  26. package/src/document/errors/mod.rs +17 -13
  27. package/src/document/errors/no_documents_supplied_error.rs +4 -4
  28. package/src/document/factory.rs +192 -0
  29. package/src/document/mod.rs +222 -30
  30. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +47 -1
  31. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +25 -1
  32. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +65 -0
  33. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +123 -3
  34. package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
  35. package/src/document/validator.rs +30 -0
  36. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
  37. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
  38. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
  39. package/src/errors/dpp_error.rs +17 -0
  40. package/src/errors/from.rs +5 -0
  41. package/src/errors/js_conversion.rs +19 -4
  42. package/src/errors/mod.rs +2 -0
  43. package/src/errors/protocol_error.rs +7 -4
  44. package/src/identifier/mod.rs +48 -3
  45. package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
  46. package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
  47. package/src/identity/errors/mod.rs +7 -0
  48. package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
  49. package/src/identity/identity_facade.rs +2 -4
  50. package/src/identity/identity_public_key/mod.rs +41 -7
  51. package/src/identity/mod.rs +14 -5
  52. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
  53. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
  54. package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
  55. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
  56. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
  57. package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
  58. package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
  59. package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
  60. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +335 -0
  61. package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
  62. package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
  63. package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
  64. package/src/identity/state_transition/identity_create_transition/to_object.rs +46 -0
  65. package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
  66. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +280 -0
  67. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
  68. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
  69. package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
  70. package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
  71. package/src/identity/state_transition/mod.rs +9 -0
  72. package/src/identity/state_transition/validate_public_key_signatures.rs +59 -0
  73. package/src/identity/validation/public_keys_validator.rs +16 -10
  74. package/src/identity_public_key/public_keys_validator.rs +44 -0
  75. package/src/lib.rs +2 -0
  76. package/src/lodash.rs +7 -0
  77. package/src/state_repository.rs +188 -36
  78. package/src/state_transition/mod.rs +12 -0
  79. package/src/utils.rs +102 -7
  80. package/src/validation/json_schema_validator.rs +41 -0
  81. package/src/validation/mod.rs +2 -0
  82. package/src/validation/validation_result.rs +23 -5
  83. package/src/version/mod.rs +2 -0
  84. package/src/version/protocol_version.rs +26 -0
  85. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +579 -502
  86. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +175 -165
  87. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +83 -114
  88. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +82 -91
  89. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +75 -31
  90. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -148
  91. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +63 -75
  92. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +48 -19
  93. package/test/unit/dataContract/DataContract.spec.js +3 -3
  94. package/test/unit/dataContract/createDataContract.spec.js +0 -1
  95. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
  96. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +3 -3
  97. package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
  98. package/test/unit/document/Document.spec.js +147 -155
  99. package/test/unit/document/DocumentFactory.spec.js +325 -91
  100. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +142 -64
  101. package/test/unit/identity/Identity.spec.js +2 -2
  102. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +69 -30
  103. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +32 -32
  104. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +56 -25
  105. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
  106. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +48 -46
  107. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
  108. package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
  109. package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
  110. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
  111. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
  112. package/wasm/package.json +5 -0
  113. package/wasm/wasm_dpp.d.ts +1495 -565
  114. package/wasm/wasm_dpp.js +3654 -1206
  115. package/wasm/wasm_dpp_bg.js +1 -1
  116. package/wasm/wasm_dpp_bg.wasm +0 -0
  117. package/wasm/wasm_dpp_bg.wasm.d.ts +557 -386
  118. package/webpack.config.js +9 -0
@@ -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
  });
@@ -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
  });
@@ -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
  });
@@ -1,9 +1,3 @@
1
- const Identity = require('@dashevo/dpp/lib/identity/Identity');
2
-
3
- const applyIdentityCreateTransitionFactory = require(
4
- '@dashevo/dpp/lib/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory',
5
- );
6
-
7
1
  const getIdentityCreateTransitionFixture = require('@dashevo/dpp/lib/test/fixtures/getIdentityCreateTransitionFixture');
8
2
 
9
3
  const { convertSatoshiToCredits } = require('@dashevo/dpp/lib/identity/creditsConverter');
@@ -11,21 +5,37 @@ const { convertSatoshiToCredits } = require('@dashevo/dpp/lib/identity/creditsCo
11
5
  const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
12
6
 
13
7
  const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
14
- const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
15
- const ReadOperation = require('@dashevo/dpp/lib/stateTransition/fee/operations/ReadOperation');
8
+
9
+ const { default: loadWasmDpp } = require('../../../../../dist');
16
10
 
17
11
  describe('applyIdentityCreateTransitionFactory', () => {
18
12
  let stateTransition;
19
13
  let applyIdentityCreateTransition;
20
14
  let stateRepositoryMock;
21
- let fetchAssetLockTransactionOutputMock;
22
15
  let output;
23
16
  let executionContext;
24
17
 
18
+ let StateTransitionExecutionContext;
19
+ let IdentityCreateTransition;
20
+ let Identity;
21
+
22
+ let applyIdentityCreateTransitionDPP;
23
+
24
+ before(async () => {
25
+ ({
26
+ StateTransitionExecutionContext,
27
+ IdentityCreateTransition,
28
+ applyIdentityCreateTransition: applyIdentityCreateTransitionDPP,
29
+ Identity,
30
+ } = await loadWasmDpp());
31
+ });
32
+
25
33
  beforeEach(function beforeEach() {
26
34
  stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
27
35
 
28
- stateTransition = getIdentityCreateTransitionFixture();
36
+ stateTransition = new IdentityCreateTransition(
37
+ getIdentityCreateTransitionFixture().toObject(),
38
+ );
29
39
 
30
40
  executionContext = new StateTransitionExecutionContext();
31
41
 
@@ -33,19 +43,13 @@ describe('applyIdentityCreateTransitionFactory', () => {
33
43
 
34
44
  output = stateTransition.getAssetLockProof().getOutput();
35
45
 
36
- fetchAssetLockTransactionOutputMock = this.sinonSandbox.stub().resolves(output);
37
-
38
- applyIdentityCreateTransition = applyIdentityCreateTransitionFactory(
46
+ applyIdentityCreateTransition = (st) => applyIdentityCreateTransitionDPP(
39
47
  stateRepositoryMock,
40
- fetchAssetLockTransactionOutputMock,
48
+ st,
41
49
  );
42
50
  });
43
51
 
44
- it('should store identity created from state transition', async () => {
45
- executionContext.addOperation(
46
- new ReadOperation(1),
47
- );
48
-
52
+ it('should store identity created from state transition', async function () {
49
53
  await applyIdentityCreateTransition(stateTransition);
50
54
 
51
55
  const balance = convertSatoshiToCredits(
@@ -60,9 +64,11 @@ describe('applyIdentityCreateTransitionFactory', () => {
60
64
  revision: 0,
61
65
  });
62
66
 
67
+ const { match } = this.sinonSandbox;
68
+
63
69
  expect(stateRepositoryMock.createIdentity).to.have.been.calledOnceWithExactly(
64
- identity,
65
- executionContext,
70
+ match((arg) => expect(arg.toObject()).to.deep.equal(identity.toObject())),
71
+ match.instanceOf(StateTransitionExecutionContext),
66
72
  );
67
73
 
68
74
  const publicKeyHashes = identity
@@ -70,21 +76,15 @@ describe('applyIdentityCreateTransitionFactory', () => {
70
76
  .map((publicKey) => publicKey.hash());
71
77
 
72
78
  expect(stateRepositoryMock.storeIdentityPublicKeyHashes).to.have.been.calledOnceWithExactly(
73
- identity.getId(),
74
- publicKeyHashes,
75
- executionContext,
79
+ match((arg) => expect(arg.toBuffer()).to.deep.equal(identity.getId().toBuffer())),
80
+ match((arg) => expect(arg).to.deep.equal(publicKeyHashes)),
81
+ match.instanceOf(StateTransitionExecutionContext),
76
82
  );
77
83
 
84
+ const outPoint = stateTransition.getAssetLockProof().getOutPoint();
78
85
  expect(stateRepositoryMock.markAssetLockTransactionOutPointAsUsed).to.have.been
79
86
  .calledOnceWithExactly(
80
- stateTransition.getAssetLockProof().getOutPoint(),
81
- executionContext,
82
- );
83
-
84
- expect(fetchAssetLockTransactionOutputMock)
85
- .to.be.calledOnceWithExactly(
86
- stateTransition.getAssetLockProof(),
87
- executionContext,
87
+ match((arg) => Buffer.from(arg).equals(outPoint)),
88
88
  );
89
89
  });
90
90
  });