This release contains the changes from polkadot-stable2512-2 to polkadot-stable2512-3.
ℹ️ Please note:
This is a patch release for the latest stable version: stable2512. 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 As the expiration date of the key was extended. The installation/update of the polakdot rpm package may fail, you can run the following commands to re-import updated key:
polkadot-stable2512-3 and matching the old pattern will be
available under polkadot-v1.21.3.
The following crates were updated to the corresponding versions:
Click to see crates list
ℹ️ In case of the issue with expired key on installation of the rpm package
# 1. Find the old key
rpm -qa gpg-pubkey* --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{SUMMARY}\n'
# Look for the ParityReleases entry
# 2. Remove the old key
sudo rpm -e gpg-pubkey-XXXXXXXX-XXXXXXXX
# 3. Re-import the updated key
sudo rpm --import 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x90BD75EBBB8E95CB3DA6078F94A4029AB4B35DAE&options=mr&exact=on'
# 4. Retry install/update
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.
[#11078]: net: Strip previous p2p prefix before concatenating addresses
This PR ensures that a MultiaddrWithPeerId will always remain valid after a concatenating process.
The litep2p code will concatanate the provided multiaddr-with-peerID regardless if the address already contains a p2p/.. prefix:
polkadot-sdk/substrate/client/network/src/litep2p/service.rs
Lines 427 to 434 in e85be1c
This then can lead to addresses for reserved peers to never be dialed by the network backend as they are considered invalid.
This has been discovered by running the networking benchmarks:
polkadot-sdk/substrate/client/network/benches/notifications_protocol.rs
Lines 143 to 148 in e85be1c
Part of the cleanups for:
[#11330]: aura/import: Skip block execution when collators have no parent block state
Skip block execution in SlotBasedBlockImport when gap-sync marks blocks with StateAction::Skip. This fixes an infinite retry loop where non-archive collators failed to import gap-sync blocks because the parent state was already pruned, causing repeated sync restarts and eventual peer bans.
[#11204]: Upgrade litep2p v0.13.0 -> v0.13.1
This PR brings litep2p v0.13.1 to polkadot-sdk. The improvements include:
- When dialing remote peers, all addresses from the DHT are tried, starting from the public addresses. Before litep2p v0.13.1, only up to 8 addresses were tried, leading to dial failures when due to misconfiguration there was a lot of private addresses in the DHT.
- Protocols are now notified about connected peers before the library user, fixing failures in opening substreams when the user command arrived before the connection event.
- Ping protocol implementation now conforms to the spec. This improves the connection stability between polkadot-sdk and smoldot dramatically. Before this PR, smoldot always disconnected polkadot-sdk peers every 15 seconds for 5 seconds due to failed pings.
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).)
[#11168]: Add MinSetKeysBond check in rc_client::set_keys
Add a configurable MinSetKeysBond threshold (hardcoded to 10 WND on asset-hub-westend) that rejects set_keys when active bond is insufficient. Set to 0 to disable.
[#11156]: election-provider-multi-block: reduce overclaimed proof_size during Signed phase
on_initialize claimed on_initialize_into_signed weight (> ~3M proof_size) every block during the Signed phase, but the heavy work (loading voter snapshots) only happens once when transitioning from Snapshot into Signed.
Use discriminant comparison to distinguish phase entry from same-phase ticks, falling back to on_initialize_nothing for the latter.
[#11154]: Add kick_member to Society pallet
Adds a kick_member extrinsic to pallet-society, callable by the Founder, that removes a member, slashes its payouts and returns them to the society pot.
[#11197]: pallet-session: track consumer refs and release deposits for externally set keys
Tracks whether session keys were set externally (via SessionInterface, e.g. from AH) or locally. Transitions between the two paths correctly manage the key deposit and consumer ref in both directions.
[#11222]: staking-async/rc-client: replace MinSetKeysBond with storage deposit
Replace MinSetKeysBond with a fungible hold deposit (KeyDeposit) which ties the cost directly to the storage used: held on set_keys, released on purge_keys.
Idempotency is checked by inspecting the existing hold balance rather than a separate storage map. Existing validators are charged on next set_keys.
[#11255]: staking-async-rc-client: add proof parameter to set_keys
Add proof: Vec<u8> to the set_keys extrinsic for forward compatibility with PR #1739, which introduces real ownership proof validation.
Proof validation is a no-op until we backport PR #1739.
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.
[#11018]: [Pool] Claim trapped balance via one-time migration
One-time migration to recover trapped balance for an affected pool member.
A bug (CurrentEra vs ActiveEra mismatch) caused one pool member's balance to become trapped: their points were
dissolved but the held funds weren't released. This migration:
- Applies any pending slash for the member first
- Calculates trapped amount by checking actual held balance vs expected balance from points
- Releases trapped funds if present
Rust compiler versions
This release was built and tested against the following versions of rustc.
Other versions may work.
- Rust Stable:
1.88.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:stable2512-3
or
docker pull parity/polkadot-parachain:stable2512-3