From 2f588b596d86b9e9545fa648d88b1ef024c58499 Mon Sep 17 00:00:00 2001
From: Serban Iorga <serban@parity.io>
Date: Fri, 19 Jan 2024 10:09:45 +0100
Subject: [PATCH] [polkadot-staging] Backport polkadot-sdk changes + update
 refs (#2798)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Fix clippy lints behind feature gates and add new CI step all features (#2569)

Many clippy lints usually enforced by `-Dcomplexity` and `-Dcorrectness`
are not caught by CI as they are gated by `features`, like
`runtime-benchmarks`, while the clippy CI job runs with only the default
features for all targets.

This PR also adds a CI step to run clippy with `--all-features` to
ensure the code quality is maintained behind feature gates from now on.

To improve local development, clippy lints are downgraded to warnings,
but they still will result in an error at CI due to the `-Dwarnings`
rustflag.

---------

Co-authored-by: Liam Aharon <liam.aharon@hotmail.com>

* Cleanup bridges tests: with-grandpa-chain case (#2763)

related to
https://github.com/paritytech/parity-bridges-common/issues/2739

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

* Adds Snowbridge to Rococo runtime (#2522)

# Description

Adds Snowbridge to the Rococo bridge hub runtime. Includes config
changes required in Rococo asset hub.

---------

Co-authored-by: Alistair Singh <alistair.singh7@gmail.com>
Co-authored-by: ron <yrong1997@gmail.com>
Co-authored-by: Vincent Geddes <vincent.geddes@hey.com>
Co-authored-by: claravanstaden <Cats 4 life!>

* Bump the known_good_semver group with 4 updates (#2845)

Bumps the known_good_semver group with 4 updates:
[serde](https://github.com/serde-rs/serde),
[serde_json](https://github.com/serde-rs/json),
[clap](https://github.com/clap-rs/clap) and
[serde_yaml](https://github.com/dtolnay/serde-yaml).

Updates `serde` from 1.0.193 to 1.0.194
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/serde-rs/serde/releases">serde's
releases</a>.</em></p>
<blockquote>
<h2>v1.0.194</h2>
<ul>
<li>Update proc-macro2 to fix caching issue when using a rustc-wrapper
such as sccache</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/serde-rs/serde/commit/d2d977a6c6dcff237ae956336d18b0c900c61aad"><code>d2d977a</code></a>
Release 1.0.194</li>
<li><a
href="https://github.com/serde-rs/serde/commit/a9a6ee9d7f2e3a3306ad7c7a8f21dcf369c6acb7"><code>a9a6ee9</code></a>
Pull in proc-macro2 sccache fix</li>
<li><a
href="https://github.com/serde-rs/serde/commit/28c5d215c11b66368b725f04cb92e49e4350bcdc"><code>28c5d21</code></a>
Merge pull request <a
href="https://redirect.github.com/serde-rs/serde/issues/2669">#2669</a>
from dtolnay/optionifletelse</li>
<li><a
href="https://github.com/serde-rs/serde/commit/3d6a789562579fb7ea783e0d7f35530914d8baca"><code>3d6a789</code></a>
Remove option_if_let_else clippy suppression</li>
<li><a
href="https://github.com/serde-rs/serde/commit/a0e68698e33fa928f1d9f208d68b17df9f8bb568"><code>a0e6869</code></a>
Work around doc_link_with_quotes pedantic clippy lint</li>
<li>See full diff in <a
href="https://github.com/serde-rs/serde/compare/v1.0.193...v1.0.194">compare
view</a></li>
</ul>
</details>
<br />

Updates `serde_json` from 1.0.108 to 1.0.110
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/serde-rs/json/releases">serde_json's
releases</a>.</em></p>
<blockquote>
<h2>v1.0.109</h2>
<ul>
<li>Documentation improvements</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/serde-rs/json/commit/df5cf215b70fb6341b255e7c0a210c06f64c0669"><code>df5cf21</code></a>
Release 1.0.110</li>
<li><a
href="https://github.com/serde-rs/json/commit/c35856a93c37b48b3d6efc4fec8e05554dd3f9d5"><code>c35856a</code></a>
Pull in proc-macro2 sccache fix</li>
<li><a
href="https://github.com/serde-rs/json/commit/f88bf1fccb05aa4de129675de44eb6aaf3fec0a0"><code>f88bf1f</code></a>
Release 1.0.109</li>
<li><a
href="https://github.com/serde-rs/json/commit/bb62c73ecef901e689b0a7a67ed613a32975520c"><code>bb62c73</code></a>
Merge pull request <a
href="https://redirect.github.com/serde-rs/json/issues/1097">#1097</a>
from serde-rs/doccfg</li>
<li><a
href="https://github.com/serde-rs/json/commit/df36d109fd9f9cdd22a874c0177cafec12237f95"><code>df36d10</code></a>
Restore doc cfg on re-exports</li>
<li><a
href="https://github.com/serde-rs/json/commit/c3670913423329c166add9d85ecdfc3e3da21e7a"><code>c367091</code></a>
Merge pull request <a
href="https://redirect.github.com/serde-rs/json/issues/1095">#1095</a>
from dtolnay/hashtest</li>
<li><a
href="https://github.com/serde-rs/json/commit/b328ee7df4dd772922f084600aa7cea39218b694"><code>b328ee7</code></a>
Eliminate hash closure in favor of calling hash_one directly</li>
<li><a
href="https://github.com/serde-rs/json/commit/b9bcbad3c094042f79f1a45189ec0edbb8f9f322"><code>b9bcbad</code></a>
Use BuildHasher::hash_one</li>
<li><a
href="https://github.com/serde-rs/json/commit/7ff6c9e30c2ecc2cdcf089ed86c7ccfe7a41721c"><code>7ff6c9e</code></a>
Use random hasher state for number hashing test</li>
<li><a
href="https://github.com/serde-rs/json/commit/fe031cd1de4dde5b47e0f18934632b41bd18b48d"><code>fe031cd</code></a>
Delete trace_macros! functionality from test</li>
<li>Additional commits viewable in <a
href="https://github.com/serde-rs/json/compare/v1.0.108...v1.0.110">compare
view</a></li>
</ul>
</details>
<br />

Updates `clap` from 4.4.11 to 4.4.12
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/releases">clap's
releases</a>.</em></p>
<blockquote>
<h2>v4.4.12</h2>
<h2>[4.4.12] - 2023-12-28</h2>
<h3>Performance</h3>
<ul>
<li>Only ask <code>TypedValueParser</code> for possible values if
needed</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's
changelog</a>.</em></p>
<blockquote>
<h2>[4.4.12] - 2023-12-28</h2>
<h3>Performance</h3>
<ul>
<li>Only ask <code>TypedValueParser</code> for possible values if
needed</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/clap-rs/clap/commit/6d601e6f312857d78f47741268f1748840484d4a"><code>6d601e6</code></a>
chore: Release</li>
<li><a
href="https://github.com/clap-rs/clap/commit/048e7f0fbc4f8108894e4307af768c8d332a0576"><code>048e7f0</code></a>
docs: Update changelog</li>
<li><a
href="https://github.com/clap-rs/clap/commit/53f5b820988c1c03f0d2696fc144857ad461edc1"><code>53f5b82</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/5267">#5267</a>
from vermiculus/sa/avoid-pv-expansion-in-help</li>
<li><a
href="https://github.com/clap-rs/clap/commit/05cd057978db743a65fb5fde33213af752d064e7"><code>05cd057</code></a>
perf: Avoid retrieving possible_values unless used</li>
<li><a
href="https://github.com/clap-rs/clap/commit/29208083b0598ba7d1b80e79821c0ba3eb2342ce"><code>2920808</code></a>
test: Update snapshots</li>
<li><a
href="https://github.com/clap-rs/clap/commit/28763ebb6d8714f6ca588bf477729040e0e760b0"><code>28763eb</code></a>
chore: Release</li>
<li><a
href="https://github.com/clap-rs/clap/commit/ace7bb5b4570b030f7c2d0fa91e0afaaac1b0030"><code>ace7bb5</code></a>
docs(complete): Update changelog</li>
<li><a
href="https://github.com/clap-rs/clap/commit/76beca4d4d42a817bbb578f23553c64ded2aea97"><code>76beca4</code></a>
docs(complete): Polish API reference for dynamic</li>
<li><a
href="https://github.com/clap-rs/clap/commit/3630e582d3ec59912b8e9369c38687695ddb1f43"><code>3630e58</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/5273">#5273</a>
from epage/docsrs</li>
<li><a
href="https://github.com/clap-rs/clap/commit/3724b9e2e4c2a2e69337b6d809949b246d3fef39"><code>3724b9e</code></a>
docs: Include more content on docs.rs</li>
<li>See full diff in <a
href="https://github.com/clap-rs/clap/compare/v4.4.11...v4.4.12">compare
view</a></li>
</ul>
</details>
<br />

Updates `serde_yaml` from 0.9.29 to 0.9.30
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/serde-yaml/releases">serde_yaml's
releases</a>.</em></p>
<blockquote>
<h2>0.9.30</h2>
<ul>
<li>Update proc-macro2 to fix caching issue when using a rustc-wrapper
such as sccache</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/dtolnay/serde-yaml/commit/09ee25156f608f95150b27edd120bd5471db3c64"><code>09ee251</code></a>
Release 0.9.30</li>
<li><a
href="https://github.com/dtolnay/serde-yaml/commit/caea939ece85ab54ac41de0672d683905f1e406a"><code>caea939</code></a>
Pull in proc-macro2 sccache fix</li>
<li><a
href="https://github.com/dtolnay/serde-yaml/commit/d255918c141fd72d01f169bb5aa0152234981699"><code>d255918</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/serde-yaml/issues/403">#403</a>
from dtolnay/optionifletelse</li>
<li><a
href="https://github.com/dtolnay/serde-yaml/commit/8cfeedd766f83dab24d03b9fb11b72886a247425"><code>8cfeedd</code></a>
Remove option_if_let_else clippy suppression</li>
<li>See full diff in <a
href="https://github.com/dtolnay/serde-yaml/compare/0.9.29...0.9.30">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>

* Fix clippy warnings (#2861)

Fix some issues reported by clippy

* Bump the known_good_semver group with 4 updates (#2865)

Bumps the known_good_semver group with 4 updates:
[serde](https://github.com/serde-rs/serde),
[serde_json](https://github.com/serde-rs/json),
[clap](https://github.com/clap-rs/clap) and
[syn](https://github.com/dtolnay/syn).

Updates `serde` from 1.0.194 to 1.0.195
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/serde-rs/serde/releases">serde's
releases</a>.</em></p>
<blockquote>
<h2>v1.0.195</h2>
<ul>
<li>Prevent remote definitions of tuple struct or tuple variant from
triggering dead_code warning (<a
href="https://redirect.github.com/serde-rs/serde/issues/2671">#2671</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/serde-rs/serde/commit/03eec42c3313b36da416be1486e9ecac345784d5"><code>03eec42</code></a>
Release 1.0.195</li>
<li><a
href="https://github.com/serde-rs/serde/commit/196f311ae2fd8ad94fe38a57830419859a4d3dbb"><code>196f311</code></a>
Merge pull request <a
href="https://redirect.github.com/serde-rs/serde/issues/2671">#2671</a>
from dtolnay/deadremote</li>
<li><a
href="https://github.com/serde-rs/serde/commit/38d9e0b2091e9b6150486c2c37367819b86bcc39"><code>38d9e0b</code></a>
Revert &quot;Add FIXME to fix dead_code warning when using
serde(remote)&quot;</li>
<li><a
href="https://github.com/serde-rs/serde/commit/6502b3131697eff6420786ad71f87f29cfff3a13"><code>6502b31</code></a>
Fix new dead_code warning in tuple struct and tuple variant remote
defs</li>
<li><a
href="https://github.com/serde-rs/serde/commit/6f1a8c3115c8d2502178c25d610fbaee2e82c46b"><code>6f1a8c3</code></a>
Add FIXME to fix dead_code warning when using serde(remote)</li>
<li><a
href="https://github.com/serde-rs/serde/commit/d883c94cc9fe72d0512dc7f4def7191a401595c9"><code>d883c94</code></a>
Work around dead_code warning in tests</li>
<li><a
href="https://github.com/serde-rs/serde/commit/961fa59a7469c5b5e323b9723323df412048d60d"><code>961fa59</code></a>
Merge pull request <a
href="https://redirect.github.com/serde-rs/serde/issues/2670">#2670</a>
from serde-rs/exhaustive</li>
<li><a
href="https://github.com/serde-rs/serde/commit/8bc71def551df190e6817d3311e5c76f751f53e6"><code>8bc71de</code></a>
Fill in omitted patterns for GenericArguments match</li>
<li><a
href="https://github.com/serde-rs/serde/commit/7c65a9dc0eab2d4d829b258a7b3549351bbe8dcd"><code>7c65a9d</code></a>
Pick up changes to non_exhaustive_omitted_patterns lint</li>
<li>See full diff in <a
href="https://github.com/serde-rs/serde/compare/v1.0.194...v1.0.195">compare
view</a></li>
</ul>
</details>
<br />

Updates `serde_json` from 1.0.110 to 1.0.111
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/serde-rs/json/releases">serde_json's
releases</a>.</em></p>
<blockquote>
<h2>v1.0.111</h2>
<ul>
<li>Improve floating point parsing performance on loongarch64 (<a
href="https://redirect.github.com/serde-rs/json/issues/1100">#1100</a>,
thanks <a
href="https://github.com/heiher"><code>@​heiher</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/serde-rs/json/commit/0131ac68212e8094bd14ee618587d731b4f9a68b"><code>0131ac6</code></a>
Release 1.0.111</li>
<li><a
href="https://github.com/serde-rs/json/commit/96ecfadd3f7dd6366a2d07a098e228d15df93cb4"><code>96ecfad</code></a>
Merge pull request <a
href="https://redirect.github.com/serde-rs/json/issues/1100">#1100</a>
from heiher/limb-64-la64</li>
<li><a
href="https://github.com/serde-rs/json/commit/c80dbaf8ff5902ca670e0a48bbe495065b9314f5"><code>c80dbaf</code></a>
Set limb width to 64 for loongarch64</li>
<li>See full diff in <a
href="https://github.com/serde-rs/json/compare/v1.0.110...v1.0.111">compare
view</a></li>
</ul>
</details>
<br />

Updates `clap` from 4.4.12 to 4.4.13
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/releases">clap's
releases</a>.</em></p>
<blockquote>
<h2>v4.4.13</h2>
<h2>[4.4.13] - 2024-01-04</h2>
<h3>Documentation</h3>
<ul>
<li>Fix link to structopt migration guide</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's
changelog</a>.</em></p>
<blockquote>
<h2>[4.4.13] - 2024-01-04</h2>
<h3>Documentation</h3>
<ul>
<li>Fix link to structopt migration guide</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/clap-rs/clap/commit/2ab48b295c2463ce8c141a9868095b811ccf3b99"><code>2ab48b2</code></a>
chore: Release</li>
<li><a
href="https://github.com/clap-rs/clap/commit/7a06a8cd619db704c6d826bf752eae3b86ce23a8"><code>7a06a8c</code></a>
docs: Update changelog</li>
<li><a
href="https://github.com/clap-rs/clap/commit/cca190efedf40f48147a3a4a777a9cc17728abdf"><code>cca190e</code></a>
docs: Correct link to StructOpt migration guide</li>
<li><a
href="https://github.com/clap-rs/clap/commit/5c31f453c1a9f46109db8e0a47ed212748c0556c"><code>5c31f45</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/5281">#5281</a>
from Manishearth/safety-docs</li>
<li><a
href="https://github.com/clap-rs/clap/commit/ddae7e6f411c4c87294212152b8d9beea16637e7"><code>ddae7e6</code></a>
Correct safety docs</li>
<li><a
href="https://github.com/clap-rs/clap/commit/48d28aa689bfd0fb44ec025244b30ba261e2515a"><code>48d28aa</code></a>
chore: Release</li>
<li><a
href="https://github.com/clap-rs/clap/commit/748ce18cc2ccc3f7c07fa8b7c5b6f90ed9242b72"><code>748ce18</code></a>
docs: Update changelog</li>
<li><a
href="https://github.com/clap-rs/clap/commit/adbe6ec4cb6a617070c41927a389d0bea7b30936"><code>adbe6ec</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/5278">#5278</a>
from henry-hsieh/fix-nosort</li>
<li><a
href="https://github.com/clap-rs/clap/commit/2b48858ba84c62e9af97bee4734d70530254cd8a"><code>2b48858</code></a>
fix: Skip nosort option below bash 4.4</li>
<li><a
href="https://github.com/clap-rs/clap/commit/777b744102cde324dc75534ef043efc15a9f40be"><code>777b744</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/5277">#5277</a>
from clap-rs/renovate/actions-setup-python-5.x</li>
<li>Additional commits viewable in <a
href="https://github.com/clap-rs/clap/compare/v4.4.12...v4.4.13">compare
view</a></li>
</ul>
</details>
<br />

Updates `syn` from 2.0.47 to 2.0.48
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/syn/releases">syn's
releases</a>.</em></p>
<blockquote>
<h2>2.0.48</h2>
<ul>
<li>Improve error message on unexpected token after <code>else</code>
(<a
href="https://redirect.github.com/dtolnay/syn/issues/1578">#1578</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/dtolnay/syn/commit/5e16fc24e68b16a381cb7ef22455dba9db143083"><code>5e16fc2</code></a>
Release 2.0.48</li>
<li><a
href="https://github.com/dtolnay/syn/commit/dc40084b15ab4a443179fc39cbadac6452408838"><code>dc40084</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/syn/issues/1578">#1578</a>
from dtolnay/elseblock</li>
<li><a
href="https://github.com/dtolnay/syn/commit/82fcefce69d36e78301936c5af91f005d6a24357"><code>82fcefc</code></a>
Fix error message on unexpected token after 'else'</li>
<li><a
href="https://github.com/dtolnay/syn/commit/e8a5c68ad45194e575a923f6b1e08f1817196331"><code>e8a5c68</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/syn/issues/1576">#1576</a>
from dtolnay/exhaustive</li>
<li><a
href="https://github.com/dtolnay/syn/commit/97b1df6d935cb4801f4090782304577c8574d024"><code>97b1df6</code></a>
Pick up changes to non_exhaustive_omitted_patterns lint</li>
<li>See full diff in <a
href="https://github.com/dtolnay/syn/compare/2.0.47...2.0.48">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>

* Snowbridge Rococo deployment updates (#2792)

- Includes the introduction of the `fast-runtime` feature, which cleans
up our features
- Updates beacon client fork versions config to Sepolia's versions
- Cleanup of AgentIdOf

---------

Co-authored-by: Ron <yrong1997@gmail.com>
Co-authored-by: claravanstaden <Cats 4 life!>

* Update Snowbridge versions and prep for publishing (#2894)

- updates snowbridge crates to `0.9.0`
- updates Cargo.toml files in preparation for publishing to crates.io
- adds Kusama and Polkadot Snowbridge runtime config crates
- moves runtime tests from the Snowbridge subtree into the bridge hub
tests dir

---------

Co-authored-by: claravanstaden <Cats 4 life!>
Co-authored-by: Ron <yrong1997@gmail.com>

* Run bridges zombienet tests on CI (#2439)

Brridges zombienet tests are non-standard - zombienet currently missing
multiple relay chains support (see e.g.
https://github.com/paritytech/zombienet/pull/796), so we need to go live
with two relay networks, their parachains + custom test runner (which
e.g. doesn't shutdown net when its tests are finished and instead waits
for both networks tests to complete). So we are stuck with native
zombienet provider => this PR is an attempt to gather everything in a
single docker container and run tests there ~Draft, because it is far
from finishing - what I want now is to see how it works on CI~

* XCMv4 (#1230)

# Note for reviewer

Most changes are just syntax changes necessary for the new version.
Most important files should be the ones under the `xcm` folder.

# Description

Added XCMv4.

## Removed `Multi` prefix
The following types have been renamed:
- MultiLocation -> Location
- MultiAsset -> Asset
- MultiAssets -> Assets
- InteriorMultiLocation -> InteriorLocation
- MultiAssetFilter -> AssetFilter
- VersionedMultiAsset -> VersionedAsset
- WildMultiAsset -> WildAsset
- VersionedMultiLocation -> VersionedLocation

In order to fix a name conflict, the `Assets` in `xcm-executor` were
renamed to `HoldingAssets`, as they represent assets in holding.

## Removed `Abstract` asset id

It was not being used anywhere and this simplifies the code.

Now assets are just constructed as follows:

```rust
let asset: Asset = (AssetId(Location::new(1, Here)), 100u128).into();
```

No need for specifying `Concrete` anymore.

## Outcome is now a named fields struct

Instead of

```rust
pub enum Outcome {
  Complete(Weight),
  Incomplete(Weight, Error),
  Error(Error),
}
```

we now have

```rust
pub enum Outcome {
  Complete { used: Weight },
  Incomplete { used: Weight, error: Error },
  Error { error: Error },
}
```

## Added Reanchorable trait

Now both locations and assets implement this trait, making it easier to
reanchor both.

## New syntax for building locations and junctions

Now junctions are built using the following methods:

```rust
let location = Location {
    parents: 1,
    interior: [Parachain(1000), PalletInstance(50), GeneralIndex(1984)].into()
};
```

or

```rust
let location = Location::new(1, [Parachain(1000), PalletInstance(50), GeneralIndex(1984)]);
```

And they are matched like so:

```rust
match location.unpack() {
  (1, [Parachain(id)]) => ...
  (0, Here) => ...,
  (1, [_]) => ...,
}
```

This syntax is mandatory in v4, and has been also implemented for v2 and
v3 for easier migration.

This was needed to make all sizes smaller.

# TODO
- [x] Scaffold v4
- [x] Port github.com/paritytech/polkadot/pull/7236
- [x] Remove `Multi` prefix
- [x] Remove `Abstract` asset id

---------

Co-authored-by: command-bot <>
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>

* Fix typos (#2983)

* Update polkadot-sdk refs

* Update deprecated struct

* Remove snowbridge folder

* Westend/Rococo Asset Hub: pay xcm fees with sufficient assets (#2978)

Set up the `TakeFirstAssetTrader` trader for Westend and Rococo Asset
Hubs to cover XCM fees with sufficient assets.

This PR reintroduces previously
[removed](https://github.com/paritytech/polkadot-sdk/pull/1845) trader
setups, as it was decided to keep both traders, `TakeFirstAssetTrader`
and `SwapFirstAssetTrader`, during the transition period.

---------

Co-authored-by: Svyatoslav Nikolsky <svyatonik@gmail.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Dónal Murray <donal.murray@parity.io>
Co-authored-by: Liam Aharon <liam.aharon@hotmail.com>
Co-authored-by: Svyatoslav Nikolsky <svyatonik@gmail.com>
Co-authored-by: Branislav Kontur <bkontur@gmail.com>
Co-authored-by: Clara van Staden <claravanstaden64@gmail.com>
Co-authored-by: Alistair Singh <alistair.singh7@gmail.com>
Co-authored-by: ron <yrong1997@gmail.com>
Co-authored-by: Vincent Geddes <vincent.geddes@hey.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>
Co-authored-by: Francisco Aguirre <franciscoaguirreperez@gmail.com>
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
Co-authored-by: cristiantroy <154241727+cristiantroy@users.noreply.github.com>
Co-authored-by: Muharem <ismailov.m.h@gmail.com>
---
 .../src/messages_benchmarking.rs              | 12 +++----
 .../src/messages_xcm_extension.rs             | 22 ++++++-------
 bridges/modules/parachains/src/lib.rs         |  2 +-
 bridges/modules/relayers/src/benchmarking.rs  |  4 +--
 .../xcm-bridge-hub-router/src/benchmarking.rs |  6 ++--
 .../modules/xcm-bridge-hub-router/src/lib.rs  | 33 +++++++------------
 .../modules/xcm-bridge-hub-router/src/mock.rs | 18 +++++-----
 .../modules/xcm-bridge-hub/src/exporter.rs    | 12 +++----
 bridges/modules/xcm-bridge-hub/src/lib.rs     | 14 ++++----
 bridges/modules/xcm-bridge-hub/src/mock.rs    | 17 ++++------
 bridges/primitives/runtime/src/chain.rs       |  2 +-
 bridges/relays/client-substrate/src/calls.rs  |  4 +--
 12 files changed, 67 insertions(+), 79 deletions(-)

diff --git a/bridges/bin/runtime-common/src/messages_benchmarking.rs b/bridges/bin/runtime-common/src/messages_benchmarking.rs
index e7e7891461b..0c7a9ad1a83 100644
--- a/bridges/bin/runtime-common/src/messages_benchmarking.rs
+++ b/bridges/bin/runtime-common/src/messages_benchmarking.rs
@@ -38,7 +38,7 @@ use frame_support::weights::Weight;
 use pallet_bridge_messages::benchmarking::{MessageDeliveryProofParams, MessageProofParams};
 use sp_runtime::traits::{Header, Zero};
 use sp_std::prelude::*;
-use xcm::v3::prelude::*;
+use xcm::latest::prelude::*;
 
 /// Prepare inbound bridge message according to given message proof parameters.
 fn prepare_inbound_message(
@@ -266,19 +266,19 @@ where
 /// Returns callback which generates `BridgeMessage` from Polkadot XCM builder based on
 /// `expected_message_size` for benchmark.
 pub fn generate_xcm_builder_bridge_message_sample(
-	destination: InteriorMultiLocation,
+	destination: InteriorLocation,
 ) -> impl Fn(usize) -> MessagePayload {
 	move |expected_message_size| -> MessagePayload {
 		// For XCM bridge hubs, it is the message that
 		// will be pushed further to some XCM queue (XCMP/UMP)
-		let location = xcm::VersionedInteriorMultiLocation::V3(destination);
+		let location = xcm::VersionedInteriorLocation::V4(destination.clone());
 		let location_encoded_size = location.encoded_size();
 
 		// we don't need to be super-precise with `expected_size` here
 		let xcm_size = expected_message_size.saturating_sub(location_encoded_size);
 		let xcm_data_size = xcm_size.saturating_sub(
 			// minus empty instruction size
-			xcm::v3::Instruction::<()>::ExpectPallet {
+			Instruction::<()>::ExpectPallet {
 				index: 0,
 				name: vec![],
 				module_name: vec![],
@@ -294,8 +294,8 @@ pub fn generate_xcm_builder_bridge_message_sample(
 			expected_message_size, location_encoded_size, xcm_size, xcm_data_size,
 		);
 
-		let xcm = xcm::VersionedXcm::<()>::V3(
-			vec![xcm::v3::Instruction::<()>::ExpectPallet {
+		let xcm = xcm::VersionedXcm::<()>::V4(
+			vec![Instruction::<()>::ExpectPallet {
 				index: 0,
 				name: vec![42; xcm_data_size],
 				module_name: vec![],
diff --git a/bridges/bin/runtime-common/src/messages_xcm_extension.rs b/bridges/bin/runtime-common/src/messages_xcm_extension.rs
index 4892297a3df..e3da6155f08 100644
--- a/bridges/bin/runtime-common/src/messages_xcm_extension.rs
+++ b/bridges/bin/runtime-common/src/messages_xcm_extension.rs
@@ -126,14 +126,14 @@ impl<
 #[cfg_attr(feature = "std", derive(Debug, Eq, PartialEq))]
 pub struct SenderAndLane {
 	/// Sending chain relative location.
-	pub location: MultiLocation,
+	pub location: Location,
 	/// Message lane, used by the sending chain.
 	pub lane: LaneId,
 }
 
 impl SenderAndLane {
 	/// Create new object using provided location and lane.
-	pub fn new(location: MultiLocation, lane: LaneId) -> Self {
+	pub fn new(location: Location, lane: LaneId) -> Self {
 		SenderAndLane { location, lane }
 	}
 }
@@ -171,7 +171,7 @@ pub struct XcmBlobHaulerAdapter<XcmBlobHauler, Lanes>(
 
 impl<
 		H: XcmBlobHauler,
-		Lanes: Get<sp_std::vec::Vec<(SenderAndLane, (NetworkId, InteriorMultiLocation))>>,
+		Lanes: Get<sp_std::vec::Vec<(SenderAndLane, (NetworkId, InteriorLocation))>>,
 	> OnMessagesDelivered for XcmBlobHaulerAdapter<H, Lanes>
 {
 	fn on_messages_delivered(lane: LaneId, enqueued_messages: MessageNonce) {
@@ -291,7 +291,7 @@ impl<H: XcmBlobHauler> LocalXcmQueueManager<H> {
 	/// Send congested signal to the `sending_chain_location`.
 	fn send_congested_signal(sender_and_lane: &SenderAndLane) -> Result<(), SendError> {
 		if let Some(msg) = H::CongestedMessage::get() {
-			send_xcm::<H::ToSourceChainSender>(sender_and_lane.location, msg)?;
+			send_xcm::<H::ToSourceChainSender>(sender_and_lane.location.clone(), msg)?;
 			OutboundLanesCongestedSignals::<H::Runtime, H::MessagesInstance>::insert(
 				sender_and_lane.lane,
 				true,
@@ -303,7 +303,7 @@ impl<H: XcmBlobHauler> LocalXcmQueueManager<H> {
 	/// Send `uncongested` signal to the `sending_chain_location`.
 	fn send_uncongested_signal(sender_and_lane: &SenderAndLane) -> Result<(), SendError> {
 		if let Some(msg) = H::UncongestedMessage::get() {
-			send_xcm::<H::ToSourceChainSender>(sender_and_lane.location, msg)?;
+			send_xcm::<H::ToSourceChainSender>(sender_and_lane.location.clone(), msg)?;
 			OutboundLanesCongestedSignals::<H::Runtime, H::MessagesInstance>::remove(
 				sender_and_lane.lane,
 			);
@@ -318,10 +318,10 @@ impl<H: XcmBlobHauler> LocalXcmQueueManager<H> {
 pub struct XcmVersionOfDestAndRemoteBridge<Version, RemoteBridge>(
 	sp_std::marker::PhantomData<(Version, RemoteBridge)>,
 );
-impl<Version: GetVersion, RemoteBridge: Get<MultiLocation>> GetVersion
+impl<Version: GetVersion, RemoteBridge: Get<Location>> GetVersion
 	for XcmVersionOfDestAndRemoteBridge<Version, RemoteBridge>
 {
-	fn get_version_for(dest: &MultiLocation) -> Option<XcmVersion> {
+	fn get_version_for(dest: &Location) -> Option<XcmVersion> {
 		let dest_version = Version::get_version_for(dest);
 		let bridge_hub_version = Version::get_version_for(&RemoteBridge::get());
 
@@ -345,11 +345,11 @@ mod tests {
 
 	parameter_types! {
 		pub TestSenderAndLane: SenderAndLane = SenderAndLane {
-			location: MultiLocation::new(1, X1(Parachain(1000))),
+			location: Location::new(1, [Parachain(1000)]),
 			lane: TEST_LANE_ID,
 		};
-		pub TestLanes: sp_std::vec::Vec<(SenderAndLane, (NetworkId, InteriorMultiLocation))> = sp_std::vec![
-			(TestSenderAndLane::get(), (NetworkId::ByGenesis([0; 32]), InteriorMultiLocation::Here))
+		pub TestLanes: sp_std::vec::Vec<(SenderAndLane, (NetworkId, InteriorLocation))> = sp_std::vec![
+			(TestSenderAndLane::get(), (NetworkId::ByGenesis([0; 32]), InteriorLocation::Here))
 		];
 		pub DummyXcmMessage: Xcm<()> = Xcm::new();
 	}
@@ -366,7 +366,7 @@ mod tests {
 		type Ticket = ();
 
 		fn validate(
-			_destination: &mut Option<MultiLocation>,
+			_destination: &mut Option<Location>,
 			_message: &mut Option<Xcm<()>>,
 		) -> SendResult<Self::Ticket> {
 			Ok(((), Default::default()))
diff --git a/bridges/modules/parachains/src/lib.rs b/bridges/modules/parachains/src/lib.rs
index 9adeacb0eb8..87c57e84622 100644
--- a/bridges/modules/parachains/src/lib.rs
+++ b/bridges/modules/parachains/src/lib.rs
@@ -1494,7 +1494,7 @@ pub(crate) mod tests {
 			);
 
 			// then if someone is pretending to provide updated head#10 of parachain#1 at relay
-			// block#30, and actualy provides it
+			// block#30, and actually provides it
 			//
 			// => we'll update value
 			proceed(30, state_root_10_at_30);
diff --git a/bridges/modules/relayers/src/benchmarking.rs b/bridges/modules/relayers/src/benchmarking.rs
index 2d74ab38f9d..00c3814a4c3 100644
--- a/bridges/modules/relayers/src/benchmarking.rs
+++ b/bridges/modules/relayers/src/benchmarking.rs
@@ -104,7 +104,7 @@ benchmarks! {
 		// create slash destination account
 		let lane = LaneId([0, 0, 0, 0]);
 		let slash_destination = RewardsAccountParams::new(lane, *b"test", RewardsAccountOwner::ThisChain);
-		T::prepare_rewards_account(slash_destination.clone(), Zero::zero());
+		T::prepare_rewards_account(slash_destination, Zero::zero());
 	}: {
 		crate::Pallet::<T>::slash_and_deregister(&relayer, slash_destination)
 	}
@@ -121,7 +121,7 @@ benchmarks! {
 		let account_params =
 			RewardsAccountParams::new(lane, *b"test", RewardsAccountOwner::ThisChain);
 	}: {
-		crate::Pallet::<T>::register_relayer_reward(account_params.clone(), &relayer, One::one());
+		crate::Pallet::<T>::register_relayer_reward(account_params, &relayer, One::one());
 	}
 	verify {
 		assert_eq!(RelayerRewards::<T>::get(relayer, &account_params), Some(One::one()));
diff --git a/bridges/modules/xcm-bridge-hub-router/src/benchmarking.rs b/bridges/modules/xcm-bridge-hub-router/src/benchmarking.rs
index 922e4bf94ba..c4f9f534c1a 100644
--- a/bridges/modules/xcm-bridge-hub-router/src/benchmarking.rs
+++ b/bridges/modules/xcm-bridge-hub-router/src/benchmarking.rs
@@ -37,10 +37,10 @@ pub trait Config<I: 'static>: crate::Config<I> {
 	/// Returns destination which is valid for this router instance.
 	/// (Needs to pass `T::Bridges`)
 	/// Make sure that `SendXcm` will pass.
-	fn ensure_bridged_target_destination() -> Result<MultiLocation, BenchmarkError> {
-		Ok(MultiLocation::new(
+	fn ensure_bridged_target_destination() -> Result<Location, BenchmarkError> {
+		Ok(Location::new(
 			Self::UniversalLocation::get().len() as u8,
-			X1(GlobalConsensus(Self::BridgedNetworkId::get().unwrap())),
+			[GlobalConsensus(Self::BridgedNetworkId::get().unwrap())],
 		))
 	}
 }
diff --git a/bridges/modules/xcm-bridge-hub-router/src/lib.rs b/bridges/modules/xcm-bridge-hub-router/src/lib.rs
index 229628aedcb..f219be78f9e 100644
--- a/bridges/modules/xcm-bridge-hub-router/src/lib.rs
+++ b/bridges/modules/xcm-bridge-hub-router/src/lib.rs
@@ -80,7 +80,7 @@ pub mod pallet {
 		type WeightInfo: WeightInfo;
 
 		/// Universal location of this runtime.
-		type UniversalLocation: Get<InteriorMultiLocation>;
+		type UniversalLocation: Get<InteriorLocation>;
 		/// The bridged network that this config is for if specified.
 		/// Also used for filtering `Bridges` by `BridgedNetworkId`.
 		/// If not specified, allows all networks pass through.
@@ -235,9 +235,9 @@ type ViaBridgeHubExporter<T, I> = SovereignPaidRemoteExporter<
 impl<T: Config<I>, I: 'static> ExporterFor for Pallet<T, I> {
 	fn exporter_for(
 		network: &NetworkId,
-		remote_location: &InteriorMultiLocation,
+		remote_location: &InteriorLocation,
 		message: &Xcm<()>,
-	) -> Option<(MultiLocation, Option<MultiAsset>)> {
+	) -> Option<(Location, Option<Asset>)> {
 		// ensure that the message is sent to the expected bridged network (if specified).
 		if let Some(bridged_network) = T::BridgedNetworkId::get() {
 			if *network != bridged_network {
@@ -268,7 +268,7 @@ impl<T: Config<I>, I: 'static> ExporterFor for Pallet<T, I> {
 		// take `base_fee` from `T::Brides`, but it has to be the same `T::FeeAsset`
 		let base_fee = match maybe_payment {
 			Some(payment) => match payment {
-				MultiAsset { fun: Fungible(amount), id } if id.eq(&T::FeeAsset::get()) => amount,
+				Asset { fun: Fungible(amount), id } if id.eq(&T::FeeAsset::get()) => amount,
 				invalid_asset => {
 					log::error!(
 						target: LOG_TARGET,
@@ -318,7 +318,7 @@ impl<T: Config<I>, I: 'static> SendXcm for Pallet<T, I> {
 	type Ticket = (u32, <T::ToBridgeHubSender as SendXcm>::Ticket);
 
 	fn validate(
-		dest: &mut Option<MultiLocation>,
+		dest: &mut Option<Location>,
 		xcm: &mut Option<Xcm<()>>,
 	) -> SendResult<Self::Ticket> {
 		// `dest` and `xcm` are required here
@@ -446,7 +446,7 @@ mod tests {
 		run_test(|| {
 			assert_eq!(
 				send_xcm::<XcmBridgeHubRouter>(
-					MultiLocation::new(2, X2(GlobalConsensus(Rococo), Parachain(1000))),
+					Location::new(2, [GlobalConsensus(Rococo), Parachain(1000)]),
 					vec![].into(),
 				),
 				Err(SendError::NotApplicable),
@@ -459,7 +459,7 @@ mod tests {
 		run_test(|| {
 			assert_eq!(
 				send_xcm::<XcmBridgeHubRouter>(
-					MultiLocation::new(2, X2(GlobalConsensus(Rococo), Parachain(1000))),
+					Location::new(2, [GlobalConsensus(Rococo), Parachain(1000)]),
 					vec![ClearOrigin; HARD_MESSAGE_SIZE_LIMIT as usize].into(),
 				),
 				Err(SendError::ExceedsMaxMessageSize),
@@ -483,14 +483,14 @@ mod tests {
 	#[test]
 	fn returns_proper_delivery_price() {
 		run_test(|| {
-			let dest = MultiLocation::new(2, X1(GlobalConsensus(BridgedNetworkId::get())));
+			let dest = Location::new(2, [GlobalConsensus(BridgedNetworkId::get())]);
 			let xcm: Xcm<()> = vec![ClearOrigin].into();
 			let msg_size = xcm.encoded_size();
 
 			// initially the base fee is used: `BASE_FEE + BYTE_FEE * msg_size + HRMP_FEE`
 			let expected_fee = BASE_FEE + BYTE_FEE * (msg_size as u128) + HRMP_FEE;
 			assert_eq!(
-				XcmBridgeHubRouter::validate(&mut Some(dest), &mut Some(xcm.clone()))
+				XcmBridgeHubRouter::validate(&mut Some(dest.clone()), &mut Some(xcm.clone()))
 					.unwrap()
 					.1
 					.get(0),
@@ -518,10 +518,7 @@ mod tests {
 		run_test(|| {
 			let old_bridge = XcmBridgeHubRouter::bridge();
 			assert_ok!(send_xcm::<XcmBridgeHubRouter>(
-				MultiLocation::new(
-					2,
-					X2(GlobalConsensus(BridgedNetworkId::get()), Parachain(1000))
-				),
+				Location::new(2, [GlobalConsensus(BridgedNetworkId::get()), Parachain(1000)]),
 				vec![ClearOrigin].into(),
 			)
 			.map(drop));
@@ -538,10 +535,7 @@ mod tests {
 
 			let old_bridge = XcmBridgeHubRouter::bridge();
 			assert_ok!(send_xcm::<XcmBridgeHubRouter>(
-				MultiLocation::new(
-					2,
-					X2(GlobalConsensus(BridgedNetworkId::get()), Parachain(1000))
-				),
+				Location::new(2, [GlobalConsensus(BridgedNetworkId::get()), Parachain(1000)]),
 				vec![ClearOrigin].into(),
 			)
 			.map(drop));
@@ -560,10 +554,7 @@ mod tests {
 
 			let old_bridge = XcmBridgeHubRouter::bridge();
 			assert_ok!(send_xcm::<XcmBridgeHubRouter>(
-				MultiLocation::new(
-					2,
-					X2(GlobalConsensus(BridgedNetworkId::get()), Parachain(1000))
-				),
+				Location::new(2, [GlobalConsensus(BridgedNetworkId::get()), Parachain(1000)]),
 				vec![ClearOrigin].into(),
 			)
 			.map(drop));
diff --git a/bridges/modules/xcm-bridge-hub-router/src/mock.rs b/bridges/modules/xcm-bridge-hub-router/src/mock.rs
index 9079f4b9c4c..6dbfba5f6fd 100644
--- a/bridges/modules/xcm-bridge-hub-router/src/mock.rs
+++ b/bridges/modules/xcm-bridge-hub-router/src/mock.rs
@@ -49,9 +49,9 @@ construct_runtime! {
 parameter_types! {
 	pub ThisNetworkId: NetworkId = Polkadot;
 	pub BridgedNetworkId: NetworkId = Kusama;
-	pub UniversalLocation: InteriorMultiLocation = X2(GlobalConsensus(ThisNetworkId::get()), Parachain(1000));
-	pub SiblingBridgeHubLocation: MultiLocation = ParentThen(X1(Parachain(1002))).into();
-	pub BridgeFeeAsset: AssetId = MultiLocation::parent().into();
+	pub UniversalLocation: InteriorLocation = [GlobalConsensus(ThisNetworkId::get()), Parachain(1000)].into();
+	pub SiblingBridgeHubLocation: Location = ParentThen([Parachain(1002)].into()).into();
+	pub BridgeFeeAsset: AssetId = Location::parent().into();
 	pub BridgeTable: Vec<NetworkExportTableItem>
 		= vec![
 			NetworkExportTableItem::new(
@@ -61,7 +61,7 @@ parameter_types! {
 				Some((BridgeFeeAsset::get(), BASE_FEE).into())
 			)
 		];
-	pub UnknownXcmVersionLocation: MultiLocation = MultiLocation::new(2, X2(GlobalConsensus(BridgedNetworkId::get()), Parachain(9999)));
+	pub UnknownXcmVersionLocation: Location = Location::new(2, [GlobalConsensus(BridgedNetworkId::get()), Parachain(9999)]);
 }
 
 #[derive_impl(frame_system::config_preludes::TestDefaultConfig as frame_system::DefaultConfig)]
@@ -87,11 +87,11 @@ impl pallet_xcm_bridge_hub_router::Config<()> for TestRuntime {
 }
 
 pub struct LatestOrNoneForLocationVersionChecker<Location>(sp_std::marker::PhantomData<Location>);
-impl<Location: Contains<MultiLocation>> GetVersion
-	for LatestOrNoneForLocationVersionChecker<Location>
+impl<LocationValue: Contains<Location>> GetVersion
+	for LatestOrNoneForLocationVersionChecker<LocationValue>
 {
-	fn get_version_for(dest: &MultiLocation) -> Option<XcmVersion> {
-		if Location::contains(dest) {
+	fn get_version_for(dest: &Location) -> Option<XcmVersion> {
+		if LocationValue::contains(dest) {
 			return None
 		}
 		Some(XCM_VERSION)
@@ -110,7 +110,7 @@ impl SendXcm for TestToBridgeHubSender {
 	type Ticket = ();
 
 	fn validate(
-		_destination: &mut Option<MultiLocation>,
+		_destination: &mut Option<Location>,
 		_message: &mut Option<Xcm<()>>,
 	) -> SendResult<Self::Ticket> {
 		Ok(((), (BridgeFeeAsset::get(), HRMP_FEE).into()))
diff --git a/bridges/modules/xcm-bridge-hub/src/exporter.rs b/bridges/modules/xcm-bridge-hub/src/exporter.rs
index 4e899dfa011..94ec8b5f106 100644
--- a/bridges/modules/xcm-bridge-hub/src/exporter.rs
+++ b/bridges/modules/xcm-bridge-hub/src/exporter.rs
@@ -53,10 +53,10 @@ where
 	fn validate(
 		network: NetworkId,
 		channel: u32,
-		universal_source: &mut Option<InteriorMultiLocation>,
-		destination: &mut Option<InteriorMultiLocation>,
+		universal_source: &mut Option<InteriorLocation>,
+		destination: &mut Option<InteriorLocation>,
 		message: &mut Option<Xcm<()>>,
-	) -> Result<(Self::Ticket, MultiAssets), SendError> {
+	) -> Result<(Self::Ticket, Assets), SendError> {
 		// Find supported lane_id.
 		let sender_and_lane = Self::lane_for(
 			universal_source.as_ref().ok_or(SendError::MissingArgument)?,
@@ -134,11 +134,11 @@ mod tests {
 	use frame_support::assert_ok;
 	use xcm_executor::traits::export_xcm;
 
-	fn universal_source() -> InteriorMultiLocation {
-		X2(GlobalConsensus(RelayNetwork::get()), Parachain(SIBLING_ASSET_HUB_ID))
+	fn universal_source() -> InteriorLocation {
+		[GlobalConsensus(RelayNetwork::get()), Parachain(SIBLING_ASSET_HUB_ID)].into()
 	}
 
-	fn universal_destination() -> InteriorMultiLocation {
+	fn universal_destination() -> InteriorLocation {
 		BridgedDestination::get()
 	}
 
diff --git a/bridges/modules/xcm-bridge-hub/src/lib.rs b/bridges/modules/xcm-bridge-hub/src/lib.rs
index 44f6903b018..60b988497fc 100644
--- a/bridges/modules/xcm-bridge-hub/src/lib.rs
+++ b/bridges/modules/xcm-bridge-hub/src/lib.rs
@@ -45,25 +45,25 @@ pub mod pallet {
 		BridgeMessagesConfig<Self::BridgeMessagesPalletInstance>
 	{
 		/// Runtime's universal location.
-		type UniversalLocation: Get<InteriorMultiLocation>;
+		type UniversalLocation: Get<InteriorLocation>;
 		// TODO: https://github.com/paritytech/parity-bridges-common/issues/1666 remove `ChainId` and
 		// replace it with the `NetworkId` - then we'll be able to use
 		// `T as pallet_bridge_messages::Config<T::BridgeMessagesPalletInstance>::BridgedChain::NetworkId`
 		/// Bridged network as relative location of bridged `GlobalConsensus`.
 		#[pallet::constant]
-		type BridgedNetwork: Get<MultiLocation>;
+		type BridgedNetwork: Get<Location>;
 		/// Associated messages pallet instance that bridges us with the
 		/// `BridgedNetworkId` consensus.
 		type BridgeMessagesPalletInstance: 'static;
 
 		/// Price of single message export to the bridged consensus (`Self::BridgedNetworkId`).
-		type MessageExportPrice: Get<MultiAssets>;
+		type MessageExportPrice: Get<Assets>;
 		/// Checks the XCM version for the destination.
 		type DestinationVersion: GetVersion;
 
 		/// Get point-to-point links with bridged consensus (`Self::BridgedNetworkId`).
 		/// (this will be replaced with dynamic on-chain bridges - `Bridges V2`)
-		type Lanes: Get<sp_std::vec::Vec<(SenderAndLane, (NetworkId, InteriorMultiLocation))>>;
+		type Lanes: Get<sp_std::vec::Vec<(SenderAndLane, (NetworkId, InteriorLocation))>>;
 		/// Support for point-to-point links
 		/// (this will be replaced with dynamic on-chain bridges - `Bridges V2`)
 		type LanesSupport: XcmBlobHauler;
@@ -86,10 +86,10 @@ pub mod pallet {
 	impl<T: Config<I>, I: 'static> Pallet<T, I> {
 		/// Returns dedicated/configured lane identifier.
 		pub(crate) fn lane_for(
-			source: &InteriorMultiLocation,
-			dest: (&NetworkId, &InteriorMultiLocation),
+			source: &InteriorLocation,
+			dest: (&NetworkId, &InteriorLocation),
 		) -> Option<SenderAndLane> {
-			let source = source.relative_to(&T::UniversalLocation::get());
+			let source = source.clone().relative_to(&T::UniversalLocation::get());
 
 			// Check that we have configured a point-to-point lane for 'source' and `dest`.
 			T::Lanes::get()
diff --git a/bridges/modules/xcm-bridge-hub/src/mock.rs b/bridges/modules/xcm-bridge-hub/src/mock.rs
index 97fc7741e40..e40e1f9fb65 100644
--- a/bridges/modules/xcm-bridge-hub/src/mock.rs
+++ b/bridges/modules/xcm-bridge-hub/src/mock.rs
@@ -154,16 +154,13 @@ impl pallet_bridge_messages::WeightInfoExt for TestMessagesWeights {
 parameter_types! {
 	pub const RelayNetwork: NetworkId = NetworkId::Kusama;
 	pub const BridgedRelayNetwork: NetworkId = NetworkId::Polkadot;
-	pub const BridgedRelayNetworkLocation: MultiLocation = MultiLocation {
-		parents: 1,
-		interior: X1(GlobalConsensus(BridgedRelayNetwork::get()))
-	};
+	pub BridgedRelayNetworkLocation: Location = (Parent, GlobalConsensus(BridgedRelayNetwork::get())).into();
 	pub const NonBridgedRelayNetwork: NetworkId = NetworkId::Rococo;
 	pub const BridgeReserve: Balance = 100_000;
-	pub UniversalLocation: InteriorMultiLocation = X2(
+	pub UniversalLocation: InteriorLocation = [
 		GlobalConsensus(RelayNetwork::get()),
 		Parachain(THIS_BRIDGE_HUB_ID),
-	);
+	].into();
 	pub const Penalty: Balance = 1_000;
 }
 
@@ -181,13 +178,13 @@ impl pallet_xcm_bridge_hub::Config for TestRuntime {
 
 parameter_types! {
 	pub TestSenderAndLane: SenderAndLane = SenderAndLane {
-		location: MultiLocation::new(1, X1(Parachain(SIBLING_ASSET_HUB_ID))),
+		location: Location::new(1, [Parachain(SIBLING_ASSET_HUB_ID)]),
 		lane: TEST_LANE_ID,
 	};
-	pub const BridgedDestination: InteriorMultiLocation = X1(
+	pub BridgedDestination: InteriorLocation = [
 		Parachain(BRIDGED_ASSET_HUB_ID)
-	);
-	pub TestLanes: sp_std::vec::Vec<(SenderAndLane, (NetworkId, InteriorMultiLocation))> = sp_std::vec![
+	].into();
+	pub TestLanes: sp_std::vec::Vec<(SenderAndLane, (NetworkId, InteriorLocation))> = sp_std::vec![
 		(TestSenderAndLane::get(), (BridgedRelayNetwork::get(), BridgedDestination::get()))
 	];
 }
diff --git a/bridges/primitives/runtime/src/chain.rs b/bridges/primitives/runtime/src/chain.rs
index 7ca956e2670..9ba21a1cddf 100644
--- a/bridges/primitives/runtime/src/chain.rs
+++ b/bridges/primitives/runtime/src/chain.rs
@@ -203,7 +203,7 @@ pub trait Chain: Send + Sync + 'static {
 }
 
 /// A trait that provides the type of the underlying chain.
-pub trait UnderlyingChainProvider {
+pub trait UnderlyingChainProvider: Send + Sync + 'static {
 	/// Underlying chain type.
 	type Chain: Chain;
 }
diff --git a/bridges/relays/client-substrate/src/calls.rs b/bridges/relays/client-substrate/src/calls.rs
index 4e0ae9d99d2..71b9ec84aca 100644
--- a/bridges/relays/client-substrate/src/calls.rs
+++ b/bridges/relays/client-substrate/src/calls.rs
@@ -20,7 +20,7 @@ use codec::{Decode, Encode};
 use scale_info::TypeInfo;
 use sp_std::{boxed::Box, vec::Vec};
 
-use xcm::{VersionedMultiLocation, VersionedXcm};
+use xcm::{VersionedLocation, VersionedXcm};
 
 /// A minimized version of `frame-system::Call` that can be used without a runtime.
 #[derive(Encode, Decode, Debug, PartialEq, Eq, Clone, TypeInfo)]
@@ -55,5 +55,5 @@ pub enum SudoCall<Call> {
 pub enum XcmCall {
 	/// `pallet-xcm::Call::send`
 	#[codec(index = 0)]
-	send(Box<VersionedMultiLocation>, Box<VersionedXcm<()>>),
+	send(Box<VersionedLocation>, Box<VersionedXcm<()>>),
 }
-- 
GitLab