Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

After runtime upgrade, Runtime API calls use new code with unmigrated storage #64

Open
JoshOrndorff opened this issue Oct 11, 2021 · 25 comments · May be fixed by #6029
Open

After runtime upgrade, Runtime API calls use new code with unmigrated storage #64

JoshOrndorff opened this issue Oct 11, 2021 · 25 comments · May be fixed by #6029
Assignees
Labels
I2-bug The node fails to follow expected behavior. T1-FRAME This PR/Issue is related to core FRAME, the framework.

Comments

@JoshOrndorff
Copy link
Contributor

If the Runtime is upgraded in block N (by a system::set_code transaction for example), the new code is immediately written to storage. However the storage migration contained in that upgrade are not executed until the beginning of block N + 1. This is fine for extrinsics and other on-chain execution because there is no on-chain execution between the end of block N and the beginning of block N + 1.

However, runtime APIs can be called from off-chain contexts at any time. For example, maybe an RPC call allows users to fetch data that must be gathered from a Runtime API. Or maybe the node runs a maintenance task that calls a runtime API at a regular interval.

Any runtime API call that is made against the state associated with block N will use the new code with the old unmigrated storage. In general the storage schema between these two runtime versions will not match which leads to misinterpreting stored data.

@bkchr bkchr added the I3-bug label Oct 11, 2021
@bkchr
Copy link
Member

bkchr commented Oct 11, 2021

Fuck...

Preventing runtime migrations to be executed over and over again one was part of the problem that we tried to fix with skipping on_initialize, but yeah we clearly did not thought about the described problem...

There are multiple solutions:

  1. Make users away of this situation and that they may need to trigger the runtime migration inside the runtime api implementation before executing the code.
  2. Prevent calling the runtime api when the state isn't migrated yet.
  3. Make the runtime api always use the runtime blob from the block "before". This means when we want to execute a runtime api on state of block X, we will use the runtime blob from X - 1. In case there was a runtime upgrade this means that we will use the correct runtime that is still able to interpret the non-migrated state. However we would still need to support the case where you want to call the runtime associated to the block. This is for example required for block authoring. If we author a block, we call initialize_block and that triggers the runtime migration, so we are able/required to use the new runtime code.

I'm in favor of solution 3.

@JoshOrndorff
Copy link
Contributor Author

JoshOrndorff commented Oct 11, 2021

Solution 3 makes sense to me as well.

@apopiak
Copy link
Contributor

apopiak commented Oct 11, 2021

Another potential solution:

  1. Set the code we're upgrading to as another storage item (e.g :pending_code:) (similar to Polkadot's pending PVF IIRC) and have the block authoring check that storage item when authoring blocks. Then move :pending_code: to :code: as the last part of a runtime migration.

I think I would tend to prefer 3, though.
(Edit: Tomek's point of maybe being able to recover from an invalid migration has me excited for 4 :-D)

@tomusdrw
Copy link
Contributor

(4) has the advantage of being able to recover from a potentially invalid migration (catch the failure and clear :pending_code:).

Also making the possible migration explicit for block authorship allows us to potentially recover from broken runtimes (i.e. block authorship could decide to use old code in case the new one is not working during some after-upgrade grace period), obviously it's a potential runtime-upgrade censorship possibility by block authors, but that's similar to refusing to accept the runtime upgrade extrinsics.

I like both 4 & 3 in that particular order.

@bkchr
Copy link
Member

bkchr commented Oct 11, 2021

obviously it's a potential runtime-upgrade censorship possibility by block authors

We could panic inside the runtime if someone tries to build a block without using the pending code.

@librelois
Copy link
Contributor

Is there any progress on this?

@bkchr
Copy link
Member

bkchr commented Mar 11, 2022

@RGafiyatullin will start looking into this.

@RGafiyatullin RGafiyatullin self-assigned this Mar 16, 2022
@skunert
Copy link
Contributor

skunert commented Mar 18, 2022

Our team had a discussion about this issue today. A visualization was created, will leave this here for reference:
9997

@bkchr
Copy link
Member

bkchr commented Mar 18, 2022

We had today some lengthy discussion about the topic. We mainly spoke about solution 3 & 4.

We assume that if there exists multi block migration, the first step of the migration fixes all the important storage items and sets some value that informs external tooling that we are currently in a migration phase and that the data should not be read. We also can assume that if there are maybe different migrations, one migration is pushed back to only apply one "complicated" migration at a time. Aka we don't try to migrate the entire world at once.

Solution 3

One of the main problems with this solution is pruning. Currently when we want to execute something on block X, we only need the state of block X. However, with this solution we would need to also have the state of block X - 1. The possibility of that happening is relative low, as we only prune X blocks behind the last finalized block.

We would basically change the any runtime execution to use the runtime of block X - 1 and only when we build or import a block we would use the runtime of X, so that we can run the migrations etc. This would solve the problem on the node side, however external tooling would also need to be changed to do this. Otherwise it may still reads the runtime of block X, extracts the wrong metadata and then interprets a storage entry in a wrong way.

Solution 4

As for solution 3 we need to tell the block execution that we want to use the :pending_code if it exists in the storage. This would be done for block production and block import. The runtime would set :pending_code instead of :code directly. :pending_code would always only bet set for in maximum one block. To prevent any censorship we need to ensure that :pending_code is moved to :code in the next block at the end of the block production (aka in finalize_block). :pending_code would need to consist of the actual runtime code + the block number it was set. Then we can add a check in finalize_block that checks if :pending_code should be moved into :code or if that should happen in the next block. We need to do this check in finalize_block, because someone could execute initialize_block while :pending_code is already set, but we should then not panic in that case.

External tooling would also not be influenced by this, because they can just use :code which is still the correct runtime code for the un-migrated state.

@RGafiyatullin
Copy link

Comparing the paritytech/substrate#3 and paritytech/substrate#4 solutions

Requires changes in Substrate/Client?

  • 3: yes;
  • 4: yes.

For both solutions, in the API for Runtime-invocation the argument block_id: BlockID would be replaced by something like block_id: BuildOnTopOf(BlockID) | QueryExisting(BlockID).
Or at least it would behave as

  • BuildOnTopOf(BlockID) in CallExecutor::contextual_call(...) as it constructs the block;
  • and as QueryExisting(BlockID) in CallExecutor::call(...) and CallExecutor::prove_execution(...).

In case of paritytech/substrate#4, during the block construction, the client should also enforce the max-age=1 for the :pending_code state-data value (probably by comparing the current value with the value of the corresponding cell in the previous block's state snapshot). The restriction for the minimal length-argument for the pruning should be probably introduced: the block production is impossible without the state-snapshots of the two preceding blocks.

In case of paritytech/substrate#3 the pruning set into N would render the Nth to the last block unqueriable (as it would require the state snapshot for the block that would be pruned). That can be fixed by keeping one block more than required by the pruning settings, if indeed needed.

Requires changes in Substrate/Runtime?

  • 3: no;
  • 4: yes (the support for :pending_code in the system pallet).

The solution paritytech/substrate#4 would require changes in the system.set_code and system.set_code_without_checks implementations.

The solution paritytech/substrate#4 would not be tolerant to the attempt to set the state[:code] directly (the way it is described in https://spec.polkadot.network/develop/#sect-loading-runtime-code as the runtime-upgrade technique).

Requires changes outside of Substrate?

  • 3: yes;
  • 4: no.

For the solution paritytech/substrate#3 the two methods for proof-of-execution would need to be provided in the API:

  • the existing Prove { data_from: BlockID };
  • the new ProveWithCode { data_from: BlockID, code_from: BlockID }.
    Apparently the former is just the degenerate case of the latter — where the data_from == code_from.
    It would be up to the requester to choose which way of proof-generation to trust.
    This could be used to gradually phase out the old proof-method.

For the solution paritytech/substrate#3 the proof of execution would need to be changed:

  • instead of providing the path BlockHash -> StateDB-Hash -> ... -> :code
  • provide the path BlockHash -> ParentHash -> StateDB-Hash -> ... -> :code.
    It seems as the proof's size won't change terribly.
    I could use a hand in evaluation of how terrible it is from the point of view of the projects that already use the Substrate's proofs of execution.
    Is THAT the spec for the the latter?

Works retroactively?

  • 3: yes;
  • 4: no.

The value for that criterion seems to be relatively small: if there were hundreds of code-updates during several millions of blocks in the history — the probabilty to hit the ill-behaving block is small.

The outcomes of the queries to the blocks at which the runtime was upgraded may fall into three cases:

  • works correctly:
    the data used by the query DID NOT change its encoding during the upgrade — so it just happens to work alright;
  • returns an error:
    the data used by the query DID change its encoding during the upgrade in a way,
    that it cannot be decoded, e.g. the size of the record changes;
  • works incorrectly:
    the data used by the query DID change its encoding during the upgrade, but in a way,
    that it still does not cause a failure during decoding attempt, e.g. the fields' order changed.

@RGafiyatullin
Copy link

I might be rooting for the-#3 all too clearly when being supposed to dispassionately evaluate each solution... :\

@tomaka
Copy link
Contributor

tomaka commented Apr 28, 2022

I'm in favor of 4 due to the surprise factor.

If you approach Substrate and learn about the fact that :code contains the Wasm runtime, how are you supposed to guess that it's not actually this value that is used but the one at the block before? This is extremely surprising and confusing, and strongly feels like a big hack to me.

While :pending_code also raises an eyebrow (the fact that the block production uses :pending_code instead of :code), at least it makes things explicit. As a Substrate newcomer, you raise an eyebrow because you don't know what :pending_code is for, but at least there's no possibility of guessing things wrong.

@cheme
Copy link
Contributor

cheme commented Apr 29, 2022

Just wanted to add that solution 4 got a cost:
on block N+1 when moving :pending_code to :code, the pending_code will end up in pov.

@pepyakin
Copy link
Contributor

pepyakin commented Apr 29, 2022

Not really a formed idea, but what if there was no.5, i.e. execute migration eagerly? Say, a runtime upgrade would first set :code and then it performs migrations before the block is finished. This would make calls to the Runtime API at N + 1 see the migrations.

  • One way this could be achieved if the current runtime instantiates the new runtime at N and then calls a dedicated entrypoint in the new runtime which runs the migrations and then returns control back.
  • Alternatively, the current runtime stop executing and gives up control to the new runtime. A special runtime function finishes the migration and finalizes block, potentially using a completely different finalization routine.

Note, that this approach does not change the current model too much. It does not require alteration of the client behavior either.

We, of course, would need a host function for pull off those shenanigans with the calling the new runtime. Logic of this thing is not a problem. The problem is the implications of needing to compile the code before execution. wasmtime may spend quite some time in that. Another option is to use wasmi for that or bring onboard additional wasm executor that does not require expensive compilation.

@tomaka
Copy link
Contributor

tomaka commented Jun 30, 2022

I'm really strongly in favor of solution 4. I think that solution 3 is a horrible idea whose added hidden complexity will cause at least one major bug in the future, and I'm writing this comment so that if solution 3 gets picked I can be quoted on that.
I think that picking a (subjectively) worse solution over a (subjectively) better one just because it is easier to implement is also a bad idea.

@RGafiyatullin
Copy link

RGafiyatullin commented Jun 30, 2022

@tomaka , I understand your concerns, but nonetheless respectfully disagree.

As I see it the "runtime arguments" are not limited to the :code only, it is also :heappages.
Should the same equillibristics be done with :heappages (i.e. should we introduce :pending_heappages)?

I think that solution 3 is a horrible idea whose added hidden complexity will cause at least one major bug in the future

Would you please elaborate as to which exactly one major bug in the future will be added by this implementation?

@RGafiyatullin
Copy link

I also believe that expressing "To query a block, use the same code that was used to produce that block" is way easier in the specification, rather than:

  • the Runtime's responsibility is to store :pending_code;
  • the Client's responsibility is to perform the upgrade procedure if it finds :pending_code;
  • the same value of :pending_code must not live for more than one block;

@tomaka
Copy link
Contributor

tomaka commented Jun 30, 2022

Should the same equillibristics be done with :heappages (i.e. should we introduce :pending_heappages)?

Yes!

Would you please elaborate as to which exactly one major bug in the future will be added by this implementation?

My fear is precisely that our system has so many corner cases that it is impossible to detect bugs because they become extremely subtle.

For example, one possible bug is that system_dryRun would, I guess, use the parent's runtime, but including the transaction in the chain will use the child's runtime. This can lead to system_dryRun succeeding but including the transaction failing, or vice versa. Similarly, querying fees and generating a nonce will not use the same runtime as actually including the transaction on chain.
I guess you could make these specific RPC functions call the new runtime, while other RPC functions would call the old runtime. Again, this is surprising.

Another source of bugs might come from the fact that calling Core_version will now return the version of the parent block's runtime, which to me is very surprising. This means that on the RPC level, state_getRuntimeVersion will now return a different value than state_call("Core_version", &[]).
And then if you use state_getRuntimeVersion to determine the list of runtime entry points that are supported (like you're supposed to), well you're out of luck because the list will not match what you can actually call.
So state_getRuntimeVersion would need to return the parent's version, or we should add a state_getParentRuntimeVersion.
And if you use state_getRuntimeVersion to determine the transaction_version to put in the transactions that you submit, well again you're out of luck because your transaction will be invalid.

Similarly, how do you handle getting the metadata? When the runtime changes, so does the metadata. If a JSON-RPC client queries the metadata, do you return the new metadata or the old metadata? If you return the new metadata, then the client would need to get the metadata of the parent, which is surprising. If you return the old metadata, then there's simply no way for the client to obtain the metadata of the new runtime until a child block has been generated.
If any JSON-RPC client had a mapping of hash(:code) <=> metadata, this is now broken.

@pepyakin
Copy link
Contributor

Just a small wasm note: :heappages is more of a historic artifact and there was interest migrating off it. Here are some options:

  • Not limit the number of linear memory pages and let it grow dynamically up to the maximum 4 GiB limit. That option was dubbed "elastic heap".
  • Just rely on the maximum number of wasm pages specified by the module itself. That has slightly different semantics from the current mechanism though.
  • In case that's too much burden for migration, we could replicate the very same mechanism by supplying the number of heappages as a custom section embedded within wasm.

@apopiak
Copy link
Contributor

apopiak commented Jul 1, 2022

Not really a formed idea, but what if there was paritytech/substrate#5, i.e. execute migration eagerly? Say, a runtime upgrade would first set :code and then it performs migrations before the block is finished. This would make calls to the Runtime API at N + 1 see the migrations.

👍 for thinking outside of the box

One thing that pops to mind as a problem with this is that the weight cost of the migration would be due when setting it, so we would probably want to avoid including other transactions in it and it might still be overweight.
It would also change the assumptions for runtime migrations (which is that they run at the start of the block, but now they run at the end), but should be manageable.

@RGafiyatullin
Copy link

@tomaka , thanks for very apt examples.

I don't think there supposed to be a 1:1 mapping between the JSON-RPC calls and the RuntimeAPI calls.

If we can clearly state that the JSON-RPC API has no intention to mirror/mimic/resemble Runtime API, we can look closer and find that there are in fact two problems:

  • The JSON-RPC API calls stubbornly try to have a slightly ambiguous at: Option<Block::Hash> argument;
  • The way the Runtime's traits are exposed to the Client (two sets of methods: one with and one without ExecutionContext).

JSON-RPC: the at: Option<Block::Hash> argument

I am about to resort to the "feelings, emotions and impressions" that a developer may have when exposed to the API-documentation and method signatures, i.e. the following is bound to be somewhat subjective/biased/opinionated.

If I had a look at the call state_getRuntimeVersion(block_id: Option<BlockHash>) -> RuntimeVersion, I would assume that it will return me the version of the Runtime that will handle my read-only queries to it.

If I had an intention to find out what Runtime version would be used to construct a block on top of given BlockHash, I would be searching for something like state_getRuntimeVersionForNextBlock(parent_block: Option<Block::Hash>).

If I keep in my mental cache the "Runtime API != JSON-RPC API", the the result of invocation of state_call("Core_version", &[], existing_block_id: Option<BlockHash>) makes no surprise to at all.
Although, I think that state_call is part of "plumbing API" (as opposed to "porcelain API"), therefore it most probably begs for some sort of Context: Construction | OffchainCall argument.

Runtime traits called by the Client, decl_runtime_apis!/impl_runtime_apis!

When implementing another JSON-RPC method, one faces the necessity to interact with the Runtime via the codegen'ed methods that do the heavy-lifting with the actual invocation of the CallExecutor.

The more compelling choice to invoke a Runtime method in this case to choose the generated method version that does not require the ExecutionContext.

If the developer would need to specify the ExecutionContext with each invocation of the Runtime, there would be more awareness, and the confusion could be avoided.

Summary

I strongly believe that this is the API-design problem: it should not be solved by changing the way the blocks are constructed.

@tomaka
Copy link
Contributor

tomaka commented Jul 5, 2022

The argument I've been making in this issue is that the design of Substrate is already extremely complicated.
I think that you and probably everyone reading this issue, as people who are very familiar with how Substrate works, are extremely biased. Our design is freaking over-complicated and desperately begs for simplifications. If there is a reason why Substrate can fail as a product, this is it: it is over-complicated.

The issue obviously needs to be fixed somehow, and no matter the solution that fix will necessarily introduce some complexity, but solution 3 to me introduces way more complexity than solution 4 from the point of view of the runtime builders and the frontend developers, which are the people that matter.
We want runtime builders and frontend developers to write code that works, and especially in rare situations such as a runtime upgrade that are hard to test, you want their same naively-written code that always works to continue working.

With solution 3 you fundamentally introduce complexity in the API. Yes you can design an API that lets you explicitly choose whether you want to call the "reading runtime" or the "building runtime", but that doesn't remove the fact that builders and frontend developers then need to understand the difference between the "reading runtime" and the "building runtime".

Solution 4 introduces more complexity on the client side, but that's ok, because the client already has tons of checks to perform at each block and needs special handling for handle runtime upgrades. Implementing solution 4 on the client side is normally just a few more ifs here and there.

paritytech-processbot bot referenced this issue in paritytech/polkadot Feb 15, 2023
* Re-apply changes without Diener, rebase to the lastest master

* Cache pruning

* Bit-pack InstantiationStrategy

* Move ExecutorParams version inside the structure itself

* Rework runtime API and executor parameters storage

* Pass executor parameters through backing subsystem

* Update Cargo.lock

* Introduce `ExecutorParams` to approval voting subsys

* Introduce `ExecutorParams` to dispute coordinator

* `cargo fmt`

* Simplify requests from backing subsys

* Fix tests

* Replace manual config cloning with `.clone()`

* Move constants to module

* Parametrize executor performing PVF pre-check

* Fix Malus

* Fix test runtime

* Introduce session executor params as a constant defined by session info
pallet

* Use Parity SCALE codec instead of hand-crafted binary encoding

* Get rid of constants; Add docs

* Get rid of constants

* Minor typo

* Fix Malus after rebase

* `cargo fmt`

* Use transparent SCALE encoding instead of explicit

* Clean up

* Get rid of relay parent to session index mapping

* Join environment type and version in a single enum element

* Use default execution parameters if running an old runtime

* `unwrap()` -> `expect()`

* Correct API version

* Constants are back in town

* Use constants for execution environment types

* Artifact separation, first try

* Get rid of explicit version

* PVF execution queue worker separation

* Worker handshake

* Global renaming

* Minor fixes resolving discussions

* Two-stage requesting of executor params to make use of runtime API cache

* Proper error handling in pvf-checker

* Executor params storage bootstrapping

* Propagate migration to v3 network runtimes

* Fix storage versioning

* Ensure `ExecutorParams` serialization determinism; Add comments

* Rename constants to make things a bit more deterministic
Get rid of stale code

* Tidy up a structure of active PVFs

* Minor formatting

* Fix comment

* Add try-runtime hooks

* Add storage version write on upgrade

Co-authored-by: Andronik <write@reusable.software>

* Add pre- and post-upgrade assertions

* Require to specify environment type; Remove redundant `impl`s

* Add `ExecutorParamHash` creation from `H256`

* Fix candidate validation subsys tests

* Return splittable error from executor params request fn

* Revert "Return splittable error from executor params request fn"

This reverts commit a85038d.

* Decompose approval voting metrics

* Use more relevant errors

* Minor formatting fix

* Assert a valid environment type instead of checking

* Fix `try-runtime` hooks

* After-merge fixes

* Add migration logs

* Remove dead code

* Fix tests

* Fix tests

* Back to the strongly typed implementation

* Promote strong types to executor interface

* Remove stale comment

* Move executor params to `SessionInfo`: primitives and runtime

* Move executor params to `SessionInfo`: node

* Try to bump primitives and API version

* Get rid of `MallocSizeOf`

* Bump target API version to v4

* Make use of session index already in place

* Back to v3

* Fix all the tests

* Add migrations to all the runtimes

* Make use of existing `SessionInfo` in approval voting subsys

* Rename `TARGET` -> `LOG_TARGET`

* Bump all the primitives to v3

* Fix Rococo ParachainHost API version

* Use `RollingSessionWindow` to acquire `ExecutorParams` in disputes

* Fix nits from discussions; add comments

* Re-evaluate queue logic

* Rework job assignment in execution queue

* Add documentation

* Use `RuntimeInfo` to obtain `SessionInfo` (with blackjack and caching)

* Couple `Pvf` with `ExecutorParams` wherever possible

* Put members of `PvfWithExecutorParams` under `Arc` for cheap cloning

* Fix comment

* Fix CI tests

* Fix clippy warnings

* Address nits from discussions

* Add a placeholder for raw data

* Fix non exhaustive match

* Remove redundant reexports and fix imports

* Keep only necessary semantic features, as discussed

* Rework `RuntimeInfo` to support mock implementation for tests

* Remove unneeded bound

* `cargo fmt`

* Revert "Remove unneeded bound"

This reverts commit 3bdfc68.

* Fix PVF host tests

* Fix PVF checker tests

* Fix overseer declarations

* Simplify tests

* `MAX_KEEP_WAITING` timeout based on `BACKGING_EXECUTION_TIMEOUT`

* Add a unit test for varying executor parameters

* Minor fixes from discussions

* Add prechecking max. memory parameter (see paritytech-secops/srlabs_findings#110)

* Fix and improve a test

* Remove `ExecutionEnvironment` and `RawData`

* New primitives versioning in parachain host API

* `disputes()` implementation for Kusama and Polkadot

* Move `ExecutorParams` from `vstaging` to stable primitives

* Move disputes from `vstaging` to stable implementation

* Fix `try-runtime`

* Fixes after merge

* Move `ExecutorParams` to the bottom of `SessionInfo`

* Revert "Move executor params to `SessionInfo`: primitives and runtime"

This reverts commit 1988355.

* Always use fresh activated live hash in pvf precheck
(re-apply 029b82b)

* Fixing tests (broken commit)

* Fix candidate validation tests

* Fix PVF host test

* Minor fixes

* Address discussions

* Restore migration

* Fix `use` to only include what is needed instead of `*`

* Add comment to never touch `DEFAULT_CONFIG`

* Update migration to set default `ExecutorParams` for `dispute_period`
sessions back

* Use `earliest_stored_session` instead of calculations

* Nit

* Add logs

* Treat any runtime error as `NotSupported` again

* Always return default executor params if not available

* Revert "Always return default executor params if not available"

This reverts commit b58ac44.

* Add paritytech/substrate#9997 workaround

* `cargo fmt`

* Remove migration (again!)

* Bump executor params to API v4 (backport from #6698)

---------

Co-authored-by: Andronik <write@reusable.software>
ggwpez referenced this issue in ggwpez/runtimes Mar 10, 2023
* Re-apply changes without Diener, rebase to the lastest master

* Cache pruning

* Bit-pack InstantiationStrategy

* Move ExecutorParams version inside the structure itself

* Rework runtime API and executor parameters storage

* Pass executor parameters through backing subsystem

* Update Cargo.lock

* Introduce `ExecutorParams` to approval voting subsys

* Introduce `ExecutorParams` to dispute coordinator

* `cargo fmt`

* Simplify requests from backing subsys

* Fix tests

* Replace manual config cloning with `.clone()`

* Move constants to module

* Parametrize executor performing PVF pre-check

* Fix Malus

* Fix test runtime

* Introduce session executor params as a constant defined by session info
pallet

* Use Parity SCALE codec instead of hand-crafted binary encoding

* Get rid of constants; Add docs

* Get rid of constants

* Minor typo

* Fix Malus after rebase

* `cargo fmt`

* Use transparent SCALE encoding instead of explicit

* Clean up

* Get rid of relay parent to session index mapping

* Join environment type and version in a single enum element

* Use default execution parameters if running an old runtime

* `unwrap()` -> `expect()`

* Correct API version

* Constants are back in town

* Use constants for execution environment types

* Artifact separation, first try

* Get rid of explicit version

* PVF execution queue worker separation

* Worker handshake

* Global renaming

* Minor fixes resolving discussions

* Two-stage requesting of executor params to make use of runtime API cache

* Proper error handling in pvf-checker

* Executor params storage bootstrapping

* Propagate migration to v3 network runtimes

* Fix storage versioning

* Ensure `ExecutorParams` serialization determinism; Add comments

* Rename constants to make things a bit more deterministic
Get rid of stale code

* Tidy up a structure of active PVFs

* Minor formatting

* Fix comment

* Add try-runtime hooks

* Add storage version write on upgrade

Co-authored-by: Andronik <write@reusable.software>

* Add pre- and post-upgrade assertions

* Require to specify environment type; Remove redundant `impl`s

* Add `ExecutorParamHash` creation from `H256`

* Fix candidate validation subsys tests

* Return splittable error from executor params request fn

* Revert "Return splittable error from executor params request fn"

This reverts commit a0b274177d8bb2f6e13c066741892ecd2e72a456.

* Decompose approval voting metrics

* Use more relevant errors

* Minor formatting fix

* Assert a valid environment type instead of checking

* Fix `try-runtime` hooks

* After-merge fixes

* Add migration logs

* Remove dead code

* Fix tests

* Fix tests

* Back to the strongly typed implementation

* Promote strong types to executor interface

* Remove stale comment

* Move executor params to `SessionInfo`: primitives and runtime

* Move executor params to `SessionInfo`: node

* Try to bump primitives and API version

* Get rid of `MallocSizeOf`

* Bump target API version to v4

* Make use of session index already in place

* Back to v3

* Fix all the tests

* Add migrations to all the runtimes

* Make use of existing `SessionInfo` in approval voting subsys

* Rename `TARGET` -> `LOG_TARGET`

* Bump all the primitives to v3

* Fix Rococo ParachainHost API version

* Use `RollingSessionWindow` to acquire `ExecutorParams` in disputes

* Fix nits from discussions; add comments

* Re-evaluate queue logic

* Rework job assignment in execution queue

* Add documentation

* Use `RuntimeInfo` to obtain `SessionInfo` (with blackjack and caching)

* Couple `Pvf` with `ExecutorParams` wherever possible

* Put members of `PvfWithExecutorParams` under `Arc` for cheap cloning

* Fix comment

* Fix CI tests

* Fix clippy warnings

* Address nits from discussions

* Add a placeholder for raw data

* Fix non exhaustive match

* Remove redundant reexports and fix imports

* Keep only necessary semantic features, as discussed

* Rework `RuntimeInfo` to support mock implementation for tests

* Remove unneeded bound

* `cargo fmt`

* Revert "Remove unneeded bound"

This reverts commit 932463f26b00ce290e1e61848eb9328632ef8a61.

* Fix PVF host tests

* Fix PVF checker tests

* Fix overseer declarations

* Simplify tests

* `MAX_KEEP_WAITING` timeout based on `BACKGING_EXECUTION_TIMEOUT`

* Add a unit test for varying executor parameters

* Minor fixes from discussions

* Add prechecking max. memory parameter (see paritytech-secops/srlabs_findings#110)

* Fix and improve a test

* Remove `ExecutionEnvironment` and `RawData`

* New primitives versioning in parachain host API

* `disputes()` implementation for Kusama and Polkadot

* Move `ExecutorParams` from `vstaging` to stable primitives

* Move disputes from `vstaging` to stable implementation

* Fix `try-runtime`

* Fixes after merge

* Move `ExecutorParams` to the bottom of `SessionInfo`

* Revert "Move executor params to `SessionInfo`: primitives and runtime"

This reverts commit 77253f7af9ac6a6dc85cb6706817bce8e420dfcd.

* Always use fresh activated live hash in pvf precheck
(re-apply 34b09a4c20de17e7926ed942cd0d657d18f743fa)

* Fixing tests (broken commit)

* Fix candidate validation tests

* Fix PVF host test

* Minor fixes

* Address discussions

* Restore migration

* Fix `use` to only include what is needed instead of `*`

* Add comment to never touch `DEFAULT_CONFIG`

* Update migration to set default `ExecutorParams` for `dispute_period`
sessions back

* Use `earliest_stored_session` instead of calculations

* Nit

* Add logs

* Treat any runtime error as `NotSupported` again

* Always return default executor params if not available

* Revert "Always return default executor params if not available"

This reverts commit b58ac4482ef444c67a9852d5776550d08e312f30.

* Add paritytech/substrate#9997 workaround

* `cargo fmt`

* Remove migration (again!)

* Bump executor params to API v4 (backport from #6698)

---------

Co-authored-by: Andronik <write@reusable.software>
@the-right-joyce the-right-joyce transferred this issue from paritytech/substrate Aug 24, 2023
@the-right-joyce the-right-joyce added I2-bug The node fails to follow expected behavior. T1-FRAME This PR/Issue is related to core FRAME, the framework. and removed I3-bug labels Aug 25, 2023
jonathanudd pushed a commit to jonathanudd/polkadot-sdk that referenced this issue Apr 10, 2024
@Polkadot-Forum
Copy link

This issue has been mentioned on Polkadot Forum. There might be relevant details there:

https://forum.polkadot.network/t/2024-09-17-polkadot-finality-lag-slow-parachain-production-immediately-after-runtime-upgrade-post-mortem/10057/1

sandreim added a commit that referenced this issue Sep 20, 2024
Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>
@alindima alindima mentioned this issue Sep 24, 2024
7 tasks
alindima added a commit that referenced this issue Sep 24, 2024
alindima added a commit that referenced this issue Sep 24, 2024
@ordian ordian self-assigned this Sep 30, 2024
This was referenced Oct 11, 2024
github-merge-queue bot pushed a commit that referenced this issue Oct 21, 2024
Resolves #4776

This will enable proper core-sharing between paras, even if one of them
is not producing blocks.

TODO:
- [x] duplicate first entry in the claim queue if the queue used to be
empty
- [x] don't back anything if at the end of the block there'll be a
session change
- [x] write migration for removing the availability core storage
- [x] update and write unit tests
- [x] prdoc
- [x] add zombienet test for synchronous backing
- [x] add zombienet test for core-sharing paras where one of them is not
producing any blocks

_Important note:_
The `ttl` and `max_availability_timeouts` fields of the
HostConfiguration are not removed in this PR, due to #64.
Adding the workaround with the storage version check for every use of
the active HostConfiguration in all runtime APIs would be insane, as
it's used in almost all runtime APIs.

So even though the ttl and max_availability_timeouts fields will now be
unused, they will remain part of the host configuration.

These will be removed in a separate PR once #64 is fixed. Tracked by
#6067

---------

Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>
Co-authored-by: Andrei Sandu <andrei-mihail@parity.io>
Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com>
Co-authored-by: command-bot <>
Overkillus added a commit that referenced this issue Oct 30, 2024
Overkillus added a commit that referenced this issue Oct 31, 2024
RomarQ added a commit to moonbeam-foundation/polkadot-sdk that referenced this issue Dec 5, 2024
* Bump prost-build from 0.12.4 to 0.13.2 (#6144)

Bumps [prost-build](https://github.com/tokio-rs/prost) from 0.12.4 to
0.13.2.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tokio-rs/prost/blob/master/CHANGELOG.md">prost-build's
changelog</a>.</em></p>
<blockquote>
<h1>Prost version 0.13.2</h1>
<p><em>PROST!</em> is a <a
href="https://developers.google.com/protocol-buffers/">Protocol
Buffers</a> implementation for the <a
href="https://www.rust-lang.org/">Rust Language</a>. <code>prost</code>
generates simple, idiomatic Rust code from <code>proto2</code> and
<code>proto3</code> files.</p>
<h2>Features</h2>
<ul>
<li>prost-build: Add protoc executable path to Config (<a
href="https://github.com/tokio-rs/prost/issues/1126">#1126</a>)</li>
<li>prost-build: Extract file descriptor loading from compile_protos()
(<a
href="https://github.com/tokio-rs/prost/issues/1067">#1067</a>)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>prost-types: Fix date-time parsing (<a
href="https://github.com/tokio-rs/prost/issues/1096">#1096</a>)</li>
<li>prost-types: '+' is not a numeric digit (<a
href="https://github.com/tokio-rs/prost/issues/1104">#1104</a>)</li>
<li>prost-types: Converting DateTime to Timestamp is fallible (<a
href="https://github.com/tokio-rs/prost/issues/1095">#1095</a>)</li>
<li>prost-types: Parse timestamp with long second fraction (<a
href="https://github.com/tokio-rs/prost/issues/1106">#1106</a>)</li>
<li>prost-types: Format negative fractional duration (<a
href="https://github.com/tokio-rs/prost/issues/1110">#1110</a>)</li>
<li>prost-types: Allow unknown local time offset (<a
href="https://github.com/tokio-rs/prost/issues/1109">#1109</a>)</li>
</ul>
<h2>Styling</h2>
<ul>
<li>Remove use of legacy numeric constants (<a
href="https://github.com/tokio-rs/prost/issues/1089">#1089</a>)</li>
<li>Move encoding functions into separate modules (<a
href="https://github.com/tokio-rs/prost/issues/1111">#1111</a>)</li>
<li>Remove needless borrow (<a
href="https://github.com/tokio-rs/prost/issues/1122">#1122</a>)</li>
</ul>
<h2>Testing</h2>
<ul>
<li>Add tests for public interface of DecodeError (<a
href="https://github.com/tokio-rs/prost/issues/1120">#1120</a>)</li>
<li>Add <code>parse_date</code> fuzzing target (<a
href="https://github.com/tokio-rs/prost/issues/1127">#1127</a>)</li>
<li>Fix build without std (<a
href="https://github.com/tokio-rs/prost/issues/1134">#1134</a>)</li>
<li>Change some proptest to kani proofs (<a
href="https://github.com/tokio-rs/prost/issues/1133">#1133</a>)</li>
<li>Add <code>parse_duration</code> fuzzing target (<a
href="https://github.com/tokio-rs/prost/issues/1129">#1129</a>)</li>
<li>fuzz: Fix building of fuzzing targets (<a
href="https://github.com/tokio-rs/prost/issues/1107">#1107</a>)</li>
<li>fuzz: Add fuzz targets to workspace (<a
href="https://github.com/tokio-rs/prost/issues/1117">#1117</a>)</li>
</ul>
<h2>Miscellaneous Tasks</h2>
<ul>
<li>Move old protobuf benchmark into prost (<a
href="https://github.com/tokio-rs/prost/issues/1100">#1100</a>)</li>
<li>Remove allow clippy::derive_partial_eq_without_eq (<a
href="https://github.com/tokio-rs/prost/issues/1115">#1115</a>)</li>
<li>Run <code>cargo test</code> without <code>all-targets</code> (<a
href="https://github.com/tokio-rs/prost/issues/1118">#1118</a>)</li>
<li>dependabot: Add github actions (<a
href="https://github.com/tokio-rs/prost/issues/1121">#1121</a>)</li>
<li>Update to cargo clippy version 1.80 (<a
href="https://github.com/tokio-rs/prost/issues/1128">#1128</a>)</li>
</ul>
<h2>Build</h2>
<ul>
<li>Use <code>proc-macro</code> in Cargo.toml (<a
href="https://github.com/tokio-rs/prost/issues/1102">#1102</a>)</li>
<li>Ignore missing features in <code>tests</code> crates (<a
href="https://github.com/tokio-rs/prost/issues/1101">#1101</a>)</li>
<li>Use separated build directory for protobuf (<a
href="https://github.com/tokio-rs/prost/issues/1103">#1103</a>)</li>
<li>protobuf: Don't install unused test proto (<a
href="https://github.com/tokio-rs/prost/issues/1116">#1116</a>)</li>
<li>protobuf: Use crate <code>cmake</code> (<a
href="https://github.com/tokio-rs/prost/issues/1137">#1137</a>)</li>
<li>deps: Update devcontainer to Debian Bookworm release (<a
href="https://github.com/tokio-rs/prost/issues/1114">#1114</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/tokio-rs/prost/commit/57e794203106db483e5115e7e67502ef6f2c7ad8"><code>57e7942</code></a>
chore: Release version 0.13.2 (<a
href="https://github.com/tokio-rs/prost/issues/1139">#1139</a>)</li>
<li><a
href="https://github.com/tokio-rs/prost/commit/8424775d78b13239df3cf3fe888236770a0cd839"><code>8424775</code></a>
build(protobuf): Use crate <code>cmake</code> (<a
href="https://github.com/tokio-rs/prost/issues/1137">#1137</a>)</li>
<li><a
href="https://github.com/tokio-rs/prost/commit/21208abf667313866f79d3d1438310c4dc20bdff"><code>21208ab</code></a>
build(deps): bump model-checking/kani-github-action from 0.32 to 1.1 (<a
href="https://github.com/tokio-rs/prost/issues/1125">#1125</a>)</li>
<li><a
href="https://github.com/tokio-rs/prost/commit/0c79864443621f20d92f9acc78a6ab0e7821dab0"><code>0c79864</code></a>
tests(fuzz): Add <code>parse_duration</code> fuzzing target (<a
href="https://github.com/tokio-rs/prost/issues/1129">#1129</a>)</li>
<li><a
href="https://github.com/tokio-rs/prost/commit/52046b943fdf6f79461725027245f890c7b4f514"><code>52046b9</code></a>
tests: Change some proptest to kani proofs (<a
href="https://github.com/tokio-rs/prost/issues/1133">#1133</a>)</li>
<li><a
href="https://github.com/tokio-rs/prost/commit/ee59dd5a9fe0935ad50e6ddbea5d23e3c6419468"><code>ee59dd5</code></a>
tests: Fix build without std (<a
href="https://github.com/tokio-rs/prost/issues/1134">#1134</a>)</li>
<li><a
href="https://github.com/tokio-rs/prost/commit/e773f5f6d38f74d0efff876011a2fd0d002aed4c"><code>e773f5f</code></a>
feat(prost-build): Add protoc executable path to Config (<a
href="https://github.com/tokio-rs/prost/issues/1126">#1126</a>)</li>
<li><a
href="https://github.com/tokio-rs/prost/commit/753bd92a85a3aa305d9d96b5c6363dc58d6356e6"><code>753bd92</code></a>
ci(clippy): Update to cargo clippy version 1.80 (<a
href="https://github.com/tokio-rs/prost/issues/1128">#1128</a>)</li>
<li><a
href="https://github.com/tokio-rs/prost/commit/df3e58e5d113a0dcf8b6735a5d04cde2d74e5df3"><code>df3e58e</code></a>
tests(fuzz): Add <code>parse_date</code> fuzzing target (<a
href="https://github.com/tokio-rs/prost/issues/1127">#1127</a>)</li>
<li><a
href="https://github.com/tokio-rs/prost/commit/409b93214ed8d98fbb364031ccf330ce4e7caa32"><code>409b932</code></a>
style: Remove needless borrow (<a
href="https://github.com/tokio-rs/prost/issues/1122">#1122</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tokio-rs/prost/compare/v0.12.4...v0.13.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=prost-build&package-manager=cargo&previous-version=0.12.4&new-version=0.13.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bastian Köcher <git@kchr.de>

* Bump the ci_dependencies group across 1 directory with 5 updates (#6035)

Bumps the ci_dependencies group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
|
[lycheeverse/lychee-action](https://github.com/lycheeverse/lychee-action)
| `1.10.0` | `2.0.1` |
| [Swatinem/rust-cache](https://github.com/swatinem/rust-cache) |
`2.7.3` | `2.7.5` |
|
[docker/setup-buildx-action](https://github.com/docker/setup-buildx-action)
| `3.6.1` | `3.7.1` |
|
[docker/build-push-action](https://github.com/docker/build-push-action)
| `6.8.0` | `6.9.0` |
|
[actions-rust-lang/setup-rust-toolchain](https://github.com/actions-rust-lang/setup-rust-toolchain)
| `1.10.0` | `1.10.1` |


Updates `lycheeverse/lychee-action` from 1.10.0 to 2.0.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/lycheeverse/lychee-action/releases">lycheeverse/lychee-action's
releases</a>.</em></p>
<blockquote>
<h2>Version 2.0.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Don't remove the lychee config file by <a
href="https://github.com/dmathieu"><code>@​dmathieu</code></a> in <a
href="https://github.com/lycheeverse/lychee-action/pull/255">lycheeverse/lychee-action#255</a></li>
<li>Bump lycheeverse/lychee-action from 1 to 2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://github.com/lycheeverse/lychee-action/pull/252">lycheeverse/lychee-action#252</a></li>
<li>Fix variable name in docs by <a
href="https://github.com/kdeldycke"><code>@​kdeldycke</code></a> in <a
href="https://github.com/lycheeverse/lychee-action/pull/253">lycheeverse/lychee-action#253</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/dmathieu"><code>@​dmathieu</code></a>
made their first contribution in <a
href="https://github.com/lycheeverse/lychee-action/pull/255">lycheeverse/lychee-action#255</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/lycheeverse/lychee-action/compare/v2...v2.0.1">https://github.com/lycheeverse/lychee-action/compare/v2...v2.0.1</a></p>
<h2>Version 2.0.0</h2>
<h2>Breaking Changes</h2>
<p><strong>Note:</strong> This release improves the action's robustness
by changing default behaviors. Changes are only required if you want to
opt out of the new failure conditions. Most users won't need to modify
their existing configurations.</p>
<h3>Fail pipeline on error by default</h3>
<p>We've changed the default behavior: pipelines will now fail on broken
links automatically. This addresses user feedback that not failing on
broken links was unexpected (see [issue <a
href="https://github.com/lycheeverse/lychee-action/issues/71">#71</a>](<a
href="https://github.com/lycheeverse/lychee-action/issues/71">lycheeverse/lychee-action#71</a>)).</p>
<p><strong>What you need to do:</strong></p>
<ul>
<li>Update to version 2 of this action to apply this change.</li>
<li>Users of the <code>lychee-action@master</code> branch don't need to
make any changes, as <code>fail: true</code> has been the default there
for a while.</li>
<li>If you prefer the old behavior, explicitly set <code>fail</code> to
<code>false</code> when updating:</li>
</ul>
<pre lang="yaml"><code>- name: Link Checker
  id: lychee
  uses: lycheeverse/lychee-action@v2
  with:
    fail: false  # Don't fail action on broken links
</code></pre>
<h3>Fail pipeline if no links were found</h3>
<p>Similar to the above change, we now fail the pipeline if no links are
found during a run. This helps warn users about potential configuration
issues.</p>
<p><strong>What you need to do:</strong></p>
<ul>
<li>If you expect links to be found in your pipeline run, you don't need
to do anything.</li>
<li>If you expect no links in your pipeline run, you can opt out like
this:</li>
</ul>
<pre lang="yaml"><code>- name: Link Checker
  id: lychee
  uses: lycheeverse/lychee-action@v2
  with:
    failIfEmpty: false  # Don't fail action if no links were found
</code></pre>
<p>For a more detailed description of the technical aspects behind these
changes, please see the full changelog below.</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/lycheeverse/lychee-action/commit/2bb232618be239862e31382c5c0eaeba12e5e966"><code>2bb2326</code></a>
don't remove the lychee config file (<a
href="https://github.com/lycheeverse/lychee-action/issues/255">#255</a>)</li>
<li><a
href="https://github.com/lycheeverse/lychee-action/commit/731bf1a2affebd80fab6515ba61d2648a76929a4"><code>731bf1a</code></a>
Fix variable name (<a
href="https://github.com/lycheeverse/lychee-action/issues/253">#253</a>)</li>
<li><a
href="https://github.com/lycheeverse/lychee-action/commit/e360f3c89142a5391e094404ea45e5494f1317dd"><code>e360f3c</code></a>
Bump lycheeverse/lychee-action from 1 to 2 (<a
href="https://github.com/lycheeverse/lychee-action/issues/252">#252</a>)</li>
<li><a
href="https://github.com/lycheeverse/lychee-action/commit/f87f0a62993c2647717456af92593666acb3a500"><code>f87f0a6</code></a>
Update version to <code>lycheeverse/lychee-action@v2</code> in docs</li>
<li><a
href="https://github.com/lycheeverse/lychee-action/commit/7da8ec1fc4e01b5a12062ac6c589c10a4ce70d67"><code>7da8ec1</code></a>
Test latest lychee version tag (<a
href="https://github.com/lycheeverse/lychee-action/issues/236">#236</a>)</li>
<li><a
href="https://github.com/lycheeverse/lychee-action/commit/6cba5a96c25bf6571c0dc0d1521a2ddbae78ea59"><code>6cba5a9</code></a>
Bump version to 0.16.x, respect new tag names (<a
href="https://github.com/lycheeverse/lychee-action/issues/249">#249</a>)</li>
<li><a
href="https://github.com/lycheeverse/lychee-action/commit/e71a9a10faeb8c75aa21760b2f706f7831adadc7"><code>e71a9a1</code></a>
Split up steps in action (<a
href="https://github.com/lycheeverse/lychee-action/issues/248">#248</a>)</li>
<li><a
href="https://github.com/lycheeverse/lychee-action/commit/897f08a07f689df1a43076f4374af272f66a6dd1"><code>897f08a</code></a>
action.yml: fix failing CI (<a
href="https://github.com/lycheeverse/lychee-action/issues/246">#246</a>)</li>
<li><a
href="https://github.com/lycheeverse/lychee-action/commit/22c8e46b8f296cda676f8f92c634c4a87b436779"><code>22c8e46</code></a>
Set exit_code correctly as output (<a
href="https://github.com/lycheeverse/lychee-action/issues/245">#245</a>)</li>
<li><a
href="https://github.com/lycheeverse/lychee-action/commit/5047c2a4052946424ce139fe111135f6d7c0fe0b"><code>5047c2a</code></a>
README: update actions/cache to v4 (<a
href="https://github.com/lycheeverse/lychee-action/issues/243">#243</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/lycheeverse/lychee-action/compare/2b973e86fc7b1f6b36a93795fe2c9c6ae1118621...2bb232618be239862e31382c5c0eaeba12e5e966">compare
view</a></li>
</ul>
</details>
<br />

Updates `Swatinem/rust-cache` from 2.7.3 to 2.7.5
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/swatinem/rust-cache/releases">Swatinem/rust-cache's
releases</a>.</em></p>
<blockquote>
<h2>v2.7.5</h2>
<h2>What's Changed</h2>
<ul>
<li>Upgrade checkout action from version 3 to 4 by <a
href="https://github.com/carsten-wenderdel"><code>@​carsten-wenderdel</code></a>
in <a
href="https://github.com/Swatinem/rust-cache/pull/190">Swatinem/rust-cache#190</a></li>
<li>fix: usage of <code>deprecated</code> version of <code>node</code>
by <a href="https://github.com/hamirmahal"><code>@​hamirmahal</code></a>
in <a
href="https://github.com/Swatinem/rust-cache/pull/197">Swatinem/rust-cache#197</a></li>
<li>Only run macOsWorkaround() on macOS by <a
href="https://github.com/heksesang"><code>@​heksesang</code></a> in <a
href="https://github.com/Swatinem/rust-cache/pull/206">Swatinem/rust-cache#206</a></li>
<li>Support Cargo.lock format cargo-lock v4 by <a
href="https://github.com/NobodyXu"><code>@​NobodyXu</code></a> in <a
href="https://github.com/Swatinem/rust-cache/pull/211">Swatinem/rust-cache#211</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/carsten-wenderdel"><code>@​carsten-wenderdel</code></a>
made their first contribution in <a
href="https://github.com/Swatinem/rust-cache/pull/190">Swatinem/rust-cache#190</a></li>
<li><a
href="https://github.com/hamirmahal"><code>@​hamirmahal</code></a> made
their first contribution in <a
href="https://github.com/Swatinem/rust-cache/pull/197">Swatinem/rust-cache#197</a></li>
<li><a href="https://github.com/heksesang"><code>@​heksesang</code></a>
made their first contribution in <a
href="https://github.com/Swatinem/rust-cache/pull/206">Swatinem/rust-cache#206</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Swatinem/rust-cache/compare/v2.7.3...v2.7.5">https://github.com/Swatinem/rust-cache/compare/v2.7.3...v2.7.5</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/Swatinem/rust-cache/commit/82a92a6e8fbeee089604da2575dc567ae9ddeaab"><code>82a92a6</code></a>
2.7.5</li>
<li><a
href="https://github.com/Swatinem/rust-cache/commit/598fe25fa107b2fd526fc6471f6e48de7cd12083"><code>598fe25</code></a>
update dependencies, rebuild</li>
<li><a
href="https://github.com/Swatinem/rust-cache/commit/8f842c2d455cfe3d0d5a4b28f53f5389b51b71bf"><code>8f842c2</code></a>
Support Cargo.lock format cargo-lock v4 (<a
href="https://github.com/swatinem/rust-cache/issues/211">#211</a>)</li>
<li><a
href="https://github.com/Swatinem/rust-cache/commit/96a8d65dbafbc7d145a9b2b6c3b12ee335738cd2"><code>96a8d65</code></a>
Only run macOsWorkaround() on macOS (<a
href="https://github.com/swatinem/rust-cache/issues/206">#206</a>)</li>
<li><a
href="https://github.com/Swatinem/rust-cache/commit/9bdad043e88c75890e36ad3bbc8d27f0090dd609"><code>9bdad04</code></a>
fix: usage of <code>deprecated</code> version of <code>node</code> (<a
href="https://github.com/swatinem/rust-cache/issues/197">#197</a>)</li>
<li><a
href="https://github.com/Swatinem/rust-cache/commit/f7a52f691454d93c6ce0dff6666a5cb399b8d06e"><code>f7a52f6</code></a>
&quot;add jsonpath test&quot;</li>
<li><a
href="https://github.com/Swatinem/rust-cache/commit/2bceda39122b2cc71e6e26ad729b92b44d101f4b"><code>2bceda3</code></a>
&quot;update dependencies&quot;</li>
<li><a
href="https://github.com/Swatinem/rust-cache/commit/640a22190e7a783d4c409684cea558f081f92012"><code>640a221</code></a>
Upgrade checkout action from version 3 to 4 (<a
href="https://github.com/swatinem/rust-cache/issues/190">#190</a>)</li>
<li><a
href="https://github.com/Swatinem/rust-cache/commit/158274163087d4d4d49dfcc6a39806493e413240"><code>1582741</code></a>
update dependencies</li>
<li>See full diff in <a
href="https://github.com/swatinem/rust-cache/compare/23bce251a8cd2ffc3c1075eaa2367cf899916d84...82a92a6e8fbeee089604da2575dc567ae9ddeaab">compare
view</a></li>
</ul>
</details>
<br />

Updates `docker/setup-buildx-action` from 3.6.1 to 3.7.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/docker/setup-buildx-action/releases">docker/setup-buildx-action's
releases</a>.</em></p>
<blockquote>
<h2>v3.7.1</h2>
<ul>
<li>Switch back to <code>uuid</code> package by <a
href="https://github.com/crazy-max"><code>@​crazy-max</code></a> in <a
href="https://github.com/docker/setup-buildx-action/pull/369">docker/setup-buildx-action#369</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/docker/setup-buildx-action/compare/v3.7.0...v3.7.1">https://github.com/docker/setup-buildx-action/compare/v3.7.0...v3.7.1</a></p>
<h2>v3.7.0</h2>
<ul>
<li>Always set <code>buildkitd-flags</code> if opt-in by <a
href="https://github.com/crazy-max"><code>@​crazy-max</code></a> in <a
href="https://github.com/docker/setup-buildx-action/pull/363">docker/setup-buildx-action#363</a></li>
<li>Remove <code>uuid</code> package and switch to <code>crypto</code>
by <a href="https://github.com/crazy-max"><code>@​crazy-max</code></a>
in <a
href="https://github.com/docker/setup-buildx-action/pull/366">docker/setup-buildx-action#366</a></li>
<li>Bump <code>@​docker/actions-toolkit</code> from 0.35.0 to 0.39.0 in
<a
href="https://github.com/docker/setup-buildx-action/pull/362">docker/setup-buildx-action#362</a></li>
<li>Bump path-to-regexp from 6.2.2 to 6.3.0 in <a
href="https://github.com/docker/setup-buildx-action/pull/354">docker/setup-buildx-action#354</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/docker/setup-buildx-action/compare/v3.6.1...v3.7.0">https://github.com/docker/setup-buildx-action/compare/v3.6.1...v3.7.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/docker/setup-buildx-action/commit/c47758b77c9736f4b2ef4073d4d51994fabfe349"><code>c47758b</code></a>
Merge pull request <a
href="https://github.com/docker/setup-buildx-action/issues/369">#369</a>
from crazy-max/revert-crypto</li>
<li><a
href="https://github.com/docker/setup-buildx-action/commit/8fea3825134d99989287350b6429e3e86fa5d320"><code>8fea382</code></a>
chore: update generated content</li>
<li><a
href="https://github.com/docker/setup-buildx-action/commit/2874e980e877332a8fe575054d8c083109b8fede"><code>2874e98</code></a>
switch back to uuid package</li>
<li><a
href="https://github.com/docker/setup-buildx-action/commit/8026d2bc3645ea78b0d2544766a1225eb5691f89"><code>8026d2b</code></a>
Merge pull request <a
href="https://github.com/docker/setup-buildx-action/issues/362">#362</a>
from docker/dependabot/npm_and_yarn/docker/actions-to...</li>
<li><a
href="https://github.com/docker/setup-buildx-action/commit/e51aab53e9e6264bc11f62da6fbc352686b2147f"><code>e51aab5</code></a>
chore: update generated content</li>
<li><a
href="https://github.com/docker/setup-buildx-action/commit/fd7390e14dc77aa9df3fbc8a021cf91ac9fe7aa5"><code>fd7390e</code></a>
build(deps): bump <code>@​docker/actions-toolkit</code> from 0.35.0 to
0.39.0</li>
<li><a
href="https://github.com/docker/setup-buildx-action/commit/910a3040053b5bd9636a487f0054cfe150829ae7"><code>910a304</code></a>
Merge pull request <a
href="https://github.com/docker/setup-buildx-action/issues/366">#366</a>
from crazy-max/remove-uuid</li>
<li><a
href="https://github.com/docker/setup-buildx-action/commit/3623ee443e01d4daf9e9107d28e162a058c52ca8"><code>3623ee4</code></a>
chore: update generated content</li>
<li><a
href="https://github.com/docker/setup-buildx-action/commit/e0e5ecf670bf33d756abc55962778de1286f70e1"><code>e0e5ecf</code></a>
remove uuid package and switch to crypto</li>
<li><a
href="https://github.com/docker/setup-buildx-action/commit/5334dd0cdd27e0ac92d6c98d35f3398fcc13195f"><code>5334dd0</code></a>
Merge pull request <a
href="https://github.com/docker/setup-buildx-action/issues/363">#363</a>
from crazy-max/set-buildkitd-flags-optin</li>
<li>Additional commits viewable in <a
href="https://github.com/docker/setup-buildx-action/compare/988b5a0280414f521da01fcc63a27aeeb4b104db...c47758b77c9736f4b2ef4073d4d51994fabfe349">compare
view</a></li>
</ul>
</details>
<br />

Updates `docker/build-push-action` from 6.8.0 to 6.9.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/docker/build-push-action/releases">docker/build-push-action's
releases</a>.</em></p>
<blockquote>
<h2>v6.9.0</h2>
<ul>
<li>Bump <code>@​docker/actions-toolkit</code> from 0.38.0 to 0.39.0 in
<a
href="https://github.com/docker/build-push-action/pull/1234">docker/build-push-action#1234</a></li>
<li>Bump path-to-regexp from 6.2.2 to 6.3.0 in <a
href="https://github.com/docker/build-push-action/pull/1232">docker/build-push-action#1232</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/docker/build-push-action/compare/v6.8.0...v6.9.0">https://github.com/docker/build-push-action/compare/v6.8.0...v6.9.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/docker/build-push-action/commit/4f58ea79222b3b9dc2c8bbdd6debcef730109a75"><code>4f58ea7</code></a>
Merge pull request <a
href="https://github.com/docker/build-push-action/issues/1234">#1234</a>
from docker/dependabot/npm_and_yarn/docker/actions-t...</li>
<li><a
href="https://github.com/docker/build-push-action/commit/49b5ea61c60477d214908bb6e23ce05c074ef04e"><code>49b5ea6</code></a>
chore: update generated content</li>
<li><a
href="https://github.com/docker/build-push-action/commit/13c9fddd72db0ce3cd9d87eb53e0480d2a32a77b"><code>13c9fdd</code></a>
chore(deps): Bump <code>@​docker/actions-toolkit</code> from 0.38.0 to
0.39.0</li>
<li><a
href="https://github.com/docker/build-push-action/commit/e44afff3590e1d4f93b6adc72376512edb012a7c"><code>e44afff</code></a>
Merge pull request <a
href="https://github.com/docker/build-push-action/issues/1232">#1232</a>
from docker/dependabot/npm_and_yarn/path-to-regexp-6...</li>
<li><a
href="https://github.com/docker/build-push-action/commit/67ebad331f4ca45e39184b280dbacb11eb3beae0"><code>67ebad3</code></a>
chore(deps): Bump path-to-regexp from 6.2.2 to 6.3.0</li>
<li>See full diff in <a
href="https://github.com/docker/build-push-action/compare/32945a339266b759abcbdc89316275140b0fc960...4f58ea79222b3b9dc2c8bbdd6debcef730109a75">compare
view</a></li>
</ul>
</details>
<br />

Updates `actions-rust-lang/setup-rust-toolchain` from 1.10.0 to 1.10.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions-rust-lang/setup-rust-toolchain/releases">actions-rust-lang/setup-rust-toolchain's
releases</a>.</em></p>
<blockquote>
<h2>v1.10.1</h2>
<ul>
<li>Fix problem matcher for rustfmt output.
The format has changed since <a
href="https://github.com/rust-lang/rustfmt/pull/5971">rust-lang/rustfmt#5971</a>
and now follows the form &quot;filename:line&quot;.
Thanks to <a
href="https://github.com/0xcypher02"><code>@​0xcypher02</code></a> for
pointing out the problem.</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions-rust-lang/setup-rust-toolchain/compare/v1...v1.10.1">https://github.com/actions-rust-lang/setup-rust-toolchain/compare/v1...v1.10.1</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions-rust-lang/setup-rust-toolchain/blob/main/CHANGELOG.md">actions-rust-lang/setup-rust-toolchain's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<p>All notable changes to this project will be documented in this
file.</p>
<p>The format is based on <a
href="https://keepachangelog.com/en/1.0.0/">Keep a Changelog</a>,
and this project adheres to <a
href="https://semver.org/spec/v2.0.0.html">Semantic Versioning</a>.</p>
<h2>[Unreleased]</h2>
<h2>[1.10.1] - 2024-10-01</h2>
<ul>
<li>Fix problem matcher for rustfmt output.
The format has changed since <a
href="https://github.com/rust-lang/rustfmt/pull/5971">rust-lang/rustfmt#5971</a>
and now follows the form &quot;filename:line&quot;.
Thanks to <a
href="https://github.com/0xcypher02"><code>@​0xcypher02</code></a> for
pointing out the problem.</li>
</ul>
<h2>[1.10.0] - 2024-09-23</h2>
<ul>
<li>Add new parameter <code>cache-directories</code> that is propagated
to <code>Swatinem/rust-cache</code> (<a
href="https://github.com/actions-rust-lang/setup-rust-toolchain/issues/44">#44</a>
by <a
href="https://github.com/pranc1ngpegasus"><code>@​pranc1ngpegasus</code></a>)</li>
<li>Add new parameter <code>cache-key</code> that is propagated to
<code>Swatinem/rust-cache</code> as <code>key</code> (<a
href="https://github.com/actions-rust-lang/setup-rust-toolchain/issues/41">#41</a>
by <a
href="https://github.com/iainlane"><code>@​iainlane</code></a>)</li>
<li>Make rustup toolchain installation more robust in light of planned
changes <a
href="https://github.com/rust-lang/rustup/issues/3635">rust-lang/rustup#3635</a>
and <a
href="https://github.com/rust-lang/rustup/pull/3985">rust-lang/rustup#3985</a></li>
<li>Allow installing multiple Rust toolchains by specifying multiple
versions in the <code>toolchain</code> input parameter.</li>
<li>Configure the <code>rustup override</code> behavior via the new
<code>override</code> input. (<a
href="https://github.com/actions-rust-lang/setup-rust-toolchain/issues/38">#38</a>)</li>
</ul>
<h2>[1.9.0] - 2024-06-08</h2>
<ul>
<li>Add extra argument <code>cache-on-failure</code> and forward it to
<code>Swatinem/rust-cache</code>. (<a
href="https://github.com/actions-rust-lang/setup-rust-toolchain/issues/39">#39</a>
by <a
href="https://github.com/samuelhnrq"><code>@​samuelhnrq</code></a>)<br
/>
Set the default the value to true.
This will result in more caching than previously.
This helps when large dependencies are compiled only for testing to
fail.</li>
</ul>
<h2>[1.8.0] - 2024-01-13</h2>
<ul>
<li>Allow specifying subdirectories for cache.</li>
<li>Fix toolchain file overriding.</li>
</ul>
<h2>[1.7.0] - 2024-01-11</h2>
<ul>
<li>Allow overriding the toolchain file with explicit
<code>toolchain</code> input. (<a
href="https://github.com/actions-rust-lang/setup-rust-toolchain/issues/26">#26</a>)</li>
</ul>
<h2>[1.6.0] - 2023-12-04</h2>
<h3>Added</h3>
<ul>
<li>Allow disabling problem matchers (<a
href="https://github.com/actions-rust-lang/setup-rust-toolchain/issues/27">#27</a>)
This can be useful when having a matrix of jobs, that produce the same
errors.</li>
</ul>
<h2>[1.5.0] - 2023-05-29</h2>
<h3>Added</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions-rust-lang/setup-rust-toolchain/commit/11df97af8e8102fd60b60a77dfbf58d40cd843b8"><code>11df97a</code></a>
Update the rustfmt problem matcher</li>
<li>See full diff in <a
href="https://github.com/actions-rust-lang/setup-rust-toolchain/compare/4d1965c9142484e48d40c19de54b5cba84953a06...11df97af8e8102fd60b60a77dfbf58d40cd843b8">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bastian Köcher <git@kchr.de>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* runtime: remove ttl (#5461)

Resolves https://github.com/paritytech/polkadot-sdk/issues/4776

This will enable proper core-sharing between paras, even if one of them
is not producing blocks.

TODO:
- [x] duplicate first entry in the claim queue if the queue used to be
empty
- [x] don't back anything if at the end of the block there'll be a
session change
- [x] write migration for removing the availability core storage
- [x] update and write unit tests
- [x] prdoc
- [x] add zombienet test for synchronous backing
- [x] add zombienet test for core-sharing paras where one of them is not
producing any blocks

_Important note:_
The `ttl` and `max_availability_timeouts` fields of the
HostConfiguration are not removed in this PR, due to #64.
Adding the workaround with the storage version check for every use of
the active HostConfiguration in all runtime APIs would be insane, as
it's used in almost all runtime APIs.

So even though the ttl and max_availability_timeouts fields will now be
unused, they will remain part of the host configuration.

These will be removed in a separate PR once #64 is fixed. Tracked by
https://github.com/paritytech/polkadot-sdk/issues/6067

---------

Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>
Co-authored-by: Andrei Sandu <andrei-mihail@parity.io>
Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com>
Co-authored-by: command-bot <>

* [pallet-nfts, pallet_uniques] - Expose private structs (#6087)

# Description

This PR exposes pallet_nfts and pallet_uniques structs, so other pallets
can access storage to use it for extending nft functionalities.

In pallet uniques it also exposes collection and asset metadata storage
as they are private.
 
## Integration

This integration allows nfts and uniques extension pallets to use then
private - now public structs to retrieve and parse storage from
pallet_nfts. We are building cross-chain NFT pallet and in order to
transfer collection that houses multiple NFT owners we need to manually
remove NFTs and Collections from storage without signers. We would also
like to refund deposits on origin chain and we were unable to as struct
data was private.

We have built cross-chain pallet that allows to send nfts or collections
between two pallets in abstract way without having to look which pallet
parachain (If nfts or uniques) implements.

## Review Notes

Code exposes private structs to public structs. No breaking change.

Build runs fine, tests are also ok.
<img width="468" alt="screen1"
src="https://github.com/user-attachments/assets/f31f60b5-390c-4497-b46b-59dd561204ae">
<img width="664" alt="screen2"
src="https://github.com/user-attachments/assets/7e2aa71c-3bc4-49a9-8afc-47d4f45f4359">
<img width="598" alt="screen3"
src="https://github.com/user-attachments/assets/10f4e427-858f-460d-8644-f5750494edb0">



PR is tied with following issue:
Closes #5959 

# Checklist

* [x] My PR includes a detailed description as outlined in the
"Description" and its two subsections above.
* [x] My PR follows the [labeling requirements](

https://github.com/paritytech/polkadot-sdk/blob/master/docs/contributor/CONTRIBUTING.md#Process
) of this project (at minimum one label for `T` required)
* External contributors: ask maintainers to put the right label on your
PR.
* [ ] I have made corresponding changes to the documentation (if
applicable)
* [ ] I have added tests that prove my fix is effective or that my
feature works (if applicable)

---------

Co-authored-by: Branislav Kontur <bkontur@gmail.com>
Co-authored-by: command-bot <>

* [Backport] Version bumps from stable2409-1 (#6153)

This PR backports regular version bumps and prdocs reordering from the
current stable release back to master

* Fix TrustedQueryApi Error (#6170)

Related to https://github.com/paritytech/polkadot-sdk/issues/6161

This seems to fix the `JavaScript heap out of memory` error encountered
in the bridge zombienet tests lately.

This is just a partial fix, since we also need to address
https://github.com/paritytech/polkadot-sdk/issues/6133 in order to fully
fix the bridge zombienet tests

* [pallet-revive] Eth RPC integration (#5866)

This PR introduces the necessary changes to pallet-revive for
integrating with our Ethereum JSON-RPC.
The RPC proxy itself will be added in a follow up.

## Changes

- A new pallet::call `Call::eth_transact`. This is used as a wrapper to
accept unsigned Ethereum transaction, valid call will be routed to
`Call::call` or `Call::instantiate_with_code`

- A custom UncheckedExtrinsic struct, that wraps the generic one usually
and add the ability to check eth_transact calls sent from an Ethereum
JSON-RPC proxy.
- Generated types and traits to support implementing a JSON-RPC Ethereum
proxy.

## Flow Overview:
- A user submits a transaction via MetaMask or another
Ethereum-compatible wallet.
- The proxy dry run the transaction and add metadata to the call (gas
limit in Weight, storage deposit limit, and length of bytecode and
constructor input for contract instantiation)
- The raw transaction, along with the additional metadata, is submitted
to the node as an unsigned extrinsic.
- On the runtime, our custom UncheckedExtrinsic define a custom
Checkable implementation that converts the unsigned extrinsics into
checked one
 - It recovers the signer
- validates the payload, and injects signed extensions, allowing the
system to increment the nonce and charge the appropriate fees.
- re-route the call to pallet-revive::Call::call or
pallet-revive::Call::instantiateWithCode

## Dependencies

- https://github.com/koute/polkavm/pull/188

## Follow up PRs
- #5926  
- #6147 (previously #5953)
- #5502

---------

Co-authored-by: Alexander Theißen <alex.theissen@me.com>
Co-authored-by: Cyrill Leutwiler <cyrill@parity.io>

* [pallet-revive] fix fixture build path (#6174)

Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Cyrill Leutwiler <cyrill@parity.io>

* `fatxpool`: `LocalTransactionPool` implemented (#6104)

[`LocalTransactionPool`
trait](https://github.com/paritytech/polkadot-sdk/blob/d5b96e9e7f24adc1799f8e426c5cb69b4f2dbf8a/substrate/client/transaction-pool/api/src/lib.rs#L408-L426)
is now implemented for `ForkAwareTransactionPool`.

Closes #5493

* Use bool::then instead of then_some with function calls (#6156)

I noticed that hardware benchmarks are being run even though we pass the
--no-hardware-benchmarks cli flag. After some debugging, the cause is an
incorrect usage of the `then_some` method.

From [std
docs](https://doc.rust-lang.org/std/primitive.bool.html#method.then_some):

> Arguments passed to then_some are eagerly evaluated; if you are
passing the result of a function call, it is recommended to use
[then](https://doc.rust-lang.org/std/primitive.bool.html#method.then),
which is lazily evaluated.

```rust
let mut a = 0;
let mut function_with_side_effects = || { a += 1; };

true.then_some(function_with_side_effects());
false.then_some(function_with_side_effects());

// `a` is incremented twice because the value passed to `then_some` is
// evaluated eagerly.
assert_eq!(a, 2);
```

This PR fixes all the similar usages of the `then_some` method across
the codebase.

polkadot address: 138eUqXvUYT3o4GdbnWQfGRzM8yDWh5Q2eFrFULL7RAXzdWD

---------

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Assets in pool with native can be used in `query_weight_to_asset_fee` (#6080)

A follow-up to https://github.com/paritytech/polkadot-sdk/pull/5599.
Assets in a pool with the native one are returned from
`query_acceptable_payment_assets`. Now those assets can be used in
`query_weight_to_asset_fee` to get the correct amount that needs to be
paid.

---------

Co-authored-by: command-bot <>

* [pallet-revive] Add pallet to AH westend (#5502)

Add pallet-revive to Westend runtime, and configure the runtime to
accept Ethereum signed transaction

* Polkadot OmniNode Docs (#6094)

provides low-level documentation on how the omni-node is meant to work.
This is meant to act as reusable material for other teams (e.g.
Papermoon and W3F) to use and integrate into the high level Polkadot
documentation.

Broadly speaking, for omni-node to have great rust-docs, we need to
focus on the following crates, all of which got a bit of love in this
PR:

1. `sp-genesis-builder`
2. `polkadot-omni-node`
3. `polkadot-omni-node-lib`
4. `frame-omni-bencher`

On top of this, we have now: 

* `polkadot_sdk_docs::guides` contains two new steps demonstrating the
most basic version of composing your pallet, putting it into a runtime,
and putting that runtime into omni-node
* `polkadot_sdk_docs::reference_docs::omni_node` to explain in more
detail how omni-node differs from the old-school node.
* `polkadot_sdk_docs::reference_docs::frame_weight_benchmarking` to
finally have a minimal reference about weights and benchmarking.
* It provides tests for some of the steps in
https://github.com/paritytech/polkadot-sdk/issues/5568


closes https://github.com/paritytech/polkadot-sdk/issues/5568
closes https://github.com/paritytech/polkadot-sdk/issues/4781

Next steps

- [x] Ensure the README of the parachain template is up-to-date.
@iulianbarbu
- [ ] Readme for `polkadot-omni-node` and similar is updated. For now,
use `cargo-readme` and copy over the rust-docs.

To build the branch locally and run this:
https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/meta_contributing/index.html#how-to-develop-locally

---------

Co-authored-by: Iulian Barbu <14218860+iulianbarbu@users.noreply.github.com>
Co-authored-by: Sebastian Kunert <skunert49@gmail.com>
Co-authored-by: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com>

* Fix `zombienet-bridges-0001-asset-transfer-works` (#6175)

Closes https://github.com/paritytech/polkadot-sdk/issues/6161

Westend BridgeHub freezes for a while at block 3 and if we try to init
the bridge and fund the accounts during that time, it fails. So we wait
untill all the parachains produced at least 10 blocks, in order to make
sure that they work reliably.

* [pallet-revive] fix hardcoded gas in tests (#6192)

Fix hardcoded gas limits in tests

---------

Co-authored-by: GitHub Action <action@github.com>

* Added Trusted Query API implementation for Westend and Rococo relay chains (#6212)

Added missing API methods to Rococo and Westend parachains.
Preparatory work for making chopstick tests run smoothly.
Follow-up of
[PR#6039](https://github.com/paritytech/polkadot-sdk/pull/6039)

* Snowbridge: PNA Audit Better Documentation and minor Refactorings (#6216)

# Description

Snowbridge PNA has been audited. A number of issues where raised due to
not understanding the fee model for Polkadot Native Assets(PNA)
implementation. This PR addresses this by adding more comments and
better naming of private functions.

## Integration

None, documentation and private method name changes.

* Enable approval-voting-parallel by default on kusama (#6218)

The approval-voting-parallel introduced with
https://github.com/paritytech/polkadot-sdk/pull/4849 has been tested on
`versi` and approximately 3 weeks on parity's existing kusama nodes
https://github.com/paritytech/devops/issues/3583, things worked as
expected, so enable it by default on all kusama nodes in the next
release.

The next step will be enabling by default on polkadot if no issue
arrises while running on kusama.

---------

Signed-off-by: Alexandru Gheorghe <alexandru.gheorghe@parity.io>

* pallet macro: Support instantiable pallets in tasks (#5194)

Fix https://github.com/paritytech/polkadot-sdk/issues/5185

also implement handling of attr in expansion in construct-runtime

---------

Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Bastian Köcher <git@kchr.de>

* Disable tests reported in #6062  (#6064)

Flaky tests reported in

#6062
#6063 (already fixed)

Thx!

* Fix a tiny typo (#6229)

Just fix a tiny typo

* pallet-message-queue: Fix max message size calculation (#6205)

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.

---------

Co-authored-by: GitHub Action <action@github.com>

* `RuntimeGenesiConfig`: json macro added (#5813)

This PR adds `build_struct_json_patch` which helps to generate a JSON
used for preset.

Here is doc and example:

https://github.com/paritytech/polkadot-sdk/blob/d868b858758d3886d16c8ba8feb3c93c188044f3/substrate/frame/support/src/generate_genesis_config.rs#L168-L266

And real-world usage:

https://github.com/paritytech/polkadot-sdk/blob/d868b858758d3886d16c8ba8feb3c93c188044f3/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/genesis_config_presets.rs#L37-L61

Closes #5700

---------

Co-authored-by: Sebastian Kunert <skunert49@gmail.com>

* substrate-offchain: upgrade hyper to v1 (#5919)

Closes #4896

* pallet-revive: Add stateful address mapping (#6096)

Fixes #5576

This allows contracts to be used with an AccountId32 through normal
extrinsics and not only through the eth compat layer. It works by adding
a new extrinsic `map_account` that lets people register their
AccountId32.

---------

Co-authored-by: command-bot <>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Cyrill Leutwiler <cyrill@parity.io>

* Fix migrations for pallet-xcm (#6148)

Relates to: https://github.com/paritytech/polkadot-sdk/pull/4826
Relates to: https://github.com/paritytech/polkadot-sdk/issues/3214

## Description

`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. Without proper migration, this can lead to issues with
[undecodable
storage](https://github.com/paritytech/polkadot-sdk/actions/runs/11381324568/job/31662577532?pr=6092),
as was identified on the XCMv5 branch where XCMv2 was removed.

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.

## TODO
- [x] create tracking issue for `polkadot-fellows`
https://github.com/polkadot-fellows/runtimes/issues/492
- [x] Add missing `MigrateToLatestXcmVersion` for westend
- [x] fix pallet-xcm `Queries`
- fails for Westend
https://github.com/paritytech/polkadot-sdk/actions/runs/11381324568/job/31662577532?pr=6092
- `V2` was removed from `Versioned*` stuff, but we have a live data with
V2 e.g. Queries - e.g. Kusama or Polkadot relay chains
```
VersionNotifier: {
        origin: {
          V2: {
            parents: 0
            interior: {
              X1: {
                Parachain: 2,124
              }
            }
          }
        }
        isActive: true
      } 
```

![image](https://github.com/user-attachments/assets/f59f761b-46a7-4def-8aea-45c4e41c0a00)
- [x] fix also for `RemoteLockedFungibles` 
- [x] fix also for `LockedFungibles`

## Follow-ups

- [ ] deploy on Westend chains before XCMv5
- [ ] https://github.com/paritytech/polkadot-sdk/issues/6188

---------

Co-authored-by: command-bot <>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Francisco Aguirre <franciscoaguirreperez@gmail.com>

* asset-hubs: simplify xcm-config (#6222)

`ForeignCreatorsSovereignAccountOf` is used by `ForeignCreators` filter
to convert location to `AccountId`, _after_ `ForeignCreators::IsForeign`
filter passes for an (asset, location) pair.

The `IsForeign` filter is the actual differentiator, so if a location
passes it, we should support converting it to an `AccountId`.

As such, this commit replaces `ForeignCreatorsSovereignAccountOf`
converter with the more general `LocationToAccountId` converter.

Signed-off-by: Adrian Catangiu <adrian@parity.io>

* Switch node side to v2 candidate receipts (#5679)

on top of https://github.com/paritytech/polkadot-sdk/pull/5423

This PR implements the plumbing work required for
https://github.com/paritytech/polkadot-sdk/issues/5047 . I also added
additional helper methods gated by feature "test" in primitives.

TODO:
- [x] PRDoc

---------

Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>
Co-authored-by: GitHub Action <action@github.com>

* Fix a flaky zombienet test - 0004-coretime-smoke-test (#6236)

In the test log I noticed that the batch transaction which configures
the coretime chain fails. However when rerunning the transaction
manually - it worked. Then I noticed that the coretime chain is
initially registered via zombienet and then re-registered via
`0004-configure-relay.js`. Because of this there is a period of time
when it's not producing blocks and `0004-configure-broker.js` fails to
setup the coretime chain. My theory is that the transaction has failed
because the coretime chain is stalled during the re-registration.

Fixes https://github.com/paritytech/polkadot-sdk/issues/6226

* fix experimental-ump-signals tests (#6214)

Resolves https://github.com/paritytech/polkadot-sdk/issues/6200

Also sets the feature on the rococo-parachain. Will be useful for
zombienet testing

* remove parachains_assigner code (#6171)

Resolves https://github.com/paritytech/polkadot-sdk/issues/5970

Removes the code of the legacy parachains assigner, which was used prior
to coretime. Now that all networks are upgraded to use the coretime
assigner, we can remove it.

* [pallet-revive] Add Ethereum JSON-RPC server (#6147)

Redo of https://github.com/paritytech/polkadot-sdk/pull/5953

---------

Co-authored-by: Alexander Theißen <alex.theissen@me.com>
Co-authored-by: GitHub Action <action@github.com>

* [pallet-revive] Update typeInfo (#6263)

Update typeinfo impl to make it transparent for subxt

see https://github.com/paritytech/subxt/pull/1845

---------

Co-authored-by: GitHub Action <action@github.com>

* pallet-revive: Trade code size for call stack depth (#6264)

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.

---------

Co-authored-by: GitHub Action <action@github.com>

* [pallet-revive] implement tx origin API (#6105)

Implement a syscall to retreive the transaction origin.

---------

Signed-off-by: Cyrill Leutwiler <bigcyrill@hotmail.com>
Signed-off-by: xermicus <cyrill@parity.io>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: command-bot <>
Co-authored-by: Alexander Theißen <alex.theissen@me.com>

* Use frame umbrella crate in `pallet-proxy` and `pallet-multisig` (#5995)

A step towards https://github.com/paritytech/polkadot-sdk/issues/4782

In order to nail down the right preludes in `polkadot-sdk-frame`, we
need to migrate a number of pallets to be written with it. Moreover,
migrating our pallets to this simpler patter will encourage the
ecosystem to also follow along.

If this PR is approved and has no unwanted negative consequences, I will
make a tracking issue to migrate all pallets to this umbrella crate.

TODO: 

- [x] fix frame benchmarking template. Can we detect the umbrella crate
in there and have an `if else`? cc @ggwpez
- [x] Migrate benchmarking to v2 @re-gius a good candidate for you, you
can open a PR against my branch.
- [x] tracking issue with follow-ups

---------

Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
Co-authored-by: Giuseppe Re <giuseppe.re@parity.io>
Co-authored-by: Dónal Murray <donal.murray@parity.io>
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Migrate pallet-vesting benchmark to v2 (#6254)

Part of:

- #6202.

* Migrate pallet-timestamp benchmark to v2 (#6258)

Part of:

- #6202

---------

Co-authored-by: Dónal Murray <donalm@seadanda.dev>

* [Identity] Decouple usernames from identities (#5554)

This PR refactors `pallet-identity` to decouple usernames from
identities.

Main changes in this PR:
- Separate usernames from identities in storage, allowing for correct
deposit accounting
- Introduce the option for username authorities to put up a deposit to
issue a username
- Allow authorities to remove usernames by declaring the intent to do
so, then removing the username after the grace period expires
- Refactor the authority storage to be keyed by suffix rather than owner
account.
- Introduce the concept of a system provider for a username, different
from a governance allocation, allowing for usernames set by the system
and not a specific authority
- Implement multi-block migration to enable all of the changes described
above

---------

Signed-off-by: georgepisaltu <george.pisaltu@parity.io>
Co-authored-by: Ankan <10196091+Ank4n@users.noreply.github.com>

* pallet-revive: Use custom target to build test fixtures (#6266)

This removes the need to use a custom toolchain to build the contract
test fixtures. Instead, we supply a custom target and use the currently
in use upstream toolchain.

---------

Co-authored-by: Jan Bujak <jan@parity.io>
Co-authored-by: Cyrill Leutwiler <cyrill@parity.io>
Co-authored-by: command-bot <>

* Fix review in #6258 (#6275)

Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>

* Refactor `pallet-grandpa` to use `v2` benchmarks (#6073)

# Description

This PR moves the `pallet-grandpa` to the `v2` of `frame_benchmarking`.
I submitted PR #6025 as an external contributor from my own fork, so I
made this one from within this repo to see how the process would change.

## Integration

N/A

## Review Notes

Same as #6025, straightforward.

---------

Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>

* [pallet-revive] rpc server add docker file (#6278)

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
```

---------

Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Alexander Theißen <alex.theissen@me.com>

* Bump a timeout in zombienet coretime smoke test (#6268)

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 https://github.com/paritytech/polkadot-sdk/issues/6226

---------

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Migrate pallet-utility to benchmark v2 (#6276)

Part of:

- #6202.

---------

Co-authored-by: Dónal Murray <donalm@seadanda.dev>

* [ci] Add publish docker for eth-rpc (#6286)

close https://github.com/paritytech/ci_cd/issues/1073

* Add overhead benchmark to frame-omni-bencher (#5891)

# Benchmark Overhead Command for Parachains

This implements the `benchmark overhead` command for parachains. Full
context is available at:
https://github.com/paritytech/polkadot-sdk/issues/5303. Previous attempt
was this https://github.com/paritytech/polkadot-sdk/pull/5283, but here
we have integration into frame-omni-bencher and improved tooling.

## Changes Overview

Users are now able to use `frame-omni-bencher` to generate
`extrinsic_weight.rs` and `block_weight.rs` files for their runtime. The
core logic for generating these remains untouched; this PR provides
mostly machinery to make it work for parachains at all.

Similar to the pallet benchmarks, we gain the option to benchmark based
on just a runtime:

```
frame-omni-bencher v1 benchmark overhead --runtime {{runtime}}
```

or with a spec:

```
frame-omni-bencher v1 benchmark overhead --chain {{spec}} --genesis-builder spec
```

In this case, the genesis state is generated from the runtime presets.
However, it is also possible to use `--chain` and genesis builder `spec`
to generate the genesis state from the chain spec.

Additionally, we use metadata to perform some checks based on the
pallets the runtime exposes:

- If we see the `ParaInherent` pallet, we assume that we are dealing
with a relay chain. This means that we don't need proof recording during
import (since there is no storage weight).
- If we detect the `ParachainSystem` pallet, we assume that we are
dealing with a parachain and take corresponding actions like patching a
para id into the genesis state.

On the inherent side, I am currently supplying the standard inherents
every parachain needs.

In the current state, `frame-omni-bencher` supports all system chains.
In follow-up PRs, we could add additional inherents to increase
compatibility.

Since we are building a block during the benchmark, we also need to
build an extrinsic. By default, I am leveraging subxt to build the xt
dynamically. If a chain is not compatible with the `SubstrateConfig`
that comes with `subxt`, it can provide a custom extrinsic builder to
benchmarking-cli. This requires either a custom bencher implementation
or an integration into the parachains node.

Also cumulus-test-runtime has been migrated to provide genesis configs.

## Chain Compatibility
The current version here is compatible with the system chains and common
substrate chains. The way to go for others would be to customize the
frame-omni-bencher by providing a custom extrinsicbuilder. I did an
example implementation that works for mythical:
https://github.com/skunert/mythical-bencher

## Follow-Ups
- After #6040 is finished, we should integrate this here to make the
tooling truly useful. In the current form, the state is fairly small and
not representative.

## How to Review
I recommend starting from
[here](https://github.com/paritytech/polkadot-sdk/pull/5891/files#diff-50830ff756b3ac3403b7739d66c9e3a5185dbea550669ca71b28d19c7a2a54ecR264),
this method is the main entry point for omni-bencher and `polkadot`
binary.

TBD:
- [x] PRDoc

---------

Co-authored-by: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com>

* [pallet-revive] code size API (#6260)

This PR implements the contract API to query the code size of a given
address.

---------

Signed-off-by: Cyrill Leutwiler <bigcyrill@hotmail.com>
Signed-off-by: xermicus <cyrill@parity.io>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: command-bot <>
Co-authored-by: PG Herveou <pgherveou@gmail.com>

* Publish `polkadot-omni-node` binary (#6057)

Closes https://github.com/paritytech/polkadot-sdk/issues/5566

Publish the `polkadot-omni-node` binary

This is a best effort. I'm not very familiar with the release /
publishing process and also not sure how to test this.
@paritytech/release-engineering can you take a look on this PR please ?

---------

Co-authored-by: EgorPopelyaev <egor@parity.io>

* [pallet-revive] implement the block hash API (#6246)

- Bound T::Hash to H256
- Implement the block hash API

---------

Signed-off-by: xermicus <cyrill@parity.io>
Signed-off-by: Cyrill Leutwiler <bigcyrill@hotmail.com>
Co-authored-by: command-bot <>
Co-authored-by: GitHub Action <action@github.com>

* [pallet-revive] Add metrics to eth-rpc (#6288)

Add metrics for eth-rpc

---------

Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Alexander Theißen <alex.theissen@me.com>

* Remove `riscv` feature flag (#6305)

Since https://github.com/paritytech/polkadot-sdk/pull/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.

---------

Co-authored-by: GitHub Action <action@github.com>

* `candidate-validation`: RFC103 implementation (#5847)

Part of https://github.com/paritytech/polkadot-sdk/issues/5047
On top of https://github.com/paritytech/polkadot-sdk/pull/5679

---------

Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>
Co-authored-by: GitHub Action <action@github.com>

* Update Treasury to Support Relay Chain Block Number Provider (#3970)

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.

---------

Co-authored-by: Bastian Köcher <git@kchr.de>
Co-authored-by: Muharem <ismailov.m.h@gmail.com>

* collation-generation: use v2 receipts (#5908)

Part of https://github.com/paritytech/polkadot-sdk/issues/5047

Plus some cleanups

---------

Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>
Co-authored-by: Andrei Sandu <andrei-mihail@parity.io>
Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com>
Co-authored-by: GitHub Action <action@github.com>

* [eth-rpc] Fixes (#6317)

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

---------

Co-authored-by: GitHub Action <action@github.com>

* Refactor pallet `claims` (#6318)

- [x] Removing `without_storage_info` and adding bounds on the stored
types for pallet `claims` - issue
https://github.com/paritytech/polkadot-sdk/issues/6289
- [x] Migrating to benchmarking V2 -
https://gi…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
I2-bug The node fails to follow expected behavior. T1-FRAME This PR/Issue is related to core FRAME, the framework.
Projects
Status: To Do
Status: backlog
Development

Successfully merging a pull request may close this issue.