Releases: paritytech/polkadot-sdk
Release list
Polkadot stable2606
This release contains the changes from polkadot-stable2603 to polkadot-stable2606.
ℹ️ Please note:
The tag corresponding to the current stable release polkadot-stable2606 and matching the old pattern will be
available under polkadot-v1.24.0.
The node version for this release is: 1.24.0
Changelog
Full changelog can be found here
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.
[#12080]: fix(statement-network): split peer metric by kind
Impl #12060
Summary
- Change
substrate_sync_statement_peers_connectedfrom a plain gauge to aGaugeVeclabelled bykind - Report statement protocol peers as
kind="full"orkind="light"
[#11415]: Statement store e2e integration tests lite person setup
Summary
- Add a lite person registration test that exercises the full PeopleLite::attest flow on a live parachain, including ring-VRF key generation, attestation, and subsequent statement submission.
[#10477]: Block Bundling Node Side
Implements the node-side logic for block bundling (aka 500ms blocks) in parachains.
The main changes are in the slot-based collator: instead of building one block per core, blocks are built as requested and distributed over the available cores.
[#11701]: statement-store: Test flooding detection
Fixed a bug with double peer state cleanup. Added two zombienet integration tests that verify statement-store flooding detection
[#11107]: Add runtime metadata detection for Aura authority ID
Adds optional runtime metadata-based detection for Aura authority ID types in polkadot-omni-node-lib.
When metadata is available, the node detects whether Aura uses sr25519 or ed25519 directly from the runtime. If detection fails or metadata is unavailable, it falls back to chain spec ID heuristics.
A warning is emitted when the Aura authority ID type is not found in metadata.
[#11685]: Pass NodeExtraArgs through Dev Chain
Enables the statement store when running polkadot-omni-node in dev mode with --enable-statement-store.
The dev Aura node path now wires the statement store the same way as the regular node path: it registers the statement network protocol, builds the store, exposes the RPCs, and passes the statement store extension into offchain workers.
Also wires up the storage monitor in dev mode and emits warnings when collation-specific flags (--authoring-policy, --export-pov, --max-pov-percentage) are passed in dev mode where they have no effect.
NodeExtraArgs is now destructured in start_dev_node so the compiler will enforce that any newly added fields are explicitly handled.
[#12038]: Network: Add bitswap client
Adds a Bitswap client API to sc-network for fetching CID-addressed blocks from a peer over the native litep2p Bitswap protocol. The public API is block-fetch only and reports per-CID outcomes as either delivered bytes or "missing"; on-wire presence (HAVE / DONT_HAVE) is handled internally and is not part of the public surface.
[#11387]: docs/async_back: Align docs to latest behavior
Tiny PR to update the async backing documentation / guidelines:
- older params are no longer used
async_backing_params - UNINCLUDED_SEGMENT_CAPACITY is now 3
- no need for
experimentalfeature flags
Closes: #8804
[#12207]: statement-store: remove unused Proof::OnChain variant
Removes the Proof::OnChain variant from sp_statement_store::Proof because it was unused.
[#12113]: Aura: Fetch slot duration at parent and not best block
Fetch the slot duration from the parent we are building on top of and not from the best block.
[#11967]: Experimental collator protocol — leaf-authoritative capacity tracking
Reworks the experimental collator protocol's validator side around a leaf-authoritative capacity model. The leaf's per-core claim queue is the single source of truth; capacity at every scheduling parent (SP) on a path to that leaf is derived via offset arithmetic.
Behavior changes vs. master:
-
Rotation-boundary bug fixed. After a group rotation, candidates for both the pre-rotation core's para (advertised at the pre-rotation leaf) and the post-rotation core's para (at the post-rotation leaf) are accepted. Previously, rotation caused claim-queue state for the old core to be overwritten and ancestor-rooted advertisements to be wrongly rejected.
-
Fork-aware view cleanup. When a leaf is dropped, SPs are removed from
per_scheduling_parent(with their in-flight fetches cancelled) only when no remaining leaf still references them. Previously, sibling-fork retention in implicit-view storage could leave SPs orphaned with leaked in-flight fetches. -
Free-slot accounting tightened to the current leaf. Assignments and free CQ positions now reflect only what the current leaf's CQ actually predicts. Previously, claim-queue state for already-produced ancestor blocks lingered until those blocks were pruned, so paras and slots that had already been backed on-chain were still reported as open — keeping peers connected past their relevance and offering capacity for slots that could no longer be filled.
Internals: the previous ClaimQueueState / PerLeafClaimQueueState machinery is gone (~2200 LoC deleted). Capacity is now computed per-(leaf, core) by build_leaf_core_cqs as a Vec<LeafCoreCq>, where each LeafCoreCq holds the leaf's CQ as
Vec<Option<ParaId>> (consumed positions cleared to None) and an sps_by_depth: Vec<Option<Hash>> masking cross-core ancestors. The fetch planner walks free CQ positions back-to-front and picks the best advertisement among same-core SPs whose
window reaches that position.
Test coverage in validator_side_experimental/tests.rs:
core_rotation_accepts_candidates_for_both_cores— regression for the original rotation-boundary bug.- Five active-fork tests covering: assignment union across leaves, longest-window capacity at a common ancestor across different-length forks, no double-counting of in-flight candidates across sibling forks, and reclamation of capacity / peer disconnection when a
fork is dropped. - Two linear multi-SP tests pinning over-fetch and under-fetch invariants when ancestor and leaf SPs share the same per-core CQ.
- Tests for cross-SP reputation arbitration and cross-core slot-reservation correctness.
- Three previously-existing tests rewritten to assert the same intent against the new model.
No public API changes; behavior change is contained to the experimental validator side.
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).)
[#11922]: Update merkle mountain lib
Updates the merkle mountain crate to its latest version.
[#11616]: Move era reward minting from staking to DAP
Introduces dual-mode era rewards in pallet-staking-async, controlled by Config::DisableMinting:
true(non-minting): staking expects an external source to fund a general reward pot. At era boundary, the balance is snapshotted into an era-specific pot. Payouts transfer from the pot. Unclaimed rewards returned viaUnclaimedRewardHandler.false(legacy minting):EraPayoutcomputes inflation, tokens minted on payout, remainder sent toRewardRemainder. Kept for Kusama compatibility.
Switching from legacy to non-minting is irreversible.
New config: DisableMinting, UnclaimedRewardHandler, GeneralPots, EraPots, StakerRewardCalculator. New storage: MaxCommission, DisableMintingGuard.
New extrinsic: set_max_commission.
Runtimes using non-minting mode provide an IssuanceCurve impl to DAP and register StakerRewardRecipient as a budget recipient. DAP storage version bumped to V2 with migration.
[#12225]: pallet-revive: map account in prepare_dry_run
Summary
- Map the origin account in
prepare_dry_runwhen it is not already mapped, so dry-running contract calls/instantiations does not fail withAccountUnmappedfor callers that never registered a mapping.
[#12115]: pallet-revive: recalibrate contains_storage benchmark
The contains_storage benchmark now exercises the persistent storage path, matching how WeightInfo::contains_storage is dispatched from the precompile. The transient path remains benchmarked separately as seal_contains_transient_storage.
Also the clear_storage, contains_storage, take_storage and the transient clear/contains benchmarks now size their pre-existing value by n.
[#11770]: Fix PSM migration to run on first deployment
Replaces the versioned MigrateToV1 with an idempotent InitializePsm migration.
The previous MigrateToV1 used VersionedMigration<0, 1> which never ran on fresh deployments because BeforeAllRuntimeMigrations initializes the on-chain storage version to the in-code version (1) before migrations execute, causing the version check to skip.
InitializePsm instead checks whether each external asset already exists and skips it if so. This makes it safe to run multiple times with no storage version dependency.
[#12027]: Extend PGAS filter to allow batches
Just as the title says.
[#11881]: Make pallet-dap-satellite more generic
The DAP satellite pallet is being converted into a generic Accumulate-and-Forward pallet, with the purpose of pooling to...
Polkadot polakdot-stable2606-rc3
This release contains the changes from polkadot-stable2603 to polkadot-stable2606-rc3.
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.
[#12080]: fix(statement-network): split peer metric by kind
Impl #12060
Summary
- Change
substrate_sync_statement_peers_connectedfrom a plain gauge to aGaugeVeclabelled bykind - Report statement protocol peers as
kind="full"orkind="light"
[#11415]: Statement store e2e integration tests lite person setup
Summary
- Add a lite person registration test that exercises the full PeopleLite::attest flow on a live parachain, including ring-VRF key generation, attestation, and subsequent statement submission.
[#10477]: Block Bundling Node Side
Implements the node-side logic for block bundling (aka 500ms blocks) in parachains.
The main changes are in the slot-based collator: instead of building one block per core,
blocks are built as requested and distributed over the available cores.
[#11701]: statement-store: Test flooding detection
Fixed a bug with double peer state cleanup. Added two zombienet integration tests that verify statement-store flooding detection
[#11107]: Add runtime metadata detection for Aura authority ID
Adds optional runtime metadata-based detection for Aura authority ID types in polkadot-omni-node-lib.
When metadata is available, the node detects whether Aura uses sr25519 or ed25519
directly from the runtime. If detection fails or metadata is unavailable, it falls
back to chain spec ID heuristics.
A warning is emitted when the Aura authority ID type is not found in metadata.
[#11685]: Pass NodeExtraArgs through Dev Chain
Enables the statement store when running polkadot-omni-node in dev mode with
--enable-statement-store.
The dev Aura node path now wires the statement store the same way as the regular node path:
it registers the statement network protocol, builds the store, exposes the RPCs, and passes
the statement store extension into offchain workers.
Also wires up the storage monitor in dev mode and emits warnings when
collation-specific flags (--authoring-policy, --export-pov,
--max-pov-percentage) are passed in dev mode where they have no effect.
NodeExtraArgs is now destructured in start_dev_node so the compiler
will enforce that any newly added fields are explicitly handled.
[#12038]: Network: Add bitswap client
Adds a Bitswap client API to sc-network for fetching CID-addressed blocks
from a peer over the native litep2p Bitswap protocol. The public API is
block-fetch only and reports per-CID outcomes as either delivered bytes or
"missing"; on-wire presence (HAVE / DONT_HAVE) is handled internally
and is not part of the public surface.
[#11387]: docs/async_back: Align docs to latest behavior
Tiny PR to update the async backing documentation / guidelines:
- older params are no longer used
async_backing_params - UNINCLUDED_SEGMENT_CAPACITY is now 3
- no need for
experimentalfeature flags
Closes: #8804
[#12207]: statement-store: remove unused Proof::OnChain variant
Removes the Proof::OnChain variant from sp_statement_store::Proof because it
was unused.
[#12113]: Aura: Fetch slot duration at parent and not best block
Fetch the slot duration from the parent we are building on top of and not from the best block.
[#11967]: Experimental collator protocol — leaf-authoritative capacity tracking
Reworks the experimental collator protocol's validator side around a leaf-authoritative
capacity model. The leaf's per-core claim queue is the single source of truth; capacity at
every scheduling parent (SP) on a path to that leaf is derived via offset arithmetic.
Behavior changes vs. master:
-
Rotation-boundary bug fixed. After a group rotation, candidates for both the
pre-rotation core's para (advertised at the pre-rotation leaf) and the post-rotation
core's para (at the post-rotation leaf) are accepted. Previously, rotation caused
claim-queue state for the old core to be overwritten and ancestor-rooted advertisements
to be wrongly rejected. -
Fork-aware view cleanup. When a leaf is dropped, SPs are removed from
per_scheduling_parent(with their in-flight fetches cancelled) only when no remaining
leaf still references them. Previously, sibling-fork retention in implicit-view storage
could leave SPs orphaned with leaked in-flight fetches. -
Free-slot accounting tightened to the current leaf. Assignments and free CQ
positions now reflect only what the current leaf's CQ actually predicts. Previously,
claim-queue state for already-produced ancestor blocks lingered until those blocks were
pruned, so paras and slots that had already been backed on-chain were still reported as
open — keeping peers connected past their relevance and offering capacity for slots that
could no longer be filled.
Internals: the previous ClaimQueueState / PerLeafClaimQueueState machinery is gone
(~2200 LoC deleted). Capacity is now computed per-(leaf, core) by build_leaf_core_cqs
as a Vec<LeafCoreCq>, where each LeafCoreCq holds the leaf's CQ as
Vec<Option<ParaId>> (consumed positions cleared to None) and an
sps_by_depth: Vec<Option<Hash>> masking cross-core ancestors. The fetch planner walks
free CQ positions back-to-front and picks the best advertisement among same-core SPs whose
window reaches that position.
Test coverage in validator_side_experimental/tests.rs:
core_rotation_accepts_candidates_for_both_cores— regression for the original
rotation-boundary bug.- Five active-fork tests covering: assignment union across leaves, longest-window capacity
at a common ancestor across different-length forks, no double-counting of in-flight
candidates across sibling forks, and reclamation of capacity / peer disconnection when a
fork is dropped. - Two linear multi-SP tests pinning over-fetch and under-fetch invariants when ancestor
and leaf SPs share the same per-core CQ. - Tests for cross-SP reputation arbitration and cross-core slot-reservation correctness.
- Three previously-existing tests rewritten to assert the same intent against the new
model.
No public API changes; behavior change is contained to the experimental validator side.
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).)
[#11922]: Update merkle mountain lib
Updates the merkle mountain crate to its latest version.
[#11616]: Move era reward minting from staking to DAP
Introduces dual-mode era rewards in pallet-staking-async, controlled by
Config::DisableMinting:
true(non-minting): staking expects an external source to fund a general reward
pot. At era boundary, the balance is snapshotted into an era-specific pot. Payouts
transfer from the pot. Unclaimed rewards returned viaUnclaimedRewardHandler.false(legacy minting):EraPayoutcomputes inflation, tokens minted on payout,
remainder sent toRewardRemainder. Kept for Kusama compatibility.
Switching from legacy to non-minting is irreversible.
New config: DisableMinting, UnclaimedRewardHandler, GeneralPots, EraPots,
StakerRewardCalculator. New storage: MaxCommission, DisableMintingGuard.
New extrinsic: set_max_commission.
Runtimes using non-minting mode provide an IssuanceCurve impl to DAP and
register StakerRewardRecipient as a budget recipient. DAP storage version
bumped to V2 with migration.
[#12225]: pallet-revive: map account in prepare_dry_run
Summary
- Map the origin account in
prepare_dry_runwhen it is not already mapped, so dry-running contract calls/instantiations does not fail withAccountUnmappedfor callers that never registered a mapping.
Test plan
- CI passes
[#12115]: pallet-revive: recalibrate contains_storage benchmark
The contains_storage benchmark now exercises the persistent storage path, matching how WeightInfo::contains_storage is dispatched from the precompile. The transient path remains benchmarked separately as seal_contains_transient_storage.
Also the clear_storage, contains_storage, take_storage and the transient clear/contains benchmarks now size their pre-existing value by n.
[#11770]: Fix PSM migration to run on first deployment
Replaces the versioned MigrateToV1 with an idempotent InitializePsm migration.
The previous MigrateToV1 used VersionedMigration<0, 1> which never ran on fresh
deployments because BeforeAllRuntimeMigrations initializes the on-chain storage
version to the in-code version (1) before migrations execute, causing the version
check to skip.
InitializePsm instead checks whether each external asset already exists and skips
it if so. This makes it safe to run multiple times with no st...
Polkadot stable2603-4
This release contains the changes from polkadot-stable2603-3 to polkadot-stable2603-4.
ℹ️ Please note:
This is a patch release for the latest stable version: stable2603. If your nodes are already running on this stable release,
you should upgrade to this patch version to get the latest fixes.
The tag corresponding to the current patch release polkadot-stable2603-4 and matching the old pattern will be
available under polkadot-v1.22.4.
The node version for this release is: v1.22.4
The following crates were updated to the corresponding versions:
Crates list
- pallet-beefy-mmr@47.1.0
- cumulus-pallet-xcmp-queue@0.26.1
- collectives-westend-runtime@26.1.1
- coretime-westend-runtime@0.22.2
- asset-hub-rococo-runtime@0.32.1
- asset-hub-westend-runtime@0.45.1
- bridge-hub-rococo-runtime@0.28.1
- bridge-hub-westend-runtime@0.25.1
- cumulus-client-consensus-aura@0.29.2
- snowbridge-beacon-primitives@0.19.1
- staging-xcm-executor@25.2.0
- snowbridge-runtime-common@0.20.1
- cumulus-primitives-utility@0.26.1
- bridge-hub-westend-runtime@0.25.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.
[#12113]: Aura: Fetch slot duration at parent and not best block
Fetch the slot duration from the parent we are building on top of and not from the best block.
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).)
[#11910]: XCM hardening - fix some regressions
This PR fixes some regressions, improves code and adds more defense-in-depth in a couple places.
xcm-executor: drain holdings by ownership in deposit_assets_with_retry
Add AssetsInHolding::into_per_asset_holdings() and use it in deposit_assets_with_retry so each pass consumes the input via owning BTreeMap/BTreeSet iterators instead of assets_iter().collect() + try_take. Per asset this drops one AssetId clone, one or two BTreeMap lookups, one dynamic dispatch on saturating_take, and one internal subsume_assets call; per pass it drops the intermediate Vec<Asset> allocation. Behaviour is unchanged: same iteration order, same partial-failure / retry semantics.
xcm-executor: remove now dead code related do dust deposit errors
deposit_assets_with_retry previously tried to silently drop "dust" (below-minimum) deposit failures, comparing the returned XcmError string against the canonical TokenError::BelowMinimum text. After PR #10384 within FungiblesAdapter::deposit_asset the underlying DispatchError is discarded and the adapter returns XcmError::FailedToTransactAsset("") - an empty string. The dust check never matched, so classifying the error is no longer possible.
Remove the special handling of dust deposit errors (which can no longer be identified from returned error), and treat all errors the same.
xcm-executor: rollback all side-effects of partial instruction execution
Defense-in-depth: higher components in the stack leading up to xcm-executor are already using
transactional layers to discard all state side effects on failed execution, but even so, this
commit adds defense-in-depth by making sure even at the xcm-executor level, side effects are
properly cleaned up on error.
cumulus/utility: fix inverted ED guard in TakeFirstAssetTrader::refund_weight
The else-branch was refunding ED to the user and leaving sub-ED dust for the OnUnbalanced drop handler, the inverse of the intended behavior.
Refund outstanding - ED instead so the handler keeps at least ED (or all of it when outstanding < ED), preventing silent fee burns.
This was actually a bug, but TakeFirstAssetTrader is not used by any production runtimes.
snowbridge: short-circuit on register-token error path
Minor optimization and defense-in-depth - short-circuit on errors and don't directly compare Options.
snowbridge: harden BLS public key deserialisation
Defense-in-depth: validate all cryptographic inputs.
The Merkle proof binding means the public keys must match exactly what the Ethereum beacon chain committed. Since the beacon chain itself enforces G1 subgroup membership for validator keys, invalid subgroup points cannot appear in honest beacon chain state.
An attacker would need to compromise the Merkle proof verification (e.g., via a SHA-256 collision or another bug in the verification chain) to inject a public key that is on the BLS12-381 curve but not in the G1 subgroup.
The performance cost of the subgroup check is a one-time cost during sync committee preparation (512 checks per sync committee period, approximately every 27 hours). This is negligible compared to the BLS signature verification that occurs on every update. So just check it as defense-in-depth.
[#12214]: pallet-beefy-mmr: align ECDSA→ETH failure sentinel between converter and consumer
BeefyEcdsaToEthereum returned an empty Vec on conversion failure, while compute_authority_set counted failures by matching [0u8; 20].
Extract the sentinel into a shared FAILED_BEEFY_TO_ETH_ADDRESS constant referenced by both sites.
Fix mock_beefy_id to derive valid ECDSA keys so tests exercise the happy path as well as the failure branch.
[#12176]: xcmp-queue: Store the bytes in the channel status
This improves the performance of xcmp-queue by not requiring to check all pages individually.
Rust compiler versions
This release was built and tested against the following versions of rustc.
Other versions may work.
- Rust Stable:
1.93.0
Docker images
The docker images for the polkadot node binary and the polkadot-parachain binary can be found at Docker hub (will be available a few minutes after the release has been published):
You may also pull it with:
docker pull parity/polkadot:stable2603-4
or
docker pull parity/polkadot-parachain:stable2603-4
Polkadot polkadot-stable2606-rc2
This release contains the changes from polkadot-stable2603 to polkadot-stable2606-rc2.
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.
[#12080]: fix(statement-network): split peer metric by kind
Impl #12060
Summary
- Change
substrate_sync_statement_peers_connectedfrom a plain gauge to aGaugeVeclabelled bykind - Report statement protocol peers as
kind="full"orkind="light"
[#11415]: Statement store e2e integration tests lite person setup
Summary
- Add a lite person registration test that exercises the full PeopleLite::attest flow on a live parachain, including ring-VRF key generation, attestation, and subsequent statement submission.
[#10477]: Block Bundling Node Side
Implements the node-side logic for block bundling (aka 500ms blocks) in parachains.
The main changes are in the slot-based collator: instead of building one block per core,
blocks are built as requested and distributed over the available cores.
[#11701]: statement-store: Test flooding detection
Fixed a bug with double peer state cleanup. Added two zombienet integration tests that verify statement-store flooding detection
[#11107]: Add runtime metadata detection for Aura authority ID
Adds optional runtime metadata-based detection for Aura authority ID types in polkadot-omni-node-lib.
When metadata is available, the node detects whether Aura uses sr25519 or ed25519
directly from the runtime. If detection fails or metadata is unavailable, it falls
back to chain spec ID heuristics.
A warning is emitted when the Aura authority ID type is not found in metadata.
[#11685]: Pass NodeExtraArgs through Dev Chain
Enables the statement store when running polkadot-omni-node in dev mode with
--enable-statement-store.
The dev Aura node path now wires the statement store the same way as the regular node path:
it registers the statement network protocol, builds the store, exposes the RPCs, and passes
the statement store extension into offchain workers.
Also wires up the storage monitor in dev mode and emits warnings when
collation-specific flags (--authoring-policy, --export-pov,
--max-pov-percentage) are passed in dev mode where they have no effect.
NodeExtraArgs is now destructured in start_dev_node so the compiler
will enforce that any newly added fields are explicitly handled.
[#12038]: Network: Add bitswap client
Adds a Bitswap client API to sc-network for fetching CID-addressed blocks
from a peer over the native litep2p Bitswap protocol. The public API is
block-fetch only and reports per-CID outcomes as either delivered bytes or
"missing"; on-wire presence (HAVE / DONT_HAVE) is handled internally
and is not part of the public surface.
[#11387]: docs/async_back: Align docs to latest behavior
Tiny PR to update the async backing documentation / guidelines:
- older params are no longer used
async_backing_params - UNINCLUDED_SEGMENT_CAPACITY is now 3
- no need for
experimentalfeature flags
Closes: #8804
[#12207]: statement-store: remove unused Proof::OnChain variant
Removes the Proof::OnChain variant from sp_statement_store::Proof because it
was unused.
[#12113]: Aura: Fetch slot duration at parent and not best block
Fetch the slot duration from the parent we are building on top of and not from the best block.
[#11967]: Experimental collator protocol — leaf-authoritative capacity tracking
Reworks the experimental collator protocol's validator side around a leaf-authoritative
capacity model. The leaf's per-core claim queue is the single source of truth; capacity at
every scheduling parent (SP) on a path to that leaf is derived via offset arithmetic.
Behavior changes vs. master:
-
Rotation-boundary bug fixed. After a group rotation, candidates for both the
pre-rotation core's para (advertised at the pre-rotation leaf) and the post-rotation
core's para (at the post-rotation leaf) are accepted. Previously, rotation caused
claim-queue state for the old core to be overwritten and ancestor-rooted advertisements
to be wrongly rejected. -
Fork-aware view cleanup. When a leaf is dropped, SPs are removed from
per_scheduling_parent(with their in-flight fetches cancelled) only when no remaining
leaf still references them. Previously, sibling-fork retention in implicit-view storage
could leave SPs orphaned with leaked in-flight fetches. -
Free-slot accounting tightened to the current leaf. Assignments and free CQ
positions now reflect only what the current leaf's CQ actually predicts. Previously,
claim-queue state for already-produced ancestor blocks lingered until those blocks were
pruned, so paras and slots that had already been backed on-chain were still reported as
open — keeping peers connected past their relevance and offering capacity for slots that
could no longer be filled.
Internals: the previous ClaimQueueState / PerLeafClaimQueueState machinery is gone
(~2200 LoC deleted). Capacity is now computed per-(leaf, core) by build_leaf_core_cqs
as a Vec<LeafCoreCq>, where each LeafCoreCq holds the leaf's CQ as
Vec<Option<ParaId>> (consumed positions cleared to None) and an
sps_by_depth: Vec<Option<Hash>> masking cross-core ancestors. The fetch planner walks
free CQ positions back-to-front and picks the best advertisement among same-core SPs whose
window reaches that position.
Test coverage in validator_side_experimental/tests.rs:
core_rotation_accepts_candidates_for_both_cores— regression for the original
rotation-boundary bug.- Five active-fork tests covering: assignment union across leaves, longest-window capacity
at a common ancestor across different-length forks, no double-counting of in-flight
candidates across sibling forks, and reclamation of capacity / peer disconnection when a
fork is dropped. - Two linear multi-SP tests pinning over-fetch and under-fetch invariants when ancestor
and leaf SPs share the same per-core CQ. - Tests for cross-SP reputation arbitration and cross-core slot-reservation correctness.
- Three previously-existing tests rewritten to assert the same intent against the new
model.
No public API changes; behavior change is contained to the experimental validator side.
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).)
[#11922]: Update merkle mountain lib
Updates the merkle mountain crate to its latest version.
[#11616]: Move era reward minting from staking to DAP
Introduces dual-mode era rewards in pallet-staking-async, controlled by
Config::DisableMinting:
true(non-minting): staking expects an external source to fund a general reward
pot. At era boundary, the balance is snapshotted into an era-specific pot. Payouts
transfer from the pot. Unclaimed rewards returned viaUnclaimedRewardHandler.false(legacy minting):EraPayoutcomputes inflation, tokens minted on payout,
remainder sent toRewardRemainder. Kept for Kusama compatibility.
Switching from legacy to non-minting is irreversible.
New config: DisableMinting, UnclaimedRewardHandler, GeneralPots, EraPots,
StakerRewardCalculator. New storage: MaxCommission, DisableMintingGuard.
New extrinsic: set_max_commission.
Runtimes using non-minting mode provide an IssuanceCurve impl to DAP and
register StakerRewardRecipient as a budget recipient. DAP storage version
bumped to V2 with migration.
[#12225]: pallet-revive: map account in prepare_dry_run
Summary
- Map the origin account in
prepare_dry_runwhen it is not already mapped, so dry-running contract calls/instantiations does not fail withAccountUnmappedfor callers that never registered a mapping.
Test plan
- CI passes
[#12115]: pallet-revive: recalibrate contains_storage benchmark
The contains_storage benchmark now exercises the persistent storage path, matching how WeightInfo::contains_storage is dispatched from the precompile. The transient path remains benchmarked separately as seal_contains_transient_storage.
Also the clear_storage, contains_storage, take_storage and the transient clear/contains benchmarks now size their pre-existing value by n.
[#11770]: Fix PSM migration to run on first deployment
Replaces the versioned MigrateToV1 with an idempotent InitializePsm migration.
The previous MigrateToV1 used VersionedMigration<0, 1> which never ran on fresh
deployments because BeforeAllRuntimeMigrations initializes the on-chain storage
version to the in-code version (1) before migrations execute, causing the version
check to skip.
InitializePsm instead checks whether each external asset already exists and skips
it if so. This makes it safe to run multiple times with no st...
Polkadot stable2512-6
This release contains the changes from polkadot-stable2512-5 to polkadot-stable2512-6.
ℹ️ Please note:
stable2512 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-stable2512-6 and matching the old pattern will be
available under polkadot-v1.21.6.
The following crates were updated to the corresponding versions:
Crates list
- cumulus-pallet-xcmp-queue@0.25.1
- collectives-westend-runtime@25.0.1
- coretime-rococo-runtime@0.21.1
- coretime-westend-runtime@0.21.1
- people-rococo-runtime@0.21.1
- asset-hub-rococo-runtime@0.34.1
- asset-hub-westend-runtime@0.46.1
- bridge-hub-rococo-runtime@0.29.1
- bridge-hub-westend-runtime@0.26.1
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).)
[#12176]: xcmp-queue: Store the bytes in the channel status
This improves the performance of xcmp-queue by not requiring to check all pages individually.
Rust compiler versions
This release was built and tested against the following versions of rustc.
Other versions may work.
- Rust Stable:
1.88.0
Polkadot stable2509-9
This release contains the changes from polkadot-stable2509-8 to polkadot-stable2509-9.
ℹ️ Please note:
stable2509 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-stable2509-9 and matching the old pattern will be
available under polkadot-v1.20.9.
The following crates were updated to the corresponding versions:
Crates list
- cumulus-pallet-xcmp-queue@0.23.1
- pallet-assets-precompiles@0.2.1
- collectives-westend-runtime@23.0.1
- coretime-rococo-runtime@0.19.1
- coretime-westend-runtime@0.19.1
- people-rococo-runtime@0.19.1
- asset-hub-rococo-runtime@0.29.1
- asset-hub-westend-runtime@0.36.4
- bridge-hub-rococo-runtime@0.23.2
- bridge-hub-westend-runtime@0.20.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).)
[#12176]: xcmp-queue: Store the bytes in the channel status
This improves the performance of xcmp-queue by not requiring to check all pages individually.
Rust compiler versions
This release was built and tested against the following versions of rustc.
Other versions may work.
- Rust Stable:
1.88.0
Polkadot stable2506-12
This release contains the changes from polkadot-stable2506-11 to polkadot-stable2506-12.
ℹ️ Please note:
stable2506 and contains only patches and fixes to the crates (list
below). No binary or docker images will be provided for this release. This version's support cycle has come to an end, and it will no longer be supported.
The tag corresponding to the current patch release polkadot-stable2506-12 and matching the old pattern will be
available under polkadot-v1.19.12.
The following crates were updated to the corresponding versions:
Crates list
- sc-network-sync@0.50.1
- pallet-assets@43.0.1
- cumulus-pallet-xcmp-queue@0.21.2
- collectives-westend-runtime@20.0.2
- coretime-rococo-runtime@0.16.1
- coretime-westend-runtime@0.16.1
- people-rococo-runtime@0.16.1
- asset-hub-rococo-runtime@0.26.2
- asset-hub-westend-runtime@0.32.2
- bridge-hub-rococo-runtime@0.20.1
- bridge-hub-westend-runtime@0.17.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.
[#12017]: Improve the sync
We should not panic and handle it more gracefully.
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).)
[#12176]: xcmp-queue: Store the bytes in the channel status
This improves the performance of xcmp-queue by not requiring to check all pages individually.
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 stable2606-rc1
This release contains the changes from polkadot-stable2603 to polkadot-stable2606-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.
[#12080]: fix(statement-network): split peer metric by kind
Impl #12060
Summary
- Change
substrate_sync_statement_peers_connectedfrom a plain gauge to aGaugeVeclabelled bykind - Report statement protocol peers as
kind="full"orkind="light"
[#11415]: Statement store e2e integration tests lite person setup
Summary
- Add a lite person registration test that exercises the full PeopleLite::attest flow on a live parachain, including ring-VRF key generation, attestation, and subsequent statement submission.
[#10477]: Block Bundling Node Side
Implements the node-side logic for block bundling (aka 500ms blocks) in parachains.
The main changes are in the slot-based collator: instead of building one block per core,
blocks are built as requested and distributed over the available cores.
[#11701]: statement-store: Test flooding detection
Fixed a bug with double peer state cleanup. Added two zombienet integration tests that verify statement-store flooding detection
[#11107]: Add runtime metadata detection for Aura authority ID
Adds optional runtime metadata-based detection for Aura authority ID types in polkadot-omni-node-lib.
When metadata is available, the node detects whether Aura uses sr25519 or ed25519
directly from the runtime. If detection fails or metadata is unavailable, it falls
back to chain spec ID heuristics.
A warning is emitted when the Aura authority ID type is not found in metadata.
[#11685]: Pass NodeExtraArgs through Dev Chain
Enables the statement store when running polkadot-omni-node in dev mode with
--enable-statement-store.
The dev Aura node path now wires the statement store the same way as the regular node path:
it registers the statement network protocol, builds the store, exposes the RPCs, and passes
the statement store extension into offchain workers.
Also wires up the storage monitor in dev mode and emits warnings when
collation-specific flags (--authoring-policy, --export-pov,
--max-pov-percentage) are passed in dev mode where they have no effect.
NodeExtraArgs is now destructured in start_dev_node so the compiler
will enforce that any newly added fields are explicitly handled.
[#12038]: Network: Add bitswap client
Adds a Bitswap client API to sc-network for fetching CID-addressed blocks
from a peer over the native litep2p Bitswap protocol. The public API is
block-fetch only and reports per-CID outcomes as either delivered bytes or
"missing"; on-wire presence (HAVE / DONT_HAVE) is handled internally
and is not part of the public surface.
[#11387]: docs/async_back: Align docs to latest behavior
Tiny PR to update the async backing documentation / guidelines:
- older params are no longer used
async_backing_params - UNINCLUDED_SEGMENT_CAPACITY is now 3
- no need for
experimentalfeature flags
Closes: #8804
[#12207]: statement-store: remove unused Proof::OnChain variant
Removes the Proof::OnChain variant from sp_statement_store::Proof because it
was unused.
[#12113]: Aura: Fetch slot duration at parent and not best block
Fetch the slot duration from the parent we are building on top of and not from the best block.
[#11967]: Experimental collator protocol — leaf-authoritative capacity tracking
Reworks the experimental collator protocol's validator side around a leaf-authoritative
capacity model. The leaf's per-core claim queue is the single source of truth; capacity at
every scheduling parent (SP) on a path to that leaf is derived via offset arithmetic.
Behavior changes vs. master:
-
Rotation-boundary bug fixed. After a group rotation, candidates for both the
pre-rotation core's para (advertised at the pre-rotation leaf) and the post-rotation
core's para (at the post-rotation leaf) are accepted. Previously, rotation caused
claim-queue state for the old core to be overwritten and ancestor-rooted advertisements
to be wrongly rejected. -
Fork-aware view cleanup. When a leaf is dropped, SPs are removed from
per_scheduling_parent(with their in-flight fetches cancelled) only when no remaining
leaf still references them. Previously, sibling-fork retention in implicit-view storage
could leave SPs orphaned with leaked in-flight fetches. -
Free-slot accounting tightened to the current leaf. Assignments and free CQ
positions now reflect only what the current leaf's CQ actually predicts. Previously,
claim-queue state for already-produced ancestor blocks lingered until those blocks were
pruned, so paras and slots that had already been backed on-chain were still reported as
open — keeping peers connected past their relevance and offering capacity for slots that
could no longer be filled.
Internals: the previous ClaimQueueState / PerLeafClaimQueueState machinery is gone
(~2200 LoC deleted). Capacity is now computed per-(leaf, core) by build_leaf_core_cqs
as a Vec<LeafCoreCq>, where each LeafCoreCq holds the leaf's CQ as
Vec<Option<ParaId>> (consumed positions cleared to None) and an
sps_by_depth: Vec<Option<Hash>> masking cross-core ancestors. The fetch planner walks
free CQ positions back-to-front and picks the best advertisement among same-core SPs whose
window reaches that position.
Test coverage in validator_side_experimental/tests.rs:
core_rotation_accepts_candidates_for_both_cores— regression for the original
rotation-boundary bug.- Five active-fork tests covering: assignment union across leaves, longest-window capacity
at a common ancestor across different-length forks, no double-counting of in-flight
candidates across sibling forks, and reclamation of capacity / peer disconnection when a
fork is dropped. - Two linear multi-SP tests pinning over-fetch and under-fetch invariants when ancestor
and leaf SPs share the same per-core CQ. - Tests for cross-SP reputation arbitration and cross-core slot-reservation correctness.
- Three previously-existing tests rewritten to assert the same intent against the new
model.
No public API changes; behavior change is contained to the experimental validator side.
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).)
[#11922]: Update merkle mountain lib
Updates the merkle mountain crate to its latest version.
[#11616]: Move era reward minting from staking to DAP
Introduces dual-mode era rewards in pallet-staking-async, controlled by
Config::DisableMinting:
true(non-minting): staking expects an external source to fund a general reward
pot. At era boundary, the balance is snapshotted into an era-specific pot. Payouts
transfer from the pot. Unclaimed rewards returned viaUnclaimedRewardHandler.false(legacy minting):EraPayoutcomputes inflation, tokens minted on payout,
remainder sent toRewardRemainder. Kept for Kusama compatibility.
Switching from legacy to non-minting is irreversible.
New config: DisableMinting, UnclaimedRewardHandler, GeneralPots, EraPots,
StakerRewardCalculator. New storage: MaxCommission, DisableMintingGuard.
New extrinsic: set_max_commission.
Runtimes using non-minting mode provide an IssuanceCurve impl to DAP and
register StakerRewardRecipient as a budget recipient. DAP storage version
bumped to V2 with migration.
[#12225]: pallet-revive: map account in prepare_dry_run
Summary
- Map the origin account in
prepare_dry_runwhen it is not already mapped, so dry-running contract calls/instantiations does not fail withAccountUnmappedfor callers that never registered a mapping.
Test plan
- CI passes
[#12115]: pallet-revive: recalibrate contains_storage benchmark
The contains_storage benchmark now exercises the persistent storage path, matching how WeightInfo::contains_storage is dispatched from the precompile. The transient path remains benchmarked separately as seal_contains_transient_storage.
Also the clear_storage, contains_storage, take_storage and the transient clear/contains benchmarks now size their pre-existing value by n.
[#11770]: Fix PSM migration to run on first deployment
Replaces the versioned MigrateToV1 with an idempotent InitializePsm migration.
The previous MigrateToV1 used VersionedMigration<0, 1> which never ran on fresh
deployments because BeforeAllRuntimeMigrations initializes the on-chain storage
version to the in-code version (1) before migrations execute, causing the version
check to skip.
InitializePsm instead checks whether each external asset already exists and skips
it if so. This makes it safe to run multiple times with no st...
Polkadot unstable2604-rc4
This release contains the changes from polkadot-unstable2604-rc3 to polkadot-unstable2604-rc4.
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.
[#12080]: fix(statement-network): split peer metric by kind
Impl #12060
Summary
- Change
substrate_sync_statement_peers_connectedfrom a plain gauge to aGaugeVeclabelled bykind - Report statement protocol peers as
kind="full"orkind="light"
[#11557]: Double max memory on block import
CallContext::Onchain now carries an import: bool field.
When import: true (block import), the WASM executor allocates double
the configured heap pages. When import: false (block building), behavior
is unchanged.
This is a breaking change for any code that constructs or matches on
CallContext::Onchain.
The WasmModule::new_instance trait method now requires a
HeapAllocStrategy parameter. The WasmInstance trait gains a new
set_heap_alloc_strategy method with a default no-op implementation.
WASM memory limits are no longer baked into the compiled artifact;
they are enforced per-instance at instantiation time via wasmtime
StoreLimits.
[#11387]: docs/async_back: Align docs to latest behavior
Tiny PR to update the async backing documentation / guidelines:
- older params are no longer used
async_backing_params - UNINCLUDED_SEGMENT_CAPACITY is now 3
- no need for
experimentalfeature flags
Closes: #8804
[#11641]: Fix runtime upgrade zombienet tests exceeding max_code_size
Zombienet runtime upgrade tests now use compact (WASM_BINARY) runtimes
instead of WASM_BINARY_BLOATY, which had grown beyond the relay chain's
max_code_size limit. A new submit_sudo_runtime_upgrade helper verifies
that the inner sudo dispatch succeeded and renders any dispatch errors using
runtime metadata (e.g. ParachainSystem::TooBig instead of raw byte indices).
[#11793]: Updated wasmtime to 36.0.7
Wasmtime 35.0.0 → 36.0.7
[#11745]: statement-store: fix unbounded growth of the evicted-hashes map
Fix unbounded growth of the evicted-statement map used for re-gossip suppression.
Naturally-expired statements are no longer inserted into the map, and the map is
now bounded to max_total_statements entries with deadline-ordered purging.
[#11762]: Bump collation in_peers to 300 for the experimental collator protocol
Bump MAX_AUTHORITY_INCOMING_STREAMS in peer_set to be in line with CONNECTED_PEERS_PARA_LIMIT
in experimental collator protocol.
[#11487]: statement-store: fix statement loss during major sync
Fixes two cases where statements are permanently lost during major sync.
New peers (fresh start): peers connecting while major sync is active are buffered in
deferred_peers instead of being added to the reserved set immediately. When sync ends
all buffered peers are added in one batch so each performs a fresh initial sync.
Already-connected peers (fall-behind): when a running node temporarily falls behind
and drops statements via the is_major_syncing() guard, one peer is force-disconnected
and re-added after a 1-minute window so it re-sends its statements via initial sync.
The recovery only fires when statements were actually dropped during sync.
[#11474]: Support multiple IndexOperation::Renew calls within a single extrinsic index in sc-client-db
Previously apply_index_ops used HashMap<u32, DbHash> so multiple Renew
operations at the same extrinsic index silently overwrote each other, blocking
batch-renewal inherents (e.g. the Bulletin chain's process_auto_renewals).
A new DbExtrinsic::MultiRenew variant carries all renewed hashes for an
extrinsic; single-renewal extrinsics still produce DbExtrinsic::Indexed
(backwards-compatible). Downstream consumers reading BODY_INDEX directly
must handle the new variant; users of the standard BlockchainDb APIs do not.
[#11329]: statement-store: Allow light clients to specify topic affinity
Adds explicit topic affinity to the statement protocol via a new "statement/2" protocol.
Peers can advertise which topics they care about using a bloom filter. Only matching
statements are forwarded to peers with an active affinity filter. When affinity changes,
relevant statements are re-sent. Light clients must advertise affinity before receiving
statements. Includes rate limiting on affinity advertisements.
[#11918]: Invalidate storage transaction cache on state version change
Fix a cache-bleed bug. The cache stored the pre-computed storage root and transaction without
recording which StateVersion was used to build them.
The cache now stores the state_version it was built with and is invalidated and recomputed
whenever a different version is requested.
[#11521]: Implement bitswap_v1_get RPC method
Implement bitswap_v1_get RPC method according to the spec.
[#11274]: Statement store: Latency bench cli sudo
Extend the statement-latency-bench CLI tool to automatically set up per-account statement allowances via sudo extrinsics.
Added a separate setup-allowances binary that issues subxt-based Sudo(batch_all(set_storage(...))) calls to write :statement_allowance: keys for each benchmark account. Extracted shared subxt configuration and test utilities into subxt_client and test_utils modules gated behind the test-helpers feature.
[#12207]: statement-store: remove unused Proof::OnChain variant
Removes the Proof::OnChain variant from sp_statement_store::Proof because it
was unused.
[#11667]: statement-store: read allowance on best hash
Use the best block hash instead of the finalized hash when checking statement
allowances during statement submission. This makes the store more responsive to
recent allowance changes. Allowance enforcement during eviction still uses the
finalized hash to ensure correctness. A statement accepted against best-block
state may later be evicted if that block does not get finalized, which is an
acceptable tradeoff.
[#11701]: statement-store: Test flooding detection
Fixed a bug with double peer state cleanup. Added two zombienet integration tests that verify statement-store flooding detection
[#11629]: collator-protocol: Enhance visibility into failed to fetch collations
This PR enhances the observability of our logs when validators refuse to fetch advertised collations.
The validator keeps track of advertised collations from collators.
Then, the validator checks if it has sufficient slots (is_slot_available) and if the collation can be seconded (can_second).
If either of the mentioned functions fails, the validator silently ignores the collation.
This PR aims to surface this behavior and help investigate further issues.
This PR is already deployed on validators and has surfaced:
Part of:
[#11962]: client/db, sp-transaction-storage-proof: preserve MultiRenew submit order
#11474 changed DbExtrinsic::MultiRenew::hashes from Vec<DbHash> to BTreeSet<DbHash>,
which reordered hashes by sort order. The runtime indexes TransactionInfo in dispatch
order, so build_proof and the runtime resolved selected_chunk_index to different
chunks, causing InvalidProof and chain halt on the first proof block after a multi-renew.
Reverted MultiRenew.hashes to Vec<DbHash>, preserving submission order and duplicates
so column refcount inc/dec stays symmetric.
[#11650]: Update PolkaVM to latest version (0.31 → 0.33)
Updates all PolkaVM dependencies from 0.31.0 to 0.33.0.
[#11838]: statement-store: fix metrics accuracy
Description
Fixes accuracy gaps and clarify help text in statement store and network metrics.
Integration
No integration needed.
[#11617]: statement-store: add channel replacement logic tests
Description
Implement unit tests for "Channel replacement: verify only higher-priority statements replace existing entries, corner cases of replacement logic." #11534
Summary
-
channel_replacement_only_higher_priority_succeeds-> verifies lower/equal priority rejected withChannelPriorityTooLow, higher priority replaces, one-per-channel invariant preserved -
channel_replacement_with_size_increase_evicts_others-> verifies that replacing a channel message with a larger one triggers additional eviction of lowest-priority non-channel statements to satisfy size constraints
[#11628]: fix: slot-based collator node exits immediately on startup
Regression from #11381: the wait_for_aura init wrapper was spawned as an essential task, but it
completes immediately after spawning the actual long-running collator tasks, causing the node to
shut down. Use spawn_handle() instead. Only affects --authoring=slot-based collators.
[#11906]: cli: Update list of AH Polkadot relay chain side peers
This PR updates the list of relay ...
Polkadot stable2603-3
This release contains the changes from polkadot-stable2603-2 to polkadot-stable2603-3.
ℹ️ Please note:
This is a patch release for the latest stable version: stable2603. If your nodes are already running on this stable release,
you should upgrade to this patch version to get the latest fixes.
The tag corresponding to the current patch release polkadot-stable2603-3 and matching the old pattern will be
available under polkadot-v1.22.3.
The node version for this release is: v1.22.3
The following crates were updated to the corresponding versions:
Click to see crates list
- pallet-revive-fixtures@0.10.1
- sc-network@0.56.1
- pallet-revive@0.13.1
- snowbridge-inbound-queue-primitives@0.10.1
- frame-omni-bencher@0.18.1
- polkadot-omni-node-lib@0.14.1
- pallet-revive-eth-rpc@0.14.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.
[#11574]: peerset/metrics: Add notification layer metrics for peer states
This PR adds two new metrics to enhance our monitoring insights into the notification protocol.
The data exposed:
- connected peers grouped by in / out and kind (reserve / non-reserve)
- disconnected and backed off peers
Because the slot counts are tightly coupled with the full peerset state machine, I've picked an eventually consistent model to easily bump the metrics at 1s tick intervals.
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).)
[#11919]: Snowbridge: Set default asset claimer to local network
The inbound-queue v2 message converter falls back to the Snowbridge sovereign account on AssetHub as the asset claimer when no explicit claimer is supplied.
Previously this fallback used AccountId32 { network: None, .. }, which did not match the location AssetHub's signed-origin converter produces (it sets network: Some(LocalNetwork)). The trap-key hash stored on AssetsTrapped therefore could not be matched by a signed polkadotXcm.claim_assets call, making default-claimer trapped funds effectively unrecoverable without a
runtime upgrade.
This PR sets network: Some(LocalNetwork::get()) on the fallback claimer so its Location agrees with what SignedToAccountId32<_, _, LocalNetwork> yields on AssetHub, and adds a test covering the no-claimer-supplied path.
[#12035]: Expose BLS host functions to the omni-bencher
Expose BLS host functions to frame-omni-bencher.
[#11000]: Revive, Estimate Gas with Binary Search
Description
This PR implements binary search for the gas estimation logic in the eth-rpc which means that gas estimations are no longer just simple dry runs but that binary search is now used to find the smallest gas limit at which the transaction would run.
This PR closes paritytech/contract-issues#217 and also kind of fixes paritytech/contract-issues#259 or at least makes it harder to trigger the case in which we observe it, but the underlying issue still exists.
The binary search algorithm implemented in this PR is as close as possible to that used in Geth
Changelog for Node Operator
ℹ️ These changes are relevant to: Those who don't write any code and only run code.
[#12006]: [stable2603] Improve TransactionStorageApi runtime api check
Improves the TransactionStorageApi runtime API version check in the Polkadot Omni Node to use a version-aware comparison (has_api_with) instead of a simple version-existence check (has_api). This ensures that bulletin chain runtimes that implement the API are correctly detected as compatible with older collators.
Rust compiler versions
This release was built and tested against the following versions of rustc.
Other versions may work.
- Rust Stable:
1.93.0
Docker images
The docker images for the polkadot node binary and the polkadot-parachain binary can be found at Docker hub (will be available a few minutes after the release has been published):
You may also pull it with:
docker pull parity/polkadot:stable2603-3
or
docker pull parity/polkadot-parachain:stable2603-3