Repository navigation
chore: merge v5.0-dev into v5.1-dev - #5432
Claudius-Maginificent wants to merge 28 commits into
Conversation
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ary (#5397) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…to the integration binary (#5415) 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>
…it (#5424) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…rks in getblockchaininfo (#5422)
…legacy asset lock decoder (#5423)
Merge origin/v5.0-dev (bcbf05c) into v5.1-dev (c61f46e). Conflicts resolved: - Cargo.toml: GroveDB from v5.0-dev (6.1.0, fc7028d8); rust-dashcore pinned to dev afbe5515, which carries the legacy asset lock decoder (#1167) that dpp's instant asset lock proofs need (#5423), plus everything v5.0-dev's edc4d430 backported. - Cargo.lock: v5.1-dev's lockfile plus `cargo update -p dashcore -p grovedb`; no crates.io package changes. - CHANGELOG.md: kept the [Unreleased] section above the rc.1/rc.2 entries, and updated its rust-dashcore pin note. Semantic fixes for code v5.0-dev added against APIs that v5.1-dev changed: - drive-abci wasm vector examples and wasm-sdk cache tests: secp256k1 0.33 (from_secret_bytes, context-free from_secret_key) and dpp::bls instead of the removed dpp::bls_signatures re-export. The quorum public keys come out byte-identical. - wasm-sdk fixtures regenerated with the examples for the latest protocol version (15), as their README prescribes. 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 |
|
✅ Final review complete — no blockers (commit 1becbcb) |
|
📖 Book Preview built successfully. Download the preview from the workflow artifacts. Updated at 2026-10-15T09:50:24.463Z |
rust-dashcore#1156 inserted three `TransactionPayload` variants before `ClassicalWithNonStandardVersionTypeBytesPayloadType` and `RawPayloadType`, shifting their `serde`/`bincode` variant index. Wallet rows stored with either payload then failed to decode, failing the whole wallet load; platform-wallet-storage's `persisted_core_transactions` test caught it. Pin every rust-dashcore crate to 12e4bd4c (dev afbe5515 plus the fix that moves the new variants after `RawPayloadType`). Cargo.lock changes only the rust-dashcore git packages. TODO: repin to rust-dashcore `dev` once the fix is merged there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rotocol 15 #5411's single-entry characterization tests pin GroveDB roots taken at `PlatformVersion::latest()`, which is protocol 14 on v5.0-dev and 15 on v5.1-dev. The roots differ between those versions, so after the forward merge the settled hashes (which include roots) and the single-entry root no longer matched. Making protocol 14 the latest again reproduced every pinned value, so the protocol version is the only cause. At protocol 15 the validation hashes, execution results, fees and nonces are unchanged, and only the roots differ. This commit repins the root and the nine settled hashes at protocol 15 and notes that these values follow the latest version. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
rust-dashcore#1175, the payload serde variant-order fix pinned before, is merged into dev. Move every rust-dashcore crate to dev at 626c91d1, which also brings #1169 (blocks are checked against their header merkle root and rejected on a repeated txid) and #1168 (ChainLocks verified only with a verified quorum). Only the rust-dashcore revision changes in Cargo.lock. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSi8cX229kW2fmLxKW6ir4
|
Waiting for bot review — coderabbitai not yet · thepastaclaw not yet. Wait for the missing reviews, or a writer can post |
|
/skip-bots |
|
/self-reviewed |
|
Ready for review — |
thepastaclaw
left a comment
There was a problem hiding this comment.
Final validation — Phase 1 + Phase 2
Verified the supplied findings against head 1becbcb and retained one non-blocking cache-hydration performance issue; no blocking defects were substantiated. Validation was static only, with no local builds or tests run. The supplied CI snapshot reports successful Rust workspace, WASM/JS, Swift, and Docker checks, while the latest platform test suite and both browser shards remained in progress.
🟡 1 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: ffi-engineer); reviewer 4: gpt-6.1-sol (agent: phase2-reviewer, role: platform-versioning); reviewer 5: gpt-6.1-sol (agent: phase2-reviewer, role: rust-quality); reviewer 6: gpt-6.1-sol (agent: phase2-reviewer, role: security-auditor); reviewer 7: gpt-6-astra (agent: phase2-reviewer, role: general); reviewer 8: gpt-6-astra (agent: phase2-reviewer, role: architecture-layering); reviewer 9: gpt-6-astra (agent: phase2-reviewer, role: ffi-engineer); reviewer 10: gpt-6-astra (agent: phase2-reviewer, role: platform-versioning); reviewer 11: gpt-6-astra (agent: phase2-reviewer, role: rust-quality); reviewer 12: gpt-6-astra (agent: phase2-reviewer, role: security-auditor); reviewer 13: muse-spark-1.3-contributor (agent: phase1-reviewer, role: general); reviewer 14: muse-spark-1.3-contributor (agent: phase1-reviewer, role: rust-quality); final verifier: gpt-6.1-sol (agent: sol-verifier, role: final-verifier)
- Triage:
criticalbygpt-6.1-sol(effort low) — The large, cross-cutting diff changes consensus-sensitive batch nullifier validation in accepted_token_pool_nullifiers.rs and funds distribution in add_epoch_pool_to_proposers_payout_operations/v1/mod.rs, meeting both the intricacy and critical-surface criteria. - 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(antigravity below 15% reserve: weekly 14% left, 5h 100% left),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— ffi-engineer (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-astra— general (completed, effort xhigh); agentphase2-reviewer,gpt-6-astra— architecture-layering (completed, effort xhigh); agentphase2-reviewer,gpt-6-astra— ffi-engineer (completed, effort xhigh); agentphase2-reviewer,gpt-6-astra— platform-versioning (completed, effort xhigh); agentphase2-reviewer,gpt-6-astra— rust-quality (completed, effort xhigh); agentphase2-reviewer,gpt-6-astra— security-auditor (completed, effort xhigh); agentphase2-reviewer - Model comparison: every Phase-2 reviewer also ran on
gpt-6-astra; the verifier weighed both sets without knowing which model wrote which
🤖 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/wasm-sdk/src/sdk.rs`:
- [SUGGESTION] packages/wasm-sdk/src/sdk.rs:525-526: Avoid reloading the entire persisted cache for each hydrated contract
Hydration now calls `cache_contract_in_context` for every contract returned by `load_all`. That helper always invokes `store_if_newer`, which serializes the retained contract, synchronously retrieves and parses the entire localStorage JSON map, and decodes the matching stored contract before checking its version. Even with an initially empty in-memory cache, every loaded contract takes this redundant path and returns without changing persistence. For N cached contracts, the complete map is parsed N+1 times instead of once, introducing quadratic parsing and allocation work for similarly sized entries during synchronous SDK construction. The 100-entry storage cap bounds this overhead but does not eliminate it. Keep the monotonic in-memory insertion, but skip persistence when the retained entry is the snapshot just loaded; reconcile newer in-memory entries against a single loaded persistence map.
Basic explanation
What this does: Brings
v5.1-devup to date withv5.0-devby merging the 19 PRs that landed onv5.0-devsince the last forward merge (#5404, at 7f7ed87), and moves the rust-dashcore pin todevat626c91d1.Value:
v5.1-devgets the 5.0.0-rc.1/rc.2 fixes: Core v24 support (getblockchaininfowithout softforks, #5422), unknown Core payload layouts kept decodable (#5403), instant asset lock proofs decoded with rust-dashcore's legacy asset lock decoder (#5423), GroveDB 6.1.0 (#5414) and the proposer payout fix (#5399). The new pin includes that legacy decoder, so #5150 can later move to the rust-dashcore#1112 head (d89545c2, which isafbe5515plus the #1112 commits) without changing how asset lock proofs are decoded.Risks: Moderate.
90359ed5to626c91d1. This brings in rust-dashcore feat(drive): graceful shutdown #1154, fix(sdk): missing and invalid types #1156, feat(drive): ensure that chain lock height valid #1157, chore: difference between #1158 and #1123 #1159, feat: remove bad masternodes from validator sets #1160, fix: double process proposal from Tenderdash restart #1165, chore: revert to github-hosted runners #1166, ci: s3 cache #1167, fix(sdk): identifier expects buffer with "in" operator in where query #1168, feat(dashmate): prebuild services dependencies #1169, feat(dashmate): rename other to DMT #1170 and feat(dpp): better json schema error messages for data contracts #1175 (details below). Asset lock proof decoding and the Core RPC code matchv5.0-dev.TransactionPayloadvariants beforeClassicalWithNonStandardVersionTypeBytesPayloadTypeandRawPayloadType. That enum'sserdeencoding is index-based, so wallet rows stored with either of those payloads stopped decoding.platform-wallet-storage'spersisted_core_transactionstest caught it atafbe5515. rust-dashcore#1175, merged intodev, moves the new variants afterRawPayloadTypeand restores the stored indices; the pin includes it.v5.0-devadded was written against APIs thatv5.1-devhas since changed. Those spots needed small fixes, listed below.Issue being fixed or feature implemented
v5.1-devwas 19 PRs behindv5.0-dev. Its rust-dashcore pin (90359ed5) also lacksTransaction::deserialize_with_legacy_asset_lock_framing, which #5423 depends on.What was done?
Merged
origin/v5.0-dev(bcbf05c) intoorigin/v5.1-dev(c61f46e). Incoming PRs:Resolved by hand:
Cargo.toml: GroveDB comes fromv5.0-dev(fc7028d8, 6.1.0, two commits ahead ofv5.1-dev's5cb0962a). Every rust-dashcore crate is pinned todevat626c91d1(see below).Cargo.lock: started fromv5.1-dev's lockfile and rancargo update -p dashcore -p grovedb. Only the GroveDB and rust-dashcore git packages and the workspace versions changed; no crates.io package moved.CHANGELOG.md: kept the[Unreleased]section on top, followed by the rc.1 and rc.2 entries. Its rust-dashcore pin note now names626c91d1, rust-dashcore#1167 and feat(dpp): better json schema error messages for data contracts #1175.Merge fixes for
v5.0-devcode written against APIs thatv5.1-devchanged (part of the merge commit):rs-drive-abci/examples/generate_wasm_{contract_cache,state_transition_wait}_vectors.rsandwasm-sdk/src/state_transitions/contract/cache_tests.rs: moved to secp256k1 0.33 (chore(platform)!: update rust-dashcore (incl secp256k1 0.33) #5307):SecretKey::from_secret_bytesand the context-freePublicKey::from_secret_key. Moved from the removeddpp::bls_signaturesre-export todpp::bls(refactor: share rust-dashcore BLS backend through dpp::bls #5320). The quorum keys derived from the same seeds are byte-identical to the committed ones.rs-drive-abci/.../token/shielded/nullifier_batch_guard.rs(fix(drive-abci): guard accepted token pool nullifiers within batches #5411): its characterization tests pin GroveDB roots computed atPlatformVersion::latest(), which is protocol 15 onv5.1-dev. A separate commit repins the single-entry root and the nine settled hashes. With protocol 14 as latest, the old values reproduce exactly. At 15, validation hashes, fees and refunds are byte-identical; only the roots differ.wasm-sdk/tests/fixtures/{contract-cache,state-transition-waits}/signed-responses.json: the client tests require fixtures recorded at the latest protocol version, which is 15 onv5.1-dev. Both fixtures were regenerated with the examples, following the fixture README. Two runs produced byte-identical output. Only protocol versions, GroveDB proofs, state roots and quorum signatures changed.rust-dashcore pin:
90359ed5→626c91d1v5.0-devpinsedc4d430, a branch off rust-dashcoredevthat backports 16 commits. Each one is ondevat626c91d1:a5ae6375+edc4d430→ ci: s3 cache #1167 + feat(dashmate): rename other to DMT #1170): the code is identical and only the doc comments differ.getblockchaininfo/getdeploymentinfo(379f0574→ fix: double process proposal from Tenderdash restart #1165).7608a012,ca43f079,56feb85b,538522bc,40268cc0):rpc-jsonondevholds the same content. Againstedc4d430, it differs only in the hex-conservative migration and extra tests.What
626c91d1adds on top of90359ed5and how it touches Platform:UnknownPayloadTypebecomesRawPayloadType, and transaction types 10–12 now decode into typed payloads.v5.0-devcode already usesRawPayloadType. This is where the variant-order regression above comes from.dashcore::consensus::Params.Block::check_merkle_rootalso rejects a block with a repeated txid.platform-wallet's asset lock block lookup uses it; honest blocks are unaffected.TransactionPayloadvariant (see Risks).Asset lock proof decoding and the Core RPC code are identical to
v5.0-dev.instant_asset_lock_proof.rs,rpc/core.rsanddash_core_client.rshave no diff againstorigin/v5.0-dev.PLATFORM_V15still points at the same sub-version tables asPLATFORM_V14after the merge (only the protocol version number differs), so protocol version 15 picks up #5399 and #5414.Files changed on both branches and merged automatically (worth a look in review):
.github/workflows/tests-rs-workspace.ymlDockerfilepackages/rs-sdk-trusted-context-provider/src/provider.rspackages/rs-sdk/src/sdk.rspackages/wasm-sdk/src/context_provider.rspackages/wasm-sdk/src/state_transitions/broadcast.rspackages/js-evo-sdk/README.mdand thepackage.jsonversion bumpsOther effects on
v5.1-dev:5.0.0-beta.6to5.0.0-rc.2, and the changelog gains the rc.1 and rc.2 entries.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 the merged tree:
cargo check --workspace --all-targets --locked: passes.cargo clippy -p drive-abci -p wasm-sdk --all-targets --locked -- -D warnings: passes.cargo fmt --all -- --check: passes.cargo nextest run -p dpp -E 'test(asset_lock)': 157 passed. This includes the instant asset lock proof tests from fix(platform)!: keep unknown Core payload layouts decodable #5403 and refactor(dpp): decode instant asset lock proofs with rust-dashcore's legacy asset lock decoder #5423, such astest_raw_instant_lock_proof_decodes_every_transaction_as_the_byte_level_decoder_did.cargo nextest run -p drive-abci -E 'test(/rpc::core/) | test(/identity_create::/) | test(/asset_lock/)': 199 passed.cargo nextest run -p wasm-sdk --lib: 189 passed, with the regenerated fixtures.cargo nextest run -p drive-abci -E 'test(/nullifier_batch_guard::/)': 13 passed with the repinned roots.cargo nextest run -p platform-wallet -p platform-wallet-storage: 2226/2226 pass on626c91d1, includingpersisted_core_transactions(it fails onafbe5515, before feat(dpp): better json schema error messages for data contracts #1175).cargo check --workspace --all-targets --lockedpasses on that pin.PLATFORM_V14andPLATFORM_V15: they are identical apart from the protocol version number.Known limitations
v5.0-dev(fix(wasm-sdk): cache verified contract updates without regressing versions #5391): wasm-sdk contract-cache hydration persists every loaded contract throughstore_if_newer, so the stored localStorage map is parsed once per cached contract at SDK construction (bounded by the 100-entry cap). A fix belongs in a follow-up againstv5.0-dev.Breaking Changes
The merge adds none of its own. It carries the already-reviewed breaking changes #5403, #5414 and #5399 into
v5.1-dev. The rust-dashcore pin moves todevat626c91d1.Checklist:
structure.rs, regeneratedgrovedb-structure.json, and checked the structure viewer link posted on this pull requestFor repository code-owners and collaborators only
🤖 Co-authored by Claudius the Magnificent AI Agent
🤖 Generated with Claude Code
https://claude.ai/code/session_01PSi8cX229kW2fmLxKW6ir4
PR Hygiene ·
1becbcbgithub(.github/workflows/tests-rs-workspace.yml) — approved by shumkovCHANGELOG.md,Cargo.lock,Cargo.tomland 26 more) — approved by shumkovdashmate(packages/dashmate/configs/defaults/getBaseConfigFactory.js,packages/dashmate/configs/getConfigFileMigrationsFactory.js,packages/dashmate/package.jsonand 1 more) — approved by shumkovsystem-contracts(packages/dashpay-contract/package.json,packages/document-history-contract/package.json,packages/dpns-contract/package.jsonand 5 more) — approved by shumkovjs-wasm-sdk(packages/js-dash-sdk/package.json,packages/js-evo-sdk/README.md,packages/js-evo-sdk/package.jsonand 24 more) — approved by shumkovdpp(packages/rs-dpp/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs) — approved by shumkovrs-drive-abci(packages/rs-drive-abci/examples/generate_wasm_contract_cache_vectors.rs,packages/rs-drive-abci/examples/generate_wasm_state_transition_wait_vectors.rs,packages/rs-drive-abci/src/execution/platform_events/fee_pool_outwards_distribution/add_epoch_pool_to_proposers_payout_operations/v1/mod.rsand 7 more) — approved by shumkovrs-drive(packages/rs-drive/src/util/batch/drive_op_batch/drive_methods/apply_drive_operations/v1/mod.rs,packages/rs-drive/src/util/batch/drive_op_batch/system.rs) — approved by shumkovwallet-storage(packages/rs-platform-wallet-storage/SECRETS.md,packages/rs-platform-wallet-storage/src/secrets/mod.rs,packages/rs-platform-wallet-storage/src/secrets/secret.rsand 157 more) — lklimekrust-sdk(packages/rs-sdk/src/core/dash_core_client.rs,packages/rs-sdk/src/mock/sdk.rs,packages/rs-sdk/src/platform/query.rsand 5 more) — approved by shumkovswift-sdk(packages/swift-sdk/schema-releases.json) — 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.