Releases: paritytech/polkadot-sdk
Polkadot stable2409-12
This release contains the changes from polkadot-stable2409-11
to polkadot-stable2409-12
.
ℹ️ 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 stable2409
release has reached the end of its life cycle and will no longer be supported. To continue receiving updates, please upgrade to a newer stable version.
The tag corresponding to the current patch release polkadot-stable2409-12
and matching the old pattern will be available under polkadot-v1.16.12.
The following crates were updated to the corresponding versions:
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
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).)
[#9544]: Disable reserve_transfer_assets for DOT|KSM|WND|PAS
The reserve_transfer_assets extrinsic on pallet-xcm is also affected by the same issue as transfer_assets.
These extrinsics have been updated to return an error when dealing with DOT|KSM|WND|PAS, effectively disabling them.
We can't afford these extrinsics to be enabled after the Asset Hub Migration (AHM) and risk trapping assets due to chain misconfigurations.
All chains need to update and coordinate with their dapps to move to the alternatives, like transfer_assets_using_type_and_then
or execute
.
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.
[#9544]: Disable reserve_transfer_assets for DOT|KSM|WND|PAS
The reserve_transfer_assets extrinsic on pallet-xcm is also affected by the same issue as transfer_assets.
These extrinsics have been updated to return an error when dealing with DOT|KSM|WND|PAS, effectively disabling them.
We can't afford these extrinsics to be enabled after the Asset Hub Migration (AHM) and risk trapping assets due to chain misconfigurations.
All apps should switch to transfer_assets_using_type_and_then
or execute
.
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 polkadot-stable2509-rc1
This release contains the changes from polkadot-stable2506
to polkadot-stable2509-rc1
.
The currently published version is a pre-release and is not yet a final stable version. This release is provided for testing purposes only, and there is no guarantee that everything will work as expected. Errors and unusual behaviours of some features are to be expected.
Please use this version at your own risk and report any issues you encounter. We recommend waiting for the official release if you need a stable version.
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.
[#9262]: Adds support for additional relay state keys in parachain validation data inherent
Adds the possibility for parachain clients to collect additional relay state keys into the validation data inherent.
[#9432]: CumulusDigestItem: Add function to fetch the relay block identifier
This simplifies code paths that are fetching these information from a parachain header.
[#9488]: prdoc: add missing crates bumps
Adds a few crate bumps associated to PRs which missed to bump them due to a corner case missed by the release tooling.
[#9175]: Deduplicate client-side inherents checking logic
Stumbled upon this while working on other issue (#7902). I thought I might need to change the CheckInherentsResult
and this deduplication would have made everything easier. Probably changing CheckInherentsResult
won't be needed in the end, but even so it would be nice to reduce the duplication.
[#8882]: Fix flaxy 0003-block-building-warp-sync
test
Fixes: #8868
The error skipped in log is acceptable, the announced block does not have the parent imported yet.
[#8646]: emit sparse debug info in unoptimized builds
See here for more details.
I found that on my host, this reduces cargo build
(after cargo clean
) from 19m 35s to 17m 50s, or about 10%.
[#9201]: polkadot-parachain
: fixes and changes related to GetParachainInfo
- Provides some updated to the asset-hub-westend-local chain specification, by adding appropriate genesis patch for parachainInfo.
- refactors the logic related to fetching
para_id
with the node, so that when failing to useGetParachainInfo::parachain_id
we also get a log with the error (before defaulting topara_id
extracted from chain spec). - removes comments/deprecation notices throughout the code that introduce para-id flag removal (from chain-spec-builder and support for parsing it from chain specifications)
[#8939]: Always send full parent header, not only hash, part of collation response
Implementation of #7733
Description
Instead of conditionally sending the full parent header in the collation response we now always send it (never the hash of it).
[#8651]: polkadot-omni-node: add GetParachainInfo
runtime api
This PR deprecates the para_id
field of parachain chain specifications.
- Both
polkadot-omni-node
&polkadot-parachain
are still supporting thepara_id
field passed via chain specifications, whileparachain-template-node
supports only runtime API based provided parachain id. - This PR also changes
minimal-template-runtime
to not run anymore with Omni Node. chain-spec-builder
still supports generating chain specifications withpara_id
field.- Starting with
stable2509
polkadot-parachain
/parachain-template-node
will generate chain specs that are not compatible
with prior node versions becausepara_id
field will not be added anymore to the resulting chain specs.
Starting with stable2509
the para_id
field of chain specification is not required anymore, and runtime developers will be able
to specify it to nodes by implementing the runtime API cumulus_primitives_core::GetParachainInfo
.
Starting with stable2512
the para_id
field of chain specification will not be supported anymore by node versions and
chain-spec-builder
will drop its support, so it is mandatory for runtimes to implement the GetParachainInfo
trait to still be compatible with the nodes.
[#8894]: remove enable_approval_voting_parallel cli flag
This has been running on polkadot since #7504, so it is time to remove the flag that allowed us to run either with approval-voting-parallel or with approval-distribution and approval-voting subsystems.
[#8596]: fatxpool
: limits handling optimizations and fixes
This PR adds some optimization and fixes in handling limits in fork-aware transaction pool.
[#8974]: Fix flaxy 0003-block-building-warp-sync test - one more approach
See the explanation in this comment:
#8868 (comment)
[#9044]: Fix regression benchmarks
Updates benchmark thresholds
[#9255]: Fix CandidateDescriptor debug logs
Implement core::fmt::Debug by hand and differentiate the output based on CandidateDescriptorVersion.
[#8908]: [pvf-worker] Refactor execute request handling
PVF execution worker communication was organized into a single ExecuteRequest struct. This should improve performance: one encode/decode operation instead of four. Also, no more chance of ordering mistakes.
[#9055]: Add para_ids
Runtime API
Add a new runtime API for querying the registered paraids at a relay parent (both on-demand parachains and parachains).
This can be used for pruning the reputation database for the new collator protocol, so that we don't keep storing reputations indefinitely for parachains that have been offboarded.
[#8839]: net/discovery: File persistence for AddrCache
Persisting the AddrCache periodically (every 10 minutes) and on worker shutdown. Read AddrCache from file upon launch of worker.
AddrCache is saved as authority_discovery_addr_cache.json in the folder configured by net_config_path of NetworkConfiguration.
This reduces the time it takes for a node to reconnect to peers after restart.
[#8973]: Add polkadot_parachain_peer_connectivity metric
Adds polkadot_parachain_peer_connectivity
histogram metric to better understand connectivity patterns.
[#9495]: fatxpool
: buckets for event-timings metrics adjusted
This PR adjusts the buckets for transactions' event-timings metrics as requested in #9158 for reliability dashboard.
fixes: #9158
[#8172]: Ignore trie nodes while recording a proof
This pull requests implements support for ignoring trie nodes while recording a proof. It directly includes the feature into basic-authorship
to later make use of it in Cumulus for multi-block PoVs.
The idea behind this is when you have multiple blocks per PoV that trie nodes accessed or produced by a block before (in the same PoV
), are not required to be added to the storage proof again. So, all the blocks in one PoV
basically share the same storage proof.
This also impacts things like storage weight reclaim, because ignored trie node do not contribute a to the storage proof size (similar to when this would happen in the same block).
In your node you only need to do the following change:
-let proposer = Proposer::new(proposer_factory);
+
The cumulus_client_consensus_proposer::Proposer
type was removed.
[#8833]: Check artifact integrity before execution
In case of a corrupted artifact, we can find it out before execution and re-prepare the artifact.
[#8152]: fatxpool
: some more integration tests
Some new test cases and improvements of zombienet integration tests for fatxpool
.
[#9309]: Make RecentDisputes/ActiveDisputes use BTreeMap
Make dispute-coordinator forward BTreeMap/BTreeSet to provisioner directly instead of converting it to Vec as before.
[#9059]: Fetch parent block api_version
This is required to ensure that we use the api_version
of the runtime that will be used on the relay chain to validate the block. Otherwise the node may thinks the runtime was already upgraded and sends data to the relay chain that can not be decoded by the runtime and thus, the validation fails.
[#9015]: consensus/grandpa: Fix high number of peer disconnects with invalid justification
A grandpa race-casse has been identified in the versi-net stack around authority set changes, which leads to the following:
- T0 / Node A: Completes round (15)
- T1 / Node A: Applies new authority set change and increments the SetID (from 0 to 1)
- T2 / Node B: Sends Precommit for round (15) with SetID (0) -- previous set ID
- T3 / Node B: Applies new authority set change and increments the SetID (1)
In this scenario, Node B is not aware at the moment of sending justifications that the Set ID has changed.
The downstream effect is that Node A will not be able to verify the signature of justifications, since a different SetID is taken into account. This will cascade through the sync engine, where the Node B is wrongfully banned and disconnected.
This PR aims to fix the edge-case by making the grandpa resilient to verifying prior setIDs for signatures.
When the signature of the grandpa justification fails to decode, the prior SetID is also verified. If the prior SetID produces a valid signature, then the outdated justification error is propagated through the code (ie SignatureResult::OutdatedSet
).
The sync engine will handle the outdated justifi...
Polkadot polkadot-stable2506-2
This release contains the changes from polkadot-stable2506-1
to polkadot-stable2506-2
.
ℹ️ Please note:
This is a patch release for the latest stable version: stable2506
. 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-stable2506-2
and matching the old pattern will be available under polkadot-v1.19.2.
The following crates were updated to the corresponding versions:
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
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).)
[#9516]: Fix for promote_fast
benchmark
Fixed benchmark generation/compilation for promote_fast
MaxRank
change from u32
to u16
.
[#9451]: Call SingleBlockMigrations
from frame_system::Config
on try_on_runtime_upgrade
.
Fixes a small bug in try-runtime
code, where SingleBlockMigrations
from frame_system::Config
was not called in try_on_runtime_upgrade
.
[#9544]: Disable reserve_transfer_assets for DOT|KSM|WND|PAS
The reserve_transfer_assets extrinsic on pallet-xcm is also affected by the same issue as transfer_assets.
These extrinsics have been updated to return an error when dealing with DOT|KSM|WND|PAS, effectively disabling them.
We can't afford these extrinsics to be enabled after the Asset Hub Migration (AHM) and risk trapping assets due to chain misconfigurations.
All chains need to update and coordinate with their dapps to move to the alternatives, like transfer_assets_using_type_and_then
or execute
.
[#9564]: Fix disabled validator filtering in the parachains runtime
Correctly map group indices to vote indices when filtering backing statements.
[#9514]: Paras: Clean up AuthorizedCodeHash
when offboarding
This PR updates the Paras
pallet to clear entries in AuthorizedCodeHash
as part of the offboarding process.
Changelog for Node Operator
ℹ️ These changes are relevant to: Those who don't write any code and only run code.
[#9581]: fix: parachain informant
The parachain informant was logging information for all parachains, not just ours. This PR fixes that by filtering the events by parachain ID.
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.
[#9544]: Disable reserve_transfer_assets for DOT|KSM|WND|PAS
The reserve_transfer_assets extrinsic on pallet-xcm is also affected by the same issue as transfer_assets.
These extrinsics have been updated to return an error when dealing with DOT|KSM|WND|PAS, effectively disabling them.
We can't afford these extrinsics to be enabled after the Asset Hub Migration (AHM) and risk trapping assets due to chain misconfigurations.
All apps should switch to transfer_assets_using_type_and_then
or execute
.
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:stable2506-2
or
docker pull parity/polkadot-parachain:stable2506-2
Polkadot stable2503-9
This release contains the changes from polkadot-stable2503-8
to polkadot-stable2503-9
.
ℹ️ Please note:
stable2503
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-stable2503-9
and matching the old pattern will be available under polkadot-v1.18.9.
The following crates were updated to the corresponding versions:
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).)
[#9445]: pallet-xcm: fix authorized_alias benchmarks
Depending on runtime configuration of ED and storage deposits, the old benchmark code did not set up enough funds to cover authorized aliases storage deposits. Fix it by adding more funds as part of benchmark setup.
[#9564]: Fix disabled validator filtering in the parachains runtime
Correctly map group indices to vote indices when filtering backing statements.
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 stable2412-9
This release contains the changes from polkadot-stable2412-8
to polkadot-stable2412-9
.
ℹ️ 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-9
and matching the old pattern will be available under polkadot-v1.17.9.
The following crates were updated to the corresponding versions:
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.
[#9355]: substrate-prometheus-endpoint: directly require the feature "tokio/net"
The crate substrate-prometheus-endpoint
use tokio items given by the feature "net" but it doesn't explictly requires it in the Cargo.toml
. It compiles on master because hyper-util
enables the feature "tokio/net". But upgrading hyper-util
break this indirect enabling.
This fix the issue by directly setting "net" feature as required, as it is used.
We should also backport this ideally. It is not a breaking change given the code doesn't compile without the feature and only compiles if indirectly enabled by another crate.
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).)
[#9354]: Remove whitespaces added by macros due to token re-parsing
Normalize result of stringify
in scenarios when used inside nested macros to stringify token streams for benchmarking framework
[#9195]: XCMv5 asset exchange test scenarios
Emulated test scenarios added to cover asset exchanging via Transact or ExchangeAsset instruction using XCMv5 capabilities
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 polkadot-stable2506-1
This release contains the changes from polkadot-stable2506
to polkadot-stable2506-1
.
ℹ️ Please note:
This is a patch release for the latest stable version: stable2506
. 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-stable2506-1
and matching the old pattern will be available under polkadot-v1.19.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.
[#9338]: fatxpool: instant seal support
This PR introduces creation of view for known best block during instantiation of fatxpool
. This is intended to fix an instant-seal nodes, where block building is triggered via transaction import.
[#9355]: substrate-prometheus-endpoint: directly require the feature "tokio/net"
The crate substrate-prometheus-endpoint
use tokio items given by the feature "net" but it doesn't explictly requires it in the Cargo.toml
. It compiles on master because hyper-util
enables the feature "tokio/net". But upgrading hyper-util
break this indirect enabling.
This fix the issue by directly setting "net" feature as required, as it is used.
We should also backport this ideally. It is not a breaking change given the code doesn't compile without the feature and only compiles if indirectly enabled by another crate.
[#9189]: fatxpool
: avoid premature revalidation of transactions
After this PR transactions will be revalidated in mempool on finalized blocks only if height of finalized block is greater then the height of the block at which transactions was originally submitted.
[#9281]: litep2p/discovery: Ensure non-global addresses are not reported as external
This PR ensures that external addresses discovered by the identify protocol are not propagated to the litep2p backend if they are not global. This leads to a healthier DHT over time, since nodes will not advertise loopback / non-global addresses.
We have seen various cases were loopback addresses were reported as external:
2025-07-16 16:18:39.765 TRACE tokio-runtime-worker sub-libp2p::discovery: verify new external address: /ip4/127.0.0.1/tcp/30310/p2p/12D3KooWNw19ScMjzNGLnYYLQxWcM9EK9VYPbCq241araUGgbdLM
2025-07-16 16:18:39.765 INFO tokio-runtime-worker sub-libp2p: 🔍 Discovered new external address for our node: /ip4/127.0.0.1/tcp/30310/p2p/12D3KooWNw19ScMjzNGLnYYLQxWcM9EK9VYPbCq241araUGgbdLM
This PR takes into account the network config for allow_non_global_addresses
.
Closes: #9261
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).)
[#9354]: Remove whitespaces added by macros due to token re-parsing
Normalize result of stringify
in scenarios when used inside nested macros to stringify token streams for benchmarking framework
[#9489]: Remove free balance check in prepare_unlock
The free balance check during unlocking is unnecessary since a lock can cover both free and reserved balances. Removing it allows locks to be cleared even if part of the locked funds is reserved or already slashed.
[#9179]: Fix subsume_assets incorrectly merging two AssetsInHolding
Fix subsume_assets incorrectly merging two AssetsInHolding instances under certain conditions, which caused asset values to be overridden rather than summed.
[#8857]: [FRAME] Custom log level for the runtime benchmarks
Changes:
- Add
--runtime-log
option to omni-bencher CLI - Read env var
RUNTIME_LOG
as fallback to the--runtime-log
option - Set custom log level for runtime benchmarks that can be different form CLI level
- Fix issue where old runtimes have a space in the pallet or instance name from breaking change in
quote
macro
[#9445]: pallet-xcm: fix authorized_alias benchmarks
Depending on runtime configuration of ED and storage deposits, the old benchmark code did not set up enough funds to cover authorized aliases storage deposits. Fix it by adding more funds as part of benchmark setup.
[#9250]: implement InspectMessageQueues for UnpaidRemoteExporter
Add missing implementation of InspectMessageQueues
for UnpaidRemoteExporter
[#9195]: XCMv5 asset exchange test scenarios
Emulated test scenarios added to cover asset exchanging via Transact or ExchangeAsset instruction using XCMv5 capabilities
Changelog for Node Operator
ℹ️ These changes are relevant to: Those who don't write any code and only run code.
[#8838]: fatxpool
: fork aware transaction pool is now default
This PR changes the default transaction pool to the fork aware implementation. The old implementation can be still used with --pool-type=single-state
command line argument.
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.
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:stable2506-1
or
docker pull parity/polkadot-parachain:stable2506-1
Polkadot stable2409-11
This release contains the changes from polkadot-stable2409-10
to polkadot-stable2409-11
.
ℹ️ 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-11
and matching the old pattern will be available under polkadot-v1.16.11.
The following crates were updated to the corresponding versions:
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.
[#9355]: substrate-prometheus-endpoint: directly require the feature "tokio/net"
The crate substrate-prometheus-endpoint
use tokio items given by the feature "net" but it doesn't explictly requires it in the Cargo.toml
. It compiles on master because hyper-util
enables the feature "tokio/net". But upgrading hyper-util
break this indirect enabling.
This fix the issue by directly setting "net" feature as required, as it is used.
We should also backport this ideally. It is not a breaking change given the code doesn't compile without the feature and only compiles if indirectly enabled by another crate.
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).)
[#9179]: Fix subsume_assets incorrectly merging two AssetsInHolding
Fix subsume_assets incorrectly merging two AssetsInHolding instances under certain conditions,
which caused asset values to be overridden rather than summed.
[#9354]: Remove whitespaces added by macros due to token re-parsing
Normalize result of stringify
in scenarios when used inside nested macros to stringify token streams for benchmarking framework
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-8
This release contains the changes from polkadot-stable2503-7
to polkadot-stable2503-8
.
ℹ️ Please note:
stable2503
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-stable2503-8
and matching the old pattern will be available under polkadot-v1.18.8.
The following crates were updated to the corresponding versions:
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
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.
[#9355]: substrate-prometheus-endpoint: directly require the feature "tokio/net"
The crate substrate-prometheus-endpoint
use tokio items given by the feature "net" but it doesn't explictly requires it in the Cargo.toml
. It compiles on master because hyper-util
enables the feature "tokio/net". But upgrading hyper-util
break this indirect enabling.
This fix the issue by directly setting "net" feature as required, as it is used.
We should also backport this ideally. It is not a breaking change given the code doesn't compile without the feature and only compiles if indirectly enabled by another crate.
[#9281]: litep2p/discovery: Ensure non-global addresses are not reported as external
This PR ensures that external addresses discovered by the identify protocol are not propagated to the litep2p backend if they are not global. This leads to a healthier DHT over time, since nodes will not advertise loopback / non-global addresses.
We have seen various cases were loopback addresses were reported as external:
2025-07-16 16:18:39.765 TRACE tokio-runtime-worker sub-libp2p::discovery: verify new external address: /ip4/127.0.0.1/tcp/30310/p2p/12D3KooWNw19ScMjzNGLnYYLQxWcM9EK9VYPbCq241araUGgbdLM
2025-07-16 16:18:39.765 INFO tokio-runtime-worker sub-libp2p: 🔍 Discovered new external address for our node: /ip4/127.0.0.1/tcp/30310/p2p/12D3KooWNw19ScMjzNGLnYYLQxWcM9EK9VYPbCq241araUGgbdLM
This PR takes into account the network config for allow_non_global_addresses
.
Closes: #9261
cc @paritytech/networking
[#9094]: bitfield_distribution: fix subsystem clogged at begining of a session
handle_peer_view_change
gets called on NewGossipTopology with the existing view of the peer to cover for the case when the topology might arrive late, but in that case in the view will contain old blocks from previous session, so since the X/Y neighbour change because of the topology change you end up sending a lot of messages for blocks before the session changed.
Fix it by checking the send message only for relay chains that are in the same session as the current topology.
[#9264]: gossip-support: make low connectivity message an error
All is not well when a validator is not properly connected, e.g: of things that might happen:
- Finality might be slightly delay because validator will be no-show because they can't retrieve PoVs to validate approval work: #8915.
- When they author blocks they won't back things because gossiping of backing statements happen using the grid topology:, e.g blocks authored by validators with a low number of peers:
https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc-polkadot.helixstreet.io#/explorer/query/26931262
https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc-polkadot.helixstreet.io#/explorer/query/26931260
https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fpolkadot.api.onfinality.io%2Fpublic-ws#/explorer/query/26931334
https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fpolkadot-public-rpc.blockops.network%2Fws#/explorer/query/26931314
https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fpolkadot-public-rpc.blockops.network%2Fws#/explorer/query/26931292
https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fpolkadot-public-rpc.blockops.network%2Fws#/explorer/query/26931447
The problem is seen in polkadot_parachain_peer_count
metrics, but it seems people are not monitoring that well enough, so let's make it more visible nodes with low connectivity are not working in good conditions.
I also reduced the threshold to 85%, so that we don't trigger this error to eagerly.
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).)
[#9354]: Remove whitespaces added by macros due to token re-parsing
Normalize result of stringify
in scenarios when used inside nested macros to stringify token streams for benchmarking framework
[#9195]: XCMv5 asset exchange test scenarios
Emulated test scenarios added to cover asset exchanging via Transact or ExchangeAsset instruction using XCMv5 capabilities
[#9179]: Fix subsume_assets incorrectly merging two AssetsInHolding
Fix subsume_assets incorrectly merging two AssetsInHolding instances under certain conditions,
which caused asset values to be overridden rather than summed.
[#9137]: Pallet XCM - transfer_assets pre-ahm patch
Pallet XCM's transfer_assets
extrinsic now returns an error when it determines that a reserve transfer of DOT|KSM|WND|PAS has to be done.
This is a safeguard in preparation for the Asset Hub Migration (AHM), where the reserve of DOT|KSM|WND|PAS will change from the Relay Chain to Asset Hub.
After the migration, another patch will remove this error case and use the correct reserve.
The pallet uses the UniversalLocation
configuration to figure out the correct asset being transferred. It's very important to have that configuration correct.
[#9325]: Fix pallet-im-online benchmarking for runtimes with MaxKeys < 1000
Fixes benchmarking for pallet-im-online when runtime configuration has MaxKeys < 1000.
Previously, the benchmark code used a hardcoded constant MAX_KEYS = 1000 which would cause benchmark failures for runtimes configured with fewer maximum keys. This change updates the benchmark to dynamically use the MaxKeys value from the pallet's Config trait.
[#9139]: Expose more constants for pallet-xcm
Exposes more constants (UniversalLocation, MaxLockers, MaxRemoteLockConsumers), similar as AdvertisedXcmVersion
.
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.
[#9137]: Pallet XCM - transfer_assets pre-ahm patch
Pallet XCM's transfer_assets
extrinsic now returns an error when it determines that a reserve transfer of DOT|KSM|WND|PAS has to be done.
This is a safeguard in preparation for the Asset Hub Migration (AHM), where the reserve of DOT|KSM|WND|PAS will change from the Relay Chain to Asset Hub.
After the migration, another patch will remove this error case and use the correct reserve.
limited_reserve_transfer_assets
, transfer_assets_using_type_and_then
or execute
should be used instead, since they provide the ability to specify the reserve you want to use.
[#9139]: Expose more constants for pallet-xcm
Exposes more constants (UniversalLocation, MaxLockers, MaxRemoteLockConsumers), similar as AdvertisedXcmVersion
.
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 stable2412-8
This release contains the changes from polkadot-stable2412-7
to polkadot-stable2412-8
.
ℹ️ 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-8
and matching the old pattern will be available under polkadot-v1.17.8.
The following crates were updated to the corresponding versions:
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
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.
[#8973]: Add polkadot_parachain_peer_connectivity metric
Adds polkadot_parachain_peer_connectivity
histogram metric to better understand connectivity patterns.
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).)
[#9325]: Fix pallet-im-online benchmarking for runtimes with MaxKeys < 1000
Fixes benchmarking for pallet-im-online when runtime configuration has MaxKeys < 1000.
Previously, the benchmark code used a hardcoded constant MAX_KEYS = 1000 which would cause benchmark failures for runtimes configured with fewer maximum keys. This change updates the benchmark to dynamically use the MaxKeys value from the pallet's Config trait.
[#9139]: Expose more constants for pallet-xcm
Exposes more constants (UniversalLocation, MaxLockers, MaxRemoteLockConsumers), similar as AdvertisedXcmVersion
.
[#9137]: Pallet XCM - transfer_assets pre-ahm patch
Pallet XCM's transfer_assets
extrinsic now returns an error when it determines that a reserve transfer of DOT|KSM|WND|PAS has to be done.
This is a safeguard in preparation for the Asset Hub Migration (AHM), where the reserve of DOT|KSM|WND|PAS will change from the Relay Chain to Asset Hub.
After the migration, another patch will remove this error case and use the correct reserve.
The pallet uses the UniversalLocation
configuration to figure out the correct asset being transferred. It's very important to have that configuration correct.
[#9179]: Fix subsume_assets incorrectly merging two AssetsInHolding
Fix subsume_assets incorrectly merging two AssetsInHolding instances under certain conditions,
which caused asset values to be overridden rather than summed.
[#8694]: Fix pallet_migrations benchmark when FailedMigrationHandler emits events
When FailedMigrationHandler emits events, the UpgradeFailed
event is not the last one, so assert_last_event
fails. Fixed by checking that the UpgradeFailed
event is emitted, even if it is not the last one.
[#8179]: Do not make pallet-identity benchmarks signature-dependent
- Includes a
benchmark_helper
configuration function inpallet-identity
to handle signing operations. - Abstracts away the explicit link with SR25519 schema in the benchmarks, allowing chains with a different one to be able to run them and calculate the weights.
- Adds a default implementation that leaves the code equivalent.
- The requirement is for the
AccountId
type of the runtime to implement theDecode
trait
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.
[#9139]: Expose more constants for pallet-xcm
Exposes more constants (UniversalLocation, MaxLockers, MaxRemoteLockConsumers), similar as AdvertisedXcmVersion
.
[#9137]: Pallet XCM - transfer_assets pre-ahm patch
Pallet XCM's transfer_assets
extrinsic now returns an error when it determines that a reserve transfer of DOT|KSM|WND|PAS has to be done.
This is a safeguard in preparation for the Asset Hub Migration (AHM), where the reserve of DOT|KSM|WND|PAS will change from the Relay Chain to Asset Hub.
After the migration, another patch will remove this error case and use the correct reserve.
limited_reserve_transfer_assets
, transfer_assets_using_type_and_then
or execute
should be used instead, since they provide the ability to specify the reserve you want to use.
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 stable2506
This release contains the changes from polkadot-stable2503
to polkadot-stable2506
.
ℹ️ Please note:
The tag corresponding to the current stable release polkadot-stable2506
and matching the old pattern will be available under polkadot-v1.19.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.
[#8533]: fatxpool
: add fallback for ready at light
Add fallback for ready_at_light
for the case of not finding a best view that can be used to return a set of ready transactions. Optimised as well how the best view is searched.
[#8948]: make sure dispute_coordinator/approval-voting parallel can receive priority messages
#8834, changed relay_chain_selection to send priority messages, but did not configured the subsystems to tell they can receive priority messages, with can_receive_priority_messages
flag.
If can_receive_priority_messages
is not specified orchestra falls back when sending a priority message to the normal queue,
so this resulted in the messages not being processed ahead of the others in the queue.
Fix this configuration mistake and add a test to make sure priority messages are consumed ahead of normal ones by the subsystems.
[#7867]: benchmark/storage Make read/write benchmarks more accurate
Improve the benchmark accuracy of read/write costs by making sure for both reads and write we compute the amortized cost of a single key operation, by adding a batch functionality to make sure the cost of common operations like root computation is spread across multiple keys. Additionally, also add a pov-recorder flag, so that we are able to replicate the same environment as parachains do.
[#8973]: Add polkadot_parachain_peer_connectivity metric
Adds polkadot_parachain_peer_connectivity
histogram metric to better understand connectivity patterns.
[#8443]: Stabilize V16 metadata
Metadata V16 is stabilized. V16 metadata exposes information about Pallet View Functions and V5 transactions,
and can be obtained, where applicable, by using the Runtime APIs Metadata_metadata_at_version(16)
.
[#8923]: fatxpool
: fix: remove invalid txs from the dropped stream controller
While testing mortal transaction I encountered exactly the same problem as in #8490.
This PR should fix the problem.
fixes: #8490
[#8072]: RFC-0008: Store parachain bootnodes in the relay chain DHT
Implement RFC-0008 "DHT bootnodes".
With this mechanism, every parachain node is eligible to act as a bootnode. If its peer ID is close to the parachain key for the current relay chain epoch, it becomes discoverable by other parachain nodes via the relay chain DHT. This removes the need to specify bootnodes in the parachain chainspec, eliminating a single point of failure and simplifying things for parachain operators.
The mechanism is enabled by default. The embedded DHT bootnode can be disabled using the --no-dht-bootnode
flag, and discovery of such nodes can be disabled with the --no-dht-bootnode-discovery
flag.
[#8606]: Use hashbrown hashmap/hashset in validation context
Discovered while profiling #6131 (comment) with the benchmark #8069 that when running in validation a big chunk of the time is spent inserting and retrieving data from the BTreeMap/BTreeSet.
By switching to hashbrown HashMap/HashSet in validation TrieCache and TrieRecorder and the memory-db paritytech/trie#221 read costs improve with around ~40% and write with about ~20%
[#9050]: dispute-coordinator: handle race with offchain disabling
Fixes a potential race with off-chain disabling when we learned about disablement after importing a dispute from that validator.
[#8594]: omni-node: fix benchmark pallet
to work with --runtime
polkadot-omni-node benchmark pallet
can use one of --runtime
or --chain
now, like frame-omni-bencher
does.
[#7955]: Add ApprovedPeer UMP signal
Add a new ApprovedPeer UMP signal variant for specifying a peerid that should be credited for authoring and supplying the candidate.
Will be used by the new collator protocol implementation for promoting the reputation of collators. Candidates should still not emit any UMP signals until the CandidateReceiptV2 node feature is enabled.
[#8370]: fix unneeded collator connection issue
This PR fixes an issue where collators continued attempting to connect to validators even after their core assignment was removed, leading to unnecessary connections and log spam An unneeded collator connected
.
The fix ensures collators only connect to validators if there are cores assigned to the parachain.
[#8314]: Add RPCs in the statement store to get the statements and not just the statement data.
In statement-store, statements can contain a proof with the signature of the statement, this proof is useful to assert that the statement comes from the expected account. This proof also signs for all the statements fields, those can also be useful information for the receiver.
This PR adds broadcasts_stmt
, posted_stmt
, and posted_clear_stmt
RPCs to get the full statements from the statement store.
[#8688]: bound trusted local cache to shared limits sizes
Since there is no point in letting local cache grow past the shared cache limits, bound it to those limits.
[#7556]: Add trie cache warmup
Warm up the Trie cache based on a CLI flag to enhance the performance of smart contracts on AssetHub by reducing storage access time.
[#8837]: Cache locally controlled validator indices in dispute-coordinator
dispute-coordinator
uses keystore.key_pair()
to obtain the set of locally controlled validator IDs. This operation happens on each import and is expensive because it involves key generation from a seed phrase. This patch lazily determines the set of locally controlled validator IDs and caches the result for each session.
[#8833]: Check artifact integrity before execution
In case of a corrupted artifact, we can find it out before execution and re-prepare the artifact.
[#9102]: polkadot-omni-node
: pass timestamp inherent data for block import
This should allow aura runtimes to check timestamp inherent data when syncing/importing blocks
that include timestamp inherent data.
Runtime developers can check timestamp inherent data while using polkadot-omni-node-lib
/polkadot-omni-node
/polkadot-parachain
binaries.
This change is backwards compatible and doesn't require runtimes to check the timestamp inherent, but they are able to do it now if needed.
[#8134]: separate validation and collation protocols
This PR completes the removal of validation protocol versions 1 and 2 by separating validation from collation. Previously, a shared Versioned
enum prevented full removal.
With this change, outdated validation messages are now eliminated.
[#8831]: dispute-coordinator: increase lru_observed_blocks_capacity
Under increase load with finality lagging behind there is a risk for blocks to arrive late or out of sequence in that case we will end up scrapping from the received block un till last finalized block and then process all the dispute in-between.
This couple with other inefficiencies like #8823 will increase unnecessarily the load on dispute-coordinator.
Decided to make this super large to err on the cautious side, the Hash size is only 32 bytes, so this will make the LRU grow up to 65k, which I don't think is a significant increase.
[#9094]: bitfield_distribution: fix subsystem clogged at begining of a session
handle_peer_view_change
gets called on NewGossipTopology with the existing view of the peer to cover for the case when the topology might arrive late, but in that case in the view will contain old blocks from previous session, so since the X/Y neighbour change because of the topology change you end up sending a lot of messages for blocks before the session changed.
Fix it by checking the send message only for relay chains that are in the same session as the current topology.
[#8332]: parachain informant
Adds a new cumulus-relay-chain-streams
crate to make it easier to reuse relay chain streams.
[#8839]: net/discovery: File persistence for AddrCache
Persisting the AddrCache periodically (every 10 minutes) and on worker shutdown. Read AddrCache from file upon launch of worker.
AddrCache is saved as authority_discovery_addr_cache.json in the
folder configured by net_config_path of NetworkConfiguration.
This reduces the time it takes for a node to reconnect to peers after restart.
[#9264]: gossip-support: make low connectivity message an error
All is not well when a validator is not properly connected, e.g: of things that might happen:
- Finality might be slightly delay because validator will be no-show because they can't retrieve PoVs to validate approval work: #8915.
- When they author blocks they won't back things because gossiping of backing statements happen using the grid topology:, e.g blocks authored by validators with a low number of peers:
https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc-polkadot.helixstreet.io#/explorer/query/26931262
https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc-polkadot.helixstreet....