You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix: handle missing service/platformP2PPort/platformHTTPPort fields from Core RPC after dash#7181 #3227
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) reads dmn_state_diff.service, dmn_state_diff.platform_p2p_port, and dmn_state_diff.platform_http_port from the parsed protx diff response. The diff fields are already optional and won't crash, but DMNState (used for addedMNs in the full list) will fail deserialization because service is non-optional in rust-dashcore.
Once rust-dashcore is fixed, all code reading DMNState.service needs to handle None.
rs-sdk-trusted-context-provider
Parses platformHTTPPort as Option<u16> from masternode entries — already optional, won't crash, but will silently lose the port data when the field is absent.
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:
Dash Core v24.0.0-rc.1 (tag).
dashpay/platform v4.1.1, rs-drive-abci, which pins dashpay/rust-dashcore at 70d4bf8e36057c58e02d56769a6e9760f701dd06.
rust-dashcore master and dev (dev at 8354de94, 2026-09-27) carry the same DMNState
definition.
The mismatch:
Core, src/evo/core_write.cpp:154-196 (CDeterministicMNState::ToJson, used by protx listdiff):
a shared masternode is written with shares and without ownerAddress or payoutAddress. A
non-shared state at ProTxVersion::ExtAddr or later is written with payouts instead of payoutAddress.
rust-dashcore, rpc-json/src/lib.rs, DMNState: owner_address and payout_address are
required fields with no default.
-deprecatedrpc=service restores service only. Nothing restores the owner or payout fields.
What has been demonstrated, offline only:
The pinned dashcore-rpc-json crate parses a real protx listdiff response taken from a
v23.1.8 testnet node.
It refuses the same response when the added masternode's state is rewritten as rc.1's source
writes it. An ExtAddr state fails with missing payoutAddress. A shared state fails with missing ownerAddress, and still fails with missing payoutAddress once ownerAddress is restored.
service is present in every case, so the known issue is not the cause. Controls with the
fields restored parse.
In rs-drive-abci v4.1.1 the error is not retried (rpc/core.rs, retry! retries only transport
and warm-up errors). It propagates through update_state_masternode_list_v0 (line 103), update_masternode_list_v0, update_core_info_v0 and run_block_proposal_v0, and both prepare_proposal.rs and process_proposal.rs return it to the Application Blockchain Interface
(ABCI) layer as a handler error rather than rejecting the proposal.
What has not been demonstrated:
No running rc.1 node, Drive or Tenderdash was used. The v24 fixtures are derived from rc.1's
source applied to a real v23.1.8 response.
How Tenderdash handles that handler error was not read, so a network-wide halt is not
confirmed. Whether a proposal that does not advance the Core chain-locked height avoids the list
update was not checked either.
as cn152-repro.zip (21 KB). It holds a Cargo project pinned to 70d4bf8e, the fixtures, the script that derives them from the real response, and the recorded
run. Its README has the one-line Docker command that reruns it.
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.