Open
Labels
bugSomething isn't workingSomething isn't workingeffort: MMedium effort — a few daysMedium effort — a few dayspriority: highHigh priority — address soonHigh priority — address soon
Description
Context
dashpay/dash#7181 re-gates the service, platformP2PPort, and platformHTTPPort fields behind -deprecatedrpc=service in Core RPC output. These fields will no longer be present by default in protx diff, protx listdiff, and related RPCs.
This change ships with Dash Core v24.
The upstream dependency fix is tracked in dashpay/rust-dashcore#517 — DMNState.service must become Option<SocketAddr>.
What breaks in Platform
rs-drive-abci
update_state_masternode_list(v0) readsdmn_state_diff.service,dmn_state_diff.platform_p2p_port, anddmn_state_diff.platform_http_portfrom the parsedprotx diffresponse. The diff fields are already optional and won't crash, butDMNState(used foraddedMNsin the full list) will fail deserialization becauseserviceis non-optional in rust-dashcore.- Once rust-dashcore is fixed, all code reading
DMNState.serviceneeds to handleNone.
rs-sdk-trusted-context-provider
- Parses
platformHTTPPortasOption<u16>from masternode entries — already optional, won't crash, but will silently lose the port data when the field is absent.
Required actions
- Bump rust-dashcore dependency after dashpay/rust-dashcore#517 is resolved
- Handle
DMNState.servicebecomingOptionin rs-drive-abci masternode list parsing - Decide whether Platform nodes should run Core with
-deprecatedrpc=serviceas a stopgap, or fully migrate to using the newaddressesfield - Audit any other code paths that assume
service/platformHTTPPort/platformP2PPortare always present in Core RPC responses
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingeffort: MMedium effort — a few daysMedium effort — a few dayspriority: highHigh priority — address soonHigh priority — address soon
Activity
hilawe commentedon Sep 27, 2026
Platform's Drive rejects the Dash Core v24 masternode list format for shared masternodes and for
masternodes at the ExtAddr ProTx version. I am reporting it because once v24 is active,
registering a shared masternode is an ordinary action open to anyone, and every Drive node reads
the same masternode list. The
service-field part of this is already public in#3227. The owner and payout part below is not mentioned there or in any issue I
found.
Versions checked:
v24.0.0-rc.1(tag).v4.1.1, rs-drive-abci, which pins dashpay/rust-dashcore at70d4bf8e36057c58e02d56769a6e9760f701dd06.masteranddev(dev at8354de94, 2026-09-27) carry the sameDMNStatedefinition.
The mismatch:
src/evo/core_write.cpp:154-196(CDeterministicMNState::ToJson, used byprotx listdiff):a shared masternode is written with
sharesand withoutownerAddressorpayoutAddress. Anon-shared state at
ProTxVersion::ExtAddror later is written withpayoutsinstead ofpayoutAddress.rpc-json/src/lib.rs,DMNState:owner_addressandpayout_addressarerequired fields with no default.
-deprecatedrpc=servicerestoresserviceonly. Nothing restores the owner or payout fields.What has been demonstrated, offline only:
dashcore-rpc-jsoncrate parses a realprotx listdiffresponse taken from av23.1.8 testnet node.
writes it. An ExtAddr state fails with missing
payoutAddress. A shared state fails with missingownerAddress, and still fails with missingpayoutAddressonceownerAddressis restored.serviceis present in every case, so the known issue is not the cause. Controls with thefields restored parse.
rpc/core.rs,retry!retries only transportand warm-up errors). It propagates through
update_state_masternode_list_v0(line 103),update_masternode_list_v0,update_core_info_v0andrun_block_proposal_v0, and bothprepare_proposal.rsandprocess_proposal.rsreturn it to the Application Blockchain Interface(ABCI) layer as a handler error rather than rejecting the proposal.
What has not been demonstrated:
source applied to a real v23.1.8 response.
confirmed. Whether a proposal that does not advance the Core chain-locked height avoids the list
update was not checked either.
master,devand
70d4bf8e, and open pull requests in dashpay/platform and dashpay/rust-dashcore searched on2026-09-27. rust-dashcore#517 (the
servicefix) is closed, but its change chore(release): update version to 0.22.16 #523 was reverted bytest(drive): synchronizeMasternodeIdentitiesFactory #586.
The reproduction is attached
cn152-repro.zip
as
cn152-repro.zip(21 KB). It holds a Cargo project pinned to70d4bf8e, the fixtures, the script that derives them from the real response, and the recordedrun. Its README has the one-line Docker command that reruns it.