This release contains the changes from polkadot-stable2606-2 to polkadot-stable2606-3.
ℹ️ Please note: this is a patch release for the latest stable version stable2606. If your nodes are already running on this stable release, you should upgrade to this patch version to get the latest fixes.
Once published, polkadot-stable2606-3 will also be tagged as polkadot-v1.24.3; the node version for this release is v1.24.3.
The following crates were updated to the corresponding versions:
Changed crates:
ℹ️ Due to the decommissioning of the Debian bullseye build, starting from the stable release stable2612, all published binaries will be built on the Debian bookworm distribution. Please see the instructions on the Polkadot Forum
📦 The complete changelog with full descriptions is attached to this release as CHANGELOG.md, and in machine-readable form as changelog.json.
💥 Breaking Changes
1 change is breaking according to Rust SemVer (each bumps the major version of at least one crate). Details in the 💥-marked entries below.
- Node: #12433 txpool: maintain the transaction pool on every imported block (all forks) (
sc-transaction-pool-api,sc-transaction-pool,sc-cli)
Changelog
Staking & Elections
🛠️ Runtime Dev
#13337: session: fix benchmarks with non-zero KeyDeposit
pallet_session::Pallet::ensure_can_pay_key_deposit now mints the key deposit on top of the account's existing balance. Previously it counted existing free balance towards the deposit, so the key hold consumed funds the benchmark set up for other purposes. This made the pallet-collator-selection register_as_candidate and take_candidate_slot benchmarks fail on runtimes with a non-zero session KeyDeposit.
Crates: pallet-session (patch), pallet-collator-selection (patch)
Node
🔧 Node Dev
💥 #12433: txpool: maintain the transaction pool on every imported block (all forks)
Also for Node Operator
The fork-aware transaction pool is now maintained on every imported block, not only on blocks imported as the new best, so it builds a view for all forks. The new --pool-best-blocks-only flag restores the previous best-blocks-only behavior. The flag only affects the fork-aware pool; the single-state pool is always maintained on best blocks only.
Breaking: sc-transaction-pool-api, sc-transaction-pool, sc-cli
Other crates: sc-client-api (minor), sc-service (patch)
#11731: fatp: unban viewless transactions after mempool revalidation
In rare cases a transaction valid at the finalized block can get stuck in the fork-aware pool. If it receives InvalidTransaction on one fork, the view's rotator bans it and the ban propagates to all new views (rotator is cloned). The tx stays in the mempool but is silently rejected from every view for the ban duration (default 30 min).
Fix: track ban reason (Validation vs LimitsEnforced). When a ready tx loses all views, emit a Viewless event and flag it for unbanning. On the next mempool revalidation, if the tx is valid at the finalized block, clear Validation bans across all views. If still invalid, remove from mempool.
Crates: sc-transaction-pool (patch)
#11733: fatxpool: invalid inblock event fixed
Fixes a false InBlock (and cascading Finalized) event in the fork-aware transaction pool when a replaced transaction (same sender+nonce, higher priority) had its original version included in a block by another node. The faulty "pruned-by-tag + invalid-on-resubmit => in block" inference in resubmit_pruned is removed, so InBlock now fires only for hashes actually present in the imported block body.
Crates: sc-transaction-pool (minor)
#12362: fatxpool: preserve order of same-priority transactions on re-orgs
On a re-org, transactions from retracted blocks are now resubmitted in execution order (common ancestor → old best) instead of reverse order. This is a best-effort improvement: per-account nonce ordering is always kept, but cross-account ordering is only preserved when priorities are equal (otherwise priority decides).
Crates: sc-transaction-pool (minor)
#13366: Bump litep2p to 0.15.3
This fixes some internal issues of litep2p assuming connections still being alive while this not being the case anymore.
Crates: sc-network-types (minor), sc-network (minor)
🖥️ Node Operator
#13318: grandpa: gossip commits to light clients in rotating groups
GRANDPA commit messages used to be gossiped to only 4 randomly picked light clients per round. With many light clients connected to a node, their finality lag grew linearly with the number of light clients.
Light clients now take turns in groups, in the order of their peer ids. Each light client gets a commit at least every 5 rounds. Nodes with at most 50 light clients gossip every commit to all of them. Rounds taking long no longer send commits to all light clients at once. Gossip towards full nodes and authorities is unchanged.
Crates: sc-consensus-grandpa (patch)
Misc
🛠️ Runtime Dev
#13282: Registrar and HRMP migration wire types
Adds the types the migrator pallet needs to manage parachain registrations and HRMP channels migration over to the pallets that will own them on a system chain (Coretime).
registrar-primitives
MigratedPara&MigratedParaState: the data that migrates from RC to CT.- Trait
ReceiveMigratedParasthat should be implemented byregistrar_para.
hrmp-primitives
MigratedChannelandChannelId: the data that migrates from RC to CT.ReceiveMigratedChannels: trait to be implemented byhrmp_para.
Crates: registrar-primitives (minor), hrmp-primitives (minor)
Rust compiler versions
The crates and node binaries in this release were built and tested with the following rustc toolchain; other versions may work.
- Rust Stable:
1.93.0
Docker images
The docker images for the binaries of this release can be found on Docker Hub (available a few minutes after the release has been published), all tagged with stable2606-3:
You may also pull them with:
docker pull parity/polkadot:stable2606-3
docker pull parity/polkadot-parachain:stable2606-3
docker pull parity/polkadot-omni-node:stable2606-3
docker pull parity/chain-spec-builder:stable2606-3
docker pull parity/eth-rpc:stable2606-3