From 47ef748f10bccb49fa2346eb358a97a164d8b480 Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Thu, 15 Oct 2026 18:08:34 +0700 Subject: [PATCH 1/2] fix(dashmate): show platform status on Dash Core v24 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dash Core v24 no longer returns softforks from getblockchaininfo unless it runs with -deprecatedrpc=softforks (marked for removal in v25). It reports deployments in the new getdeploymentinfo, which Core v23 does not have. The platform status scope read getblockchaininfo.softforks.mn_rr, threw on v24, and left the whole platform section blank in `dashmate status`, `status platform`, `group status` and the helper API status: activation, Core sync, Tenderdash and Drive status, version, height and peers. Core and masternode fields were not affected. The scope now reads softforks when Core returns them (Core v23: the same path as before, no extra call) and asks getdeploymentinfo otherwise. A missing or malformed mn_rr deployment is now reported as unavailable Core info (empty platform section, reason logged under DEBUG) instead of crashing getPlatformScope, which a softforks without mn_rr used to do. Calling getdeploymentinfo needs an @dashevo/dashd-rpc release with getDeploymentInfo. Until that dependency is bumped, Core v24 nodes keep today's blank platform section and Core v23 nodes are unaffected. The tests use getblockchaininfo, getdeploymentinfo and mnsync answers recorded from official Dash Core 23.1.8 and 24.0.0-rc.3 builds on regtest (testactivationheight=mn_rr@1000). They would have caught this in CI: - ✖ before the fix: both Core v24 rows (activation null); Core v23 without mn_rr (getPlatformScope rejected: "Cannot read properties of undefined (reading 'active')"); Core v24 without mn_rr (getdeploymentinfo never read) - ✔ after the fix The Core v23 control passes before and after. Co-Authored-By: Claude Opus 5.5 --- .../dashmate/src/status/scopes/platform.js | 20 ++- .../23.1.8/getblockchaininfo-1112.json | 117 +++++++++++++++++ .../coreRpc/23.1.8/mnsync-status.json | 8 ++ .../24.0.0-rc.3/getblockchaininfo-1112.json | 15 +++ .../24.0.0-rc.3/getblockchaininfo-512.json | 15 +++ .../24.0.0-rc.3/getdeploymentinfo-1112.json | 121 ++++++++++++++++++ .../24.0.0-rc.3/getdeploymentinfo-512.json | 121 ++++++++++++++++++ .../coreRpc/24.0.0-rc.3/mnsync-status.json | 8 ++ .../test/unit/status/scopes/platform.spec.js | 112 ++++++++++++++++ 9 files changed, 531 insertions(+), 6 deletions(-) create mode 100644 packages/dashmate/test/fixtures/coreRpc/23.1.8/getblockchaininfo-1112.json create mode 100644 packages/dashmate/test/fixtures/coreRpc/23.1.8/mnsync-status.json create mode 100644 packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getblockchaininfo-1112.json create mode 100644 packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getblockchaininfo-512.json create mode 100644 packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getdeploymentinfo-1112.json create mode 100644 packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getdeploymentinfo-512.json create mode 100644 packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/mnsync-status.json diff --git a/packages/dashmate/src/status/scopes/platform.js b/packages/dashmate/src/status/scopes/platform.js index b2f44b8eac3..4e3b565e197 100644 --- a/packages/dashmate/src/status/scopes/platform.js +++ b/packages/dashmate/src/status/scopes/platform.js @@ -49,11 +49,19 @@ export default function getPlatformScopeFactory( rpcClient.getBlockchainInfo(), ]); - const { - result: { - softforks: { mn_rr: mnRR }, - }, - } = blockchainInfo; + // Core v24 omits softforks from getblockchaininfo unless started with + // -deprecatedrpc=softforks and reports them in getdeploymentinfo. Core v23 has no + // getdeploymentinfo, so softforks is read first. + const deployments = blockchainInfo.result.softforks + ?? (await rpcClient.getDeploymentInfo()).result?.deployments; + + const mnRR = deployments?.mn_rr; + + // getPlatformScope reads the mn_rr deployment outside its try, so a missing or malformed + // deployment has to fail here, where it is handled as unavailable Core info. + if (typeof mnRR?.active !== 'boolean' || !Number.isInteger(mnRR.height)) { + throw new Error(`Core did not report a valid mn_rr deployment: ${JSON.stringify(mnRR)}`); + } const { result: { @@ -336,7 +344,7 @@ export default function getPlatformScopeFactory( } catch (e) { if (process.env.DEBUG) { // eslint-disable-next-line no-console - console.error('Could not get MNSync from core', e); + console.error('Could not get sync status and platform activation from Core', e); } } diff --git a/packages/dashmate/test/fixtures/coreRpc/23.1.8/getblockchaininfo-1112.json b/packages/dashmate/test/fixtures/coreRpc/23.1.8/getblockchaininfo-1112.json new file mode 100644 index 00000000000..e164a8fdffb --- /dev/null +++ b/packages/dashmate/test/fixtures/coreRpc/23.1.8/getblockchaininfo-1112.json @@ -0,0 +1,117 @@ +{ + "chain": "regtest", + "blocks": 1112, + "headers": 1112, + "bestblockhash": "0933f86094f3ded670c18238e70a8eacb06813373657d10e328dba2a31c7f6cd", + "difficulty": 4.656542373906925e-10, + "time": 1792060531, + "mediantime": 1792060530, + "verificationprogress": 1, + "initialblockdownload": false, + "chainwork": "00000000000000000000000000000000000000000000000000000000000008b2", + "size_on_disk": 802296, + "pruned": false, + "softforks": { + "bip34": { + "type": "buried", + "active": true, + "height": 1 + }, + "bip66": { + "type": "buried", + "active": true, + "height": 1 + }, + "bip65": { + "type": "buried", + "active": true, + "height": 1 + }, + "bip147": { + "type": "buried", + "active": true, + "height": 0 + }, + "csv": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0001": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0003": { + "type": "buried", + "active": true, + "height": 432 + }, + "dip0008": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0020": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0024": { + "type": "buried", + "active": true, + "height": 1 + }, + "realloc": { + "type": "buried", + "active": true, + "height": 1 + }, + "v19": { + "type": "buried", + "active": true, + "height": 1 + }, + "v20": { + "type": "buried", + "active": true, + "height": 432 + }, + "mn_rr": { + "type": "buried", + "active": true, + "height": 1000 + }, + "withdrawals": { + "type": "buried", + "active": true, + "height": 600 + }, + "v24": { + "type": "bip9", + "bip9": { + "status": "defined", + "start_time": 0, + "timeout": 9223372036854775807, + "min_activation_height": 0, + "ehf": true, + "since": 0 + }, + "active": false + }, + "testdummy": { + "type": "bip9", + "bip9": { + "status": "active", + "start_time": 0, + "timeout": 9223372036854775807, + "min_activation_height": 0, + "ehf": false, + "since": 432 + }, + "height": 432, + "active": true + } + }, + "warnings": "" +} diff --git a/packages/dashmate/test/fixtures/coreRpc/23.1.8/mnsync-status.json b/packages/dashmate/test/fixtures/coreRpc/23.1.8/mnsync-status.json new file mode 100644 index 00000000000..d587204ecbd --- /dev/null +++ b/packages/dashmate/test/fixtures/coreRpc/23.1.8/mnsync-status.json @@ -0,0 +1,8 @@ +{ + "AssetID": 999, + "AssetName": "MASTERNODE_SYNC_FINISHED", + "AssetStartTime": 1792060356, + "Attempt": 0, + "IsBlockchainSynced": true, + "IsSynced": true +} diff --git a/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getblockchaininfo-1112.json b/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getblockchaininfo-1112.json new file mode 100644 index 00000000000..89d4a6a9537 --- /dev/null +++ b/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getblockchaininfo-1112.json @@ -0,0 +1,15 @@ +{ + "chain": "regtest", + "blocks": 1112, + "headers": 1112, + "bestblockhash": "69bf772133b0ed53979dce7927104fcc3577180137aacb283e8a282ecb86bf85", + "difficulty": 4.656542373906925e-10, + "time": 1792060432, + "mediantime": 1792060431, + "verificationprogress": 1, + "initialblockdownload": false, + "chainwork": "00000000000000000000000000000000000000000000000000000000000008b2", + "size_on_disk": 802291, + "pruned": false, + "warnings": "This is a pre-release test build - use at your own risk - do not use for mining or merchant applications" +} diff --git a/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getblockchaininfo-512.json b/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getblockchaininfo-512.json new file mode 100644 index 00000000000..8f30b16fc0e --- /dev/null +++ b/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getblockchaininfo-512.json @@ -0,0 +1,15 @@ +{ + "chain": "regtest", + "blocks": 512, + "headers": 512, + "bestblockhash": "0883b85d67c2eaf7d5756fd174cb79e99144bcab29a56b2a122b2134203ab45d", + "difficulty": 4.656542373906925e-10, + "time": 1792060332, + "mediantime": 1792060331, + "verificationprogress": 1, + "initialblockdownload": false, + "chainwork": "0000000000000000000000000000000000000000000000000000000000000402", + "size_on_disk": 172286, + "pruned": false, + "warnings": "This is a pre-release test build - use at your own risk - do not use for mining or merchant applications" +} diff --git a/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getdeploymentinfo-1112.json b/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getdeploymentinfo-1112.json new file mode 100644 index 00000000000..583c7c69aa4 --- /dev/null +++ b/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getdeploymentinfo-1112.json @@ -0,0 +1,121 @@ +{ + "hash": "69bf772133b0ed53979dce7927104fcc3577180137aacb283e8a282ecb86bf85", + "height": 1112, + "deployments": { + "bip34": { + "type": "buried", + "active": true, + "height": 1 + }, + "bip66": { + "type": "buried", + "active": true, + "height": 1 + }, + "bip65": { + "type": "buried", + "active": true, + "height": 1 + }, + "bip147": { + "type": "buried", + "active": true, + "height": 0 + }, + "csv": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0001": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0003": { + "type": "buried", + "active": true, + "height": 432 + }, + "dip0008": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0020": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0024": { + "type": "buried", + "active": true, + "height": 1 + }, + "realloc": { + "type": "buried", + "active": true, + "height": 1 + }, + "v19": { + "type": "buried", + "active": true, + "height": 1 + }, + "v20": { + "type": "buried", + "active": true, + "height": 432 + }, + "mn_rr": { + "type": "buried", + "active": true, + "height": 1000 + }, + "withdrawals": { + "type": "buried", + "active": true, + "height": 600 + }, + "v24": { + "type": "bip9", + "active": false, + "bip9": { + "start_time": 0, + "timeout": 9223372036854775807, + "ehf": true, + "min_activation_height": 0, + "status": "defined", + "since": 0, + "status_next": "defined" + } + }, + "evo_shares": { + "type": "bip9", + "active": false, + "bip9": { + "start_time": 0, + "timeout": 9223372036854775807, + "ehf": true, + "min_activation_height": 0, + "status": "defined", + "since": 0, + "status_next": "defined" + } + }, + "testdummy": { + "type": "bip9", + "height": 432, + "active": true, + "bip9": { + "start_time": 0, + "timeout": 9223372036854775807, + "ehf": false, + "min_activation_height": 0, + "status": "active", + "since": 432, + "status_next": "active" + } + } + } +} diff --git a/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getdeploymentinfo-512.json b/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getdeploymentinfo-512.json new file mode 100644 index 00000000000..5e99145c10f --- /dev/null +++ b/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/getdeploymentinfo-512.json @@ -0,0 +1,121 @@ +{ + "hash": "0883b85d67c2eaf7d5756fd174cb79e99144bcab29a56b2a122b2134203ab45d", + "height": 512, + "deployments": { + "bip34": { + "type": "buried", + "active": true, + "height": 1 + }, + "bip66": { + "type": "buried", + "active": true, + "height": 1 + }, + "bip65": { + "type": "buried", + "active": true, + "height": 1 + }, + "bip147": { + "type": "buried", + "active": true, + "height": 0 + }, + "csv": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0001": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0003": { + "type": "buried", + "active": true, + "height": 432 + }, + "dip0008": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0020": { + "type": "buried", + "active": true, + "height": 1 + }, + "dip0024": { + "type": "buried", + "active": true, + "height": 1 + }, + "realloc": { + "type": "buried", + "active": true, + "height": 1 + }, + "v19": { + "type": "buried", + "active": true, + "height": 1 + }, + "v20": { + "type": "buried", + "active": true, + "height": 432 + }, + "mn_rr": { + "type": "buried", + "active": false, + "height": 1000 + }, + "withdrawals": { + "type": "buried", + "active": false, + "height": 600 + }, + "v24": { + "type": "bip9", + "active": false, + "bip9": { + "start_time": 0, + "timeout": 9223372036854775807, + "ehf": true, + "min_activation_height": 0, + "status": "defined", + "since": 0, + "status_next": "defined" + } + }, + "evo_shares": { + "type": "bip9", + "active": false, + "bip9": { + "start_time": 0, + "timeout": 9223372036854775807, + "ehf": true, + "min_activation_height": 0, + "status": "defined", + "since": 0, + "status_next": "defined" + } + }, + "testdummy": { + "type": "bip9", + "height": 432, + "active": true, + "bip9": { + "start_time": 0, + "timeout": 9223372036854775807, + "ehf": false, + "min_activation_height": 0, + "status": "active", + "since": 432, + "status_next": "active" + } + } + } +} diff --git a/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/mnsync-status.json b/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/mnsync-status.json new file mode 100644 index 00000000000..4643b091c2e --- /dev/null +++ b/packages/dashmate/test/fixtures/coreRpc/24.0.0-rc.3/mnsync-status.json @@ -0,0 +1,8 @@ +{ + "AssetID": 999, + "AssetName": "MASTERNODE_SYNC_FINISHED", + "AssetStartTime": 1792060306, + "Attempt": 0, + "IsBlockchainSynced": true, + "IsSynced": true +} diff --git a/packages/dashmate/test/unit/status/scopes/platform.spec.js b/packages/dashmate/test/unit/status/scopes/platform.spec.js index b6736845298..f34ffb14188 100644 --- a/packages/dashmate/test/unit/status/scopes/platform.spec.js +++ b/packages/dashmate/test/unit/status/scopes/platform.spec.js @@ -1,3 +1,6 @@ +import fs from 'fs'; +import path from 'path'; +import { PACKAGE_ROOT_DIR } from '../../../../src/constants.js'; import ContainerIsNotPresentError from '../../../../src/docker/errors/ContainerIsNotPresentError.js'; import DockerComposeError from '../../../../src/docker/errors/DockerComposeError.js'; @@ -33,6 +36,7 @@ describe('getPlatformScopeFactory', () => { mockRpcClient = { mnsync: this.sinon.stub(), getBlockchainInfo: this.sinon.stub(), + getDeploymentInfo: this.sinon.stub(), masternode: this.sinon.stub(), }; mockDockerCompose = { @@ -746,5 +750,113 @@ describe('getPlatformScopeFactory', () => { const scope = await getPlatformScope(config); expect(scope).to.deep.equal(expectedScope); }); + + describe('platform activation', () => { + /** + * Read a Core RPC answer recorded from an official Dash Core build on regtest with + * testactivationheight=mn_rr@1000 and without -deprecatedrpc=softforks, at height 512 + * (before mn_rr) or 1112 (after it). Every call parses the file again, so a test may + * change the answer it gets. + * + * @param {string} coreVersion + * @param {string} name + * @returns {{result: Object}} + */ + function readCoreAnswer(coreVersion, name) { + const file = path.join(PACKAGE_ROOT_DIR, 'test/fixtures/coreRpc', coreVersion, `${name}.json`); + + return { result: JSON.parse(fs.readFileSync(file, 'utf8')) }; + } + + beforeEach(() => { + mockDockerCompose.isServiceRunning.withArgs(config, 'drive_tenderdash').returns(false); + mockDetermineDockerStatus.withArgs(mockDockerCompose, config, 'drive_abci') + .returns(DockerStatusEnum.running); + mockDockerCompose.execCommand.withArgs(config, 'drive_abci', 'drive-abci status').resolves({ exitCode: 0, out: '' }); + mockDockerCompose.execCommand.withArgs(config, 'drive_abci', 'drive-abci version').resolves({ exitCode: 0, out: '1.4.1' }); + }); + + [ + { + height: 1112, + platformActivation: 'Activated (at height 1000)', + driveServiceStatus: ServiceStatusEnum.up, + }, + { + height: 512, + platformActivation: 'Waiting for activation on height 1000', + driveServiceStatus: ServiceStatusEnum.wait_for_activation, + }, + ].forEach(({ height, platformActivation, driveServiceStatus }) => { + it(`should report platform activation and status at height ${height} on Core v24, which by default no longer reports softforks in getblockchaininfo`, async () => { + mockRpcClient.mnsync.withArgs('status').returns(readCoreAnswer('24.0.0-rc.3', 'mnsync-status')); + mockRpcClient.getBlockchainInfo.returns(readCoreAnswer('24.0.0-rc.3', `getblockchaininfo-${height}`)); + mockRpcClient.getDeploymentInfo.returns(readCoreAnswer('24.0.0-rc.3', `getdeploymentinfo-${height}`)); + + const scope = await getPlatformScope(config); + + expect(scope.platformActivation).to.equal(platformActivation); + expect(scope.coreIsSynced).to.be.true(); + expect(scope.tenderdash.serviceStatus).to.equal(ServiceStatusEnum.stopped); + expect(scope.drive).to.deep.equal({ + dockerStatus: DockerStatusEnum.running, + serviceStatus: driveServiceStatus, + version: '1.4.1', + }); + }); + }); + + it('should read platform activation from getblockchaininfo softforks on Core v23 without calling getdeploymentinfo', async () => { + // Core v23 has no getdeploymentinfo and reports deployments only in getblockchaininfo softforks + mockRpcClient.mnsync.withArgs('status').returns(readCoreAnswer('23.1.8', 'mnsync-status')); + mockRpcClient.getBlockchainInfo.returns(readCoreAnswer('23.1.8', 'getblockchaininfo-1112')); + + const scope = await getPlatformScope(config); + + expect(scope.platformActivation).to.equal('Activated (at height 1000)'); + expect(scope.coreIsSynced).to.be.true(); + expect(scope.drive.serviceStatus).to.equal(ServiceStatusEnum.up); + expect(mockRpcClient.getDeploymentInfo).to.not.have.been.called(); + }); + + [ + { + coreVersion: '23.1.8', + getDeploymentInfoCalls: 0, + mockDeployments: () => { + const blockchainInfo = readCoreAnswer('23.1.8', 'getblockchaininfo-1112'); + delete blockchainInfo.result.softforks.mn_rr; + mockRpcClient.getBlockchainInfo.returns(blockchainInfo); + }, + }, + { + coreVersion: '24.0.0-rc.3', + getDeploymentInfoCalls: 1, + mockDeployments: () => { + const deploymentInfo = readCoreAnswer('24.0.0-rc.3', 'getdeploymentinfo-1112'); + delete deploymentInfo.result.deployments.mn_rr; + mockRpcClient.getBlockchainInfo.returns(readCoreAnswer('24.0.0-rc.3', 'getblockchaininfo-1112')); + mockRpcClient.getDeploymentInfo.returns(deploymentInfo); + }, + }, + ].forEach(({ coreVersion, getDeploymentInfoCalls, mockDeployments }) => { + it(`should return the empty platform scope instead of failing when Core ${coreVersion} reports no mn_rr deployment`, async () => { + mockRpcClient.mnsync.withArgs('status').returns(readCoreAnswer(coreVersion, 'mnsync-status')); + mockDeployments(); + + const scope = await getPlatformScope(config); + + expect(scope.platformActivation).to.be.null(); + expect(scope.coreIsSynced).to.be.null(); + expect(scope.tenderdash.serviceStatus).to.be.null(); + expect(scope.drive).to.deep.equal({ + dockerStatus: null, + serviceStatus: null, + version: null, + }); + expect(mockRpcClient.getDeploymentInfo.callCount).to.equal(getDeploymentInfoCalls); + }); + }); + }); }); }); From 72153bf762360e050e69e41b984d2e3d200f5788 Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Thu, 15 Oct 2026 21:04:32 +0700 Subject: [PATCH 2/2] fix(dashmate): call getdeploymentinfo with @dashevo/dashd-rpc 19.1.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The platform status scope asks getdeploymentinfo when Core v24 omits softforks from getblockchaininfo, but @dashevo/dashd-rpc 19.0.0 has no getDeploymentInfo method, so Core v24 nodes still showed an empty platform section. 19.1.0 adds it and changes nothing else in the client. dapi moves to the same range, as yarn constraints require. Test: "createRpcClient should call getdeploymentinfo, where Core v24 reports platform activation" drives dashmate's real RPC client over a stubbed HTTP request with a getdeploymentinfo answer recorded from Dash Core 24.0.0-rc.3. - ✖ with 19.0.0: "createRpcClient(...).getDeploymentInfo is not a function" - ✔ with 19.1.0 Co-Authored-By: Claude Opus 5.5 --- .pnp.cjs | 10 ++--- ...d-rpc-npm-19.0.0-54bb2a5dfc-2eab84af3e.zip | Bin 11426 -> 0 bytes ...d-rpc-npm-19.1.0-9dfdfd28d7-5d3ebf1f0b.zip | Bin 0 -> 11989 bytes packages/dapi/package.json | 2 +- packages/dashmate/package.json | 2 +- .../test/unit/core/createRpcClient.spec.js | 42 ++++++++++++++++++ yarn.lock | 12 ++--- 7 files changed, 55 insertions(+), 13 deletions(-) delete mode 100644 .yarn/cache/@dashevo-dashd-rpc-npm-19.0.0-54bb2a5dfc-2eab84af3e.zip create mode 100644 .yarn/cache/@dashevo-dashd-rpc-npm-19.1.0-9dfdfd28d7-5d3ebf1f0b.zip create mode 100644 packages/dashmate/test/unit/core/createRpcClient.spec.js diff --git a/.pnp.cjs b/.pnp.cjs index c1f40457d98..9afeeb83fbc 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -2561,7 +2561,7 @@ const RAW_RUNTIME_STATE = ["@dashevo/dapi-client", "workspace:packages/js-dapi-client"],\ ["@dashevo/dapi-grpc", "workspace:packages/dapi-grpc"],\ ["@dashevo/dashcore-lib", "npm:0.22.0"],\ - ["@dashevo/dashd-rpc", "npm:19.0.0"],\ + ["@dashevo/dashd-rpc", "npm:19.1.0"],\ ["@dashevo/dp-services-ctl", "https://github.com/dashevo/js-dp-services-ctl.git#commit=3976076b0018c5b4632ceda4c752fc597f27a640"],\ ["@dashevo/grpc-common", "workspace:packages/js-grpc-common"],\ ["@dashevo/wasm-dpp", "workspace:packages/wasm-dpp"],\ @@ -2732,10 +2732,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@dashevo/dashd-rpc", [\ - ["npm:19.0.0", {\ - "packageLocation": "./.yarn/cache/@dashevo-dashd-rpc-npm-19.0.0-54bb2a5dfc-2eab84af3e.zip/node_modules/@dashevo/dashd-rpc/",\ + ["npm:19.1.0", {\ + "packageLocation": "./.yarn/cache/@dashevo-dashd-rpc-npm-19.1.0-9dfdfd28d7-5d3ebf1f0b.zip/node_modules/@dashevo/dashd-rpc/",\ "packageDependencies": [\ - ["@dashevo/dashd-rpc", "npm:19.0.0"],\ + ["@dashevo/dashd-rpc", "npm:19.1.0"],\ ["async", "npm:3.2.4"],\ ["bluebird", "npm:3.7.2"]\ ],\ @@ -9702,7 +9702,7 @@ const RAW_RUNTIME_STATE = ["@dashevo/bls", "npm:1.2.9"],\ ["@dashevo/dapi-client", "workspace:packages/js-dapi-client"],\ ["@dashevo/dashcore-lib", "npm:0.22.0"],\ - ["@dashevo/dashd-rpc", "npm:19.0.0"],\ + ["@dashevo/dashd-rpc", "npm:19.1.0"],\ ["@dashevo/docker-compose", "npm:0.24.4"],\ ["@dashevo/wallet-lib", "workspace:packages/wallet-lib"],\ ["@dashevo/withdrawals-contract", "workspace:packages/withdrawals-contract"],\ diff --git a/.yarn/cache/@dashevo-dashd-rpc-npm-19.0.0-54bb2a5dfc-2eab84af3e.zip b/.yarn/cache/@dashevo-dashd-rpc-npm-19.0.0-54bb2a5dfc-2eab84af3e.zip deleted file mode 100644 index 6ad3f917538fbb5e52ce763e44b0ec6df7571662..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11426 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 Zk`9V8kWfFlC_g@CKU{IjpH;pf{}0`8pcDWA diff --git a/.yarn/cache/@dashevo-dashd-rpc-npm-19.1.0-9dfdfd28d7-5d3ebf1f0b.zip b/.yarn/cache/@dashevo-dashd-rpc-npm-19.1.0-9dfdfd28d7-5d3ebf1f0b.zip new file mode 100644 index 0000000000000000000000000000000000000000..8c470f8b74ee69c7bb423b6283f7b56940c534c9 GIT binary patch literal 11989 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 { + it('should call getdeploymentinfo, where Core v24 reports platform activation', async function it() { + // Recorded from Dash Core 24.0.0-rc.3 on regtest with testactivationheight=mn_rr@1000 + const deploymentInfo = JSON.parse(fs.readFileSync( + path.join(PACKAGE_ROOT_DIR, 'test/fixtures/coreRpc/24.0.0-rc.3/getdeploymentinfo-1112.json'), + 'utf8', + )); + + let requestBody = ''; + + this.sinon.stub(http, 'request').callsFake((options, callback) => { + const request = new EventEmitter(); + request.setHeader = () => {}; + request.write = (data) => { + requestBody += data; + }; + request.end = () => { + const response = new EventEmitter(); + callback(response); + response.statusCode = 200; + response.emit('data', JSON.stringify({ result: deploymentInfo, error: null, id: 1 })); + response.emit('end'); + }; + + return request; + }); + + const { result } = await createRpcClient().getDeploymentInfo(); + + const { method, params } = JSON.parse(requestBody); + expect(method).to.equal('getdeploymentinfo'); + expect(params).to.deep.equal([]); + expect(result.deployments.mn_rr).to.deep.equal({ type: 'buried', active: true, height: 1000 }); + }); +}); diff --git a/yarn.lock b/yarn.lock index 884fa0a45c6..219919642ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1606,7 +1606,7 @@ __metadata: "@dashevo/dapi-client": "workspace:*" "@dashevo/dapi-grpc": "workspace:*" "@dashevo/dashcore-lib": "npm:~0.22.0" - "@dashevo/dashd-rpc": "npm:^19.0.0" + "@dashevo/dashd-rpc": "npm:^19.1.0" "@dashevo/dp-services-ctl": "github:dashevo/js-dp-services-ctl#v0.19-dev" "@dashevo/grpc-common": "workspace:*" "@dashevo/wasm-dpp": "workspace:*" @@ -1694,13 +1694,13 @@ __metadata: languageName: node linkType: hard -"@dashevo/dashd-rpc@npm:^19.0.0": - version: 19.0.0 - resolution: "@dashevo/dashd-rpc@npm:19.0.0" +"@dashevo/dashd-rpc@npm:^19.1.0": + version: 19.1.0 + resolution: "@dashevo/dashd-rpc@npm:19.1.0" dependencies: async: "npm:^3.2.4" bluebird: "npm:^3.7.2" - checksum: 10/2eab84af3e9e654601b6bdf02b670352e4a6aec5ee0cdb3b4d0fd81655ff9b4792dbec0fd02cdc72dc54b1867103f53e17264cf5b966a4c51f2d691088d783d1 + checksum: 10/5d3ebf1f0b1a5547946ca090aa98ad18ca291c811bc40ff9d8e532d0291ea7b1592423e49ed7946da06bb344ebee8065712a6c0be38c6c27e3407588c78367e0 languageName: node linkType: hard @@ -7342,7 +7342,7 @@ __metadata: "@dashevo/bls": "npm:~1.2.9" "@dashevo/dapi-client": "workspace:*" "@dashevo/dashcore-lib": "npm:~0.22.0" - "@dashevo/dashd-rpc": "npm:^19.0.0" + "@dashevo/dashd-rpc": "npm:^19.1.0" "@dashevo/docker-compose": "npm:^0.24.4" "@dashevo/wallet-lib": "workspace:*" "@dashevo/withdrawals-contract": "workspace:*"