diff --git a/lib/DashPlatformProtocol.js b/lib/DashPlatformProtocol.js index dd2d0504..0a100c51 100644 --- a/lib/DashPlatformProtocol.js +++ b/lib/DashPlatformProtocol.js @@ -10,6 +10,7 @@ const DocumentFacade = require('./document/DocumentFacade'); const StateTransitionFacade = require('./stateTransition/StateTransitionFacade'); const IdentityFacade = require('./identity/IdentityFacade'); +const { initBlake3 } = require('./util/hash'); /** * @class DashPlatformProtocol @@ -43,36 +44,37 @@ class DashPlatformProtocol { return this.initialized; } - this.initialized = getRE2Class().then((RE2) => { - this.stateRepository = this.options.stateRepository; - - this.jsonSchemaValidator = this.options.jsonSchemaValidator; - if (this.jsonSchemaValidator === undefined) { - const ajv = createAjv(RE2); - - this.jsonSchemaValidator = new JsonSchemaValidator(ajv); - } - - this.dataContract = new DataContractFacade( - this, - RE2, - ); - - this.document = new DocumentFacade( - this, - ); - - this.stateTransition = new StateTransitionFacade( - this, - RE2, - ); - - this.identity = new IdentityFacade( - this, - ); - - return true; - }); + this.initialized = getRE2Class() + .then((RE2) => { + this.stateRepository = this.options.stateRepository; + + this.jsonSchemaValidator = this.options.jsonSchemaValidator; + if (this.jsonSchemaValidator === undefined) { + const ajv = createAjv(RE2); + + this.jsonSchemaValidator = new JsonSchemaValidator(ajv); + } + + this.dataContract = new DataContractFacade( + this, + RE2, + ); + + this.document = new DocumentFacade( + this, + ); + + this.stateTransition = new StateTransitionFacade( + this, + RE2, + ); + + this.identity = new IdentityFacade( + this, + ); + }) + .then(initBlake3) + .then(() => true); return this.initialized; } diff --git a/lib/dataContract/DataContract.js b/lib/dataContract/DataContract.js index c7152ff1..44bc86b5 100644 --- a/lib/dataContract/DataContract.js +++ b/lib/dataContract/DataContract.js @@ -1,4 +1,4 @@ -const hash = require('../util/hash'); +const { hash } = require('../util/hash'); const { encode } = require('../util/serializer'); const getBinaryPropertiesFromSchema = require('./getBinaryPropertiesFromSchema'); diff --git a/lib/dataContract/generateDataContractId.js b/lib/dataContract/generateDataContractId.js index 93dfb524..8c1ace21 100644 --- a/lib/dataContract/generateDataContractId.js +++ b/lib/dataContract/generateDataContractId.js @@ -1,4 +1,4 @@ -const hash = require('../util/hash'); +const { hash } = require('../util/hash'); /** * Generate data contract id based on owner id and entropy diff --git a/lib/dataTrigger/dpnsTriggers/createDomainDataTrigger.js b/lib/dataTrigger/dpnsTriggers/createDomainDataTrigger.js index 3c64931b..ca1efad2 100644 --- a/lib/dataTrigger/dpnsTriggers/createDomainDataTrigger.js +++ b/lib/dataTrigger/dpnsTriggers/createDomainDataTrigger.js @@ -1,4 +1,4 @@ -const hash = require('../../util/hash'); +const { hash } = require('../../util/hash'); const DataTriggerExecutionResult = require('../DataTriggerExecutionResult'); const DataTriggerConditionError = require('../../errors/consensus/state/dataContract/dataTrigger/DataTriggerConditionError'); diff --git a/lib/document/Document.js b/lib/document/Document.js index ff2e03e7..127ba1d2 100644 --- a/lib/document/Document.js +++ b/lib/document/Document.js @@ -4,7 +4,7 @@ const lodashCloneDeepWith = require('lodash.clonedeepwith'); const cloneDeepWithIdentifiers = require('../util/cloneDeepWithIdentifiers'); -const hash = require('../util/hash'); +const { hash } = require('../util/hash'); const { encode } = require('../util/serializer'); const Identifier = require('../identifier/Identifier'); diff --git a/lib/document/generateDocumentId.js b/lib/document/generateDocumentId.js index 82462b64..89399b97 100644 --- a/lib/document/generateDocumentId.js +++ b/lib/document/generateDocumentId.js @@ -1,4 +1,4 @@ -const hash = require('../util/hash'); +const { hash } = require('../util/hash'); /** * Generates document ID diff --git a/lib/identity/Identity.js b/lib/identity/Identity.js index e57fd8a3..9dcd3d1f 100644 --- a/lib/identity/Identity.js +++ b/lib/identity/Identity.js @@ -1,4 +1,4 @@ -const hash = require('../util/hash'); +const { hash } = require('../util/hash'); const { encode } = require('../util/serializer'); const IdentityPublicKey = require('./IdentityPublicKey'); const Identifier = require('../identifier/Identifier'); diff --git a/lib/identity/stateTransition/assetLockProof/chain/ChainAssetLockProof.js b/lib/identity/stateTransition/assetLockProof/chain/ChainAssetLockProof.js index 063af57a..2594b838 100644 --- a/lib/identity/stateTransition/assetLockProof/chain/ChainAssetLockProof.js +++ b/lib/identity/stateTransition/assetLockProof/chain/ChainAssetLockProof.js @@ -1,5 +1,5 @@ const Identifier = require('../../../../identifier/Identifier'); -const hash = require('../../../../util/hash'); +const { hash } = require('../../../../util/hash'); class ChainAssetLockProof { /** diff --git a/lib/identity/stateTransition/assetLockProof/instant/InstantAssetLockProof.js b/lib/identity/stateTransition/assetLockProof/instant/InstantAssetLockProof.js index 5eb17ceb..c7893ac1 100644 --- a/lib/identity/stateTransition/assetLockProof/instant/InstantAssetLockProof.js +++ b/lib/identity/stateTransition/assetLockProof/instant/InstantAssetLockProof.js @@ -1,5 +1,5 @@ const { InstantLock, Transaction } = require('@dashevo/dashcore-lib'); -const hash = require('../../../../util/hash'); +const { hash } = require('../../../../util/hash'); const Identifier = require('../../../../identifier/Identifier'); class InstantAssetLockProof { diff --git a/lib/stateTransition/AbstractStateTransition.js b/lib/stateTransition/AbstractStateTransition.js index 98c60dfa..f91a4583 100644 --- a/lib/stateTransition/AbstractStateTransition.js +++ b/lib/stateTransition/AbstractStateTransition.js @@ -1,7 +1,7 @@ const { PublicKey, PrivateKey, - Signer: { sign, verifySignature }, + Signer: { signHash, verifyHashSignature }, } = require('@dashevo/dashcore-lib'); const StateTransitionIsNotSignedError = require( @@ -10,7 +10,7 @@ const StateTransitionIsNotSignedError = require( const stateTransitionTypes = require('./stateTransitionTypes'); -const hash = require('../util/hash'); +const { hash } = require('../util/hash'); const { encode } = require('../util/serializer'); const calculateStateTransitionFee = require('./calculateStateTransitionFee'); @@ -155,10 +155,10 @@ class AbstractStateTransition { * @return {AbstractStateTransition} */ signByPrivateKey(privateKey) { - const data = this.toBuffer({ skipSignature: true }); + const stHash = this.hash({ skipSignature: true }); const privateKeyModel = new PrivateKey(privateKey); - this.setSignature(sign(data, privateKeyModel)); + this.setSignature(signHash(stHash, privateKeyModel)); return this; } @@ -174,13 +174,13 @@ class AbstractStateTransition { throw new StateTransitionIsNotSignedError(this); } - const data = this.toBuffer({ skipSignature: true }); + const stHash = this.hash({ skipSignature: true }); const publicKeyModel = new PublicKey(publicKey, {}); let isSignatureVerified; try { - isSignatureVerified = verifySignature(data, signature, publicKeyModel); + isSignatureVerified = verifyHashSignature(stHash, signature, publicKeyModel.hash); } catch (e) { isSignatureVerified = false; } diff --git a/lib/stateTransition/AbstractStateTransitionIdentitySigned.js b/lib/stateTransition/AbstractStateTransitionIdentitySigned.js index 44175dc2..75e08935 100644 --- a/lib/stateTransition/AbstractStateTransitionIdentitySigned.js +++ b/lib/stateTransition/AbstractStateTransitionIdentitySigned.js @@ -49,9 +49,14 @@ class AbstractStateTransitionIdentitySigned extends AbstractStateTransition { let privateKeyModel; let pubKeyBase; + let privateKeyBase = privateKey; + if (Buffer.isBuffer(privateKey) || Array.isArray(privateKey)) { + privateKeyBase = Buffer.from(privateKeyBase).toString('hex'); + } + switch (identityPublicKey.getType()) { case IdentityPublicKey.TYPES.ECDSA_SECP256K1: - privateKeyModel = new PrivateKey(privateKey); + privateKeyModel = new PrivateKey(privateKeyBase); /* We store compressed public key in the identity as a base64 string, /* and here we compare the private key used to sign the state transition diff --git a/lib/test/bootstrap.js b/lib/test/bootstrap.js index 7664fa28..9028b0cf 100644 --- a/lib/test/bootstrap.js +++ b/lib/test/bootstrap.js @@ -4,13 +4,15 @@ const sinonChai = require('sinon-chai'); const dirtyChai = require('dirty-chai'); const chaiAsPromised = require('chai-as-promised'); const chaiString = require('chai-string'); +const { initBlake3 } = require('../util/hash'); use(sinonChai); use(chaiAsPromised); use(dirtyChai); use(chaiString); -beforeEach(function beforeEach() { +beforeEach(async function beforeEach() { + await initBlake3(); if (!this.sinonSandbox) { this.sinonSandbox = sinon.createSandbox(); } else { diff --git a/lib/test/fixtures/getDashPayDocumentFixture.js b/lib/test/fixtures/getDashPayDocumentFixture.js index c7036824..478a2362 100644 --- a/lib/test/fixtures/getDashPayDocumentFixture.js +++ b/lib/test/fixtures/getDashPayDocumentFixture.js @@ -4,12 +4,14 @@ const generateRandomIdentifier = require('../utils/generateRandomIdentifier'); const createDPPMock = require('../mocks/createDPPMock'); const ownerId = generateRandomIdentifier(); -const dataContract = getDashPayContractFixture(); /** * @return {Document} */ -function getContactRequestDocumentFixture(options = {}) { +function getContactRequestDocumentFixture( + dataContract = getDashPayContractFixture(), + options = {}, +) { const factory = new DocumentFactory( createDPPMock(), () => ({ @@ -33,5 +35,3 @@ function getContactRequestDocumentFixture(options = {}) { module.exports = { getContactRequestDocumentFixture, }; - -module.exports.dataContract = dataContract; diff --git a/lib/test/fixtures/getDpnsDocumentFixture.js b/lib/test/fixtures/getDpnsDocumentFixture.js index 6293e900..81cc4ff3 100644 --- a/lib/test/fixtures/getDpnsDocumentFixture.js +++ b/lib/test/fixtures/getDpnsDocumentFixture.js @@ -5,12 +5,11 @@ const generateRandomIdentifier = require('../utils/generateRandomIdentifier'); const createDPPMock = require('../mocks/createDPPMock'); const ownerId = generateRandomIdentifier(); -const dataContract = getDpnsContractFixture(); /** * @return {Document} */ -function getTopDocumentFixture(options = {}) { +function getTopDocumentFixture(dataContract = getDpnsContractFixture(), options = {}) { const factory = new DocumentFactory( createDPPMock(), () => ({ @@ -41,7 +40,7 @@ function getTopDocumentFixture(options = {}) { /** * @return {Document} */ -function getParentDocumentFixture(options = {}) { +function getParentDocumentFixture(dataContract = getDpnsContractFixture(), options = {}) { const factory = new DocumentFactory( createDPPMock(), () => ({ @@ -72,7 +71,7 @@ function getParentDocumentFixture(options = {}) { /** * @return {Document} */ -function getChildDocumentFixture(options = {}) { +function getChildDocumentFixture(dataContract = getDpnsContractFixture(), options = {}) { const factory = new DocumentFactory( createDPPMock(), () => ({ @@ -107,5 +106,3 @@ module.exports = { getParentDocumentFixture, getChildDocumentFixture, }; - -module.exports.dataContract = dataContract; diff --git a/lib/test/fixtures/getFeatureFlagsDocumentsFixture.js b/lib/test/fixtures/getFeatureFlagsDocumentsFixture.js index a9feeae6..c32db2d3 100644 --- a/lib/test/fixtures/getFeatureFlagsDocumentsFixture.js +++ b/lib/test/fixtures/getFeatureFlagsDocumentsFixture.js @@ -4,12 +4,11 @@ const generateRandomIdentifier = require('../utils/generateRandomIdentifier'); const createDPPMock = require('../mocks/createDPPMock'); const ownerId = generateRandomIdentifier(); -const dataContract = getFeatureFlagsContractFixture(); /** * @return {Document} */ -function getFeatureFlagsDocumentsFixture() { +function getFeatureFlagsDocumentsFixture(dataContract = getFeatureFlagsContractFixture()) { const factory = new DocumentFactory( createDPPMock(), () => ({ @@ -27,5 +26,3 @@ function getFeatureFlagsDocumentsFixture() { } module.exports = getFeatureFlagsDocumentsFixture; - -module.exports.dataContract = dataContract; diff --git a/lib/test/fixtures/getIdentityCreateTransitionFixture.js b/lib/test/fixtures/getIdentityCreateTransitionFixture.js index 8a56fb85..6f9e4706 100644 --- a/lib/test/fixtures/getIdentityCreateTransitionFixture.js +++ b/lib/test/fixtures/getIdentityCreateTransitionFixture.js @@ -23,7 +23,7 @@ module.exports = function getIdentityCreateTransitionFixture(oneTimePrivateKey = { id: 0, type: IdentityPublicKey.TYPES.ECDSA_SECP256K1, - data: Buffer.from('AuryIuMtRrl/VviQuyLD1l4nmxi9ogPzC9LT7tdpo0di', 'base64'), + data: oneTimePrivateKey.toPublicKey().toBuffer(), }, ], }; diff --git a/lib/util/hash.js b/lib/util/hash.js index 8603fa95..5fde270b 100644 --- a/lib/util/hash.js +++ b/lib/util/hash.js @@ -1,16 +1,25 @@ -const crypto = require('crypto'); +const blake3Promise = require('blake3/dist/node'); -function sha256(payload) { - return crypto.createHash('sha256') - .update(payload) - .digest(); +let blake3 = {}; +/** + * Init the blake 3 hasher + * @returns {Promise} + */ +async function initBlake3() { + blake3 = await blake3Promise; } + /** - * Serialize and hash payload using double sha256 + * Serialize and hash payload using blake 3 * * @param {Buffer} buffer * @return {Buffer} */ -module.exports = function hash(buffer) { - return sha256(sha256(buffer)); +function hash(buffer) { + return blake3.hash(buffer); +} + +module.exports = { + initBlake3, + hash, }; diff --git a/package-lock.json b/package-lock.json index a19d81c4..2087c13c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "ajv": "^8.6.0", "ajv-formats": "^2.1.1", "bignumber.js": "^9.0.1", + "blake3": "^2.1.4", "bs58": "^4.0.1", "cbor": "^8.0.0", "json-schema-traverse": "^1.0.0", @@ -2593,6 +2594,12 @@ "file-uri-to-path": "1.0.0" } }, + "node_modules/blake3": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/blake3/-/blake3-2.1.4.tgz", + "integrity": "sha512-70hmx0lPd6zmtNwxPT4/1P0pqaEUlTJ0noUBvCXPLfMpN0o8PPaK3q7ZlpRIyhrqcXxeMAJSowNm/L9oi/x1XA==", + "hasInstallScript": true + }, "node_modules/bloom-filter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/bloom-filter/-/bloom-filter-0.2.0.tgz", @@ -13449,6 +13456,11 @@ "file-uri-to-path": "1.0.0" } }, + "blake3": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/blake3/-/blake3-2.1.4.tgz", + "integrity": "sha512-70hmx0lPd6zmtNwxPT4/1P0pqaEUlTJ0noUBvCXPLfMpN0o8PPaK3q7ZlpRIyhrqcXxeMAJSowNm/L9oi/x1XA==" + }, "bloom-filter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/bloom-filter/-/bloom-filter-0.2.0.tgz", diff --git a/package.json b/package.json index 429280c8..fdcc5cd4 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "ajv": "^8.6.0", "ajv-formats": "^2.1.1", "bignumber.js": "^9.0.1", + "blake3": "^2.1.4", "bs58": "^4.0.1", "cbor": "^8.0.0", "json-schema-traverse": "^1.0.0", diff --git a/test/unit/dataContract/DataContract.spec.js b/test/unit/dataContract/DataContract.spec.js index d9c3c336..228c0372 100644 --- a/test/unit/dataContract/DataContract.spec.js +++ b/test/unit/dataContract/DataContract.spec.js @@ -30,7 +30,7 @@ describe('DataContract', () => { getBinaryPropertiesFromSchemaMock = this.sinonSandbox.stub(); DataContract = rewiremock.proxy('../../../lib/dataContract/DataContract', { - '../../../lib/util/hash': hashMock, + '../../../lib/util/hash': { hash: hashMock }, '../../../lib/util/serializer': serializerMock, '../../../lib/dataContract/getBinaryPropertiesFromSchema': getBinaryPropertiesFromSchemaMock, }); diff --git a/test/unit/dataContract/generateDataContractId.spec.js b/test/unit/dataContract/generateDataContractId.spec.js index d2a77250..1a7306e8 100644 --- a/test/unit/dataContract/generateDataContractId.spec.js +++ b/test/unit/dataContract/generateDataContractId.spec.js @@ -11,7 +11,7 @@ describe('generateDataContractId', () => { }); it('should generate bs58 id based on ', () => { - const id = bs58.decode('CnS7cz4z1qoPsNfEgpgyVnKdtH2u7bgzZXHLcCQt24US'); + const id = bs58.decode('DJftzP4Db8pdN76p72SScmw27jcVjcxrqbT4mmZNMJcw'); const generatedId = generateDataContractId(ownerId, entropy); expect(Buffer.compare(id, generatedId)).to.equal(0); diff --git a/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js b/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js index e1bbb513..e80161fa 100644 --- a/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +++ b/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js @@ -18,7 +18,7 @@ describe('DataContractCreateTransition', () => { encodeMock = serializerMock.encode; const DataContractCreateTransition = rewiremock.proxy('../../../../../lib/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition', { - '../../../../../lib/util/hash': hashMock, + '../../../../../lib/util/hash': { hash: hashMock }, '../../../../../lib/util/serializer': serializerMock, }); diff --git a/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js b/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js index 04d3cbe9..c31d2f4f 100644 --- a/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js +++ b/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js @@ -9,7 +9,7 @@ const getDpnsContractFixture = require('../../../../lib/test/fixtures/getDpnsCon const getDocumentTransitionFixture = require('../../../../lib/test/fixtures/getDocumentTransitionsFixture'); const createStateRepositoryMock = require('../../../../lib/test/mocks/createStateRepositoryMock'); -const hash = require('../../../../lib/util/hash'); +const { hash } = require('../../../../lib/util/hash'); const DataTriggerConditionError = require('../../../../lib/errors/consensus/state/dataContract/dataTrigger/DataTriggerConditionError'); const Identifier = require('../../../../lib/identifier/Identifier'); @@ -28,10 +28,10 @@ describe('createDomainDataTrigger', () => { beforeEach(function beforeEach() { dataContract = getDpnsContractFixture(); - topDocument = getTopDocumentFixture(); - parentDocument = getParentDocumentFixture(); - childDocument = getChildDocumentFixture(); - const preorderDocument = getPreorderDocumentFixture(); + topDocument = getTopDocumentFixture(dataContract); + parentDocument = getParentDocumentFixture(dataContract); + childDocument = getChildDocumentFixture(dataContract); + const preorderDocument = getPreorderDocumentFixture(dataContract); [parentDocumentTransition] = getDocumentTransitionFixture({ create: [parentDocument], @@ -112,7 +112,10 @@ describe('createDomainDataTrigger', () => { }); it('should fail with invalid normalizedLabel', async () => { - childDocument = getChildDocumentFixture({ normalizedLabel: childDocument.getData().label }); + childDocument = getChildDocumentFixture( + dataContract, + { normalizedLabel: childDocument.getData().label }, + ); stateRepositoryMock.fetchTransaction .withArgs( childDocument.getData().records.dashUniqueIdentityId, @@ -137,11 +140,14 @@ describe('createDomainDataTrigger', () => { }); it('should fail with invalid parent domain', async () => { - childDocument = getChildDocumentFixture({ - label: 'label', - normalizedLabel: 'label', - normalizedParentDomainName: 'parent.invalidname', - }); + childDocument = getChildDocumentFixture( + dataContract, + { + label: 'label', + normalizedLabel: 'label', + normalizedParentDomainName: 'parent.invalidname', + }, + ); stateRepositoryMock.fetchTransaction .withArgs( @@ -182,7 +188,7 @@ describe('createDomainDataTrigger', () => { Buffer.alloc(32, 5), ); - childDocument = getChildDocumentFixture({ + childDocument = getChildDocumentFixture(dataContract, { records: { dashUniqueIdentityId: dashUniqueIdentityId.toBuffer(), }, @@ -210,7 +216,7 @@ describe('createDomainDataTrigger', () => { Buffer.alloc(32, 2), ); - childDocument = getChildDocumentFixture({ + childDocument = getChildDocumentFixture(dataContract, { records: { dashAliasIdentityId: dashUniqueIdentityId.toBuffer(), }, @@ -234,7 +240,7 @@ describe('createDomainDataTrigger', () => { }); it('should fail with preorder document was not found', async () => { - childDocument = getChildDocumentFixture({ + childDocument = getChildDocumentFixture(dataContract, { preorderSalt: Buffer.alloc(256, '012fd'), }); @@ -256,7 +262,7 @@ describe('createDomainDataTrigger', () => { }); it('should fail with invalid full domain name length', async () => { - childDocument = getChildDocumentFixture({ + childDocument = getChildDocumentFixture(dataContract, { normalizedParentDomainName: 'a'.repeat(512), }); @@ -317,7 +323,9 @@ describe('createDomainDataTrigger', () => { }); it('should fail with allowing subdomains for non top level domain', async () => { - childDocument = getChildDocumentFixture({ subdomainRules: { allowSubdomains: true } }); + childDocument = getChildDocumentFixture( + dataContract, { subdomainRules: { allowSubdomains: true } }, + ); [childDocumentTransition] = getDocumentTransitionFixture({ create: [childDocument], diff --git a/test/unit/dataTrigger/featureFlagDataTriggers/createFeatureFlagDataTrigger.spec.js b/test/unit/dataTrigger/featureFlagDataTriggers/createFeatureFlagDataTrigger.spec.js index 84550863..3db9462c 100644 --- a/test/unit/dataTrigger/featureFlagDataTriggers/createFeatureFlagDataTrigger.spec.js +++ b/test/unit/dataTrigger/featureFlagDataTriggers/createFeatureFlagDataTrigger.spec.js @@ -9,6 +9,7 @@ const createStateRepositoryMock = require('../../../../lib/test/mocks/createStat const DataTriggerExecutionResult = require('../../../../lib/dataTrigger/DataTriggerExecutionResult'); const DataTriggerConditionError = require('../../../../lib/errors/consensus/state/dataContract/dataTrigger/DataTriggerConditionError'); const Identifier = require('../../../../lib/identifier/Identifier'); +const getFeatureFlagsContractFixture = require('../../../../lib/test/fixtures/getFeatureFlagsContractFixture'); describe('createFeatureFlagDataTrigger', () => { let contextMock; @@ -24,7 +25,9 @@ describe('createFeatureFlagDataTrigger', () => { height: new Long(42), }); - const [document] = getFeatureFlagsDocumentsFixture(); + const dataContract = getFeatureFlagsContractFixture(); + + const [document] = getFeatureFlagsDocumentsFixture(dataContract); [documentTransition] = getDocumentTransitionsFixture({ create: [document], @@ -33,7 +36,7 @@ describe('createFeatureFlagDataTrigger', () => { contextMock = { getStateRepository: () => stateRepositoryMock, getOwnerId: this.sinonSandbox.stub(), - getDataContract: () => getFeatureFlagsDocumentsFixture.dataContract, + getDataContract: () => dataContract, }; contextMock.getOwnerId.returns(topLevelIdentityId); }); diff --git a/test/unit/dataTrigger/getDataTriggersFactory.spec.js b/test/unit/dataTrigger/getDataTriggersFactory.spec.js index ee26344f..257eafe2 100644 --- a/test/unit/dataTrigger/getDataTriggersFactory.spec.js +++ b/test/unit/dataTrigger/getDataTriggersFactory.spec.js @@ -10,6 +10,7 @@ const createDomainDataTrigger = require('../../../lib/dataTrigger/dpnsTriggers/c const rejectDataTrigger = require('../../../lib/dataTrigger/rejectDataTrigger'); const generateRandomIdentifier = require('../../../lib/test/utils/generateRandomIdentifier'); +const getDpnsContractFixture = require('../../../lib/test/fixtures/getDpnsContractFixture'); describe('getDataTriggers', () => { let getDataTriggers; @@ -29,12 +30,13 @@ describe('getDataTriggers', () => { let topLevelIdentity; beforeEach(function beforeEach() { - createDocument = getDpnsDocumentFixture.getChildDocumentFixture(); - updateDocument = getDpnsDocumentFixture.getChildDocumentFixture(); - deleteDocument = getDpnsDocumentFixture.getChildDocumentFixture(); + const dataContract = getDpnsContractFixture(); + createDocument = getDpnsDocumentFixture.getChildDocumentFixture(dataContract); + updateDocument = getDpnsDocumentFixture.getChildDocumentFixture(dataContract); + deleteDocument = getDpnsDocumentFixture.getChildDocumentFixture(dataContract); deleteDocument.data = {}; - dataContractId = getDpnsDocumentFixture.dataContract.getId(); + dataContractId = dataContract.getId(); topLevelIdentity = generateRandomIdentifier().toBuffer(); createTrigger = new DataTrigger( diff --git a/test/unit/document/Document.spec.js b/test/unit/document/Document.spec.js index 26043f82..229c4640 100644 --- a/test/unit/document/Document.spec.js +++ b/test/unit/document/Document.spec.js @@ -38,7 +38,7 @@ describe('Document', () => { '../../../node_modules/lodash.get': lodashGetMock, '../../../node_modules/lodash.set': lodashSetMock, '../../../node_modules/lodash.clonedeep': lodashCloneDeepMock, - '../../../lib/util/hash': hashMock, + '../../../lib/util/hash': { hash: hashMock }, '../../../lib/util/serializer': serializerMock, }); diff --git a/test/unit/document/DocumentFactory.spec.js b/test/unit/document/DocumentFactory.spec.js index 571abee7..0d39f3e3 100644 --- a/test/unit/document/DocumentFactory.spec.js +++ b/test/unit/document/DocumentFactory.spec.js @@ -118,7 +118,7 @@ describe('DocumentFactory', () => { expect(newDocument.getRevision()).to.equal(DocumentCreateTransition.INITIAL_REVISION); - expect(newDocument.getId()).to.deep.equal(bs58.decode('B99gjrjq6R1FXwGUQnoP7VrmCDDT1PbKprUNzjVbxXfz')); + expect(newDocument.getId()).to.deep.equal(bs58.decode('E6ZqBauuv4LnFXhhnikuqQ9itmAbrCjQqzbL5jJgAK2h')); expect(newDocument.getCreatedAt().getTime()).to.be.equal(fakeTimeDate.getTime()); expect(newDocument.getCreatedAt().getTime()).to.equal(newDocument.getUpdatedAt().getTime()); diff --git a/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js b/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js index f950ddff..b823a578 100644 --- a/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +++ b/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js @@ -22,7 +22,7 @@ describe('DocumentsBatchTransition', () => { encodeMock = serializerMock.encode; const DocumentFactory = rewiremock.proxy('../../../../../lib/document/DocumentFactory', { - '../../../../../lib/util/hash': hashMock, + '../../../../../lib/util/hash': { hash: hashMock }, '../../../../../lib/util/serializer': serializerMock, }); diff --git a/test/unit/identity/Identity.spec.js b/test/unit/identity/Identity.spec.js index a5525cb0..23bff934 100644 --- a/test/unit/identity/Identity.spec.js +++ b/test/unit/identity/Identity.spec.js @@ -21,7 +21,7 @@ describe('Identity', () => { Identity = rewiremock.proxy( '../../../lib/identity/Identity', { - '../../../lib/util/hash': hashMock, + '../../../lib/util/hash': { hash: hashMock }, '../../../lib/util/serializer': { encode: encodeMock, }, diff --git a/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js b/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js index f0f84f01..85621435 100644 --- a/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +++ b/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js @@ -7,6 +7,8 @@ const { expectValidationError } = require('../../../../lib/test/expect/expectErr const ValidationResult = require('../../../../lib/validation/ValidationResult'); +const { hash } = require('../../../../lib/util/hash'); + describe('validateStateTransitionKeySignatureFactory', () => { let publicKeyHash; let stateTransition; @@ -19,7 +21,7 @@ describe('validateStateTransitionKeySignatureFactory', () => { publicKeyHash = Buffer.alloc(20).fill(1); stateTransition = getIdentityCreateTransitionFixture(); - stateTransitionHash = stateTransition.hash({ skipSignature: true }); + stateTransitionHash = hash(stateTransition.toBuffer({ skipSignature: true })); verifyHashSignatureMock = this.sinonSandbox.stub();