From 7df3235fe52ca7d506394284a3d7a7227e831dbc Mon Sep 17 00:00:00 2001 From: pshenmic Date: Thu, 5 Jan 2023 14:01:11 +0400 Subject: [PATCH 01/39] feat(dashmate): expose drive port --- packages/dashmate/docker-compose.platform.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/dashmate/docker-compose.platform.yml b/packages/dashmate/docker-compose.platform.yml index 7ee7157be02..58d77dc44db 100644 --- a/packages/dashmate/docker-compose.platform.yml +++ b/packages/dashmate/docker-compose.platform.yml @@ -37,6 +37,8 @@ services: - TENDERDASH_P2P_PORT=${PLATFORM_DRIVE_TENDERDASH_P2P_PORT} command: yarn workspace @dashevo/drive abci stop_grace_period: 30s + ports: + - "26658:26658" drive_tenderdash: image: ${PLATFORM_DRIVE_TENDERDASH_DOCKER_IMAGE:?err} From ba5728d960872dd7c8470409df32512a41612b4d Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 10 Jan 2023 23:16:09 +0400 Subject: [PATCH 02/39] chore(dashmate): flip hard reset condition --- packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js index 2fc7f35d1a5..ed01ea53ed8 100644 --- a/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js @@ -82,7 +82,7 @@ function resetNodeTaskFactory( { title: 'Initialize Tenderdash', enabled: (ctx) => ( - !ctx.isHardReset && !ctx.skipPlatformInitialization && config.has('platform') + ctx.isHardReset && !ctx.skipPlatformInitialization && config.has('platform') ), task: () => tenderdashInitTask(config), }, From c88cba2c4d338c803d320a057c9af4828428c70e Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 10 Jan 2023 23:40:26 +0400 Subject: [PATCH 03/39] chore(dashmate): add silent error example --- .../src/listr/tasks/startNodeTaskFactory.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js index 3fd0cba757a..4d032b7a46b 100644 --- a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js @@ -4,7 +4,8 @@ const path = require('path'); const { Listr } = require('listr2'); const { Observable } = require('rxjs'); -const { NETWORK_LOCAL } = require('../../constants'); +const { NETWORK_LOCAL, OUTPUT_FORMATS} = require('../../constants'); +const printObject = require("../../printers/printObject"); /** * @@ -21,6 +22,7 @@ function startNodeTaskFactory( waitForMasternodesSync, createRpcClient, buildServicesTask, + flags, ) { /** * @typedef {startNodeTask} @@ -30,7 +32,8 @@ function startNodeTaskFactory( function startNodeTask(config) { // check core is not reindexing if (config.get('core.reindex.enable', true)) { - throw new Error(`Your dashcore node in config [${config.name}] is reindexing, please allow the process to complete first`); + console.log(`Your dashcore node in config [${config.name}] is reindexing, please allow the process to complete first`); + this.exit() } // Check external IP is set @@ -74,7 +77,15 @@ function startNodeTaskFactory( title: 'Check node is not started', task: async () => { if (await dockerCompose.isServiceRunning(config.toEnvs())) { - throw new Error('Running services detected. Please ensure all services are stopped for this config before starting'); + const error = 'Running services detected. Please ensure all services are stopped for this config before starting' + + if (flags.format === OUTPUT_FORMATS.JSON) { + return printObject({error}, flags.format); + } + + // eslint-disable-next-line no-console + console.log(error); + this.exit(); } }, }, From e46bbe51e19b7a76014fe5c99c791da4ab776930 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 10 Jan 2023 23:42:27 +0400 Subject: [PATCH 04/39] chore(dashmate): add silent error example --- packages/dashmate/src/listr/tasks/startNodeTaskFactory.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js index 4d032b7a46b..7fbc8f767dd 100644 --- a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js @@ -79,10 +79,6 @@ function startNodeTaskFactory( if (await dockerCompose.isServiceRunning(config.toEnvs())) { const error = 'Running services detected. Please ensure all services are stopped for this config before starting' - if (flags.format === OUTPUT_FORMATS.JSON) { - return printObject({error}, flags.format); - } - // eslint-disable-next-line no-console console.log(error); this.exit(); From e4de496f1039078c70e3de1925f08e4c01ea2acd Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 10 Jan 2023 23:44:01 +0400 Subject: [PATCH 05/39] chore(dashmate): cleanup --- packages/dashmate/src/listr/tasks/startNodeTaskFactory.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js index 7fbc8f767dd..a9315e87368 100644 --- a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js @@ -4,8 +4,7 @@ const path = require('path'); const { Listr } = require('listr2'); const { Observable } = require('rxjs'); -const { NETWORK_LOCAL, OUTPUT_FORMATS} = require('../../constants'); -const printObject = require("../../printers/printObject"); +const { NETWORK_LOCAL } = require('../../constants'); /** * @@ -22,7 +21,6 @@ function startNodeTaskFactory( waitForMasternodesSync, createRpcClient, buildServicesTask, - flags, ) { /** * @typedef {startNodeTask} From 5c659ffc51acc1c22be0d9af6345fde65e2d50b5 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 10 Jan 2023 23:47:30 +0400 Subject: [PATCH 06/39] chore(dashmate): switch to return --- packages/dashmate/src/listr/tasks/startNodeTaskFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js index a9315e87368..0bf5e84fbfe 100644 --- a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js @@ -79,7 +79,7 @@ function startNodeTaskFactory( // eslint-disable-next-line no-console console.log(error); - this.exit(); + return } }, }, From 05d115481331a86cc78f80ef134bf3386d9d0d93 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Wed, 11 Jan 2023 11:15:15 +0400 Subject: [PATCH 07/39] chore(dashmate): return back switch and reset for devnets --- packages/dashmate/src/commands/reset.js | 2 +- packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/dashmate/src/commands/reset.js b/packages/dashmate/src/commands/reset.js index 17a25f2ad8f..b39a63ae727 100644 --- a/packages/dashmate/src/commands/reset.js +++ b/packages/dashmate/src/commands/reset.js @@ -28,7 +28,7 @@ class ResetCommand extends ConfigBaseCommand { config, resetNodeTask, ) { - if (isHardReset && !isSystemConfig(config.getName())) { + if (isHardReset && (!isSystemConfig(config.getName()) && config.get('network') !== 'devnet')) { throw new Error(`Cannot hard reset non-system config "${config.getName()}"`); } diff --git a/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js index ed01ea53ed8..2fc7f35d1a5 100644 --- a/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js @@ -82,7 +82,7 @@ function resetNodeTaskFactory( { title: 'Initialize Tenderdash', enabled: (ctx) => ( - ctx.isHardReset && !ctx.skipPlatformInitialization && config.has('platform') + !ctx.isHardReset && !ctx.skipPlatformInitialization && config.has('platform') ), task: () => tenderdashInitTask(config), }, From 47e2b0a0f3d06ff467537798d2012da5e689c0d1 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Wed, 11 Jan 2023 11:21:42 +0400 Subject: [PATCH 08/39] chore(dashmate): fix --- packages/dashmate/src/commands/reset.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/dashmate/src/commands/reset.js b/packages/dashmate/src/commands/reset.js index b39a63ae727..757f39e9f33 100644 --- a/packages/dashmate/src/commands/reset.js +++ b/packages/dashmate/src/commands/reset.js @@ -5,6 +5,7 @@ const { Flags } = require('@oclif/core'); const ConfigBaseCommand = require('../oclif/command/ConfigBaseCommand'); const MuteOneLineError = require('../oclif/errors/MuteOneLineError'); +const {NETWORKS} = require("../constants"); class ResetCommand extends ConfigBaseCommand { /** @@ -28,7 +29,7 @@ class ResetCommand extends ConfigBaseCommand { config, resetNodeTask, ) { - if (isHardReset && (!isSystemConfig(config.getName()) && config.get('network') !== 'devnet')) { + if (isHardReset && (!isSystemConfig(config.getName()) && config.get('network') !== NETWORKS.NETWORK_DEVNET)) { throw new Error(`Cannot hard reset non-system config "${config.getName()}"`); } From 8eaca6c753f27e93aa7e5dfa4611060b001b5c63 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Wed, 11 Jan 2023 11:32:58 +0400 Subject: [PATCH 09/39] chore(dashmate): change comparison --- packages/dashmate/src/commands/reset.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashmate/src/commands/reset.js b/packages/dashmate/src/commands/reset.js index 757f39e9f33..5d7249337ad 100644 --- a/packages/dashmate/src/commands/reset.js +++ b/packages/dashmate/src/commands/reset.js @@ -29,7 +29,7 @@ class ResetCommand extends ConfigBaseCommand { config, resetNodeTask, ) { - if (isHardReset && (!isSystemConfig(config.getName()) && config.get('network') !== NETWORKS.NETWORK_DEVNET)) { + if (isHardReset && (!isSystemConfig(config.getName()) || config.get('network') === NETWORKS.NETWORK_DEVNET)) { throw new Error(`Cannot hard reset non-system config "${config.getName()}"`); } From dfd93dfd5b19bb6f26c1515fb0479f9eec89e7e9 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Wed, 11 Jan 2023 11:45:03 +0400 Subject: [PATCH 10/39] chore(dashmate): change back --- packages/dashmate/src/commands/reset.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashmate/src/commands/reset.js b/packages/dashmate/src/commands/reset.js index 5d7249337ad..757f39e9f33 100644 --- a/packages/dashmate/src/commands/reset.js +++ b/packages/dashmate/src/commands/reset.js @@ -29,7 +29,7 @@ class ResetCommand extends ConfigBaseCommand { config, resetNodeTask, ) { - if (isHardReset && (!isSystemConfig(config.getName()) || config.get('network') === NETWORKS.NETWORK_DEVNET)) { + if (isHardReset && (!isSystemConfig(config.getName()) && config.get('network') !== NETWORKS.NETWORK_DEVNET)) { throw new Error(`Cannot hard reset non-system config "${config.getName()}"`); } From f046d6795e73fc85775e65506c38bf79d827e1c5 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Wed, 11 Jan 2023 11:46:48 +0400 Subject: [PATCH 11/39] chore(dashmate): debug --- packages/dashmate/src/commands/reset.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/dashmate/src/commands/reset.js b/packages/dashmate/src/commands/reset.js index 757f39e9f33..96eb9501072 100644 --- a/packages/dashmate/src/commands/reset.js +++ b/packages/dashmate/src/commands/reset.js @@ -29,6 +29,7 @@ class ResetCommand extends ConfigBaseCommand { config, resetNodeTask, ) { + console.log(isHardReset, !isSystemConfig(config.getName()), config.get('network'), NETWORKS.NETWORK_DEVNET) if (isHardReset && (!isSystemConfig(config.getName()) && config.get('network') !== NETWORKS.NETWORK_DEVNET)) { throw new Error(`Cannot hard reset non-system config "${config.getName()}"`); } From 569c51b2b3b283f65cfd27c62512e45c5dabc933 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Wed, 11 Jan 2023 11:48:52 +0400 Subject: [PATCH 12/39] chore(dashmate): change back to constant --- packages/dashmate/src/commands/reset.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/dashmate/src/commands/reset.js b/packages/dashmate/src/commands/reset.js index 96eb9501072..fa8118e67b6 100644 --- a/packages/dashmate/src/commands/reset.js +++ b/packages/dashmate/src/commands/reset.js @@ -29,8 +29,7 @@ class ResetCommand extends ConfigBaseCommand { config, resetNodeTask, ) { - console.log(isHardReset, !isSystemConfig(config.getName()), config.get('network'), NETWORKS.NETWORK_DEVNET) - if (isHardReset && (!isSystemConfig(config.getName()) && config.get('network') !== NETWORKS.NETWORK_DEVNET)) { + if (isHardReset && (!isSystemConfig(config.getName()) && config.get('network') !== 'devnet')) { throw new Error(`Cannot hard reset non-system config "${config.getName()}"`); } From b6f6c7e439779657e7d809fa22935db598d53fa6 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Wed, 11 Jan 2023 13:18:44 +0400 Subject: [PATCH 13/39] chore(dashmate): silent error --- packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js index 14f7cef1e40..09dc8fc2917 100644 --- a/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js @@ -23,7 +23,8 @@ function stopNodeTaskFactory( skip: (ctx) => ctx.isForce, task: async () => { if (!await dockerCompose.isServiceRunning(config.toEnvs())) { - throw new Error('Node is not running'); + console.log(`Node is not running`); + this.exit() } }, }, From 874df849ea1a2738f4089c473df412a644a9aeef Mon Sep 17 00:00:00 2001 From: pshenmic Date: Wed, 11 Jan 2023 14:02:16 +0400 Subject: [PATCH 14/39] chore(dashmate): revert silent errors --- packages/dashmate/src/listr/tasks/startNodeTaskFactory.js | 6 +----- packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js | 3 +-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js index 0bf5e84fbfe..b7129ed30ac 100644 --- a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js @@ -75,11 +75,7 @@ function startNodeTaskFactory( title: 'Check node is not started', task: async () => { if (await dockerCompose.isServiceRunning(config.toEnvs())) { - const error = 'Running services detected. Please ensure all services are stopped for this config before starting' - - // eslint-disable-next-line no-console - console.log(error); - return + throw new Error('Running services detected. Please ensure all services are stopped for this config before starting') } }, }, diff --git a/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js index 09dc8fc2917..14f7cef1e40 100644 --- a/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js @@ -23,8 +23,7 @@ function stopNodeTaskFactory( skip: (ctx) => ctx.isForce, task: async () => { if (!await dockerCompose.isServiceRunning(config.toEnvs())) { - console.log(`Node is not running`); - this.exit() + throw new Error('Node is not running'); } }, }, From efa1f9ad641c80b6f19f3fc92ba0b9d6d8d473c3 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 17 Jan 2023 15:31:16 +0400 Subject: [PATCH 15/39] chore(dashmate): revert some things --- packages/dashmate/docker-compose.platform.yml | 2 -- packages/dashmate/src/commands/reset.js | 3 +-- packages/dashmate/src/listr/tasks/startNodeTaskFactory.js | 5 ++--- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/dashmate/docker-compose.platform.yml b/packages/dashmate/docker-compose.platform.yml index 58d77dc44db..7ee7157be02 100644 --- a/packages/dashmate/docker-compose.platform.yml +++ b/packages/dashmate/docker-compose.platform.yml @@ -37,8 +37,6 @@ services: - TENDERDASH_P2P_PORT=${PLATFORM_DRIVE_TENDERDASH_P2P_PORT} command: yarn workspace @dashevo/drive abci stop_grace_period: 30s - ports: - - "26658:26658" drive_tenderdash: image: ${PLATFORM_DRIVE_TENDERDASH_DOCKER_IMAGE:?err} diff --git a/packages/dashmate/src/commands/reset.js b/packages/dashmate/src/commands/reset.js index fa8118e67b6..17a25f2ad8f 100644 --- a/packages/dashmate/src/commands/reset.js +++ b/packages/dashmate/src/commands/reset.js @@ -5,7 +5,6 @@ const { Flags } = require('@oclif/core'); const ConfigBaseCommand = require('../oclif/command/ConfigBaseCommand'); const MuteOneLineError = require('../oclif/errors/MuteOneLineError'); -const {NETWORKS} = require("../constants"); class ResetCommand extends ConfigBaseCommand { /** @@ -29,7 +28,7 @@ class ResetCommand extends ConfigBaseCommand { config, resetNodeTask, ) { - if (isHardReset && (!isSystemConfig(config.getName()) && config.get('network') !== 'devnet')) { + if (isHardReset && !isSystemConfig(config.getName())) { throw new Error(`Cannot hard reset non-system config "${config.getName()}"`); } diff --git a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js index b7129ed30ac..3fd0cba757a 100644 --- a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js @@ -30,8 +30,7 @@ function startNodeTaskFactory( function startNodeTask(config) { // check core is not reindexing if (config.get('core.reindex.enable', true)) { - console.log(`Your dashcore node in config [${config.name}] is reindexing, please allow the process to complete first`); - this.exit() + throw new Error(`Your dashcore node in config [${config.name}] is reindexing, please allow the process to complete first`); } // Check external IP is set @@ -75,7 +74,7 @@ function startNodeTaskFactory( title: 'Check node is not started', task: async () => { if (await dockerCompose.isServiceRunning(config.toEnvs())) { - throw new Error('Running services detected. Please ensure all services are stopped for this config before starting') + throw new Error('Running services detected. Please ensure all services are stopped for this config before starting'); } }, }, From 22ea8f30bc9efabbb7da8296b206cf0d8582cddd Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 17 Jan 2023 15:38:06 +0400 Subject: [PATCH 16/39] chore(dashmate): implement drive status with echo --- packages/dashmate/Dockerfile | 2 +- packages/dashmate/configs/migrations.js | 5 ++- packages/dashmate/docker-compose.platform.yml | 2 + .../dashmate/src/commands/status/platform.js | 17 +++++-- packages/dashmate/src/docker/DockerCompose.js | 16 +++++++ .../src/listr/tasks/resetNodeTaskFactory.js | 8 ++-- packages/dashmate/src/status/colors.js | 9 ++++ .../dashmate/src/status/scopes/platform.js | 45 +++++++++++++------ .../dashmate/src/util/getConnectionHost.js | 9 ++++ .../dashmate/test/unit/status/colors.spec.js | 17 +++++++ packages/js-drive/package.json | 1 + packages/js-drive/scripts/echo.js | 32 +++++++++++++ 12 files changed, 141 insertions(+), 22 deletions(-) create mode 100644 packages/dashmate/src/util/getConnectionHost.js create mode 100644 packages/js-drive/scripts/echo.js diff --git a/packages/dashmate/Dockerfile b/packages/dashmate/Dockerfile index dfe9b6da646..ef384a24482 100644 --- a/packages/dashmate/Dockerfile +++ b/packages/dashmate/Dockerfile @@ -53,7 +53,7 @@ ENV NODE_ENV ${NODE_ENV} RUN apk update && \ apk --no-cache upgrade && \ - apk add --no-cache docker-cli + apk add --no-cache docker-cli docker-cli-compose LABEL maintainer="Dash Developers " LABEL description="Dashmate Helper Node.JS" diff --git a/packages/dashmate/configs/migrations.js b/packages/dashmate/configs/migrations.js index cbd3e8aa8ea..21eeb5170e3 100644 --- a/packages/dashmate/configs/migrations.js +++ b/packages/dashmate/configs/migrations.js @@ -405,12 +405,15 @@ module.exports = { config.core.indexes = config.name === 'mainnet' ? 0 : 1; config.core.minimumDifficultyBlocks = 0; config.core.powTargetSpacing = 150; - config.platform.tenderdash.log.level = 'debug'; config.core.rpc.allowIps = [ '127.0.0.1', '172.16.0.0/12', '192.168.0.0/16', ]; + + if (config.platform) { + config.platform.drive.tenderdash.log.level = 'debug' + } }); return configFile; diff --git a/packages/dashmate/docker-compose.platform.yml b/packages/dashmate/docker-compose.platform.yml index 7ee7157be02..08829a06060 100644 --- a/packages/dashmate/docker-compose.platform.yml +++ b/packages/dashmate/docker-compose.platform.yml @@ -117,6 +117,8 @@ services: image: ${DASHMATE_HELPER_DOCKER_IMAGE:?err} restart: unless-stopped command: yarn workspace dashmate helper ${CONFIG_NAME:?err} + environment: + - 'DASHMATE_HELPER=true' volumes: - ${DASHMATE_HOME_DIR:?err}:/root/.dashmate - /var/run/docker.sock:/var/run/docker.sock diff --git a/packages/dashmate/src/commands/status/platform.js b/packages/dashmate/src/commands/status/platform.js index 530d7d589e5..6778bc7a871 100644 --- a/packages/dashmate/src/commands/status/platform.js +++ b/packages/dashmate/src/commands/status/platform.js @@ -55,6 +55,7 @@ class PlatformStatusCommand extends ConfigBaseCommand { p2pPortState, rpcService, tenderdash, + drive } = scope; const plain = { @@ -67,10 +68,20 @@ class PlatformStatusCommand extends ConfigBaseCommand { 'RPC service': rpcService, }; + const {dockerStatus: tenderdashDockerStatus} = tenderdash + const {serviceStatus: tenderdashServiceStatus} = tenderdash + + const {dockerStatus: driveDockerStatus} = drive + const {serviceStatus: driveServiceStatus} = drive + + plain['Tenderdash Docker Status'] = colors.docker(tenderdashDockerStatus)(tenderdashDockerStatus); + plain['Tenderdash Service Status'] = colors.status(tenderdashServiceStatus)(tenderdashServiceStatus); + + plain['Drive Docker Status'] = colors.docker(driveDockerStatus)(driveDockerStatus); + plain['Drive Service Status'] = colors.status(driveServiceStatus)(driveServiceStatus); + if (tenderdash.version) { const { - dockerStatus, - serviceStatus, version: tenderdashVersion, lastBlockHeight: platformBlockHeight, latestAppHash: platformLatestAppHash, @@ -78,8 +89,6 @@ class PlatformStatusCommand extends ConfigBaseCommand { network: tenderdashNetwork, } = tenderdash; - plain['Docker Status'] = dockerStatus; - plain['Service Status'] = colors.status(serviceStatus)(serviceStatus); plain['Network'] = tenderdashNetwork; plain['Tenderdash Version'] = tenderdashVersion; plain['Block height'] = platformBlockHeight; diff --git a/packages/dashmate/src/docker/DockerCompose.js b/packages/dashmate/src/docker/DockerCompose.js index 3ab86e3649b..92e2c9a18f2 100644 --- a/packages/dashmate/src/docker/DockerCompose.js +++ b/packages/dashmate/src/docker/DockerCompose.js @@ -406,6 +406,22 @@ class DockerCompose { env, }; } + + /** + * Resolve container internal IP + * + * @param {Object} envs + * @param {string} serviceName + * @return {Promise} + */ + async getContainerIp(envs, serviceName) { + const containerInfo = await this.inspectService(envs, serviceName) + + const [firstNetwork] = Object.keys(containerInfo.NetworkSettings.Networks) + const {IPAddress: containerIP} = containerInfo.NetworkSettings.Networks[firstNetwork] + + return containerIP + } } DockerCompose.DOCKER_COMPOSE_MIN_VERSION = '2.0.0'; diff --git a/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js index 2fc7f35d1a5..28da91f123a 100644 --- a/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js @@ -81,9 +81,11 @@ function resetNodeTaskFactory( }, { title: 'Initialize Tenderdash', - enabled: (ctx) => ( - !ctx.isHardReset && !ctx.skipPlatformInitialization && config.has('platform') - ), + // todo disabled for testing... most likely not needed anymore + enabled: false, + // enabled: (ctx) => ( + // !ctx.isHardReset && !ctx.skipPlatformInitialization && config.has('platform') + // ), task: () => tenderdashInitTask(config), }, ]); diff --git a/packages/dashmate/src/status/colors.js b/packages/dashmate/src/status/colors.js index 44c79e5d270..0ef3bc13c25 100644 --- a/packages/dashmate/src/status/colors.js +++ b/packages/dashmate/src/status/colors.js @@ -1,6 +1,7 @@ const chalk = require('chalk'); const PortStateEnum = require('../enums/portState'); const ServiceStatusEnum = require('../enums/serviceStatus'); +const DockerStatusEnum = require("../enums/dockerStatus"); module.exports = { @@ -14,6 +15,14 @@ module.exports = { } return chalk.red; }, + docker: (status) => { + switch (status) { + case DockerStatusEnum.running: + return chalk.green; + default: + return chalk.red; + } + }, status: (status) => { switch (status) { case ServiceStatusEnum.up: diff --git a/packages/dashmate/src/status/scopes/platform.js b/packages/dashmate/src/status/scopes/platform.js index 2d0a553d14e..50b2fc46700 100644 --- a/packages/dashmate/src/status/scopes/platform.js +++ b/packages/dashmate/src/status/scopes/platform.js @@ -1,8 +1,8 @@ const fetch = require('node-fetch'); const determineStatus = require('../determineStatus'); const ServiceStatusEnum = require('../../enums/serviceStatus'); -const DockerStatusEnum = require('../../enums/dockerStatus'); const providers = require('../providers'); +const getConnectionHost = require("../../util/getConnectionHost"); /** * @returns {getPlatformScopeFactory} @@ -18,10 +18,17 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { * @returns {Promise} */ async function getPlatformScope(config) { + const hosts = { + core: await getConnectionHost(dockerCompose, config, 'core'), + drive: await dockerCompose.getContainerIp(config.toEnvs(), 'drive_abci'), + tenderdash: await getConnectionHost(dockerCompose, config, 'drive_tenderdash'), + } + const rpcClient = createRpcClient({ port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), + host: hosts.core }); const httpPort = config.get('platform.dapi.envoy.http.port'); @@ -32,19 +39,26 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { const p2pService = `${config.get('externalIp')}:${p2pPort}`; const rpcService = `127.0.0.1:${config.get('platform.drive.tenderdash.rpc.port')}`; - const dockerStatus = await determineStatus.docker(dockerCompose, config, 'drive_tenderdash'); - - if (dockerStatus !== DockerStatusEnum.running) { - throw new Error('drive_tenderdash container is not running'); - } - const { result: { IsSynced: coreIsSynced, }, } = await rpcClient.mnsync('status'); - const serviceStatus = determineStatus.platform(dockerStatus, coreIsSynced); + const tenderdashDockerStatus = await determineStatus.docker(dockerCompose, config, 'drive_tenderdash'); + const driveDockerStatus = await determineStatus.docker(dockerCompose, config, 'drive_abci'); + + const tenderdashServiceStatus = determineStatus.platform(tenderdashDockerStatus, coreIsSynced); + let driveServiceStatus = determineStatus.platform(driveDockerStatus, coreIsSynced); + + const driveEchoResult = await dockerCompose.execCommand(config.toEnvs(), + 'drive_abci', 'yarn workspace @dashevo/drive echo') + + if (driveEchoResult.exitCode !== 0) { + console.warn(driveEchoResult.out) + + driveServiceStatus = ServiceStatusEnum.error; + } const platform = { coreIsSynced, @@ -59,8 +73,8 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { gRPCPortState: null, p2pPortState: null, tenderdash: { - dockerStatus, - serviceStatus, + dockerStatus: tenderdashDockerStatus, + serviceStatus: tenderdashServiceStatus, version: null, catchingUp: null, lastBlockHeight: null, @@ -68,14 +82,19 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { peers: null, network: null, }, + drive: { + dockerStatus: driveDockerStatus, + serviceStatus: driveServiceStatus + } }; // Collecting platform data fails if Tenderdash is waiting for core to sync - if (serviceStatus === ServiceStatusEnum.up) { + if (tenderdashServiceStatus === ServiceStatusEnum.up) { try { + const [tenderdashStatusResponse, tenderdashNetInfoResponse] = await Promise.all([ - fetch(`http://localhost:${config.get('platform.drive.tenderdash.rpc.port')}/status`), - fetch(`http://localhost:${config.get('platform.drive.tenderdash.rpc.port')}/net_info`), + fetch(`http://${hosts.tenderdash}:${config.get('platform.drive.tenderdash.rpc.port')}/status`), + fetch(`http://${hosts.tenderdash}:${config.get('platform.drive.tenderdash.rpc.port')}/net_info`), ]); const [httpPortState, gRPCPortState, p2pPortState] = await Promise.all([ diff --git a/packages/dashmate/src/util/getConnectionHost.js b/packages/dashmate/src/util/getConnectionHost.js new file mode 100644 index 00000000000..0da7b17bf59 --- /dev/null +++ b/packages/dashmate/src/util/getConnectionHost.js @@ -0,0 +1,9 @@ +async function getConnectionHost(dockerCompose, config, serviceName) { + if (process.env.DASHMATE_HELPER === 'true') { + return dockerCompose.getContainerIp(config.toEnvs(), serviceName) + } + + return '127.0.0.1' +} + +module.exports = getConnectionHost; diff --git a/packages/dashmate/test/unit/status/colors.spec.js b/packages/dashmate/test/unit/status/colors.spec.js index 18da4254298..b3c51342f2a 100644 --- a/packages/dashmate/test/unit/status/colors.spec.js +++ b/packages/dashmate/test/unit/status/colors.spec.js @@ -1,6 +1,7 @@ const chalk = require('chalk'); const colors = require('../../../src/status/colors'); const ServiceStatusEnum = require('../../../src/enums/serviceStatus'); +const DockerStatusEnum = require('../../../src/enums/dockerStatus'); describe('colors.js', () => { describe('#portState', () => { @@ -17,6 +18,22 @@ describe('colors.js', () => { }); }); + describe('#docker', () => { + it('should color green', async () => { + const color = colors.docker(DockerStatusEnum.running); + + expect(color).to.be.equal(chalk.green); + }); + + it('should color red', async () => { + expect(colors.docker(DockerStatusEnum.exited)).to.be.equal(chalk.red); + expect(colors.docker(DockerStatusEnum.dead)).to.be.equal(chalk.red); + expect(colors.docker(DockerStatusEnum.removing)).to.be.equal(chalk.red); + expect(colors.docker(DockerStatusEnum.created)).to.be.equal(chalk.red); + expect(colors.docker(DockerStatusEnum.restarting)).to.be.equal(chalk.red); + }); + }); + describe('#status', () => { it('should color green', async () => { expect(colors.status(ServiceStatusEnum.up)).to.be.equal(chalk.green); diff --git a/packages/js-drive/package.json b/packages/js-drive/package.json index 2951efafea0..4f88541ebc2 100644 --- a/packages/js-drive/package.json +++ b/packages/js-drive/package.json @@ -30,6 +30,7 @@ ], "scripts": { "abci": "node scripts/abci", + "echo": "node scripts/echo", "lint": "eslint .", "test": "yarn run test:coverage", "test:coverage": "nyc --check-coverage --stmts=93 --branch=85 --funcs=90 --lines=90 yarn run mocha './test/unit/**/*.spec.js' './test/integration/**/*.spec.js'", diff --git a/packages/js-drive/scripts/echo.js b/packages/js-drive/scripts/echo.js new file mode 100644 index 00000000000..07576df37b3 --- /dev/null +++ b/packages/js-drive/scripts/echo.js @@ -0,0 +1,32 @@ +const net = require("net") + +async function sendEcho(ip) { + const echoRequestBytes = Buffer.from('0a0a080a0668656c6c6f21', 'hex'); + + return new Promise((resolve, reject) => { + const client = net.connect(26658, ip); + + client.on('connect', () => { + client.write(echoRequestBytes); + }); + + client.on('data', () => { + client.destroy(); + + resolve('ok'); + }); + + client.on('error', reject); + + setTimeout(() => { + reject(new Error('Can\'t connect to ABCI port: timeout.')); + }, 2000); + }); +} + +sendEcho('127.0.0.1') + .then(console.log) + .catch((e) => { + console.error(e) + process.exit(1) +}) From 094b3ba4413368d014f9b97e669203ba6905c5fb Mon Sep 17 00:00:00 2001 From: pshenmic Date: Wed, 18 Jan 2023 17:35:04 +0400 Subject: [PATCH 17/39] chore(dashmate): disable with arrow function --- packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js index 28da91f123a..be61c3f1657 100644 --- a/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js @@ -82,7 +82,7 @@ function resetNodeTaskFactory( { title: 'Initialize Tenderdash', // todo disabled for testing... most likely not needed anymore - enabled: false, + enabled: () => false, // enabled: (ctx) => ( // !ctx.isHardReset && !ctx.skipPlatformInitialization && config.has('platform') // ), From 2bb53e05a113b8bceb0a1ad858f3c300a8dd9d5c Mon Sep 17 00:00:00 2001 From: pshenmic Date: Thu, 19 Jan 2023 20:26:12 +0400 Subject: [PATCH 18/39] chore(dashmate): use locally built image of dashmate helper --- packages/dashmate/docker-compose.platform.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashmate/docker-compose.platform.yml b/packages/dashmate/docker-compose.platform.yml index 08829a06060..d2d62481668 100644 --- a/packages/dashmate/docker-compose.platform.yml +++ b/packages/dashmate/docker-compose.platform.yml @@ -114,7 +114,7 @@ services: stop_grace_period: 10s dashmate_helper: - image: ${DASHMATE_HELPER_DOCKER_IMAGE:?err} + image: dashmate_local restart: unless-stopped command: yarn workspace dashmate helper ${CONFIG_NAME:?err} environment: From 2bb5d538f1d924c407099784a2de91a6e95a97bf Mon Sep 17 00:00:00 2001 From: pshenmic Date: Thu, 19 Jan 2023 21:07:30 +0400 Subject: [PATCH 19/39] chore(dashmate): use prebuilt docker image --- packages/dashmate/docker-compose.platform.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashmate/docker-compose.platform.yml b/packages/dashmate/docker-compose.platform.yml index d2d62481668..1cfb12d8f38 100644 --- a/packages/dashmate/docker-compose.platform.yml +++ b/packages/dashmate/docker-compose.platform.yml @@ -114,7 +114,7 @@ services: stop_grace_period: 10s dashmate_helper: - image: dashmate_local + image: pshenmic/dashmate_helper restart: unless-stopped command: yarn workspace dashmate helper ${CONFIG_NAME:?err} environment: From febeb98cfa738ed3cd4abe3cc4aa0278728658b8 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Fri, 20 Jan 2023 12:21:56 +0400 Subject: [PATCH 20/39] feat(dashmate): add few more fields to the status platform --- .../configs/schema/configJsonSchema.js | 5 +- .../dashmate/src/commands/status/platform.js | 106 +++++++++--------- .../dashmate/src/status/scopes/platform.js | 10 +- .../platform/drive/tenderdash/config.toml.dot | 1 + 4 files changed, 69 insertions(+), 53 deletions(-) diff --git a/packages/dashmate/configs/schema/configJsonSchema.js b/packages/dashmate/configs/schema/configJsonSchema.js index a6fce8bdf2e..a0cedd82354 100644 --- a/packages/dashmate/configs/schema/configJsonSchema.js +++ b/packages/dashmate/configs/schema/configJsonSchema.js @@ -491,6 +491,9 @@ module.exports = { nodeKey: { type: 'object', }, + moniker: { + type: 'string', + }, genesis: { type: 'object', }, @@ -499,7 +502,7 @@ module.exports = { }, }, required: ['docker', 'p2p', 'rpc', 'consensus', 'nodeKey', 'genesis', 'nodeId'], - additionalProperties: false, + additionalProperties: true, }, }, required: ['abci', 'tenderdash'], diff --git a/packages/dashmate/src/commands/status/platform.js b/packages/dashmate/src/commands/status/platform.js index 6778bc7a871..7d3a01a8176 100644 --- a/packages/dashmate/src/commands/status/platform.js +++ b/packages/dashmate/src/commands/status/platform.js @@ -43,60 +43,64 @@ class PlatformStatusCommand extends ConfigBaseCommand { throw new Error('Platform status is not available until core sync is complete!'); } - const { - httpService, - httpPort, - httpPortState, - gRPCService, - gRPCPort, - gRPCPortState, - p2pService, - p2pPort, - p2pPortState, - rpcService, - tenderdash, - drive - } = scope; - - const plain = { - 'HTTP service': httpService, - 'HTTP port': `${httpPort} ${colors.portState(httpPortState)(httpPortState)}`, - 'GRPC service': gRPCService, - 'GRPC port': `${gRPCPort} ${colors.portState(gRPCPortState)(gRPCPortState)}`, - 'P2P service': p2pService, - 'P2P port': `${p2pPort} ${colors.portState(p2pPortState)(p2pPortState)}`, - 'RPC service': rpcService, - }; - - const {dockerStatus: tenderdashDockerStatus} = tenderdash - const {serviceStatus: tenderdashServiceStatus} = tenderdash - - const {dockerStatus: driveDockerStatus} = drive - const {serviceStatus: driveServiceStatus} = drive - - plain['Tenderdash Docker Status'] = colors.docker(tenderdashDockerStatus)(tenderdashDockerStatus); - plain['Tenderdash Service Status'] = colors.status(tenderdashServiceStatus)(tenderdashServiceStatus); - - plain['Drive Docker Status'] = colors.docker(driveDockerStatus)(driveDockerStatus); - plain['Drive Service Status'] = colors.status(driveServiceStatus)(driveServiceStatus); - - if (tenderdash.version) { + if (flags.format === OUTPUT_FORMATS.PLAIN) { const { - version: tenderdashVersion, - lastBlockHeight: platformBlockHeight, - latestAppHash: platformLatestAppHash, - peers: platformPeers, - network: tenderdashNetwork, - } = tenderdash; - - plain['Network'] = tenderdashNetwork; - plain['Tenderdash Version'] = tenderdashVersion; - plain['Block height'] = platformBlockHeight; - plain['Peer count'] = platformPeers; - plain['App hash'] = platformLatestAppHash; + httpService, + httpPort, + httpPortState, + gRPCService, + gRPCPort, + gRPCPortState, + p2pService, + p2pPort, + p2pPortState, + rpcService, + tenderdash, + drive + } = scope; + + const plain = { + 'HTTP service': httpService, + 'HTTP port': `${httpPort} ${colors.portState(httpPortState)(httpPortState)}`, + 'GRPC service': gRPCService, + 'GRPC port': `${gRPCPort} ${colors.portState(gRPCPortState)(gRPCPortState)}`, + 'P2P service': p2pService, + 'P2P port': `${p2pPort} ${colors.portState(p2pPortState)(p2pPortState)}`, + 'RPC service': rpcService, + }; + + const {dockerStatus: tenderdashDockerStatus} = tenderdash + const {serviceStatus: tenderdashServiceStatus} = tenderdash + + const {dockerStatus: driveDockerStatus} = drive + const {serviceStatus: driveServiceStatus} = drive + + plain['Tenderdash Docker Status'] = colors.docker(tenderdashDockerStatus)(tenderdashDockerStatus); + plain['Tenderdash Service Status'] = colors.status(tenderdashServiceStatus)(tenderdashServiceStatus); + + plain['Drive Docker Status'] = colors.docker(driveDockerStatus)(driveDockerStatus); + plain['Drive Service Status'] = colors.status(driveServiceStatus)(driveServiceStatus); + + if (tenderdash.version) { + const { + version: tenderdashVersion, + lastBlockHeight: platformBlockHeight, + latestAppHash: platformLatestAppHash, + peers: platformPeers, + network: tenderdashNetwork, + } = tenderdash; + + plain['Network'] = tenderdashNetwork; + plain['Tenderdash Version'] = tenderdashVersion; + plain['Block height'] = platformBlockHeight; + plain['Peer count'] = platformPeers; + plain['App hash'] = platformLatestAppHash; + } + + return printObject(plain, flags.format); } - return printObject(plain, flags.format); + return printObject(scope, flags.format); } } diff --git a/packages/dashmate/src/status/scopes/platform.js b/packages/dashmate/src/status/scopes/platform.js index 50b2fc46700..93e23aaca14 100644 --- a/packages/dashmate/src/status/scopes/platform.js +++ b/packages/dashmate/src/status/scopes/platform.js @@ -76,10 +76,13 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { dockerStatus: tenderdashDockerStatus, serviceStatus: tenderdashServiceStatus, version: null, + listening: null, catchingUp: null, + lastBlockHash: null, lastBlockHeight: null, latestAppHash: null, peers: null, + moniker: null, network: null, }, drive: { @@ -112,18 +115,23 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { platform.gRPCPortState = gRPCPortState; platform.p2pPortState = p2pPortState; - const { version, network } = tenderdashStatus.node_info; + const { version, network, moniker } = tenderdashStatus.node_info; const catchingUp = tenderdashStatus.sync_info.catching_up; const lastBlockHeight = tenderdashStatus.sync_info.latest_block_height; + const lastBlockHash = tenderdashStatus.sync_info.latest_block_hash; const latestAppHash = tenderdashStatus.sync_info.latest_app_hash; const platformPeers = tenderdashNetInfo.n_peers; + const listening = tenderdashNetInfo.listening; platform.tenderdash.version = version; + platform.tenderdash.listening = listening; platform.tenderdash.lastBlockHeight = lastBlockHeight; + platform.tenderdash.lastBlockHash = lastBlockHash; platform.tenderdash.catchingUp = catchingUp; platform.tenderdash.peers = platformPeers; + platform.tenderdash.moniker = moniker; platform.tenderdash.network = network; platform.tenderdash.latestAppHash = latestAppHash; } catch (e) { diff --git a/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot b/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot index fc6afaf9041..78e18d6c4d1 100644 --- a/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot +++ b/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot @@ -16,6 +16,7 @@ proxy-app = "tcp://drive_abci:26658" # A custom human readable name for this node #moniker = "" +{{?it.platform.drive.tenderdash.moniker}}moniker="{{=it.platform.drive.tenderdash.moniker}}"{{??}}11{{?}} # Database backend: goleveldb | cleveldb | boltdb | rocksdb | badgerdb # * goleveldb (github.com/syndtr/goleveldb - most popular implementation) From e365dcb945a9f468d4f0214e0d6cb5d14f898572 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Fri, 20 Jan 2023 12:47:47 +0400 Subject: [PATCH 21/39] fix(dashmate): add missing spaces --- .../templates/platform/drive/tenderdash/config.toml.dot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot b/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot index 78e18d6c4d1..232be6be156 100644 --- a/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot +++ b/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot @@ -16,7 +16,7 @@ proxy-app = "tcp://drive_abci:26658" # A custom human readable name for this node #moniker = "" -{{?it.platform.drive.tenderdash.moniker}}moniker="{{=it.platform.drive.tenderdash.moniker}}"{{??}}11{{?}} +{{?it.platform.drive.tenderdash.moniker}}moniker = "{{=it.platform.drive.tenderdash.moniker}}"{{??}}11{{?}} # Database backend: goleveldb | cleveldb | boltdb | rocksdb | badgerdb # * goleveldb (github.com/syndtr/goleveldb - most popular implementation) From 9dc4ff767f5ac67f0bcfed1255bdceb258536f54 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Fri, 20 Jan 2023 12:54:28 +0400 Subject: [PATCH 22/39] fix(dashmate): forgot to remove --- .../templates/platform/drive/tenderdash/config.toml.dot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot b/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot index 232be6be156..0b9e954d8f7 100644 --- a/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot +++ b/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot @@ -16,7 +16,7 @@ proxy-app = "tcp://drive_abci:26658" # A custom human readable name for this node #moniker = "" -{{?it.platform.drive.tenderdash.moniker}}moniker = "{{=it.platform.drive.tenderdash.moniker}}"{{??}}11{{?}} +{{?it.platform.drive.tenderdash.moniker}}moniker = "{{=it.platform.drive.tenderdash.moniker}}"{{??}}{{?}} # Database backend: goleveldb | cleveldb | boltdb | rocksdb | badgerdb # * goleveldb (github.com/syndtr/goleveldb - most popular implementation) From aa9b9c79e67d3b7a198f59f457b227226adf6f0c Mon Sep 17 00:00:00 2001 From: pshenmic Date: Fri, 20 Jan 2023 13:07:21 +0400 Subject: [PATCH 23/39] fix(dashmate): add parseInt for peers --- packages/dashmate/src/status/scopes/platform.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashmate/src/status/scopes/platform.js b/packages/dashmate/src/status/scopes/platform.js index 93e23aaca14..42f2894ecdd 100644 --- a/packages/dashmate/src/status/scopes/platform.js +++ b/packages/dashmate/src/status/scopes/platform.js @@ -122,7 +122,7 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { const lastBlockHash = tenderdashStatus.sync_info.latest_block_hash; const latestAppHash = tenderdashStatus.sync_info.latest_app_hash; - const platformPeers = tenderdashNetInfo.n_peers; + const platformPeers = parseInt(tenderdashNetInfo.n_peers); const listening = tenderdashNetInfo.listening; platform.tenderdash.version = version; From 8bbe4a8cc358a24104daf92a4eff6e220175316d Mon Sep 17 00:00:00 2001 From: pshenmic Date: Fri, 20 Jan 2023 22:00:31 +0400 Subject: [PATCH 24/39] fix(dashmate): lint fixes --- packages/dashmate/configs/migrations.js | 2 +- .../dashmate/src/commands/status/platform.js | 10 +++--- packages/dashmate/src/docker/DockerCompose.js | 8 ++--- packages/dashmate/src/status/colors.js | 2 +- .../dashmate/src/status/scopes/platform.js | 35 +++++++++---------- .../dashmate/src/util/getConnectionHost.js | 4 +-- 6 files changed, 30 insertions(+), 31 deletions(-) diff --git a/packages/dashmate/configs/migrations.js b/packages/dashmate/configs/migrations.js index 21eeb5170e3..707e072227d 100644 --- a/packages/dashmate/configs/migrations.js +++ b/packages/dashmate/configs/migrations.js @@ -412,7 +412,7 @@ module.exports = { ]; if (config.platform) { - config.platform.drive.tenderdash.log.level = 'debug' + config.platform.drive.tenderdash.log.level = 'debug'; } }); diff --git a/packages/dashmate/src/commands/status/platform.js b/packages/dashmate/src/commands/status/platform.js index 7d3a01a8176..34ae7e79ab2 100644 --- a/packages/dashmate/src/commands/status/platform.js +++ b/packages/dashmate/src/commands/status/platform.js @@ -56,7 +56,7 @@ class PlatformStatusCommand extends ConfigBaseCommand { p2pPortState, rpcService, tenderdash, - drive + drive, } = scope; const plain = { @@ -69,11 +69,11 @@ class PlatformStatusCommand extends ConfigBaseCommand { 'RPC service': rpcService, }; - const {dockerStatus: tenderdashDockerStatus} = tenderdash - const {serviceStatus: tenderdashServiceStatus} = tenderdash + const { dockerStatus: tenderdashDockerStatus } = tenderdash; + const { serviceStatus: tenderdashServiceStatus } = tenderdash; - const {dockerStatus: driveDockerStatus} = drive - const {serviceStatus: driveServiceStatus} = drive + const { dockerStatus: driveDockerStatus } = drive; + const { serviceStatus: driveServiceStatus } = drive; plain['Tenderdash Docker Status'] = colors.docker(tenderdashDockerStatus)(tenderdashDockerStatus); plain['Tenderdash Service Status'] = colors.status(tenderdashServiceStatus)(tenderdashServiceStatus); diff --git a/packages/dashmate/src/docker/DockerCompose.js b/packages/dashmate/src/docker/DockerCompose.js index 92e2c9a18f2..5afcda981c1 100644 --- a/packages/dashmate/src/docker/DockerCompose.js +++ b/packages/dashmate/src/docker/DockerCompose.js @@ -415,12 +415,12 @@ class DockerCompose { * @return {Promise} */ async getContainerIp(envs, serviceName) { - const containerInfo = await this.inspectService(envs, serviceName) + const containerInfo = await this.inspectService(envs, serviceName); - const [firstNetwork] = Object.keys(containerInfo.NetworkSettings.Networks) - const {IPAddress: containerIP} = containerInfo.NetworkSettings.Networks[firstNetwork] + const [firstNetwork] = Object.keys(containerInfo.NetworkSettings.Networks); + const { IPAddress: containerIP } = containerInfo.NetworkSettings.Networks[firstNetwork]; - return containerIP + return containerIP; } } diff --git a/packages/dashmate/src/status/colors.js b/packages/dashmate/src/status/colors.js index 0ef3bc13c25..c1662c6c3ef 100644 --- a/packages/dashmate/src/status/colors.js +++ b/packages/dashmate/src/status/colors.js @@ -1,7 +1,7 @@ const chalk = require('chalk'); const PortStateEnum = require('../enums/portState'); const ServiceStatusEnum = require('../enums/serviceStatus'); -const DockerStatusEnum = require("../enums/dockerStatus"); +const DockerStatusEnum = require('../enums/dockerStatus'); module.exports = { diff --git a/packages/dashmate/src/status/scopes/platform.js b/packages/dashmate/src/status/scopes/platform.js index 42f2894ecdd..56760f496aa 100644 --- a/packages/dashmate/src/status/scopes/platform.js +++ b/packages/dashmate/src/status/scopes/platform.js @@ -2,7 +2,7 @@ const fetch = require('node-fetch'); const determineStatus = require('../determineStatus'); const ServiceStatusEnum = require('../../enums/serviceStatus'); const providers = require('../providers'); -const getConnectionHost = require("../../util/getConnectionHost"); +const getConnectionHost = require('../../util/getConnectionHost'); /** * @returns {getPlatformScopeFactory} @@ -22,13 +22,13 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { core: await getConnectionHost(dockerCompose, config, 'core'), drive: await dockerCompose.getContainerIp(config.toEnvs(), 'drive_abci'), tenderdash: await getConnectionHost(dockerCompose, config, 'drive_tenderdash'), - } + }; const rpcClient = createRpcClient({ port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), - host: hosts.core + host: hosts.core, }); const httpPort = config.get('platform.dapi.envoy.http.port'); @@ -49,16 +49,16 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { const driveDockerStatus = await determineStatus.docker(dockerCompose, config, 'drive_abci'); const tenderdashServiceStatus = determineStatus.platform(tenderdashDockerStatus, coreIsSynced); - let driveServiceStatus = determineStatus.platform(driveDockerStatus, coreIsSynced); - - const driveEchoResult = await dockerCompose.execCommand(config.toEnvs(), - 'drive_abci', 'yarn workspace @dashevo/drive echo') - - if (driveEchoResult.exitCode !== 0) { - console.warn(driveEchoResult.out) - - driveServiceStatus = ServiceStatusEnum.error; - } + const driveServiceStatus = determineStatus.platform(driveDockerStatus, coreIsSynced); + // + // const driveEchoResult = await dockerCompose.execCommand(config.toEnvs(), + // 'drive_abci', 'yarn workspace @dashevo/drive echo') + // + // if (driveEchoResult.exitCode !== 0) { + // console.warn(driveEchoResult.out) + // + // driveServiceStatus = ServiceStatusEnum.error; + // } const platform = { coreIsSynced, @@ -87,14 +87,13 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { }, drive: { dockerStatus: driveDockerStatus, - serviceStatus: driveServiceStatus - } + serviceStatus: driveServiceStatus, + }, }; // Collecting platform data fails if Tenderdash is waiting for core to sync if (tenderdashServiceStatus === ServiceStatusEnum.up) { try { - const [tenderdashStatusResponse, tenderdashNetInfoResponse] = await Promise.all([ fetch(`http://${hosts.tenderdash}:${config.get('platform.drive.tenderdash.rpc.port')}/status`), fetch(`http://${hosts.tenderdash}:${config.get('platform.drive.tenderdash.rpc.port')}/net_info`), @@ -122,8 +121,8 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { const lastBlockHash = tenderdashStatus.sync_info.latest_block_hash; const latestAppHash = tenderdashStatus.sync_info.latest_app_hash; - const platformPeers = parseInt(tenderdashNetInfo.n_peers); - const listening = tenderdashNetInfo.listening; + const platformPeers = parseInt(tenderdashNetInfo.n_peers, 10); + const { listening } = tenderdashNetInfo; platform.tenderdash.version = version; platform.tenderdash.listening = listening; diff --git a/packages/dashmate/src/util/getConnectionHost.js b/packages/dashmate/src/util/getConnectionHost.js index 0da7b17bf59..4a47df61499 100644 --- a/packages/dashmate/src/util/getConnectionHost.js +++ b/packages/dashmate/src/util/getConnectionHost.js @@ -1,9 +1,9 @@ async function getConnectionHost(dockerCompose, config, serviceName) { if (process.env.DASHMATE_HELPER === 'true') { - return dockerCompose.getContainerIp(config.toEnvs(), serviceName) + return dockerCompose.getContainerIp(config.toEnvs(), serviceName); } - return '127.0.0.1' + return '127.0.0.1'; } module.exports = getConnectionHost; From da54eb2cfc666825e898e8bf75ee865c83bc329c Mon Sep 17 00:00:00 2001 From: pshenmic Date: Fri, 20 Jan 2023 22:06:31 +0400 Subject: [PATCH 25/39] fix(dashmate): add getConnectionHost for the rest of the commands --- packages/dashmate/src/core/startCoreFactory.js | 2 ++ packages/dashmate/src/listr/tasks/reindexNodeTaskFactory.js | 2 ++ packages/dashmate/src/listr/tasks/startGroupNodesTaskFactory.js | 2 ++ packages/dashmate/src/listr/tasks/startNodeTaskFactory.js | 2 ++ packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js | 2 ++ packages/dashmate/src/status/scopes/core.js | 2 ++ packages/dashmate/src/status/scopes/masternode.js | 2 ++ 7 files changed, 14 insertions(+) diff --git a/packages/dashmate/src/core/startCoreFactory.js b/packages/dashmate/src/core/startCoreFactory.js index 64b0ffa0a13..4bbe5a3e1e4 100644 --- a/packages/dashmate/src/core/startCoreFactory.js +++ b/packages/dashmate/src/core/startCoreFactory.js @@ -1,4 +1,5 @@ const CoreService = require('./CoreService'); +const getConnectionHost = require('../util/getConnectionHost'); /** * @param {createRpcClient} createRpcClient @@ -70,6 +71,7 @@ function startCoreFactory( port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), + host: await getConnectionHost(dockerCompose, config, 'core'), }, ); diff --git a/packages/dashmate/src/listr/tasks/reindexNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/reindexNodeTaskFactory.js index e93c9335c9b..0bd7afb3e02 100644 --- a/packages/dashmate/src/listr/tasks/reindexNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/reindexNodeTaskFactory.js @@ -1,6 +1,7 @@ const { Listr } = require('listr2'); const { Observable } = require('rxjs'); const CoreService = require('../../core/CoreService'); +const getConnectionHost = require('../../util/getConnectionHost'); /** * @param {DockerCompose} dockerCompose @@ -94,6 +95,7 @@ function reindexNodeTaskFactory( port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), + host: await getConnectionHost(dockerCompose, config, 'core'), }, ), docker.getContainer(containerId), diff --git a/packages/dashmate/src/listr/tasks/startGroupNodesTaskFactory.js b/packages/dashmate/src/listr/tasks/startGroupNodesTaskFactory.js index c954b3a83c7..617cfed28ac 100644 --- a/packages/dashmate/src/listr/tasks/startGroupNodesTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/startGroupNodesTaskFactory.js @@ -2,6 +2,7 @@ const { Listr } = require('listr2'); const { PrivateKey } = require('@dashevo/dashcore-lib'); const { NETWORK_LOCAL } = require('../../constants'); +const getConnectionHost = require('../../util/getConnectionHost'); /** * @@ -68,6 +69,7 @@ function startGroupNodesTaskFactory( port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), + host: await getConnectionHost(dockerCompose, config, 'core'), }); await waitForCorePeersConnected(rpcClient); diff --git a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js index 3fd0cba757a..d7102a90e4a 100644 --- a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js @@ -5,6 +5,7 @@ const { Listr } = require('listr2'); const { Observable } = require('rxjs'); const { NETWORK_LOCAL } = require('../../constants'); +const getConnectionHost = require('../../util/getConnectionHost'); /** * @@ -106,6 +107,7 @@ function startNodeTaskFactory( port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), + host: await getConnectionHost(dockerCompose, config, 'core'), }); return new Observable(async (observer) => { diff --git a/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js index 14f7cef1e40..e6714544130 100644 --- a/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js @@ -1,4 +1,5 @@ const { Listr } = require('listr2'); +const getConnectionHost = require('../../util/getConnectionHost'); /** * @param {DockerCompose} dockerCompose @@ -36,6 +37,7 @@ function stopNodeTaskFactory( port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), + host: await getConnectionHost(dockerCompose, config, 'core'), }); const { result: { mediantime } } = await rpcClient.getBlockchainInfo(); diff --git a/packages/dashmate/src/status/scopes/core.js b/packages/dashmate/src/status/scopes/core.js index e60153d1412..1140b5b1856 100644 --- a/packages/dashmate/src/status/scopes/core.js +++ b/packages/dashmate/src/status/scopes/core.js @@ -5,6 +5,7 @@ const providers = require('../providers'); const extractCoreVersion = require('../../core/extractCoreVersion'); const ServiceStatusEnum = require('../../enums/serviceStatus'); const ServiceIsNotRunningError = require('../../docker/errors/ServiceIsNotRunningError'); +const getConnectionHost = require('../../util/getConnectionHost'); /** * @returns {getCoreScopeFactory} @@ -32,6 +33,7 @@ function getCoreScopeFactory(dockerCompose, createRpcClient) { port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), + host: await getConnectionHost(dockerCompose, config, 'core'), }); const core = { diff --git a/packages/dashmate/src/status/scopes/masternode.js b/packages/dashmate/src/status/scopes/masternode.js index a75288a8115..73864150439 100644 --- a/packages/dashmate/src/status/scopes/masternode.js +++ b/packages/dashmate/src/status/scopes/masternode.js @@ -2,6 +2,7 @@ const calculatePaymentQueuePosition = require('../../core/calculatePaymentQueueP const blocksToTime = require('../../util/blocksToTime'); const MasternodeStateEnum = require('../../enums/masternodeState'); const MasternodeSyncAssetEnum = require('../../enums/masternodeSyncAsset'); +const getConnectionHost = require('../../util/getConnectionHost'); /** * @returns {getMasternodeScopeFactory} @@ -21,6 +22,7 @@ function getMasternodeScopeFactory(dockerCompose, createRpcClient) { port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), + host: await getConnectionHost(dockerCompose, config, 'core'), }); const mnsyncStatus = await rpcClient.mnsync('status'); From 0a9b603bdeab135307ba0fad3998d6cf0785bc31 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Fri, 20 Jan 2023 22:07:26 +0400 Subject: [PATCH 26/39] fix(dashmate): revert image for dashmate_helper --- packages/dashmate/docker-compose.platform.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashmate/docker-compose.platform.yml b/packages/dashmate/docker-compose.platform.yml index 1cfb12d8f38..08829a06060 100644 --- a/packages/dashmate/docker-compose.platform.yml +++ b/packages/dashmate/docker-compose.platform.yml @@ -114,7 +114,7 @@ services: stop_grace_period: 10s dashmate_helper: - image: pshenmic/dashmate_helper + image: ${DASHMATE_HELPER_DOCKER_IMAGE:?err} restart: unless-stopped command: yarn workspace dashmate helper ${CONFIG_NAME:?err} environment: From c5f440be56681ccd7e296ad3e4da180b9325564a Mon Sep 17 00:00:00 2001 From: pshenmic Date: Fri, 20 Jan 2023 22:09:20 +0400 Subject: [PATCH 27/39] feat(dashmate): disable initialize tenderdash in regular preset task --- .../src/listr/tasks/setup/setupRegularPresetTaskFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js b/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js index 51ad5522903..da2350fac4f 100644 --- a/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js @@ -148,7 +148,7 @@ function setupRegularPresetTaskFactory( }, { title: 'Initialize Tenderdash', - enabled: (ctx) => ctx.preset !== PRESET_MAINNET, + enabled: () => false, task: (ctx) => tenderdashInitTask(ctx.config), }, { From 95e0c0756ef1c0f21be615e69931a58da51d529f Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 24 Jan 2023 03:43:52 +0400 Subject: [PATCH 28/39] chore(dashmate): cleanup --- .../src/listr/tasks/resetNodeTaskFactory.js | 9 --------- .../setup/setupRegularPresetTaskFactory.js | 5 ----- .../dashmate/src/status/scopes/platform.js | 20 +++++++++---------- 3 files changed, 10 insertions(+), 24 deletions(-) diff --git a/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js index be61c3f1657..7d17445783a 100644 --- a/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js @@ -79,15 +79,6 @@ function resetNodeTaskFactory( } }, }, - { - title: 'Initialize Tenderdash', - // todo disabled for testing... most likely not needed anymore - enabled: () => false, - // enabled: (ctx) => ( - // !ctx.isHardReset && !ctx.skipPlatformInitialization && config.has('platform') - // ), - task: () => tenderdashInitTask(config), - }, ]); } diff --git a/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js b/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js index da2350fac4f..3960f82f7d4 100644 --- a/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js @@ -146,11 +146,6 @@ function setupRegularPresetTaskFactory( }, options: { persistentOutput: true }, }, - { - title: 'Initialize Tenderdash', - enabled: () => false, - task: (ctx) => tenderdashInitTask(ctx.config), - }, { title: 'Set default config', task: (ctx, task) => { diff --git a/packages/dashmate/src/status/scopes/platform.js b/packages/dashmate/src/status/scopes/platform.js index 56760f496aa..2d983be839f 100644 --- a/packages/dashmate/src/status/scopes/platform.js +++ b/packages/dashmate/src/status/scopes/platform.js @@ -49,16 +49,16 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { const driveDockerStatus = await determineStatus.docker(dockerCompose, config, 'drive_abci'); const tenderdashServiceStatus = determineStatus.platform(tenderdashDockerStatus, coreIsSynced); - const driveServiceStatus = determineStatus.platform(driveDockerStatus, coreIsSynced); - // - // const driveEchoResult = await dockerCompose.execCommand(config.toEnvs(), - // 'drive_abci', 'yarn workspace @dashevo/drive echo') - // - // if (driveEchoResult.exitCode !== 0) { - // console.warn(driveEchoResult.out) - // - // driveServiceStatus = ServiceStatusEnum.error; - // } + let driveServiceStatus = determineStatus.platform(driveDockerStatus, coreIsSynced); + + const driveEchoResult = await dockerCompose.execCommand(config.toEnvs(), + 'drive_abci', 'yarn workspace @dashevo/drive echo'); + + if (driveEchoResult.exitCode !== 0) { + console.warn(driveEchoResult.out); + + driveServiceStatus = ServiceStatusEnum.error; + } const platform = { coreIsSynced, From 9d782789080f82ad887033adb0ae1ff079b3db6f Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 24 Jan 2023 03:53:49 +0400 Subject: [PATCH 29/39] test(dashmate): fix platform scope spec --- .../dashmate/test/unit/status/scopes/platform.spec.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/dashmate/test/unit/status/scopes/platform.spec.js b/packages/dashmate/test/unit/status/scopes/platform.spec.js index b0ebcfde34a..e557b0ca08b 100644 --- a/packages/dashmate/test/unit/status/scopes/platform.spec.js +++ b/packages/dashmate/test/unit/status/scopes/platform.spec.js @@ -15,6 +15,7 @@ describe('getPlatformScopeFactory', () => { let mockDetermineDockerStatus; let mockMNOWatchProvider; let mockFetch; + let mockDockerCompose; let config; let getPlatformScope; @@ -25,18 +26,23 @@ describe('getPlatformScopeFactory', () => { getBlockchainInfo: this.sinon.stub(), masternode: this.sinon.stub(), }; + mockDockerCompose = { + execCommand: this.sinon.stub(), + getContainerIp: this.sinon.stub(), + }; mockCreateRpcClient = () => mockRpcClient; mockDetermineDockerStatus = this.sinon.stub(determineStatus, 'docker'); mockMNOWatchProvider = this.sinon.stub(providers.mnowatch, 'checkPortStatus'); mockFetch = this.sinon.stub(fetch, 'Promise'); config = { get: this.sinon.stub(), toEnvs: this.sinon.stub() }; - getPlatformScope = getPlatformScopeFactory(null, mockCreateRpcClient); + getPlatformScope = getPlatformScopeFactory(mockDockerCompose, mockCreateRpcClient); }); it('should just work', async () => { mockDetermineDockerStatus.returns(DockerStatusEnum.running); mockRpcClient.mnsync.returns({ result: { IsSynced: true } }); + mockDockerCompose.execCommand.returns({exitCode: 0, out: ''}) const externalIp = '192.168.0.1'; @@ -107,6 +113,7 @@ describe('getPlatformScopeFactory', () => { mockRpcClient.mnsync.returns({ result: { IsSynced: true } }); mockMNOWatchProvider.returns(Promise.resolve('OPEN')); mockFetch.returns(Promise.reject(new FetchError())); + mockDockerCompose.execCommand.returns({exitCode: 0, out: ''}) const scope = await getPlatformScope(config); From 4804da99a4197fa3e58cd62cb3f992dd2c571243 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 24 Jan 2023 04:02:27 +0400 Subject: [PATCH 30/39] chore(dashmate): fix lint --- packages/dashmate/test/unit/status/scopes/platform.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/dashmate/test/unit/status/scopes/platform.spec.js b/packages/dashmate/test/unit/status/scopes/platform.spec.js index e557b0ca08b..3e13882df31 100644 --- a/packages/dashmate/test/unit/status/scopes/platform.spec.js +++ b/packages/dashmate/test/unit/status/scopes/platform.spec.js @@ -42,7 +42,7 @@ describe('getPlatformScopeFactory', () => { it('should just work', async () => { mockDetermineDockerStatus.returns(DockerStatusEnum.running); mockRpcClient.mnsync.returns({ result: { IsSynced: true } }); - mockDockerCompose.execCommand.returns({exitCode: 0, out: ''}) + mockDockerCompose.execCommand.returns({ exitCode: 0, out: '' }); const externalIp = '192.168.0.1'; @@ -113,7 +113,7 @@ describe('getPlatformScopeFactory', () => { mockRpcClient.mnsync.returns({ result: { IsSynced: true } }); mockMNOWatchProvider.returns(Promise.resolve('OPEN')); mockFetch.returns(Promise.reject(new FetchError())); - mockDockerCompose.execCommand.returns({exitCode: 0, out: ''}) + mockDockerCompose.execCommand.returns({ exitCode: 0, out: '' }); const scope = await getPlatformScope(config); From 2b685c1329648c174e5ca8b56876706f366944ff Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 24 Jan 2023 07:40:25 +0400 Subject: [PATCH 31/39] chore(js-drive): fix lint --- packages/js-drive/scripts/echo.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/js-drive/scripts/echo.js b/packages/js-drive/scripts/echo.js index 07576df37b3..2b50b21ddf1 100644 --- a/packages/js-drive/scripts/echo.js +++ b/packages/js-drive/scripts/echo.js @@ -1,4 +1,4 @@ -const net = require("net") +const net = require('net'); async function sendEcho(ip) { const echoRequestBytes = Buffer.from('0a0a080a0668656c6c6f21', 'hex'); @@ -27,6 +27,6 @@ async function sendEcho(ip) { sendEcho('127.0.0.1') .then(console.log) .catch((e) => { - console.error(e) - process.exit(1) -}) + console.error(e); + process.exit(1); + }); From a514f5b4bc562f5e0a2a300cac67c6e111901d04 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 24 Jan 2023 14:18:59 +0400 Subject: [PATCH 32/39] feat(dashmate): code review fixes --- packages/dashmate/Dockerfile | 1 + packages/dashmate/configs/migrations.js | 10 ++++++++++ .../configs/schema/configJsonSchema.js | 5 +++-- packages/dashmate/docker-compose.platform.yml | 2 -- packages/dashmate/scripts/helper.js | 2 +- .../dashmate/src/core/startCoreFactory.js | 5 +++-- packages/dashmate/src/createDIContainer.js | 3 +++ .../dashmate/src/getConnectionHostFactory.js | 19 +++++++++++++++++++ .../src/listr/tasks/reindexNodeTaskFactory.js | 5 +++-- .../setup/setupLocalPresetTaskFactory.js | 1 + .../setup/setupRegularPresetTaskFactory.js | 8 +++++++- .../listr/tasks/startGroupNodesTaskFactory.js | 5 +++-- .../src/listr/tasks/startNodeTaskFactory.js | 5 +++-- .../src/listr/tasks/stopNodeTaskFactory.js | 5 +++-- packages/dashmate/src/status/scopes/core.js | 7 ++++--- .../dashmate/src/status/scopes/masternode.js | 6 +++--- .../dashmate/src/status/scopes/platform.js | 12 +++++++----- .../dashmate/src/util/getConnectionHost.js | 9 --------- packages/js-drive/scripts/echo.js | 2 ++ 19 files changed, 76 insertions(+), 36 deletions(-) create mode 100644 packages/dashmate/src/getConnectionHostFactory.js delete mode 100644 packages/dashmate/src/util/getConnectionHost.js diff --git a/packages/dashmate/Dockerfile b/packages/dashmate/Dockerfile index ef384a24482..4a983971979 100644 --- a/packages/dashmate/Dockerfile +++ b/packages/dashmate/Dockerfile @@ -50,6 +50,7 @@ FROM node:16-alpine3.16 ARG NODE_ENV=production ENV NODE_ENV ${NODE_ENV} +ENV DASHMATE_HELPER=1 RUN apk update && \ apk --no-cache upgrade && \ diff --git a/packages/dashmate/configs/migrations.js b/packages/dashmate/configs/migrations.js index 707e072227d..97e6f894336 100644 --- a/packages/dashmate/configs/migrations.js +++ b/packages/dashmate/configs/migrations.js @@ -418,4 +418,14 @@ module.exports = { return configFile; }, + '0.24.0-dev.13': (configFile) => { + Object.entries(configFile.configs) + .forEach(([, config]) => { + if (config.platform) { + config.platform.drive.tenderdash.moniker = config.name; + } + }); + + return configFile; + }, }; diff --git a/packages/dashmate/configs/schema/configJsonSchema.js b/packages/dashmate/configs/schema/configJsonSchema.js index a0cedd82354..5a5f8050b0a 100644 --- a/packages/dashmate/configs/schema/configJsonSchema.js +++ b/packages/dashmate/configs/schema/configJsonSchema.js @@ -501,8 +501,9 @@ module.exports = { type: ['string', 'null'], }, }, - required: ['docker', 'p2p', 'rpc', 'consensus', 'nodeKey', 'genesis', 'nodeId'], - additionalProperties: true, + required: ['docker', 'p2p', 'rpc', 'consensus', + 'nodeKey', 'moniker', 'genesis', 'nodeId'], + additionalProperties: false, }, }, required: ['abci', 'tenderdash'], diff --git a/packages/dashmate/docker-compose.platform.yml b/packages/dashmate/docker-compose.platform.yml index 08829a06060..7ee7157be02 100644 --- a/packages/dashmate/docker-compose.platform.yml +++ b/packages/dashmate/docker-compose.platform.yml @@ -117,8 +117,6 @@ services: image: ${DASHMATE_HELPER_DOCKER_IMAGE:?err} restart: unless-stopped command: yarn workspace dashmate helper ${CONFIG_NAME:?err} - environment: - - 'DASHMATE_HELPER=true' volumes: - ${DASHMATE_HOME_DIR:?err}:/root/.dashmate - /var/run/docker.sock:/var/run/docker.sock diff --git a/packages/dashmate/scripts/helper.js b/packages/dashmate/scripts/helper.js index 61f5b93d464..9cd72c2e925 100644 --- a/packages/dashmate/scripts/helper.js +++ b/packages/dashmate/scripts/helper.js @@ -29,7 +29,7 @@ const createDIContainer = require('../src/createDIContainer'); // Register config collection in the container container.register({ - configFile: asValue(configFile), + isHelper: asValue(process.env.DASHMATE_HELPER === '1'), }); const config = configFile.getConfig(configName); diff --git a/packages/dashmate/src/core/startCoreFactory.js b/packages/dashmate/src/core/startCoreFactory.js index 4bbe5a3e1e4..18456b3ccb8 100644 --- a/packages/dashmate/src/core/startCoreFactory.js +++ b/packages/dashmate/src/core/startCoreFactory.js @@ -1,11 +1,11 @@ const CoreService = require('./CoreService'); -const getConnectionHost = require('../util/getConnectionHost'); /** * @param {createRpcClient} createRpcClient * @param {waitForCoreStart} waitForCoreStart * @param {waitForCoreSync} waitForCoreSync * @param {DockerCompose} dockerCompose + * @param {getConnectionHost} getConnectionHost * @return {startCore} */ function startCoreFactory( @@ -13,6 +13,7 @@ function startCoreFactory( waitForCoreStart, waitForCoreSync, dockerCompose, + getConnectionHost, ) { /** * @typedef startCore @@ -71,7 +72,7 @@ function startCoreFactory( port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), - host: await getConnectionHost(dockerCompose, config, 'core'), + host: await getConnectionHost(config, 'core'), }, ); diff --git a/packages/dashmate/src/createDIContainer.js b/packages/dashmate/src/createDIContainer.js index 1211a2164b3..9e99523d233 100644 --- a/packages/dashmate/src/createDIContainer.js +++ b/packages/dashmate/src/createDIContainer.js @@ -9,6 +9,7 @@ const { const Docker = require('dockerode'); const ensureHomeDirFactory = require('./ensureHomeDirFactory'); +const getConnectionHostFactory = require('./getConnectionHostFactory'); const ConfigFileJsonRepository = require('./config/configFile/ConfigFileJsonRepository'); const createSystemConfigsFactory = require('./config/systemConfigs/createSystemConfigsFactory'); const isSystemConfigFactory = require('./config/systemConfigs/isSystemConfigFactory'); @@ -106,6 +107,8 @@ async function createDIContainer() { createSystemConfigs: asFunction(createSystemConfigsFactory).singleton(), isSystemConfig: asFunction(isSystemConfigFactory).singleton(), migrateConfigFile: asValue(migrateConfigFile), + isHelper: asValue(process.env.DASHMATE_HELPER === '1'), + getConnectionHost: asClass(getConnectionHostFactory).singleton(), // `configFile` and `config` are registering on command init }); diff --git a/packages/dashmate/src/getConnectionHostFactory.js b/packages/dashmate/src/getConnectionHostFactory.js new file mode 100644 index 00000000000..ef8d160ff4e --- /dev/null +++ b/packages/dashmate/src/getConnectionHostFactory.js @@ -0,0 +1,19 @@ +function getConnectionHostFactory(dockerCompose, isHelper) { + /** + * Get proper service endpoint url + * @param config + * @param serviceName + * @return {Promise} + */ + async function getConnectionHost(config, serviceName) { + if (isHelper) { + return dockerCompose.getContainerIp(config.toEnvs(), serviceName); + } + + return '127.0.0.1'; + } + + return getConnectionHost; +} + +module.exports = getConnectionHostFactory; diff --git a/packages/dashmate/src/listr/tasks/reindexNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/reindexNodeTaskFactory.js index 0bd7afb3e02..ec8f6d0ee6e 100644 --- a/packages/dashmate/src/listr/tasks/reindexNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/reindexNodeTaskFactory.js @@ -1,7 +1,6 @@ const { Listr } = require('listr2'); const { Observable } = require('rxjs'); const CoreService = require('../../core/CoreService'); -const getConnectionHost = require('../../util/getConnectionHost'); /** * @param {DockerCompose} dockerCompose @@ -14,6 +13,7 @@ const getConnectionHost = require('../../util/getConnectionHost'); * @param {writeServiceConfigs} writeServiceConfigs * @param {configFileRepository} configFileRepository * @param {configFile} configFile + * @param {getConnectionHost} getConnectionHost * @return {reindexNodeTask} */ function reindexNodeTaskFactory( @@ -27,6 +27,7 @@ function reindexNodeTaskFactory( writeServiceConfigs, configFileRepository, configFile, + getConnectionHost, ) { /** * @typedef {reindexNodeTask} @@ -95,7 +96,7 @@ function reindexNodeTaskFactory( port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), - host: await getConnectionHost(dockerCompose, config, 'core'), + host: await getConnectionHost(config, 'core'), }, ), docker.getContainer(containerId), diff --git a/packages/dashmate/src/listr/tasks/setup/setupLocalPresetTaskFactory.js b/packages/dashmate/src/listr/tasks/setup/setupLocalPresetTaskFactory.js index 3b1aa992ac7..77cb229b0c5 100644 --- a/packages/dashmate/src/listr/tasks/setup/setupLocalPresetTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/setup/setupLocalPresetTaskFactory.js @@ -184,6 +184,7 @@ function setupLocalPresetTaskFactory( config.set('platform.dapi.envoy.grpc.port', 3010 + (i * 100)); config.set('platform.drive.tenderdash.p2p.port', 26656 + (i * 100)); config.set('platform.drive.tenderdash.rpc.port', 26657 + (i * 100)); + config.set('platform.drive.tenderdash.moniker', config.name); // Setup logs if (ctx.debugLogs) { diff --git a/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js b/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js index 3960f82f7d4..4b32a963c2e 100644 --- a/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js @@ -44,7 +44,13 @@ function setupRegularPresetTaskFactory( return new Listr([ { task: (ctx) => { - ctx.config = configFile.getConfig(ctx.preset); + const config = configFile.getConfig(ctx.preset); + + if (config.platform) { + config.platform.drive.tenderdash.moniker = config.name; + } + + ctx.config = config; }, }, { diff --git a/packages/dashmate/src/listr/tasks/startGroupNodesTaskFactory.js b/packages/dashmate/src/listr/tasks/startGroupNodesTaskFactory.js index 617cfed28ac..c704dac2022 100644 --- a/packages/dashmate/src/listr/tasks/startGroupNodesTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/startGroupNodesTaskFactory.js @@ -2,7 +2,6 @@ const { Listr } = require('listr2'); const { PrivateKey } = require('@dashevo/dashcore-lib'); const { NETWORK_LOCAL } = require('../../constants'); -const getConnectionHost = require('../../util/getConnectionHost'); /** * @@ -14,6 +13,7 @@ const getConnectionHost = require('../../util/getConnectionHost'); * @param {startNodeTask} startNodeTask * @param {waitForNodeToBeReadyTask} waitForNodeToBeReadyTask * @param {buildServicesTask} buildServicesTask + * @param {getConnectionHost} getConnectionHost * @return {startGroupNodesTask} */ function startGroupNodesTaskFactory( @@ -25,6 +25,7 @@ function startGroupNodesTaskFactory( startNodeTask, waitForNodeToBeReadyTask, buildServicesTask, + getConnectionHost, ) { /** * @typedef {startGroupNodesTask} @@ -69,7 +70,7 @@ function startGroupNodesTaskFactory( port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), - host: await getConnectionHost(dockerCompose, config, 'core'), + host: await getConnectionHost(config, 'core'), }); await waitForCorePeersConnected(rpcClient); diff --git a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js index d7102a90e4a..bb5cf8c25b4 100644 --- a/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/startNodeTaskFactory.js @@ -5,7 +5,6 @@ const { Listr } = require('listr2'); const { Observable } = require('rxjs'); const { NETWORK_LOCAL } = require('../../constants'); -const getConnectionHost = require('../../util/getConnectionHost'); /** * @@ -14,6 +13,7 @@ const getConnectionHost = require('../../util/getConnectionHost'); * @param {waitForMasternodesSync} waitForMasternodesSync * @param {createRpcClient} createRpcClient * @param {buildServicesTask} buildServicesTask + * @param getConnectionHost {getConnectionHost} * @return {startNodeTask} */ function startNodeTaskFactory( @@ -22,6 +22,7 @@ function startNodeTaskFactory( waitForMasternodesSync, createRpcClient, buildServicesTask, + getConnectionHost, ) { /** * @typedef {startNodeTask} @@ -107,7 +108,7 @@ function startNodeTaskFactory( port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), - host: await getConnectionHost(dockerCompose, config, 'core'), + host: await getConnectionHost(config, 'core'), }); return new Observable(async (observer) => { diff --git a/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js index e6714544130..36a6129864b 100644 --- a/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js @@ -1,14 +1,15 @@ const { Listr } = require('listr2'); -const getConnectionHost = require('../../util/getConnectionHost'); /** * @param {DockerCompose} dockerCompose * @param {createRpcClient} createRpcClient + * @param {getConnectionHost} getConnectionHost * @return {stopNodeTask} */ function stopNodeTaskFactory( dockerCompose, createRpcClient, + getConnectionHost, ) { /** * Stop node @@ -37,7 +38,7 @@ function stopNodeTaskFactory( port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), - host: await getConnectionHost(dockerCompose, config, 'core'), + host: await getConnectionHost(config, 'core'), }); const { result: { mediantime } } = await rpcClient.getBlockchainInfo(); diff --git a/packages/dashmate/src/status/scopes/core.js b/packages/dashmate/src/status/scopes/core.js index 1140b5b1856..ebc0933af70 100644 --- a/packages/dashmate/src/status/scopes/core.js +++ b/packages/dashmate/src/status/scopes/core.js @@ -5,14 +5,15 @@ const providers = require('../providers'); const extractCoreVersion = require('../../core/extractCoreVersion'); const ServiceStatusEnum = require('../../enums/serviceStatus'); const ServiceIsNotRunningError = require('../../docker/errors/ServiceIsNotRunningError'); -const getConnectionHost = require('../../util/getConnectionHost'); /** * @returns {getCoreScopeFactory} * @param dockerCompose {DockerCompose} * @param createRpcClient {createRpcClient} + * @param getConnectionHost {getConnectionHost} */ -function getCoreScopeFactory(dockerCompose, createRpcClient) { +function getCoreScopeFactory(dockerCompose, + createRpcClient, getConnectionHost) { /** * Get core status scope * @@ -33,7 +34,7 @@ function getCoreScopeFactory(dockerCompose, createRpcClient) { port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), - host: await getConnectionHost(dockerCompose, config, 'core'), + host: await getConnectionHost(config, 'core'), }); const core = { diff --git a/packages/dashmate/src/status/scopes/masternode.js b/packages/dashmate/src/status/scopes/masternode.js index 73864150439..7d3ab112e4d 100644 --- a/packages/dashmate/src/status/scopes/masternode.js +++ b/packages/dashmate/src/status/scopes/masternode.js @@ -2,14 +2,14 @@ const calculatePaymentQueuePosition = require('../../core/calculatePaymentQueueP const blocksToTime = require('../../util/blocksToTime'); const MasternodeStateEnum = require('../../enums/masternodeState'); const MasternodeSyncAssetEnum = require('../../enums/masternodeSyncAsset'); -const getConnectionHost = require('../../util/getConnectionHost'); /** * @returns {getMasternodeScopeFactory} * @param dockerCompose {DockerCompose} * @param createRpcClient {createRpcClient} + * @param getConnectionHost {getConnectionHost} */ -function getMasternodeScopeFactory(dockerCompose, createRpcClient) { +function getMasternodeScopeFactory(dockerCompose, createRpcClient, getConnectionHost) { /** * Get masternode status scope * @@ -22,7 +22,7 @@ function getMasternodeScopeFactory(dockerCompose, createRpcClient) { port: config.get('core.rpc.port'), user: config.get('core.rpc.user'), pass: config.get('core.rpc.password'), - host: await getConnectionHost(dockerCompose, config, 'core'), + host: await getConnectionHost(config, 'core'), }); const mnsyncStatus = await rpcClient.mnsync('status'); diff --git a/packages/dashmate/src/status/scopes/platform.js b/packages/dashmate/src/status/scopes/platform.js index 2d983be839f..1ee0d014256 100644 --- a/packages/dashmate/src/status/scopes/platform.js +++ b/packages/dashmate/src/status/scopes/platform.js @@ -2,14 +2,15 @@ const fetch = require('node-fetch'); const determineStatus = require('../determineStatus'); const ServiceStatusEnum = require('../../enums/serviceStatus'); const providers = require('../providers'); -const getConnectionHost = require('../../util/getConnectionHost'); /** * @returns {getPlatformScopeFactory} * @param dockerCompose {DockerCompose} * @param createRpcClient {createRpcClient} + * @param getConnectionHost {getConnectionHost} */ -function getPlatformScopeFactory(dockerCompose, createRpcClient) { +function getPlatformScopeFactory(dockerCompose, + createRpcClient, getConnectionHost) { /** * Get platform status scope * @@ -19,9 +20,9 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { */ async function getPlatformScope(config) { const hosts = { - core: await getConnectionHost(dockerCompose, config, 'core'), + core: await getConnectionHost(config, 'core'), drive: await dockerCompose.getContainerIp(config.toEnvs(), 'drive_abci'), - tenderdash: await getConnectionHost(dockerCompose, config, 'drive_tenderdash'), + tenderdash: await getConnectionHost(config, 'drive_tenderdash'), }; const rpcClient = createRpcClient({ @@ -55,7 +56,8 @@ function getPlatformScopeFactory(dockerCompose, createRpcClient) { 'drive_abci', 'yarn workspace @dashevo/drive echo'); if (driveEchoResult.exitCode !== 0) { - console.warn(driveEchoResult.out); + // eslint-disable-next-line no-console + console.error(driveEchoResult.out); driveServiceStatus = ServiceStatusEnum.error; } diff --git a/packages/dashmate/src/util/getConnectionHost.js b/packages/dashmate/src/util/getConnectionHost.js deleted file mode 100644 index 4a47df61499..00000000000 --- a/packages/dashmate/src/util/getConnectionHost.js +++ /dev/null @@ -1,9 +0,0 @@ -async function getConnectionHost(dockerCompose, config, serviceName) { - if (process.env.DASHMATE_HELPER === 'true') { - return dockerCompose.getContainerIp(config.toEnvs(), serviceName); - } - - return '127.0.0.1'; -} - -module.exports = getConnectionHost; diff --git a/packages/js-drive/scripts/echo.js b/packages/js-drive/scripts/echo.js index 2b50b21ddf1..efd6d7f8353 100644 --- a/packages/js-drive/scripts/echo.js +++ b/packages/js-drive/scripts/echo.js @@ -25,8 +25,10 @@ async function sendEcho(ip) { } sendEcho('127.0.0.1') + // eslint-disable-next-line no-console .then(console.log) .catch((e) => { + // eslint-disable-next-line no-console console.error(e); process.exit(1); }); From cd50199872f3682af9af29aa99b46f7ce1cbc92a Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 24 Jan 2023 14:21:33 +0400 Subject: [PATCH 33/39] feat(dashmate): get back tenderdash iit --- .../src/listr/tasks/resetNodeTaskFactory.js | 7 +++++++ .../setup/setupRegularPresetTaskFactory.js | 21 ++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js b/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js index 7d17445783a..2fc7f35d1a5 100644 --- a/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js @@ -79,6 +79,13 @@ function resetNodeTaskFactory( } }, }, + { + title: 'Initialize Tenderdash', + enabled: (ctx) => ( + !ctx.isHardReset && !ctx.skipPlatformInitialization && config.has('platform') + ), + task: () => tenderdashInitTask(config), + }, ]); } diff --git a/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js b/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js index 4b32a963c2e..af329ab76a5 100644 --- a/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js @@ -1,11 +1,11 @@ -const { Listr } = require('listr2'); +const {Listr} = require('listr2'); const fs = require('fs'); const publicIp = require('public-ip'); const BlsSignatures = require('bls-signatures'); -const { PrivateKey } = require('@dashevo/dashcore-lib'); +const {PrivateKey} = require('@dashevo/dashcore-lib'); const { SSL_PROVIDERS, @@ -72,7 +72,7 @@ function setupRegularPresetTaskFactory( // eslint-disable-next-line no-param-reassign task.output = `Selected ${ctx.nodeType} type\n`; }, - options: { persistentOutput: true }, + options: {persistentOutput: true}, }, { title: 'Configure external IP address', @@ -92,14 +92,14 @@ function setupRegularPresetTaskFactory( // eslint-disable-next-line no-param-reassign task.output = `${ctx.externalIp} is set\n`; }, - options: { persistentOutput: true }, + options: {persistentOutput: true}, }, { title: 'Set masternode operator private key', enabled: (ctx) => ctx.nodeType === NODE_TYPE_MASTERNODE, task: async (ctx, task) => { if (ctx.operatorBlsPrivateKey === undefined) { - const { privateKey: generatedPrivateKeyHex } = await generateBlsKeys(); + const {privateKey: generatedPrivateKeyHex} = await generateBlsKeys(); ctx.operatorBlsPrivateKey = await task.prompt([ { @@ -113,7 +113,7 @@ function setupRegularPresetTaskFactory( const operatorBlsPrivateKeyBuffer = Buffer.from(ctx.operatorBlsPrivateKey, 'hex'); const blsSignatures = await BlsSignatures(); - const { PrivateKey: BlsPrivateKey } = blsSignatures; + const {PrivateKey: BlsPrivateKey} = blsSignatures; const privateKey = BlsPrivateKey.fromBytes(operatorBlsPrivateKeyBuffer, true); const publicKey = privateKey.getPublicKey(); @@ -128,7 +128,7 @@ function setupRegularPresetTaskFactory( // eslint-disable-next-line no-param-reassign task.output = `BLS public key: ${publicKeyHex}\nBLS private key: ${ctx.operatorBlsPrivateKey}`; }, - options: { persistentOutput: true }, + options: {persistentOutput: true}, }, { title: 'Register masternode', @@ -150,7 +150,7 @@ function setupRegularPresetTaskFactory( return registerMasternodeTask(ctx.config); }, - options: { persistentOutput: true }, + options: {persistentOutput: true}, }, { title: 'Set default config', @@ -246,6 +246,11 @@ function setupRegularPresetTaskFactory( return saveCertificateTask(ctx.config); }, }, + { + title: 'Initialize Tenderdash', + enabled: (ctx) => ctx.preset !== PRESET_MAINNET, + task: (ctx) => tenderdashInitTask(ctx.config), + }, ]); } From 45e27f7df1cce5bdbddc992a7cec91dc9600d897 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 24 Jan 2023 14:24:59 +0400 Subject: [PATCH 34/39] chore(dashmate): fix lint --- .../tasks/setup/setupRegularPresetTaskFactory.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js b/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js index af329ab76a5..2d8722c7321 100644 --- a/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js @@ -1,11 +1,11 @@ -const {Listr} = require('listr2'); +const { Listr } = require('listr2'); const fs = require('fs'); const publicIp = require('public-ip'); const BlsSignatures = require('bls-signatures'); -const {PrivateKey} = require('@dashevo/dashcore-lib'); +const { PrivateKey } = require('@dashevo/dashcore-lib'); const { SSL_PROVIDERS, @@ -72,7 +72,7 @@ function setupRegularPresetTaskFactory( // eslint-disable-next-line no-param-reassign task.output = `Selected ${ctx.nodeType} type\n`; }, - options: {persistentOutput: true}, + options: { persistentOutput: true }, }, { title: 'Configure external IP address', @@ -92,14 +92,14 @@ function setupRegularPresetTaskFactory( // eslint-disable-next-line no-param-reassign task.output = `${ctx.externalIp} is set\n`; }, - options: {persistentOutput: true}, + options: { persistentOutput: true }, }, { title: 'Set masternode operator private key', enabled: (ctx) => ctx.nodeType === NODE_TYPE_MASTERNODE, task: async (ctx, task) => { if (ctx.operatorBlsPrivateKey === undefined) { - const {privateKey: generatedPrivateKeyHex} = await generateBlsKeys(); + const { privateKey: generatedPrivateKeyHex } = await generateBlsKeys(); ctx.operatorBlsPrivateKey = await task.prompt([ { @@ -113,7 +113,7 @@ function setupRegularPresetTaskFactory( const operatorBlsPrivateKeyBuffer = Buffer.from(ctx.operatorBlsPrivateKey, 'hex'); const blsSignatures = await BlsSignatures(); - const {PrivateKey: BlsPrivateKey} = blsSignatures; + const { PrivateKey: BlsPrivateKey } = blsSignatures; const privateKey = BlsPrivateKey.fromBytes(operatorBlsPrivateKeyBuffer, true); const publicKey = privateKey.getPublicKey(); @@ -128,7 +128,7 @@ function setupRegularPresetTaskFactory( // eslint-disable-next-line no-param-reassign task.output = `BLS public key: ${publicKeyHex}\nBLS private key: ${ctx.operatorBlsPrivateKey}`; }, - options: {persistentOutput: true}, + options: { persistentOutput: true }, }, { title: 'Register masternode', @@ -150,7 +150,7 @@ function setupRegularPresetTaskFactory( return registerMasternodeTask(ctx.config); }, - options: {persistentOutput: true}, + options: { persistentOutput: true }, }, { title: 'Set default config', From 0a0b80d133d6d6418124317900aa12e69f8115f3 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 24 Jan 2023 14:33:05 +0400 Subject: [PATCH 35/39] test(dashmate): fix tests --- packages/dashmate/test/unit/status/scopes/core.spec.js | 5 ++++- packages/dashmate/test/unit/status/scopes/masternode.spec.js | 5 ++++- packages/dashmate/test/unit/status/scopes/platform.spec.js | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/dashmate/test/unit/status/scopes/core.spec.js b/packages/dashmate/test/unit/status/scopes/core.spec.js index 66becbd4312..c073e7d2a25 100644 --- a/packages/dashmate/test/unit/status/scopes/core.spec.js +++ b/packages/dashmate/test/unit/status/scopes/core.spec.js @@ -15,6 +15,7 @@ describe('getCoreScopeFactory', () => { let mockGithubProvider; let mockMNOWatchProvider; let mockInsightProvider; + let mockGetConnectionHost; let config; let getCoreScope; @@ -31,9 +32,11 @@ describe('getCoreScopeFactory', () => { mockGithubProvider = this.sinon.stub(providers.github, 'release'); mockMNOWatchProvider = this.sinon.stub(providers.mnowatch, 'checkPortStatus'); mockInsightProvider = this.sinon.stub(providers, 'insight'); + mockGetConnectionHost = this.sinon.stub(); config = { get: this.sinon.stub(), toEnvs: this.sinon.stub() }; - getCoreScope = getCoreScopeFactory(mockDockerCompose, mockCreateRpcClient); + getCoreScope = getCoreScopeFactory(mockDockerCompose, + mockCreateRpcClient, mockGetConnectionHost); }); it('should just work', async function it() { diff --git a/packages/dashmate/test/unit/status/scopes/masternode.spec.js b/packages/dashmate/test/unit/status/scopes/masternode.spec.js index bcc168d0648..7bc60c269f9 100644 --- a/packages/dashmate/test/unit/status/scopes/masternode.spec.js +++ b/packages/dashmate/test/unit/status/scopes/masternode.spec.js @@ -7,6 +7,7 @@ describe('getMasternodeScopeFactory', () => { let mockRpcClient; let mockCreateRpcClient; let mockDockerCompose; + let mockGetConnectionHost; let config; let getMasternodeScope; @@ -19,9 +20,11 @@ describe('getMasternodeScopeFactory', () => { }; mockCreateRpcClient = () => mockRpcClient; mockDockerCompose = { execCommand: this.sinon.stub() }; + mockGetConnectionHost = this.sinon.stub(); config = { get: this.sinon.stub(), toEnvs: this.sinon.stub() }; - getMasternodeScope = getMasternodeScopeFactory(mockDockerCompose, mockCreateRpcClient); + getMasternodeScope = getMasternodeScopeFactory(mockDockerCompose, + mockCreateRpcClient, mockGetConnectionHost); }); it('should just work', async () => { diff --git a/packages/dashmate/test/unit/status/scopes/platform.spec.js b/packages/dashmate/test/unit/status/scopes/platform.spec.js index 3e13882df31..e4a02640411 100644 --- a/packages/dashmate/test/unit/status/scopes/platform.spec.js +++ b/packages/dashmate/test/unit/status/scopes/platform.spec.js @@ -16,6 +16,7 @@ describe('getPlatformScopeFactory', () => { let mockMNOWatchProvider; let mockFetch; let mockDockerCompose; + let mockGetConnectionHost; let config; let getPlatformScope; @@ -34,9 +35,11 @@ describe('getPlatformScopeFactory', () => { mockDetermineDockerStatus = this.sinon.stub(determineStatus, 'docker'); mockMNOWatchProvider = this.sinon.stub(providers.mnowatch, 'checkPortStatus'); mockFetch = this.sinon.stub(fetch, 'Promise'); + mockGetConnectionHost = this.sinon.stub(); config = { get: this.sinon.stub(), toEnvs: this.sinon.stub() }; - getPlatformScope = getPlatformScopeFactory(mockDockerCompose, mockCreateRpcClient); + getPlatformScope = getPlatformScopeFactory(mockDockerCompose, + mockCreateRpcClient, mockGetConnectionHost); }); it('should just work', async () => { From 0f7e04d2eb2e5ff8679dd993fb368e13b26ee1df Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 24 Jan 2023 14:39:15 +0400 Subject: [PATCH 36/39] chore(dashmate): add default null for moniker --- packages/dashmate/configs/schema/configJsonSchema.js | 2 +- packages/dashmate/configs/system/base.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/dashmate/configs/schema/configJsonSchema.js b/packages/dashmate/configs/schema/configJsonSchema.js index 5a5f8050b0a..de0e8018894 100644 --- a/packages/dashmate/configs/schema/configJsonSchema.js +++ b/packages/dashmate/configs/schema/configJsonSchema.js @@ -492,7 +492,7 @@ module.exports = { type: 'object', }, moniker: { - type: 'string', + type: ['string', 'null'], }, genesis: { type: 'object', diff --git a/packages/dashmate/configs/system/base.js b/packages/dashmate/configs/system/base.js index 61f54dab5b4..6d9bb4343c6 100644 --- a/packages/dashmate/configs/system/base.js +++ b/packages/dashmate/configs/system/base.js @@ -165,6 +165,7 @@ module.exports = { }, nodeId: null, + moniker: null, }, }, dpns: { From 6f4e6cafa3032582408a55d70613e30dedab9248 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 24 Jan 2023 16:15:11 +0400 Subject: [PATCH 37/39] chore(dashmate): code review fixes --- packages/dashmate/configs/migrations.js | 2 +- packages/dashmate/scripts/helper.js | 2 +- .../listr/tasks/setup/setupRegularPresetTaskFactory.js | 8 +------- packages/dashmate/src/status/scopes/platform.js | 3 --- .../templates/platform/drive/tenderdash/config.toml.dot | 1 - 5 files changed, 3 insertions(+), 13 deletions(-) diff --git a/packages/dashmate/configs/migrations.js b/packages/dashmate/configs/migrations.js index 97e6f894336..d1ff4beb6d2 100644 --- a/packages/dashmate/configs/migrations.js +++ b/packages/dashmate/configs/migrations.js @@ -421,7 +421,7 @@ module.exports = { '0.24.0-dev.13': (configFile) => { Object.entries(configFile.configs) .forEach(([, config]) => { - if (config.platform) { + if (config.group === 'local') { config.platform.drive.tenderdash.moniker = config.name; } }); diff --git a/packages/dashmate/scripts/helper.js b/packages/dashmate/scripts/helper.js index 9cd72c2e925..61f5b93d464 100644 --- a/packages/dashmate/scripts/helper.js +++ b/packages/dashmate/scripts/helper.js @@ -29,7 +29,7 @@ const createDIContainer = require('../src/createDIContainer'); // Register config collection in the container container.register({ - isHelper: asValue(process.env.DASHMATE_HELPER === '1'), + configFile: asValue(configFile), }); const config = configFile.getConfig(configName); diff --git a/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js b/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js index 2d8722c7321..b194901b50b 100644 --- a/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/setup/setupRegularPresetTaskFactory.js @@ -44,13 +44,7 @@ function setupRegularPresetTaskFactory( return new Listr([ { task: (ctx) => { - const config = configFile.getConfig(ctx.preset); - - if (config.platform) { - config.platform.drive.tenderdash.moniker = config.name; - } - - ctx.config = config; + ctx.config = configFile.getConfig(ctx.preset); }, }, { diff --git a/packages/dashmate/src/status/scopes/platform.js b/packages/dashmate/src/status/scopes/platform.js index 1ee0d014256..db4de2c4cc2 100644 --- a/packages/dashmate/src/status/scopes/platform.js +++ b/packages/dashmate/src/status/scopes/platform.js @@ -56,9 +56,6 @@ function getPlatformScopeFactory(dockerCompose, 'drive_abci', 'yarn workspace @dashevo/drive echo'); if (driveEchoResult.exitCode !== 0) { - // eslint-disable-next-line no-console - console.error(driveEchoResult.out); - driveServiceStatus = ServiceStatusEnum.error; } diff --git a/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot b/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot index 0b9e954d8f7..d0d2bbca0cf 100644 --- a/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot +++ b/packages/dashmate/templates/platform/drive/tenderdash/config.toml.dot @@ -15,7 +15,6 @@ proxy-app = "tcp://drive_abci:26658" # A custom human readable name for this node -#moniker = "" {{?it.platform.drive.tenderdash.moniker}}moniker = "{{=it.platform.drive.tenderdash.moniker}}"{{??}}{{?}} # Database backend: goleveldb | cleveldb | boltdb | rocksdb | badgerdb From d361b2a5b548866b4eee63e22cea45689a704b7a Mon Sep 17 00:00:00 2001 From: pshenmic Date: Tue, 24 Jan 2023 17:46:24 +0400 Subject: [PATCH 38/39] chore(dashmate): fix migrations --- packages/dashmate/configs/migrations.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/dashmate/configs/migrations.js b/packages/dashmate/configs/migrations.js index d1ff4beb6d2..c90165756dd 100644 --- a/packages/dashmate/configs/migrations.js +++ b/packages/dashmate/configs/migrations.js @@ -4,7 +4,7 @@ const lodashGet = require('lodash/get'); const systemConfigs = require('./system'); -const { NETWORK_TESTNET } = require('../src/constants'); +const {NETWORK_TESTNET} = require('../src/constants'); module.exports = { '0.17.2': (configFile) => { @@ -421,8 +421,12 @@ module.exports = { '0.24.0-dev.13': (configFile) => { Object.entries(configFile.configs) .forEach(([, config]) => { - if (config.group === 'local') { - config.platform.drive.tenderdash.moniker = config.name; + if (config.platform) { + if (config.group === 'local') { + config.platform.drive.tenderdash.moniker = config.name; + } else { + config.platform.drive.tenderdash.moniker = null; + } } }); From 09f6fa0a0b659f02ba2301857f0d41b0e90fc7b0 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Wed, 25 Jan 2023 01:50:47 +0400 Subject: [PATCH 39/39] chore(dashmate): fix linting stuff --- packages/dashmate/configs/migrations.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashmate/configs/migrations.js b/packages/dashmate/configs/migrations.js index c90165756dd..183aacd22c1 100644 --- a/packages/dashmate/configs/migrations.js +++ b/packages/dashmate/configs/migrations.js @@ -4,7 +4,7 @@ const lodashGet = require('lodash/get'); const systemConfigs = require('./system'); -const {NETWORK_TESTNET} = require('../src/constants'); +const { NETWORK_TESTNET } = require('../src/constants'); module.exports = { '0.17.2': (configFile) => {