github paritytech/polkadot-sdk polkadot-stable2606-rc1
Polkadot stable2606-rc1

pre-release3 hours ago

This release contains the changes from polkadot-stable2603 to polkadot-stable2606-rc1.

⚠️ Warning: Pre-release Version

The currently published version is a pre-release and is not yet a final stable version. This release is provided for testing purposes only, and there is no guarantee that everything will work as expected. Errors and unusual behaviours of some features are to be expected.

Please use this version at your own risk and report any issues you encounter. We recommend waiting for the official release if you need a stable version.

Changelog

Link to full 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.

[#12080]: fix(statement-network): split peer metric by kind

Impl #12060

Summary

  • Change substrate_sync_statement_peers_connected from a plain gauge to a GaugeVec labelled by kind
  • Report statement protocol peers as kind="full" or kind="light"

[#11415]: Statement store e2e integration tests lite person setup

Summary

  • Add a lite person registration test that exercises the full PeopleLite::attest flow on a live parachain, including ring-VRF key generation, attestation, and subsequent statement submission.

[#10477]: Block Bundling Node Side

Implements the node-side logic for block bundling (aka 500ms blocks) in parachains.
The main changes are in the slot-based collator: instead of building one block per core,
blocks are built as requested and distributed over the available cores.

[#11701]: statement-store: Test flooding detection

Fixed a bug with double peer state cleanup. Added two zombienet integration tests that verify statement-store flooding detection

[#11107]: Add runtime metadata detection for Aura authority ID

Adds optional runtime metadata-based detection for Aura authority ID types in polkadot-omni-node-lib.

When metadata is available, the node detects whether Aura uses sr25519 or ed25519
directly from the runtime. If detection fails or metadata is unavailable, it falls
back to chain spec ID heuristics.

A warning is emitted when the Aura authority ID type is not found in metadata.

[#11685]: Pass NodeExtraArgs through Dev Chain

Enables the statement store when running polkadot-omni-node in dev mode with
--enable-statement-store.

The dev Aura node path now wires the statement store the same way as the regular node path:
it registers the statement network protocol, builds the store, exposes the RPCs, and passes
the statement store extension into offchain workers.

Also wires up the storage monitor in dev mode and emits warnings when
collation-specific flags (--authoring-policy, --export-pov,
--max-pov-percentage) are passed in dev mode where they have no effect.

NodeExtraArgs is now destructured in start_dev_node so the compiler
will enforce that any newly added fields are explicitly handled.

[#12038]: Network: Add bitswap client

Adds a Bitswap client API to sc-network for fetching CID-addressed blocks
from a peer over the native litep2p Bitswap protocol. The public API is
block-fetch only and reports per-CID outcomes as either delivered bytes or
"missing"; on-wire presence (HAVE / DONT_HAVE) is handled internally
and is not part of the public surface.

[#11387]: docs/async_back: Align docs to latest behavior

Tiny PR to update the async backing documentation / guidelines:

  • older params are no longer used async_backing_params
  • UNINCLUDED_SEGMENT_CAPACITY is now 3
  • no need for experimental feature flags

Closes: #8804

[#12207]: statement-store: remove unused Proof::OnChain variant

Removes the Proof::OnChain variant from sp_statement_store::Proof because it
was unused.

[#12113]: Aura: Fetch slot duration at parent and not best block

Fetch the slot duration from the parent we are building on top of and not from the best block.

[#11967]: Experimental collator protocol — leaf-authoritative capacity tracking

Reworks the experimental collator protocol's validator side around a leaf-authoritative
capacity model. The leaf's per-core claim queue is the single source of truth; capacity at
every scheduling parent (SP) on a path to that leaf is derived via offset arithmetic.

Behavior changes vs. master:

  • Rotation-boundary bug fixed. After a group rotation, candidates for both the
    pre-rotation core's para (advertised at the pre-rotation leaf) and the post-rotation
    core's para (at the post-rotation leaf) are accepted. Previously, rotation caused
    claim-queue state for the old core to be overwritten and ancestor-rooted advertisements
    to be wrongly rejected.

  • Fork-aware view cleanup. When a leaf is dropped, SPs are removed from
    per_scheduling_parent (with their in-flight fetches cancelled) only when no remaining
    leaf still references them. Previously, sibling-fork retention in implicit-view storage
    could leave SPs orphaned with leaked in-flight fetches.

  • Free-slot accounting tightened to the current leaf. Assignments and free CQ
    positions now reflect only what the current leaf's CQ actually predicts. Previously,
    claim-queue state for already-produced ancestor blocks lingered until those blocks were
    pruned, so paras and slots that had already been backed on-chain were still reported as
    open — keeping peers connected past their relevance and offering capacity for slots that
    could no longer be filled.

Internals: the previous ClaimQueueState / PerLeafClaimQueueState machinery is gone
(~2200 LoC deleted). Capacity is now computed per-(leaf, core) by build_leaf_core_cqs
as a Vec<LeafCoreCq>, where each LeafCoreCq holds the leaf's CQ as
Vec<Option<ParaId>> (consumed positions cleared to None) and an
sps_by_depth: Vec<Option<Hash>> masking cross-core ancestors. The fetch planner walks
free CQ positions back-to-front and picks the best advertisement among same-core SPs whose
window reaches that position.

Test coverage in validator_side_experimental/tests.rs:

  • core_rotation_accepts_candidates_for_both_cores — regression for the original
    rotation-boundary bug.
  • Five active-fork tests covering: assignment union across leaves, longest-window capacity
    at a common ancestor across different-length forks, no double-counting of in-flight
    candidates across sibling forks, and reclamation of capacity / peer disconnection when a
    fork is dropped.
  • Two linear multi-SP tests pinning over-fetch and under-fetch invariants when ancestor
    and leaf SPs share the same per-core CQ.
  • Tests for cross-SP reputation arbitration and cross-core slot-reservation correctness.
  • Three previously-existing tests rewritten to assert the same intent against the new
    model.

No public API changes; behavior change is contained to the experimental validator side.

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).)

[#11922]: Update merkle mountain lib

Updates the merkle mountain crate to its latest version.

[#11616]: Move era reward minting from staking to DAP

Introduces dual-mode era rewards in pallet-staking-async, controlled by
Config::DisableMinting:

  • true (non-minting): staking expects an external source to fund a general reward
    pot. At era boundary, the balance is snapshotted into an era-specific pot. Payouts
    transfer from the pot. Unclaimed rewards returned via UnclaimedRewardHandler.
  • false (legacy minting): EraPayout computes inflation, tokens minted on payout,
    remainder sent to RewardRemainder. Kept for Kusama compatibility.

Switching from legacy to non-minting is irreversible.

New config: DisableMinting, UnclaimedRewardHandler, GeneralPots, EraPots,
StakerRewardCalculator. New storage: MaxCommission, DisableMintingGuard.
New extrinsic: set_max_commission.

Runtimes using non-minting mode provide an IssuanceCurve impl to DAP and
register StakerRewardRecipient as a budget recipient. DAP storage version
bumped to V2 with migration.

[#12225]: pallet-revive: map account in prepare_dry_run

Summary

  • Map the origin account in prepare_dry_run when it is not already mapped, so dry-running contract calls/instantiations does not fail with AccountUnmapped for callers that never registered a mapping.

Test plan

  • CI passes

[#12115]: pallet-revive: recalibrate contains_storage benchmark

The contains_storage benchmark now exercises the persistent storage path, matching how WeightInfo::contains_storage is dispatched from the precompile. The transient path remains benchmarked separately as seal_contains_transient_storage.
Also the clear_storage, contains_storage, take_storage and the transient clear/contains benchmarks now size their pre-existing value by n.

[#11770]: Fix PSM migration to run on first deployment

Replaces the versioned MigrateToV1 with an idempotent InitializePsm migration.

The previous MigrateToV1 used VersionedMigration<0, 1> which never ran on fresh
deployments because BeforeAllRuntimeMigrations initializes the on-chain storage
version to the in-code version (1) before migrations execute, causing the version
check to skip.

InitializePsm instead checks whether each external asset already exists and skips
it if so. This makes it safe to run multiple times with no storage version dependency.

[#12027]: Extend PGAS filter to allow batches

Description

Just as the title says.

[#11881]: Make pallet-dap-satellite more generic

The DAP satellite pallet is being converted into a generic Accumulate-and-Forward pallet, with
the purpose of pooling tokens of a given type into an accumulation account, which is then
periodically sent (forwarded) to a specified destination.

Notable changes:

  • Crate renamed from pallet-dap-satellite to pallet-accumulate-and-forward
  • The SendToDap trait is replaced by the Forwarder trait
  • The pallet IDs value changes from *b"dap/satl" to *b"acf/dott" (at this point we
    are only forwarding DOT tokens, but new IDs should be added for other future tokens)
  • Multiple other events and constants get renamed accordingly
  • The old treasury is now drained via DrainLegacyTreasuryToAccumulationAccount

[#11819]: pallet-psm: support external assets with different decimal precision

Previously pallet-psm rejected any external stablecoin whose decimals did
not match pUSD. This change normalizes to pUSD units internally so the PSM
can approve assets with arbitrary decimal precision within a safe range.

Core changes:

  • New storage: per-asset AssetDecimals snapshot and pallet-wide
    StableDecimals snapshot. Storage version bumped to 2.
  • Conversion helpers external_to_pusd / pusd_to_external with checked
    arithmetic and MAX_DECIMALS_DIFF = 24 to prevent overflow.
  • mint and redeem use round-trip rounding. Truncation dust stays in the
    caller's wallet on both paths (symmetric behavior), no value is trapped
    in the reserve and no hidden dust is routed to the fee destination.
  • PsmDebt now denominates in pUSD units so aggregate ceilings and issuance
    checks are meaningful across mixed-decimal assets.
  • Runtime drift guard: mint/redeem return DecimalsMismatch if live
    metadata diverges from the registration snapshot; that asset halts until
    governance intervenes.
  • New errors: DecimalsRangeExceeded, ConversionOverflow,
    AmountTooSmallAfterConversion.

Migrations:

  • InitializePsm now also seeds StableDecimals from live metadata if
    missing, and snapshots AssetDecimals for any new assets it adds.
  • New one-shot PopulateDecimals migration backfills StableDecimals and
    AssetDecimals for chains that approved external assets before this
    upgrade. Out-of-range assets are auto-disabled (migration does not fail);
    try-runtime post_upgrade surfaces the anomaly to operators.

[#12123]: Fix migrations for recovery & parachain-system pallets

Changes:

  • pallet-recovery: be more lenient towards broken accounts to keep their recovery config
  • parachain-system: clear old storage value to prevent decoding error

[#11726]: eth-rpc: Bulk INSERT/DELETE and commit per-block writes atomically

Summary

  • Query SQLite's max variable limit at startup and use it to chunk bulk INSERTs and DELETEs, avoiding bind-parameter overflows
  • Replace per-row individual inserts with batched bulk inserts
  • Commit transaction hashes, logs, and block mapping in a single SQLite transaction per block, same for deletes
  • Use INSERT OR REPLACE for logs (previously plain INSERT) to match transaction_hashes and prevent UNIQUE constraint failures if the EXISTS dedup guard is bypassed

[#12216]: [revive] test: dry-run max_storage_deposit from an unfunded account

Summary

Adds a regression test that verifies a bare_call dispatched with the
runtime-api dry-run ExecConfig from an account with no balance still
reports the same max_storage_deposit as a funded run on the same call.

[#11811]: Wired pallet_dap weights on Asset Hub Westend

Replaced type WeightInfo = () with the generated weights::pallet_dap::WeightInfo

[#12209]: Remove deprecated AssetsToBlockAuthor from parachains-common

Removes deprecated parachains_common::AssetsToBlockAuthor, which forwarded asset
transaction fees to the block author via HandleCredit. Use
MaybeResolveAssetTo<BlockAuthor<Runtime>, ...> instead (already used by system
parachain runtimes in this repo).

[#12135]: revive automap: batch map accounts for free

Changes:

  • Add TX to pallet revive to allow anyone to map accounts

The new TX batch_map_accounts:

  • Maps a batch of accounts without taking a deposit
  • Releases existing mapping deposits of accounts
  • Is free to send when at least 90% of accounts were newly mapped or had an existing deposit released

[#11522]: eth-rpc: Add trace logging for receipt lookup debugging

Add trace logging to receipt handling to help diagnose intermittent receipt retrieval failures for finalized transactions, observed while running revive differential test benchmarks.

Changelog for Node Operator

ℹ️ These changes are relevant to: Those who don't write any code and only run code.

[#11662]: HOP: ephemeral data pool service for Substrate nodes

New --enable-hop flag activates the HOP data pool for ephemeral
peer-to-peer data exchange. Related flags:

  • --hop-max-pool-size <MiB> — pool capacity (default: 10240 MiB / 10 GiB)
  • --hop-max-user-size <MiB> — per-user hard cap (default: 256 MiB)
  • --hop-retention-secs <seconds> — data lifetime (default: 86400, 24h)
  • --hop-check-interval <seconds> — maintenance cycle (default: 300, 5 minutes)
  • --hop-promotion-buffer-secs <seconds> — start promoting this many seconds
    before expiry (default: 7200, 2h)
  • --hop-submit-rate-per-min <requests> — sustained submit rate (default: 60)
  • --hop-submit-burst <requests> — submit burst (default: 120)
  • --hop-bandwidth-per-min-mib <MiB> — sustained bandwidth (default: 128)
  • --hop-bandwidth-burst-mib <MiB> — bandwidth burst (default: 256)
  • --hop-disable-rate-limit — turn off rate limiting (dev / tests)
  • --hop-data-dir <path> — storage directory (default: <chain-data>/hop)

Pool state (blobs + metadata) persists across restarts. Orphan and corrupt
files are cleaned up automatically on startup.

[#10468]: Publish indexed transactions with BLAKE2b hashes to IPFS DHT

Add --ipfs-bootnodes flag for specifying IPFS bootnodes. If passed along with --ipfs-server, the node will register as a content provider in IPFS DHT of indexed transactions with BLAKE2b hashes of the last two weeks (or pruning depth if smaller).

[#12082]: ParityDB: Do not skip storing on store + ref in same tx

Fixes a bug in the ParityDB adapter where a store + reference on the same
unknown key within a single transaction would skip storing the value entirely.

ParityDB internally transformed the reference into a dereference, making the value
disappear from the database after commit. The fix maps changes directly to
parity_db::Operation variants so the Set is always emitted regardless of other
operations in the same transaction.

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.

[#11736]: Asset Hub Westend: Add MonetaryGuard governance track for PSM emergency actions

Adds a new MonetaryGuard governance track to Asset Hub Westend for fast PSM
circuit breaker activation in case of a depeg or exploit.

[#11847]: [revive] pgas as storage deposit

Storage deposits backed by PGAS

PGAS is a protocol-level gas token or gas allowance mechanism for users verified through Polkadot's Proof of Personhood ecosystem.

This PR adds a second payment backend for pallet-revive storage deposits: instead of always charging the user in native currency (DOT), a runtime can opt in to having deposits denominated in PGAS.

New trait: Deposit

substrate/frame/revive/src/deposit_payment.rs

A new sealed Deposit<T: Config> trait abstracts over how storage deposits are charged, held, refunded. It has two implementations in-crate:

  • (): the default, charges and refunds the native currency. Identical to the existing pre-PR behavior.
  • PGasDeposit<Mutator, Holder, Freezer, Id, RefundPercent>: the PGAS-backed backend.

The trait is wired into Config::Deposit and called from charge_deposit / refund_deposit in place of the direct T::Currency calls that used to live there.

Account lifecycle: init_account / deinit_account

The trait includes init_account(to) and deinit_account(contract) methods. Rather than transferring the ED from the origin at contract creation (and back to origin on destruction), the EDs are minted on init and burned on deinit:

New storage: NativeDepositOf

substrate/frame/revive/src/lib.rs

pub(crate) type NativeDepositOf<T: Config> = StorageDoubleMap<
    _, Identity, T::AccountId,
    Blake2_128Concat, T::AccountId,
    BalanceOf<T>, ValueQuery,
>;

Keyed (holder_account, user) -> native_amount. It records how much native currency a user has contributed to a given account's hold. The holder is either a contract (for storage deposits on contract accounts) or the pallet account (for code-upload deposits).

It exists because in the mixed PGAS/DOT world, a user's refund cap needs to be tracked explicitly. The map caps how much of a refund can come back as DOT ; anything beyond that is settled in PGAS.

PGasDeposit<Mutator, Holder, Freezer, Id, RefundPercent>

substrate/frame/revive/src/deposit_payment.rs

Parameterized by five type parameters that the runtime wires up:

  • Mutator: fungibles::Mutate — the fungibles impl backing PGAS (e.g. pallet-assets).
  • Holder: fungibles::MutateHold — the holds backend (e.g. pallet-assets-holder).
  • Freezer: fungibles::freeze::Mutate — the freezes backend (e.g. pallet-assets-freezer), used to pin each contract's PGAS ED.
  • Id: Get<AssetId> — the PGAS asset id on that fungibles instance.
  • RefundPercent: Get<Perbill> — the fraction of PGAS returned on refund/collect; the rest is burned.

Charge semantics:

  • If the user has enough reducible PGAS, the full amount is paid in PGAS via fungibles::MutateHold::transfer_and_hold, which emits the TransferOnHold event. No DOT is touched.
  • Otherwise the charge falls through to DOT, and the contribution is recorded in NativeDepositOf so it can be refunded as DOT later.

Refund / collect semantics:

  • DOT is returned first, capped by NativeDepositOf[holder][user] (and by Precision::BestEffort on the actual DOT hold).
  • Any shortfall is taken from the PGAS hold. RefundPercent of that PGAS is transferred to the user's free balance; the remainder is burned.
  • Sub-ED refunds: if the RefundPercent portion would land below PGAS's ED on the user's account (e.g. the user has no PGAS account and the refund is too small to create one), that portion is folded into the burn rather than aborting the whole refund.

The RefundPercent burn is what prevents free-PGAS harvesting: a user can't deposit storage, release it, and walk away with an allowance they can spend on execution.

Migration (v4)

substrate/frame/revive/src/migrations/v4.rs

A three-phase multi-block migration brings live chains over:

  • Phase 1: record each existing code-upload deposit under NativeDepositOf[pallet_account][owner] so it can still be refunded in DOT.
  • Phase 2: flip each contract's storage deposit from DOT to PGAS via Deposit::migrate_native_to_pgas — mint + freeze the PGAS ED under FreezeReason::PGasMinBalance, burn the native StorageDepositReserve hold, re-hold the same amount in PGAS. Needed because pre-PR DOT deposits weren't tracked per-contributor.
  • Phase 3: rewrite DeletionQueue from TrieId to DeletionQueueItem { trie_id, account_id } so the on-idle sweep can also clear the contract's NativeDepositOf rows. Runs on every runtime.

[#11529]: Westend Asset Hub: Integrate PSM pallet and add remote tests

Adds the PSM pallet to Asset Hub Westend, enabling 1:1 minting and redemption
of pUSD against USDT.

[#11761]: asset-conversion-pallet: quote respects minimum balance

Quote functions (quote_price_exact_tokens_for_tokens, quote_price_tokens_for_exact_tokens)
now return None when the computed output exceeds what the pool can actually withdraw while
staying alive.

Swap execution withdraws from pools with Preserve preservation, meaning the pool must retain
at least min_balance. The quote functions did not account for this, so they could return a
price for a swap that would fail at execution.

Both quote functions now check the output against reducible_balance(Preserve, Polite) — the
same preservation level the swap uses.

[#11822]: Remove deprecated CurrencyAdapter from pallet-transaction-payment

The deprecated CurrencyAdapter type has been removed from pallet-transaction-payment.
Use FungibleAdapter instead.

[#11052]: update multi asset bounties pallet account derivation logic

The account IDs for bounty and child-bounty funding accounts have changed. Off-chain code that
derives or hardcodes these addresses must use the new derivation: raw-byte prefix b"mbt" for
bounties and b"mcb" for child bounties, SCALE-encoded as fixed [u8; 3] arrays (no length
prefix), with the same pallet ID and index encoding as before.

[#10150]: Deprecate ValidateUnsigned trait and #[pallet::validate_unsigned] attribute.

Deprecate the ValidateUnsigned trait and #[pallet::validate_unsigned] attribute as part of phase 2 of Extrinsic Horizon.

[#11823]: Refactor asset-conversion tx payment fee correction

The AssetTxFeePaid event now reports the correct fee amount when paying transaction fees
in the native asset through the asset-conversion extension.

Rust compiler versions

This release was built and tested against the following versions of rustc.
Other versions may work.

  • Rust Stable: 1.93

Runtimes

The information about the runtimes included in this release can be found below.
The runtimes have been built using srtool v0.18.4 and rustc 1.93.0 (254b59607 2026-01-19).

Westend

🏋️ Runtime Size:          1.73 MB (1811366 bytes)
🔥 Core Version:          westend-1024000 (parity-westend-0.tx27.au2)
🗜 Compressed:            Yes: 80.57%
🎁 Metadata version:      V14
🗳️ system.setCode hash:   0x6da03d29b71ff4027d7d0d4d96362e7bf6aaca7ca71f9851528ffc562b2eded6
🗳️ authorizeUpgrade hash: 0x28500af3639750c76a329cad7809a9706aa14893a08e1e0657d5ac3d363d1f7b
🗳️ Blake2-256 hash:       0x3060b8606b47534154f3cceed211768769418540014a9ba17018524c2d716151
📦 IPFS:                  QmSZZXjKPhzsYYJkKGtw5mTUDWQqDZhjGHH4YFT1GwULgY

Westend Assethub

🏋️ Runtime Size:          2.43 MB (2548999 bytes)
🔥 Core Version:          westmint-1024000 (westmint-0.tx16.au1)
🗜 Compressed:            Yes: 82.17%
🎁 Metadata version:      V14
🗳️ system.setCode hash:   0x0ba5534f44552c368e5f7779b8102484ee3ac7f7de9aafe79bf88eb97d9cb678
🗳️ authorizeUpgrade hash: 0xea89793e90c8039e0fd409603957d730bc20777d588db383669fa8467c46d31c
🗳️ Blake2-256 hash:       0xa09a9a9cc9cd3a06448455bf4326cbc65ed9bc32fb45addac4ff4597664e401f
📦 IPFS:                  QmUu2TVU1frBDnW8aLfGJnXRhVKD9wUebSRPm6aCWzek1v

Westend Bridgehub

🏋️ Runtime Size:          1.33 MB (1390473 bytes)
🔥 Core Version:          bridge-hub-westend-1024000 (bridge-hub-westend-0.tx6.au1)
🗜 Compressed:            Yes: 79.8%
🎁 Metadata version:      V14
🗳️ system.setCode hash:   0x4c8eff4c8f84380a8183e7f5e093cadc2807ec6ab94daa9a42a7bc9b7a7bbf9b
🗳️ authorizeUpgrade hash: 0x2d5a9148dbfd9469b2ef6413549c3265d851dfe54169de61e83bc9d32e13e348
🗳️ Blake2-256 hash:       0x3338c98e7d456562a6caafefc611591fe6f865969c7ce536bc3c2532589ad1eb
📦 IPFS:                  Qmc6qzzkyxH5am7rFgSezgEn69zhcKeq4qyExSHBt1JU2N

Westend Collectives

🏋️ Runtime Size:          1.21 MB (1265329 bytes)
🔥 Core Version:          collectives-westend-1024000 (collectives-westend-0.tx6.au1)
🗜 Compressed:            Yes: 80.96%
🎁 Metadata version:      V14
🗳️ system.setCode hash:   0x5458f6bcce6bd444f94b5a1e01f637823c38be9e7156fe97f85c1063c70c5381
🗳️ authorizeUpgrade hash: 0x6b240194351a03056036707df79d331b702c391873895666d5dad5d0585b07aa
🗳️ Blake2-256 hash:       0xdb01801ff795d9bb1018bc67e58679683fc4572a82e60535cfffc61e8d3fabad
📦 IPFS:                  QmVZ2f1DnMmzpMDnx84LTRbf4zf7XBcPBXASMzqqTQAYxb

Westend Coretime

🏋️ Runtime Size:          1.09 MB (1138890 bytes)
🔥 Core Version:          coretime-westend-1024000 (coretime-westend-0.tx2.au1)
🗜 Compressed:            Yes: 79.95%
🎁 Metadata version:      V14
🗳️ system.setCode hash:   0x6e740c91caec041720f08c92941a4ea540551af459cf68a79cb00b4483af5b72
🗳️ authorizeUpgrade hash: 0x01944c4818e553d4f86c9b979485e25ff09881f225cf44f13a600a31bfb2d746
🗳️ Blake2-256 hash:       0x5d121bc620c59720dc2af10ae09a2f28db049bc6dedee90b53612b9dc1df2673
📦 IPFS:                  QmcfU3D6eXq19KzbzdCSTPYvFGVUSytADLij4PxUeGigC1

Westend Glutton

🏋️ Runtime Size:          541.88 KB (554882 bytes)
🔥 Core Version:          glutton-westend-1024000 (glutton-westend-0.tx1.au1)
🗜 Compressed:            Yes: 78.11%
🎁 Metadata version:      V14
🗳️ system.setCode hash:   0xfaca28031fd69882e6bc9283a44e4a56a985c8584e7d86fb568741f605636555
🗳️ authorizeUpgrade hash: 0x21eca42f73bbf3dfb48a577a6316fd3106d57fcc23fce81796e8017e096d56fb
🗳️ Blake2-256 hash:       0xd4851745e7adc15a6eeb3dc49729b85b3314c4d3834c99acb1d0dc5cb58f1f77
📦 IPFS:                  QmYGDkaasBpX6KFJUCoMdaLopvAhnfru1FybNtPv56gDGD

Westend People

🏋️ Runtime Size:          1.08 MB (1135455 bytes)
🔥 Core Version:          people-westend-1024000 (people-westend-0.tx2.au1)
🗜 Compressed:            Yes: 79.92%
🎁 Metadata version:      V14
🗳️ system.setCode hash:   0xc625894b494798609219c75bac247fe68082d5f9ca1121d7b3ce9947c1cebd56
🗳️ authorizeUpgrade hash: 0x30d5529375abcb102536709021e5cb6bbe121f708adfe770dce56a746e1aaa3a
🗳️ Blake2-256 hash:       0x8b7e99817d21120731d2dbbc89ef8be142a20f175756df6626f6ffd461e5b8ca
📦 IPFS:                  QmdgKqi2WTS29p4MKXxg3YQtMQEZZW3nnH4mR7DyPD4xRK

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:stable2606-rc1

or

docker pull parity/polkadot-parachain:stable2606-rc1

Don't miss a new polkadot-sdk release

NewReleases is sending notifications on new releases.