Releases: paritytech/polkadot-sdk
Polkadot stable2409-9
This release contains the changes from polkadot-stable2409-7
to polkadot-stable2409-9
.
ℹ️ Please note:
stable2409
and contains only patches and fixes to the crates (list below). No binary or docker images will be provided for this release.
The tag corresponding to the current patch release polkadot-stable2409-9
and matching the old pattern will be available under polkadot-v1.16.9.
The following crates were updated to the corresponding versions:
- frame-benchmarking@38.1.0
- pallet-scheduler@39.1.0
- pallet-xcm@17.0.3
- asset-hub-westend-runtime@0.26.6
- westend-runtime@18.1.0
- frame-benchmarking-cli@43.1.0
- cumulus-client-consensus-aura@0.18.2
Changelog
Changelog for Node Dev
ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.
[#8669]: cumulus-aura: Improve equivocation checks
Instead of just checking for the slot, we also take the block number and the relay parent into account (as we actually allow to build multiple blocks per slot). Then this pr also ensures that we are still able to import blocks from availability recovery. This ensures that a network doesn't get stuck on a storm of equivocations. The next step after this pull request would be to implement on chain slashing for equivocations and probably disabling of the offending author.
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).)
[#7785]: pallet scheduler: fix weight and add safety checks
Changes:
- Add runtime integrity test for scheduler pallet to ensure that lookups use sensible weights
- Check all passed storage names in the omni bencher to be known by FRAME metadata
- Trim storage names in omni bencher to fix V1 bench syntax bug
- Fix V1 bench syntax storage name sanitization for specific Rust versions
I re-ran the benchmarks with the omni-bencher modifications and it did not change the proof size. I reverted the commit afterwards to reduce the noise for reviewers.
Changelog for Runtime User
ℹ️ These changes are relevant to: Anyone using the runtime. This can be a token holder or a dev writing a front end for a chain.
[#8173]: Expose current advertised xcm version
Exposes AdvertisedXcmVersion
via a metadata constant.
Rust compiler versions
This release was built and tested against the following versions of rustc
.
Other versions may work.
- Rust Stable:
"1.81.0"
Polkadot stable2503-6
This release contains the changes from polkadot-stable2503-5
to polkadot-stable2503-6
.
ℹ️ Please note:
stable2503
and contains only patches and fixes to the crates (list below).
The tag corresponding to the current patch release polkadot-stable2503-6
and matching the old pattern will be available under polkadot-v1.18.6.
The following crates were updated to the corresponding versions:
- sc-network-types@0.15.4
- sc-network@0.49.2
- pallet-broker@0.19.2
- sc-offchain@44.0.1
- sc-cli@0.51.1
- snowbridge-inbound-queue-primitives@0.2.2
- snowbridge-outbound-queue-primitives@0.2.2
- coretime-rococo-runtime@0.15.2
- coretime-westend-runtime@0.15.2
- snowbridge-pallet-system@0.13.3
- snowbridge-test-utils@0.2.1
- snowbridge-pallet-inbound-queue@0.13.2
- snowbridge-pallet-inbound-queue-v2@0.2.2
- snowbridge-pallet-system-v2@0.2.2
- bridge-hub-westend-runtime@0.16.2
- cumulus-client-consensus-aura@0.22.1
- polkadot-service@23.1.0
- cumulus-relay-chain-minimal-node@0.23.2
- cumulus-relay-chain-inprocess-interface@0.23.1
- polkadot-omni-node-lib@0.5.1
Changelog
Changelog for Node Dev
ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.
[#8461]: Use litep2p as the default network backend
This PR makes the litep2p backend the default backend.
Litep2p is a lightweight alternative to libp2p, that is designed to be more efficient and easier to use. At the same time, litep2p brings performance improvements and reduces the CPU usage significantly.
Libp2p is the old network backend, that may still be used for compatibility reasons until the whole ecosystem is migrated to litep2p.
[#8669]: cumulus-aura: Improve equivocation checks
Instead of just checking for the slot, we also take the block number and the relay parent into account (as we actually allow to build multiple blocks per slot). Then this pr also ensures that we are still able to import blocks from availability recovery. This ensures that a network doesn't get stuck on a storm of equivocations. The next step after this pull request would be to implement on chain slashing for equivocations and probably disabling of the offending author.
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).)
[#8630]: Broker: Introduce min price and adjust renewals to lower market
pallet-broker now provides an additional AdaptPrice
implementation:
MinimumPrice
. This price adapter works exactly the same as the CenterTargetPrice
adapter, except that it can be configured with a
minimum price. If set, it will never drop the returned end_price
(nor thetarget_price
) below that minimum.
Apart from having an adapter to ensure a minimum price, the behaviour of renewals was also adjusted: Renewals are now either bumped by renewal bump or set to the end_price
of the current sale - whatever number is higher.
This ensures some market coupling of renewal prices, while still maintaining some predictability.
[#8473]: Snowbridge: Remove asset location check
Since the TokenIdOf conversion is XCM version-agnostic and we store the TokenId as the key in storage, checking whether the key exists is sufficient to verify if the token is registered.
There is no need to verify the asset location.
Changelog for Node Operator
ℹ️ These changes are relevant to: Those who don't write any code and only run code.
[#8461]: Use litep2p as the default network backend
This PR makes the litep2p backend the default backend.
Litep2p is a lightweight alternative to libp2p, that is designed to be more efficient and easier to use. At the same time, litep2p brings performance improvements and reduces the CPU usage significantly.
Libp2p is the old network backend, that may still be used for compatibility reasons until the whole ecosystem is migrated to litep2p.
[#8650]: litep2p/peerset: Reject non-reserved peers in the reserved-only mode
This PR rejects non-reserved peers in the reserved-only mode of the litep2p notification peerset.
Previously, litep2p ignored completely the reserved-only state while accepting inbound connections. However, it handled it properly during the slot allocation phase.
- the main changes are in the
report_inbound_substream
function, which now propagated aRejected
response to litep2p on the reserved-only state- in response, litep2p should never open an inbound substream after receiving the rejected response
- the state of peers is not advanced while in
Disconnected
orBackoff
states - the opening state is moved to
Cancelled
- for consistency purposes (and fuzzing purposes), the
report_substream_opened
is more robustly handling theDisconnected
state- while at it have replaced a panic with
debug_assert
and an instant reject
- while at it have replaced a panic with
Testing Done
- started 2 nodes in Kusama and Polkadot with litep2p
- added the
reserved_only_rejects_non_reserved_peers
test to ensure litep2p handles peers properly from different states
Rust compiler versions
This release was built and tested against the following versions of rustc
.
Other versions may work.
- Rust Stable:
1.84.1
Polkadot stable2503-5
This release contains the changes from polkadot-stable2503-4
to polkadot-stable2503-5
.
ℹ️ Please note:
This is a patch release for the latest stable version: stable2503
. If your nodes are already running on this version, you can consider upgrading to it to have the latest fixes at a regular cadence.
The tag corresponding to the current patch release polkadot-stable2503-5
and matching the old pattern will be available under polkadot-v1.18.5.
The following crates were updated to the corresponding versions:
- pallet-session@40.0.1
- pallet-beefy@41.1.1
- pallet-revive@0.6.1
- pallet-revive-mock-network@0.5.0
- snowbridge-core@0.13.2
- pallet-revive-eth-rpc@0.5.0
- snowbridge-inbound-queue-primitives@0.2.1
- snowbridge-pallet-system-frontend@0.2.1
- snowbridge-pallet-outbound-queue-v2@0.2.2
- penpal-runtime@0.29.0
- snowbridge-pallet-inbound-queue-v2@0.2.1
- snowbridge-pallet-system-v2@0.2.1
- polkadot-node-core-dispute-coordinator@22.0.1
- polkadot-statement-distribution@22.0.1
- cumulus-relay-chain-minimal-node@0.23.1
- frame-support-procedural@33.0.1
- frame-benchmarking@40.2.0
- frame-benchmarking-pallet-pov@30.0.1
- pallet-scheduler@41.2.0
- pallet-staking@40.1.1
- westend-runtime@22.3.0
- asset-hub-westend-runtime@0.30.2
- frame-benchmarking-cli@47.2.0
- frame-omni-bencher@0.11.1
- frame-election-provider-solution-type@16.1.1
- sp-npos-elections@36.2.0
- staging-xcm@16.2.0
- frame-election-provider-support@40.1.1
- staging-xcm-executor@19.1.2
- pallet-election-provider-multi-phase@39.2.0
- staging-xcm-builder@20.1.1
- xcm-runtime-apis@0.7.1
- pallet-xcm@19.1.2
- pallet-xcm-bridge-hub@0.16.3
- xcm-simulator@20.1.0
- xcm-simulator-example@20.0.1
- xcm-emulator@0.19.3
- emulated-integration-tests-common@20.1.0
Changelog
Changelog for Node Dev
ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.
[#8510]: statement-distribution: skip leafs where we can't fetch the state
Fix statement-distribution to not exit early when it cannot process one of the hashes in handle_active_leaves.
[#8514]: Allow block-announce to exist in the background of minimal relay chains
This PR fixes an issue with the collators that would not get advertised.
The issue relates to the /block-announces/1 protocol for the litep2p network backends.
Previously, the notification service handle was dropped, causing the litep2p backend to terminate the long-running task that handled the /block-announces/1 protocol.
This represents a subtle difference between libp2p and litep2p, where libp2p would continue to operate the protocol under the hood even without the respective handle.
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).)
[#8546]: [stable2503] Backport #8546
Improve try-state for pallet-xcm-bridge-hub, it removes try_as
and uses try_into
implementation instead.
[#8495]: [pallet-revive] tracing prepare support for future tracing APIS
- Fix eth_getStorageAt to use BigEndian for key encoding
- Refactor eth-rpc client storage and runtime API to a separate file
- Make debug_trace methods Return a composite Trace enum, so we can introduce other trace types.
companion evm-test-suite PR paritytech/evm-test-suite#93
[#8648]: Charge deposit based on key length
We were only charging storage deposit based on value length, but not based on key length. Since we allow for variable length keys, this has to be done. Needs to be back ported since changing this in an already deployed system will be nasty.
[#8585]: fix epmb solution duplicate issue + add remote mining apparatus to epm
Prevents the NPoS election process from accepting duplicate voters and targets.
[#8615]: Bridges: Fix - Improve try-state for pallet-xcm-bridge-hub
Improve try-state for pallet-xcm-bridge-hub, it removes try_as and uses try_into implementation instead.
[#7785]: pallet scheduler: fix weight and add safety checks
Changes:
- Add runtime integrity test for scheduler pallet to ensure that lookups use sensible weights
- Check all passed storage names in the omni bencher to be known by FRAME metadata
- Trim storage names in omni bencher to fix V1 bench syntax bug
- Fix V1 bench syntax storage name sanitization for specific Rust versions
I re-ran the benchmarks with the omni-bencher modifications, and it did not change the proof size. I reverted the commit afterwards to reduce the noise for reviewers.
[#8265]: [FRAME] Omni bencher fixes
Changes:
- Add
--pallets
option to selectively run multiple pallets. In the past, we only had--pallet
to run a single one. - Add
--exclude-extrinsics [pallet::extrinsic]
to add (Pallet, Extrinsic) tuples that should be excluded. - Fix storage overlay reversion before the benchmark runs.
- Test root hash for V2 benchmarks to be deterministic
Changed DB reps to 1 for speedup since it should not be needed to run multiple times. (TODO test)
Checked that it fixes the Kusama benchmark issue when patching to a fixed stable2412 fork:
(before)
The following 5 benchmarks failed:
- pallet_nomination_pools::apply_slash_fail
- pallet_nomination_pools::migrate_delegation
- pallet_nomination_pools::pool_migrate
- pallet_offences::report_offence_babe
- pallet_offences::report_offence_grandpa
Error: Input("5 benchmarks failed")
(after)
The following 1 benchmarks failed:
- pallet_nomination_pools::apply_slash_fail
Error: Input("1 benchmarks failed")
This one needs fixing but is not breaking the other ones any more.
[#7691]: Ensure Consistent Topic IDs for Traceable Cross-Chain XCM
This PR ensures every XCM processed with the same topic ID across multiple chains to improve traceability.
[#8427]: BEEFY: adjust equivocation slash fraction
Use 50% slash fraction for fork voting and future block voting (in accordance with the https://eprint.iacr.org/2025/057.pdf paper).
In order to account for the possible risk of accidental/non-malicious double voting, keep the current formula for double voting proof.
[#8306]: Fix faulty pre-upgrade migration check in pallet-session
Fixes a pre-upgrade migration check for v1 of pallet-session.
[#8240]: Snowbridge V2 Audit Fixes
This PR addresses audit findings from the Snowbridge V2 review. It includes a minor change to when the nonce is set
in the Inbound Queue V2. In the Outbound Queue V2 pallet, it fixes an issue where the reward address was not used to
accumulate rewards and improves the generation of message IDs. It also resolves non-sequential call indexes in the
System V2 pallet and improves documentation across the affected pallets.
Changelog for Node Operator
ℹ️ These changes are relevant to: Those who don't write any code and only run code.
[#8514]: Allow block-announce to exist in the background of minimal relay chains
This PR fixes an issue with the collators that would not get advertised.
The issue relates to the /block-announces/1 protocol for the litep2p network backends.
Previously, the notification service handle was dropped, causing the litep2p backend to terminate the long-running task that handled the /block-announces/1 protocol.
This represents a subtle difference between libp2p and litep2p, where libp2p would continue to operate the protocol under the hood even without the respective handle.
[#8503]: populate disabled dispute state on startup
Populating off-chain disabled state on startup from the disputes database makes the disputes spam handling more resilient with validator restarts.
Changelog for Runtime User
ℹ️ These changes are relevant to: Anyone using the runtime. This can be a token holder or a dev writing a front end for a chain.
[#8173]: Expose current advertised xcm version
Exposes AdvertisedXcmVersion
via a metadata constant.
[#8351]: XCM: treat BelowMinimum deposit errors as non-fatal and burn non-depositable dust
Treat TokenError::BelowMinimum
error as non-fatal in xcm-executor, ignore failures to deposit dust. Any dust that cannot be deposited, shall be dropped (effectively burned).
Rust compiler versions
This release was built and tested against the following versions of rustc
.
Other versions may work.
- Rust Stable:
1.84.1
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):
...
Polkadot stable2412-6
This release contains the changes from polkadot-stable2412-5
to polkadot-stable2412-6
.
ℹ️ Please note:
stable2412
and contains only patches and fixes to the crates (list below). No binary or docker images will be provided for this release.
The tag corresponding to the current patch release polkadot-stable2412-6
and matching the old pattern will be available under polkadot-v1.17.6.
The following crates were updated to the corresponding versions:
- frame-election-provider-solution-type@14.0.2
- sp-npos-elections@35.1.0
- staging-xcm@15.1.0
- frame-benchmarking@39.1.0
- frame-election-provider-support@39.0.1
- pallet-scheduler@40.2.0
- staging-xcm-executor@18.0.3
- pallet-election-provider-multi-phase@38.2.0
- sc-network@0.48.4
- staging-xcm-builder@18.2.1
- xcm-runtime-apis@0.5.3
- pallet-beefy@40.1.1
- pallet-xcm@18.1.1
- pallet-xcm-bridge-hub@0.14.3
- xcm-simulator@18.1.0
- xcm-simulator-example@18.0.1
- xcm-emulator@0.17.2
- asset-hub-westend-runtime@0.27.4
- westend-runtime@21.2.0
- emulated-integration-tests-common@19.1.0
- frame-benchmarking-cli@46.2.0
- cumulus-relay-chain-minimal-node@0.22.2
Changelog
Changelog for Node Dev
ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.
[#8514]: Allow block-announce to exist in the background of minimal relay chains
This PR fixes an issue with the collators that would not get advertised.
The issue relates to the /block-announces/1 protocol for the litep2p network backends.
Previously, the notification service handle was dropped, causing the litep2p backend to terminate the long-running task that handled the /block-announces/1 protocol.
This represents a subtle difference between libp2p and litep2p, where libp2p would continue to operate the protocol under the hood even without the respective handle.
[#8373]: Update litep2p network backend to v0.9.4
This release brings several improvements and fixes to litep2p, advancing its stability and readiness for production use.
Performance Improvements
This release addresses an issue where notification protocols failed to exit on handle drop, lowering CPU usage in scenarios like minimal-relay-chains from 7% to 0.1%.
Robustness Improvements
- Kademlia:
- Optimized address store by sorting addresses based on dialing score, bounding memory consumption and improving efficiency.
- Limited
FIND_NODE
responses to the replication factor, reducing data stored in the routing table. - Address store improvements enhance robustness against routing table alterations.
- Identify Codec:
- Enhanced message decoding to manage malformed or unexpected messages gracefully.
- Bitswap:
- Introduced a write timeout for sending frames, preventing protocol hangs or delays.
Testing and Reliability
- Fuzzing Harness: Added a fuzzing harness by SRLabs to uncover and resolve potential issues, improving code robustness. Thanks to @R9295 for the contribution!
- Testing Enhancements: Improved notification state machine testing. Thanks to Dominique (@Imod7) for the contribution!
Dependency Management
- Updated all dependencies for stable feature flags (default and "websocket") to their latest versions.
- Reorganized dependencies under specific feature flags, shrinking the default feature set and avoiding exposure of outdated dependencies from experimental features.
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).)
[#8585]: fix epmb solution duplicate issue + add remote mining apparatus to epm
Prevents the NPoS election process from accepting duplicate voters and targets.
[#7691]: Ensure Consistent Topic IDs for Traceable Cross-Chain XCM
This PR ensures every XCM processed with the same topic ID across multiple chains to improve traceability.
[#8427]: BEEFY: adjust equivocation slash fraction
Use 50% slash fraction for fork voting and future block voting (in accordance with the https://eprint.iacr.org/2025/057.pdf paper).
In order to account for the possible risk of accidental/non-malicious double voting, keep the current formula for double voting proof.
[#8589]: [stable2412] Backport #8546
Improve try-state for pallet-xcm-bridge-hub, it removes try_as
and uses try_into
implementation instead.
[#7785]: pallet scheduler: fix weight and add safety checks
Changes:
- Add runtime integrity test for scheduler pallet to ensure that lookups use sensible weights
- Check all passed storage names in the omni bencher to be known by FRAME metadata
- Trim storage names in omni bencher to fix V1 bench syntax bug
- Fix V1 bench syntax storage name sanitization for specific Rust versions
I re-ran the benchmarks with the omni-bencher modifications and it did not change the proof size. I reverted the commit afterwards to reduce the noise for reviewers.
Changelog for Node Operator
ℹ️ These changes are relevant to: Those who don't write any code and only run code.
[#8514]: Allow block-announce to exist in the background of minimal relay chains
This PR fixes an issue with the collators that would not get advertised.
The issue relates to the /block-announces/1 protocol for the litep2p network backends.
Previously, the notification service handle was dropped, causing the litep2p backend to terminate the long-running task that handled the /block-announces/1 protocol.
This represents a subtle difference between libp2p and litep2p, where libp2p would continue to operate the protocol under the hood even without the respective handle.
[#8373]: Update litep2p network backend to v0.9.4
This release brings several improvements and fixes to litep2p, advancing its stability and readiness for production use.
Performance Improvements
This release addresses an issue where notification protocols failed to exit on handle drop, lowering CPU usage in scenarios like minimal-relay-chains from 7% to 0.1%.
Robustness Improvements
- Kademlia:
- Optimized address store by sorting addresses based on dialing score, bounding memory consumption and improving efficiency.
- Limited
FIND_NODE
responses to the replication factor, reducing data stored in the routing table. - Address store improvements enhance robustness against routing table alterations.
- Identify Codec:
- Enhanced message decoding to manage malformed or unexpected messages gracefully.
- Bitswap:
- Introduced a write timeout for sending frames, preventing protocol hangs or delays.
Testing and Reliability
- Fuzzing Harness: Added a fuzzing harness by SRLabs to uncover and resolve potential issues, improving code robustness. Thanks to @R9295 for the contribution!
- Testing Enhancements: Improved notification state machine testing. Thanks to Dominique (@Imod7) for the contribution!
Dependency Management
- Updated all dependencies for stable feature flags (default and "websocket") to their latest versions.
- Reorganized dependencies under specific feature flags, shrinking the default feature set and avoiding exposure of outdated dependencies from experimental features.
Rust compiler versions
This release was built and tested against the following versions of rustc
.
Other versions may work.
- Rust Stable:
1.81.0
Polkadot stable2503-4 Kusama validators fix
This release contains the changes from polkadot-stable2503-3
to polkadot-stable2503-4
.
The tag corresponding to the current patch release polkadot-stable2503-4
and matching the old pattern will be available under polkadot-v1.18.4.
🚨Urgent stability fix for Kusama - please deploy as quickly as possible.
ℹ️ Polkadot validators can upgrade to this release too, but at normal cadence.
Rust compiler versions
This release was built and tested against the following versions of rustc
.
Other versions may work.
- Rust Stable:
1.84.1
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:stable2503-4
or
docker pull parity/polkadot-parachain:stable2503-4
Polkadot stable2503-3-kusama-only
This release contains the changes from polkadot-stable2503-2
to polkadot-stable2503-3
.
🚨 This is an emergency release to restore finality on Kusama
ℹ️ The binary will need to be reverted to the latest stable afterwards, it will be communicated additionally, when it will need to be done.
The tag corresponding to the current patch release polkadot-stable2503-3
and matching the old pattern will be available under polkadot-v1.18.3.
Rust compiler versions
This release was built and tested against the following versions of rustc
.
Other versions may work.
- Rust Stable:
1.84.1
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:stable2503-3
or
docker pull parity/polkadot-parachain:stable2503-3
Polkadot stable2503-2
This release contains the changes from polkadot-stable2503-1
to polkadot-stable2503-2
.
ℹ️ Please note:
This is a patch release for the latest stable version: stable2503
. If your nodes are already running on this version, you can consider upgrading to it to have the latest fixes.
The tag corresponding to the current patch release polkadot-stable2503-2
and matching the old pattern will be available under polkadot-v1.18.2.
The following crates were updated to the corresponding versions:
- polkadot-dispute-distribution@22.1.0
- xcm-emulator@0.19.2
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).)
[#8400]: assert_expected_events macro fix to properly check event was received
Fixes an issue where assert_expected_events macro doesn't properly verify if the expected event was received
Changelog for Node Operator
ℹ️ These changes are relevant to: Those who don't write any code and only run code.
[#8447]: Fix a potential cause of slow parachain blocks
This fix removes a needless reputation change, which might be causing the longer parachain block times on Polkadot.
Rust compiler versions
This release was built and tested against the following versions of rustc
.
Other versions may work.
- Rust Stable:
1.84.1
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:stable2503-2
or
docker pull parity/polkadot-parachain:stable2503-2
Polkadot stable2503-1
This release contains the changes from polkadot-stable2503
to polkadot-stable2503-1
.
ℹ️ Please note:
This is a patch release for the latest stable version: stable2503
. If your nodes are already running on this version, you can consider upgrading to it to have the latest fixes.
The tag corresponding to the current patch release polkadot-stable2503-1
and matching the old pattern will be available under polkadot-v1.18.1.
The following crates were updated to the corresponding versions:
- sp-io@40.0.1
- substrate-wasm-builder@26.0.1
- sc-network@0.49.1
- staging-xcm-builder@20.1.0
- sc-rpc-spec-v2@0.49.1
- snowbridge-outbound-queue-primitives@0.2.1
- snowbridge-pallet-ethereum-client-fixtures@0.21.1
- snowbridge-pallet-outbound-queue-v2@0.2.1
- snowbridge-pallet-system@0.13.2
- xcm-emulator@0.19.1
- asset-hub-rococo-runtime@0.25.2
- asset-hub-westend-runtime@0.29.2
- penpal-runtime@0.28.1
- bridge-hub-rococo-runtime@0.19.1
- bridge-hub-westend-runtime@0.16.1
- emulated-integration-tests-common@20.0.1
- sc-tracing-proc-macro@11.1.0
Changelog
Changelog for Node Dev
ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.
[#8373]: Update litep2p network backend to v0.9.4
This release brings several improvements and fixes to litep2p, advancing its stability and readiness for production use.
Performance Improvements
This release addresses an issue where notification protocols failed to exit on handle drop, lowering CPU usage in scenarios like minimal-relay-chains from 7% to 0.1%.
Robustness Improvements
- Kademlia:
- Optimized address store by sorting addresses based on dialing score, bounding memory consumption and improving efficiency.
- Limited
FIND_NODE
responses to the replication factor, reducing data stored in the routing table. - Address store improvements enhance robustness against routing table alterations.
- Identify Codec:
- Enhanced message decoding to manage malformed or unexpected messages gracefully.
- Bitswap:
- Introduced a write timeout for sending frames, preventing protocol hangs or delays.
Testing and Reliability
- Fuzzing Harness: Added a fuzzing harness by SRLabs to uncover and resolve potential issues, improving code robustness. Thanks to @R9295 for the contribution!
- Testing Enhancements: Improved notification state machine testing. Thanks to Dominique (@Imod7) for the contribution!
Dependency Management
- Updated all dependencies for stable feature flags (default and "websocket") to their latest versions.
- Reorganized dependencies under specific feature flags, shrinking the default feature set and avoiding exposure of outdated dependencies from experimental features.
[#8162]: Use client info for fetching the best block for tx_broadcast
This PR modifies the tx broadcast logic. Previously, we relied on the import notification stream to fetch the latest available block.
In this revision, we use the available information of the client.info()
to prefix the import notification stream.
The change is needed because chains could be started with InstantSeal, which would not produce blocks until they encounter transactions.
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).)
[#8218]: [xcm-builder][origin_conversion] LocationAsSuperuser converter introduced
Introduces a LocationAsSuperuser
struct that implements ConvertOrigin
to allow specific Location
s defined through XCM configuration to act as Root on the local chain. Implementation is generic over Location
but was created for purposes of allowing AssetHub system chain (by other system chains and relay chains) to execute Root level extrinsics like authorize_upgrade
on them.
[#8259]: [stable2503] Backport - Snowbridge - Update TransferToken command gas limit.
Transfering certain ERC20 tokens require more gas than 100_000 gas. An example is LDO token which requires 140_000 gas.
This change updates the gas limit to 200_000 and also updates the default fees for testnet runtimes.
NOTE: make sure to update the relevant runtime fees to account for this change.
[#8198]: Remove #[no_mangle]
from the panic handler
Fixes #8190
Remove useless #[no_mangle]
from the panic handler which screws up the panic handling machinery on recent versions of Rust.
[#7913]: Fix assert_expected_events macro
This PR fixes the assert_expected_events macro used in integration tests. Before this PR, the macro did not correctly assert field values. This change might result in tests failing that previously passed, due to false negatives.
[#8170]: xcm-emulator
improved callback triggering (on_initialize
, on_finalize
, on_idle
, OnSystemEvent
).
This PR fixes several issues related to xcm-emulator
:
- Corrects parent head propagation to the
PersistedValidationData
andOnSystemEvent
callback. - Triggers
on_initialize
for all pallets, not justParachainSystem
. - Triggers
on_finalize
for all pallets, not justParachainSystem
. - Triggers
on_idle
for all parachain pallets.
Changelog for Node Operator
ℹ️ These changes are relevant to: Those who don't write any code and only run code.
[#8373]: Update litep2p network backend to v0.9.4
This release brings several improvements and fixes to litep2p, advancing its stability and readiness for production use.
Performance Improvements
This release addresses an issue where notification protocols failed to exit on handle drop, lowering CPU usage in scenarios like minimal-relay-chains from 7% to 0.1%.
Robustness Improvements
- Kademlia:
- Optimized address store by sorting addresses based on dialing score, bounding memory consumption and improving efficiency.
- Limited
FIND_NODE
responses to the replication factor, reducing data stored in the routing table. - Address store improvements enhance robustness against routing table alterations.
- Identify Codec:
- Enhanced message decoding to manage malformed or unexpected messages gracefully.
- Bitswap:
- Introduced a write timeout for sending frames, preventing protocol hangs or delays.
Testing and Reliability
- Fuzzing Harness: Added a fuzzing harness by SRLabs to uncover and resolve potential issues, improving code robustness. Thanks to @R9295 for the contribution!
- Testing Enhancements: Improved notification state machine testing. Thanks to Dominique (@Imod7) for the contribution!
Dependency Management
- Updated all dependencies for stable feature flags (default and "websocket") to their latest versions.
- Reorganized dependencies under specific feature flags, shrinking the default feature set and avoiding exposure of outdated dependencies from experimental features.
[#8162]: Use client info for fetching the best block for tx_broadcast
This PR modifies the tx broadcast logic. Previously, we relied on the import notification stream to fetch the latest available block.
In this revision, we use the available information of the client.info()
to prefix the import notification stream.
The change is needed because chains could be started with InstantSeal, which would not produce blocks until they encounter transactions.
Rust compiler versions
This release was built and tested against the following versions of rustc
.
Other versions may work.
- Rust Stable:
1.84.1
Runtimes
The information about the runtimes included in this release can be found below.
The runtimes have been built using srtool v0.18.2 and rustc 1.84.1 (e71f9a9a9 2025-01-27)
.
Westend Bridgehub
🏋️ Runtime Size: 1.61 MB (1687949 bytes)
🔥 Core Version: bridge-hub-westend-1018002 (bridge-hub-westend-0.tx6.au1)
🗜 Compressed: Yes: 72.46%
🎁 Metadata version: V14
🗳️ system.setCode hash: 0x537bbbe2770fb8eea40d15070fd9ba16d1a4488671c67d82ddb291d8bb033011
🗳️ authorizeUpgrade hash: 0xadb6d1a19f5639eeb05246c35ebd5b00b55229beb8369c71ea08faaa802f1b0d
🗳️ Blake2-256 hash: 0x19c18ee597711ccb8cc338e489399cf2ead54dc729e5df20b9a031d9e89414d6
📦 IPFS: QmYD2AJ6wTaC3PpQLNdfbJEzwUcdZt9MK8U8sP6qx5syaN
Docker images
The docker images for the polkadot
node binary, the polkadot-parachain
binary and the polkadot-omni-node
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:stable2503-1
or
docker pull parity/polkadot-parachain:stable2503-1
or
docker pull parity/polkadot-omni-node:stable2503-1
Polkadot stable2412-5
This release contains the changes from polkadot-stable2412-4
to polkadot-stable2412-5
.
ℹ️ Please note:
stable2412
and contains only patches and fixes to the crates (list below). No binary or docker images will be provided for this release.
The tag corresponding to the current patch release polkadot-stable2412-5
and matching the old pattern will be available under polkadot-v1.17.5.
The following crates were updated to the corresponding versions:
- sp-io@39.0.
- substrate-wasm-builder@25.0.1
- pallet-nomination-pools@37.0.2
- staging-xcm-builder@18.2.0
- pallet-multisig@39.1.1
- pallet-nomination-pools-runtime-api@35.0.1
- pallet-xcm-benchmarks@18.1.1
- snowbridge-core@0.12.2
- snowbridge-pallet-system@0.12.2
- people-westend-runtime@0.13.2
- asset-hub-rococo-runtime@0.24.3
- asset-hub-westend-runtime@0.27.3
- bridge-hub-rococo-runtime@0.18.4
- bridge-hub-westend-runtime@0.15.4
Changelog
Changelog for Node Dev
ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.
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).)
[#8210]: [xcm-builder][origin_conversion] LocationAsSuperuser converter introduced
Introduces a LocationAsSuperuser
struct that implements ConvertOrigin
to allow specific Location
s defined through XCM configuration to act as Root on the local chain. Implementation is generic over Location
but was created for purposes of allowing AssetHub system chain (by other system chains and relay chains) to execute Root level extrinsics like authorize_upgrade
on them.
[#8198]: Remove #[no_mangle]
from the panic handler
Fixes #8190
Remove useless #[no_mangle]
from the panic handler which screws up the panic handling machinery on recent versions of Rust.
[#8335]: Backport fix for pallet-multisig benchmarks
Fixes the benchmarks for pallet-multisig
that generates incompatible weights for stable2412.
[#8174]: Fix version conversion in XcmPaymentApi::query_weight_to_asset_fee.
The query_weight_to_asset_fee
function of the XcmPaymentApi
was trying
to convert versions in the wrong way.
This resulted in all calls made with lower versions failing.
The version conversion is now done correctly and these same calls will now succeed.
[#8156]: bp-runtime: make macro expansion not rely on sp-std in scope.
Make macro in bp-runtime no longer require sp-std in scope.
[#8258]: [stable2412] Backport Snowbridge - Update TransferToken command gas limit.
Transfering certain ERC20 tokens require more gas than 100_000 gas. An example is LDO token which requires 140_000 gas.
This change updates the gas limit to 200_000 and also updates the default fees for testnet runtimes.
NOTE: make sure to update the relevant runtime fees to account for this change.
[#8081]: Add expensive scenario for asset exchange
This PR introduces an implementation for worst_case_asset_exchange()
in the AssetHubWestend
benchmarking setup.
[#8194]: xcm: minor fix for compatibility with V4
Following the removal of Rococo
, Westend
and Wococo
from NetworkId
, fixed xcm::v5::NetworkId
encoding/decoding to be compatible with xcm::v4::NetworkId
Changelog for Node Operator
ℹ️ These changes are relevant to: Those who don't write any code and only run code.
Changelog for Runtime User
ℹ️ These changes are relevant to: Anyone using the runtime. This can be a token holder or a dev writing a front end for a chain.
[#6540]: Only allow apply slash to be executed if the slash amount is atleast ED
This change prevents pools::apply_slash
from being executed when the pending slash amount of the member is lower
than the ED. With this change, such small slashes will still be applied but only when member funds are withdrawn.
[#8194]: xcm: minor fix for compatibility with V4
Following the removal of Rococo
, Westend
and Wococo
from NetworkId
, fixed xcm::v5::NetworkId
encoding/decoding to be compatible with xcm::v4::NetworkId
Rust compiler versions
This release was built and tested against the following versions of rustc
.
Other versions may work.
- Rust Stable:
1.81.0
Polkadot stable2409-7
This release contains the changes from polkadot-stable2409-6
to polkadot-stable2409-7
.
ℹ️ Please note:
stable2409
and contains only patches and fixes to the crates (list below). No binary or docker images will be provided for this release.
The tag corresponding to the current patch release polkadot-stable2409-7
and matching the old pattern will be available under polkadot-v1.16.7.
The following crates were updated to the corresponding versions:
- sp-io@38.0.2
- staging-xcm@14.2.2
- substrate-wasm-builder@24.0.2
- staging-xcm-executor@17.0.2
- staging-xcm-builder@17.0.5
- pallet-xcm-benchmarks@17.0.1
- polkadot-runtime-common@17.0.1
- cumulus-pallet-parachain-system@0.17.2
- cumulus-pallet-xcmp-queue@0.17.3
- cumulus-primitives-utility@0.17.1
- parachains-runtimes-test-utils@19.0.1
- asset-hub-westend-runtime@0.26.5
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).)
[#8198]: Remove #[no_mangle]
from the panic handler
Fixes #8190
Remove useless #[no_mangle]
from the panic handler which screws up the panic handling machinery on recent versions of Rust.
[#7856]: Fix XCM decoding inconsistencies
This PR adjusts the XCM decoding logic in order to deduplicate the logic used for decoding v3::Xcm
, v4::Xcm
and v5::Xcm
and also to use decode_with_depth_limit()
in some more places.
[#8080]: Add expensive scenario for asset exchange
This PR introduces an implementation for worst_case_asset_exchange()
in the AssetHubWestend
benchmarking setup.
[#7967]: Fix XCM Barrier Rejection Handling to Return Incomplete with Weight
This PR addresses an issue with the handling of message execution when blocked by the barrier. Instead of returning an Outcome::Error
, we modify the behaviour to return Outcome::Incomplete
, which includes the weight consumed up to the point of rejection and the error that caused the blockage.
This change ensures more accurate weight tracking during message execution, even when interrupted. It improves resource management and aligns the XCM executor’s behaviour with better error handling practices.
Rust compiler versions
This release was built and tested against the following versions of rustc
.
Other versions may work.
- Rust Stable:
"1.81.0"