This release contains the changes from polkadot-stable2409-2
to polkadot-stable2412
.
ℹ️ Please note:
The tag corresponding to the current stable release polkadot-stable2412
and matching the old pattern will be available under polkadot-v1.17.0.
This release contains two additions comparing to the previous releases:
- From this release, in addition to the Linux binaries, binaries compiled for MacOS are available for:
polkadot
polkadot-execute-worker
polkadot-prepare-worker
polkadot-parachain
polkadot-omni-node
- gpg signature has changed slightly, all the binaries are signed with the new release team key: "ParityReleases release-team@parity.io", which is part of the keyring as well as the previous key: "Parity Security Team security@parity.io".
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.
[#6729]: Fix order of resending messages after restart
At restart when dealing with a coalesced approval we might end up in a situation where we sent to approval-distribution the approval before all assignments covering it, in that case, the approval is ignored and never distribute, which will lead to no-shows.
[#6864]: Fix approval-voting canonicalize off by one
The approval-voting canonicalize was off by one, which lead to blocks being cleaned up every other 2 blocks. Normally, this is not an issue, but on restart we might end up sending NewBlocks to approval-distribution with finalized blocks.
This would be problematic in the case were finalization was already lagging before restart, so after restart approval-distribution will trigger aggression on the wrong already finalized block.
[#5038]: Plumb RPC listener up to caller
This PR allows the RPC server's socket address to be returned when initializing the server. This allows the library consumer to easily programmatically determine which port the RPC server is listening on.
[#6863]: Update merkleized-metadata to 0.2.0
0.1.2 was yanked as it was breaking semver.
[#5521]: Allow to call arbitrary runtime apis using RelayChainInterface
This PR adds a call_runtime_api
method to RelayChainInterface trait, and a separate function also named call_runtime_api
which allows the caller to specify the input and output types, as opposed to having to encode them.
[#6156]: Use bool::then instead of then_some with function calls
Fix misusage of bool::then_some
.
[#5911]: Removed the possibility to start a shell parachain node
Removed the possibility to start a shell parachain node using the polkadot-parachain-lib or polkadot-parachain-bin.
[#5997]: Implement archive_unstable_storageDiff method
This PR implements the archive_unstable_storageDiff
rpc-v2 method.
Developers can use this method to fetch the storage differences between two blocks. This is useful for oracles and archive nodes.
For more details see: https://github.com/paritytech/json-rpc-interface-spec/blob/main/src/api/archive_unstable_storageDiff.md.
[#4837]: Add PVF execution priority
The new logic optimizes the distribution of execution jobs for disputes, approvals, and backings.
The main goal is to create back pressure for backing in the presence of disputes or numerous approval jobs.
[#5343]: Allow to disable gap creation during block import
New property BlockImportParams::create_gap
allows to change whether to create block gap in case block has no parent (defaults to true
keeping existing behavior), which is helpful for sync protocols that do not need to sync the gap after this happens. BlockImportOperation::create_gap()
method was also introduced, though in most cases BlockImportParams::create_gap
will be used.
[#6676]: Expose the unstable metadata v16
This PR exposes the unstable metadata V16. The metadata is exposed under the unstable u32::MAX number.
Developers can start experimenting with the new features of the metadata v16. Please note that this metadata is under development and expect breaking changes until stabilization.
The ExtrinsicMetadata
trait receives a breaking change. Its associated type VERSION
is rename to VERSIONS
and now supports a constant static list of metadata versions.
The versions implemented for UncheckedExtrinsic
are v4 (legacy version) and v5 (new version).
For metadata collection, it is assumed that all TransactionExtensions
are under version 0.
[#5716]: Replace lazy_static
with LazyLock
Replace all lazy_static usages with LazyLock from the Rust standard library. This will bring us less dependencies.
[#4639]: Added the fork-aware transaction pool implementation
Most important changes introduced by this PR:
- The transaction pool references spread across codebase are now wrapper to a transaction pool trait object,
- The fork-aware pool implementation was added.
- The
sc-transaction-pool
refactored, - Trasnaction pool builder was introduced to allow to instantiation of either old or new transaction pool. Refer to PR description for
more details on how to enable fork-aware pool in the custom node.
[#5686]: sync: Remove checking of the extrinsics root
Remove checking the extrinsics root as part of the sync code.
With the introduction of system_version
and the possibility to use the V1
layout for the trie when calculating the extrinsics root, it would require the sync code to fetch the runtime version first before knowing which layout to use when building the extrinsic root.
The extrinsics root is still checked when executing a block on chain.
[#6382]: gensis-config: patching default RuntimeGenesisConfig
fixed
This PR fixes issue reported in #6306.
It changes the behavior of sc_chain_spec::json_patch::merge
function which no longer removes any keys from the base JSON object.
[#5469]: Syncing strategy refactoring
Mostly internal changes to syncing strategies that is a step towards making them configurable/extensible in the future. It is unlikely that external developers will need to change their code.
[#5774]: Avoid unnecessary state reset of allowed_requests when no block requests are sent
Previously, the state of allowed_requests
was always reset to the default even if there were no new block requests. This could cause an edge case because peer_block_request()
will return early next time when there are no ongoing block requests.
This patch fixes it by checking whether block requests are empty before updating the state.
[#6588]: rpc server: fix subscription id_provider being reset to default one
The modification ensures that the id_provider variable is cloned instead of taken, which can help prevent issues related id provider being reset to the default.
[#5666]: Make syncing strategy an argument of the syncing engine
Syncing strategy is no longer implicitly created when building network, but needs to be instantiated explicitly.
Previously default implementation can be created with new function build_polkadot_syncing_strategy
or custom syncing strategy could be implemented and used instead if desired, providing greater flexibility for chain
developers.
[#5883]: statement-distribution RFC103 implementation
Introduces checks for the new candidate descriptor fields: core_index
and session_index
.
[#5924]: Bump PoV request timeout
With asynchronous backing and PoV size 10MB, we can increase the PoV request timeout from 1.2s to 2s.
[#4846]: Make approval-voting runnable on a worker thread
Make approval-voting subsystem runnable on a separate worker thread without having to to always pass to it an orchestra context. It achieves that by refactoring existing functions to require only the minimal set of traits needed in the function instead of the general
Context
[#4849]: Introduce approval-voting-parallel subsystem
This introduces a new subsystem called approval-voting-parallel. It combines the tasks previously handled by the approval-voting and approval-distribution subsystems.
The new subsystem is enabled by default on all test networks. On production networks
like Polkadot and Kusama, the legacy system with two separate subsystems is still in use.
However, there is a CLI option --enable-approval-voting-parallel to gradually roll out the new subsystem on specific nodes. Once we are confident that it works as expected, it will be enabled by default on all networks.
The approval-voting-parallel subsystem coordinates two groups of workers:
- Four approval-distribution workers that operate in parallel, each handling tasks based on the validator_index of the message originator.
- One approval-voting worker that performs the tasks previously managed by the standalone approval-voting subsystem.
[#5787]: Move bitfield_distribution to blocking task pool and set capacity to 8192
This is moving bitfield_distribution to the blocking task pool because it does cpu intensive work and to make it snappier. Additionally, also increase the message capacity of the subsystem to make sure the queue does not get full if there is a burst of messages.
[#5847]: candidate-validation
: RFC103 implementation
Introduces support for new v2 descriptor core_index
and session_index
fields.
The subsystem will check the values of the new fields only during backing validations.
[#5919]: substrate-offchain: upgrade hyper to v1
Bump depencency hyper
of substrait-offchain
for http from 0.14
to 1
.
This changed APIs a bit;
sc_offchain::Offchainworker::new()
now returnsstd::io::Result<Self>
(Previously wasSelf
)
[#6218]: Enable approval-voting-parallel by default on kusama
Enable approval-voting-parallel by default on kusama
[#6104]: LocalTransactionPool implemented for fork aware transaction pool
LocalTransactionPool trait is implemented for fork aware transaction pool.
[#5707]: Remove ValidateFromChainState
Removed the CandidateValidationMessage::ValidateFromChainState
, which was previously used by backing, but is no longer relevant since initial async backing implementation
[#6696]: Make approval-distribution aggression a bit more robust and less spammy
The problem with the current implementation of approval-distribution aggression is that is too spammy, and can overload the nodes, so make it less spammy by moving back the moment we trigger L2 aggression and make resend enable only for the latest unfinalized block.
[#5768]: export NodeHealthProxyLayer
This PR export NodeHealthProxyLayer
from sc-rpc-server.
[#6677]: chore: Update litep2p to v0.8.2
This includes a critical fix for debug release versions of litep2p (which are running in Kusama as validators).
While at it, have stopped the oncall pain of alerts around incoming_connections_total
. We can rethink the metric expose of litep2p in Q1.
[#5635]: Fix edge case where state sync is not triggered
There is an edge case where the finalized block notification is received, but the conditions required to initiate the state sync are not fully met. In such cases, state sync would fail to start as expected and remain stalled.
This patch addresses it by storing the pending attempt and trying to start the state sync later when the conditions are satisfied.
[#5915]: Omni-Node renamings
This PR renames the polkadot-parachain-lib
crate to polkadot-omni-node-lib
and introduces a new polkadot-omni-node
binary.
[#5880]: Fix prospective parachains test to use shuffled candidate list
Fix prospective parachains test to use shuffled candidate list.
Resolves #5617.
[#5908]: collation-generation: use v2 receipts
Implementation of RFC 103 for the collation-generation subsystem.
Also removes the usage of AsyncBackingParams.
[#6268]: Bump a timeout in zombienet coretime smoke test
polkadot/zombienet_tests/smoke/0004-coretime-smoke-test.zndsl still timeouts on CI from time to time. Bumping the timeout a bit more.
Related to #6226
[#6652]: rpc server: re-use server builder per rpc interface
This changes that the RPC server builder is re-used for each RPC interface which is more efficient than to build it for every connection.
[#6742]: Update litep2p backend to v0.8.3
This release includes two fixes for small memory leaks on edge-cases in the notification and request-response protocols.
While at it, have downgraded a log message from litep2p.
[#5830]: Remove jaeger from approval-voting and approval-distribution
Jaeger was remove from approval-voting and approval-distribution because it did not prove to improve the debugging and it wasted precious cpu cycles.
[#5737]: Make syncing service an argument of build_network
build_network
is accompanied with lower-level build_network_advanced
with simpler API that does not create syncing engine internally, but instead takes a handle to syncing service as an argument. In most cases typical syncing engine with polkadot syncing strategy and default block downloader can be created with newly introduced sc_service::build_default_syncing_engine()
function, but lower-level build_default_block_downloader
also exists for those needing more customization.
These changes allow developers higher than ever control over syncing implementation, but build_network
is still available for easier high-level usage.
[#5762]: Fast return for invalid request of node health
Return directly when invalid request for node health api
[#5601]: Introduce RpcParams
in sc-cli
Refactors and consolidates all RPC-related parameters in the run command into a dedicated RpcParams
struct. This change allows downstream users to build custom run command without duplicating code.
[#6011]: collator protocol: validate descriptor version on the validator side
Implement checks needed for RFC 103 polkadot-fellows/RFCs#103 in the validator side of the collator protocol.
[#5789]: Prevents EthereumBlobExporter from consuming parameters when returning NotApplicable
When the EthereumBlobExporter returned a NotApplicable error, it consumed parameters universal_source
, destination
and message
. As a result, subsequent exporters could not use these values. This PR corrects this incorrect behaviour. It also changes error type from Unroutable
to NotApplicable
when the global consensus system cannot be extracted from the universal_source
, or when the source location cannot be converted to an agent ID. Lastly, it changes the error type from MissingArgument
to NotApplicable
when the parachain ID cannot be extracted from the location. These changes should have no effect - it is purely to correct behvaiour should multiple exporters be used.
[#5540]: Avoid unnecessary block gap updates
Previously, the block gap storage in database and state in BlockchainDb
could be updated even if no changes occurred.
This commit refines the logic to ensure updates only occur when the block gap value actually changes, reducing unnecessary writes and enhancing overall efficiency.
[#4974]: Remove libp2p dependency from sc-network-sync
This PR removes libp2p::request_response::OutboundFailure
from substrate/client/network/sync/src/engine.rs
.
[#5811]: Improve import_notification_stream
documentation
"Updates the doc comment on the import_notification_stream
to make its behaviour clearer. Now it specifically states that this notification stream is fired on every import notification after the initial sync, and only when there are re-orgs in the initial sync."
[#5732]: Expose the unstable metadata v16
This PR exposes the unstable metadata V16. The metadata is exposed under the unstable u32::MAX number.
Developers can start experimenting with the new features of the metadata v16. Please note that this metadata is under development and expect breaking changes until stabilization.
The ExtrinsicMetadata
trait receives a breaking change. Its associated type VERSION
is rename to VERSIONS
and now supports a constant static list of metadata versions.
The versions implemented for UncheckedExtrinsic
are v4 (legacy version) and v5 (new version).
For metadata collection, it is assumed that all TransactionExtensions
are under version 0.
[#6690]: Fix Possible bug, Vote import failed after aggression is enabled
Fix the appearance of Possible bug: Vote import failed after aggression is enabled, the log itself is harmless because approval gets imported anyway and aggression is able to distribute it, nevertheless is something that can be easily be fixed by picking the highest required routing possible.
[#5592]: Introduce BlockGap
This is the first step towards #5406, refactoring the representation of block gap. This refactor converts the existing (NumberFor<Block>, NumberFor<Block>)
into a dedicated BlockGap<NumberFor<Block>>
struct. This change is purely structural and does not alter existing logic, but lays the groundwork for the follow-up PR. The compatibility concern in the database caused by the new structure transition is addressed as well.
The BlockGap
refactoring results in breaking changes in the Info
structure returned in client.info()
.
[#5856]: Extend state tracking of chainHead to capture notification gaps
This PR extends the state tracking of the RPC-v2 chainHead methods.
ChainHead tracks the reported blocks to detect notification gaps.
This state tracking ensures we can detect NewBlock
events for which we did not report previously the parent hash.
[#6015]: Rename QueueEvent::StartWork
When we send QueueEvent::StartWork
, we have already completed the execution. Therefore, QueueEvent::FinishWork
is a better match.
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).)
[#6318]: Refactor pallet claims
Adds bounds on stored types for pallet claims.
Migrates benchmarking from v1 to v2 for pallet claims.
[#5892]: Treasury: add migration to clean up unapproved deprecated proposals
It is no longer possible to create Proposals
storage item in pallet-treasury
due to migration from governance v1 model but there are some Proposals
whose bonds are still on hold with no way to release them.
The purpose of this migration is to clear Proposals
which are stuck and return bonds to the proposers.
[#6299]: migrate pallet-recovery to benchmark V2 syntax
migrate pallet-recovery to benchmark V2 syntax
[#6073]: Refactor pallet-grandpa
benchmarks to v2
Update benchmarks in GRANDPA pallet to use the second version of the frame_benchmarking
runtime benchmarking framework.
[#6039]: Added Trusted Query API calls.
Added is_trusted_reserve and is_trusted_teleporter API calls to all the runtimes.
Given an asset and a location, they return if the chain trusts that location as a reserve or teleporter for that asset respectively.
You can implement them on your runtime by simply calling a helper function on pallet-xcm
.
impl xcm_runtime_apis::trusted_query::TrustedQueryApi<Block> for Runtime {
fn is_trusted_reserve(asset: VersionedAsset, location: VersionedLocation) -> Result<bool, xcm_runtime_apis::trusted_query::Error> {
PolkadotXcm::is_trusted_reserve(asset, location)
}
fn is_trusted_teleporter(asset: VersionedAsset, location: VersionedLocation) -> Result<bool, xcm_runtime_apis::trusted_query::Error> {
PolkadotXcm::is_trusted_teleporter(asset, location)
}
}
[#5939]: [pallet-revive] Bump PolkaVM and add static code validation
Statically validate basic block sizes and instructions.
[#5866]: [pallet-revive] Ethereum JSON-RPC integration
Related PR: https://github.com/paritytech/revive-ethereum-rpc/pull/5
Changes Included:
- A new pallet::call eth_transact.
- A custom UncheckedExtrinsic struct to dispatch unsigned eth_transact calls from an Ethereum JSON-RPC proxy.
- Generated types and traits to support implementing a JSON-RPC Ethereum proxy.
[#6778]: Added fallback_max_weight to Transact for sending messages to V4 chains
Removing the require_weight_at_most
parameter in V5 Transact introduced a problem when converting a message from V5 to V4 to send to chains that didn't upgrade yet.
The local chain doesn't know how to decode calls for remote chains so it can't automatically populate require_weight_at_most
required by V4 Transact.
To fix this, XCM v5 Transact now also takes a fallback_max_weight: Option<Weight>
parameter.
This can be set to None
if the instruction is not meant to be sent to chains running XCM versions lower than V5.
If set to Some(weight)
, a subsequent conversion to V4 will result in Transact { require_weight_at_most: weight, .. }
.
The plan is to remove this workaround in V6 since there will be a good conversion path from V6 to V5.
[#6316]: Migrate pallet-election-provider-multi-phase benchmark to v2 and improve doc
Migrate pallet-election-provider-multi-phase benchmark to v2 and improve doc
[#5779]: [pallet-revive] last call return data API
This PR introduces 2 new syscall: return_data_size
and return_data_copy
, resembling the semantics of the EVM RETURNDATASIZE
and RETURNDATACOPY
opcodes.
The ownership of ExecReturnValue
(the return data) has moved to the Frame
.
This allows implementing the new contract API surface functionality in ext with no additional copies.
Returned data is passed via contract memory, memory is (will be) metered, hence the amount of returned data can not be statically known, so we should avoid storing copies of the returned data if we can.
By moving the ownership of the exectuables return value into the Frame
struct we achieve this.
A zero-copy implementation of those APIs would be technically possible without that internal change by making the callsite in the runtime responsible for moving the returned data into the frame after any call.
However, resetting the stored output needs to be handled in ext, since plain transfers will not affect the stored return data (and we don't want to handle this special call case inside the runtime
API).
This has drawbacks:
- It can not be tested easily in the mock.
- It introduces an inconsistency where resetting the stored output is handled in ext, but the runtime API is responsible to store it back correctly after any calls made.
Instead, with ownership of the data inFrame
, both can be handled in a single place.
Handling both infn run()
is more natural and leaves less room for runtime API bugs.
The returned output is reset each time before running any executable in a nested stack.
This change should not incur any overhead to the overall memory usage as only the returned data from the last executed frame will be kept around at any time.
[#6171]: remove parachains_assigner
Remove the code of the parachains_assigner pallet, since coretime was released on all production networks.
[#6205]: pallet-message-queue: Fix max message size calculation
The max size of a message should not depend on the weight left in a given execution context. Instead the max message size depends on the service weights configured for the pallet. A message that may does not fit into on_idle
is not automatically overweight, because it may can be executed successfully in on_initialize
or in another block in on_idle
when there is more weight left.
[#5845]: Fix compilation after renaming some of benchmarks in pallet_revive.
Changed the "instr" benchmark so that it should no longer return to little weight. It is still bogus but at least benchmarking should not work.
[#5861]: [pallet-revive] immutable data storage
This PR introduces the concept of immutable storage data, used for Solidity immutable variables.
This is a minimal implementation. Immutable data is attached to a contract; to ContractInfo
fixed in size, we only store the length there, and store the immutable data in a dedicated storage map instead. Which comes at the cost of requiring an storage read (costly) for contracts using this feature.
We discussed more optimal solutions not requiring any additional storage accesses internally, but they turned out to be non-trivial to implement. Another optimization benefiting multiple calls to the same contract in a single call stack would be to cache the immutable data in Stack
. However, this potential creates a DOS vulnerability (the attack vector is to call into as many contracts in a single stack as possible, where they all have maximum immutable data to fill the cache as efficiently as possible). So this either has to be guaranteed to be a non-issue by limits, or, more likely, to have some logic to bound the cache. Eventually, we should think about introducing the concept of warm and cold storage reads (akin to EVM). Since immutable variables are commonly used in contracts, this change is blocking our initial launch and we should only optimize it properly in follow-ups.
This PR also disables the set_code_hash
API (which isn't usable for Solidity contracts without pre-compiles anyways). With immutable storage attached to contracts, we now want to run the constructor of the new code hash to collect the immutable data during set_code_hash
. This will be implemented in a follow up PR.
[#6129]: Improved TrustedQueryAPI signatures.
Changed returned type of API methods from Result<bool, xcm_runtime_apis::trusted_query::Error>
to a typed one:
type XcmTrustedQueryResult = Result<bool, xcm_runtime_apis::trusted_query::Error>
[#6169]: [Deprecation] deprecate treasury spend_local
call and related items
Deprecates spend_local
from the treasury pallet and items associated with it.
Migration
For users who were using only spend_local
before
To replace spend_local
functionality configure Paymaster
pallet configuration to be PayFromAccount
and configure AssetKind
to be ()
and use spend
call instead.
This way spend
call will function as deprecated spend_local
.
Example:
impl pallet_treasury::Config for Runtime {
..
type AssetKind = ();
type Paymaster = PayFromAccount<Self::Currency, TreasuryAccount>;
// convert balance 1:1 ratio with native currency
type BalanceConverter = UnityAssetBalanceConversion;
..
}
For users who were already using spend
with all other assets, except the native asset
Use NativeOrWithId
type for AssetKind
and have a UnionOf
for native and non-native assets, then use that with PayAssetFromAccount
.
Example from kitchensink-runtime
:
// Union of native currency and assets
pub type NativeAndAssets =
UnionOf<Balances, Assets, NativeFromLeft, NativeOrWithId<u32>, AccountId>;
impl pallet_treasury::Config for Runtime {
..
type AssetKind = NativeOrWithId<u32>;
type Paymaster = PayAssetFromAccount<NativeAndAssets, TreasuryAccount>;
type BalanceConverter = AssetRate;
..
}
// AssetRate pallet configuration
impl pallet_asset_rate::Config for Runtime {
..
type Currency = Balances;
type AssetKind = NativeOrWithId<u32>;
..
}
[#5526]: Fix enact_candidate weight generation
This PR works around an issue in multivariate linear regression of weight generation.
[#6496]: Backport #6418 to stable2412
This PR is a backport of #6418.
For context, TransactionExtension
, introduced in #3685, is part of the stable2412
release, and this PR brings important fixes and quality of life improvements. Doing the backport now allows us to not break the interface later.
Opened against #6473 as the changes in the original PR were made on top of the changes in this backport.
[#6255]: [pallet-child-bounties] Index child bounties by parent bounty
Index child bounties by their parent bounty, ensuring that their indexes are independent of child bounties from other parent bounties. This will allow for predictable indexes and the ability to batch creation and approval calls together.
Migration for Runtime Pallet Instance
Use migration::v1::MigrateToV1Impl
storage migration type to translate ids for the active child bounties and migrate the state to the new schema.
Migration for Clients
- Use new
ParentTotalChildBounties
storage item to iterate over child bounties for a certain parent bounty; - Use new
ChildBountyDescriptionsV1
storage item to get the bounty description instead of removedChildBountyDescriptions
; - Use
V0ToV1ChildBountyIds
storage item to look up the new child bounty id for a given old child bounty id; - Update the child bounty account id derivation from
PalletId + "cb" + child_id
toPalletId + "cb" + bounty_id + child_id
.
Additional Notes
- The
ChildBountyCount
storage item is deprecated and will be remove in May 2025.
[#5623]: Generic slashing side-effects
What?
Make it possible for other pallets to implement their own logic when a slash on a balance occurs.
How?
First we abstract the done_slash function of holds::Balanced to it's own trait that any pallet can implement.
Then we add a config type in pallet-balances that accepts a callback tuple of all the pallets that implement this trait.
Finally implement done_slash for pallet-balances such that it calls the config type.
Integration
The default implementation of done_slash is still an empty function, and the new config type of pallet-balances can be set to an empty tuple, so nothing changes by default.
[#6645]: xcm: fix local/remote exports when inner routers return NotApplicable
Resolved a bug in the local/remote exporters
used for bridging. Previously, they consumed dest
and msg
without returning them when inner routers/exporters failed with NotApplicable
. This PR ensures compliance with the SendXcm
and ExportXcm
traits.
[#5917]: XCM paid execution barrier supports more origin altering instructions
Updates the AllowTopLevelPaidExecutionFrom
barrier to also support messages that
use DescendOrigin
or AliasOrigin
for altering the computed origin during execution.
[#5807]: [pallet-revive] last call return data API
This PR adds the EVM chain ID to Config as well as a corresponding runtime API so contracts can query it.
Related issue: paritytech/revive#44
[#5804]: Refactor get_account_id_from_seed / get_from_seed to one common place get_account_id_from_seed / get_from_seed
were copied all over the place. This PR removes unnecessary code duplication.
Keyring::iter()
provides the same functionality and is used instead.
[#5194]: FRAME: Support instantiable pallets in tasks.
In FRAME, tasks can now be used in instantiable pallet. Also some fix for expansion with conditional compilation in construct runtine.
[#6260]: [pallet-revive] code size API
This PR implements the contract API to query the code size of a given address.
[#5640]: [pallet-revive] Move event's topics
Move event's topics inside body
[#6278]: [pallet-revive] rpc server add docker file
Add a docker for pallet-revive eth-rpc
Tested with
sudo docker build . -t eth-rpc -f substrate/frame/revive/rpc/Dockerfile
sudo docker run --network="host" -e RUST_LOG="info,eth-rpc=debug" eth-rpc
[#6505]: [pallet-broker] Fix auto renew benchmarks
Fix the broker pallet auto-renew benchmarks which have been broken since #4424, yielding Weightless
due to some prices being set too low, as reported in #6474.
Upon further investigation it turned out that the auto-renew contribution to rotate_sale
was always failing but the error was mapped. This is also fixed at the cost of a bit of setup overhead.
[#5726]: revive: Limit the amount of static memory
Limit the amount of static memory a contract can declare.
[#5608]: [pallet-revive] update runtime types
Refactor the Ext trait to use U256 instead of BalanceOf or MomentOf
[#5664]: Calling an address without associated code is a balance transfer
This makes pallet_revive behave like EVM where a balance transfer is just a call to a plain wallet.
[#6261]: Add missing events to identity pallet
Extrinsics from pallet_identity
that were missing an event emission on success now emit one.
[#6317]: eth-rpc fixes
Various fixes for the release of eth-rpc & ah-westend-runtime:
- Bump asset-hub westend spec version
- Fix the status of the Receipt to properly report failed transactions
- Fix value conversion between native and eth decimal representation
[#6536]: Bridges testing improvements
This PR includes:
- Refactored integrity tests to support standalone deployment of
pallet-bridge-messages
. - Refactored the
open_and_close_bridge_works
test case to support multiple scenarios, such as:- A local chain opening a bridge.
- Sibling parachains opening a bridge.
- The relay chain opening a bridge.
- Previously, we added instance support for
pallet-bridge-relayer
but overlooked updating theDeliveryConfirmationPaymentsAdapter
.
[#5971]: XCMv5 InitiateTransfer can preserve original origin across chains.
The new InitiateTransfer instruction can preserve the original origin across chains by setting preserve_origin: true
in the instruction itself.
When it's set to true, it will append after the inner XCM, an AliasOrigin
instruction instead of the usual ClearOrigin
.
This instruction will try to alias to the original origin, thus preserving it.
Beware: This only works if the following two rules are followed by the chain receiving such a message.
- Alias to interior locations is valid (the exact same behaviour as DescendOrigin)
- AssetHub can alias everything (most importantly sibling accounts and ethereum).
These can be set with theAliasers
configuration item, with the following adapters: - AliasChildLocation
- AliasOriginRootUsingFilter with AssetHub and Everything
An example of the first one can be seen inasset-hub-westend
and of the second one inpenpal-runtime
.
[#6148]: Fix migrations for pallet-xcm
pallet-xcm
stores some operational data that uses Versioned*
XCM types. When we add a new XCM version (XV), we deprecate XV-2 and remove XV-3.
This PR extends the existing MigrateToLatestXcmVersion
to include migration for the Queries
, LockedFungibles
, and RemoteLockedFungibles
storage types.
Additionally, more checks were added to try_state
for these types.
[#6246]: [pallet-revive] implement the block hash API
- Bound T::Hash to H256
- Implement the block hash API
[#5888]: parachain-system: send core selector ump signal
Send the core selector ump signal in cumulus. Guarded by a compile time feature called experimental-ump-signals
until nodes are upgraded to a version that includes #5423 for gracefully handling ump signals.
[#5743]: [pallet-revive] write sandbox output according to the provided output buffer length
Instead of error out if the provided output buffer is smaller than what we want to write, we can just write what fits into the output buffer instead.
We already write back the actual bytes written to the in-out pointer, so contracts can check it anyways.
This in turn introduces the benefit of allowing contracts to implicitly request only a portion of the returned data from calls and incantations.
Which is especially beneficial for YUL as the call family opcodes have a return data size argument and this change removes the need to work around it in contract code.
[#6781]: Bridges - revert-back congestion mechanism
With permissionless lanes PR#4949, the congestion mechanism based on sending Transact(report_bridge_status(is_congested))
from pallet-xcm-bridge-hub
to pallet-xcm-bridge-hub-router
was replaced with a congestion mechanism that relied on monitoring XCMP queues. However, this approach could cause issues, such as suspending the entire XCMP queue instead of isolating the affected bridge. This PR reverts back to using report_bridge_status
as before.
[#6187]: [pallet-revive] rework balance transfers
This PR removes the transfer
syscall and changes balance transfers to make the existential deposit (ED) fully transparent for contracts.
The transfer
API is removed since there is no corresponding EVM opcode and transferring via a call introduces barely any overhead.
We make the ED transparent to contracts by transferring the ED from the call origin to nonexistent accounts. Without this change, transfers to nonexistant accounts will transfer the supplied value minus the ED from the contracts viewpoint, and consequentially fail if the supplied value lies below the ED. Changing this behavior removes the need for contract code to handle this rather annoying corner case and aligns better with the EVM. The EVM charges a similar deposit from the gas meter, so transferring the ED from the call origin is practically the same as the call origin pays for gas.
[#5665]: [pallet-contracts] remove riscv support
RISC-V support is now being built inside the new fork pallet-revive
[#6147]: [pallet-revive] Ethereum JSON-RPC
Add a new Ethereum JSON-RPC server that can be used a substrate chain configured with pallet-revive
[#5311]: No-op Impl Polling Trait
Provide a NoOp implementation of the Polling trait for unit where the trait is defined and skiping benchmarks that necessitate it's definition.
[#5502]: [pallet-revive] Add pallet to AH westend
Add pallet-revive to Westend runtime, and configure the runtime to accept Ethereum signed transaction
[#6141]: Improve CheckMetadataHash
transaction extension weight and logic
The compilation now panics if the optional compile-time environment variable RUNTIME_METADATA_HASH
contains an invalid value.
The weight for the CheckMetadataHash
transaction extension is more accurate as it is almost compile-time.
[#6025]: Refactor staking pallet benchmarks to v2
Update benchmarks in staking pallet to the second version of the frame_benchmarking
runtime benchmarking framework.
[#6384]: Relax requirements on assign_core
.
Relax requirements for assign_core
so that it accepts updates for the last scheduled entry.
This will allow the coretime chain to split up assignments into multiple messages, which allows for interlacing down to single block granularity.
Fixes: #6102
[#5813]: build_struct_json_patch macro added
This PR adds a macro that allows to construct a RuntimeGenesisConfig preset containing only provided fields, while performing the validation of the entire struct.
Related issue: #5700
[#5585]: Added SetAssetClaimer instruction to XCM v5.
Added SetAssetClaimer implementation to XCM v5. With asset_claimer set users can retrieve their trapped assets at any point in time without the need to go through OpenGov reclaim process.
[#5765]: Added foreign locations to local accounts converter to all the parachains.
Added foreign locations to local accounts converter to all the parachains.
i.e. added HashedDescription<AccountId, DescribeFamily> to LocationToAccountId
[#5274]: Enrich metadata IR with associated types of config traits
This feature is part of the upcoming metadata V16. The associated types of the Config
trait that require the TypeInfo
or Parameter
bounds are included in the metadata of the pallet. The metadata is not yet exposed to the end-user, however the metadata intermediate representation (IR) contains these types.
Developers can opt out of metadata collection of the associated types by specifying without_metadata
optional attribute to the #[pallet::config]
.
Furthermore, the without_metadata
argument can be used in combination with the newly added #[pallet::include_metadata]
attribute to selectively include only certain associated types in the metadata collection.
[#6032]: Fix feeless_if
in pallet section
Fix compilation with pallet::feeless_if
in a pallet section: a local binding unexpectely resolved to a macro definition.
[#5941]: SolochainDefaultConfig
: Use correct AccountData
SolochainDefaultConfig
by default was setting AccountData
to AccountInfo
.
Thus, the actual account data was recursively nested the same type. By default it should be set ()
, because this is the only reasonable AccountData
.
If you have used SolochainDefaultConfig
before and did not overwrite, AccountData
you should now overwrite it to AccountInfo
or you will need to write a migration to change the data.
[#6365]: pallet-revive: Use RUSTUP_TOOLCHAIN
if set
We were not passing through the RUSTUP_TOOLCHAIN
variable to the build.rs
script of our fixtures. This means that setting the toolchain like cargo +1.81 build
had no effect on the fixture build. It would always fall back to the default toolchain.
[#6221]: snowbridge: allow account conversion for Ethereum accounts
Replaced GlobalConsensusEthereumConvertsFor
with EthereumLocationsConverterFor
that allows Location
to AccountId
conversion for the Ethereum network root as before, but also for Ethereum contracts and accounts.
[#6809]: XCMv5 - SetHints instruction
Implementation of fellowship RFC 107.
The new SetHints instruction is a repackaging of SetAssetClaimer that also allows future "hints" which alter the default behaviour of the executor.
The AllowTopLevelPaidExecutionFrom barrier allows this instruction between WithdrawAsset and BuyExecution/PayFees to configure things before the actual meat of the program.
[#4251]: MBM try-runtime
support
MBM try-runtime support
This MR adds support to the try-runtime trait such that the try-runtime-CLI will be able to support MBM testing here.
It mainly adds two feature-gated hooks to the SteppedMigration
hook to facilitate testing. These hooks are named pre_upgrade
and post_upgrade
and have the same signature and implications as for single-block migrations.
Integration
To make use of this in your Multi-Block-Migration, just implement the two new hooks and test pre- and post-conditions in them:
#[cfg(feature = "try-runtime")]
fn pre_upgrade() -> Result<Vec<u8>, frame_support::sp_runtime::TryRuntimeError>
{
// ...
}
#[cfg(feature = "try-runtime")]
fn post_upgrade(prev: Vec<u8>) -> Result<(), frame_support::sp_runtime::TryRuntimeError> {
// ...
}
You may return an error or panic in these functions to indicate failure.
This will then show up in the try-runtime-CLI and can be used in CI for testing.
Changes:
- Adds
try-runtime
gated methodspre_upgrade
andpost_upgrade
onSteppedMigration
- Adds
try-runtime
gated methodsnth_pre_upgrade
andnth_post_upgrade
onSteppedMigrations
- Modifies
pallet_migrations
implementation to run pre_upgrade and post_upgrade steps at the appropriate times, and panic in the event of migration failure.
[#5693]: Remove sp_runtime::RuntimeString
and replace with Cow<'static, str>
or String
depending on use case
Deprecate RuntimeString
, replace with String
or Cow<'static, str>
where appropriate.
For downstream projects the upgrade will primarily consist of following two changes:
#[sp_version::runtime_version]
pub const VERSION: RuntimeVersion = RuntimeVersion {
- spec_name: create_runtime_str!("statemine"),
- impl_name: create_runtime_str!("statemine"),
+ spec_name: alloc::borrow::Cow::Borrowed("statemine"),
+ impl_name: alloc::borrow::Cow::Borrowed("statemine"),
fn dispatch_benchmark(
config: frame_benchmarking::BenchmarkConfig
- ) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+ ) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
SCALE encoding/decoding remains the same as before, but serde encoding in runtime has changed from bytes to string (it was like this in std
environment already).
[#6360]: [eth-rpc] proxy /health
make the eth-rpc proxy /health and /health/readiness from the proxied substrate chain see #4802
[#5756]: Improve APIs for Tries in Runtime
This PR introduces a trait ProvingTrie
which has all the function you need to use tries in the runtime.
This trait includes the ability to create, query, and prove data in a trie. Another trait ProofToHashes
allows developers to express the computational complexity of proof verification using the proof data.
[#6849]: Add aliasers to westend chains
InitiateTransfer
, the new instruction introduced in XCMv5, allows preserving the origin after a cross-chain transfer via the usage of the AliasOrigin
instruction. The receiving chain needs to be configured to allow such this instruction to have its intended effect and not just throw an error.
In this PR, I add the alias rules specified in the RFC for origin preservation to westend chains so we can test these scenarios in the testnet.
The new scenarios include:
- Sending a cross-chain transfer from one system chain to another and doing a Transact on the same message (1 hop)
- Sending a reserve asset transfer from one chain to another going through asset hub and doing Transact on the same message (2 hops)
The updated chains are:
- Relay: added
AliasChildLocation
- Collectives: added
AliasChildLocation
andAliasOriginRootUsingFilter<AssetHubLocation, Everything>
- People: added
AliasChildLocation
andAliasOriginRootUsingFilter<AssetHubLocation, Everything>
- Coretime: added
AliasChildLocation
andAliasOriginRootUsingFilter<AssetHubLocation, Everything>
AssetHub already has AliasChildLocation
and doesn't need the other config item.
BridgeHub is not intended to be used by end users so I didn't add any config item.
Only added AliasChildOrigin
to the relay since we intend for it to be used less.
[#6305]: Remove riscv
feature flag
Since #6266 we no longer require a custom toolchain to build the pallet-revive-fixtures
. Hence we no longer have to guard the build behind a feature flag.
[#3881]: Introduce a Generic Proving Trie
This PR introduces a Proving Trie object which can be used inside the runtime. This can allow for things like airdrops where a single hash is stored on chain representing the whole airdrop and individuals present a proof of their inclusion in the airdrop.
[#5745]: Implement try_append
for StorageNMap
This PR introduces the try_append
api which is available on other storage map types, but missing on StorageNMap
.
[#5838]: enable wasm builder diagnostics propagation
substrate-wasm-builder
is used as a build dependency by crates that implement FRAME runtimes.
Errors that occur in these crates can not be detected by IDEs that use rust-analyzer as a language server because rust-analyzer needs the errors to be reported as diagnostic message in json format to be able to publish them to language server clients. This PR adds WASM_BUILD_CARGO_ARGS
environment variable, which can hold a space separated list of args that will be parsed and passed to the cargo
command that it is used for building against wasm target. It can be used for the stated initial case, but it is also flexible enough to allow passing other arguments or formatting the messages using another available type.
[#5555]: Make salt optional
Remove address_len and salt_len from uapi as both are now fixed size
[#5548]: Use H160 when interfacing with contracts
When interfacing with a contract we now use the native ethereum address type and map it to AccountId32 when interfacing with the rest of substrate.
[#5630]: Introduce and Implement the VestedTransfer
Trait
This PR introduces a new trait VestedTransfer
which is implemented by pallet_vesting
. With this, other pallets can easily introduce vested transfers into their logic.
[#6314]: Migrate pallet-elections-phragmen benchmark to v2 and improve doc
Part of:
[#5556]: Make salt optional
By making salt optional we allow clients to use CREATE1 semantics when deploying a new contract.
[#4982]: Add useful error logs in pallet-xcm
This PR adds error logs to assist in debugging pallet-xcm.
Additionally, it replaces the usage of log
with tracing
.
[#6027]: Remove pallet::getter from pallet-offences
This PR removes pallet::getter from pallet-offences from type Reports. It also adds a test to verify that retrieval of Reports still works with storage::getter.
[#3970]: Update Treasury to Support Block Number Provider
The goal of this PR is to have the treasury pallet work on a parachain which does not produce blocks on a regular schedule, thus can use the relay chain as a block provider. Because blocks are not produced regularly, we cannot make the assumption that block number increases monotonically, and thus have new logic to handle multiple spend periods passing between blocks. To migrate existing treasury implementations, simply add type BlockNumberProvider = System
to have the same behavior as before.
[#6263]: [pallet-revive] Update typeInfo
Update typeinfo impl to make it transparent for subxt
[#4012]: impl_runtime_apis!
: replace the use of Self
with Runtime
Currently, if there is a type alias similar to type HeaderFor<T>
in the scope, it makes sense to expect that HeaderFor<Runtime>
and HeaderFor<Self>
are equivalent. However, this is not the case. It currently leads to a compilation error that Self is not in scope
, which is confusing. This PR introduces a visitor, similar to CheckTraitDecl
in decl_runtime_apis!
, ReplaceSelfImpl
. It identifies usage of Self
as a type argument in impl_runtime_apis!
and replaces Self
with an explicit Runtime
type.
For example, the following example code will be transformed before expansion:
impl apis::Core<Block> for Runtime {
fn initialize_block(header: &HeaderFor<Self>) -> ExtrinsicInclusionMode {
let _: HeaderFor<Self> = header.clone();
RuntimeExecutive::initialize_block(header)
}
}
Instead, it will be passed to macro as:
impl apis::Core<Block> for Runtime {
fn initialize_block(header: &HeaderFor<Runtime>) -> ExtrinsicInclusionMode {
let _: HeaderFor<Runtime> = header.clone();
RuntimeExecutive::initialize_block(header)
}
}
[#5682]: Introduces VerifyExistenceProof
trait
Introduces VerifyExistenceProof
trait for verifying proofs in the runtime.
An implementation of the trait for binary and 16 patricia merkle tree is provided.
[#5995]: Use frame umbrella crate in pallet-proxy and pallet-multisig
Extends the FRAME umbrella crate and uses it in pallet-proxy and pallet-multisig.
Migrates benchmarking from v1 to v2 for pallet-proxy and pallet-multisig.
Allows CI to pick the umbrella crate weights template to run benchmarks.
[#6315]: Migrate pallet-election-provider-support-benchmarking benchmark to v2
Migrate pallet-election-provider-support-benchmarking benchmark to v2
[#6088]: [pallet-revive] EXTCODEHASH to match EIP-1052
Update ext_code_hash
to match EIP-1052 specs.
[#6296]: Migrate pallet-glutton benchmark to v2
Update pallet-glutton
to benchmarks v2.
[#5886]: Bump some dependencies
This bumps ethbloom
, ethereum-types
, primitive-types
and rlp
to their latest version.
Fixes: #5870
[#6291]: migrate pallet-remarks to v2 bench syntax
Part of:
[#5701]: [pallet-revive] uapi: allow create1 equivalent calls
The salt argument should be optional to allow create1 equivalent calls.
[#6264]: pallet-revive: Trade code size for call stack depth
This will reduce the call stack depth in order to raise the allowed code size. Should allow around 100KB of instructions. This is necessary to stay within the memory envelope. More code size is more appropriate for testing right now. We will re-evaluate parameters once we have 64bit support.
[#5675]: [pallet-revive] Add balance_of syscyall for fetching foreign balances
This adds an API method balance_of, corresponding to the BALANCE EVM opcode.
[#6023]: Fix storage in pallet section
Fix compilation of pallet::storage
in a pallet section: a local binding definition was not correctly referenced due to macro hygiene.
[#5891]: Add benchmark overhead command to frame-omni-bencher
This adds the benchmark overhead command to the frame-omni-bencher
library. This allows para- and relay chain teams to generate extrinsic and block base weights.
[#6418]: Follow up work on TransactionExtension - fix weights and clean up UncheckedExtrinsic
This PR removes the redundant extension version byte from the signed v4 extrinsic, previously unused and defaulted to 0. The extension version byte is also made to be part of the inherited implication handed to extensions in General transactions. Also, some system extensions benchmarks were adjusted through whitelisting to not count the reads for frequently read storage keys.
[#6295]: Migrate pallet-im-online benchmark to v2
Part of:
[#5872]: [omni-bencher] Make all runtimes work
Changes:
- Add
--exclude-pallets
to exclude some pallets from runtimes where we dont have genesis presets yet - Make
--genesis-builder-policy=none
work with--runtime
- CI: Run the frame-omni-bencher for all runtimes
[#5876]: (XCMv5) implement RFC#100, add new InitiateTransfer instruction
There's a new XCM instruction in v5: InitiateTransfer.
It's meant as a general instruction that will do everything (and more) currently done by InitiateTeleport, InitiateReserveWithdraw and DepositReserveAsset.
Its main feature is the ability to do cross-chains transfers mixing teleported and reserve transferred assets.
/// Specify which type of asset transfer is required for a particular `(asset, dest)` combination.
pub enum AssetTransferFilter {
/// teleport assets matching `AssetFilter` to `dest`
Teleport(AssetFilter),
/// reserve-transfer assets matching `AssetFilter` to `dest`, using the local chain as reserve
ReserveDeposit(AssetFilter),
/// reserve-transfer assets matching `AssetFilter` to `dest`, using `dest` as reserve
ReserveWithdraw(AssetFilter),
}
/// Cross-chain transfer matching `assets` in the holding register as follows:
///
/// Assets in the holding register are matched using the given list of `AssetTransferFilter`s,
/// they are then transferred based on their specified transfer type:
///
/// - teleport: burn local assets and append a `ReceiveTeleportedAsset` XCM instruction to
/// the XCM program to be sent onward to the `dest` location,
///
/// - reserve deposit: place assets under the ownership of `dest` within this consensus system
/// (i.e. its sovereign account), and append a `ReserveAssetDeposited` XCM instruction
/// to the XCM program to be sent onward to the `dest` location,
///
/// - reserve withdraw: burn local assets and append a `WithdrawAsset` XCM instruction
/// to the XCM program to be sent onward to the `dest` location,
///
/// The onward XCM is then appended a `ClearOrigin` to allow safe execution of any following
/// custom XCM instructions provided in `remote_xcm`.
///
/// The onward XCM also potentially contains a `BuyExecution` instruction based on the presence
/// of the `remote_fees` parameter (see below).
///
/// If a transfer requires going through multiple hops, an XCM program can compose this instruction
/// to be used at every chain along the path, describing that specific leg of the transfer.
///
/// Parameters:
/// - `dest`: The location of the transfer next hop.
/// - `remote_fees`: If set to `Some(asset_xfer_filter)`, the single asset matching
/// `asset_xfer_filter` in the holding register will be transferred first in the remote XCM
/// program, followed by a `BuyExecution(fee)`, then rest of transfers follow.
/// This guarantees `remote_xcm` will successfully pass a `AllowTopLevelPaidExecutionFrom` barrier.
/// - `remote_xcm`: Custom instructions that will be executed on the `dest` chain. Note that
/// these instructions will be executed after a `ClearOrigin` so their origin will be `None`.
///
/// Safety: No concerns.
///
/// Kind: *Command*.
///
InitiateTransfer {
destination: Location,
remote_fees: Option<AssetTransferFilter>,
assets: Vec<AssetTransferFilter>,
remote_xcm: Xcm<()>,
}
[#6812]: xcm-executor: take delivery fee from transferred assets if necessary
In asset transfers, as a last resort, XCM delivery fees are taken from transferred assets rather than failing the transfer.
[#6288]: [pallet-revive] Add metrics to eth-rpc
Add metrics for eth-rpc
[#6087]: Expose private structs in pallet_nfts and pallet_uniques.
PR changes certain structs in pallet_nfts and pallet_uniques into public. It also changes 2 storages (collection & asset metadata) into public in pallet_uniques.
[#4257]: Rename state_version
in RuntimeVersion
to system_version
.
This PR renames state_version
in RuntimeVersion
to system_version
. system_version=2
signifies that extrinsic root derivation uses StateVersion::V1
.
[#6212]: Added Trusted Query API calls for Westend and Rococo chains
Added is_trusted_reserve and is_trusted_teleporter API calls to relay chains.
Given an asset and a location, they return if the chain trusts that location as a reserve or teleporter for that asset respectively.
You can implement them on your runtime by simply calling a helper function on pallet-xcm
.
impl xcm_runtime_apis::trusted_query::TrustedQueryApi<Block> for Runtime {
fn is_trusted_reserve(asset: VersionedAsset, location: VersionedLocation) -> Result<bool, xcm_runtime_apis::trusted_query::Error> {
PolkadotXcm::is_trusted_reserve(asset, location)
}
fn is_trusted_teleporter(asset: VersionedAsset, location: VersionedLocation) -> Result<bool, xcm_runtime_apis::trusted_query::Error> {
PolkadotXcm::is_trusted_teleporter(asset, location)
}
}
[#6257]: fix claim queue size when validator groups count is smaller
Fixes a bug introduced in #5461, where the claim queue would contain entries even if the validator groups storage is empty (which happens during the first session). This PR sets the claim queue core count to be the minimum between the num_cores param and the number of validator groups.
[#6473]: add TransactionSource
to TransactionExtension::validate
Add a the source of the extrinsic as an argument in TransactionExtension::validate
.
The transaction source can be useful for transactions that should only be valid if it comes from the node. For example from offchain worker.
To update the current code. The transaction source can simply be ignored: _source: TransactionSource
[#5684]: [pallet-revive]
Update xcm runtime api, and fix pallet-revive xcm tests
[#6192]: [pallet-revive] fix hardcoded gas in tests
Fix hardcoded gas limits in tests
[#6885]: Omni-node: Detect pending code in storage and send go ahead signal in dev-mode.
When using the polkadot-omni-node with manual seal (--dev-block-time
), it is now possible to perform runtime upgrades. The node will detect the pending validation code and send a go-ahead signal to the parachain.
[#5201]: Snowbridge free consensus updates
Allow free consensus updates to the Snowbridge Ethereum client if the headers are more than a certain number of headers apart. Relayers providing valid consensus updates are refunded for updates. Bridge users are not affected.
[#6174]: [pallet-revive] fix fixture build path
Fix fixture build path
Changelog for Node Operator
ℹ️ These changes are relevant to: Those who don't write any code and only run code.
[#5741]: make RPC endpoint chainHead_v1_storage
faster
The RPC endpoint chainHead_v1_storage
now relies solely on backpressure to determine how quickly to serve back values instead of handing back a fixed number of entries and then expecting the client to ask for more. This should improve the throughput for bigger storage queries significantly.
Benchmarks using subxt on localhost:
- Iterate over 10 accounts on westend-dev -> ~2-3x faster
- Fetch 1024 storage values (i.e, not descedant values) -> ~50x faster
- Fetch 1024 descendant values -> ~500x faster
[#4639]: Added the fork-aware transaction pool implementation
- New command line option was added, allowing to select implementation of transaction pool:
--pool-type=fork-aware
- new fork aware transaction pool,--pool-type=single-state
- old transaction pool implementation which is still default,
[#4889]: Add CLI options for parachain chain specifications + fix bug for swallowing custom fields
Parachain ID and relay chain can be specified via the CLI arguments for when creating a chain spec.
A bug that also swallowed custom fields outside of the default config has also been fixed.
[#6454]: rpc server: fix ipv6 host filter for localhost
This PR fixes that ipv6 connections to localhost was faulty rejected by the host filter because only [::1] was allowed
[#6058]: backpressure chainhead_v1_follow
The RPC endpoint chainHead_v1_follow
now relies on backpressure to determine whether or not the subscription should be closed instead of continuing to send more events to a consumer which can't keep up.
This should significantly improve memory consumption as substrate will be keeping less messages in memory.
[#5606]: Fix PVF precompilation for Kusama
Tweaks the PVF precompilation on Kusama to allow prepare PVFs when the node is an authority but not a validator.
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.
[#6337]: Don't expose metadata for Runtime APIs that haven't been implemented
Prior to this PR, the metadata for runtime APIs would contain all methods for the latest version of each API, regardless of which version a runtime implements. This PR fixes that, so that the runtime API metadata reflects what is actually implemented.
[#6039]: Added Trusted Query API calls.
There's a new runtime API to check if a chain trust a Location as a reserve or teleporter for a given Asset.
It's implemented in all the relays and system parachains in Westend and Rococo.
[#6080]: Assets in pool with native can be used in query_weight_to_asset_fee in Asset Hubs
query_weight_to_asset_fee
now works with assets in a pool with the native asset in both Westend and Rococo asset hubs.
This means all the information you get from query_acceptable_payment_assets
can be used directly in query_weight_to_asset_fee
to get the correct fees that need to be paid.
[#6373]: chain-spec-builder
: info about patch/full files added
There was no good example of what is patch and full genesis config file. Some explanation and example were added to the chain-spec-builder
doc.
[#6022]: [Coretime chain] Add high assignment count mitigation to testnets
We can handle a maximum of 28 assignments inside one XCM, while it's possible to have 80 (if a region is interlaced 79 times). This can be chunked on the coretime chain side but currently the relay does not support this. This PR truncates the additional assignments on Rococo and Westend to mitigate this until the relay is fixed. The first 27 assignments are taken, the final 28th is used to pad with idle to complete the mask. Any other assignments are dropped.
[#5971]: XCMv5 InitiateTransfer can preserve original origin across chains.
The new InitiateTransfer instruction can preserve the original origin across chains by setting preserve_origin: true
in the instruction itself.
When it's set to true, it will append after the inner XCM, an AliasOrigin
instruction instead of the usual ClearOrigin
.
This instruction will try to alias to the original origin, thus preserving it.
This only works if the chain receiving the transfer supports the aliasing operation.
If not, preserve_origin: false
works as before and will never fail because of this.
[#5687]: Westend/Rococo Asset Hub: auto incremented asset id for trust backed assets
Setup auto incremented asset id to 50_000_000
for trust backed assets.
Migration
This change does not break the API but introduces a new constraint. It implements an auto-incremented ID strategy for Trust-Backed Assets (50 pallet instance indexes on both networks), starting at ID 50,000,000. Each new asset must be created with an ID that is one
greater than the last asset created. The next ID can be fetched from the NextAssetId
storage item of the assets pallet. An empty NextAssetId
storage item indicates no constraint on the next asset ID and can serve as a feature flag for this release.
[#5765]: Added foreign locations to local accounts converter to all the parachains.
Now any user account can have a sovereign account on another chain controlled by the original account.
[#5999]: Westend: Constant yearly emission
Integrating the new inflation approach from polkadot-fellows/runtimes#471 into Westend first to check that it is working.
[#5435]: Support registering assets on Asset Hubs over bridge
Allows one Asset Hub on one side, to register assets on the other Asset Hub over the bridge.
Rococo <> Ethereum test bridge will be dropped in favor of Westend <> Ethereum test bridge.
This PR also changes emulated tests to simulate double bridging from Ethereum<>Westend<>Rococo.
[#5984]: Add page information to staking::PayoutStarted event
Adds page index that is claimed, and optional next page that can be claimed. If next is none, then the page is the last one.
[#4257]: Rename state_version
in RuntimeVersion
to system_version
.
RuntimeVersion
's state_version
is renamed to system_version
. Applications using that type and its field must update their code to reflect the changes. For easier migration serde serialization produces both new systemVersion
and old stateVersion
fields and deserialization supports stateVersion
as an alias as too.
[#6212]: Added Trusted Query API calls for Westend and Rococo chains
There's a new runtime API to check if a chain trust a Location as a reserve or teleporter for a given Asset.
It's implemented in all the relays and system parachains in Westend and Rococo.
[#6357]: New runtime api that returns the associated pool accounts with a nomination pool.
Each nomination pool has two associated pot accounts: the bonded account, where funds are pooled for staking, and the reward account. This update introduces a runtime api that clients can query to retrieve these accounts.
Rust compiler versions
This release was built and tested against the following versions of rustc
.
Other versions may work.
- Rust Stable:
"1.81.0"
Runtimes
The information about the runtimes included in this release can be found below.
The runtimes have been built using srtool v0.17.0 and rustc 1.81.0 (eeb90cda1 2024-09-04)
.
Westend
🏋️ Runtime size: 2.037 MB (2,135,690 bytes)
🗜 Compressed: Yes, 73.61%
✨ Reserved meta: OK - [6D, 65, 74, 61]
🎁 Metadata version: V14
🔥 Core version: westend-1017001 (parity-westend-0.tx27.au2)
🗳️ system.setCode hash: 0x66982e5b4340ac74a19a5a51ae7774ac05bcd5ef502f6b19a5f18d28afcce211
🗳️ authorizeUpgrade hash: 0xfcb5c327345609ecaa45bd679959f6d15a3c621c5ba6822af31c373c7ab5140c
🗳️ Blake2-256 hash: 0xfd9e364b5ee6fc709af5a746557ae9e5f8d5357c7cfcc50058f3b3bbd40303d5
📦 IPFS: QmY1mCdSL2CFFGALgPGbkzQxz6qH7GSqVJp31ye1EZc4RQ
Westend Assethub
🏋️ Runtime Size: 1.60 MB (1674969 bytes)
🔥 Core Version: westmint-1017003 (westmint-0.tx16.au1)
🗜 Compressed: Yes: 76.65%
🎁 Metadata version: V14
🗳️ system.setCode hash: 0xd522fe21a324cf368516f02ba9f9d95c90881a0c44559a8ddb44cc13c7a05732
🗳️ authorizeUpgrade hash: 0x2150f7b02db7513f50305a16bc2a6723201f89c9c4d99967979a6da7b9848e1a
🗳️ Blake2-256 hash: 0x29bac726f658b40db916045e89ba2a5c6f404cfb266d4a24539740290bcfcb79
📦 IPFS: QmXkckKSkkxxdzdPemTngGNNThfhUCCXU7rZJhyupqyDws
Westend Bridgehub
🏋️ Runtime Size: 1.38 MB (1450346 bytes)
🔥 Core Version: bridge-hub-westend-1017001 (bridge-hub-westend-0.tx6.au1)
🗜 Compressed: Yes: 73.72%
🎁 Metadata version: V14
🗳️ system.setCode hash: 0x52715185f7f28290fd05172e5b0f016ea0dac4808265323e6a23ba6368d80b0c
🗳️ authorizeUpgrade hash: 0xba8101845222ce0715fd4c063c9972e85b173c48c317a025bc1b969e1cbfe03d
🗳️ Blake2-256 hash: 0xcdc83f4c85dad25c3dfbfbce1ea57068b68105d4f95b29a677287bc527183aaf
📦 IPFS: QmfJn3gHYWdKsdnRUtZTB3MdFgSN7ihH1wQS4duNDStWVF
Westend Collectives
🏋️ Runtime Size: 1.21 MB (1267199 bytes)
🔥 Core Version: collectives-westend-1017001 (collectives-westend-0.tx6.au1)
🗜 Compressed: Yes: 75.58%
🎁 Metadata version: V14
🗳️ system.setCode hash: 0xb064f17227559bf5fb5010c8a8ade578458da1ff1a228d66cf315fc10108b7bf
🗳️ authorizeUpgrade hash: 0x4bd35a76c3e53e93025ed4a3269deff9e01a60b1936414445f78b93f2f90183d
🗳️ Blake2-256 hash: 0xb96fee4c33e0f9a5bcb10700a971b542abe94a9f9e9e4a7e25ba5b8442c51313
📦 IPFS: QmVeSPx4KDMkt1yxfLKXozYaNDw3Qi5zZnJ5NmW6Dkh95w
Westend Coretime
🏋️ Runtime Size: 1.03 MB (1080704 bytes)
🔥 Core Version: coretime-westend-1017001 (coretime-westend-0.tx2.au1)
🗜 Compressed: Yes: 74.72%
🎁 Metadata version: V14
🗳️ system.setCode hash: 0x9fad76f381887a24ef60bc7097c7ae109a5f31c3e5509132d274c40e61304e93
🗳️ authorizeUpgrade hash: 0xc5e10106007862b04a990da6f94288c46e9ccbeaa73e118365b93e0f35320df9
🗳️ Blake2-256 hash: 0x76973fbaf5b3c5da03b2f517b7385dafd51596f3d351e243bbbf5bf06443fdeb
📦 IPFS: QmT97ek69zN6nBBNUi1YD7o37L3RTEe8q1Bf3MipJaiKU6
Westend Glutton
🏋️ Runtime Size: 586.78 kB (600867 bytes)
🔥 Core Version: glutton-westend-1017001 (glutton-westend-0.tx1.au1)
🗜 Compressed: Yes: 72%
🎁 Metadata version: V14
🗳️ system.setCode hash: 0x9a7fc73bd2e6858eeead2f237e5bde6f3e75e942fa1465c54d7dbf1204e7145b
🗳️ authorizeUpgrade hash: 0x3a974c855ecdd0068e0a3c7b0e3f80a7b1488d7051af67b2c6c76334557a812d
🗳️ Blake2-256 hash: 0x60849ff400d4d0a7e8dd47fff1350b2799e97abb3d64957f0e8f5a838ca5a457
📦 IPFS: QmeAst2t3foRqmuwX5GGMkxErRet56eeczvK3bvkgdYPdy
Westend People
🏋️ Runtime Size: 1.03 MB (1077104 bytes)
🔥 Core Version: people-westend-1017001 (people-westend-0.tx2.au1)
🗜 Compressed: Yes: 74.78%
🎁 Metadata version: V14
🗳️ system.setCode hash: 0x851eac6520032e3d957ecdff6b79989045117a0c59684243e4127a97ba203e3a
🗳️ authorizeUpgrade hash: 0x8bed1b714ce09aaa06f9948f0f893d5cccc97d838d8420fc3c0dc657c3242fa3
🗳️ Blake2-256 hash: 0x0352e12aece34ea64134a4cf8caa165961c8600aee2d5e69f2e511467a1e8009
📦 IPFS: QmSvKyCUCBsgVtXKXQWcsZfvqnenXCYBcFwPLZ91hPc8xf
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:stable2412
or
docker pull parity/polkadot-parachain:stable2412