@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.
Files changed (95) hide show
  1. package/Cargo.toml +3 -2
  2. package/README.md +1 -1
  3. package/dist/wasm/wasm_dpp.d.ts +808 -712
  4. package/dist/wasm/wasm_dpp.js +853 -452
  5. package/dist/wasm/wasm_dpp_bg.js +1 -1
  6. package/lib/bls/bls.js +48 -0
  7. package/lib/test/fixtures/getChainAssetLockProofFixture.js +20 -1
  8. package/lib/test/fixtures/getDataContractFixture.js +4 -6
  9. package/lib/test/fixtures/getDocumentTransitionsFixture.js +31 -1
  10. package/lib/test/fixtures/getInstantAssetLockProofFixture.js +32 -12
  11. package/lib/test/mocks/getBlsAdapterMock.js +1 -1
  12. package/lib/utils/creditsConverter.js +14 -0
  13. package/lib/utils/hash.js +18 -0
  14. package/lib/wasm/wasm_dpp.d.ts +808 -712
  15. package/package.json +3 -5
  16. package/src/dash_platform_protocol.rs +5 -5
  17. package/src/document/errors/invalid_document_error.rs +5 -0
  18. package/src/document/extended_document.rs +15 -0
  19. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +219 -214
  20. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +1 -1
  21. package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +4 -2
  22. package/src/errors/consensus/basic/json_schema_error.rs +35 -5
  23. package/src/identity/identity_facade.rs +7 -5
  24. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +32 -17
  25. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +22 -13
  26. package/src/identity/state_transition/asset_lock_proof/mod.rs +12 -11
  27. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +1 -0
  28. package/src/identity/state_transition/identity_create_transition/to_object.rs +1 -0
  29. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +1 -0
  30. package/src/identity/state_transition/identity_topup_transition/to_object.rs +1 -0
  31. package/src/lib.rs +1 -1
  32. package/src/validation/mod.rs +2 -2
  33. package/src/validation/validation_result.rs +16 -15
  34. package/test/integration/document/DocumentFacade.spec.js +11 -27
  35. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +9 -19
  36. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +2 -2
  37. package/test/integration/document/validation/validateDocumentFactory.spec.js +2 -2
  38. package/test/integration/identity/IdentityFacade.spec.js +1 -2
  39. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +2 -2
  40. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +2 -2
  41. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +6 -8
  42. package/test/unit/document/Document.spec.js +30 -52
  43. package/test/unit/document/DocumentFactory.spec.js +2 -2
  44. package/test/unit/document/errors/InvalidDocumentError.spec.js +9 -9
  45. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +158 -155
  46. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +132 -134
  47. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +3 -3
  48. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +568 -591
  49. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +5 -13
  50. package/test/unit/identity/Identity.spec.js +2 -2
  51. package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +9 -28
  52. package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +19 -27
  53. package/lib/test/fixtures/getDashPayContractFixture.js +0 -1
  54. package/lib/test/fixtures/getDashPayDocumentFixture.js +0 -1
  55. package/lib/test/fixtures/getDpnsContractFixture.js +0 -1
  56. package/lib/test/fixtures/getDpnsDocumentFixture.js +0 -1
  57. package/lib/test/fixtures/getFeatureFlagsContractFixture.js +0 -1
  58. package/lib/test/fixtures/getFeatureFlagsDocumentsFixture.js +0 -1
  59. package/lib/test/fixtures/getIdentityTopUpTransitionFixtureJs.js +0 -1
  60. package/lib/test/fixtures/getMasternodeRewardShareDocumentsFixture.js +0 -1
  61. package/lib/test/fixtures/getMasternodeRewardSharesContractFixture.js +0 -1
  62. package/lib/test/fixtures/getPreorderDocumentFixture.js +0 -1
  63. package/lib/test/fixtures/getRawTransactionFixture.js +0 -1
  64. package/lib/test/fixtures/js/generateRandomIdentifier.js +0 -1
  65. package/lib/test/fixtures/js/getChainAssetLockProofFixture.js +0 -1
  66. package/lib/test/fixtures/js/getDataContractFixture.js +0 -1
  67. package/lib/test/fixtures/js/getDocumentTransitionsFixture.js +0 -1
  68. package/lib/test/fixtures/js/getDocumentsFixture.js +0 -1
  69. package/lib/test/fixtures/js/getInstantAssetLockProofFixture.js +0 -1
  70. package/test/integration/DashPlatformProtocol.spec.js +0 -53
  71. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +0 -195
  72. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -500
  73. package/test/integration/stateTransition/calculateStateTransitionFeeFromOperationsFactory.spec.js +0 -53
  74. package/test/unit/dataContract/getBinaryPropertiesFromSchema.spec.js +0 -103
  75. package/test/unit/dataContract/getPropertyDefinitionByPath.spec.js +0 -84
  76. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +0 -45
  77. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +0 -49
  78. package/test/unit/dataTrigger/DataTrigger.spec.js +0 -132
  79. package/test/unit/dataTrigger/DataTriggerExecutionContext.spec.js +0 -29
  80. package/test/unit/dataTrigger/dashpayDataTriggers/createContactRequestDataTrigger.spec.js +0 -107
  81. package/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js +0 -382
  82. package/test/unit/dataTrigger/featureFlagDataTriggers/createFeatureFlagDataTrigger.spec.js +0 -99
  83. package/test/unit/dataTrigger/getDataTriggersFactory.spec.js +0 -113
  84. package/test/unit/dataTrigger/rejectDataTrigger.spec.js +0 -51
  85. package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +0 -202
  86. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +0 -256
  87. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +0 -94
  88. package/test/unit/errors/consensus/codes.spec.js +0 -102
  89. package/test/unit/identity/creditsConverter.spec.js +0 -34
  90. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +0 -83
  91. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +0 -138
  92. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +0 -100
  93. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +0 -36
  94. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +0 -63
  95. 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
- module.exports = require('@dashevo/dpp/lib/test/fixtures/getChainAssetLockProofFixture');
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
- let { DataContractFactory } = require('../../..');
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
- ({ DataContractFactory } = await loadWasmDpp());
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: JsIdentifier.MEDIA_TYPE,
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
- protocolVersion.latestVersion,
257
+ getLatestProtocolVersion(),
260
258
  entropyGenerator,
261
259
  );
262
260
 
@@ -1 +1,31 @@
1
- module.exports = require('@dashevo/dpp/lib/test/fixtures/getDocumentTransitionsFixture');
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 oneTimePublicKey = oneTimePrivateKey.toPublicKey();
22
+ const transaction = new Transaction(undefined);
23
23
 
24
- const transaction = new Transaction()
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
- // eslint-disable-next-line no-underscore-dangle
34
- .addBurnOutput(90000, oneTimePublicKey._getID())
35
- .to(fromAddress, 5000)
36
- .addOutput(Transaction.Output({
37
- satoshis: 5000,
38
- script: Script()
39
- .add(Opcode.OP_RETURN)
40
- .add(Buffer.from([1, 2, 3])),
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,
@@ -1,4 +1,4 @@
1
- const BlsSignatures = require('@dashevo/dpp/lib/bls/bls');
1
+ const BlsSignatures = require('../../bls/bls');
2
2
 
3
3
  module.exports = async function getBlsAdapterMock() {
4
4
  const bls = await BlsSignatures.getInstance();
@@ -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 };