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

latest release: polkadot-v1.24.2
one hour ago

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

ℹ️ Please note: this is a patch release for the latest stable version stable2606. If your nodes are already running on this stable release, you should upgrade to this patch version to get the latest fixes.

Once published, polkadot-stable2606-2 will also be tagged as polkadot-v1.24.2; the node version for this release is v1.24.2.
The following crates were updated to the corresponding versions:

Crates list
  • frame-support@48.1.0
  • pallet-assets@53.0.0
  • pallet-assets-holder@0.13.0
  • pallet-assets-freezer@0.18.0
  • pallet-assets-precompiles@0.11.1
  • pallet-nft-fractionalization@34.0.0
  • cumulus-pallet-parachain-system@0.30.0
  • pallet-xcm-bridge-hub-router@0.28.0
  • xcm-simulator@30.0.0
  • cumulus-pallet-aura-ext@0.30.0
  • cumulus-pallet-solo-to-para@0.30.0
  • frame-storage-access-test-runtime@0.11.0
  • pallet-contracts-mock-network@29.0.0
  • sp-runtime-interface-proc-macro@21.0.1
  • staging-xcm@24.1.0
  • pallet-accumulate-and-forward@0.4.1
  • pallet-broker@0.29.0
  • pallet-psm@0.5.1
  • staging-xcm-executor@28.0.1
  • staging-xcm-builder@29.0.1
  • pallet-xcm@29.1.0
  • pallet-xcm-precompiles@0.9.1
  • polkadot-runtime-parachains@29.0.0
  • sp-blockchain@46.0.1
  • sc-client-api@47.0.1
  • sc-network-types@0.23.1
  • sc-consensus@0.58.0
  • sc-network@0.59.1
  • sc-chain-spec@52.0.0
  • sc-consensus-epochs@0.58.0
  • sc-consensus-pow@0.58.0
  • sc-consensus-slots@0.58.0
  • sc-mixnet@0.29.0
  • sc-network-light@0.58.0
  • sc-network-sync@0.58.0
  • sc-offchain@54.0.0
  • mmr-gadget@54.0.0
  • sc-consensus-aura@0.59.0
  • sc-consensus-babe@0.59.0
  • sc-informant@0.58.0
  • sc-network-gossip@0.59.0
  • sc-network-statement@0.42.0
  • sc-network-transactions@0.58.0
  • sc-rpc-api@0.59.0
  • staging-chain-spec-builder@20.0.0
  • pallet-staking-async@0.15.0
  • sc-consensus-babe-rpc@0.60.0
  • sc-consensus-beefy@38.0.0
  • sc-consensus-grandpa@0.44.0
  • sc-consensus-manual-seal@0.60.0
  • pallet-vesting-precompiles@0.5.1
  • sc-rpc-server@32.1.0
  • sc-statement-store@31.0.0
  • substrate-frame-rpc-support@55.0.0
  • substrate-frame-rpc-system@54.0.0
  • substrate-rpc-client@0.59.0
  • substrate-state-trie-migration-rpc@53.0.0
  • frame-remote-externalities@0.61.0
  • pallet-nomination-pools-benchmarking@48.0.0
  • sc-rpc@55.0.0
  • sc-sync-state-rpc@0.59.0
  • pallet-election-provider-multi-phase@50.0.0
  • pallet-state-trie-migration@56.0.0
  • sc-consensus-beefy-rpc@39.0.0
  • sc-consensus-grandpa-rpc@0.45.0
  • sc-rpc-spec-v2@0.60.0
  • polkadot-rpc@35.0.0
  • polkadot-runtime-common@31.0.0
  • sc-service@0.61.0
  • xcm-simulator-example@31.0.0
  • cumulus-pallet-xcmp-queue@0.32.0
  • cumulus-primitives-utility@0.32.0
  • pallet-staking-async-rc-runtime-constants@0.13.0
  • rococo-runtime-constants@32.0.0
  • sc-authority-discovery@0.60.0
  • sc-cli@0.62.0
  • westend-runtime-constants@32.0.0
  • cumulus-client-cli@0.33.0
  • parachains-common@36.0.0
  • polkadot-node-metrics@33.0.0
  • polkadot-node-network-protocol@33.0.0
  • rococo-runtime@36.0.0
  • staging-node-inspect@0.38.0
  • subkey@35.0.0
  • testnet-parachains-constants@25.0.0
  • westend-runtime@37.0.0
  • assets-common@0.37.0
  • bp-bridge-hub-cumulus@0.36.0
  • collectives-westend-runtime@34.0.0
  • coretime-westend-runtime@0.30.0
  • glutton-westend-runtime@32.0.0
  • parachains-runtimes-test-utils@37.0.0
  • people-westend-runtime@0.30.0
  • polkadot-node-subsystem-types@33.0.0
  • polkadot-voter-bags@37.0.0
  • xcm-emulator@0.35.0
  • asset-test-utils@39.0.0
  • bp-asset-hub-rococo@0.32.0
  • bp-asset-hub-westend@0.31.0
  • bp-bridge-hub-rococo@0.36.0
  • bp-bridge-hub-westend@0.32.0
  • penpal-runtime@0.45.0
  • polkadot-overseer@33.0.0
  • snowbridge-inbound-queue-primitives@0.18.0
  • snowbridge-runtime-test-common@0.31.0
  • asset-hub-rococo-runtime@0.41.0
  • asset-hub-westend-runtime@0.54.0
  • bridge-hub-test-utils@0.38.0
  • cumulus-relay-chain-interface@0.33.0
  • emulated-integration-tests-common@38.0.0
  • polkadot-node-subsystem@33.0.0
  • snowbridge-pallet-inbound-queue-fixtures@0.37.0
  • snowbridge-pallet-inbound-queue-v2-fixtures@0.18.0
  • cumulus-client-bootnodes@0.12.0
  • cumulus-client-network@0.33.0
  • cumulus-client-parachain-inherent@0.27.0
  • cumulus-relay-chain-rpc-interface@0.33.0
  • cumulus-relay-chain-streams@0.11.0
  • polkadot-network-bridge@33.0.0
  • polkadot-node-core-chain-api@33.0.0
  • polkadot-node-core-parachains-inherent@33.0.0
  • polkadot-node-core-pvf@33.0.0
  • polkadot-node-core-runtime-api@33.0.0
  • polkadot-node-subsystem-util@33.0.0
  • snowbridge-pallet-inbound-queue@0.29.0
  • snowbridge-pallet-inbound-queue-v2@0.18.0
  • bridge-hub-rococo-runtime@0.36.0
  • bridge-hub-westend-runtime@0.33.0
  • cumulus-client-pov-recovery@0.33.0
  • frame-benchmarking-cli@60.0.0
  • polkadot-approval-distribution@33.0.0
  • polkadot-availability-bitfield-distribution@33.0.0
  • polkadot-availability-distribution@33.0.0
  • polkadot-availability-recovery@33.0.0
  • polkadot-collator-protocol@33.0.0
  • polkadot-dispute-distribution@33.0.0
  • polkadot-gossip-support@33.0.0
  • polkadot-node-collation-generation@33.0.0
  • polkadot-node-core-approval-voting@33.0.0
  • polkadot-node-core-av-store@33.0.0
  • polkadot-node-core-backing@33.0.0
  • polkadot-node-core-bitfield-signing@33.0.0
  • polkadot-node-core-candidate-validation@33.0.0
  • polkadot-node-core-chain-selection@33.0.0
  • polkadot-node-core-dispute-coordinator@33.0.0
  • polkadot-node-core-prospective-parachains@32.0.0
  • polkadot-node-core-provisioner@33.0.0
  • polkadot-node-core-pvf-checker@33.0.0
  • polkadot-statement-distribution@33.0.0
  • cumulus-client-consensus-common@0.33.0
  • polkadot-node-core-approval-voting-parallel@0.16.0
  • cumulus-client-collator@0.33.0
  • cumulus-client-consensus-relay-chain@0.33.0
  • polkadot-service@38.0.0
  • cumulus-client-consensus-aura@0.33.0
  • cumulus-relay-chain-minimal-node@0.38.0
  • polkadot-cli@38.0.0
  • cumulus-relay-chain-inprocess-interface@0.38.0
  • polkadot-jemalloc-shim@0.8.0
  • cumulus-client-service@0.38.0
  • frame-omni-bencher@0.24.0
  • polkadot@37.0.0
  • polkadot-omni-node-lib@0.20.0
  • polkadot-omni-node@0.20.0
  • polkadot-sdk@2606.4.0
  • pallet-revive-eth-rpc@0.21.0
  • pallet-revive-uapi@0.15.1
  • pallet-revive-fixtures@0.15.1
  • substrate-wasm-builder@34.0.1
  • sc-hop@0.2.1
  • pallet-revive@0.19.1

ℹ️ Due to the decommissioning of the Debian bullseye build, starting from the next stable release (stable2609), all published binaries will be built on the Debian bookworm distribution. More instructions to follow on the forum — please keep an eye out.

📦 The complete changelog with full descriptions is attached to this release as CHANGELOG.md, and in machine-readable form as changelog.json.

💥 Breaking Changes

7 changes are breaking according to Rust SemVer (each bumps the major version of at least one crate). Details in the 💥-marked entries below.

  • XCM: #12378 pallet-assets: allow force_create to set an arbitrary asset id when auto-increment is enabled (pallet-assets)
  • Staking & Elections: #11979 Scale validator self-stake incentive by era-points performance (pallet-staking-async)
  • Coretime: #12750 [pallet-broker] Prevent auto-renewal from renewing another task's workload (pallet-broker)
  • Assets: #12245 pallet-psm: multi-instance, permissionless Peg Stability Modules (pallet-psm, asset-hub-westend-runtime)
  • Node: #12315 feat(webrtc): add experimental WebRTC transport to litep2p backend (sc-cli, sc-network, sc-network-types)
  • Node: #12870 network: Enable WebRTC by default on full nodes (sc-cli, sc-network, sc-network-types)
  • FRAME & Runtime: #13153 pallet-accumulate-and-forward: measure the transfer period from the last forward (emulated-integration-tests-common)

Changelog

XCM

🛠️ Runtime Dev

💥 #12378: pallet-assets: allow force_create to set an arbitrary asset id when auto-increment is enabled

force_create no longer requires the asset id to equal NextAssetId: a ForceOrigin may create an asset with any id not currently in use, and the id is then marked as allocated so it can never later collide. Asset id allocation is now configured explicitly via the new Config::AssetIdAllocator (AutoIncAssetId for auto-incrementing ids, () for none), replacing the implicit NextAssetId-is-Some plus AutoIncAssetId callback mechanism. Only the force_create call is relaxed; fungibles::Create::create is not gated on ForceOrigin and still requires the id the allocator dictates. …

Breaking: pallet-assets
Other crates: asset-hub-rococo-runtime (minor), asset-hub-westend-runtime (minor), penpal-runtime (patch), pallet-contracts-mock-network (minor), pallet-asset-conversion (none), pallet-asset-conversion-tx-payment (none) and 7 more

#12832: pallet-xcm: weight asset claiming and precompile XCM input by their real size

Fixes weights and benchmark worst cases for the claim_assets extrinsic, the ClaimAsset and AliasOrigin instructions, and the pallet-revive XCM precompile. Each was benchmarked with an input far cheaper than one a caller can actually supply, so all four under-charged.

What this needs from you: …

Crates: pallet-xcm (minor), staging-xcm (minor), staging-xcm-builder (patch), staging-xcm-executor (patch), polkadot-runtime-parachains (patch), pallet-xcm-precompiles (patch) and 13 more

Smart Contracts (Revive)

🛠️ Runtime Dev

#12281: [pallet-revive] Implement originIsRoot precompile method

We have the callerIsRoot API but this doesn't work with nested calls. originIsRoot fills this gap.

Crates: pallet-revive-fixtures (minor), pallet-revive (minor), pallet-revive-uapi (minor), asset-hub-westend-runtime (minor)

#12726: Probe cargo for -Z json-target-spec support instead of guessing from the version

Both PolkaVM build paths compile against a .json target spec produced by polkavm-linker and have to decide whether to pass cargo -Z json-target-spec: newer cargo requires the flag, older cargo rejects it as unknown.

Both decided by comparing a version against 1.95: the fixture builder against the rustc version, wasm-builder against the cargo version. Neither works. The flag landed partway through the 1.95 cycle, so a nightly from early in that cycle reports 1.95 from both binaries while its cargo does not know the flag yet, and the fixture build fails with error: unknown -Z flag specified: json-target-spec. …

Crates: pallet-revive-fixtures (patch), substrate-wasm-builder (patch)

#13092: Re-export WeightInfo from the assets and vesting precompile crates

pallet-assets-precompiles and pallet-vesting-precompiles now re-export their WeightInfo trait at the crate root like every other pallet, so weight files generated by frame-omni-bencher's default template (<crate>::WeightInfo) compile without hand edits. Asset Hub Westend now uses generated weight files for both.

Crates: pallet-assets-precompiles (minor), pallet-vesting-precompiles (minor), asset-hub-westend-runtime (patch)

Staking & Elections

🛠️ Runtime Dev

💥 #11979: Scale validator self-stake incentive by era-points performance

Validator self-stake incentive payout is now distributed proportionally across elected validators using the weighted-points share share_i = (w_i · ep_i) / Σ_j(w_j · ep_j), where w_j is each validator's per-era incentive weight and ep_j is their era points.

The denominator is maintained incrementally in ErasSumWeightedPoints as session reports credit era points, avoiding a full validator iteration at payout time. Validators with zero era points or no incentive weight receive nothing, and non-zero weighted performers share the era budget subject to normal rounding. …

Breaking: pallet-staking-async
Other crates: asset-hub-westend-runtime (patch)

Coretime

👤 Runtime User

💥 #12750: [pallet-broker] Prevent auto-renewal from renewing another task's workload

enable_auto_renew previously renewed whatever renewable workload was found on the given core index without checking that it belongs to the given task. Since a core index can be assigned a different workload each bulk period, a task could end up paying to renew a completely unrelated task's workload, and the stored auto-renewal record would keep charging it every sale. …

Breaking: pallet-broker
Other crates: coretime-westend-runtime (patch)

Assets

🛠️ Runtime Dev

💥 #12245: pallet-psm: multi-instance, permissionless Peg Stability Modules

Reworks pallet-psm from a single, governance-seeded Peg Stability Module into a multi-instance design where many PSMs coexist, each created permissionlessly and managed by its own admins. …

Breaking: pallet-psm, asset-hub-westend-runtime
Other crates: sc-consensus-beefy-rpc (patch)

#12811: pallet-psm: report the real instance footprint to the creation Consideration

create_psm previously established the creation Consideration with a placeholder footprint of one item and zero bytes, under-reporting what the call actually writes. A new Pallet::psm_creation_footprint helper now reports the Psm and PsmAdmin entries (two items, max-encoded-len sized) and is used by the extrinsic and the benchmarks.

Crates: pallet-psm (minor)

#13059: Add is_sufficient to the fungibles::Inspect trait

Adds an is_sufficient method to the fungibles::Inspect trait, reporting whether an asset is sufficient. The method has a default implementation returning false, so the change is non-breaking; however, implementations which track sufficiency should override it. It is implemented for pallet-assets (reading the asset's is_sufficient flag, and forwarded by the pallet-assets-freezer and pallet-assets-holder wrappers) and forwarded through fungibles::UnionOf and the right branch of fungible::UnionOf. The left (fungible) branch of fungible::UnionOf reports false, as the fungible trait family carries no sufficiency information.

Crates: frame-support (minor), pallet-assets (minor), pallet-assets-freezer (minor), pallet-assets-holder (minor)

#13062: pallet-psm: use recorded decimals when minting

Keeps PSM mint conversions and external-asset registration tied to the decimal snapshots captured when the PSM and external asset are registered, matching redemption behavior. Changes to live asset metadata no longer stop minting or alter the debt conversion rate.

Crates: pallet-psm (patch)

Parachains (protocol)

🛠️ Runtime Dev

#12844: paras: skip undersized parachain heads in sorted_para_heads

Paras::sorted_para_heads() now skips parachain heads shorter than MIN_PARA_HEAD_LEN (64 bytes). Encoded parachain headers are well above this bound, so no real parachain is affected.

Crates: polkadot-runtime-parachains (minor)

Node

🔧 Node Dev

💥 #12315: feat(webrtc): add experimental WebRTC transport to litep2p backend

Description

Add webrtc-direct support to the litep2p backend

  • webrtc-direct support gated behind a new --experimental-webrtc CLI flag.
  • WebRTC listen_addr entries are skipped with a warning unless enabled.
  • Persist the DTLS certificate to <net_config_path>/webrtc_certificate so the node keeps a stable identity across restarts. Fall back to an ephemeral cert otherwise.
  • update network type to support WebRTCDirect
Integration

No behavioral change unless --experimental-webrtc is explicitly enabled. …

Breaking: sc-cli, sc-network, sc-network-types

💥 #12870: network: Enable WebRTC by default on full nodes

Also for Node Operator

Accept WebRTC connections on the same UDP --port as used for TCP/WS connections. Enabled by default on full nodes, can be force-enabled on validators & collators with --force-enable-webrtc, or disabled by passing an explicit --listen-addr without WebRTC addresses. Only supported with litep2p network backend. …

Breaking: sc-cli, sc-network, sc-network-types
Other crates: sc-service (patch), polkadot-omni-node-lib (patch)

#12582: collator-protocol-revamp: additional metrics

Improves the observability of the collator protocol revamp by adding/improving some metrics.

Crates: polkadot-collator-protocol (minor)

#12693: sc-network: derive the WebRTC DTLS certificate from the node key

Derive the WebRTC DTLS certificate deterministically from the node's Ed25519 secret key instead of persisting it to a separate file on disk.

Crates: sc-network (minor)

#13098: security: Bump litep2p to 0.15.2 to fix panic in WebRTC

Also for Node Operator

litep2p 0.15.2 fixes a panic in the WebRTC transport that could be triggered remotely by sending oversized UDP datagrams to a WebRTC endpoint.

Only nodes with the WebRTC transport enabled are affected. Operators of such nodes are advised to upgrade.

See the litep2p v0.15.2 release notes for details.

Crates: sc-network (patch), sc-network-types (patch)

🖥️ Node Operator

#12662: sc-hop: add Prometheus metrics

Adds Prometheus metrics to sc-hop: …

Crates: sc-hop (minor), polkadot-omni-node-lib (patch)

#12812: beefy: lower peer reputation for bad responses

Bad BEEFY justifications are refused and also the sending peer penalized.

Crates: sc-consensus-beefy (patch)

#13045: sc-rpc-server: bound the cardinality of the RPC metrics method label

The substrate_rpc_calls_* metrics used the requested method name as the method label without restricting it to registered methods, so the label could take an unbounded number of values. The label is now bounded to the registered method set; any other name is recorded as unknown, keeping the series count finite.

RpcMetrics::with_known_methods sets the allowlist and the RPC server wires it at start; a metrics instance without it keeps the previous behaviour.

Crates: sc-rpc-server (minor)

FRAME & Runtime

🛠️ Runtime Dev

💥 #13153: pallet-accumulate-and-forward: measure the transfer period from the last forward

on_idle only forwarded when the block number of the configured BlockNumberProvider was an exact multiple of TransferPeriod. A chain that does not observe every block of its provider, e.g. a parachain using RelaychainDataProvider, can miss those blocks indefinitely.

The pallet now records the block of the last forwarding attempt in the new LastForwardBlock storage item and forwards once TransferPeriod blocks have elapsed since then, whatever the block cadence. No migration is needed: an empty LastForwardBlock means "never forwarded", so after upgrade the first block with enough funds forwards immediately.

Breaking: emulated-integration-tests-common
Other crates: pallet-accumulate-and-forward (minor)

#12440: Fix for rust-lld regression

Adapts the #[runtime_interface] macro to a rust-lld regression observed since Rust 1.96.0, which requires the Wasm module that external functions are imported from to be specified explicitly. The generated extern "C" blocks now carry #[link(wasm_import_module = "env")] when compiling for wasm32.

Crates: sp-runtime-interface-proc-macro (patch)

Rust compiler versions

The crates and node binaries in this release were built and tested with the following rustc toolchain; other versions may work.

  • Rust Stable: 1.93.0

Docker images

The docker images for the binaries of this release can be found on Docker Hub (available a few minutes after the release has been published), all tagged with stable2606-2:

You may also pull them with:

docker pull parity/polkadot:stable2606-2
docker pull parity/polkadot-parachain:stable2606-2
docker pull parity/polkadot-omni-node:stable2606-2
docker pull parity/chain-spec-builder:stable2606-2
docker pull parity/eth-rpc:stable2606-2

Don't miss a new polkadot-sdk release

NewReleases is sending notifications on new releases.