From 3098e41dfa403ac27e0a675216d249bf82ae4fc4 Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Thu, 17 Apr 2025 19:05:14 +0700 Subject: [PATCH 1/4] perf(dapi): fetch only specific unconfirmed transaction instead of entire mempool --- .../broadcastStateTransitionHandlerFactory.js | 15 ++++++++++++--- ...broadcastStateTransitionHandlerFactory.spec.js | 4 ++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/dapi/lib/grpcServer/handlers/platform/broadcastStateTransitionHandlerFactory.js b/packages/dapi/lib/grpcServer/handlers/platform/broadcastStateTransitionHandlerFactory.js index a17d496918..130a3b1ecb 100644 --- a/packages/dapi/lib/grpcServer/handlers/platform/broadcastStateTransitionHandlerFactory.js +++ b/packages/dapi/lib/grpcServer/handlers/platform/broadcastStateTransitionHandlerFactory.js @@ -76,11 +76,20 @@ function broadcastStateTransitionHandlerFactory( .update(stBytes) .digest(); - // TODO: Apply search filter to fetch specific state transition // Throw an already exist in mempool error if the ST in mempool - const unconfirmedTxsResponse = await requestTenderRpc('unconfirmed_txs', { limit: 100 }); + let unconfirmedTxResponse; + try { + unconfirmedTxResponse = await requestTenderRpc( + 'unconfirmed_tx', + { hash: `0x${stHash.toString('hex')}` }, + ); + } catch (e) { + if (typeof e.data !== 'string' || !e.data.includes('not found')) { + throw e; + } + } - if (unconfirmedTxsResponse?.txs?.includes(stBytes.toString('base64'))) { + if (unconfirmedTxResponse?.tx) { throw new AlreadyExistsGrpcError('state transition already in mempool'); } diff --git a/packages/dapi/test/unit/grpcServer/handlers/platform/broadcastStateTransitionHandlerFactory.spec.js b/packages/dapi/test/unit/grpcServer/handlers/platform/broadcastStateTransitionHandlerFactory.spec.js index de1152d015..8994f1337f 100644 --- a/packages/dapi/test/unit/grpcServer/handlers/platform/broadcastStateTransitionHandlerFactory.spec.js +++ b/packages/dapi/test/unit/grpcServer/handlers/platform/broadcastStateTransitionHandlerFactory.spec.js @@ -194,8 +194,8 @@ describe('broadcastStateTransitionHandlerFactory', () => { data: 'tx already exists in cache', }; - requestTenderRpcMock.withArgs('unconfirmed_txs').resolves({ - txs: [stateTransitionFixture.toBuffer().toString('base64')], + requestTenderRpcMock.withArgs('unconfirmed_tx').resolves({ + tx: [stateTransitionFixture.toBuffer().toString('base64')], }); try { From 5e966d48083d8c68676b6216bbe0be4a5c5eb938 Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Thu, 17 Apr 2025 19:11:05 +0700 Subject: [PATCH 2/4] test: update mock response --- .../platform/broadcastStateTransitionHandlerFactory.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dapi/test/unit/grpcServer/handlers/platform/broadcastStateTransitionHandlerFactory.spec.js b/packages/dapi/test/unit/grpcServer/handlers/platform/broadcastStateTransitionHandlerFactory.spec.js index 8994f1337f..0f4ba1ce66 100644 --- a/packages/dapi/test/unit/grpcServer/handlers/platform/broadcastStateTransitionHandlerFactory.spec.js +++ b/packages/dapi/test/unit/grpcServer/handlers/platform/broadcastStateTransitionHandlerFactory.spec.js @@ -195,7 +195,7 @@ describe('broadcastStateTransitionHandlerFactory', () => { }; requestTenderRpcMock.withArgs('unconfirmed_tx').resolves({ - tx: [stateTransitionFixture.toBuffer().toString('base64')], + tx: stateTransitionFixture.toBuffer().toString('base64'), }); try { From 71c14ba7164f3c55a7c68a8f63ce2aba0e6d0cfb Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Thu, 17 Apr 2025 19:19:46 +0700 Subject: [PATCH 3/4] chore: update docker image --- packages/dashmate/configs/defaults/getBaseConfigFactory.js | 2 +- .../dashmate/configs/getConfigFileMigrationsFactory.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/dashmate/configs/defaults/getBaseConfigFactory.js b/packages/dashmate/configs/defaults/getBaseConfigFactory.js index 1614216ad2..7b04a221c7 100644 --- a/packages/dashmate/configs/defaults/getBaseConfigFactory.js +++ b/packages/dashmate/configs/defaults/getBaseConfigFactory.js @@ -309,7 +309,7 @@ export default function getBaseConfigFactory() { tenderdash: { mode: 'full', docker: { - image: 'dashpay/tenderdash:1', + image: 'dashpay/tenderdash:1.5-dev', }, p2p: { host: '0.0.0.0', diff --git a/packages/dashmate/configs/getConfigFileMigrationsFactory.js b/packages/dashmate/configs/getConfigFileMigrationsFactory.js index e1f62a49da..a0ca2ee8f8 100644 --- a/packages/dashmate/configs/getConfigFileMigrationsFactory.js +++ b/packages/dashmate/configs/getConfigFileMigrationsFactory.js @@ -1076,6 +1076,13 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) }); return configFile; }, + '2.0.0-dev.2': (configFile) => { + Object.entries(configFile.configs) + .forEach(([, options]) => { + options.platform.drive.tenderdash.docker.image = 'dashpay/tenderdash:1.5-dev'; + }); + return configFile; + }, }; } From 2c8334d93fd9b825d1b3c22f73202551f90e7fba Mon Sep 17 00:00:00 2001 From: Lukasz Klimek <842586+lklimek@users.noreply.github.com> Date: Thu, 24 Apr 2025 13:49:22 +0200 Subject: [PATCH 4/4] chore: feature is planned for inclusion in version 2.1.x --- .../configs/getConfigFileMigrationsFactory.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/dashmate/configs/getConfigFileMigrationsFactory.js b/packages/dashmate/configs/getConfigFileMigrationsFactory.js index 95ca78a703..2e3afe4735 100644 --- a/packages/dashmate/configs/getConfigFileMigrationsFactory.js +++ b/packages/dashmate/configs/getConfigFileMigrationsFactory.js @@ -1076,13 +1076,6 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) }); return configFile; }, - '2.0.0-dev.2': (configFile) => { - Object.entries(configFile.configs) - .forEach(([, options]) => { - options.platform.drive.tenderdash.docker.image = 'dashpay/tenderdash:1.5-dev'; - }); - return configFile; - }, '2.0.0-rc.1': (configFile) => { Object.entries(configFile.configs) .forEach(([, options]) => { @@ -1103,6 +1096,13 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) }); return configFile; }, + '2.1.0-dev.1': (configFile) => { + Object.entries(configFile.configs) + .forEach(([, options]) => { + options.platform.drive.tenderdash.docker.image = 'dashpay/tenderdash:1.5-dev'; + }); + return configFile; + }, }; }