diff --git a/commander/package.json b/commander/package.json index 07092b44a39..5409a4ace67 100644 --- a/commander/package.json +++ b/commander/package.json @@ -1,6 +1,6 @@ { "name": "lisk-commander", - "version": "5.1.3", + "version": "5.1.4-alpha.0", "description": "A command line interface for Lisk", "author": "Lisk Foundation , lightcurve GmbH ", "license": "Apache-2.0", @@ -114,7 +114,7 @@ "cli-table3": "0.6.0", "fs-extra": "9.1.0", "inquirer": "8.0.0", - "lisk-framework": "^0.8.2", + "lisk-framework": "^0.8.3-alpha.0", "listr": "0.14.3", "progress": "2.0.3", "semver": "7.3.5", diff --git a/elements/lisk-bft/package.json b/elements/lisk-bft/package.json index 22b523fd678..8cd14d4d28f 100644 --- a/elements/lisk-bft/package.json +++ b/elements/lisk-bft/package.json @@ -1,6 +1,6 @@ { "name": "@liskhq/lisk-bft", - "version": "0.3.1", + "version": "0.3.2-alpha.0", "description": "Byzantine fault tolerance implementation according to the Lisk protocol", "author": "Lisk Foundation , lightcurve GmbH ", "license": "Apache-2.0", diff --git a/elements/lisk-bft/src/bft.ts b/elements/lisk-bft/src/bft.ts index 38f0c5e895c..e401488aeb6 100644 --- a/elements/lisk-bft/src/bft.ts +++ b/elements/lisk-bft/src/bft.ts @@ -200,8 +200,8 @@ export class BFT extends EventEmitter { return true; } - public async getMaxHeightPrevoted(): Promise { - return this.finalityManager.getMaxHeightPrevoted(); + public async getMaxHeightPrevoted(lastMaxHeightPrevoted: number): Promise { + return this.finalityManager.getMaxHeightPrevoted(lastMaxHeightPrevoted); } public get finalizedHeight(): number { @@ -227,6 +227,7 @@ export class BFT extends EventEmitter { const finalityManager = new FinalityManager({ chain: this._chain, finalizedHeight, + genesisHeight: this.constants.genesisHeight, threshold: this.constants.threshold, }); diff --git a/elements/lisk-bft/src/finality_manager.ts b/elements/lisk-bft/src/finality_manager.ts index 4bc82dcd0fe..f7bb7b161fa 100644 --- a/elements/lisk-bft/src/finality_manager.ts +++ b/elements/lisk-bft/src/finality_manager.ts @@ -122,13 +122,16 @@ export class FinalityManager extends EventEmitter { public finalizedHeight: number; private readonly _chain: Chain; + private readonly _genesisHeight: number; public constructor({ chain, + genesisHeight, finalizedHeight, threshold, }: { readonly chain: Chain; + readonly genesisHeight: number; readonly finalizedHeight: number; readonly threshold: number; }) { @@ -136,6 +139,7 @@ export class FinalityManager extends EventEmitter { assert(threshold > 0, 'Must provide a positive threshold'); this._chain = chain; + this._genesisHeight = genesisHeight; // Threshold to consider a block pre-voted this.preVoteThreshold = threshold; @@ -339,7 +343,12 @@ export class FinalityManager extends EventEmitter { const bftBlockHeaders = stateStore.chain.lastBlockHeaders; const { ledger } = await this._getVotingLedger(stateStore); - const chainMaxHeightPrevoted = this._calculateMaxHeightPrevoted(ledger); + // lastBlockHeaders are sorted by height desc + const lastMaxHeightPrevoted = + bftBlockHeaders.length > 0 && bftBlockHeaders[0].asset.maxHeightPrevoted + ? bftBlockHeaders[0].asset.maxHeightPrevoted + : this._genesisHeight; + const chainMaxHeightPrevoted = this._calculateMaxHeightPrevoted(ledger, lastMaxHeightPrevoted); // We need minimum processingThreshold to decide // If maxHeightPrevoted is correct if ( @@ -367,22 +376,22 @@ export class FinalityManager extends EventEmitter { return true; } - public async getMaxHeightPrevoted(): Promise { + public async getMaxHeightPrevoted(lastMaxHeightPrevoted?: number): Promise { const bftState = await this._chain.dataAccess.getConsensusState( CONSENSUS_STATE_VALIDATOR_LEDGER_KEY, ); const { ledger } = this._decodeVotingLedger(bftState); - return this._calculateMaxHeightPrevoted(ledger); + return this._calculateMaxHeightPrevoted(ledger, lastMaxHeightPrevoted ?? this._genesisHeight); } - private _calculateMaxHeightPrevoted(ledger: LedgerMap): number { + private _calculateMaxHeightPrevoted(ledger: LedgerMap, lastMaxHeightPrevoted: number): number { debug('updatePreVotedAndFinalizedHeight invoked'); const maxHeightPreVoted = Object.keys(ledger) .reverse() .find(key => ledger[key].prevotes >= this.preVoteThreshold); - return maxHeightPreVoted ? parseInt(maxHeightPreVoted, 10) : this.finalizedHeight; + return maxHeightPreVoted ? parseInt(maxHeightPreVoted, 10) : lastMaxHeightPrevoted; } /** diff --git a/elements/lisk-bft/test/protocol_specs/bft_finality_manager_protocol_specs.spec.ts b/elements/lisk-bft/test/protocol_specs/bft_finality_manager_protocol_specs.spec.ts index 878e0212278..27e24b6c6a9 100644 --- a/elements/lisk-bft/test/protocol_specs/bft_finality_manager_protocol_specs.spec.ts +++ b/elements/lisk-bft/test/protocol_specs/bft_finality_manager_protocol_specs.spec.ts @@ -96,6 +96,7 @@ describe('FinalityManager', () => { finalityManager = new FinalityManager({ chain: chainStub, + genesisHeight: 0, finalizedHeight: scenario.config.finalizedHeight, threshold: Math.floor((scenario.config.activeDelegates * 2) / 3) + 1, }); @@ -168,7 +169,7 @@ describe('FinalityManager', () => { CONSENSUS_STATE_VALIDATOR_LEDGER_KEY, ); const { ledger } = finalityManager['_decodeVotingLedger'](updatedBftLedgers); - const preVoted = finalityManager['_calculateMaxHeightPrevoted'](ledger); + const preVoted = finalityManager['_calculateMaxHeightPrevoted'](ledger, 0); expect(preVoted).toEqual(testCase.output.preVotedConfirmedHeight); }); } diff --git a/elements/lisk-bft/test/protocol_specs/bft_invalid_block_headers_protocol_specs.spec.ts b/elements/lisk-bft/test/protocol_specs/bft_invalid_block_headers_protocol_specs.spec.ts index c40eee4edfa..5fe888e8acf 100644 --- a/elements/lisk-bft/test/protocol_specs/bft_invalid_block_headers_protocol_specs.spec.ts +++ b/elements/lisk-bft/test/protocol_specs/bft_invalid_block_headers_protocol_specs.spec.ts @@ -71,6 +71,7 @@ describe('FinalityManager', () => { const finalityManager = new FinalityManager({ chain: chainStub, + genesisHeight: 0, finalizedHeight: invalidBlockHeaderSpec.config.finalizedHeight, threshold: invalidBlockHeaderSpec.config.activeDelegates, }); diff --git a/elements/lisk-bft/test/unit/finality_manager.spec.ts b/elements/lisk-bft/test/unit/finality_manager.spec.ts index 7709173f97e..b14086b8ef5 100644 --- a/elements/lisk-bft/test/unit/finality_manager.spec.ts +++ b/elements/lisk-bft/test/unit/finality_manager.spec.ts @@ -74,6 +74,7 @@ describe('finality_manager', () => { finalityManager = new FinalityManager({ chain: chainStub, finalizedHeight, + genesisHeight: 0, threshold, }); }); @@ -94,20 +95,39 @@ describe('finality_manager', () => { new FinalityManager({ chain: chainStub, finalizedHeight, + genesisHeight: 0, threshold, }), ).toThrow('Invalid number of validators for BFT property'); }); - it('should initialize maxHeightPrevoted to the finalizedHeight', async () => { - const nonZeroFinalizedHeight = 10000000; - finalityManager = new FinalityManager({ - chain: chainStub, - finalizedHeight: nonZeroFinalizedHeight, - threshold, - }); - await expect(finalityManager.getMaxHeightPrevoted()).resolves.toEqual( - nonZeroFinalizedHeight, + it('should initialize maxHeightPrevoted to the the last maxHeightPrevoted', async () => { + const validatorLedger = { + validators: [], + ledger: [ + { + height: 610, + prevotes: 67, + precommits: 0, + }, + { + height: 611, + prevotes: 67, + precommits: 0, + }, + { + height: 612, + prevotes: 66, + precommits: 0, + }, + ], + }; + jest + .spyOn(chainStub.dataAccess, 'getConsensusState') + .mockResolvedValue(codec.encode(BFTVotingLedgerSchema, validatorLedger)); + const lastMaxHeightPrevoted = 30; + await expect(finalityManager.getMaxHeightPrevoted(lastMaxHeightPrevoted)).resolves.toEqual( + lastMaxHeightPrevoted, ); }); }); @@ -124,7 +144,7 @@ describe('finality_manager', () => { }) as unknown) as StateStore; const header = createFakeBlockHeader({ - asset: { maxHeightPrevoted: 10 }, + asset: { maxHeightPrevoted: 12 }, }); expect.assertions(1); diff --git a/elements/lisk-chain/src/chain.ts b/elements/lisk-chain/src/chain.ts index 17a01fe2b2a..52b5c8b3785 100644 --- a/elements/lisk-chain/src/chain.ts +++ b/elements/lisk-chain/src/chain.ts @@ -109,6 +109,7 @@ export class Chain { }; private _lastBlock: Block; + private readonly _genesisHeight: number; private readonly _networkIdentifier: Buffer; private readonly _blockRewardArgs: BlockRewardOptions; private readonly _accountSchema: Schema; @@ -170,6 +171,7 @@ export class Chain { genesisBlockTimestamp: genesisBlock.header.timestamp, interval: blockTime, }); + this._genesisHeight = genesisBlock.header.height; this._blockRewardArgs = { distance: rewardDistance, rewardOffset, @@ -187,6 +189,10 @@ export class Chain { }; } + public get genesisHeight(): number { + return this._genesisHeight; + } + public get lastBlock(): Block { return this._lastBlock; } diff --git a/elements/lisk-elements/package.json b/elements/lisk-elements/package.json index fe59551991f..04f73f2b5d0 100644 --- a/elements/lisk-elements/package.json +++ b/elements/lisk-elements/package.json @@ -1,6 +1,6 @@ { "name": "lisk-elements", - "version": "5.1.2", + "version": "5.1.3-alpha.0", "description": "Elements for building blockchain applications in the Lisk network", "author": "Lisk Foundation , lightcurve GmbH ", "license": "Apache-2.0", @@ -37,7 +37,7 @@ }, "dependencies": { "@liskhq/lisk-api-client": "^5.1.2", - "@liskhq/lisk-bft": "^0.3.1", + "@liskhq/lisk-bft": "^0.3.2-alpha.0", "@liskhq/lisk-chain": "^0.3.1", "@liskhq/lisk-codec": "^0.2.0", "@liskhq/lisk-cryptography": "^3.1.0", diff --git a/framework-plugins/lisk-framework-dashboard-plugin/package.json b/framework-plugins/lisk-framework-dashboard-plugin/package.json index 68586c5bcb0..8bc38506373 100644 --- a/framework-plugins/lisk-framework-dashboard-plugin/package.json +++ b/framework-plugins/lisk-framework-dashboard-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@liskhq/lisk-framework-dashboard-plugin", - "version": "0.1.2", + "version": "0.1.3-alpha.0", "description": "A plugin for interacting with a newly developed blockchain application.", "author": "Lisk Foundation , lightcurve GmbH ", "license": "Apache-2.0", @@ -45,7 +45,7 @@ "@liskhq/lisk-utils": "^0.2.0", "express": "4.17.1", "json-format-highlight": "1.0.4", - "lisk-framework": "^0.8.2", + "lisk-framework": "^0.8.3-alpha.0", "react": "^17.0.1", "react-dom": "^17.0.1", "react-router-dom": "^5.2.0", diff --git a/framework-plugins/lisk-framework-faucet-plugin/package.json b/framework-plugins/lisk-framework-faucet-plugin/package.json index 9efb3e026e2..e607baf1e88 100644 --- a/framework-plugins/lisk-framework-faucet-plugin/package.json +++ b/framework-plugins/lisk-framework-faucet-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@liskhq/lisk-framework-faucet-plugin", - "version": "0.1.2", + "version": "0.1.3-alpha.0", "description": "A plugin for distributing testnet tokens from a newly developed blockchain application.", "author": "Lisk Foundation , lightcurve GmbH ", "license": "Apache-2.0", @@ -49,7 +49,7 @@ "@liskhq/lisk-validator": "^0.6.0", "axios": "0.21.1", "express": "4.17.1", - "lisk-framework": "^0.8.2", + "lisk-framework": "^0.8.3-alpha.0", "react": "^17.0.1", "react-dom": "^17.0.1", "react-router-dom": "^5.2.0" diff --git a/framework-plugins/lisk-framework-forger-plugin/package.json b/framework-plugins/lisk-framework-forger-plugin/package.json index d9d5987a2ca..c8187b3a975 100644 --- a/framework-plugins/lisk-framework-forger-plugin/package.json +++ b/framework-plugins/lisk-framework-forger-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@liskhq/lisk-framework-forger-plugin", - "version": "0.2.2", + "version": "0.2.3-alpha.0", "description": "A plugin for lisk-framework that monitors configured delegates forging activity and voters information.", "author": "Lisk Foundation , lightcurve GmbH ", "license": "Apache-2.0", @@ -52,7 +52,7 @@ "express-rate-limit": "5.1.3", "fs-extra": "9.1.0", "ip": "1.1.5", - "lisk-framework": "^0.8.2" + "lisk-framework": "^0.8.3-alpha.0" }, "devDependencies": { "@liskhq/lisk-api-client": "^5.1.2", diff --git a/framework-plugins/lisk-framework-forger-plugin/src/forger_plugin.ts b/framework-plugins/lisk-framework-forger-plugin/src/forger_plugin.ts index 7e271a169b6..07968d607e1 100644 --- a/framework-plugins/lisk-framework-forger-plugin/src/forger_plugin.ts +++ b/framework-plugins/lisk-framework-forger-plugin/src/forger_plugin.ts @@ -60,6 +60,7 @@ interface ForgerPayloadInfo { } interface NodeInfo { + genesisHeight: number; genesisConfig: GenesisConfig; } @@ -187,20 +188,22 @@ export class ForgerPlugin extends BasePlugin { header: { height: lastBlockHeight }, } = this.codec.decodeBlock(await this._channel.invoke('app:getLastBlock')); const { syncUptoHeight } = await getForgerSyncInfo(this._forgerPluginDB); + const { genesisHeight } = await this._channel.invoke('app:getNodeInfo'); + const forgerPluginSyncedHeight = syncUptoHeight === 0 ? genesisHeight : syncUptoHeight; - if (syncUptoHeight === lastBlockHeight) { + if (forgerPluginSyncedHeight === lastBlockHeight) { // No need to sync return; } let needleHeight: number; - if (syncUptoHeight > lastBlockHeight) { + if (forgerPluginSyncedHeight > lastBlockHeight) { // Clear all forging information we have and sync again await this._forgerPluginDB.clear(); - needleHeight = 1; + needleHeight = genesisHeight + 1; } else { - needleHeight = syncUptoHeight + 1; + needleHeight = forgerPluginSyncedHeight + 1; } // Sync in batch of 1000 blocks diff --git a/framework-plugins/lisk-framework-http-api-plugin/package.json b/framework-plugins/lisk-framework-http-api-plugin/package.json index 770eb1cf8a6..1eae646495e 100644 --- a/framework-plugins/lisk-framework-http-api-plugin/package.json +++ b/framework-plugins/lisk-framework-http-api-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@liskhq/lisk-framework-http-api-plugin", - "version": "0.2.2", + "version": "0.2.3-alpha.0", "description": "A plugin for lisk-framework that provides basic HTTP API endpoints to get running node information.", "author": "Lisk Foundation , lightcurve GmbH ", "license": "Apache-2.0", @@ -44,7 +44,7 @@ "express": "4.17.1", "express-rate-limit": "5.1.3", "ip": "1.1.5", - "lisk-framework": "^0.8.2" + "lisk-framework": "^0.8.3-alpha.0" }, "devDependencies": { "@liskhq/lisk-cryptography": "^3.1.0", diff --git a/framework-plugins/lisk-framework-http-api-plugin/test/functional/node.spec.ts b/framework-plugins/lisk-framework-http-api-plugin/test/functional/node.spec.ts index 3fe3f135d8c..64e75efebc4 100644 --- a/framework-plugins/lisk-framework-http-api-plugin/test/functional/node.spec.ts +++ b/framework-plugins/lisk-framework-http-api-plugin/test/functional/node.spec.ts @@ -47,6 +47,7 @@ describe('Node', () => { const nodeStatusAndConstantFixture = { version: appInstance._node._options.version, networkVersion: appInstance._node._options.networkVersion, + genesisHeight: appInstance._node._chain.genesisHeight, networkIdentifier: appInstance._node.networkIdentifier.toString('hex'), lastBlockID: appInstance._node._chain.lastBlock.header.id.toString('hex'), height: appInstance._node._chain.lastBlock.header.height, diff --git a/framework-plugins/lisk-framework-monitor-plugin/package.json b/framework-plugins/lisk-framework-monitor-plugin/package.json index 735715c6bbb..b39ba933d76 100644 --- a/framework-plugins/lisk-framework-monitor-plugin/package.json +++ b/framework-plugins/lisk-framework-monitor-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@liskhq/lisk-framework-monitor-plugin", - "version": "0.2.2", + "version": "0.2.3-alpha.0", "description": "A plugin for lisk-framework that provides network statistics of the running node", "author": "Lisk Foundation , lightcurve GmbH ", "license": "Apache-2.0", @@ -46,7 +46,7 @@ "express": "4.17.1", "express-rate-limit": "5.1.3", "ip": "1.1.5", - "lisk-framework": "^0.8.2" + "lisk-framework": "^0.8.3-alpha.0" }, "devDependencies": { "@types/cors": "2.8.6", diff --git a/framework-plugins/lisk-framework-report-misbehavior-plugin/package.json b/framework-plugins/lisk-framework-report-misbehavior-plugin/package.json index 2bad8990bb9..d6a52ed493b 100644 --- a/framework-plugins/lisk-framework-report-misbehavior-plugin/package.json +++ b/framework-plugins/lisk-framework-report-misbehavior-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@liskhq/lisk-framework-report-misbehavior-plugin", - "version": "0.2.2", + "version": "0.2.3-alpha.0", "description": "A plugin for lisk-framework that provides automatic detection of delegate misbehavior and sends a reportDelegateMisbehaviorTransaction to the running node", "author": "Lisk Foundation , lightcurve GmbH ", "license": "Apache-2.0", @@ -38,7 +38,7 @@ "prepublishOnly": "npm run lint && npm test && npm run build && npm run build:check" }, "dependencies": { - "@liskhq/lisk-bft": "^0.3.1", + "@liskhq/lisk-bft": "^0.3.2-alpha.0", "@liskhq/lisk-chain": "^0.3.1", "@liskhq/lisk-codec": "^0.2.0", "@liskhq/lisk-cryptography": "^3.1.0", @@ -48,7 +48,7 @@ "@liskhq/lisk-validator": "^0.6.0", "debug": "4.3.1", "fs-extra": "9.1.0", - "lisk-framework": "^0.8.2" + "lisk-framework": "^0.8.3-alpha.0" }, "devDependencies": { "@types/cors": "2.8.6", diff --git a/framework/package.json b/framework/package.json index f0d72e6e582..89da08223b0 100644 --- a/framework/package.json +++ b/framework/package.json @@ -1,6 +1,6 @@ { "name": "lisk-framework", - "version": "0.8.2", + "version": "0.8.3-alpha.0", "description": "Lisk blockchain application platform", "author": "Lisk Foundation , lightcurve GmbH ", "license": "Apache-2.0", @@ -41,7 +41,7 @@ }, "dependencies": { "@liskhq/lisk-api-client": "^5.1.2", - "@liskhq/lisk-bft": "^0.3.1", + "@liskhq/lisk-bft": "^0.3.2-alpha.0", "@liskhq/lisk-chain": "^0.3.1", "@liskhq/lisk-codec": "^0.2.0", "@liskhq/lisk-cryptography": "^3.1.0", diff --git a/framework/src/node/forger/forger.ts b/framework/src/node/forger/forger.ts index 5adadab9eb8..57a5853776c 100644 --- a/framework/src/node/forger/forger.ts +++ b/framework/src/node/forger/forger.ts @@ -596,7 +596,9 @@ export class Forger { const previousBlockID = previousBlock.header.id; const forgerInfo = previouslyForgedMap.get(delegateAddress); const maxHeightPreviouslyForged = forgerInfo?.height ?? 0; - const maxHeightPrevoted = await this._bftModule.getMaxHeightPrevoted(); + const maxHeightPrevoted = await this._bftModule.getMaxHeightPrevoted( + previousBlock.header.asset?.maxHeightPrevoted, + ); const stateStore = await this._chainModule.newStateStore(); const reward = this._chainModule.calculateDefaultReward(height); let size = 0; diff --git a/framework/src/node/node.ts b/framework/src/node/node.ts index 8a52bc20e14..085431e6eb5 100644 --- a/framework/src/node/node.ts +++ b/framework/src/node/node.ts @@ -503,6 +503,7 @@ export class Node { networkIdentifier: this._networkIdentifier.toString('hex'), lastBlockID: this._chain.lastBlock.header.id.toString('hex'), height: this._chain.lastBlock.header.height, + genesisHeight: this._chain.genesisHeight, finalizedHeight: this._bft.finalityManager.finalizedHeight, syncing: this._synchronizer.isActive, unconfirmedTransactions: this._transactionPool.getAll().length, diff --git a/framework/src/testing/block_processing_env.ts b/framework/src/testing/block_processing_env.ts index 0a7a8a5d4f7..1df871a2791 100644 --- a/framework/src/testing/block_processing_env.ts +++ b/framework/src/testing/block_processing_env.ts @@ -199,7 +199,9 @@ const createProcessableBlock = async ( const validator = await processor['_chain'].getValidator(nextTimestamp); const passphrase = getPassphraseFromDefaultConfig(validator.address); const seedReveal = await getHashOnion(processor, previousBlockHeader, passphrase); - const maxHeightPrevoted = await processor['_bft'].getMaxHeightPrevoted(); + const maxHeightPrevoted = await processor['_bft'].getMaxHeightPrevoted( + previousBlockHeader.asset.maxHeightPrevoted, + ); const reward = processor['_chain'].calculateDefaultReward(previousBlockHeader.height + 1); const maxHeightPreviouslyForged = await getMaxHeightPreviouslyForged( processor, diff --git a/sdk/package.json b/sdk/package.json index 821fa08ff80..edb23cc58b1 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -1,6 +1,6 @@ { "name": "lisk-sdk", - "version": "5.1.2", + "version": "5.1.3-alpha.0", "description": "Official SDK for the Lisk blockchain application platform", "author": "Lisk Foundation , lightcurve GmbH ", "license": "Apache-2.0", @@ -30,15 +30,15 @@ }, "dependencies": { "@liskhq/lisk-api-client": "^5.1.2", - "@liskhq/lisk-bft": "^0.3.1", + "@liskhq/lisk-bft": "^0.3.2-alpha.0", "@liskhq/lisk-chain": "^0.3.1", "@liskhq/lisk-codec": "^0.2.0", "@liskhq/lisk-cryptography": "^3.1.0", "@liskhq/lisk-db": "^0.2.0", - "@liskhq/lisk-framework-forger-plugin": "^0.2.2", - "@liskhq/lisk-framework-http-api-plugin": "^0.2.2", - "@liskhq/lisk-framework-monitor-plugin": "^0.2.2", - "@liskhq/lisk-framework-report-misbehavior-plugin": "^0.2.2", + "@liskhq/lisk-framework-forger-plugin": "^0.2.3-alpha.0", + "@liskhq/lisk-framework-http-api-plugin": "^0.2.3-alpha.0", + "@liskhq/lisk-framework-monitor-plugin": "^0.2.3-alpha.0", + "@liskhq/lisk-framework-report-misbehavior-plugin": "^0.2.3-alpha.0", "@liskhq/lisk-genesis": "^0.2.1", "@liskhq/lisk-p2p": "^0.7.0", "@liskhq/lisk-passphrase": "^3.1.0", @@ -47,7 +47,7 @@ "@liskhq/lisk-tree": "^0.2.0", "@liskhq/lisk-utils": "^0.2.0", "@liskhq/lisk-validator": "^0.6.0", - "lisk-framework": "^0.8.2" + "lisk-framework": "^0.8.3-alpha.0" }, "devDependencies": { "eslint": "7.22.0",