diff --git a/.yarn/cache/fsevents-patch-19706e7e35-10.zip b/.yarn/cache/fsevents-patch-19706e7e35-10.zip new file mode 100644 index 00000000000..aff1ab12ce5 Binary files /dev/null and b/.yarn/cache/fsevents-patch-19706e7e35-10.zip differ diff --git a/packages/dashmate/configs/defaults/getBaseConfigFactory.js b/packages/dashmate/configs/defaults/getBaseConfigFactory.js index 68d5258ff92..1614216ad2a 100644 --- a/packages/dashmate/configs/defaults/getBaseConfigFactory.js +++ b/packages/dashmate/configs/defaults/getBaseConfigFactory.js @@ -118,7 +118,6 @@ export default function getBaseConfigFactory() { miner: { enable: false, interval: '2.5m', - mediantime: null, address: null, }, devnet: { diff --git a/packages/dashmate/configs/getConfigFileMigrationsFactory.js b/packages/dashmate/configs/getConfigFileMigrationsFactory.js index 41132a61859..5bfe0315dc0 100644 --- a/packages/dashmate/configs/getConfigFileMigrationsFactory.js +++ b/packages/dashmate/configs/getConfigFileMigrationsFactory.js @@ -1059,6 +1059,8 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) '1.8.0': (configFile) => { Object.entries(configFile.configs) .forEach(([, options]) => { + delete options.core.miner.mediantime; + options.platform.drive.abci.docker.image = 'dashpay/drive:1-dev'; options.platform.dapi.api.docker.image = 'dashpay/dapi:1-dev'; }); diff --git a/packages/dashmate/src/config/configJsonSchema.js b/packages/dashmate/src/config/configJsonSchema.js index ed77019f290..0f57fbbf50d 100644 --- a/packages/dashmate/src/config/configJsonSchema.js +++ b/packages/dashmate/src/config/configJsonSchema.js @@ -349,15 +349,11 @@ export default { interval: { $ref: '#/definitions/duration', }, - mediantime: { - type: ['integer', 'null'], - minimum: 0, - }, address: { type: ['string', 'null'], }, }, - required: ['enable', 'interval', 'mediantime', 'address'], + required: ['enable', 'interval', 'address'], additionalProperties: false, }, devnet: { diff --git a/packages/dashmate/src/core/quorum/waitForMasternodeProbes.js b/packages/dashmate/src/core/quorum/waitForMasternodeProbes.js index b16197dcaf1..5e6ccb40851 100644 --- a/packages/dashmate/src/core/quorum/waitForMasternodeProbes.js +++ b/packages/dashmate/src/core/quorum/waitForMasternodeProbes.js @@ -1,14 +1,14 @@ import { LLMQ_TYPE_TEST } from '../../constants.js'; +import wait from '../../util/wait.js'; /** * Checks all mastrenodoes probes to incterconnected masternodes * * @param {RpcClient[]} rpcClients - * @param {Function} bumpMockTime * * @return {Promise} */ -async function checkProbes(rpcClients, bumpMockTime) { +async function checkProbes(rpcClients) { let masternodes = await Promise.all( rpcClients.map((rpc) => { const promise = rpc.masternode('status'); @@ -30,8 +30,6 @@ async function checkProbes(rpcClients, bumpMockTime) { .find((connection) => connection.llmqType === LLMQ_TYPE_TEST); if (!llmqConnection) { - await bumpMockTime(); - return false; } @@ -49,16 +47,12 @@ async function checkProbes(rpcClients, bumpMockTime) { // probe is not too old. Probes are retried after 50 minutes, while DKGs consider // a probe as failed after 60 minutes if (mnInfo.metaInfo.lastOutboundSuccessElapsed > 55 * 60) { - await bumpMockTime(); - return false; } // MN is expected to be offline, so let's only check that // the last probe is not too long ago } else if (mnInfo.metaInfo.lastOutboundAttemptElapsed > 55 * 60 && mnInfo.metaInfo.lastOutboundSuccessElapsed > 55 * 60) { - await bumpMockTime(); - return false; } } @@ -72,20 +66,21 @@ async function checkProbes(rpcClients, bumpMockTime) { /** * * @param {RpcClient[]} rpcClients - * @param {Function} bumpMockTime * @param {number} [timeout] * @return {Promise} */ -export default async function waitForMasternodeProbes(rpcClients, bumpMockTime, timeout = 30000) { +export default async function waitForMasternodeProbes(rpcClients, timeout = 30000) { const deadline = Date.now() + timeout; let isReady = false; while (!isReady) { - isReady = await checkProbes(rpcClients, bumpMockTime); + isReady = await checkProbes(rpcClients); if (Date.now() > deadline) { throw new Error(`waitForMasternodeProbes deadline of ${timeout} exceeded`); } + + await wait(100); } } diff --git a/packages/dashmate/src/core/quorum/waitForQuorumConnections.js b/packages/dashmate/src/core/quorum/waitForQuorumConnections.js index 465ab84c197..90d512f77d8 100644 --- a/packages/dashmate/src/core/quorum/waitForQuorumConnections.js +++ b/packages/dashmate/src/core/quorum/waitForQuorumConnections.js @@ -31,14 +31,12 @@ async function checkQuorumConnections(rpcClient, expectedConnectionsCount) { * * @param {RpcClient[]} rpcClients * @param {number} expectedConnectionsCount - * @param {Function} bumpMockTime * @param {number} [timeout] * @return {Promise} */ export default async function waitForQuorumConnections( rpcClients, expectedConnectionsCount, - bumpMockTime, timeout = 300000, ) { const deadline = Date.now() + timeout; @@ -58,8 +56,6 @@ export default async function waitForQuorumConnections( })); if (readyNodes.size < nodesToWait) { - await bumpMockTime(); - await wait(1000); } diff --git a/packages/dashmate/src/listr/tasks/setup/local/configureCoreTaskFactory.js b/packages/dashmate/src/listr/tasks/setup/local/configureCoreTaskFactory.js index 522509b7397..0ba938c2c14 100644 --- a/packages/dashmate/src/listr/tasks/setup/local/configureCoreTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/setup/local/configureCoreTaskFactory.js @@ -212,15 +212,6 @@ export default function configureCoreTaskFactory( )); ctx.seedRpcClient = ctx.seedCoreService.getRpcClient(); - - ctx.mockTime = 0; - ctx.bumpMockTime = async (time = 1) => { - ctx.mockTime += time; - - await Promise.all( - ctx.rpcClients.map((rpcClient) => rpcClient.setMockTime(ctx.mockTime)), - ); - }; }, }, { @@ -232,25 +223,6 @@ export default function configureCoreTaskFactory( ))); }, }, - { - title: 'Set initial mock time', - task: async () => { - // Set initial mock time from the last block - const { result: bestBlockHash } = await ctx.seedRpcClient.getBestBlockHash(); - const { result: bestBlock } = await ctx.seedRpcClient.getBlock(bestBlockHash); - - await ctx.bumpMockTime(bestBlock.time); - - // Sync nodes - await ctx.bumpMockTime(); - - await generateBlocks( - ctx.seedCoreService, - 1, - NETWORK_LOCAL, - ); - }, - }, { title: 'Wait for nodes to have the same height', task: () => waitForNodesToHaveTheSameHeight( diff --git a/packages/dashmate/src/listr/tasks/setup/local/enableCoreQuorumsTaskFactory.js b/packages/dashmate/src/listr/tasks/setup/local/enableCoreQuorumsTaskFactory.js index 49fbbd47379..a7036cbacfb 100644 --- a/packages/dashmate/src/listr/tasks/setup/local/enableCoreQuorumsTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/setup/local/enableCoreQuorumsTaskFactory.js @@ -50,8 +50,6 @@ export default function enableCoreQuorumsTaskFactory(generateBlocks) { // move forward to next DKG const blocksUntilNextDKG = 24 - (bestBlockHeight % 24); if (blocksUntilNextDKG !== 0) { - await ctx.bumpMockTime(); - await generateBlocks( ctx.seedCoreService, blocksUntilNextDKG, @@ -82,7 +80,6 @@ export default function enableCoreQuorumsTaskFactory(generateBlocks) { await waitForQuorumConnections( ctx.masternodeRpcClients, ctx.expectedConnections, - ctx.bumpMockTime, ); const { result: sporks } = await ctx.seedRpcClient.spork('show'); @@ -91,12 +88,9 @@ export default function enableCoreQuorumsTaskFactory(generateBlocks) { if (isSpork21Active) { await waitForMasternodeProbes( ctx.masternodeRpcClients, - ctx.bumpMockTime, ); } - await ctx.bumpMockTime(); - await generateBlocks( ctx.seedCoreService, 2, @@ -119,8 +113,6 @@ export default function enableCoreQuorumsTaskFactory(generateBlocks) { ctx.expectedMembers, ); - await ctx.bumpMockTime(); - await generateBlocks( ctx.seedCoreService, 2, @@ -145,8 +137,6 @@ export default function enableCoreQuorumsTaskFactory(generateBlocks) { ctx.expectedComplaints, ); - await ctx.bumpMockTime(); - await generateBlocks( ctx.seedCoreService, 2, @@ -171,8 +161,6 @@ export default function enableCoreQuorumsTaskFactory(generateBlocks) { ctx.expectedJustifications, ); - await ctx.bumpMockTime(); - await generateBlocks( ctx.seedCoreService, 2, @@ -197,8 +185,6 @@ export default function enableCoreQuorumsTaskFactory(generateBlocks) { ctx.expectedCommitments, ); - await ctx.bumpMockTime(); - await generateBlocks( ctx.seedCoreService, 2, @@ -232,8 +218,6 @@ export default function enableCoreQuorumsTaskFactory(generateBlocks) { { title: 'Mining final commitment', task: async (ctx, task) => { - await ctx.bumpMockTime(); - await generateBlocks( ctx.seedCoreService, 1, @@ -246,8 +230,6 @@ export default function enableCoreQuorumsTaskFactory(generateBlocks) { while (!testPlatformQuorumEnabled) { await wait(300); - await ctx.bumpMockTime(); - await generateBlocks( ctx.seedCoreService, 1, diff --git a/packages/dashmate/src/listr/tasks/setup/setupLocalPresetTaskFactory.js b/packages/dashmate/src/listr/tasks/setup/setupLocalPresetTaskFactory.js index 242f65582ad..270bcda5bb6 100644 --- a/packages/dashmate/src/listr/tasks/setup/setupLocalPresetTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/setup/setupLocalPresetTaskFactory.js @@ -143,13 +143,11 @@ export default function setupLocalPresetTaskFactory( config.set('core.log.debug.enabled', true); } - // Although not all nodes are miners, all nodes should be aware of - // the miner interval to be able to sync mocked time - config.set('core.miner.interval', ctx.minerInterval); - config.set('dashmate.helper.api.port', config.get('dashmate.helper.api.port') + (i * 100)); if (config.getName() === 'local_seed') { + config.set('core.miner.interval', ctx.minerInterval); + config.set('description', 'seed node for local network'); config.set('core.masternode.enable', false); diff --git a/packages/dashmate/src/listr/tasks/startGroupNodesTaskFactory.js b/packages/dashmate/src/listr/tasks/startGroupNodesTaskFactory.js index eae01bd49e4..53b6762ee1e 100644 --- a/packages/dashmate/src/listr/tasks/startGroupNodesTaskFactory.js +++ b/packages/dashmate/src/listr/tasks/startGroupNodesTaskFactory.js @@ -82,46 +82,6 @@ export default function startGroupNodesTaskFactory( return new Listr(tasks, { concurrent: true }); }, }, - { - title: 'Mock core node time', - enabled: () => minerConfig && minerConfig.get('network') === NETWORK_LOCAL, - task: async () => { - // TASK RATIONALE: - // During DKG sessions, nodes can make only 1 quorum request per 10 minutes. - // If mocktime is not adjusted, quorums will start failing to form after some time. - const minerInterval = minerConfig.get('core.miner.interval'); - // 2.5 minutes - mimics the behaviour of the real network - const secondsToAdd = 150; - - const tasks = configGroup.map((config) => ({ - title: `Adjust ${config.getName()} mock time`, - task: async () => { - /* eslint-disable no-useless-escape */ - await dockerCompose.execCommand( - config, - 'core', - [ - 'bash', - '-c', - ` - response=\$(dash-cli getblockchaininfo); - mocktime=\$(echo \${response} | grep -o -E '\"mediantime\"\: [0-9]+' | cut -d ' ' -f2); - while true; do - mocktime=\$((mocktime + ${secondsToAdd})); - dash-cli setmocktime \$mocktime; - sleep ${minerInterval}; - done - `, - ], - ['--detach'], - ); - /* eslint-enable no-useless-escape */ - }, - })); - - return new Listr(tasks, { concurrent: true }); - }, - }, { title: 'Start a miner', enabled: () => minerConfig && minerConfig.get('network') === NETWORK_LOCAL, diff --git a/packages/dashmate/templates/core/dash.conf.dot b/packages/dashmate/templates/core/dash.conf.dot index 78b71b095a1..5e5729de132 100644 --- a/packages/dashmate/templates/core/dash.conf.dot +++ b/packages/dashmate/templates/core/dash.conf.dot @@ -95,7 +95,6 @@ regtest=1 testactivationheight=mn_rr@1000 {{? it.core.spork.address}}sporkaddr={{=it.core.spork.address}}{{?}} {{? it.core.spork.privateKey}}sporkkey={{=it.core.spork.privateKey}}{{?}} -{{? it.core.miner.mediantime}}mocktime={{=it.core.miner.mediantime}}{{?}} llmqtestinstantsenddip0024=llmq_test_instantsend {{?? it.network === 'devnet'}}