@dashevo/wasm-dpp 0.25.6 → 0.25.9
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 -2
- package/README.md +1 -1
- package/dist/wasm/wasm_dpp.d.ts +808 -712
- package/dist/wasm/wasm_dpp.js +853 -452
- package/dist/wasm/wasm_dpp_bg.js +1 -1
- package/lib/bls/bls.js +48 -0
- package/lib/test/fixtures/getChainAssetLockProofFixture.js +20 -1
- package/lib/test/fixtures/getDataContractFixture.js +4 -6
- package/lib/test/fixtures/getDocumentTransitionsFixture.js +31 -1
- package/lib/test/fixtures/getInstantAssetLockProofFixture.js +32 -12
- package/lib/test/mocks/getBlsAdapterMock.js +1 -1
- package/lib/utils/creditsConverter.js +14 -0
- package/lib/utils/hash.js +18 -0
- package/lib/wasm/wasm_dpp.d.ts +808 -712
- package/package.json +3 -5
- package/src/dash_platform_protocol.rs +5 -5
- package/src/document/errors/invalid_document_error.rs +5 -0
- package/src/document/extended_document.rs +15 -0
- package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +219 -214
- package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +1 -1
- package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +4 -2
- package/src/errors/consensus/basic/json_schema_error.rs +35 -5
- package/src/identity/identity_facade.rs +7 -5
- package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +32 -17
- package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +22 -13
- package/src/identity/state_transition/asset_lock_proof/mod.rs +12 -11
- package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +1 -0
- package/src/identity/state_transition/identity_create_transition/to_object.rs +1 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +1 -0
- package/src/identity/state_transition/identity_topup_transition/to_object.rs +1 -0
- package/src/lib.rs +1 -1
- package/src/validation/mod.rs +2 -2
- package/src/validation/validation_result.rs +16 -15
- package/test/integration/document/DocumentFacade.spec.js +11 -27
- package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +9 -19
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +2 -2
- package/test/integration/document/validation/validateDocumentFactory.spec.js +2 -2
- package/test/integration/identity/IdentityFacade.spec.js +1 -2
- package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +2 -2
- package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +2 -2
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +6 -8
- package/test/unit/document/Document.spec.js +30 -52
- package/test/unit/document/DocumentFactory.spec.js +2 -2
- package/test/unit/document/errors/InvalidDocumentError.spec.js +9 -9
- package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +158 -155
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +132 -134
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +3 -3
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +568 -591
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +5 -13
- package/test/unit/identity/Identity.spec.js +2 -2
- package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +9 -28
- package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +19 -27
- package/lib/test/fixtures/getDashPayContractFixture.js +0 -1
- package/lib/test/fixtures/getDashPayDocumentFixture.js +0 -1
- package/lib/test/fixtures/getDpnsContractFixture.js +0 -1
- package/lib/test/fixtures/getDpnsDocumentFixture.js +0 -1
- package/lib/test/fixtures/getFeatureFlagsContractFixture.js +0 -1
- package/lib/test/fixtures/getFeatureFlagsDocumentsFixture.js +0 -1
- package/lib/test/fixtures/getIdentityTopUpTransitionFixtureJs.js +0 -1
- package/lib/test/fixtures/getMasternodeRewardShareDocumentsFixture.js +0 -1
- package/lib/test/fixtures/getMasternodeRewardSharesContractFixture.js +0 -1
- package/lib/test/fixtures/getPreorderDocumentFixture.js +0 -1
- package/lib/test/fixtures/getRawTransactionFixture.js +0 -1
- package/lib/test/fixtures/js/generateRandomIdentifier.js +0 -1
- package/lib/test/fixtures/js/getChainAssetLockProofFixture.js +0 -1
- package/lib/test/fixtures/js/getDataContractFixture.js +0 -1
- package/lib/test/fixtures/js/getDocumentTransitionsFixture.js +0 -1
- package/lib/test/fixtures/js/getDocumentsFixture.js +0 -1
- package/lib/test/fixtures/js/getInstantAssetLockProofFixture.js +0 -1
- package/test/integration/DashPlatformProtocol.spec.js +0 -53
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +0 -195
- package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -500
- package/test/integration/stateTransition/calculateStateTransitionFeeFromOperationsFactory.spec.js +0 -53
- package/test/unit/dataContract/getBinaryPropertiesFromSchema.spec.js +0 -103
- package/test/unit/dataContract/getPropertyDefinitionByPath.spec.js +0 -84
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +0 -45
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +0 -49
- package/test/unit/dataTrigger/DataTrigger.spec.js +0 -132
- package/test/unit/dataTrigger/DataTriggerExecutionContext.spec.js +0 -29
- package/test/unit/dataTrigger/dashpayDataTriggers/createContactRequestDataTrigger.spec.js +0 -107
- package/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js +0 -382
- package/test/unit/dataTrigger/featureFlagDataTriggers/createFeatureFlagDataTrigger.spec.js +0 -99
- package/test/unit/dataTrigger/getDataTriggersFactory.spec.js +0 -113
- package/test/unit/dataTrigger/rejectDataTrigger.spec.js +0 -51
- package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +0 -202
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +0 -256
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +0 -94
- package/test/unit/errors/consensus/codes.spec.js +0 -102
- package/test/unit/identity/creditsConverter.spec.js +0 -34
- package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +0 -83
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +0 -138
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +0 -100
- package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +0 -36
- package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +0 -63
- package/test/unit/identity/validation/validateRequiredPurposeAndSecurityLevelFactory.spec.js +0 -47
package/lib/bls/bls.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
const EventEmitter = require('events');
|
|
2
|
+
const BlsSignatures = require('@dashevo/bls');
|
|
3
|
+
|
|
4
|
+
const eventNames = {
|
|
5
|
+
LOADED_EVENT: 'LOADED',
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
const events = new EventEmitter();
|
|
9
|
+
let isLoading = false;
|
|
10
|
+
let instance = null;
|
|
11
|
+
|
|
12
|
+
function compileWasmModule() {
|
|
13
|
+
isLoading = true;
|
|
14
|
+
return BlsSignatures().then((loadedInstance) => {
|
|
15
|
+
instance = loadedInstance;
|
|
16
|
+
isLoading = false;
|
|
17
|
+
events.emit(eventNames.LOADED_EVENT);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const bls = {
|
|
22
|
+
/**
|
|
23
|
+
* Compiles BlsSignature instance if it wasn't compiled yet
|
|
24
|
+
* and returns module instance
|
|
25
|
+
* @return {Promise<BlsSignatures>}
|
|
26
|
+
*/
|
|
27
|
+
getInstance() {
|
|
28
|
+
return new Promise((resolve) => {
|
|
29
|
+
if (instance) {
|
|
30
|
+
resolve(instance);
|
|
31
|
+
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (isLoading) {
|
|
36
|
+
events.once(eventNames.LOADED_EVENT, () => {
|
|
37
|
+
resolve(instance);
|
|
38
|
+
});
|
|
39
|
+
} else {
|
|
40
|
+
compileWasmModule().then(() => {
|
|
41
|
+
resolve(instance);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
module.exports = bls;
|
|
@@ -1 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
const { ChainAssetLockProof } = require('../../..');
|
|
2
|
+
|
|
3
|
+
function getChainAssetLockProofFixture() {
|
|
4
|
+
const outPoint = {
|
|
5
|
+
outpointHash: '6e200d059fb567ba19e92f5c2dcd3dde522fd4e0a50af223752db16158dabb1d',
|
|
6
|
+
outpointIndex: 0,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const binaryTransactionHash = Buffer.from(outPoint.outpointHash, 'hex');
|
|
10
|
+
const indexBuffer = Buffer.alloc(4);
|
|
11
|
+
|
|
12
|
+
indexBuffer.writeUInt32LE(outPoint.outpointIndex, 0);
|
|
13
|
+
|
|
14
|
+
return new ChainAssetLockProof({
|
|
15
|
+
coreChainLockedHeight: 42,
|
|
16
|
+
outPoint: Buffer.concat([binaryTransactionHash, indexBuffer]),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
module.exports = getChainAssetLockProofFixture;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
const crypto = require('crypto');
|
|
2
|
-
const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
|
|
3
|
-
const JsIdentifier = require('@dashevo/dpp/lib/identifier/Identifier');
|
|
4
2
|
const generateRandomIdentifierAsync = require('../utils/generateRandomIdentifierAsync');
|
|
5
3
|
const { default: loadWasmDpp } = require('../../..');
|
|
6
|
-
|
|
4
|
+
const { DataContractFactory, getLatestProtocolVersion, Identifier } = require('../../..');
|
|
7
5
|
|
|
8
6
|
let randomOwnerId = null;
|
|
9
7
|
|
|
@@ -13,7 +11,7 @@ let randomOwnerId = null;
|
|
|
13
11
|
* @return {Promise<DataContract>}
|
|
14
12
|
*/
|
|
15
13
|
module.exports = async function getDataContractFixture(ownerId = randomOwnerId) {
|
|
16
|
-
|
|
14
|
+
await loadWasmDpp();
|
|
17
15
|
|
|
18
16
|
if (!randomOwnerId) {
|
|
19
17
|
randomOwnerId = await generateRandomIdentifierAsync();
|
|
@@ -191,7 +189,7 @@ module.exports = async function getDataContractFixture(ownerId = randomOwnerId)
|
|
|
191
189
|
identifierField: {
|
|
192
190
|
type: 'array',
|
|
193
191
|
byteArray: true,
|
|
194
|
-
contentMediaType:
|
|
192
|
+
contentMediaType: Identifier.MEDIA_TYPE,
|
|
195
193
|
minItems: 32,
|
|
196
194
|
maxItems: 32,
|
|
197
195
|
},
|
|
@@ -256,7 +254,7 @@ module.exports = async function getDataContractFixture(ownerId = randomOwnerId)
|
|
|
256
254
|
},
|
|
257
255
|
};
|
|
258
256
|
const factory = new DataContractFactory(
|
|
259
|
-
|
|
257
|
+
getLatestProtocolVersion(),
|
|
260
258
|
entropyGenerator,
|
|
261
259
|
);
|
|
262
260
|
|
|
@@ -1 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
const crypto = require('crypto');
|
|
2
|
+
const { DocumentFactory } = require('../../..');
|
|
3
|
+
|
|
4
|
+
const getDocumentsFixture = require('./getDocumentsFixture');
|
|
5
|
+
|
|
6
|
+
async function getDocumentTransitionsFixture(documents = {}) {
|
|
7
|
+
const {
|
|
8
|
+
create: createDocuments,
|
|
9
|
+
replace: replaceDocuments,
|
|
10
|
+
delete: deleteDocuments,
|
|
11
|
+
} = documents;
|
|
12
|
+
|
|
13
|
+
const fixtureDocuments = await getDocumentsFixture();
|
|
14
|
+
|
|
15
|
+
const entropyGenerator = {
|
|
16
|
+
generate() {
|
|
17
|
+
return crypto.randomBytes(32);
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
const factory = new DocumentFactory(1, entropyGenerator);
|
|
21
|
+
|
|
22
|
+
const stateTransition = factory.createStateTransition({
|
|
23
|
+
create: (createDocuments || fixtureDocuments),
|
|
24
|
+
replace: (replaceDocuments || []),
|
|
25
|
+
delete: (deleteDocuments || []),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
return stateTransition.getTransitions();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
module.exports = getDocumentTransitionsFixture;
|
|
@@ -19,9 +19,29 @@ async function getInstantAssetLockProofFixture(oneTimePrivateKey = new PrivateKe
|
|
|
19
19
|
const privateKey = new PrivateKey(privateKeyHex);
|
|
20
20
|
const fromAddress = privateKey.toAddress();
|
|
21
21
|
|
|
22
|
-
const
|
|
22
|
+
const transaction = new Transaction(undefined);
|
|
23
23
|
|
|
24
|
-
const
|
|
24
|
+
const output = {
|
|
25
|
+
satoshis: 100000,
|
|
26
|
+
address: fromAddress.toString(),
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const realOutput = {
|
|
30
|
+
satoshis: output.satoshis,
|
|
31
|
+
script: Script
|
|
32
|
+
.buildPublicKeyHashOut(oneTimePrivateKey.toAddress()).toString(),
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const payload = Transaction.Payload.AssetLockPayload.fromJSON({
|
|
36
|
+
version: 1,
|
|
37
|
+
creditOutputs: [{
|
|
38
|
+
satoshis: realOutput.satoshis,
|
|
39
|
+
script: realOutput.script,
|
|
40
|
+
}],
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
transaction
|
|
44
|
+
.setType(Transaction.TYPES.TRANSACTION_ASSET_LOCK)
|
|
25
45
|
.from({
|
|
26
46
|
address: fromAddress,
|
|
27
47
|
txId: 'a477af6b2667c29670467e4e0728b685ee07b240235771862318e29ddbe58458',
|
|
@@ -30,15 +50,16 @@ async function getInstantAssetLockProofFixture(oneTimePrivateKey = new PrivateKe
|
|
|
30
50
|
.toString(),
|
|
31
51
|
satoshis: 100000,
|
|
32
52
|
})
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
53
|
+
.addOutput(
|
|
54
|
+
new Transaction.Output({
|
|
55
|
+
satoshis: realOutput.satoshis,
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
script: new Script().add(Opcode.OP_RETURN).add(Buffer.alloc(0)),
|
|
58
|
+
}),
|
|
59
|
+
)
|
|
60
|
+
// .change(changeAddress)
|
|
61
|
+
// @ts-ignore
|
|
62
|
+
.setExtraPayload(payload)
|
|
42
63
|
.sign(privateKey);
|
|
43
64
|
|
|
44
65
|
const instantLock = new InstantLock({
|
|
@@ -55,7 +76,6 @@ async function getInstantAssetLockProofFixture(oneTimePrivateKey = new PrivateKe
|
|
|
55
76
|
});
|
|
56
77
|
|
|
57
78
|
return new InstantAssetLockProof({
|
|
58
|
-
type: 0,
|
|
59
79
|
instantLock: instantLock.toBuffer(),
|
|
60
80
|
transaction: transaction.toBuffer(),
|
|
61
81
|
outputIndex: 0,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const RATIO = 1000;
|
|
2
|
+
function convertSatoshiToCredits(amount) {
|
|
3
|
+
return amount * RATIO;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
function convertCreditsToSatoshi(amount) {
|
|
7
|
+
return Math.floor(amount / RATIO);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
module.exports = {
|
|
11
|
+
convertSatoshiToCredits,
|
|
12
|
+
convertCreditsToSatoshi,
|
|
13
|
+
RATIO,
|
|
14
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const crypto = require('crypto');
|
|
2
|
+
|
|
3
|
+
function sha256(payload) {
|
|
4
|
+
return crypto.createHash('sha256')
|
|
5
|
+
.update(payload)
|
|
6
|
+
.digest();
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Serialize and hash payload using double sha256
|
|
10
|
+
*
|
|
11
|
+
* @param {Buffer} buffer
|
|
12
|
+
* @return {Buffer}
|
|
13
|
+
*/
|
|
14
|
+
function hash(buffer) {
|
|
15
|
+
return sha256(sha256(buffer));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = { hash };
|