Repository navigation
Migrate platform to the new SML structure (Core 23 nested masternode platform addresses) #3939
Description
Background
rust-dashcore#808 introduced a new Simplified Masternode List (SML) structure for Core 23 (DEPLOYMENT_V24): masternode platform endpoints move into a nested addresses object (MasternodeAddresses) that decouples the platform host/ports from the core service address, and the flat platformP2PPort / platformHTTPPort fields become deprecated (legacy_*). Only the incremental protx listdiff path is affected (full-state addedMNs still reconstructs the legacy shape).
Platform PR #3936 migrated drive-abci to this structure:
- resolved masternode platform ports through the new
platform_p2p_address()/platform_http_address()accessors (nested-first, non-zero legacy fallback) so Core 23 (ProTx v3) entries are no longer dropped from validator sets; - corrected the incremental-diff validator refresh/removal trigger;
- persisted the split platform/core host via a new versioned
MasternodeStateV1/Masternode::V1, gated to protocol v12 (adrive_abci.structs.masternodestruct-version bump) — a consensus-version-coupled change.
Decision
The temporary SML changes are being reverted from dashcore for now, so we avoid a consensus / protocol-version change at this time. The corresponding platform changes — the Core 23 port resolution and especially the MasternodeStateV1 / v12 struct-version bump — are being reverted from #3936. #3936 stays scoped to the dashcore rev bump for rust-dashcore#813 (DashPay account-index derivation path).
What needs to happen (this issue)
When dashcore re-introduces the new SML structure (permanently), migrate platform to it:
- Bump
rust-dashcoreto the rev that lands the new SML structure. - Resolve masternode platform ports via the nested
addressesaccessors (drop the flat-port assumption), keeping the Core 22 legacy fallback. - Fix the incremental-diff validator refresh/removal trigger as a superset of the validity predicate (fires on zeroed-legacy-port and
platform_node_iddeltas the port resolvers drop). - Persist the split platform/core host (
MasternodeStateV1+ a struct-version bump tied to the protocol version that activates the new SML). Note: the persisted masternode/validator-set state is local, non-consensus aux-CF state (not inapp_hash), but the struct-version bump must still ride a protocol version per convention. - Bracket IPv6 platform hosts in the reconstructed
addresses(round-trip safety — an unbracketed2001:db8::1:443is unparsable and drops the HPMN).
Reference: the reverted implementation
The full implementation is preserved in #3936's history and can be re-applied:
| Concern | Commit |
|---|---|
| Core 23 port-resolution hardening | 369f563b94 |
Split-host persistence (MasternodeStateV1, v12-gated) |
a05da4d36c |
| Validator-reconcile refactor (function of state) | 073d68c11a |
| IPv6 host bracketing (v0 + v1) | 2979a26613 |
| Design + 4-agent consensus-safety analysis | docs/CORE23_SPLIT_HOST_PERSISTENCE_SPEC.md |
References
- dashcore (original SML structure): fix(rpc-json)!: resolve Core 23 nested platform addresses (breaking field/accessor renames) rust-dashcore#808
- platform (reverted migration): chore(drive-abci): update to nested address in SML #3936
Activity
chore(deps): bump rust-dashcore to ceee4a9b40 + migrate Address::netw…