github paritytech/polkadot-sdk polkadot-stable2512-3
Polkadot stable2512-3

latest release: polkadot-v1.21.3
8 hours ago

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 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
  • pallet-election-provider-multi-block@0.6.1
  • pallet-staking-async-rc-client@0.7.3
  • pallet-staking-async@0.10.4
  • asset-hub-westend-runtime@0.42.3
  • pallet-session@45.2.0
  • pallet-society@45.1.0
  • sp-staking@42.2.0
  • pallet-fast-unstake@44.1.0
  • pallet-nomination-pools@43.1.0
  • pallet-staking@45.1.0
  • pallet-nomination-pools-benchmarking@43.0.1
  • cumulus-client-consensus-aura@0.28.1
  • sc-network-types@0.20.2
  • sc-network@0.55.2
ℹ️ In case of the issue with expired key on installation of the rpm package

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:

# 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:

fn add_reserved_peer(&self, peer: MultiaddrWithPeerId) -> Result<(), String> {
let _ = self.cmd_tx.unbounded_send(NetworkServiceCommand::AddPeersToReservedSet {
protocol: self.block_announce_protocol.clone(),
peers: HashSet::from_iter([peer.concat().into()]),
});
Ok(())
}

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:

network_service1
.add_reserved_peer(MultiaddrWithPeerId {
multiaddr: listen_address2,
peer_id: peer_id2,
})
.unwrap();

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:

  1. 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.
  2. 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.
  3. 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

Don't miss a new polkadot-sdk release

NewReleases is sending notifications on new releases.