Repository navigation
chore: merge v5.0-dev into v5.1-dev (5.0.0-rc.5 to rc.7) - #5527
Conversation
…ainst the page Drive proves (#5485) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…5482) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…5483) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ay order (#5490) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…code failure (#4993) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: QuantumExplorer <quantum@dash.org> Co-authored-by: Lil Claw <pasta+claw@dashboost.org>
…#5413) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#5409) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ith a version 2 base at protocol version 13 (#5502) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…h and rust_decimal for RUSTSEC advisories (#5499) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ing pre-activation tests (#5508) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…V coinbase shows V24 (#5497) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Brings 5.0.0-rc.5, rc.6 and rc.7 (v5.0-dev 79693ec) into v5.1-dev. Conflict resolutions: - Cargo.toml: GroveDB moves to 6.1.1 (2128ea18, #5499; fast-forward of fc7028d8). rust-dashcore stays on dev aca02026; v5.0-dev's v0.45.0 pin (d631aaca) is not taken. - Cargo.lock: v5.1-dev's lockfile, re-resolved for GroveDB 6.1.1, with #5499's RUSTSEC bumps replayed via cargo update --precise (h2 0.4.20, rustls 0.23.46, rustls-webpki 0.103.15, quinn-proto 0.11.19, crossbeam-epoch 0.9.21, rust_decimal 1.43.0, anyhow 1.0.104, event-listener 5.4.2, chacha20 0.10.2, spin 0.9.9). - CHANGELOG.md: [Unreleased] on top, then the rc.7, rc.6 and rc.5 entries. - rs-dpp serialization/mod.rs: keeps v5.1's dashcore module gate and takes #5498's serde-conversion gate for the json module. - rs-sdk dpns_usernames, put_document: #5409's ResponseMetadata import with v5.1's dpp::secp256k1 rand imports. - platform-wallet masternode/update_service.rs (#5408, #5497): v5.0's file ported to dpp::bls. rust-dashcore dev does not expose the coinbase of applied masternode list diffs, so the coinbase source is optional: with none, V24 is read from the list alone (any version-3 entry), as #5408 did, instead of refusing every legacy evonode update. - platform-wallet spv/runtime.rs: masternode_list_entries reads through DashSpvClient::latest_masternode_list (the engine is crate-private on dev); latest_coinbase is not carried over. - platform-wallet platform_wallet_traits.rs: both branches forwarded unrecorded_spend_heights and note_chain_lock_height; one forward each is kept, and the tests of both branches. - platform-wallet identity/network/profile.rs: v5.1's rs-sdk profile path (#5470). #5409's proven-balance persistence for profile writes follows in a separate commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…carries #5409 (v5.0-dev) made the platform wallet keep the owner balance a document write's proof carries, including DashPay profile create and update, which on v5.0-dev go through SdkWriter::put_document. On v5.1-dev #5470 moved profile create and update into rs-sdk (Sdk::create_profile / Sdk::update_profile over the document builders), which return only the document, so after the forward merge profile writes dropped the balance. This carries #5409's behaviour onto that path. rs-sdk (additive): - Sdk::create_profile_with_owner_balance_and_metadata and Sdk::update_profile_with_owner_balance_and_metadata return the confirmed document, the owner's balance after the write (None for a proof made before protocol version 14) and the verified response metadata. create_profile and update_profile delegate to them and keep their signatures. - The write is signed by the same builders, then broadcast and verified by #5409's wait_for_document_and_owner_balance_with_metadata, which requires an execution proof unless the document type is indexOnly (profile is not), as document_create/document_replace did. rs-platform-wallet: - create_profile_with_external_signer and update_profile_with_external_signer call the new variants. record_own_profile_write (the former cache_own_profile) keeps the proven balance through persist_proven_owner_balance, then caches the profile. Book: the put-operations chapter names the two calls. Test: should_keep_the_proven_owner_balance_of_a_profile_write. With the persist_proven_owner_balance call removed from record_own_profile_write it fails (left: 2818262560, right: 2743797100); with it, it passes. The network half (sign, broadcast, proof) is not unit-testable without a proof-producing mock; it reuses #5409's tested document_and_owner_balance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- platform-wallet update_service.rs: the update_service_placeholder docs described a coinbase source as always present. They now separate the list-only case (no coinbase source, how v5.1-dev runs on rust-dashcore dev) from the case with a source, say what a version-2 evonode payload refused after V24 costs (refused, relaying peers discouraged, inputs reserved until the reservation expires), and drop the statement about the pinned dash-spv. Doc-only. - rs-sdk dashpay/profile.rs: put_profile_write looked the profile document type up after the builder had signed, so after the nonce was reserved. The DashPay profile type is not indexOnly, so the write always needs an execution proof; the lookup is gone and `true` is passed with that reason. No behaviour change. - platform-wallet platform_wallet_traits.rs: keeps v5.0-dev's note on why the WalletManager-driven delegation tests go through the manager. - platform-wallet balance.rs: the new profile-write test uses expect instead of unwrap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
|
Waiting for bot review — coderabbitai not yet · thepastaclaw ✓. Wait for the missing reviews, or a writer can post |
|
✅ Final review complete — no blockers (commit b60452c) · triage: critical |
|
📖 Book Preview built successfully. Download the preview from the workflow artifacts. Updated at 2026-10-21T20:06:55.795Z |
thepastaclaw
left a comment
There was a problem hiding this comment.
Final validation — Phase 1 + Phase 2
No confirmed blocking defect remains after checking the supplied findings against the reviewed source. Four nonblocking suggestions remain concerning upstream transaction-construction ownership, effective query limits, and historical-consensus compatibility evidence. This was a static review only; current CI has no failed code checks, but Rust workspace tests, Docker image builds, and the JavaScript build remain pending.
🟡 4 suggestion(s)
Review provenance
Source: reviewer 1: gpt-6.1-sol (agent: phase2-reviewer, role: general); reviewer 2: gpt-6.1-sol (agent: phase2-reviewer, role: architecture-layering); reviewer 3: gpt-6.1-sol (agent: phase2-reviewer, role: platform-versioning); reviewer 4: gpt-6.1-sol (agent: phase2-reviewer, role: rust-quality); reviewer 5: muse-spark-1.3-contributor (agent: phase1-reviewer, role: general); reviewer 6: gpt-6.1-sol (agent: phase2-reviewer, role: security-auditor); reviewer 7: muse-spark-1.3-contributor (agent: phase1-reviewer, role: rust-quality); reviewer 8: gpt-6.1-sol (agent: phase2-reviewer, role: tenderdash-consensus-security); final verifier: gpt-6.1-sol (agent: sol-verifier, role: final-verifier)
- Triage:
criticalbygpt-6.1-sol(effort low) — This is a large, cross-cutting merge whose diff changes critical surfaces including consensus transition activation and ChainLock handling, wallet funds persistence and transaction construction, proof verification, and peer-facing Core RPC behavior. - Phase 1 reviewers:
muse-spark-1.3-contributor— general (completed, effort xhigh); agentphase1-reviewer,muse-spark-1.3-contributor— rust-quality (completed, effort xhigh); agentphase1-reviewer - Phase 1 model:
muse-spark-1.3-contributor— not quota-gated; passed overgemini-3.8-flash-high(lane failed),glm-5.3-flash(not used above high effort; tier asks max) - Single stage: Phase 1 and Phase 2 reviewed this head side by side, with no blocker gate between them (triage tier)
- Fresh verifier:
gpt-6.1-sol— final-verifier; agentsol-verifier - Phase 2 reviewers:
gpt-6.1-sol— general (completed, effort xhigh); agentphase2-reviewer,gpt-6.1-sol— architecture-layering (completed, effort xhigh); agentphase2-reviewer,gpt-6.1-sol— platform-versioning (completed, effort xhigh); agentphase2-reviewer,gpt-6.1-sol— rust-quality (completed, effort xhigh); agentphase2-reviewer,gpt-6.1-sol— security-auditor (completed, effort xhigh); agentphase2-reviewer,gpt-6.1-sol— tenderdash-consensus-security (completed, effort xhigh); agentphase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.
In `packages/rs-platform-wallet/src/masternode/update_service.rs`:
- [SUGGESTION] packages/rs-platform-wallet/src/masternode/update_service.rs:472-485: Put version-aware ProUpServTx construction in key-wallet
This branch selects the Core payload version and constructs its version-specific address representation. The book's ownership table assigns Core transaction construction to rust-dashcore/key-wallet, while rs-platform-wallet orchestrates. At the pinned upstream revision, ProviderUpdateServicePayload::new still constructs version 2, and TransactionBuilder provides generic payload/finalizer hooks rather than this reusable preparation logic. Extract a version-aware ProUpServTx preparation API upstream, with Platform supplying the live entry, activation observation, payout choice, and signer, or link an issue tracking that extraction. rust-dashcore#1202 covers coinbase observation, not construction ownership; #1146 concerns payload representation rather than this preparation API.
In `packages/rs-drive-proof-verifier/src/verify.rs`:
- [SUGGESTION] packages/rs-drive-proof-verifier/src/verify.rs:35-38: Resolve the effective page size at the query API boundary
Trying DEFAULT_QUERY_LIMIT and then an unbounded query cannot recover every server-configured page size. With default_query_limit = 200 and 201 matching groups, query_group_infos_v0 proves 200 entries: verification as 100 rejects surplus proof data, while unbounded verification requires the omitted tail. The new test matrix covers a larger default only when all stored results fit inside that page. Both attempts remain cryptographically strict, so this is incomplete query support, not proof acceptance without verification. Resolve the limit at the query API boundary—by making the requested limit explicit or returning the effective limit—and pass it to Drive verification. Add a full nonstandard-page case; if deferred, link a tracking issue.
In `packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/decode_raw_state_transitions/v0/mod.rs`:
- [SUGGESTION] packages/rs-drive-abci/src/execution/platform_events/state_transition_processing/decode_raw_state_transitions/v0/mod.rs:111-116: Document the consensus-inert exception for the shipped v0 decoder
This edits the decoder generation selected by protocol versions 1–13. The consensus-inert argument is supported by the callers: FailedToDecode becomes InternalError, InvalidEncoding becomes UnpaidConsensusError, prepare_proposal removes either without returning its transaction result, and process_proposal rejects either through failed_count + invalid_unpaid_count. Neither decoding outcome applies state or charges fees. Record that invariant beside this branch and in the book-required "In-place changes to shipped generations" PR section. The current comment explains the improved client error, and the PR identifies the affected versions, but neither records why historical consensus is unchanged. This is a documentation request, not evidence that a dispatcher bump is needed.
In `Cargo.lock`:
- [SUGGESTION] Cargo.lock:6700-6703: Add explicit cross-version evidence for consensus decimal arithmetic
The rust_decimal 1.42.1 → 1.43.0 update affects the dependency used by historical epoch calculations and storage-fee distribution/refund arithmetic, without changing their protocol-version selections. The existing exact-value tests and reported source comparison are useful evidence, but do not directly compare both dependency versions. Add a reproducible compatibility corpus covering epoch boundaries, large credit amounts, and refund rounding under both versions. No numeric divergence has been established, so this is a nonblocking validation suggestion, not a request to version an otherwise equivalent dependency update. If a comparison does expose a mismatch, preserve historical results and activate the changed arithmetic only through an unreleased protocol version.
Basic explanation
What this does: Brings
v5.1-devup to date withv5.0-devat79693ec1f3: the 5.0.0-rc.5, rc.6 and rc.7 releases, 20 PRs in all. The last forward merge was #5481, whose merge basef282f29999is this merge's base too.Value:
v5.1-devgets the rc.5–rc.7 fixes:Risks: Low to moderate.
v5.1-dev'sdevpin (aca02026).v5.0-devmoved to v0.45.0 (d631aaca) in chore(platform)!: update rust-dashcore to v0.45.0 #5517; that pin is not taken.latest_coinbase(), which only theintegration/v5.0-core-v24branch has. Onv5.1-devthe evonode payload version is decided from the masternode list alone, as fix(platform-wallet): build version-3 ProUpServTx for Core v24 masternodes #5408 did, until rust-dashcore#1202 lands ondev. See "Temporary divergence from v5.0-dev" below.v5.1-dev's profile path (feat(sdk): move DashPay profile create, update and fetch into rs-sdk #5470). A separate commit in this PR carries it over.Issue being fixed or feature implemented
v5.1-devwas 20 PRs behindv5.0-dev.What was done?
Merged
origin/v5.0-dev(79693ec1f3) intoorigin/v5.1-dev(3a731bfcf6) as a merge commit (1c0dc74ef5), followed by two commits.Incoming PRs:
Pins and
Cargo.lockv5.1-devkeepsdevataca02026. Nothing fromintegration/v5.0-core-v24is carried. Every rust-dashcore PR that v0.45.0 backported (test(drive): verify proof signatures in strategy tests #1147, fix(dashmate): download certificate retry logic #1187, fix(dashmate): status command fails with errors #1059, fix(drive): core RPC retry all errors #1140, chore(release): update changelog and bump version to 0.24.0-dev.31 #1014, fix(dashmate): waitForQuorumConnections deadline of 300000 exceeded #1015, feat: platform signable on enums #1009, feat(dapi): update coinbase payload accroding to changes in Core v20 #1035, fix(dashmate): set permissions for dashcore log file #1037, feat(sdk): retry policy for newly created platform entities #1143) is an ancestor ofaca02026. So is refactor: update dapi proto file to use either proofs or result #1148, the ChainLock hash order behind fix(drive-abci): send ChainLocks to Core with the block hash in display order #5490.unrecorded_spend_heights/note_chain_lock_heightwere already forwarded onv5.1-dev(see below).fc7028d8(6.1.0) →2128ea18(6.1.1), as onv5.0-dev. 6.1.1 is two commits ahead of 6.1.0. The only source change is thegrovedbgdebugger's zip extraction, so noGroveVersion, storage or proof behaviour changes.Cargo.lock:v5.1-dev's lockfile, re-resolved for GroveDB 6.1.1. chore: bump GroveDB to 6.1.1, h2, rustls, quinn-proto, crossbeam-epoch and rust_decimal for RUSTSEC advisories #5499's crate bumps were then replayed withcargo update -p <crate> --precise <v5.0-dev's version>: h2 0.4.20, rustls 0.23.46 (with aws-lc-rs 1.18.2, aws-lc-sys 0.46.0, rustls-webpki 0.103.15), quinn-proto 0.11.19, crossbeam-epoch 0.9.21, rust_decimal 1.43.0, anyhow 1.0.104, event-listener 5.4.2, chacha20 0.10.2 and spin 0.9.9. The removals follow from these (rkyv 0.7, zip 6 / zip-extensions and their dependencies). Every non-rust-dashcore package now has the versionv5.0-devhas, except cratesv5.1-devhad moved itself. All builds and tests ran with--locked.5.0.0-rc.4→5.0.0-rc.7, following chore: merge v5.0-dev into v5.1-dev #5481 (rc.3 → rc.4).Conflicts resolved by hand
CHANGELOG.md: kept[Unreleased]on top, followed by the rc.7, rc.6 and rc.5 entries, as in chore: merge v5.0-dev into v5.1-dev #5481.Cargo.toml: GroveDB fromv5.0-dev, rust-dashcore fromv5.1-dev.rs-dpp/src/serialization/mod.rs: keptv5.1-dev'sdashcoremodule gate (serde-conversionorbls-signatures) and took fix(dpp): compile without default features #5498'sserde-conversiongate for thejsonmodule.json-conversionenablesserde-conversion, so nothing that compiled before stops compiling.rs-sdkdpns_usernames/mod.rs,transition/put_document.rs: feat(sdk): persist the owner balance a document write's proof carries #5409'sResponseMetadataimport next tov5.1-dev'sdpp::secp256k1rand imports (refactor!: migrate Platform cryptography to rust-dashcore dev (aca02026) #5514).rs-platform-wallet/src/masternode/update_service.rs(fix(platform-wallet): build version-3 ProUpServTx for Core v24 masternodes #5408, fix(platform-wallet): build version-3 evonode ProUpServTx once the SPV coinbase shows V24 #5497):v5.0-dev's file, ported todpp::bls, sincev5.1-devno longer ships blsful (refactor: share rust-dashcore BLS backend through dpp::bls #5320, refactor!: migrate Platform cryptography to rust-dashcore dev (aca02026) #5514). It signs the sameSpecialTransactionPayloadHashwith the same basic-scheme DST and writes the same 96-byte compressed signature. The coinbase source is optional; see the next section.rs-platform-wallet/src/spv/runtime.rs:masternode_list_entries(fix(platform-wallet): build version-3 ProUpServTx for Core v24 masternodes #5408) reads throughDashSpvClient::latest_masternode_list(), asv5.1-dev'smasternode_list_summariesdoes, because the masternode list engine is crate-private ondev.SpvRuntime::latest_coinbase(fix(platform-wallet): build version-3 evonode ProUpServTx once the SPV coinbase shows V24 #5497) is not carried.rs-platform-wallet/src/wallet/platform_wallet_traits.rs: both branches forwardunrecorded_spend_heightsandnote_chain_lock_heightto the innerManagedWalletInfo(v5.1-devsince chore(platform)!: update rust-dashcore to dev 280b3f2c #5493,v5.0-devsince chore(platform)!: update rust-dashcore to v0.45.0 #5517). The merge keeps one forward of each;note_chain_lock_heightis forwarded, not left to the no-op default. I checkedWalletInfoInterfaceataca02026: every defaulted method thatManagedWalletInfooverrides is forwarded. The tests of both branches are kept: two fromv5.1-dev(direct noted-height pruning, truncation) and two fromv5.0-dev(pruning and block re-application throughWalletManager).rs-platform-wallet/src/wallet/identity/network/profile.rs:v5.1-dev's side (profile create and update throughSdk::create_profile/Sdk::update_profile, feat(sdk): move DashPay profile create, update and fetch into rs-sdk #5470). feat(sdk): persist the owner balance a document write's proof carries #5409's part for this file follows in084c7e5c25; see "Semantic conflicts resolved".Temporary divergence from v5.0-dev: V24 detection for evonode ProUpServTx
On
v5.0-dev, #5497 builds an evonode's ProUpServTx at version 3 once the list shows V24 (any version-3 entry) or the SPV client's latest masternode-list-diff coinbase is version 4 or later. With no coinbase yet, it refuses with a retryable error.rust-dashcore
devataca02026has nolatest_coinbase(); it arrives with rust-dashcore#1202 / #1200, both still open. Onv5.1-devthe coinbase source ofupdate_service_placeholderis therefore optional, and production passes none:With no source, the list's view is final. That is #5408's rc.5 behaviour: a legacy evonode gets version 2 until some entry is version 3. The coinbase signal is not faked. The build also does not fail closed: that would refuse every legacy evonode update, including all of them before V24. The cost is #5497's original bug, on
v5.1-devonly: right after V24 activates, until a version-3 provider transaction is mined, a legacy evonode's version-2 payload is refused by Core. It is not active on testnet or mainnet yet. All of #5497's coinbase logic and tests are kept (the tests passSome(..)). A new test,should_keep_the_lists_view_of_v24_without_a_coinbase_source, pins the no-source path.What to change when rust-dashcore#1202 is on the pinned
dev:v5.0-dev'sSpvRuntime::latest_coinbase()(spv/runtime.rs), readingDashSpvClient::latest_coinbase()through the client, asmasternode_list_entriesreadslatest_masternode_list().prepare_masternode_update_service(masternode/update_service.rs), replaceNone::<std::future::Ready<_>>withSome(spv.latest_coinbase()).Optionaroundupdate_service_placeholder'slatest_coinbaseparameter, and with it theSome(..)in its tests.Semantic conflicts resolved
feat(sdk): persist the owner balance a document write's proof carries #5409 × feat(sdk): move DashPay profile create, update and fetch into rs-sdk #5470, DashPay profile writes (
084c7e5c25). feat(sdk): persist the owner balance a document write's proof carries #5409 persists the owner balance a profile create or update proves, throughSdkWriter::put_document. Onv5.1-dev, feat(sdk): move DashPay profile create, update and fetch into rs-sdk #5470 moved those writes into rs-sdk'sSdk::create_profile/Sdk::update_profile, which return only the document. Taking either side alone would have dropped feat(sdk): persist the owner balance a document write's proof carries #5409 for profiles onv5.1-dev. The follow-up commit:Sdk::create_profile_with_owner_balance_and_metadataandSdk::update_profile_with_owner_balance_and_metadata. They are additive:create_profile/update_profiledelegate to them and keep their signatures. They sign with the same document builders, then broadcast and verify through feat(sdk): persist the owner balance a document write's proof carries #5409'swait_for_document_and_owner_balance_with_metadata, with an execution proof required (profileis not indexOnly).create_profile_with_external_signer/update_profile_with_external_signerto them.record_own_profile_writepersists the proven balance, then caches the profile, in the order feat(sdk): persist the owner balance a document write's proof carries #5409 used.should_keep_the_proven_owner_balance_of_a_profile_write: it fails with the persist call removed (left: 2818262560, right: 2743797100) and passes with it. The network half (sign, broadcast, proof) cannot be unit-tested without a proof-producing mock; it reuses feat(sdk): persist the owner balance a document write's proof carries #5409's testeddocument_and_owner_balance.With this, the proven balance is kept on every path feat(sdk): persist the owner balance a document write's proof carries #5409 covers: DPNS registration,
create_document_with_signer, contactInfo publish, and profile create and update.b60452c9f9folds in review: theupdate_service_placeholderdocs now describe the no-source case separately and accurately, andput_profile_writeno longer looks up the document type after the builder has reserved the nonce.Protocol versions
rs-platform-version.PLATFORM_V15differs fromPLATFORM_V14only inDRIVE_ABCI_METHOD_VERSIONS_V11andDRIVE_ABCI_VALIDATION_VERSIONS_V11. Both are built from their V10 tables, so every incoming change selected through a V10 table reaches PV15.decode_raw_state_transitionsv0 (PV1–13). PV14 and PV15 select v1, which already had this handling and is the same on both branches.latest().Files changed on both branches and merged automatically (worth a look in review)
rs-drive-proof-verifier/src/verify.rs,rs-platform-wallet/src/masternode/list.rs,changeset/changeset.rs,wallet/identity/network/{contact_info,document,dpns,sdk_writer}.rs,rs-platform-wallet-storage/SCHEMA.md,swift-sdk/.../PlatformWalletPersistenceHandler.swift,yarn.lock,.pnp.cjsand thepackage.jsonversion bumps. Each adds exactlyv5.0-dev's lines.Please merge with a merge commit (not squash) so the
v5.0-devhistory stays shared withv5.1-dev.How Has This Been Tested?
Run locally on macOS (arm64), on the merged tree:
cargo check --workspace --all-targets --locked: passes.cargo clippy --workspace --all-targets --all-features --locked -- --no-deps -D warnings(CI's invocation): passes on084c7e5c25, and again on the final commitb60452c9f9.cargo fmt --all -- --check: passes.cargo testbecausecargo-nextestis not installed here. That is CI's full package list with--all-features --locked --lib --bins --tests --no-fail-fast -- --skip shieldand CI'sRUST_MIN_STACK=4194304 CARGO_PROFILE_DEV_DEBUG=0 CARGO_PROFILE_DEV_CODEGEN_UNITS=256. It runs the fullstrategy_testsbinary, not only the comprehensive simulation a PR run takes. Result: 20,033 passed, 0 failed, 61 ignored. Of these:dpp: 5,387 passed, 0 failed (6 ignored).drive-abcilib: 4,125 passed, 0 failed (14 ignored);strategy_tests115 passed, 0 failed (4 ignored).drive: 4,052 passed, 0 failed (6 ignored), includingshould_match_committed_grovedb_structure_json.platform-wallet: 1,365 lib tests passed, 0 failed. These include all 32update_servicetests, the fourplatform_wallet_traitstests and the new profile-balance test.platform-wallet-ffi: 423 passed;platform-wallet-storage: 435 passed;dash-sdk: 411 passed (including feat(sdk): persist the owner balance a document write's proof carries #5409'swaitabletests);rs-sdk-ffi: 373 passed. All with 0 failed.platform-wallet-storageshield-named tests (-- shield --skip wallet::shielded::, which CI's phase keeps): 7 passed, 0 failed.cargo test --tests -p dpp -p drive -p drive-abci -p dash-sdk --all-features --locked -- shield, same env): 962 passed, 0 failed (3 ignored).cargo test -p wasm-sdk --lib --locked: 189 passed, 0 failed.cargo test --workspace --all-features --locked --doc -- --test-threads=4): 146 passed, 0 failed (64 ignored).b60452c9f9: the non-shielded tests ofdash-sdk,platform-wallet,platform-wallet-ffiandrs-sdk-ffiagain, andcargo check -p wasm-sdk -p wasm-dpp2 -p wasm-drive-verify --target wasm32-unknown-unknown --locked. The four crates: 2,891 passed, 0 failed (29 ignored). The wasm32 check passes.yarn constraintsandyarn install --immutable --immutable-cache: both pass, and the tree stays clean.origin/v5.1-dev: no violations.git show --cc), by separate agents, each with one lens. None found a must-fix issue.v5.0-devchanged, 242 are byte-identical tov5.0-dev. The other 33 contain everyv5.0-devline except the planned divergences above. Nov5.1-devchange was reverted, and nov5.0-devtest is missing.Known limitations and notes
dev.rs-drive-abci/src/platform_types/epoch_info/v0/mod.rsand storage-fee distribution inrs-dpp/src/fee/epoch/distribution.rs. 1.43.0 rewrites addition, multiplication,floorand the rescale. A source review found the results identical for the operations Platform uses, and the only precision change sits behind themathsfeature, which nothing here enables. The distribution tests that pin exact values pass. chore: bump GroveDB to 6.1.1, h2, rustls, quinn-proto, crossbeam-epoch and rust_decimal for RUSTSEC advisories #5499's description says nothing in it touches consensus code. That is not quite accurate, though a divergence is unlikely. This already ships in 5.0.0-rc.6 and is not new to this merge, but a differential run of those functions under both versions would settle it.decode_raw_state_transitionsdispatcher (rs-drive-abci/.../decode_raw_state_transitions/mod.rs) still says only version 1 reports a not-active transition as a coded refusal. Since fix(drive-abci): a transition whose version is not active is not a decode failure #4993, v0 does too. This is inherited fromv5.0-devas is, so it is better fixed there.v5.0-dev's tree. Onv5.1-devthe first is not in effect yet and the second's pin is not taken.Breaking Changes
The merge adds none of its own. #5517's breaking changes (rust-dashcore v0.45.0 API) do not apply, because the pin is not taken;
v5.1-devwas already ondevwith those APIs. The follow-up commit only adds rs-sdk APIs.Checklist:
structure.rs, regeneratedgrovedb-structure.json, and checked the structure viewer link posted on this pull requestFor repository code-owners and collaborators only
🤖 Generated with Claude Code
PR Hygiene ·
b60452c/skip-botsproceeds without the ones not yet reported/self-reviewedgithub(.github/workflows/swift-sdk-freeze-pr-refresh.yml) — ktechmidasdashmate— you own itsystem-contracts— you own itjs-wasm-sdk— you own itkotlin-sdk(packages/kotlin-sdk/sdk/src/main/kotlin/org/dashfoundation/dashsdk/persistence/PlatformWalletPersistenceHandler.kt,packages/kotlin-sdk/sdk/src/main/kotlin/org/dashfoundation/dashsdk/persistence/dao/DocumentDao.kt,packages/kotlin-sdk/sdk/src/main/kotlin/org/dashfoundation/dashsdk/persistence/entities/PendingInputEntity.kt) — HashEngineeringrust-dapi(packages/rs-dapi/src/clients/core_client.rs) — QuantumExplorer or lklimekdpp— you own itrs-drive-abci— you own itrs-platform-wallet-ffi(packages/rs-platform-wallet-ffi/src/masternode_update_service.rs) — HashEngineering or ZocoLini or llbartekll or romchornyiwallet-storage(packages/rs-platform-wallet-storage/SCHEMA.md,packages/rs-platform-wallet-storage/migrations/V007__utxo_sweep_winner_height.rs,packages/rs-platform-wallet-storage/src/sqlite/schema/core_state.rsand 1 more) — lklimekrs-platform-wallet(packages/rs-platform-wallet/src/changeset/changeset.rs,packages/rs-platform-wallet/src/masternode/list.rs,packages/rs-platform-wallet/src/masternode/update_service.rsand 8 more) — HashEngineering or ZocoLini or llbartekll or romchornyirust-sdk— you own itswift-sdk(packages/swift-sdk/SCHEMA_RELEASES.md,packages/swift-sdk/Sources/SwiftDashSDK/Persistence/Models/PersistentPendingInput.swift,packages/swift-sdk/Sources/SwiftDashSDK/PlatformWallet/PlatformWalletManagerMasternodes.swiftand 3 more) — llbartekll or romchornyiWhen every merge requirement is met, the
PR Hygienecheck passes. Reviewer limits do not block merging; other required GitHub checks and protections still apply.