This release contains the changes from polkadot-stable2512-3 to polkadot-stable2512-5.
ℹ️ Please note:
⚠️ This is a patch release for the stable version: 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-5 and matching the old pattern will be
available under polkadot-v1.21.5.
The following crates were updated to the corresponding versions:
Click to see 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.
[#12017]: Improve the sync
We should not panic and handle it more gracefully.
[#11332]: client/db: Close missing body gaps for non archive nodes
This PR closes missing body gaps in the database for non-archive nodes.
Effectively, a missing body gap cannot be closed on the DB side if the node is non-archive. Since execution is already skipped, the node will close the memory gap in the sync engine; however, the gap remains open in the db.
This leads to wasting resources at every startup:
- client info contains a gap that cannot be filled (since we don't have the state around for execution)
- blocks are fetched from the connected peers
- gap is filled by ignoring blocks in the sync engine
Further, for collators on origin master this causes an infinite loop of sync engine restarts that get punished via banning and disconnecting. For more details and root cause check:
Part of:
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).)
[#10780]: Fix pallet-revive-fixtures
Fixing two issues:
- Build on rustc >= 1.92 was broken despite #10749. That PR was broken.
- The nested cargo didn't properly inherit the parent toolchain (an older error). Leading to the situation where a
1.88was only applied to the parent toolchain
Replacement for #10778.
[#10712]: [pallet-revive] remove code related to stable and unstable_hostfn
Part of #8572
Removes the proc macro unstable_hostfn and attribute #[stable] because they are not used anywhere.
[#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().
[#12105]: [stable2512] Unblock pallet-assets-precompiles crates.io publish
Unblocks the stable2512-4 crates release.
ethereum-standards 0.1.3 (already on crates.io, published from stable2603) widened the IERC20 interface with IERC20Metadata (name/symbol/decimals) and EIP-2612 permit (permit/nonces/DOMAIN_SEPARATOR) variants. parity-publish's verify step compiles pallet-assets-precompiles against registry-resolved dependencies, so it picks the wider
0.1.3 enum, and the existing 6-arm match input becomes non-exhaustive.
Fix on stable2512:
- Sync
ethereum-standards(Cargo.tomlandIERC20.sol) to thestable2603state, which is the source of the already-published0.1.3. No new version ofethereum-standardsis published; the workspace just catches up to the registry. - Add named match arms in
pallet-assets-precompilesfor the six new variants, each reverting with "Unsupported function".
The actual IERC20Metadata and EIP-2612 permit handlers are not backported. Runtimes on stable2512 never registered handlers for these functions, so reverting on them preserves observable behaviour while making the match exhaustive against the wider enum.
[#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.
[#11964]: Fix recursive XCM decoding
Fix XCM recursive decoding
[#10749]: [pallet-revive] fixtures compilation fix for rust 1.92.0
Fix this error after upgrading to rustc 1.92.0:
error: panic_immediate_abort is now a real panic strategy! Enable it with `panic = "immediate-abort"` in Cargo.toml, or with the compiler flags `-Zunstable-options -Cpanic=immediate-abort`. In both cases, you still need to build core, e.g. with `-Zbuild-std`
--> /Users/robert/.rustup/toolchains/1.92.0-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/panicking.rs:36:1
[#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.
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.
Rust compiler versions
This release was built and tested against the following versions of rustc.
Other versions may work.
- Rust Stable:
1.88.0