This release contains the changes from polkadot-stable2603 to polkadot-stable2603-1.
ℹ️ 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-1 and matching the old pattern will be
available under polkadot-v1.22.1.
The node version for this release is: v1.22.1
The following crates were updated to the corresponding versions:
Crates list
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.
[#11576]: collator-protocol revamp: use ratio for peer eviction from DB
The current implementation of prune_for_para gives edge to new peers because it uses only the timestamp of the last bump when evicting peers from the DB. As a result, a high score collator which is inactive for a while can easily be evicted by new peers with minimal score.
To fix this we now calculate score / time_since_last_bump ratio for each peer and evict the one with the min value.
[#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:
[#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.
[#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.
[#11906]: cli: Update list of AH Polkadot relay chain side peers
This PR updates the list of relay chain side peer IDs corresponding to the AH Polkadot collators.
Previously, the list contained the parachain side peer IDs. This behavior resulted in all collations being held off for 300 ms.
The peer IDs have been confirmed with their respective node operators.
[#11626]: Fix paths_via_relay_parent returning paths longer than scheduling_lookahead
Fixes a bug where paths_via_relay_parent() in the implicit view could return paths longer than scheduling_lookahead during relay chain forks. Fork leaves kept old blocks in block_info_storage, and the path traversal walked through all of them regardless of which leaf they belonged to.
This caused is_slot_available to compute valid_len = 0 for valid scheduling parents, unconditionally rejecting collation advertisements with SecondedLimitReached.
The fix derives paths directly from each leaf's allowed_relay_parents_contiguous instead of walking block_info_storage, bounding path length to scheduling_lookahead.
Fixes #11625.
[#11621]: Enforce current relay parent to be available
Ensures that the current relay parent is always available when building parachain blocks in the slot-based collator. The block builder task now uses a relay chain notification stream to keep relay chain data up-to-date and enforces that the current relay parent is present before proceeding with block building.
[#11772]: Prospective parachains support for older relay parents
Decouples a candidate's relay parent from its scheduling parent in the prospective-parachains subsystem, enabling V3 descriptors whose relay parent may be much older than the scheduling parent (potentially spanning multiple sessions, bounded by
HostConfiguration.max_relay_parent_session_age).
Additionally:
- fixes a bug when handling v3 candidates in statement distribution, which was wrongly comparing the session index of the candidate with the scheduling session.
backing_constraintsruntime API computes a more up to datemin_relay_parent_number, which is the maximum between the oldest allowed RP based on the HostConfiguration and the relay parent of the most recently backed candidate of the para.- assumes the ParachainHost runtime API is at least v13 (
BackingConstraints). TheParaBackingStatefallback in prospective-parachains has been removed; against a runtime with a lower version the subsystem will fail to process active leaves.
[#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.
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).)
[#11425]: fix(pallet-multi-asset-bounties): use non-destructive read in calculate_payout()
Fix calculate_payout() using ChildBountiesValuePerParent::take() instead of get().
The destructive take() deletes the storage entry on first call, causing BountyPayoutProcessed to emit an incorrect payout value when check_status() calls calculate_payout() a second time on the success path. Replaced take() with get() and moved storage cleanup to remove_bounty().
[#11435]: Raise offence queue eras bound limit
Fixes a bug where OffenceQueueEras bound (BondingDuration) was incorrect when SlashDeferDuration=0. The oldest reportable offence era formula allowed more eras than the bound could hold.
[#11612]: fix(multi-asset-bounties): enforce authorization in unassign_curator when parent bounty is not Active
Fix an authorization bypass in unassign_curator where any signed account could forcibly unassign an active child bounty's curator when the parent bounty was not in Active state.
The child curator's native balance hold (deposit) was also permanently leaked in this path.
The BountyStatus::Active catch-all arm now uses parent_curator.ok_or(BadOrigin)? to explicitly reject callers when no parent curator is available, matching the defensive pattern already used in the Funded arm. CuratorDeposit::take() is also moved after authorization to prevent storage mutation on unauthorized calls.
A regression test is added covering the full attack scenario.
[#11738]: MMR: check verify_ancestor() output
MMR: check verify_ancestor() output
[#11567]: Align Tally::approval() with VoteTally trait semantics
Tally::approval() in pallet-conviction-voting now returns Perbill::zero() when no aye or nay votes have been cast, consistent with the pallet-referenda test mock. The VoteTally::approval() trait doc is also updated to document this expected behavior.
[#11750]: Post 2603 cleanup
- make clone of AssetsInHolding available for std
- Make pallet assets try-state check more lenient
[#11739]: Snowbridge: tighten receipt proof validation path check
Hardens Snowbridge receipt proof verification by only accepting the ValueMismatch { got: Some(_), expected: None } extraction path when the mismatch path equals the queried trie key.
This prevents malformed proofs from being interpreted as valid inclusion proofs for a different key.
Adds regression coverage in both unit and integration tests to ensure forged receipt proofs are rejected.
[#11772]: Prospective parachains support for older relay parents
Decouples a candidate's relay parent from its scheduling parent in the prospective-parachains subsystem, enabling V3 descriptors whose relay parent may be much older than the scheduling parent (potentially spanning multiple sessions, bounded by HostConfiguration.max_relay_parent_session_age).
Additionally:
- fixes a bug when handling v3 candidates in statement distribution, which was wrongly comparing the session index of the candidate with the scheduling session.
backing_constraintsruntime API computes a more up to datemin_relay_parent_number, which is the maximum between the oldest allowed RP based on the HostConfiguration and the relay parent of the most recently backed candidate of the para.- assumes the ParachainHost runtime API is at least v13 (
BackingConstraints). TheParaBackingStatefallback in prospective-parachains has been removed; against a runtime with a lower version the subsystem will fail to process active leaves.
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.
[#11612]: fix(multi-asset-bounties): enforce authorization in unassign_curator when parent bounty is not Active
Previously, any account could unassign a child bounty curator without authorization when the parent bounty's curator had been unassigned. This is now correctly rejected. If you were affected by a permanently locked curator deposit from this bug, a migration or manual intervention may be needed to release the held balance.
[#11668]: Remove Meta Tx from Westend RC
Removal of the Meta Transaction from the Westend Relay Chain.
With this removal, pallet Verify Signature is removed as well.
[#11469]: Westend: Support Meta Transactions
Support Meta Transactions via meta-tx pallet for next Westend runtimes:
- Asset Hub
- Coretime
- People
- Collectives
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-1
or
docker pull parity/polkadot-parachain:stable2603-1