Skip to content

feat(platform): introduce protocol version 15 - #5043

Merged
QuantumExplorer merged 1 commit into
v4.3-devfrom
feat/protocol-version-15
Sep 27, 2026
Merged

QuantumExplorer merged 1 commit into
v4.3-devfrom
feat/protocol-version-15

Conversation

@QuantumExplorer

@QuantumExplorer QuantumExplorer commented Sep 27, 2026 •

Copy link
Copy Markdown
Member

Basic explanation

What this does: Platform's rules are numbered by "protocol version". Every change to how nodes agree on the chain has to switch on at a specific version, so all nodes switch at the same block. This PR creates version 15 for the 4.3 line. Version 15 behaves exactly like version 14 for now. It exists only so the 4.3 changes have a switch to attach to.

Value: Six open 4.3 PRs need version 15. Four of them currently create it themselves, each with its own copy, so whichever merges first breaks the other three. With this PR merged first, they all build on one shared version 15 and each only adds its own change to it.

Risks: Low. Version 15 uses the same rule tables as version 14, so no behaviour changes at any block height. Once the network votes version 15 in, nodes on binaries that don't know it can no longer follow the chain. That is true of every new version, and it only matters once a release carrying it ships.

Issue being fixed or feature implemented

Protocol version 15 is the activation gate for the consensus changes planned for 4.3, and v4.3-dev does not have it yet. Four open PRs each add their own v15.rs:

  • #4706 require fee history for storage refunds
  • #4730 delta-based data contract update
  • #4648 state sync via ABCI snapshots
  • #4652 preserve composite document history

Two more, #4986 (epoch payout) and #4899 (yes/no vote poll), target version 15 but don't create it.

This follows the same pattern as the v13 (#4143) and v14 (#4267) introductions: a standalone version with no behaviour of its own.

What was done?

Three files in rs-platform-version:

  • v15.rs: PLATFORM_V15, with the same component version tables as PLATFORM_V14.
  • protocol_version.rs: registers PLATFORM_V15 in PLATFORM_VERSIONS and points LATEST_PLATFORM_VERSION at it.
  • version/mod.rs: LATEST_VERSION becomes PROTOCOL_VERSION_15. This also extends every open-ended activation range (N..=LATEST_VERSION) to cover 15, as the v13 and v14 introductions did. The ranges are checked against the running protocol version, so nothing changes for a network at 14 or below.

Before:

PlatformVersion::latest().protocol_version  // 14
PlatformVersion::get(15)                    // Err(UnknownVersionError)

After:

PlatformVersion::latest().protocol_version  // 15
PlatformVersion::get(15)                    // Ok(&PLATFORM_V15), same tables as PLATFORM_V14

rs-sdk's per-network seed (min_protocol_version) is unchanged: devnets still seed at 14 and move up to 15 through auto-detect once a devnet runs it.

For the PRs above: the mod.rs and protocol_version.rs hunks here are byte-identical to the ones in #4706 and #4730, so those merge cleanly. v15.rs will be an add/add conflict. Resolve it by keeping this file and applying your table bumps (and your doc item) to it.

How Has This Been Tested?

With v15 == v14, everything that runs at latest now runs at 15 with unchanged tables.

  • cargo test -p platform-version --all-features: 26 passed. This includes the registry-completeness check, which compares PLATFORM_VERSIONS.len() against LATEST_VERSION.
  • cargo check -p dpp -p drive -p drive-abci -p dash-sdk --tests: clean.
  • cargo test -p drive-abci --lib protocol_upgrade: 57 passed. perform_events_on_first_block_of_protocol_change needs no 14 to 15 step, since there is nothing to migrate.
  • feat(platform)!: require fee history for storage refunds and credit their recorded owners #4706 makes the same LATEST_VERSION bump on v4.3-dev, and its Rust workspace, JS, Swift and Kotlin checks are green.

Breaking Changes

Adds a protocol version. Nodes on binaries without v15 cannot follow the chain once the network votes it in. Behaviour at v15 is identical to v14 until a follow-up consumes the gate, so the title carries no !, as with the v13 and v14 introductions.

Checklist:

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have added "!" to the title and described breaking changes in the corresponding section if my code contains any
  • I have made corresponding changes to the documentation if needed
  • If I added or changed GroveDB structure, I described it in the area's structure.rs, regenerated grovedb-structure.json, and checked the structure viewer link posted on this pull request

For repository code-owners and collaborators only

  • I have assigned this pull request to a milestone

🤖 Generated with Claude Code

PR Hygiene · 2ad4cb2

  • Bots — coderabbitai not yet · thepastaclaw not yet — /skip-bots proceeds without the ones not yet reported
  • Self-review — post /self-reviewed once the bots are done
  • Within your 5 open PRs
  • Build running
  • Approvals — you own every area touched; none needed

When every box is checked the PR Hygiene check passes and this can merge.

Adds PLATFORM_V15 as a behavior-free gate for the 4.3 consensus changes,
the same pattern as the v13 and v14 introductions: identical component
tables to v14, registered in PLATFORM_VERSIONS and made the latest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@QuantumExplorer QuantumExplorer added this to the v4.3.0 milestone Sep 27, 2026
@coderabbitai

coderabbitai Bot commented Sep 27, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository: dashpay/platform/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: b945e925-c582-4af6-a08c-5b6a83364e01

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the waiting-bots Waiting for the review bots to report on this head label Sep 27, 2026

@QuantumExplorer QuantumExplorer left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved

@QuantumExplorer
QuantumExplorer merged commit e38241d into v4.3-dev Sep 27, 2026
14 of 16 checks passed
@QuantumExplorer
QuantumExplorer deleted the feat/protocol-version-15 branch September 27, 2026 08:36
@thepastaclaw

thepastaclaw commented Sep 27, 2026 •

Copy link
Copy Markdown
Collaborator

🕓 Queued for automated review — 4th in line, estimated start in ~25 min (commit 2ad4cb2)
Estimated review time once started: ~1.0 h (two-phase automated review; median of recent runs).

  • Request priority review — click to move this review to the front of the queue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

waiting-bots Waiting for the review bots to report on this head

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants