@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.
- package/Cargo.toml +3 -0
- package/README.md +5 -1
- package/dist/index.js +1 -1
- package/dist/index.js.LICENSE.txt +9 -0
- package/dist/wasm/wasm_dpp.d.ts +1495 -565
- package/karma.conf.js +5 -0
- package/lib/identifier/patchIdentifier.ts +5 -4
- package/lib/index.ts +1 -1
- package/lib/test/bootstrap.js +5 -0
- package/lib/test/mocks/getBlsAdapterMock.js +36 -0
- package/lib/test/utils/newDocumentsContainer.js +36 -0
- package/package.json +7 -4
- package/src/bls_adapter.rs +16 -1
- package/src/data_contract/data_contract.rs +35 -7
- package/src/data_contract/errors/invalid_document_type.rs +1 -1
- package/src/data_contract/index.rs +56 -1
- package/src/data_contract/mod.rs +1 -0
- package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +2 -4
- package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +3 -3
- package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +2 -4
- package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +9 -6
- package/src/data_contract_factory/data_contract_factory.rs +4 -6
- package/src/document/errors/invalid_document_error.rs +10 -9
- package/src/document/errors/invalid_initial_revision_error.rs +1 -1
- package/src/document/errors/mismatch_owners_ids_error.rs +14 -4
- package/src/document/errors/mod.rs +17 -13
- package/src/document/errors/no_documents_supplied_error.rs +4 -4
- package/src/document/factory.rs +192 -0
- package/src/document/mod.rs +222 -30
- package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +47 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +25 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +65 -0
- package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +123 -3
- package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
- package/src/document/validator.rs +30 -0
- package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
- package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
- package/src/errors/dpp_error.rs +17 -0
- package/src/errors/from.rs +5 -0
- package/src/errors/js_conversion.rs +19 -4
- package/src/errors/mod.rs +2 -0
- package/src/errors/protocol_error.rs +7 -4
- package/src/identifier/mod.rs +48 -3
- package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
- package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
- package/src/identity/errors/mod.rs +7 -0
- package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
- package/src/identity/identity_facade.rs +2 -4
- package/src/identity/identity_public_key/mod.rs +41 -7
- package/src/identity/mod.rs +14 -5
- package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
- package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
- package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
- package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
- package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
- package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
- package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
- package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +335 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
- package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
- package/src/identity/state_transition/identity_create_transition/to_object.rs +46 -0
- package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +280 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
- package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
- package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
- package/src/identity/state_transition/mod.rs +9 -0
- package/src/identity/state_transition/validate_public_key_signatures.rs +59 -0
- package/src/identity/validation/public_keys_validator.rs +16 -10
- package/src/identity_public_key/public_keys_validator.rs +44 -0
- package/src/lib.rs +2 -0
- package/src/lodash.rs +7 -0
- package/src/state_repository.rs +188 -36
- package/src/state_transition/mod.rs +12 -0
- package/src/utils.rs +102 -7
- package/src/validation/json_schema_validator.rs +41 -0
- package/src/validation/mod.rs +2 -0
- package/src/validation/validation_result.rs +23 -5
- package/src/version/mod.rs +2 -0
- package/src/version/protocol_version.rs +26 -0
- package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +579 -502
- package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +175 -165
- package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +83 -114
- package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +82 -91
- package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +75 -31
- package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -148
- package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +63 -75
- package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +48 -19
- package/test/unit/dataContract/DataContract.spec.js +3 -3
- package/test/unit/dataContract/createDataContract.spec.js +0 -1
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +3 -3
- package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
- package/test/unit/document/Document.spec.js +147 -155
- package/test/unit/document/DocumentFactory.spec.js +325 -91
- package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +142 -64
- package/test/unit/identity/Identity.spec.js +2 -2
- package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +69 -30
- package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +32 -32
- package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +56 -25
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +48 -46
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
- package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
- package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
- package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
- package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
- package/wasm/package.json +5 -0
- package/wasm/wasm_dpp.d.ts +1495 -565
- package/wasm/wasm_dpp.js +3654 -1206
- package/wasm/wasm_dpp_bg.js +1 -1
- package/wasm/wasm_dpp_bg.wasm +0 -0
- package/wasm/wasm_dpp_bg.wasm.d.ts +557 -386
- package/webpack.config.js +9 -0
package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js
CHANGED
|
@@ -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
|
|
7
|
-
const
|
|
8
|
-
const
|
|
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
|
|
14
|
-
let encodeMock;
|
|
23
|
+
let dataContractJs;
|
|
15
24
|
let dataContract;
|
|
25
|
+
let factoryJs;
|
|
16
26
|
|
|
17
|
-
beforeEach(
|
|
18
|
-
|
|
19
|
-
|
|
27
|
+
beforeEach(async () => {
|
|
28
|
+
({
|
|
29
|
+
Identifier, ProtocolVersionValidator, DocumentValidator, DocumentFactory, DataContract,
|
|
30
|
+
Document,
|
|
31
|
+
} = await loadWasmDpp());
|
|
32
|
+
});
|
|
20
33
|
|
|
21
|
-
|
|
22
|
-
|
|
34
|
+
beforeEach(async () => {
|
|
35
|
+
dataContractJs = getDataContractFixture();
|
|
36
|
+
dataContract = DataContract.fromBuffer(dataContractJs.toBuffer());
|
|
23
37
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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 =
|
|
93
|
+
const result = stateTransitionJs.getTransitions();
|
|
54
94
|
|
|
55
|
-
expect(result).to.equal(
|
|
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:
|
|
65
|
-
transitions:
|
|
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(
|
|
133
|
+
expect(stateTransitionJs.toObject()).to.deep.equal({
|
|
75
134
|
protocolVersion: protocolVersion.latestVersion,
|
|
76
135
|
type: stateTransitionTypes.DOCUMENTS_BATCH,
|
|
77
|
-
ownerId:
|
|
78
|
-
transitions:
|
|
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
|
-
|
|
94
|
-
|
|
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(
|
|
97
|
-
|
|
98
|
-
|
|
153
|
+
expect(rawObjectWithBuffers).to.deep.equal(rawObjectJs);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
99
156
|
|
|
100
|
-
|
|
101
|
-
|
|
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(
|
|
162
|
+
expect(bufferJs).to.deep.equal(buffer);
|
|
104
163
|
});
|
|
105
164
|
});
|
|
106
165
|
|
|
107
166
|
describe('#hash', () => {
|
|
108
|
-
it('should return
|
|
109
|
-
const
|
|
110
|
-
const
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
125
|
-
|
|
175
|
+
describe('#getOwnerId', () => {
|
|
176
|
+
it('should return owner id', async () => {
|
|
177
|
+
const result = stateTransitionJs.getOwnerId();
|
|
126
178
|
|
|
127
|
-
expect(
|
|
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 =
|
|
144
|
-
const result =
|
|
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
|
-
|
|
149
|
-
protocolVersionUInt32.writeUInt32LE(identity.getProtocolVersion(), 0);
|
|
149
|
+
varint.encode(identity.getProtocolVersion());
|
|
150
150
|
|
|
151
151
|
expect(result).to.deep.equal(expectedHash);
|
|
152
152
|
});
|
package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js
CHANGED
|
@@ -1,35 +1,65 @@
|
|
|
1
|
-
const
|
|
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
|
|
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
|
-
|
|
20
|
-
|
|
39
|
+
rawStateTransition = getIdentityCreateTransitionFixture().toObject();
|
|
40
|
+
stateTransition = new IdentityCreateTransition(
|
|
41
|
+
rawStateTransition,
|
|
42
|
+
);
|
|
21
43
|
});
|
|
22
44
|
|
|
23
45
|
describe('#constructor', () => {
|
|
24
|
-
it('should create
|
|
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 = [
|
|
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).
|
|
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
|
|
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 = [
|
|
125
|
+
const publicKeys = [
|
|
126
|
+
new IdentityPublicKey(mockRawPublicKey({ id: 0 })),
|
|
127
|
+
new IdentityPublicKey(mockRawPublicKey({ id: 1 })),
|
|
128
|
+
];
|
|
91
129
|
|
|
92
|
-
stateTransition.
|
|
130
|
+
stateTransition.setPublicKeys([]);
|
|
93
131
|
stateTransition.addPublicKeys(publicKeys);
|
|
94
|
-
expect(stateTransition.getPublicKeys()).
|
|
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
|
-
|
|
15
|
-
const
|
|
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 =
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
applyIdentityCreateTransition = applyIdentityCreateTransitionFactory(
|
|
46
|
+
applyIdentityCreateTransition = (st) => applyIdentityCreateTransitionDPP(
|
|
39
47
|
stateRepositoryMock,
|
|
40
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
});
|