github paritytech/polkadot-sdk polkadot-stable2512-2
Polkadot stable2512-2

latest releases: polkadot-stable2603-rc2, polkadot-v1.21.2
10 hours ago

This release contains the changes from polkadot-stable2512-1 to polkadot-stable2512-2.

This is a patch release for the latest stable version: stable2512. If your nodes are already running on this stable release,
you should upgrade to this patch version to get the latest fixes.

The tag corresponding to the current patch release polkadot-stable2512-2 and matching the old pattern will be
available under polkadot-v1.21.2.

The following crates were updated to the corresponding versions:

Click to see crates list - sp-trie@42.0.1 - frame-benchmarking@45.0.3 - pallet-dap@0.2.0 - pallet-statement@0.2.0 - pallet-bags-list@44.0.1 - pallet-nomination-pools@43.0.2 - snowbridge-verification-primitives@0.7.1 - polkadot-node-core-pvf-execute-worker@24.0.1 - polkadot-node-core-pvf-prepare-worker@24.0.1 - pallet-staking-async@0.10.1 - pallet-staking-async-ah-client@0.7.2 - pallet-staking-async-rc-client@0.7.1 - pallet-session@45.1.0 - snowbridge-beacon-primitives@0.18.1 - snowbridge-pallet-ethereum-client@0.18.2 - snowbridge-pallet-outbound-queue-v2@0.7.1 - snowbridge-pallet-ethereum-client-fixtures@0.26.1 - snowbridge-pallet-inbound-queue-fixtures@0.26.1 - snowbridge-pallet-inbound-queue-v2-fixtures@0.7.1 - snowbridge-core@0.18.1 - snowbridge-outbound-queue-primitives@0.7.1 - polkadot@0.1.1 - polkadot-jemalloc-shim@0.1.1 - frame-omni-bencher@0.17.3 - xcm-emulator@0.26.0 - emulated-integration-tests-common@28.0.0 - polkadot@30.0.2 - xcm-executor-integration-tests@0.13.1 - polkadot-omni-node@0.13.2 - westend-runtime@30.2.0 - asset-hub-westend-runtime@0.42.0 - staging-xcm-executor@24.0.1 - polkadot-sdk@2512.3.3

Changelog

Changelog for Runtime Dev

ℹ️ These changes are relevant to: All of those who rely on the runtime. A parachain team that is using a pallet. A DApp that is using a pallet. These are people who care about the protocol (WASM, not the meta-protocol (client).)

[#10955]: Snowbridge: Remove unused proof fields

When verifying Ethereum-to-Polkadot transfer messages, the key field in receipt_proof is not used. Remove it as a cleanup and update the tests accordingly.

[#11055]: staking-async/ah-client: emit event when session key update from AssettHub fails on relay chain

Emit SessionKeysUpdateFailed with the operation type and dispatch error for observability so set_keys/purge_kets failures from AssetHub are observable on-chain

[#10808]: Update retester CI to check expectations

Description

This PR makes a number of changes to the retester CI job that were recommended by @athei and other people at parity.

One of our main objectives with the changes in this PR is to harden the CI and ensure that the job status that we see in Github is representative of whether we got the results that we expect or not.

With this PR, we added two versioned controlled JSON files, one for each platform that we run differential tests on, which describe the status that we expect for each one of the tests that we run.

Part of the retester CI job is to run the differential tests and ensure that the results of running tests match the expectation files we have in the repo for the platform.

In this case:

  • CI is green if the test's execution matches the expectations that we've set in the expectations JSON files.
  • CI is red if the test's execution doesn't match the expectations that we've set in the expectations JSON files.

The CI job for retester no longer posts a comment with the status of all of the tests.

If the expectations do not match, then the new expectations file is uploaded to the CI job you would be required to update the expectation file to match.

[#11069]: frame-omni-bencher: enable jemalloc-allocator

Fix huge benchmark regression for storage-heavy extrinsics, enabling jemalloc-allocator via polkadot-jemalloc-shim for omni-bencher, marked as optional in the scope of PR #10590.
Revert also the dummy write/read workaround at the end of commit_db() introduced by #10947.

[#11028]: Add DecodeWithMemTracking derive to CompactProof

Description

Add DecodeWithMemTracking derive to CompactProof in substrate/primitives/trie/src/storage_proof.rs.

StorageProof already derived DecodeWithMemTracking but CompactProof in the same file was missed.

Integration

No integration changes required for downstream projects. CompactProof now implements DecodeWithMemTracking, which is a strictly additive trait implementation. Existing code using CompactProof will continue to work as before.

Review Notes

Single-line change adding DecodeWithMemTracking to the derive macro list on CompactProof:

-#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode, TypeInfo)]
+#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode, DecodeWithMemTracking, TypeInfo)]
 pub struct CompactProof {
     pub encoded_nodes: Vec<Vec<u8>>,
 }

CompactProof only contains Vec<Vec<u8>>, which already implements DecodeWithMemTracking, so the derive works without any manual implementation.

[#10957]: pallet-dap: mark funds as inactive and expect buffer account to be pre-funded

In pallet-dap, mark funds in the issuance buffer as inactive so they do not participate in governance.
In production, the buffer account must be pre-funded (e.g., via genesis allocation or transfer) before the pallet receives any funds.
Removed the InitBufferAccount migration since the buffer account is now expected to be pre-funded externally.
For delegated staking, redirect slashes to DAP for Westend AssetHub.
Removed DAP dependency from main staking-async crate, keep it only for test runtimes.

[#11031]: xcm-emulator: fix emulated integration tests for non-6s parachains

After AuraDigestProvider was introduced, emulated integration tests for parachains with slot_duration != relay_slot_duration (e.g. 12s Polkadot/Kusama chains) panic because FixedVelocityConsensusHook derives a parachain slot that doesn't match CurrentSlot.

Fix by advancing the relay block number by slot_duration / RELAY_CHAIN_SLOT_DURATION_MILLIS per parachain block (instead of always +1), and computing the aura digest slot inline using both durations. This removes the DigestProvider associated type from the Parachain trait and the AuraDigestProvider struct — the emulator now handles the digest automatically.

Downstream users must remove DigestProvider: AuraDigestProvider, from their decl_test_parachains! invocations.

[#10980]: Add StakingOperator proxy type to Westend AssetHub

Introduces StakingOperator proxy type that allows validator operational tasks (validate, chill, kick) and session key management (set_keys, purge_keys) without access to fund management operations.

This enables pure proxy stashes to delegate validator operations: now that pallet_staking_async_rc_client provides set_keys/purge_keys on AssetHub, pure proxies can fully utilize StakingOperator.

[#11114]: Force the linker not to drop jemalloc shim on Linux

Force the linker to keep the polkadot_jemalloc_shim crate and its #[global_allocator] in all binaries that depend on it. Without it, the linker might drop it since it is seen as a dependency with no referenced symbols. The issue happens only on a subset of combination of rust version and linker (e.g. on CI with Ubuntu 24.04, rust 1.88.0 + gcc/ld strips the jemalloc crate from the binary but not rust 1.92.0, and also rust 1.88.0 + clang/mold works fine).

[#11050]: staking-aync: remove stale prune_era_total_stake

Leftover from #10810 backport. The function was replaced by prune_era_single_entry_cleanups in #10502.

[#10880]: Remove failing assertion related to VoterList count mismatch

Updated bags-list so that on_insert queues items into PendingRebag instead of failing, and removed the invariant that required VoterList's count to equal the combined number of Nominators and Validators. This is safe while bags-list is locked. After unlocking, on_idle drains PendingRebag, and the counts converge back to consistency over time.

[#10793]: Snowbridge: Fix fork version slot selection for sync committee signature verification

Fixes fork version selection for sync committee signature verification to use signature_slot - 1 per the Ethereum Altair light-client spec. This prevents valid light client updates from being rejected at fork activation boundaries.

[#10666]: staking-async: allow session keys handling on AssetHub

Added session keys handling on AssetHub for staking-async:

  • Validators can now call set_keys and purge_keys on AssetHub, which forwards the request to the RelayChain via XCM.
  • Session keys are validated on AssetHub before forwarding. Only validated keys are sent to RC (no proof), as RC trusts AH's validation.
  • Proof of ownership is not yet supported since the related change has not been backported to stable2512.
  • Staking proxies can call set_keys and purge_keys on behalf of validators. The ProxyType::Staking filter on runtime has been updated to include these calls.
  • Validators are still allowed to call set_keys and purge_keys via relay-chain pallet-session's extrinsics. This option will be deprecated in the future.
  • No key deposit is required on AssetHub.
  • XCM delivery fees are charged from user's liquid balance before sending messages.
  • Workflow change: unlike the current flow for new validators on RC (bond -> set_keys -> validate), users on Asset Hub MUST call bond and validate BEFORE
    calling set_keys. Attempting to set keys before declaring intent to validate will fail with NotValidator.

[#10947]: benchmarking: fix DB read/write counts

PR #10802 added reset_read_write_count() at the end of commit_db() to prevent warmup operations from appearing in benchmarking results. However, commit_db is called twice: one on on_before_start() closure before benchmark, and one after benchmark execution after benchmark.
This PR whitelists warmup key so that it doesn't appear in the read/write count.
We also regenerate staking-async and pallet-conviction-voting benchmarks (testing both v1 and v2)

[#10986]: [Pool] Use active era for withdrawals

Standardising using active era in pools and staking. Current Era should only be used for election logic

[#10771]: Snowbridge: Describe the token location with the length field included to avoid collisions

For GeneralKey, two XCM junctions that differ only in length can currently produce the same description bytes, and therefore the same TokenId. To avoid such collisions, this PR includes the length field in the describe function.
We do have several PNAs registered that could be affected by this change. However, these tokens are not currently in use, there have been no transfers and no tokens minted so far. As a result, simply re-registering these tokens should be sufficient, without requiring a runtime storage migration.

Changelog for Node Operator

ℹ️ These changes are relevant to: Those who don't write any code and only run code.

[#10709]: Introduce a "jemalloc-shim" crate

This crate basically serves as a hack to properly enable jemalloc on Linux and disable it on all other OSes by default.

Rust compiler versions

This release was built and tested against the following versions of rustc.
Other versions may work.

  • Rust Stable: 1.88.0

Docker images

The docker images for the polkadot node binary and the polkadot-parachain binary can be found at Docker hub (will be available a few minutes after the release has been published):

You may also pull it with:

docker pull parity/polkadot:stable2512-2

or

docker pull parity/polkadot-parachain:stable2512-2

Don't miss a new polkadot-sdk release

NewReleases is sending notifications on new releases.