Changelog
Changelog for the runtimes governed by the Polkadot Fellowship.
The format is based on Keep a Changelog.
[1.7.0] 22.08.2025
Fixed
- Use
pallet-assets
instead ofpallet-balances
for XCM benchmarks on asset hubs (polkadot-fellows/runtimes/pull/758)- This means XCM benchmarks will have a higher weight.
- All XCM benchmarks use sibling parachain as destination instead of Relay chain to properly adapt weights in context of incoming migration from Relay to Asset Hub (polkadot-fellows/runtimes/pull/709)
Added
- Integrate "Empowered XCM Origins" features to System Chains (polkadot-fellows/runtimes/pull/799)
- Test cases for all system chains to verify if parachain is able to process authorize_upgrade call as if it was received from governance chain (polkadot-fellows/runtimes/pull/783)
- Add Secretary Salary Pay Test Over XCM (#778)
- Upgrade to Polkadot-SDK
stable2506
(polkadot-fellows/runtimes/pull/817)- #7833: Add
poke_deposit
extrinsic to pallet-society - #7995: Add
PureKilled
event to pallet-proxy - #8254: Introduce
remove_upgrade_cooldown
This dispatchable enables anyone to pay for removing an active upgrade cooldown from a parachain instead of waiting for the cooldown to be finished. It is useful for times when a parachain needs to apply an upgrade faster than the upgrade cooldown, but it will need to pay in this case. The dispatchable enables anyone to remove an upgrade cooldown of any parachain. The caller needs to pay for the removal and the tokens are burned on a successful removal. - #8171: Add event
VestingCreated
and emit on vested transfer. - #8382: Add
poke_deposit
extrinsic to pallet-bounties - #7592: Add Paras
authorize_code_hash
+apply_authorized_code
feature
This feature is useful when triggering a Paras pallet call from a different chain than the one where the Paras pallet is deployed. For example, we may want to sendParas::force_set_current_code(para, code)
from the Collectives and/or Asset Hub to the Relay Chain (because the Relay Chain governance will be migrated to the Asset Hub as a part of AHM).
The primary reason for this approach is to avoid transferring the entirenew_code
Wasm blob between chains. Instead, we authorize thecode_hash
using root viafn authorize_force_set_current_code_hash(new_authorization, expire_at)
. This authorization can later be applied by anyone usingParas::apply_authorized_force_set_current_code(para, new_code)
. Ifexpire_at
is reached without the authorization being used, it is automatically removed. - #7882: Add
poke_deposit
extrinsic to pallet-recovery
Historically, the collection of storage deposits was running in an infallible context. Meaning we needed to make sure that the caller was able to pay the deposits when the last contract execution returns. To achieve that, we capped the storage deposit limit to the maximum balance of the origin. This made the code more complex: It conflated the deposit limit with the amount of balance the origin has.
In the meantime, we changed code around to make the deposit collection fallible. But never changed this aspect.
This PR rectifies that by doing:
The root storage meter and all its nested meter's limits are completely independent of the origin's balance. This makes it way easier to argue about the limit that a nested meter has at any point.
Consistently useStorageDepositNotEnoughFunds
(limit not reached) andStorageDepositLimitExhausted
(limit reached).
Origin not being able to pay the existential deposit (ED) for a new account is nowStorageDepositNotEnoughFunds
and traps the caller rather then being aTransferFailed
return code. Important since we are hiding the ED from contracts, so it should also not be an error code that must be handled. - #8314: Add RPCs in the statement store to get the statements and not just the statement data.
In statement-store, statements can contain a proof with the signature of the statement. This proof is useful to assert that the statement comes from the expected account. This proof also signs for all the statement's fields, which can also be useful information for the receiver.
- #7833: Add
- Upgrade to Polkadot-SDK
unstable2507
(polkadot-fellows/runtimes/pull/849) - [Encointer] use XCM V5 to remotely spend funds from encointer treasury accounts on AHK polkadot-fellows/runtimes/pull/679
Changed
- Upgrade to Polkadot-SDK
unstable2507
(polkadot-fellows/runtimes/pull/849)- #7953: Add deposit for setting session keys
- π¨ Setting session keys now might charge a storage deposit. The amount can be inspected in the Session::KeyDeposit of the runtime metadata. This value is intended to be set post AHM. Validators should make sure they have some free balance to cover this deposit the next time they want to rotate their keys.
- Session keys previously could be set only by the associated controller account of a stash. Now, this filter no longer exists, and they can be set by anyone (ergo, the deposit). For validators, please make sure to submit your session keys (henceforth) from the stash account.
- #7953: Add deposit for setting session keys
- Add foreign-consensus cousin Asset Hub as trusted aliaser to allow XCMv5 origin preservation for foreign-consensus parachains polkadot-fellows/runtimes/pull/794)
- Configure block providers for pallets requiring block context (polkadot-fellows/runtimes/pull/813):
- vesting: keep using Relay Chain block provider
- multisig: switch to local block provider (for unique multisig IDs)
- proxy: use Relay Chain block provider (for delayed announcements)
- nfts: use Relay Chain block provider (for minting start/end blocks)
- PolkadotAssetHub: Enable Async Backing (polkadot-fellows/runtimes/pull/763)
- Upgrade to Polkadot-SDK
stable2506
(polkadot-fellows/runtimes/pull/817)- #9137: Pallet XCM - transfer_assets pre-ahm patch
π¨ Pallet XCM'stransfer_assets
extrinsic now returns an error when it determines that a reserve transfer of DOT|KSM has to be done.
This is a safeguard in preparation for the Asset Hub Migration (AHM), where the reserve of DOT|KSM will change from the Relay Chain to Asset Hub.
After the migration, another patch will remove this error case and use the correct reserve.
π¨ For DOT|KSM cross-chain transfers please uselimited_reserve_transfer_assets
ortransfer_assets_using_type_and_then
. - #8718: Contracts: Record ED as part of the storage deposit.
- #8554: Contracts: pallet-assets ERC20 precompile
- #7762: Contracts: ERC20 XCM Asset Transactor
This PR introduces an Asset Transactor for dealing with ERC20 tokens and adds it to Asset Hub Westend.
This means asset ids of the form{ parents: 0, interior: X1(AccountKey20 { key, network }) }
will be matched by this transactor and the corresponding transfer function will be called in the smart contract whose address is key.
If your chain uses pallet-revive, you can support ERC20s as well by adding the transactor, which lives in assets-common. - #8197: [pallet-revive] Add
fee_history
- #8148: [pallet-revive] eth-rpc refactoring
- Refactor eth-rpc.
- Get rid of the in-memory cache; we can just store receipts / logs into sqlite.
- Track both best and finalized blocks so that we can properly index transactions in case of a Relay Chain re-org.
- Keep reference to the latest finalized block so that we can use that for queries that use the finalized block tag.
- Use
--index-last-n-blocks
CLI parameter to re-index the lastn
blocks when the server starts. - Fix issue with
gas_price
calculation for EIP1559.
- #8545: [pallet-revive] eth-rpc improved healthcheck
- #8587: [pallet-revive] Make subscription task panic on error
- #8664: [pallet-revive] Fix rpc-types
- #8311: [pallet-revive] Update tracing RPC methods parameters
Updatedebug_trace*
methods to support extra parameters supported by geth.
The method now can specify a timeout and whether we should only return a trace for the top call. - #8734: [pallet-revive] Contract's nonce starts at 1
- #8274: [pallet-revive] Add
get_storage_var_key
for variable-sized keys - #8103: [pallet-revive] Add genesis config
- #8273: [pallet-revive] Add net-listening rpc
- #8667: [pallet-revive] Simplify the storage meter
- #7867: Make read/write benchmarks more accurate
- #8281:
XcmPaymentApi::query_weight_to_asset_fee
simple common impl - #8535: Make
WeightBounds
returnXcmError
to surface failures
Improved XCM weight calculation error handling and traceability. TheWeightBounds
trait now returns detailedXcmError
types instead of opaque results, allowing downstream consumers to access specific error context for failures like instruction decoding issues, weight overflows, and instruction limit violations. Added structured debug logging with contextual information to aid in diagnosing weight estimation failures during message preparation and execution. - #8122: Accommodate small changes to unstable V16 metadata format
π¨ The frame-metadata version is bumped, which leads to a few minor changes to our sp-metadata-ir crate to accommodate small changes in the unstable V16 metadata format. - #8234: Set a 16 MiB heap memory limit when decoding an
UncheckedExtrinsic
- #7730: Nest errors in pallet-xcm
To address the issue of vagueLocalExecutionIncomplete
errors in pallet-xcm, the PR introducesLocalExecutionIncompleteWithError(ExecutionError)
, which nests a compactExecutionError
enumβaligned withXcmError
and excluding strings like inFailedToTransactAsset
: to provide detailed error information within FRAME's 4-byte limit. This enhances error reporting by specifying causes like insufficient balance or asset transaction failures, with strings logged for debugging. - #7220: Yet Another Parachain is introduced, with the main purpose to be a target for the Spammening events, but also to be used like one more general-purpose testing parachain runtime.
- #3811: Implicit
chill
when full unbonding in pallet-staking.
Modifies theunbond
extrinsic to forcefullychill
stash when unbonding, if the full stake is unbonded. - #8724: Implement detailed logging for XCM failures
Improves diagnostics in XCM-related code by adding detailed error logging, especially within map_err paths. It includes clearer messages, standardized log targets, and richer context to aid runtime developers and node operators in debugging and monitoring. - #7960: Stabilize pallet view functions
Pallet view functions are no longer marked as experimental, and their use is suggested starting from this PR. - #7597: Introduce
CreateBare
, deprecatedCreateInherent
RenameCreateInherent
toCreateBare
, add methodcreate_bare
and deprecatecreate_inherent
.
Both unsigned transaction and inherent use the extrinsic typeBare
.
Before this PR CreateInherent trait was use to generate unsigned transaction, now unsigned transaction can be generated using a proper traitCreateBare
. - #8599: Snowbridge: Unpaid execution when bridging to Ethereum
In Snowbridge V2, the execution fee on Ethereum is estimated dynamically and injected into the XCM, eliminating the need to preconfigure the bridge fee.
Additionally, we also aim to avoid maintaining the Asset Hubβs sovereign account on the Bridge Hub. - #8327: Update to the latest unstable V16 metadata.
- #8038: Fix penpal runtime
Allow using Penpal native asset (PEN) for paying local fees and allow teleporting it from/to AH. Also allow unpaid execution from relay chain for sudo calls. - #8344: XCMP weight metering: account for the MQ page position
- #8021: XCMP: use batching when enqueuing inbound messages
This PR implements batching for the XCMP inbound enqueueing logic, which leads to an about ~75x performance improvement for that specific code. - #9202:
apply_authorized_force_set_current_code
does not need to consume the whole block
- #9137: Pallet XCM - transfer_assets pre-ahm patch
- Proxy type
NonTranfer
: Use a whitelist of calls and remove some not useful calls from the whitelist (polkadot-fellows/runtimes/pull/646) - Add Snowbridge V2 pallets, to enable Snowbridge V2 bridging: polkadot-fellows/runtimes/pull/796)
Runtime info
These runtimes were built with rustc 1.88.0 (6b00bc388 2025-06-23) using srtool v0.18.3
To replicate the build, use the following command:
srtool build
--root --profile production
--package CRATE_NAME --runtime-dir PATH_TO_CRATE
--build-opts="--features=on-chain-release-build"
Polkadot
ποΈ Runtime Size: 2.05Mi (2142201 bytes)
π Compressed: Yes: 74.49%
π₯ Core Version: polkadot-1007000 parity-polkadot-0.tx26.au0
π Metadata version: V14
π³οΈ Blake2-256 hash: 0xe8ff25df68f6e5886311e3e6a2d7fd7e38a1ded3d478dc815e9acf0a84c6551c
π¦ IPFS: QmanQ71ofejLq9us46PtZQbEEeNyhKzYYTTT4j3RzVDJTJ
People Polkadot
ποΈ Runtime Size: 1.24Mi (1291981 bytes)
π Compressed: Yes: 74.96%
π₯ Core Version: people-polkadot-1007000 people-polkadot-0.tx0.au1
π Metadata version: V14
π³οΈ Blake2-256 hash: 0x8c85df7566f24c43478657406b98b22c86f248511545be3b2e42d1426b09c896
π¦ IPFS: QmYLpiP87Q6jWPa7yK355DH6KQx8vjrPuWLrkKuqFuAuis
People Kusama
ποΈ Runtime Size: 1.23Mi (1288599 bytes)
π Compressed: Yes: 75.01%
π₯ Core Version: people-kusama-1007000 people-kusama-0.tx1.au1
π Metadata version: V14
π³οΈ Blake2-256 hash: 0x52f40e83ccbf6a073dcf3736002156690dcd0bdc25a753a772d9ed6b81cd4999
π¦ IPFS: QmWmc5uuvvY6rQ6gLHZqgEq1XBHtbmHy6TcWhwVjb2PURc
Kusama
ποΈ Runtime Size: 2.16Mi (2261450 bytes)
π Compressed: Yes: 75.1%
π₯ Core Version: kusama-1007000 parity-kusama-0.tx26.au2
π Metadata version: V14
π³οΈ Blake2-256 hash: 0x7860c471b8189178556ddc22952193c8fb2099ac201eeda166669df9c3998291
π¦ IPFS: QmRKBB1sFY61ovWSixbqXgyE1mnHiaHMtekZuLECX5HiSo
Glutton
ποΈ Runtime Size: 578.78Ki (592662 bytes)
π Compressed: Yes: 73.24%
π₯ Core Version: glutton-1007000 glutton-0.tx1.au1
π Metadata version: V14
π³οΈ Blake2-256 hash: 0x49d37c6c8af4d1d76aec00c4c78662a1324af6ab22880eb1ac2ed3f586e597eb
π¦ IPFS: QmaCohjRpfDg6wtjMGBNqDy2YeHDMwXprUq9JKSeQ7an4s
Encointer Parachain
ποΈ Runtime Size: 1.41Mi (1469305 bytes)
π Compressed: Yes: 75.48%
π₯ Core Version: encointer-parachain-1007000 encointer-parachain-1.tx4.au1
π Metadata version: V14
π³οΈ Blake2-256 hash: 0xf4e121db06fb17abefb9f9ed4ad9daa8e32034d7147d0cbc48bba6405abfa148
π¦ IPFS: QmWdnwJ6Acg1CqoKKC4EBzCytoc7tDrEjxJP5izozx18KC
Coretime Polkadot
ποΈ Runtime Size: 1.24Mi (1299004 bytes)
π Compressed: Yes: 74.88%
π₯ Core Version: coretime-polkadot-1007000 coretime-polkadot-0.tx0.au1
π Metadata version: V14
π³οΈ Blake2-256 hash: 0xafbe04343520216de35e9d4d0089e42776fa241644fc75fee19ad6fdfe75cb61
π¦ IPFS: QmYQAX7CmZwKge4ncEc4fGN9WFqz8xSzAUXuTduWhUorQ1
Coretime Kusama
ποΈ Runtime Size: 1.24Mi (1295776 bytes)
π Compressed: Yes: 74.9%
π₯ Core Version: coretime-kusama-1007000 coretime-kusama-0.tx1.au1
π Metadata version: V14
π³οΈ Blake2-256 hash: 0xc545c878e167f3a92dbc87f8356cf20786940b91e029d923c22eb2876c3c9cc3
π¦ IPFS: QmcDnmkhEGHuoFqPuruqbQ9JAU8WFraC1rAqtfm1Jk8pCk
Collectives
ποΈ Runtime Size: 1.42Mi (1487378 bytes)
π Compressed: Yes: 76.11%
π₯ Core Version: collectives-1007000 collectives-0.tx7.au1
π Metadata version: V14
π³οΈ Blake2-256 hash: 0x012d7d347a6f36c83ed922b85aa85145a9ab31e937c895b10df87567a7d07a86
π¦ IPFS: Qmbw4BRcuha5fJnxPWNJebXWXWbo51g8tE4831EuCgwGva
Bridge Hub Polkadot
ποΈ Runtime Size: 1.59Mi (1658606 bytes)
π Compressed: Yes: 74.58%
π₯ Core Version: bridge-hub-polkadot-1007000 bridge-hub-polkadot-0.tx4.au1
π Metadata version: V14
π³οΈ Blake2-256 hash: 0xc71ef1eb515499f49c30fa4c114f16b595f0a73c1dad8d7925a37ca349824521
π¦ IPFS: QmczAs6uPehrefJzuUt5YP3fKGbEbD9ofm8uL9sQvu69ag
Bridge Hub Kusama
ποΈ Runtime Size: 1.31Mi (1369784 bytes)
π Compressed: Yes: 74.39%
π₯ Core Version: bridge-hub-kusama-1007000 bridge-hub-kusama-0.tx5.au1
π Metadata version: V14
π³οΈ Blake2-256 hash: 0x180162f28c617fbeec6b7e366628e58d30786bd95103f158a58283f24de23adb
π¦ IPFS: QmP4eE6Jh5i3YNGLGa4PjiUdGKdCbPLvLcdLLRJhuBw22A
Asset Hub Polkadot (previously Statemint)
ποΈ Runtime Size: 1.63Mi (1703020 bytes)
π Compressed: Yes: 77.03%
π₯ Core Version: statemint-1007000 statemint-0.tx15.au1
π Metadata version: V14
π³οΈ Blake2-256 hash: 0x97ae9a5458ecbe7102d90ebcef82c71b4138807711be353a9a6c1b7eb6f2d103
π¦ IPFS: QmbPxezkKGBAmm9VdxXPjY1Wj8tAboSszwqxEu7nCSocux
Asset Hub Kusama (previously Statemine)
ποΈ Runtime Size: 1.94Mi (2031384 bytes)
π Compressed: Yes: 76.55%
π₯ Core Version: statemine-1007000 statemine-0.tx15.au1
π Metadata version: V14
π³οΈ Blake2-256 hash: 0xb14d573e460f15f03afce7984b65fbe6b8969779316f856ca2c5120ff2565efe
π¦ IPFS: QmW4TKrpBe9egiNMYbys6o8tsypQDgGGcjcDZ6dvQMixLW