From 8accc88e767f052be7adbc27e88b8fa30f68b033 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bastian=20K=C3=B6cher?= <bkchr@users.noreply.github.com>
Date: Mon, 10 May 2021 14:43:00 +0200
Subject: [PATCH] Aura consensus for parachains (#371)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Update polkadot

* Migrate all uses of MQC heads to merkle proofs

* Mass rename `relay_parent_storage_root`

* Restore parachain-system tests

* Update polkadot and libp2p swarm for testing

* Collapse match into an if let

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* Start with something

* Update Substrate & Polkadot

* Start to make it compile

* Make it compile

* Begin with something

* Yep

* I'm a hacker

* Bring back the builder

* Make it work in some way

* Compile

* Parachains use their own "slot"

* Adds cumulus-pallet-aura

* Wrap AuRa import queue to disable equivocation checking by default

* Pass slot duration

* Check the seal when validating a block

* Adds missing file

* Try to make the seal working

* Fix it

* Some fixes

* Bring in the latest features to cleanup the code

* Update and make it compile

* Improve the import

* Start fixing

* More work

* Fix fix fix

* Make everything compile

* Small cleanups

* Rename and more docs

* Docs

* Fixes fixes fixes

* Update rococo-parachains/src/chain_spec.rs

* Update client/consensus/aura/src/lib.rs

Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>

* Update client/consensus/aura/src/lib.rs

Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>

* Update primitives/parachain-inherent/Cargo.toml

Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>

* Update primitives/parachain-inherent/Cargo.toml

* Update primitives/parachain-inherent/Cargo.toml

* Update primitives/parachain-inherent/Cargo.toml

Co-authored-by: Sergei Shulepov <sergei@parity.io>
Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>
---
 cumulus/Cargo.lock                            | 545 +++++++++++-------
 cumulus/Cargo.toml                            |   2 +
 cumulus/client/consensus/aura/Cargo.toml      |  38 ++
 .../client/consensus/aura/src/import_queue.rs | 101 ++++
 cumulus/client/consensus/aura/src/lib.rs      | 536 +++++++++++++++++
 .../client/consensus/relay-chain/Cargo.toml   |   1 -
 .../consensus/relay-chain/src/import_queue.rs |   2 +-
 .../client/consensus/relay-chain/src/lib.rs   |  47 +-
 cumulus/pallets/aura-ext/Cargo.toml           |  39 ++
 cumulus/pallets/aura-ext/src/lib.rs           | 161 ++++++
 .../src/validate_block/mod.rs                 |   2 +-
 .../primitives/parachain-inherent/Cargo.toml  |   6 +
 .../parachain-inherent/src/client_side.rs     |  68 ++-
 cumulus/rococo-parachains/Cargo.toml          |   7 +-
 cumulus/rococo-parachains/runtime/Cargo.toml  |   6 +
 cumulus/rococo-parachains/runtime/src/lib.rs  |  39 +-
 .../shell-runtime/src/lib.rs                  |  14 +-
 cumulus/rococo-parachains/src/chain_spec.rs   |  18 +-
 cumulus/rococo-parachains/src/command.rs      |  50 +-
 cumulus/rococo-parachains/src/service.rs      | 316 ++++++++--
 cumulus/test/service/Cargo.toml               |   5 +
 cumulus/test/service/src/lib.rs               |  23 +-
 22 files changed, 1694 insertions(+), 332 deletions(-)
 create mode 100644 cumulus/client/consensus/aura/Cargo.toml
 create mode 100644 cumulus/client/consensus/aura/src/import_queue.rs
 create mode 100644 cumulus/client/consensus/aura/src/lib.rs
 create mode 100644 cumulus/pallets/aura-ext/Cargo.toml
 create mode 100644 cumulus/pallets/aura-ext/src/lib.rs

diff --git a/cumulus/Cargo.lock b/cumulus/Cargo.lock
index 8b68088b08e..a1dfc281ade 100644
--- a/cumulus/Cargo.lock
+++ b/cumulus/Cargo.lock
@@ -1294,6 +1294,35 @@ dependencies = [
  "tracing",
 ]
 
+[[package]]
+name = "cumulus-client-consensus-aura"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "cumulus-client-consensus-common",
+ "cumulus-primitives-core",
+ "futures 0.3.14",
+ "parity-scale-codec",
+ "parking_lot 0.9.0",
+ "polkadot-service",
+ "sc-client-api",
+ "sc-consensus-aura",
+ "sc-consensus-slots",
+ "sc-telemetry",
+ "sp-api",
+ "sp-application-crypto",
+ "sp-block-builder",
+ "sp-blockchain",
+ "sp-consensus",
+ "sp-consensus-aura",
+ "sp-core",
+ "sp-inherents",
+ "sp-keystore",
+ "sp-runtime",
+ "substrate-prometheus-endpoint",
+ "tracing",
+]
+
 [[package]]
 name = "cumulus-client-consensus-common"
 version = "0.1.0"
@@ -1329,7 +1358,6 @@ dependencies = [
  "async-trait",
  "cumulus-client-consensus-common",
  "cumulus-primitives-core",
- "cumulus-primitives-parachain-inherent",
  "futures 0.3.14",
  "parity-scale-codec",
  "parking_lot 0.9.0",
@@ -1402,6 +1430,23 @@ dependencies = [
  "tracing",
 ]
 
+[[package]]
+name = "cumulus-pallet-aura-ext"
+version = "0.1.0"
+dependencies = [
+ "cumulus-pallet-parachain-system",
+ "frame-executive",
+ "frame-support",
+ "frame-system",
+ "pallet-aura",
+ "parity-scale-codec",
+ "serde",
+ "sp-application-crypto",
+ "sp-consensus-aura",
+ "sp-runtime",
+ "sp-std",
+]
+
 [[package]]
 name = "cumulus-pallet-dmp-queue"
 version = "0.1.0"
@@ -1529,8 +1574,10 @@ dependencies = [
 name = "cumulus-primitives-parachain-inherent"
 version = "0.1.0"
 dependencies = [
+ "async-trait",
  "cumulus-primitives-core",
  "parity-scale-codec",
+ "polkadot-service",
  "sc-client-api",
  "sp-api",
  "sp-core",
@@ -1629,6 +1676,7 @@ dependencies = [
 name = "cumulus-test-parachain-runtime"
 version = "0.1.0"
 dependencies = [
+ "cumulus-pallet-aura-ext",
  "cumulus-pallet-dmp-queue",
  "cumulus-pallet-parachain-system",
  "cumulus-pallet-xcm",
@@ -1643,6 +1691,7 @@ dependencies = [
  "hex-literal 0.3.1",
  "log",
  "pallet-assets",
+ "pallet-aura",
  "pallet-balances",
  "pallet-randomness-collective-flip",
  "pallet-sudo",
@@ -1656,6 +1705,7 @@ dependencies = [
  "serde",
  "sp-api",
  "sp-block-builder",
+ "sp-consensus-aura",
  "sp-core",
  "sp-inherents",
  "sp-io",
@@ -1760,6 +1810,7 @@ dependencies = [
  "cumulus-client-network",
  "cumulus-client-service",
  "cumulus-primitives-core",
+ "cumulus-primitives-parachain-inherent",
  "cumulus-test-relay-validation-worker-provider",
  "cumulus-test-runtime",
  "cumulus-test-runtime-upgrade",
@@ -1771,6 +1822,7 @@ dependencies = [
  "polkadot-overseer",
  "polkadot-primitives",
  "polkadot-service",
+ "polkadot-test-runtime",
  "polkadot-test-service",
  "rand 0.7.3",
  "sc-basic-authorship",
@@ -2316,7 +2368,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
 [[package]]
 name = "fork-tree"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parity-scale-codec",
 ]
@@ -2334,7 +2386,7 @@ dependencies = [
 [[package]]
 name = "frame-benchmarking"
 version = "3.1.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -2353,7 +2405,7 @@ dependencies = [
 [[package]]
 name = "frame-benchmarking-cli"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "Inflector",
  "chrono",
@@ -2376,7 +2428,7 @@ dependencies = [
 [[package]]
 name = "frame-election-provider-support"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -2389,7 +2441,7 @@ dependencies = [
 [[package]]
 name = "frame-executive"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -2404,7 +2456,7 @@ dependencies = [
 [[package]]
 name = "frame-metadata"
 version = "13.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parity-scale-codec",
  "serde",
@@ -2415,7 +2467,7 @@ dependencies = [
 [[package]]
 name = "frame-support"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "bitflags",
  "frame-metadata",
@@ -2441,7 +2493,7 @@ dependencies = [
 [[package]]
 name = "frame-support-procedural"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "Inflector",
  "frame-support-procedural-tools",
@@ -2453,7 +2505,7 @@ dependencies = [
 [[package]]
 name = "frame-support-procedural-tools"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support-procedural-tools-derive",
  "proc-macro-crate 1.0.0",
@@ -2465,7 +2517,7 @@ dependencies = [
 [[package]]
 name = "frame-support-procedural-tools-derive"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "proc-macro2 1.0.26",
  "quote 1.0.9",
@@ -2475,7 +2527,7 @@ dependencies = [
 [[package]]
 name = "frame-system"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "impl-trait-for-tuples",
@@ -2492,7 +2544,7 @@ dependencies = [
 [[package]]
 name = "frame-system-rpc-runtime-api"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -2501,7 +2553,7 @@ dependencies = [
 [[package]]
 name = "frame-try-runtime"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "parity-scale-codec",
@@ -3585,7 +3637,7 @@ dependencies = [
 [[package]]
 name = "kusama-runtime"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "beefy-primitives",
  "bitvec",
@@ -4439,7 +4491,7 @@ dependencies = [
 [[package]]
 name = "metered-channel"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "derive_more 0.99.11",
  "futures 0.3.14",
@@ -4841,7 +4893,7 @@ dependencies = [
 [[package]]
 name = "pallet-assets"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4851,10 +4903,26 @@ dependencies = [
  "sp-std",
 ]
 
+[[package]]
+name = "pallet-aura"
+version = "3.0.0"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
+dependencies = [
+ "frame-support",
+ "frame-system",
+ "pallet-session",
+ "pallet-timestamp",
+ "parity-scale-codec",
+ "sp-application-crypto",
+ "sp-consensus-aura",
+ "sp-runtime",
+ "sp-std",
+]
+
 [[package]]
 name = "pallet-authority-discovery"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -4869,7 +4937,7 @@ dependencies = [
 [[package]]
 name = "pallet-authorship"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -4883,7 +4951,7 @@ dependencies = [
 [[package]]
 name = "pallet-babe"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4906,7 +4974,7 @@ dependencies = [
 [[package]]
 name = "pallet-balances"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4935,7 +5003,7 @@ dependencies = [
 [[package]]
 name = "pallet-bounties"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -4948,7 +5016,7 @@ dependencies = [
 [[package]]
 name = "pallet-collective"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -4963,7 +5031,7 @@ dependencies = [
 [[package]]
 name = "pallet-democracy"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4978,7 +5046,7 @@ dependencies = [
 [[package]]
 name = "pallet-election-provider-multi-phase"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-election-provider-support",
  "frame-support",
@@ -4996,7 +5064,7 @@ dependencies = [
 [[package]]
 name = "pallet-elections-phragmen"
 version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5012,7 +5080,7 @@ dependencies = [
 [[package]]
 name = "pallet-grandpa"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5033,7 +5101,7 @@ dependencies = [
 [[package]]
 name = "pallet-identity"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "enumflags2",
  "frame-benchmarking",
@@ -5048,7 +5116,7 @@ dependencies = [
 [[package]]
 name = "pallet-im-online"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5066,7 +5134,7 @@ dependencies = [
 [[package]]
 name = "pallet-indices"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5081,7 +5149,7 @@ dependencies = [
 [[package]]
 name = "pallet-membership"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5096,7 +5164,7 @@ dependencies = [
 [[package]]
 name = "pallet-mmr"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "ckb-merkle-mountain-range",
  "frame-benchmarking",
@@ -5113,7 +5181,7 @@ dependencies = [
 [[package]]
 name = "pallet-mmr-primitives"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5129,7 +5197,7 @@ dependencies = [
 [[package]]
 name = "pallet-mmr-rpc"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "jsonrpc-core",
  "jsonrpc-core-client",
@@ -5147,7 +5215,7 @@ dependencies = [
 [[package]]
 name = "pallet-multisig"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5161,7 +5229,7 @@ dependencies = [
 [[package]]
 name = "pallet-nicks"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5174,7 +5242,7 @@ dependencies = [
 [[package]]
 name = "pallet-offences"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5190,7 +5258,7 @@ dependencies = [
 [[package]]
 name = "pallet-proxy"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5204,7 +5272,7 @@ dependencies = [
 [[package]]
 name = "pallet-randomness-collective-flip"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5217,7 +5285,7 @@ dependencies = [
 [[package]]
 name = "pallet-recovery"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "enumflags2",
  "frame-support",
@@ -5231,7 +5299,7 @@ dependencies = [
 [[package]]
 name = "pallet-scheduler"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5246,7 +5314,7 @@ dependencies = [
 [[package]]
 name = "pallet-session"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5265,7 +5333,7 @@ dependencies = [
 [[package]]
 name = "pallet-society"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5278,7 +5346,7 @@ dependencies = [
 [[package]]
 name = "pallet-staking"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-election-provider-support",
  "frame-support",
@@ -5300,7 +5368,7 @@ dependencies = [
 [[package]]
 name = "pallet-staking-reward-curve"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "proc-macro-crate 1.0.0",
  "proc-macro2 1.0.26",
@@ -5311,7 +5379,7 @@ dependencies = [
 [[package]]
 name = "pallet-sudo"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5324,7 +5392,7 @@ dependencies = [
 [[package]]
 name = "pallet-timestamp"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5341,7 +5409,7 @@ dependencies = [
 [[package]]
 name = "pallet-tips"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5355,7 +5423,7 @@ dependencies = [
 [[package]]
 name = "pallet-transaction-payment"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5371,7 +5439,7 @@ dependencies = [
 [[package]]
 name = "pallet-transaction-payment-rpc"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "jsonrpc-core",
  "jsonrpc-core-client",
@@ -5388,7 +5456,7 @@ dependencies = [
 [[package]]
 name = "pallet-transaction-payment-rpc-runtime-api"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "pallet-transaction-payment",
  "parity-scale-codec",
@@ -5399,7 +5467,7 @@ dependencies = [
 [[package]]
 name = "pallet-treasury"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5414,7 +5482,7 @@ dependencies = [
 [[package]]
 name = "pallet-utility"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5428,7 +5496,7 @@ dependencies = [
 [[package]]
 name = "pallet-vesting"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "enumflags2",
  "frame-support",
@@ -5441,7 +5509,7 @@ dependencies = [
 [[package]]
 name = "pallet-xcm"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5909,7 +5977,7 @@ checksum = "989d43012e2ca1c4a02507c67282691a0a3207f9dc67cec596b43fe925b3d325"
 [[package]]
 name = "polkadot-approval-distribution"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "futures 0.3.14",
  "polkadot-node-network-protocol",
@@ -5923,7 +5991,7 @@ dependencies = [
 [[package]]
 name = "polkadot-availability-bitfield-distribution"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "futures 0.3.14",
  "polkadot-node-network-protocol",
@@ -5936,7 +6004,7 @@ dependencies = [
 [[package]]
 name = "polkadot-availability-distribution"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "futures 0.3.14",
  "lru",
@@ -5959,7 +6027,7 @@ dependencies = [
 [[package]]
 name = "polkadot-availability-recovery"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "futures 0.3.14",
  "lru",
@@ -5978,7 +6046,7 @@ dependencies = [
 [[package]]
 name = "polkadot-cli"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "frame-benchmarking-cli",
  "futures 0.3.14",
@@ -5998,7 +6066,7 @@ dependencies = [
 [[package]]
 name = "polkadot-collator-protocol"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "always-assert",
  "futures 0.3.14",
@@ -6018,7 +6086,7 @@ dependencies = [
 [[package]]
 name = "polkadot-core-primitives"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "parity-scale-codec",
  "parity-util-mem",
@@ -6030,7 +6098,7 @@ dependencies = [
 [[package]]
 name = "polkadot-erasure-coding"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "parity-scale-codec",
  "polkadot-node-primitives",
@@ -6044,7 +6112,7 @@ dependencies = [
 [[package]]
 name = "polkadot-gossip-support"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "futures 0.3.14",
  "polkadot-node-network-protocol",
@@ -6059,7 +6127,7 @@ dependencies = [
 [[package]]
 name = "polkadot-network-bridge"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "async-trait",
  "futures 0.3.14",
@@ -6079,7 +6147,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-collation-generation"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "futures 0.3.14",
  "parity-scale-codec",
@@ -6097,7 +6165,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-core-approval-voting"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "bitvec",
  "derive_more 0.99.11",
@@ -6126,7 +6194,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-core-av-store"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "bitvec",
  "futures 0.3.14",
@@ -6146,7 +6214,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-core-backing"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "bitvec",
  "futures 0.3.14",
@@ -6164,7 +6232,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-core-bitfield-signing"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "futures 0.3.14",
  "polkadot-node-subsystem",
@@ -6179,7 +6247,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-core-candidate-selection"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "futures 0.3.14",
  "polkadot-node-primitives",
@@ -6194,7 +6262,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-core-candidate-validation"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "async-trait",
  "futures 0.3.14",
@@ -6212,7 +6280,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-core-chain-api"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "futures 0.3.14",
  "polkadot-node-subsystem",
@@ -6225,7 +6293,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-core-parachains-inherent"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "async-trait",
  "futures 0.3.14",
@@ -6243,7 +6311,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-core-provisioner"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "bitvec",
  "futures 0.3.14",
@@ -6258,7 +6326,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-core-pvf"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "always-assert",
  "assert_matches",
@@ -6286,7 +6354,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-core-runtime-api"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "futures 0.3.14",
  "memory-lru",
@@ -6304,7 +6372,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-jaeger"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "async-std",
  "lazy_static",
@@ -6322,7 +6390,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-network-protocol"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "futures 0.3.14",
  "parity-scale-codec",
@@ -6337,7 +6405,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-primitives"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "futures 0.3.14",
  "parity-scale-codec",
@@ -6359,7 +6427,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-subsystem"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "async-std",
  "async-trait",
@@ -6389,7 +6457,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-subsystem-test-helpers"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "async-trait",
  "futures 0.3.14",
@@ -6411,7 +6479,7 @@ dependencies = [
 [[package]]
 name = "polkadot-node-subsystem-util"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "async-trait",
  "futures 0.3.14",
@@ -6439,7 +6507,7 @@ dependencies = [
 [[package]]
 name = "polkadot-overseer"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "async-trait",
  "futures 0.3.14",
@@ -6457,7 +6525,7 @@ dependencies = [
 [[package]]
 name = "polkadot-parachain"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "derive_more 0.99.11",
  "parity-scale-codec",
@@ -6472,7 +6540,7 @@ dependencies = [
 [[package]]
 name = "polkadot-primitives"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "bitvec",
  "frame-system",
@@ -6501,7 +6569,7 @@ dependencies = [
 [[package]]
 name = "polkadot-procmacro-overseer-subsystems-gen"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "assert_matches",
  "proc-macro2 1.0.26",
@@ -6512,7 +6580,7 @@ dependencies = [
 [[package]]
 name = "polkadot-procmacro-subsystem-dispatch-gen"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "assert_matches",
  "proc-macro2 1.0.26",
@@ -6523,7 +6591,7 @@ dependencies = [
 [[package]]
 name = "polkadot-rpc"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "beefy-gadget",
  "beefy-gadget-rpc",
@@ -6556,7 +6624,7 @@ dependencies = [
 [[package]]
 name = "polkadot-runtime"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "beefy-primitives",
  "bitvec",
@@ -6626,7 +6694,7 @@ dependencies = [
 [[package]]
 name = "polkadot-runtime-common"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "beefy-primitives",
  "bitvec",
@@ -6668,7 +6736,7 @@ dependencies = [
 [[package]]
 name = "polkadot-runtime-parachains"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "bitvec",
  "derive_more 0.99.11",
@@ -6705,7 +6773,7 @@ dependencies = [
 [[package]]
 name = "polkadot-service"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "beefy-gadget",
  "beefy-primitives",
@@ -6797,7 +6865,7 @@ dependencies = [
 [[package]]
 name = "polkadot-statement-distribution"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "arrayvec 0.5.2",
  "futures 0.3.14",
@@ -6818,7 +6886,7 @@ dependencies = [
 [[package]]
 name = "polkadot-statement-table"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "parity-scale-codec",
  "polkadot-primitives",
@@ -6828,7 +6896,7 @@ dependencies = [
 [[package]]
 name = "polkadot-test-client"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "parity-scale-codec",
  "polkadot-node-subsystem",
@@ -6853,7 +6921,7 @@ dependencies = [
 [[package]]
 name = "polkadot-test-runtime"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "beefy-primitives",
  "bitvec",
@@ -6910,7 +6978,7 @@ dependencies = [
 [[package]]
 name = "polkadot-test-service"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "frame-benchmarking",
  "frame-system",
@@ -7636,7 +7704,7 @@ dependencies = [
 [[package]]
 name = "remote-externalities"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "env_logger 0.8.3",
  "hex-literal 0.3.1",
@@ -7716,10 +7784,13 @@ dependencies = [
  "assert_cmd",
  "cumulus-client-cli",
  "cumulus-client-collator",
+ "cumulus-client-consensus-aura",
+ "cumulus-client-consensus-common",
  "cumulus-client-consensus-relay-chain",
  "cumulus-client-network",
  "cumulus-client-service",
  "cumulus-primitives-core",
+ "cumulus-primitives-parachain-inherent",
  "cumulus-shell-runtime",
  "cumulus-test-parachain-runtime",
  "derive_more 0.15.0",
@@ -7760,17 +7831,19 @@ dependencies = [
  "sp-block-builder",
  "sp-blockchain",
  "sp-consensus",
+ "sp-consensus-aura",
  "sp-core",
  "sp-inherents",
  "sp-io",
+ "sp-keystore",
  "sp-offchain",
  "sp-runtime",
  "sp-session",
  "sp-timestamp",
  "sp-transaction-pool",
- "sp-trie",
  "structopt",
  "substrate-build-script-utils",
+ "substrate-prometheus-endpoint",
  "substrate-test-client",
  "substrate-test-runtime-client",
  "tempfile",
@@ -7789,7 +7862,7 @@ dependencies = [
 [[package]]
 name = "rococo-runtime"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "beefy-primitives",
  "frame-executive",
@@ -7993,7 +8066,7 @@ dependencies = [
 [[package]]
 name = "sc-authority-discovery"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "derive_more 0.99.11",
@@ -8022,7 +8095,7 @@ dependencies = [
 [[package]]
 name = "sc-basic-authorship"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "futures 0.3.14",
  "futures-timer 3.0.2",
@@ -8045,7 +8118,7 @@ dependencies = [
 [[package]]
 name = "sc-block-builder"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parity-scale-codec",
  "sc-client-api",
@@ -8061,7 +8134,7 @@ dependencies = [
 [[package]]
 name = "sc-chain-spec"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "impl-trait-for-tuples",
  "parity-scale-codec",
@@ -8082,7 +8155,7 @@ dependencies = [
 [[package]]
 name = "sc-chain-spec-derive"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "proc-macro-crate 1.0.0",
  "proc-macro2 1.0.26",
@@ -8093,7 +8166,7 @@ dependencies = [
 [[package]]
 name = "sc-cli"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "chrono",
  "fdlimit",
@@ -8131,7 +8204,7 @@ dependencies = [
 [[package]]
 name = "sc-client-api"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "derive_more 0.99.11",
  "fnv",
@@ -8165,7 +8238,7 @@ dependencies = [
 [[package]]
 name = "sc-client-db"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "blake2-rfc",
  "hash-db",
@@ -8195,7 +8268,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parking_lot 0.11.1",
  "sc-client-api",
@@ -8204,10 +8277,41 @@ dependencies = [
  "sp-runtime",
 ]
 
+[[package]]
+name = "sc-consensus-aura"
+version = "0.9.0"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
+dependencies = [
+ "async-trait",
+ "derive_more 0.99.11",
+ "futures 0.3.14",
+ "futures-timer 3.0.2",
+ "log",
+ "parity-scale-codec",
+ "sc-block-builder",
+ "sc-client-api",
+ "sc-consensus-slots",
+ "sc-telemetry",
+ "sp-api",
+ "sp-application-crypto",
+ "sp-block-builder",
+ "sp-blockchain",
+ "sp-consensus",
+ "sp-consensus-aura",
+ "sp-consensus-slots",
+ "sp-core",
+ "sp-inherents",
+ "sp-io",
+ "sp-keystore",
+ "sp-runtime",
+ "sp-version",
+ "substrate-prometheus-endpoint",
+]
+
 [[package]]
 name = "sc-consensus-babe"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "derive_more 0.99.11",
@@ -8253,7 +8357,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus-babe-rpc"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "derive_more 0.99.11",
  "futures 0.3.14",
@@ -8277,7 +8381,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus-epochs"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "fork-tree",
  "parity-scale-codec",
@@ -8290,7 +8394,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus-slots"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "futures 0.3.14",
@@ -8318,7 +8422,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus-uncles"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "sc-client-api",
  "sp-authorship",
@@ -8329,7 +8433,7 @@ dependencies = [
 [[package]]
 name = "sc-executor"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "derive_more 0.99.11",
  "lazy_static",
@@ -8359,7 +8463,7 @@ dependencies = [
 [[package]]
 name = "sc-executor-common"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "derive_more 0.99.11",
  "parity-scale-codec",
@@ -8376,7 +8480,7 @@ dependencies = [
 [[package]]
 name = "sc-executor-wasmi"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "log",
  "parity-scale-codec",
@@ -8391,7 +8495,7 @@ dependencies = [
 [[package]]
 name = "sc-executor-wasmtime"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "log",
  "parity-scale-codec",
@@ -8409,7 +8513,7 @@ dependencies = [
 [[package]]
 name = "sc-finality-grandpa"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "derive_more 0.99.11",
@@ -8449,7 +8553,7 @@ dependencies = [
 [[package]]
 name = "sc-finality-grandpa-rpc"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "derive_more 0.99.11",
  "finality-grandpa",
@@ -8473,7 +8577,7 @@ dependencies = [
 [[package]]
 name = "sc-finality-grandpa-warp-sync"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "derive_more 0.99.11",
  "futures 0.3.14",
@@ -8494,7 +8598,7 @@ dependencies = [
 [[package]]
 name = "sc-informant"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "ansi_term 0.12.1",
  "futures 0.3.14",
@@ -8512,7 +8616,7 @@ dependencies = [
 [[package]]
 name = "sc-keystore"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "derive_more 0.99.11",
@@ -8532,7 +8636,7 @@ dependencies = [
 [[package]]
 name = "sc-light"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "hash-db",
  "lazy_static",
@@ -8551,7 +8655,7 @@ dependencies = [
 [[package]]
 name = "sc-network"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-std",
  "async-trait",
@@ -8604,7 +8708,7 @@ dependencies = [
 [[package]]
 name = "sc-network-gossip"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "futures 0.3.14",
  "futures-timer 3.0.2",
@@ -8621,7 +8725,7 @@ dependencies = [
 [[package]]
 name = "sc-offchain"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "bytes 0.5.6",
  "fnv",
@@ -8649,7 +8753,7 @@ dependencies = [
 [[package]]
 name = "sc-peerset"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "futures 0.3.14",
  "libp2p",
@@ -8662,7 +8766,7 @@ dependencies = [
 [[package]]
 name = "sc-proposer-metrics"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "log",
  "substrate-prometheus-endpoint",
@@ -8671,7 +8775,7 @@ dependencies = [
 [[package]]
 name = "sc-rpc"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "futures 0.3.14",
  "hash-db",
@@ -8697,6 +8801,7 @@ dependencies = [
  "sp-runtime",
  "sp-session",
  "sp-state-machine",
+ "sp-tracing",
  "sp-transaction-pool",
  "sp-utils",
  "sp-version",
@@ -8705,7 +8810,7 @@ dependencies = [
 [[package]]
 name = "sc-rpc-api"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "derive_more 0.99.11",
  "futures 0.3.14",
@@ -8722,6 +8827,7 @@ dependencies = [
  "sp-core",
  "sp-rpc",
  "sp-runtime",
+ "sp-tracing",
  "sp-transaction-pool",
  "sp-version",
 ]
@@ -8729,7 +8835,7 @@ dependencies = [
 [[package]]
 name = "sc-rpc-server"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "futures 0.1.30",
  "jsonrpc-core",
@@ -8747,7 +8853,7 @@ dependencies = [
 [[package]]
 name = "sc-service"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "directories",
@@ -8811,7 +8917,7 @@ dependencies = [
 [[package]]
 name = "sc-state-db"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "log",
  "parity-scale-codec",
@@ -8826,7 +8932,7 @@ dependencies = [
 [[package]]
 name = "sc-sync-state-rpc"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "jsonrpc-core",
  "jsonrpc-core-client",
@@ -8846,7 +8952,7 @@ dependencies = [
 [[package]]
 name = "sc-telemetry"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "chrono",
  "futures 0.3.14",
@@ -8866,7 +8972,7 @@ dependencies = [
 [[package]]
 name = "sc-tracing"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "ansi_term 0.12.1",
  "atty",
@@ -8877,23 +8983,33 @@ dependencies = [
  "parking_lot 0.11.1",
  "regex",
  "rustc-hash",
+ "sc-client-api",
+ "sc-rpc-server",
+ "sc-telemetry",
  "sc-tracing-proc-macro",
  "serde",
  "serde_json",
+ "sp-api",
+ "sp-block-builder",
+ "sp-blockchain",
+ "sp-core",
+ "sp-rpc",
+ "sp-runtime",
+ "sp-storage",
  "sp-tracing",
  "thiserror",
  "tracing",
- "tracing-core",
  "tracing-log",
  "tracing-subscriber",
  "wasm-bindgen",
+ "wasm-timer",
  "web-sys",
 ]
 
 [[package]]
 name = "sc-tracing-proc-macro"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "proc-macro-crate 1.0.0",
  "proc-macro2 1.0.26",
@@ -8904,7 +9020,7 @@ dependencies = [
 [[package]]
 name = "sc-transaction-graph"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "derive_more 0.99.11",
  "futures 0.3.14",
@@ -8926,7 +9042,7 @@ dependencies = [
 [[package]]
 name = "sc-transaction-pool"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "futures 0.3.14",
  "futures-diagnose",
@@ -9253,10 +9369,19 @@ version = "0.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
 
+[[package]]
+name = "slog"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06"
+dependencies = [
+ "erased-serde",
+]
+
 [[package]]
 name = "slot-range-helper"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "enumn",
  "parity-scale-codec",
@@ -9347,7 +9472,7 @@ dependencies = [
 [[package]]
 name = "sp-allocator"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "log",
  "sp-core",
@@ -9359,7 +9484,7 @@ dependencies = [
 [[package]]
 name = "sp-api"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "hash-db",
  "log",
@@ -9376,7 +9501,7 @@ dependencies = [
 [[package]]
 name = "sp-api-proc-macro"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "blake2-rfc",
  "proc-macro-crate 1.0.0",
@@ -9388,7 +9513,7 @@ dependencies = [
 [[package]]
 name = "sp-application-crypto"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parity-scale-codec",
  "serde",
@@ -9400,7 +9525,7 @@ dependencies = [
 [[package]]
 name = "sp-arithmetic"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "integer-sqrt",
  "num-traits",
@@ -9414,7 +9539,7 @@ dependencies = [
 [[package]]
 name = "sp-authority-discovery"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -9426,7 +9551,7 @@ dependencies = [
 [[package]]
 name = "sp-authorship"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "parity-scale-codec",
@@ -9438,7 +9563,7 @@ dependencies = [
 [[package]]
 name = "sp-block-builder"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -9450,7 +9575,7 @@ dependencies = [
 [[package]]
 name = "sp-blockchain"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "futures 0.3.14",
  "log",
@@ -9468,7 +9593,7 @@ dependencies = [
 [[package]]
 name = "sp-chain-spec"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "serde",
  "serde_json",
@@ -9477,7 +9602,7 @@ dependencies = [
 [[package]]
 name = "sp-consensus"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "futures 0.3.14",
@@ -9504,7 +9629,7 @@ dependencies = [
 [[package]]
 name = "sp-consensus-aura"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "parity-scale-codec",
@@ -9521,7 +9646,7 @@ dependencies = [
 [[package]]
 name = "sp-consensus-babe"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "merlin",
@@ -9543,7 +9668,7 @@ dependencies = [
 [[package]]
 name = "sp-consensus-slots"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parity-scale-codec",
  "sp-arithmetic",
@@ -9553,7 +9678,7 @@ dependencies = [
 [[package]]
 name = "sp-consensus-vrf"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parity-scale-codec",
  "schnorrkel",
@@ -9565,7 +9690,7 @@ dependencies = [
 [[package]]
 name = "sp-core"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "base58",
  "blake2-rfc",
@@ -9609,7 +9734,7 @@ dependencies = [
 [[package]]
 name = "sp-database"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "kvdb",
  "parking_lot 0.11.1",
@@ -9618,7 +9743,7 @@ dependencies = [
 [[package]]
 name = "sp-debug-derive"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "proc-macro2 1.0.26",
  "quote 1.0.9",
@@ -9628,7 +9753,7 @@ dependencies = [
 [[package]]
 name = "sp-externalities"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "environmental",
  "parity-scale-codec",
@@ -9639,7 +9764,7 @@ dependencies = [
 [[package]]
 name = "sp-finality-grandpa"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "finality-grandpa",
  "log",
@@ -9656,7 +9781,7 @@ dependencies = [
 [[package]]
 name = "sp-inherents"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "impl-trait-for-tuples",
@@ -9670,7 +9795,7 @@ dependencies = [
 [[package]]
 name = "sp-io"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "futures 0.3.14",
  "hash-db",
@@ -9694,7 +9819,7 @@ dependencies = [
 [[package]]
 name = "sp-keyring"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "lazy_static",
  "sp-core",
@@ -9705,7 +9830,7 @@ dependencies = [
 [[package]]
 name = "sp-keystore"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "derive_more 0.99.11",
@@ -9722,7 +9847,7 @@ dependencies = [
 [[package]]
 name = "sp-maybe-compressed-blob"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "ruzstd",
  "zstd",
@@ -9731,7 +9856,7 @@ dependencies = [
 [[package]]
 name = "sp-npos-elections"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parity-scale-codec",
  "serde",
@@ -9744,7 +9869,7 @@ dependencies = [
 [[package]]
 name = "sp-npos-elections-compact"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "proc-macro-crate 1.0.0",
  "proc-macro2 1.0.26",
@@ -9755,7 +9880,7 @@ dependencies = [
 [[package]]
 name = "sp-offchain"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "sp-api",
  "sp-core",
@@ -9765,7 +9890,7 @@ dependencies = [
 [[package]]
 name = "sp-panic-handler"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "backtrace",
 ]
@@ -9773,16 +9898,18 @@ dependencies = [
 [[package]]
 name = "sp-rpc"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
+ "rustc-hash",
  "serde",
  "sp-core",
+ "tracing-core",
 ]
 
 [[package]]
 name = "sp-runtime"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "either",
  "hash256-std-hasher",
@@ -9803,7 +9930,7 @@ dependencies = [
 [[package]]
 name = "sp-runtime-interface"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "impl-trait-for-tuples",
  "parity-scale-codec",
@@ -9820,7 +9947,7 @@ dependencies = [
 [[package]]
 name = "sp-runtime-interface-proc-macro"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "Inflector",
  "proc-macro-crate 1.0.0",
@@ -9832,7 +9959,7 @@ dependencies = [
 [[package]]
 name = "sp-serializer"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "serde",
  "serde_json",
@@ -9841,7 +9968,7 @@ dependencies = [
 [[package]]
 name = "sp-session"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -9854,7 +9981,7 @@ dependencies = [
 [[package]]
 name = "sp-staking"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parity-scale-codec",
  "sp-runtime",
@@ -9864,7 +9991,7 @@ dependencies = [
 [[package]]
 name = "sp-state-machine"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "hash-db",
  "log",
@@ -9879,6 +10006,7 @@ dependencies = [
  "sp-std",
  "sp-trie",
  "thiserror",
+ "tracing",
  "trie-db",
  "trie-root 0.16.0",
 ]
@@ -9886,12 +10014,12 @@ dependencies = [
 [[package]]
 name = "sp-std"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 
 [[package]]
 name = "sp-storage"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "impl-serde",
  "parity-scale-codec",
@@ -9904,7 +10032,7 @@ dependencies = [
 [[package]]
 name = "sp-tasks"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "log",
  "sp-core",
@@ -9917,7 +10045,7 @@ dependencies = [
 [[package]]
 name = "sp-test-primitives"
 version = "2.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "parity-scale-codec",
  "parity-util-mem",
@@ -9930,7 +10058,7 @@ dependencies = [
 [[package]]
 name = "sp-timestamp"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "futures-timer 3.0.2",
@@ -9947,10 +10075,15 @@ dependencies = [
 [[package]]
 name = "sp-tracing"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
+ "erased-serde",
  "log",
  "parity-scale-codec",
+ "parking_lot 0.10.2",
+ "serde",
+ "serde_json",
+ "slog",
  "sp-std",
  "tracing",
  "tracing-core",
@@ -9960,7 +10093,7 @@ dependencies = [
 [[package]]
 name = "sp-transaction-pool"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "derive_more 0.99.11",
  "futures 0.3.14",
@@ -9976,7 +10109,7 @@ dependencies = [
 [[package]]
 name = "sp-trie"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "hash-db",
  "memory-db",
@@ -9990,7 +10123,7 @@ dependencies = [
 [[package]]
 name = "sp-utils"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "futures 0.3.14",
  "futures-core",
@@ -10002,7 +10135,7 @@ dependencies = [
 [[package]]
 name = "sp-version"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "impl-serde",
  "parity-scale-codec",
@@ -10014,7 +10147,7 @@ dependencies = [
 [[package]]
 name = "sp-wasm-interface"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "impl-trait-for-tuples",
  "parity-scale-codec",
@@ -10172,7 +10305,7 @@ dependencies = [
 [[package]]
 name = "substrate-build-script-utils"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "platforms",
 ]
@@ -10180,7 +10313,7 @@ dependencies = [
 [[package]]
 name = "substrate-frame-rpc-system"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-system-rpc-runtime-api",
  "futures 0.3.14",
@@ -10203,7 +10336,7 @@ dependencies = [
 [[package]]
 name = "substrate-prometheus-endpoint"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-std",
  "derive_more 0.99.11",
@@ -10217,7 +10350,7 @@ dependencies = [
 [[package]]
 name = "substrate-test-client"
 version = "2.0.1"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "async-trait",
  "futures 0.1.30",
@@ -10246,7 +10379,7 @@ dependencies = [
 [[package]]
 name = "substrate-test-runtime"
 version = "2.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "cfg-if 1.0.0",
  "frame-support",
@@ -10287,7 +10420,7 @@ dependencies = [
 [[package]]
 name = "substrate-test-runtime-client"
 version = "2.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "futures 0.3.14",
  "parity-scale-codec",
@@ -10308,7 +10441,7 @@ dependencies = [
 [[package]]
 name = "substrate-test-utils"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "futures 0.3.14",
  "substrate-test-utils-derive",
@@ -10318,7 +10451,7 @@ dependencies = [
 [[package]]
 name = "substrate-test-utils-derive"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "proc-macro-crate 1.0.0",
  "quote 1.0.9",
@@ -10344,7 +10477,7 @@ dependencies = [
 [[package]]
 name = "substrate-wasm-builder"
 version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "ansi_term 0.12.1",
  "atty",
@@ -11022,7 +11155,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
 [[package]]
 name = "try-runtime-cli"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate?branch=master#a8ada8a654a1e50d855345d07f5f8f8cbce0a818"
+source = "git+https://github.com/paritytech/substrate?branch=master#75957575080a6eacfbdf8995b63f2693ee33efe6"
 dependencies = [
  "frame-try-runtime",
  "log",
@@ -11048,7 +11181,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "04f8ab788026715fa63b31960869617cba39117e520eb415b0139543e325ab59"
 dependencies = [
  "cfg-if 0.1.10",
- "rand 0.7.3",
+ "rand 0.6.5",
  "static_assertions",
 ]
 
@@ -11675,7 +11808,7 @@ dependencies = [
 [[package]]
 name = "westend-runtime"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "beefy-primitives",
  "bitvec",
@@ -11856,7 +11989,7 @@ dependencies = [
 [[package]]
 name = "xcm"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "derivative",
  "impl-trait-for-tuples",
@@ -11866,7 +11999,7 @@ dependencies = [
 [[package]]
 name = "xcm-builder"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -11885,7 +12018,7 @@ dependencies = [
 [[package]]
 name = "xcm-executor"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/polkadot?branch=master#a27a83e58765f2552917f74e8e4f88fe80041f68"
+source = "git+https://github.com/paritytech/polkadot?branch=master#46e39860719ed644a440ac2e776e14fe1d73c7ec"
 dependencies = [
  "frame-support",
  "impl-trait-for-tuples",
diff --git a/cumulus/Cargo.toml b/cumulus/Cargo.toml
index 50421776ab0..64bd920de47 100644
--- a/cumulus/Cargo.toml
+++ b/cumulus/Cargo.toml
@@ -1,10 +1,12 @@
 [workspace]
 members = [
 	"client/cli",
+	"client/consensus/aura",
 	"client/consensus/common",
 	"client/consensus/relay-chain",
 	"client/network",
 	"client/service",
+	"pallets/aura-ext",
 	"pallets/dmp-queue",
 	"pallets/parachain-system",
 	"pallets/xcm",
diff --git a/cumulus/client/consensus/aura/Cargo.toml b/cumulus/client/consensus/aura/Cargo.toml
new file mode 100644
index 00000000000..4240aeccc2f
--- /dev/null
+++ b/cumulus/client/consensus/aura/Cargo.toml
@@ -0,0 +1,38 @@
+[package]
+name = "cumulus-client-consensus-aura"
+description = "AURA consensus algorithm for parachains"
+version = "0.1.0"
+authors = ["Parity Technologies <admin@parity.io>"]
+edition = "2018"
+
+[dependencies]
+# Substrate dependencies
+sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sc-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sc-consensus-slots = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "master" }
+substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" }
+
+# Polkadot dependencies
+polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "master" }
+
+# Cumulus dependencies
+cumulus-client-consensus-common = { path = "../common" }
+cumulus-primitives-core = { path = "../../../primitives/core" }
+
+# Other deps
+futures = { version = "0.3.8", features = ["compat"] }
+codec = { package = "parity-scale-codec", version = "2.0.0", features = [ "derive" ] }
+tracing = "0.1.22"
+async-trait = "0.1.42"
+parking_lot = "0.9"
diff --git a/cumulus/client/consensus/aura/src/import_queue.rs b/cumulus/client/consensus/aura/src/import_queue.rs
new file mode 100644
index 00000000000..2e677d4ac62
--- /dev/null
+++ b/cumulus/client/consensus/aura/src/import_queue.rs
@@ -0,0 +1,101 @@
+// Copyright 2021 Parity Technologies (UK) Ltd.
+// This file is part of Cumulus.
+
+// Cumulus is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Cumulus is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Cumulus.  If not, see <http://www.gnu.org/licenses/>.
+
+//! Parachain specific wrapper for the AuRa import queue.
+
+use codec::Codec;
+use sc_client_api::{backend::AuxStore, BlockOf};
+use sc_consensus_slots::InherentDataProviderExt;
+use sp_api::{ApiExt, ProvideRuntimeApi};
+use sp_block_builder::BlockBuilder as BlockBuilderApi;
+use sp_blockchain::{HeaderBackend, ProvideCache};
+use sp_consensus::{
+	import_queue::DefaultImportQueue, BlockImport, CanAuthorWith, Error as ConsensusError,
+};
+use sp_consensus_aura::{digests::CompatibleDigestItem, AuraApi};
+use sp_core::crypto::Pair;
+use sp_inherents::CreateInherentDataProviders;
+use sp_runtime::traits::{Block as BlockT, DigestItemFor};
+use std::{fmt::Debug, hash::Hash, sync::Arc};
+use substrate_prometheus_endpoint::Registry;
+use sc_telemetry::TelemetryHandle;
+
+/// Parameters of [`import_queue`].
+pub struct ImportQueueParams<'a, I, C, IDP, S, CAW> {
+	/// The block import to use.
+	pub block_import: I,
+	/// The client to interact with the chain.
+	pub client: Arc<C>,
+	/// The inherent data providers, to create the inherent data.
+	pub create_inherent_data_providers: IDP,
+	/// The spawner to spawn background tasks.
+	pub spawner: &'a S,
+	/// The prometheus registry.
+	pub registry: Option<&'a Registry>,
+	/// Can we author with the current node?
+	pub can_author_with: CAW,
+	/// The telemetry handle.
+	pub telemetry: Option<TelemetryHandle>,
+}
+
+/// Start an import queue for the Aura consensus algorithm.
+pub fn import_queue<'a, P, Block, I, C, S, CAW, IDP>(
+	ImportQueueParams {
+		block_import,
+		client,
+		create_inherent_data_providers,
+		spawner,
+		registry,
+		can_author_with,
+		telemetry,
+	}: ImportQueueParams<'a, I, C, IDP, S, CAW>,
+) -> Result<DefaultImportQueue<Block, C>, sp_consensus::Error>
+where
+	Block: BlockT,
+	C::Api: BlockBuilderApi<Block> + AuraApi<Block, P::Public> + ApiExt<Block>,
+	C: 'static
+		+ ProvideRuntimeApi<Block>
+		+ BlockOf
+		+ ProvideCache<Block>
+		+ Send
+		+ Sync
+		+ AuxStore
+		+ HeaderBackend<Block>,
+	I: BlockImport<Block, Error = ConsensusError, Transaction = sp_api::TransactionFor<C, Block>>
+		+ Send
+		+ Sync
+		+ 'static,
+	DigestItemFor<Block>: CompatibleDigestItem<P::Signature>,
+	P: Pair + Send + Sync + 'static,
+	P::Public: Clone + Eq + Send + Sync + Hash + Debug + Codec,
+	P::Signature: Codec,
+	S: sp_core::traits::SpawnEssentialNamed,
+	CAW: CanAuthorWith<Block> + Send + Sync + 'static,
+	IDP: CreateInherentDataProviders<Block, ()> + Sync + Send + 'static,
+	IDP::InherentDataProviders: InherentDataProviderExt + Send + Sync,
+{
+	sc_consensus_aura::import_queue::<P, _, _, _, _, _, _>(sc_consensus_aura::ImportQueueParams {
+		block_import: crate::ParachainBlockImport(block_import),
+		justification_import: None,
+		client,
+		create_inherent_data_providers,
+		spawner,
+		registry,
+		can_author_with,
+		check_for_equivocation: sc_consensus_aura::CheckForEquivocation::No,
+		telemetry,
+	})
+}
diff --git a/cumulus/client/consensus/aura/src/lib.rs b/cumulus/client/consensus/aura/src/lib.rs
new file mode 100644
index 00000000000..2fd1c7624f5
--- /dev/null
+++ b/cumulus/client/consensus/aura/src/lib.rs
@@ -0,0 +1,536 @@
+// Copyright 2021 Parity Technologies (UK) Ltd.
+// This file is part of Cumulus.
+
+// Cumulus is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Cumulus is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Cumulus.  If not, see <http://www.gnu.org/licenses/>.
+
+//! The AuRa consensus algoritm for parachains.
+//!
+//! This extends the Substrate provided AuRa consensus implementation to make it compatible for
+//! parachains. The main entry points for of this consensus algorithm are [`build_aura_consensus`]
+//! and [`import_queue`].
+//!
+//! For more information about AuRa, the Substrate crate should be checked.
+
+use codec::{Decode, Encode};
+use cumulus_client_consensus_common::{ParachainCandidate, ParachainConsensus};
+use cumulus_primitives_core::{
+	relay_chain::v1::{Block as PBlock, Hash as PHash, ParachainHost},
+	PersistedValidationData,
+};
+use futures::lock::Mutex;
+use polkadot_service::ClientHandle;
+use sc_client_api::{backend::AuxStore, Backend, BlockOf};
+use sc_consensus_slots::{BackoffAuthoringBlocksStrategy, SlotInfo};
+use sc_telemetry::TelemetryHandle;
+use sp_api::ProvideRuntimeApi;
+use sp_application_crypto::AppPublic;
+use sp_blockchain::{HeaderBackend, ProvideCache};
+use sp_consensus::{
+	BlockImport, EnableProofRecording, Environment, ProofRecording, Proposer, SlotData, SyncOracle,
+};
+use sp_consensus_aura::AuraApi;
+use sp_core::crypto::Pair;
+use sp_inherents::{CreateInherentDataProviders, InherentData, InherentDataProvider};
+use sp_keystore::SyncCryptoStorePtr;
+use sp_runtime::traits::{Block as BlockT, HashFor, Header as HeaderT, Member, NumberFor};
+use std::{convert::TryFrom, hash::Hash, marker::PhantomData, sync::Arc};
+
+mod import_queue;
+
+pub use import_queue::{import_queue, ImportQueueParams};
+pub use sc_consensus_aura::{
+	slot_duration, AuraBlockImport, BuildAuraWorkerParams, SlotDuration, SlotProportion,
+};
+pub use sc_consensus_slots::InherentDataProviderExt;
+
+const LOG_TARGET: &str = "aura::cumulus";
+
+/// The implementation of the AURA consensus for parachains.
+pub struct AuraConsensus<B, RClient, RBackend, CIDP> {
+	create_inherent_data_providers: Arc<CIDP>,
+	relay_chain_client: Arc<RClient>,
+	relay_chain_backend: Arc<RBackend>,
+	aura_worker: Arc<
+		Mutex<
+			dyn sc_consensus_slots::SlotWorker<B, <EnableProofRecording as ProofRecording>::Proof>
+				+ Send
+				+ 'static,
+		>,
+	>,
+	slot_duration: SlotDuration,
+}
+
+impl<B, RClient, RBackend, CIDP> Clone for AuraConsensus<B, RClient, RBackend, CIDP> {
+	fn clone(&self) -> Self {
+		Self {
+			create_inherent_data_providers: self.create_inherent_data_providers.clone(),
+			relay_chain_backend: self.relay_chain_backend.clone(),
+			relay_chain_client: self.relay_chain_client.clone(),
+			aura_worker: self.aura_worker.clone(),
+			slot_duration: self.slot_duration,
+		}
+	}
+}
+
+impl<B, RClient, RBackend, CIDP> AuraConsensus<B, RClient, RBackend, CIDP>
+where
+	B: BlockT,
+	RClient: ProvideRuntimeApi<PBlock>,
+	RClient::Api: ParachainHost<PBlock>,
+	RBackend: Backend<PBlock>,
+	CIDP: CreateInherentDataProviders<B, (PHash, PersistedValidationData)>,
+	CIDP::InherentDataProviders: InherentDataProviderExt,
+{
+	/// Create a new instance of AURA consensus.
+	pub fn new<P, Client, BI, SO, PF, BS, Error>(
+		para_client: Arc<Client>,
+		block_import: BI,
+		sync_oracle: SO,
+		proposer_factory: PF,
+		force_authoring: bool,
+		backoff_authoring_blocks: Option<BS>,
+		keystore: SyncCryptoStorePtr,
+		create_inherent_data_providers: CIDP,
+		polkadot_client: Arc<RClient>,
+		polkadot_backend: Arc<RBackend>,
+		slot_duration: SlotDuration,
+		telemetry: Option<TelemetryHandle>,
+		block_proposal_slot_portion: SlotProportion,
+	) -> Self
+	where
+		Client: ProvideRuntimeApi<B>
+			+ BlockOf
+			+ ProvideCache<B>
+			+ AuxStore
+			+ HeaderBackend<B>
+			+ Send
+			+ Sync
+			+ 'static,
+		Client::Api: AuraApi<B, P::Public>,
+		BI: BlockImport<B, Transaction = sp_api::TransactionFor<Client, B>> + Send + Sync + 'static,
+		SO: SyncOracle + Send + Sync + Clone + 'static,
+		BS: BackoffAuthoringBlocksStrategy<NumberFor<B>> + Send + 'static,
+		PF: Environment<B, Error = Error> + Send + Sync + 'static,
+		PF::Proposer: Proposer<
+			B,
+			Error = Error,
+			Transaction = sp_api::TransactionFor<Client, B>,
+			ProofRecording = EnableProofRecording,
+			Proof = <EnableProofRecording as ProofRecording>::Proof,
+		>,
+		Error: std::error::Error + Send + From<sp_consensus::Error> + 'static,
+		P: Pair + Send + Sync,
+		P::Public: AppPublic + Hash + Member + Encode + Decode,
+		P::Signature: TryFrom<Vec<u8>> + Hash + Member + Encode + Decode,
+	{
+		let worker =
+			sc_consensus_aura::build_aura_worker::<P, _, _, _, _, _, _, _>(BuildAuraWorkerParams {
+				client: para_client,
+				block_import: ParachainBlockImport(block_import),
+				proposer_factory,
+				sync_oracle,
+				force_authoring,
+				backoff_authoring_blocks,
+				keystore,
+				telemetry,
+				block_proposal_slot_portion,
+			});
+
+		Self {
+			create_inherent_data_providers: Arc::new(create_inherent_data_providers),
+			relay_chain_backend: polkadot_backend,
+			relay_chain_client: polkadot_client,
+			aura_worker: Arc::new(Mutex::new(worker)),
+			slot_duration,
+		}
+	}
+
+	/// Create the inherent data.
+	///
+	/// Returns the created inherent data and the inherent data providers used.
+	async fn inherent_data(
+		&self,
+		parent: B::Hash,
+		validation_data: &PersistedValidationData,
+		relay_parent: PHash,
+	) -> Option<(InherentData, CIDP::InherentDataProviders)> {
+		let inherent_data_providers = self
+			.create_inherent_data_providers
+			.create_inherent_data_providers(parent, (relay_parent, validation_data.clone()))
+			.await
+			.map_err(|e| {
+				tracing::error!(
+					target: LOG_TARGET,
+					error = ?e,
+					"Failed to create inherent data providers.",
+				)
+			})
+			.ok()?;
+
+		inherent_data_providers
+			.create_inherent_data()
+			.map_err(|e| {
+				tracing::error!(
+					target: LOG_TARGET,
+					error = ?e,
+					"Failed to create inherent data.",
+				)
+			})
+			.ok()
+			.map(|d| (d, inherent_data_providers))
+	}
+}
+
+#[async_trait::async_trait]
+impl<B, RClient, RBackend, CIDP> ParachainConsensus<B> for AuraConsensus<B, RClient, RBackend, CIDP>
+where
+	B: BlockT,
+	RClient: ProvideRuntimeApi<PBlock> + Send + Sync,
+	RClient::Api: ParachainHost<PBlock>,
+	RBackend: Backend<PBlock>,
+	CIDP: CreateInherentDataProviders<B, (PHash, PersistedValidationData)> + Send + Sync,
+	CIDP::InherentDataProviders: InherentDataProviderExt + Send,
+{
+	async fn produce_candidate(
+		&mut self,
+		parent: &B::Header,
+		relay_parent: PHash,
+		validation_data: &PersistedValidationData,
+	) -> Option<ParachainCandidate<B>> {
+		let (inherent_data, inherent_data_providers) = self
+			.inherent_data(parent.hash(), validation_data, relay_parent)
+			.await?;
+
+		let info = SlotInfo::new(
+			inherent_data_providers.slot(),
+			inherent_data_providers.timestamp(),
+			inherent_data,
+			self.slot_duration.slot_duration(),
+			parent.clone(),
+			// Set the block limit to 50% of the maximum PoV size.
+			//
+			// TODO: If we got benchmarking that includes the proof size,
+			// we should be able to use the maximum pov size.
+			Some((validation_data.max_pov_size / 2) as usize),
+		);
+
+		let res = self.aura_worker.lock().await.on_slot(info).await?;
+
+		Some(ParachainCandidate {
+			block: res.block,
+			proof: res.storage_proof,
+		})
+	}
+}
+
+/// Parachain specific block import.
+///
+/// This is used to set `block_import_params.fork_choice` to `false` as long as the block origin is
+/// not `NetworkInitialSync`. The best block for parachains is determined by the relay chain. Meaning
+/// we will update the best block, as it is included by the relay-chain.
+struct ParachainBlockImport<I>(I);
+
+#[async_trait::async_trait]
+impl<Block, I> BlockImport<Block> for ParachainBlockImport<I>
+where
+	Block: BlockT,
+	I: BlockImport<Block> + Send,
+{
+	type Error = I::Error;
+	type Transaction = I::Transaction;
+
+	async fn check_block(
+		&mut self,
+		block: sp_consensus::BlockCheckParams<Block>,
+	) -> Result<sp_consensus::ImportResult, Self::Error> {
+		self.0.check_block(block).await
+	}
+
+	async fn import_block(
+		&mut self,
+		mut block_import_params: sp_consensus::BlockImportParams<Block, Self::Transaction>,
+		cache: std::collections::HashMap<sp_consensus::import_queue::CacheKeyId, Vec<u8>>,
+	) -> Result<sp_consensus::ImportResult, Self::Error> {
+		// Best block is determined by the relay chain, or if we are doing the intial sync
+		// we import all blocks as new best.
+		block_import_params.fork_choice = Some(sp_consensus::ForkChoiceStrategy::Custom(
+			block_import_params.origin == sp_consensus::BlockOrigin::NetworkInitialSync,
+		));
+		self.0.import_block(block_import_params, cache).await
+	}
+}
+
+/// Paramaters of [`build_aura_consensus`].
+pub struct BuildAuraConsensusParams<PF, BI, RBackend, CIDP, Client, BS, SO> {
+	pub proposer_factory: PF,
+	pub create_inherent_data_providers: CIDP,
+	pub block_import: BI,
+	pub relay_chain_client: polkadot_service::Client,
+	pub relay_chain_backend: Arc<RBackend>,
+	pub para_client: Arc<Client>,
+	pub backoff_authoring_blocks: Option<BS>,
+	pub sync_oracle: SO,
+	pub keystore: SyncCryptoStorePtr,
+	pub force_authoring: bool,
+	pub slot_duration: SlotDuration,
+	pub telemetry: Option<TelemetryHandle>,
+	pub block_proposal_slot_portion: SlotProportion,
+}
+
+/// Build the [`AuraConsensus`].
+///
+/// Returns a boxed [`ParachainConsensus`].
+pub fn build_aura_consensus<P, Block, PF, BI, RBackend, CIDP, Client, SO, BS, Error>(
+	BuildAuraConsensusParams {
+		proposer_factory,
+		create_inherent_data_providers,
+		block_import,
+		relay_chain_client,
+		relay_chain_backend,
+		para_client,
+		backoff_authoring_blocks,
+		sync_oracle,
+		keystore,
+		force_authoring,
+		slot_duration,
+		telemetry,
+		block_proposal_slot_portion,
+	}: BuildAuraConsensusParams<PF, BI, RBackend, CIDP, Client, BS, SO>,
+) -> Box<dyn ParachainConsensus<Block>>
+where
+	Block: BlockT,
+	// Rust bug: https://github.com/rust-lang/rust/issues/24159
+	sc_client_api::StateBackendFor<RBackend, PBlock>: sc_client_api::StateBackend<HashFor<PBlock>>,
+	RBackend: Backend<PBlock> + 'static,
+	CIDP: CreateInherentDataProviders<Block, (PHash, PersistedValidationData)>
+		+ Send
+		+ Sync
+		+ 'static,
+	CIDP::InherentDataProviders: InherentDataProviderExt + Send,
+	Client: ProvideRuntimeApi<Block>
+		+ BlockOf
+		+ ProvideCache<Block>
+		+ AuxStore
+		+ HeaderBackend<Block>
+		+ Send
+		+ Sync
+		+ 'static,
+	Client::Api: AuraApi<Block, P::Public>,
+	BI: BlockImport<Block, Transaction = sp_api::TransactionFor<Client, Block>>
+		+ Send
+		+ Sync
+		+ 'static,
+	SO: SyncOracle + Send + Sync + Clone + 'static,
+	BS: BackoffAuthoringBlocksStrategy<NumberFor<Block>> + Send + 'static,
+	PF: Environment<Block, Error = Error> + Send + Sync + 'static,
+	PF::Proposer: Proposer<
+		Block,
+		Error = Error,
+		Transaction = sp_api::TransactionFor<Client, Block>,
+		ProofRecording = EnableProofRecording,
+		Proof = <EnableProofRecording as ProofRecording>::Proof,
+	>,
+	Error: std::error::Error + Send + From<sp_consensus::Error> + 'static,
+	P: Pair + Send + Sync,
+	P::Public: AppPublic + Hash + Member + Encode + Decode,
+	P::Signature: TryFrom<Vec<u8>> + Hash + Member + Encode + Decode,
+{
+	AuraConsensusBuilder::<P, _, _, _, _, _, _, _, _, _>::new(
+		proposer_factory,
+		block_import,
+		create_inherent_data_providers,
+		relay_chain_client,
+		relay_chain_backend,
+		para_client,
+		backoff_authoring_blocks,
+		sync_oracle,
+		force_authoring,
+		keystore,
+		slot_duration,
+		telemetry,
+		block_proposal_slot_portion,
+	)
+	.build()
+}
+
+/// Aura consensus builder.
+///
+/// Builds a [`AuraConsensus`] for a parachain. As this requires
+/// a concrete relay chain client instance, the builder takes a [`polkadot_service::Client`]
+/// that wraps this concrete instance. By using [`polkadot_service::ExecuteWithClient`]
+/// the builder gets access to this concrete instance.
+struct AuraConsensusBuilder<P, Block, PF, BI, RBackend, CIDP, Client, SO, BS, Error> {
+	_phantom: PhantomData<(Block, Error, P)>,
+	proposer_factory: PF,
+	create_inherent_data_providers: CIDP,
+	block_import: BI,
+	relay_chain_backend: Arc<RBackend>,
+	relay_chain_client: polkadot_service::Client,
+	para_client: Arc<Client>,
+	backoff_authoring_blocks: Option<BS>,
+	sync_oracle: SO,
+	force_authoring: bool,
+	keystore: SyncCryptoStorePtr,
+	slot_duration: SlotDuration,
+	telemetry: Option<TelemetryHandle>,
+	block_proposal_slot_portion: SlotProportion,
+}
+
+impl<Block, PF, BI, RBackend, CIDP, Client, SO, BS, P, Error>
+	AuraConsensusBuilder<P, Block, PF, BI, RBackend, CIDP, Client, SO, BS, Error>
+where
+	Block: BlockT,
+	// Rust bug: https://github.com/rust-lang/rust/issues/24159
+	sc_client_api::StateBackendFor<RBackend, PBlock>: sc_client_api::StateBackend<HashFor<PBlock>>,
+	RBackend: Backend<PBlock> + 'static,
+	CIDP: CreateInherentDataProviders<Block, (PHash, PersistedValidationData)>
+		+ Send
+		+ Sync
+		+ 'static,
+	CIDP::InherentDataProviders: InherentDataProviderExt + Send,
+	Client: ProvideRuntimeApi<Block>
+		+ BlockOf
+		+ ProvideCache<Block>
+		+ AuxStore
+		+ HeaderBackend<Block>
+		+ Send
+		+ Sync
+		+ 'static,
+	Client::Api: AuraApi<Block, P::Public>,
+	BI: BlockImport<Block, Transaction = sp_api::TransactionFor<Client, Block>>
+		+ Send
+		+ Sync
+		+ 'static,
+	SO: SyncOracle + Send + Sync + Clone + 'static,
+	BS: BackoffAuthoringBlocksStrategy<NumberFor<Block>> + Send + 'static,
+	PF: Environment<Block, Error = Error> + Send + Sync + 'static,
+	PF::Proposer: Proposer<
+		Block,
+		Error = Error,
+		Transaction = sp_api::TransactionFor<Client, Block>,
+		ProofRecording = EnableProofRecording,
+		Proof = <EnableProofRecording as ProofRecording>::Proof,
+	>,
+	Error: std::error::Error + Send + From<sp_consensus::Error> + 'static,
+	P: Pair + Send + Sync,
+	P::Public: AppPublic + Hash + Member + Encode + Decode,
+	P::Signature: TryFrom<Vec<u8>> + Hash + Member + Encode + Decode,
+{
+	/// Create a new instance of the builder.
+	fn new(
+		proposer_factory: PF,
+		block_import: BI,
+		create_inherent_data_providers: CIDP,
+		relay_chain_client: polkadot_service::Client,
+		relay_chain_backend: Arc<RBackend>,
+		para_client: Arc<Client>,
+		backoff_authoring_blocks: Option<BS>,
+		sync_oracle: SO,
+		force_authoring: bool,
+		keystore: SyncCryptoStorePtr,
+		slot_duration: SlotDuration,
+		telemetry: Option<TelemetryHandle>,
+		block_proposal_slot_portion: SlotProportion,
+	) -> Self {
+		Self {
+			_phantom: PhantomData,
+			proposer_factory,
+			block_import,
+			create_inherent_data_providers,
+			relay_chain_backend,
+			relay_chain_client,
+			para_client,
+			backoff_authoring_blocks,
+			sync_oracle,
+			force_authoring,
+			keystore,
+			slot_duration,
+			telemetry,
+			block_proposal_slot_portion,
+		}
+	}
+
+	/// Build the relay chain consensus.
+	fn build(self) -> Box<dyn ParachainConsensus<Block>> {
+		self.relay_chain_client.clone().execute_with(self)
+	}
+}
+
+impl<Block, PF, BI, RBackend, CIDP, Client, SO, BS, P, Error> polkadot_service::ExecuteWithClient
+	for AuraConsensusBuilder<P, Block, PF, BI, RBackend, CIDP, Client, SO, BS, Error>
+where
+	Block: BlockT,
+	// Rust bug: https://github.com/rust-lang/rust/issues/24159
+	sc_client_api::StateBackendFor<RBackend, PBlock>: sc_client_api::StateBackend<HashFor<PBlock>>,
+	RBackend: Backend<PBlock> + 'static,
+	CIDP: CreateInherentDataProviders<Block, (PHash, PersistedValidationData)>
+		+ Send
+		+ Sync
+		+ 'static,
+	CIDP::InherentDataProviders: InherentDataProviderExt + Send,
+	Client: ProvideRuntimeApi<Block>
+		+ BlockOf
+		+ ProvideCache<Block>
+		+ AuxStore
+		+ HeaderBackend<Block>
+		+ Send
+		+ Sync
+		+ 'static,
+	Client::Api: AuraApi<Block, P::Public>,
+	BI: BlockImport<Block, Transaction = sp_api::TransactionFor<Client, Block>>
+		+ Send
+		+ Sync
+		+ 'static,
+	SO: SyncOracle + Send + Sync + Clone + 'static,
+	BS: BackoffAuthoringBlocksStrategy<NumberFor<Block>> + Send + 'static,
+	PF: Environment<Block, Error = Error> + Send + Sync + 'static,
+	PF::Proposer: Proposer<
+		Block,
+		Error = Error,
+		Transaction = sp_api::TransactionFor<Client, Block>,
+		ProofRecording = EnableProofRecording,
+		Proof = <EnableProofRecording as ProofRecording>::Proof,
+	>,
+	Error: std::error::Error + Send + From<sp_consensus::Error> + 'static,
+	P: Pair + Send + Sync,
+	P::Public: AppPublic + Hash + Member + Encode + Decode,
+	P::Signature: TryFrom<Vec<u8>> + Hash + Member + Encode + Decode,
+{
+	type Output = Box<dyn ParachainConsensus<Block>>;
+
+	fn execute_with_client<PClient, Api, PBackend>(self, client: Arc<PClient>) -> Self::Output
+	where
+		<Api as sp_api::ApiExt<PBlock>>::StateBackend: sp_api::StateBackend<HashFor<PBlock>>,
+		PBackend: Backend<PBlock>,
+		PBackend::State: sp_api::StateBackend<sp_runtime::traits::BlakeTwo256>,
+		Api: polkadot_service::RuntimeApiCollection<StateBackend = PBackend::State>,
+		PClient: polkadot_service::AbstractClient<PBlock, PBackend, Api = Api> + 'static,
+	{
+		Box::new(AuraConsensus::new::<P, _, _, _, _, _, _>(
+			self.para_client,
+			self.block_import,
+			self.sync_oracle,
+			self.proposer_factory,
+			self.force_authoring,
+			self.backoff_authoring_blocks,
+			self.keystore,
+			self.create_inherent_data_providers,
+			client.clone(),
+			self.relay_chain_backend,
+			self.slot_duration,
+			self.telemetry,
+			self.block_proposal_slot_portion,
+		))
+	}
+}
diff --git a/cumulus/client/consensus/relay-chain/Cargo.toml b/cumulus/client/consensus/relay-chain/Cargo.toml
index ce70fafcbf4..d3da3ba601a 100644
--- a/cumulus/client/consensus/relay-chain/Cargo.toml
+++ b/cumulus/client/consensus/relay-chain/Cargo.toml
@@ -23,7 +23,6 @@ polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "m
 # Cumulus dependencies
 cumulus-client-consensus-common = { path = "../common" }
 cumulus-primitives-core = { path = "../../../primitives/core" }
-cumulus-primitives-parachain-inherent = { path = "../../../primitives/parachain-inherent" }
 
 # Other deps
 futures = { version = "0.3.8", features = ["compat"] }
diff --git a/cumulus/client/consensus/relay-chain/src/import_queue.rs b/cumulus/client/consensus/relay-chain/src/import_queue.rs
index e4361c1d727..a1377c7bb05 100644
--- a/cumulus/client/consensus/relay-chain/src/import_queue.rs
+++ b/cumulus/client/consensus/relay-chain/src/import_queue.rs
@@ -64,7 +64,7 @@ where
 				.create_inherent_data_providers
 				.create_inherent_data_providers(*header.parent_hash(), ())
 				.await
-				.map_err(|e| format!("{:?}", e))?;
+				.map_err(|e| e.to_string())?;
 
 			let inherent_data = inherent_data_providers
 				.create_inherent_data()
diff --git a/cumulus/client/consensus/relay-chain/src/lib.rs b/cumulus/client/consensus/relay-chain/src/lib.rs
index 520a44077ea..1743a84eb5e 100644
--- a/cumulus/client/consensus/relay-chain/src/lib.rs
+++ b/cumulus/client/consensus/relay-chain/src/lib.rs
@@ -38,7 +38,6 @@ use cumulus_primitives_core::{
 	relay_chain::v1::{Block as PBlock, Hash as PHash, ParachainHost},
 	ParaId, PersistedValidationData,
 };
-use cumulus_primitives_parachain_inherent::ParachainInherentData;
 use parking_lot::Mutex;
 use polkadot_service::ClientHandle;
 use sc_client_api::Backend;
@@ -89,7 +88,7 @@ where
 	RClient: ProvideRuntimeApi<PBlock>,
 	RClient::Api: ParachainHost<PBlock>,
 	RBackend: Backend<PBlock>,
-	CIDP: CreateInherentDataProviders<B, ()>,
+	CIDP: CreateInherentDataProviders<B, (PHash, PersistedValidationData)>,
 {
 	/// Create a new instance of relay-chain provided consensus.
 	pub fn new(
@@ -120,18 +119,18 @@ where
 	) -> Option<InherentData> {
 		let inherent_data_providers = self
 			.create_inherent_data_providers
-			.create_inherent_data_providers(parent, ())
+			.create_inherent_data_providers(parent, (relay_parent, validation_data.clone()))
 			.await
 			.map_err(|e| {
 				tracing::error!(
 					target: LOG_TARGET,
 					error = ?e,
-					"Failed to create inherent data providers",
+					"Failed to create inherent data providers.",
 				)
 			})
 			.ok()?;
 
-		let mut inherent_data = inherent_data_providers
+		inherent_data_providers
 			.create_inherent_data()
 			.map_err(|e| {
 				tracing::error!(
@@ -140,31 +139,7 @@ where
 					"Failed to create inherent data.",
 				)
 			})
-			.ok()?;
-
-		let parachain_inherent_data = ParachainInherentData::create_at(
-			relay_parent,
-			&*self.relay_chain_client,
-			&*self.relay_chain_backend,
-			validation_data,
-			self.para_id,
-		)?;
-
-		inherent_data
-			.put_data(
-				cumulus_primitives_parachain_inherent::INHERENT_IDENTIFIER,
-				&parachain_inherent_data,
-			)
-			.map_err(|e| {
-				tracing::error!(
-					target: LOG_TARGET,
-					error = ?e,
-					"Failed to put the system inherent into inherent data.",
-				)
-			})
-			.ok()?;
-
-		Some(inherent_data)
+			.ok()
 	}
 }
 
@@ -184,7 +159,7 @@ where
 		ProofRecording = EnableProofRecording,
 		Proof = <EnableProofRecording as ProofRecording>::Proof,
 	>,
-	CIDP: CreateInherentDataProviders<B, ()>,
+	CIDP: CreateInherentDataProviders<B, (PHash, PersistedValidationData)>,
 {
 	async fn produce_candidate(
 		&mut self,
@@ -201,7 +176,9 @@ where
 			)
 			.ok()?;
 
-		let inherent_data = self.inherent_data(parent.hash(), &validation_data, relay_parent).await?;
+		let inherent_data = self
+			.inherent_data(parent.hash(), &validation_data, relay_parent)
+			.await?;
 
 		let Proposal {
 			block,
@@ -288,7 +265,7 @@ where
 	RBackend: Backend<PBlock> + 'static,
 	// Rust bug: https://github.com/rust-lang/rust/issues/24159
 	sc_client_api::StateBackendFor<RBackend, PBlock>: sc_client_api::StateBackend<HashFor<PBlock>>,
-	CIDP: CreateInherentDataProviders<Block, ()> + 'static,
+	CIDP: CreateInherentDataProviders<Block, (PHash, PersistedValidationData)> + 'static,
 {
 	RelayChainConsensusBuilder::new(
 		para_id,
@@ -331,7 +308,7 @@ where
 	>,
 	BI: BlockImport<Block> + Send + Sync + 'static,
 	RBackend: Backend<PBlock> + 'static,
-	CIDP: CreateInherentDataProviders<Block, ()> + 'static,
+	CIDP: CreateInherentDataProviders<Block, (PHash, PersistedValidationData)> + 'static,
 {
 	/// Create a new instance of the builder.
 	fn new(
@@ -374,7 +351,7 @@ where
 	>,
 	BI: BlockImport<Block> + Send + Sync + 'static,
 	RBackend: Backend<PBlock> + 'static,
-	CIDP: CreateInherentDataProviders<Block, ()> + 'static,
+	CIDP: CreateInherentDataProviders<Block, (PHash, PersistedValidationData)> + 'static,
 {
 	type Output = Box<dyn ParachainConsensus<Block>>;
 
diff --git a/cumulus/pallets/aura-ext/Cargo.toml b/cumulus/pallets/aura-ext/Cargo.toml
new file mode 100644
index 00000000000..375977a8245
--- /dev/null
+++ b/cumulus/pallets/aura-ext/Cargo.toml
@@ -0,0 +1,39 @@
+[package]
+name = "cumulus-pallet-aura-ext"
+version = "0.1.0"
+authors = ["Parity Technologies <admin@parity.io>"]
+edition = "2018"
+description = "AURA consensus extension pallet for parachains"
+
+[dependencies]
+# Substrate dependencies
+frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
+frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
+frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
+pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
+sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
+sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
+sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
+sp-application-crypto = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
+
+# Other Dependencies
+codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"]}
+serde = { version = "1.0.101", optional = true, features = ["derive"] }
+
+[dev-dependencies]
+cumulus-pallet-parachain-system = { path = "../parachain-system" }
+
+[features]
+default = [ "std" ]
+std = [
+	"codec/std",
+	"serde",
+	"frame-support/std",
+	"sp-runtime/std",
+	"sp-std/std",
+	"frame-system/std",
+	"frame-executive/std",
+	"pallet-aura/std",
+	"sp-consensus-aura/std",
+	"sp-application-crypto/std",
+]
diff --git a/cumulus/pallets/aura-ext/src/lib.rs b/cumulus/pallets/aura-ext/src/lib.rs
new file mode 100644
index 00000000000..3638f5d9181
--- /dev/null
+++ b/cumulus/pallets/aura-ext/src/lib.rs
@@ -0,0 +1,161 @@
+// Copyright 2021 Parity Technologies (UK) Ltd.
+// This file is part of Cumulus.
+
+// Cumulus is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Cumulus is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Cumulus.  If not, see <http://www.gnu.org/licenses/>.
+
+//! Cumulus extension pallet for AuRa
+//!
+//! This pallets extends the Substrate AuRa pallet to make it compatible with parachains. It
+//! provides the [`Pallet`], the [`Config`] and the [`GenesisConfig`].
+//!
+//! It is also required that the parachain runtime uses the provided [`BlockExecutor`] to properly
+//! check the constructed block on the relay chain.
+//!
+//! ```
+//!# struct Runtime;
+//!# struct Executive;
+//! cumulus_pallet_parachain_system::register_validate_block!(
+//!     Runtime,
+//!     cumulus_pallet_aura_ext::BlockExecutor::<Runtime, Executive>,
+//! );
+//! ```
+
+#![cfg_attr(not(feature = "std"), no_std)]
+
+use frame_support::traits::{ExecuteBlock, FindAuthor};
+use sp_application_crypto::RuntimeAppPublic;
+use sp_consensus_aura::digests::CompatibleDigestItem;
+use sp_runtime::traits::{Block as BlockT, Header as HeaderT};
+
+type Aura<T> = pallet_aura::Pallet<T>;
+
+pub use pallet::*;
+
+#[frame_support::pallet]
+pub mod pallet {
+	use super::*;
+	use frame_support::pallet_prelude::*;
+	use frame_system::pallet_prelude::*;
+	use sp_std::vec::Vec;
+
+	/// The configuration trait.
+	#[pallet::config]
+	pub trait Config: pallet_aura::Config + frame_system::Config {}
+
+	#[pallet::pallet]
+	pub struct Pallet<T>(_);
+
+	#[pallet::hooks]
+	impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
+		fn on_finalize(_: BlockNumberFor<T>) {
+			// Update to the latest AuRa authorities.
+			Authorities::<T>::put(Aura::<T>::authorities());
+		}
+
+		fn on_initialize(_: BlockNumberFor<T>) -> Weight {
+			// Fetch the authorities once to get them into the storage proof of the PoV.
+			Authorities::<T>::get();
+
+			T::DbWeight::get().reads_writes(2, 1)
+		}
+	}
+
+	#[pallet::call]
+	impl<T: Config> Pallet<T> {}
+
+	/// Serves as cache for the authorities.
+	///
+	/// The authorities in AuRa are overwritten in `on_initialize` when we switch to a new session,
+	/// but we require the old authorities to verify the seal when validating a PoV. This will always
+	/// be updated to the latest AuRa authorities in `on_finalize`.
+	#[pallet::storage]
+	pub(crate) type Authorities<T: Config> = StorageValue<_, Vec<T::AuthorityId>, ValueQuery>;
+
+	#[pallet::genesis_config]
+	#[derive(Default)]
+	pub struct GenesisConfig;
+
+	#[pallet::genesis_build]
+	impl<T: Config> GenesisBuild<T> for GenesisConfig {
+		fn build(&self) {
+			let authorities = Aura::<T>::authorities();
+
+			assert!(
+				!authorities.is_empty(),
+				"AuRa authorities empty, maybe wrong order in `construct_runtime!`?",
+			);
+
+			Authorities::<T>::put(authorities);
+		}
+	}
+}
+
+/// The block executor used when validating a PoV at the relay chain.
+///
+/// When executing the block it will verify the block seal to ensure that the correct author created
+/// the block.
+pub struct BlockExecutor<T, I>(sp_std::marker::PhantomData<(T, I)>);
+
+impl<Block, T, I> ExecuteBlock<Block> for BlockExecutor<T, I>
+where
+	Block: BlockT,
+	T: Config,
+	I: ExecuteBlock<Block>,
+{
+	fn execute_block(block: Block) {
+		let (mut header, extrinsics) = block.deconstruct();
+		// We need to fetch the authorities before we execute the block, to get the authorities
+		// before any potential update.
+		let authorities = Authorities::<T>::get();
+
+		let mut seal = None;
+		header.digest_mut().logs.retain(|s| {
+			let s =
+				CompatibleDigestItem::<<T::AuthorityId as RuntimeAppPublic>::Signature>::as_aura_seal(s);
+			match (s, seal.is_some()) {
+				(Some(_), true) => panic!("Found multiple AuRa seal digests"),
+				(None, _) => true,
+				(Some(s), false) => {
+					seal = Some(s);
+					false
+				}
+			}
+		});
+
+		let seal = seal.expect("Could not find an AuRa seal digest!");
+
+		let author = Aura::<T>::find_author(
+			header
+				.digest()
+				.logs()
+				.iter()
+				.filter_map(|d| d.as_pre_runtime()),
+		)
+		.expect("Could not find AuRa author index!");
+
+		let pre_hash = header.hash();
+
+		if !authorities
+			.get(author as usize)
+			.unwrap_or_else(||
+				panic!("Invalid AuRa author index {} for authorities: {:?}", author, authorities)
+			)
+			.verify(&pre_hash, &seal)
+		{
+			panic!("Invalid AuRa seal");
+		}
+
+		I::execute_block(Block::new(header, extrinsics));
+	}
+}
diff --git a/cumulus/pallets/parachain-system/src/validate_block/mod.rs b/cumulus/pallets/parachain-system/src/validate_block/mod.rs
index 1b47b1eace5..72bbb09ec60 100644
--- a/cumulus/pallets/parachain-system/src/validate_block/mod.rs
+++ b/cumulus/pallets/parachain-system/src/validate_block/mod.rs
@@ -69,7 +69,7 @@ fn set_and_run_with_validation_params<R>(mut params: ValidationParams, f: impl F
 /// ```
 #[macro_export]
 macro_rules! register_validate_block {
-	($runtime:ty, $block_executor:ty) => {
+	($runtime:ty, $block_executor:ty $( , )? ) => {
 		$crate::register_validate_block_impl!($runtime, $block_executor);
 	};
 }
diff --git a/cumulus/primitives/parachain-inherent/Cargo.toml b/cumulus/primitives/parachain-inherent/Cargo.toml
index 57bd179f793..5f344978369 100644
--- a/cumulus/primitives/parachain-inherent/Cargo.toml
+++ b/cumulus/primitives/parachain-inherent/Cargo.toml
@@ -15,16 +15,21 @@ sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "
 sp-trie = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
 sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", optional = true }
 
+# Polkadot dependencies
+polkadot-service = { git = "https://github.com/paritytech/polkadot", optional = true, branch = "master" }
+
 # Cumulus dependencies
 cumulus-primitives-core = { path = "../core", default-features = false }
 
 # Other dependencies
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = [ "derive" ] }
 tracing = { version = "0.1.22", optional = true }
+async-trait = { version = "0.1.42", optional = true }
 
 [features]
 default = [ "std" ]
 std = [
+	"async-trait",
 	"codec/std",
 	"cumulus-primitives-core/std",
 	"sp-inherents/std",
@@ -36,4 +41,5 @@ std = [
 	"sp-runtime",
 	"sc-client-api",
 	"sp-api",
+	"polkadot-service",
 ]
diff --git a/cumulus/primitives/parachain-inherent/src/client_side.rs b/cumulus/primitives/parachain-inherent/src/client_side.rs
index cedf63915e1..787782b3554 100644
--- a/cumulus/primitives/parachain-inherent/src/client_side.rs
+++ b/cumulus/primitives/parachain-inherent/src/client_side.rs
@@ -26,6 +26,7 @@ use cumulus_primitives_core::{
 	},
 	InboundDownwardMessage, InboundHrmpMessage, ParaId, PersistedValidationData,
 };
+use polkadot_service::{Client, ClientHandle, ExecuteWithClient};
 use sc_client_api::Backend;
 use sp_api::ProvideRuntimeApi;
 use sp_runtime::generic::BlockId;
@@ -210,7 +211,8 @@ impl ParachainInherentData {
 		PClient: ProvideRuntimeApi<PBlock>,
 		PClient::Api: ParachainHost<PBlock>,
 	{
-		let relay_chain_state = collect_relay_storage_proof(polkadot_backend, para_id, relay_parent)?;
+		let relay_chain_state =
+			collect_relay_storage_proof(polkadot_backend, para_id, relay_parent)?;
 		let downward_messages = retrieve_dmq_contents(polkadot_client, para_id, relay_parent)?;
 		let horizontal_messages =
 			retrieve_all_inbound_hrmp_channel_contents(polkadot_client, para_id, relay_parent)?;
@@ -222,4 +224,68 @@ impl ParachainInherentData {
 			relay_chain_state,
 		})
 	}
+
+	/// Create the [`ParachainInherentData`] at the given `relay_parent`.
+	///
+	/// Returns `None` if the creation failed.
+	pub fn create_at_with_client(
+		relay_parent: PHash,
+		polkadot_client: &Client,
+		relay_chain_backend: &impl Backend<PBlock>,
+		validation_data: &PersistedValidationData,
+		para_id: ParaId,
+	) -> Option<ParachainInherentData> {
+		polkadot_client.execute_with(CreateAtWithClient {
+			relay_chain_backend,
+			validation_data,
+			para_id,
+			relay_parent,
+		})
+	}
+}
+
+#[async_trait::async_trait]
+impl sp_inherents::InherentDataProvider for ParachainInherentData {
+	fn provide_inherent_data(
+		&self,
+		inherent_data: &mut sp_inherents::InherentData,
+	) -> Result<(), sp_inherents::Error> {
+		inherent_data.put_data(crate::INHERENT_IDENTIFIER, &self)
+	}
+
+	async fn try_handle_error(
+		&self,
+		_: &sp_inherents::InherentIdentifier,
+		_: &[u8],
+	) -> Option<Result<(), sp_inherents::Error>> {
+		None
+	}
+}
+
+/// Special structure to run [`ParachainInherentData::create_at`] with a [`Client`].
+struct CreateAtWithClient<'a, B> {
+	relay_parent: PHash,
+	relay_chain_backend: &'a B,
+	validation_data: &'a PersistedValidationData,
+	para_id: ParaId,
+}
+
+impl<'a, B> ExecuteWithClient for CreateAtWithClient<'a, B>
+where
+	B: Backend<PBlock>,
+{
+	type Output = Option<ParachainInherentData>;
+
+	fn execute_with_client<Client, Api, Backend>(
+		self,
+		client: std::sync::Arc<Client>,
+	) -> Self::Output where Client: ProvideRuntimeApi<PBlock>, Client::Api: ParachainHost<PBlock> {
+		ParachainInherentData::create_at(
+			self.relay_parent,
+			&*client,
+			self.relay_chain_backend,
+			self.validation_data,
+			self.para_id,
+		)
+	}
 }
diff --git a/cumulus/rococo-parachains/Cargo.toml b/cumulus/rococo-parachains/Cargo.toml
index 8110c125a2b..51d2544d15d 100644
--- a/cumulus/rococo-parachains/Cargo.toml
+++ b/cumulus/rococo-parachains/Cargo.toml
@@ -46,24 +46,29 @@ sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch
 sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" }
-sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "master" }
+substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "master" }
 
 # RPC related dependencies
 jsonrpc-core = "15.1.0"
 
 # Cumulus dependencies
 cumulus-client-cli = { path = "../client/cli" }
+cumulus-client-consensus-aura = { path = "../client/consensus/aura" }
 cumulus-client-consensus-relay-chain = { path = "../client/consensus/relay-chain" }
+cumulus-client-consensus-common = { path = "../client/consensus/common" }
 cumulus-client-collator = { path = "../client/collator" }
 cumulus-client-service = { path = "../client/service" }
 cumulus-client-network = { path = "../client/network" }
 cumulus-primitives-core = { path = "../primitives/core" }
+cumulus-primitives-parachain-inherent = { path = "../primitives/parachain-inherent" }
 
 # Polkadot dependencies
 polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" }
diff --git a/cumulus/rococo-parachains/runtime/Cargo.toml b/cumulus/rococo-parachains/runtime/Cargo.toml
index 1b97a0e2094..a07da525d46 100644
--- a/cumulus/rococo-parachains/runtime/Cargo.toml
+++ b/cumulus/rococo-parachains/runtime/Cargo.toml
@@ -23,6 +23,7 @@ sp-offchain = { git = "https://github.com/paritytech/substrate", default-feature
 sp-block-builder = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
 sp-transaction-pool = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
 sp-inherents = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
+sp-consensus-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
 
 frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
 frame-executive = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
@@ -33,8 +34,10 @@ pallet-randomness-collective-flip = { git = "https://github.com/paritytech/subst
 pallet-timestamp = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
 pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
 pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
+pallet-aura = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
 
 # Cumulus dependencies
+cumulus-pallet-aura-ext = { path = "../../pallets/aura-ext", default-features = false }
 cumulus-pallet-parachain-system = { path = "../../pallets/parachain-system", default-features = false }
 cumulus-primitives-core = { path = "../../primitives/core", default-features = false }
 cumulus-primitives-utility = { path = "../../primitives/utility", default-features = false }
@@ -85,6 +88,7 @@ std = [
 	"pallet-transaction-payment/std",
 	"parachain-info/std",
 	"rococo-parachain-primitives/std",
+	"cumulus-pallet-aura-ext/std",
 	"cumulus-pallet-dmp-queue/std",
 	"cumulus-pallet-parachain-system/std",
 	"cumulus-pallet-xcmp-queue/std",
@@ -95,4 +99,6 @@ std = [
 	"xcm/std",
 	"xcm-builder/std",
 	"xcm-executor/std",
+	"pallet-aura/std",
+	"sp-consensus-aura/std",
 ]
diff --git a/cumulus/rococo-parachains/runtime/src/lib.rs b/cumulus/rococo-parachains/runtime/src/lib.rs
index 9487c7313b0..484234d0644 100644
--- a/cumulus/rococo-parachains/runtime/src/lib.rs
+++ b/cumulus/rococo-parachains/runtime/src/lib.rs
@@ -52,6 +52,7 @@ pub use pallet_timestamp::Call as TimestampCall;
 #[cfg(any(feature = "std", test))]
 pub use sp_runtime::BuildStorage;
 pub use sp_runtime::{Perbill, Permill};
+pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;
 
 // XCM imports
 use polkadot_parachain::primitives::Sibling;
@@ -71,7 +72,9 @@ use frame_support::traits::Contains;
 pub type SessionHandlers = ();
 
 impl_opaque_keys! {
-	pub struct SessionKeys {}
+	pub struct SessionKeys {
+		pub aura: Aura,
+	}
 }
 
 /// This runtime version.
@@ -85,7 +88,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
 	transaction_version: 1,
 };
 
-pub const MILLISECS_PER_BLOCK: u64 = 6000;
+pub const MILLISECS_PER_BLOCK: u64 = 12000;
 
 pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK;
 
@@ -248,6 +251,8 @@ impl cumulus_pallet_parachain_system::Config for Runtime {
 
 impl parachain_info::Config for Runtime {}
 
+impl cumulus_pallet_aura_ext::Config for Runtime {}
+
 parameter_types! {
 	pub const RocLocation: MultiLocation = X1(Parent);
 	pub const RococoNetwork: NetworkId = NetworkId::Polkadot;
@@ -419,14 +424,8 @@ impl pallet_assets::Config for Runtime {
 	type WeightInfo = pallet_assets::weights::SubstrateWeight<Runtime>;
 }
 
-#[test]
-fn encode_call() {
-	let hash = hex_literal::hex!["0af9fef6f950ca3ac8ac4766200454b1039ffb7b2d0827fffd5e47bd43761437"].into();
-	let call = Call::ParachainSystem(cumulus_pallet_parachain_system::Call::authorize_upgrade(hash));
-	assert_eq!(
-		hex::encode(codec::Encode::encode(&call)),
-		"14030af9fef6f950ca3ac8ac4766200454b1039ffb7b2d0827fffd5e47bd43761437",
-	);
+impl pallet_aura::Config for Runtime {
+	type AuthorityId = AuraId;
 }
 
 construct_runtime! {
@@ -447,6 +446,9 @@ construct_runtime! {
 		Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 30,
 		Assets: pallet_assets::{Pallet, Call, Storage, Event<T>} = 31,
 
+		Aura: pallet_aura::{Pallet, Config<T>},
+		AuraExt: cumulus_pallet_aura_ext::{Pallet, Config},
+
 		// XCM helpers.
 		XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event<T>} = 50,
 		PolkadotXcm: pallet_xcm::{Pallet, Call, Event<T>, Origin} = 51,
@@ -496,7 +498,7 @@ impl_runtime_apis! {
 		}
 
 		fn execute_block(block: Block) {
-			Executive::execute_block(block)
+			Executive::execute_block(block);
 		}
 
 		fn initialize_block(header: &<Block as BlockT>::Header) {
@@ -556,6 +558,19 @@ impl_runtime_apis! {
 			SessionKeys::generate(seed)
 		}
 	}
+
+	impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {
+		fn slot_duration() -> sp_consensus_aura::SlotDuration {
+			sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration())
+		}
+
+		fn authorities() -> Vec<AuraId> {
+			Aura::authorities()
+		}
+	}
 }
 
-cumulus_pallet_parachain_system::register_validate_block!(Runtime, Executive);
+cumulus_pallet_parachain_system::register_validate_block!(
+	Runtime,
+	cumulus_pallet_aura_ext::BlockExecutor::<Runtime, Executive>,
+);
diff --git a/cumulus/rococo-parachains/shell-runtime/src/lib.rs b/cumulus/rococo-parachains/shell-runtime/src/lib.rs
index 58d7a42200e..413fcab0d30 100644
--- a/cumulus/rococo-parachains/shell-runtime/src/lib.rs
+++ b/cumulus/rococo-parachains/shell-runtime/src/lib.rs
@@ -209,8 +209,8 @@ impl Config for XcmConfig {
 	type IsTeleporter = ();	// balances not supported
 	type LocationInverter = LocationInverter<Ancestry>;
 	type Barrier = AllowUnpaidExecutionFrom<JustTheParent>;
-	type Weigher = FixedWeightBounds<UnitWeightCost, Call>;		// balances not supported
-	type Trader = ();		// balances not supported
+	type Weigher = FixedWeightBounds<UnitWeightCost, Call>;	// balances not supported
+	type Trader = ();	// balances not supported
 	type ResponseHandler = ();	// Don't handle responses for now.
 }
 
@@ -219,16 +219,6 @@ impl cumulus_pallet_xcm::Config for Runtime {
 	type XcmExecutor = XcmExecutor<XcmConfig>;
 }
 
-#[test]
-fn encode_call() {
-	let hash = hex_literal::hex!["0af9fef6f950ca3ac8ac4766200454b1039ffb7b2d0827fffd5e47bd43761437"].into();
-	let call = Call::ParachainSystem(cumulus_pallet_parachain_system::Call::authorize_upgrade(hash));
-	assert_eq!(
-		hex::encode(codec::Encode::encode(&call)),
-		"01030af9fef6f950ca3ac8ac4766200454b1039ffb7b2d0827fffd5e47bd43761437",
-	);
-}
-
 construct_runtime! {
 	pub enum Runtime where
 		Block = Block,
diff --git a/cumulus/rococo-parachains/src/chain_spec.rs b/cumulus/rococo-parachains/src/chain_spec.rs
index 4f3cf3bc42d..20413b0b445 100644
--- a/cumulus/rococo-parachains/src/chain_spec.rs
+++ b/cumulus/rococo-parachains/src/chain_spec.rs
@@ -16,11 +16,12 @@
 
 use cumulus_primitives_core::ParaId;
 use hex_literal::hex;
+use parachain_runtime::AuraId;
 use rococo_parachain_primitives::{AccountId, Signature};
 use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};
 use sc_service::ChainType;
 use serde::{Deserialize, Serialize};
-use sp_core::{sr25519, Pair, Public};
+use sp_core::{sr25519, Pair, Public, crypto::UncheckedInto};
 use sp_runtime::traits::{IdentifyAccount, Verify};
 
 /// Specialized `ChainSpec` for the normal parachain runtime.
@@ -71,6 +72,10 @@ pub fn get_chain_spec(id: ParaId) -> ChainSpec {
 		move || {
 			testnet_genesis(
 				get_account_id_from_seed::<sr25519::Public>("Alice"),
+				vec![
+					get_from_seed::<AuraId>("Alice"),
+					get_from_seed::<AuraId>("Bob"),
+				],
 				vec![
 					get_account_id_from_seed::<sr25519::Public>("Alice"),
 					get_account_id_from_seed::<sr25519::Public>("Bob"),
@@ -124,6 +129,12 @@ pub fn staging_test_net(id: ParaId) -> ChainSpec {
 		move || {
 			testnet_genesis(
 				hex!["9ed7705e3c7da027ba0583a22a3212042f7e715d3c168ba14f1424e2bc111d00"].into(),
+				vec![
+					// $secret//one
+					hex!["aad9fa2249f87a210a0f93400b7f90e47b810c6d65caa0ca3f5af982904c2a33"].unchecked_into(),
+					// $secret//two
+					hex!["d47753f0cca9dd8da00c70e82ec4fc5501a69c49a5952a643d18802837c88212"].unchecked_into(),
+				],
 				vec![
 					hex!["9ed7705e3c7da027ba0583a22a3212042f7e715d3c168ba14f1424e2bc111d00"].into(),
 				],
@@ -143,6 +154,7 @@ pub fn staging_test_net(id: ParaId) -> ChainSpec {
 
 fn testnet_genesis(
 	root_key: AccountId,
+	initial_authorities: Vec<AuraId>,
 	endowed_accounts: Vec<AccountId>,
 	id: ParaId,
 ) -> parachain_runtime::GenesisConfig {
@@ -162,6 +174,10 @@ fn testnet_genesis(
 		},
 		pallet_sudo: parachain_runtime::SudoConfig { key: root_key },
 		parachain_info: parachain_runtime::ParachainInfoConfig { parachain_id: id },
+		pallet_aura: parachain_runtime::AuraConfig {
+			authorities: initial_authorities,
+		},
+		cumulus_pallet_aura_ext: Default::default(),
 	}
 }
 
diff --git a/cumulus/rococo-parachains/src/command.rs b/cumulus/rococo-parachains/src/command.rs
index 174cf132688..2a2c0bfa8f8 100644
--- a/cumulus/rococo-parachains/src/command.rs
+++ b/cumulus/rococo-parachains/src/command.rs
@@ -19,8 +19,8 @@ use crate::{
 	cli::{Cli, RelayChainCli, Subcommand},
 };
 use codec::Encode;
-use cumulus_primitives_core::ParaId;
 use cumulus_client_service::genesis::generate_genesis_block;
+use cumulus_primitives_core::ParaId;
 use log::info;
 use parachain_runtime::Block;
 use polkadot_parachain::primitives::AccountIdConversion;
@@ -28,9 +28,7 @@ use sc_cli::{
 	ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams,
 	NetworkParams, Result, RuntimeVersion, SharedParams, SubstrateCli,
 };
-use sc_service::{
-	config::{BasePath, PrometheusConfig},
-};
+use sc_service::config::{BasePath, PrometheusConfig};
 use sp_core::hexdisplay::HexDisplay;
 use sp_runtime::traits::Block as BlockT;
 use std::{io::Write, net::SocketAddr};
@@ -157,13 +155,19 @@ macro_rules! construct_async_run {
 		let runner = $cli.create_runner($cmd)?;
 		if use_shell_runtime(&runner.config().chain_spec) {
 			runner.async_run(|$config| {
-				let $components = new_partial::<shell_runtime::RuntimeApi, ShellRuntimeExecutor>(&$config)?;
+				let $components = new_partial::<shell_runtime::RuntimeApi, ShellRuntimeExecutor, _>(
+					&$config,
+					crate::service::shell_build_import_queue,
+				)?;
 				let task_manager = $components.task_manager;
 				{ $( $code )* }.map(|v| (v, task_manager))
 			})
 		} else {
 			runner.async_run(|$config| {
-				let $components = new_partial::<parachain_runtime::RuntimeApi, RuntimeExecutor>(&$config)?;
+				let $components = new_partial::<parachain_runtime::RuntimeApi, RuntimeExecutor, _>(
+					&$config,
+					crate::service::build_import_queue,
+				)?;
 				let task_manager = $components.task_manager;
 				{ $( $code )* }.map(|v| (v, task_manager))
 			})
@@ -180,18 +184,26 @@ pub fn run() -> Result<()> {
 			let runner = cli.create_runner(cmd)?;
 			runner.sync_run(|config| cmd.run(config.chain_spec, config.network))
 		}
-		Some(Subcommand::CheckBlock(cmd)) => construct_async_run! (|components, cli, cmd, config| {
-			Ok(cmd.run(components.client, components.import_queue))
-		}),
-		Some(Subcommand::ExportBlocks(cmd)) => construct_async_run! (|components, cli, cmd, config| {
-			Ok(cmd.run(components.client, config.database))
-		}),
-		Some(Subcommand::ExportState(cmd)) => construct_async_run! (|components, cli, cmd, config| {
-			Ok(cmd.run(components.client, config.chain_spec))
-		}),
-		Some(Subcommand::ImportBlocks(cmd)) => construct_async_run! (|components, cli, cmd, config| {
-			Ok(cmd.run(components.client, components.import_queue))
-		}),
+		Some(Subcommand::CheckBlock(cmd)) => {
+			construct_async_run!(|components, cli, cmd, config| {
+				Ok(cmd.run(components.client, components.import_queue))
+			})
+		}
+		Some(Subcommand::ExportBlocks(cmd)) => {
+			construct_async_run!(|components, cli, cmd, config| {
+				Ok(cmd.run(components.client, config.database))
+			})
+		}
+		Some(Subcommand::ExportState(cmd)) => {
+			construct_async_run!(|components, cli, cmd, config| {
+				Ok(cmd.run(components.client, config.chain_spec))
+			})
+		}
+		Some(Subcommand::ImportBlocks(cmd)) => {
+			construct_async_run!(|components, cli, cmd, config| {
+				Ok(cmd.run(components.client, components.import_queue))
+			})
+		}
 		Some(Subcommand::PurgeChain(cmd)) => {
 			let runner = cli.create_runner(cmd)?;
 
@@ -213,7 +225,7 @@ pub fn run() -> Result<()> {
 				cmd.run(config, polkadot_config)
 			})
 		}
-		Some(Subcommand::Revert(cmd)) => construct_async_run! (|components, cli, cmd, config| {
+		Some(Subcommand::Revert(cmd)) => construct_async_run!(|components, cli, cmd, config| {
 			Ok(cmd.run(components.client, components.backend))
 		}),
 		Some(Subcommand::ExportGenesisState(params)) => {
diff --git a/cumulus/rococo-parachains/src/service.rs b/cumulus/rococo-parachains/src/service.rs
index 55e5c5bbcca..d0edd0d9c55 100644
--- a/cumulus/rococo-parachains/src/service.rs
+++ b/cumulus/rococo-parachains/src/service.rs
@@ -14,24 +14,31 @@
 // You should have received a copy of the GNU General Public License
 // along with Cumulus.  If not, see <http://www.gnu.org/licenses/>.
 
-use cumulus_client_consensus_relay_chain::{
-	build_relay_chain_consensus, BuildRelayChainConsensusParams,
+use cumulus_client_consensus_aura::{
+	build_aura_consensus, BuildAuraConsensusParams, SlotProportion,
 };
+use cumulus_client_consensus_common::ParachainConsensus;
 use cumulus_client_network::build_block_announce_validator;
 use cumulus_client_service::{
 	prepare_node_config, start_collator, start_full_node, StartCollatorParams, StartFullNodeParams,
 };
 use cumulus_primitives_core::ParaId;
 use polkadot_primitives::v0::CollatorPair;
-use rococo_parachain_primitives::Block;
+use rococo_parachain_primitives::{Block, Hash};
+
+use sc_client_api::ExecutorProvider;
 use sc_executor::native_executor_instance;
-pub use sc_executor::NativeExecutor;
+use sc_network::NetworkService;
 use sc_service::{Configuration, PartialComponents, Role, TFullBackend, TFullClient, TaskManager};
-use sc_telemetry::{Telemetry, TelemetryWorker, TelemetryWorkerHandle};
+use sc_telemetry::{Telemetry, TelemetryHandle, TelemetryWorker, TelemetryWorkerHandle};
 use sp_api::ConstructRuntimeApi;
+use sp_consensus::SlotData;
+use sp_keystore::SyncCryptoStorePtr;
 use sp_runtime::traits::BlakeTwo256;
-use sp_trie::PrefixedMemoryDB;
 use std::sync::Arc;
+use substrate_prometheus_endpoint::Registry;
+
+pub use sc_executor::NativeExecutor;
 
 // Native executor instance.
 native_executor_instance!(
@@ -51,14 +58,15 @@ native_executor_instance!(
 ///
 /// Use this macro if you don't actually need the full service, but just the builder in order to
 /// be able to perform chain operations.
-pub fn new_partial<RuntimeApi, Executor>(
+pub fn new_partial<RuntimeApi, Executor, BIQ>(
 	config: &Configuration,
+	build_import_queue: BIQ,
 ) -> Result<
 	PartialComponents<
 		TFullClient<Block, RuntimeApi, Executor>,
 		TFullBackend<Block>,
 		(),
-		sp_consensus::import_queue::BasicQueue<Block, PrefixedMemoryDB<BlakeTwo256>>,
+		sp_consensus::DefaultImportQueue<Block, TFullClient<Block, RuntimeApi, Executor>>,
 		sc_transaction_pool::FullPool<Block, TFullClient<Block, RuntimeApi, Executor>>,
 		(Option<Telemetry>, Option<TelemetryWorkerHandle>),
 	>,
@@ -79,6 +87,15 @@ where
 		+ sp_block_builder::BlockBuilder<Block>,
 	sc_client_api::StateBackendFor<TFullBackend<Block>, Block>: sp_api::StateBackend<BlakeTwo256>,
 	Executor: sc_executor::NativeExecutionDispatch + 'static,
+	BIQ: FnOnce(
+		Arc<TFullClient<Block, RuntimeApi, Executor>>,
+		&Configuration,
+		Option<TelemetryHandle>,
+		&TaskManager,
+	) -> Result<
+		sp_consensus::DefaultImportQueue<Block, TFullClient<Block, RuntimeApi, Executor>>,
+		sc_service::Error,
+	>,
 {
 	let telemetry = config
 		.telemetry_endpoints
@@ -105,8 +122,6 @@ where
 		telemetry
 	});
 
-	let registry = config.prometheus_registry();
-
 	let transaction_pool = sc_transaction_pool::BasicPool::new_full(
 		config.transaction_pool.clone(),
 		config.role.is_authority().into(),
@@ -115,12 +130,11 @@ where
 		client.clone(),
 	);
 
-	let import_queue = cumulus_client_consensus_relay_chain::import_queue(
-		client.clone(),
+	let import_queue = build_import_queue(
 		client.clone(),
-		|_, _| async { Ok(sp_timestamp::InherentDataProvider::from_system_time()) },
-		&task_manager.spawn_essential_handle(),
-		registry.clone(),
+		config,
+		telemetry.as_ref().map(|telemetry| telemetry.handle()),
+		&task_manager,
 	)?;
 
 	let params = PartialComponents {
@@ -141,12 +155,14 @@ where
 ///
 /// This is the actual implementation that is abstract over the executor and the runtime api.
 #[sc_tracing::logging::prefix_logs_with("Parachain")]
-async fn start_node_impl<RuntimeApi, Executor, RB>(
+async fn start_node_impl<RuntimeApi, Executor, RB, BIQ, BIC>(
 	parachain_config: Configuration,
 	collator_key: CollatorPair,
 	polkadot_config: Configuration,
 	id: ParaId,
 	rpc_ext_builder: RB,
+	build_import_queue: BIQ,
+	build_consensus: BIC,
 ) -> sc_service::error::Result<(TaskManager, Arc<TFullClient<Block, RuntimeApi, Executor>>)>
 where
 	RuntimeApi: ConstructRuntimeApi<Block, TFullClient<Block, RuntimeApi, Executor>>
@@ -168,6 +184,26 @@ where
 		) -> jsonrpc_core::IoHandler<sc_rpc::Metadata>
 		+ Send
 		+ 'static,
+	BIQ: FnOnce(
+		Arc<TFullClient<Block, RuntimeApi, Executor>>,
+		&Configuration,
+		Option<TelemetryHandle>,
+		&TaskManager,
+	) -> Result<
+		sp_consensus::DefaultImportQueue<Block, TFullClient<Block, RuntimeApi, Executor>>,
+		sc_service::Error,
+	>,
+	BIC: FnOnce(
+		Arc<TFullClient<Block, RuntimeApi, Executor>>,
+		Option<&Registry>,
+		Option<TelemetryHandle>,
+		&TaskManager,
+		&polkadot_service::NewFull<polkadot_service::Client>,
+		Arc<sc_transaction_pool::FullPool<Block, TFullClient<Block, RuntimeApi, Executor>>>,
+		Arc<NetworkService<Block, Hash>>,
+		SyncCryptoStorePtr,
+		bool,
+	) -> Result<Box<dyn ParachainConsensus<Block>>, sc_service::Error>,
 {
 	if matches!(parachain_config.role, Role::Light) {
 		return Err("Light client not supported!".into());
@@ -175,10 +211,10 @@ where
 
 	let parachain_config = prepare_node_config(parachain_config);
 
-	let params = new_partial::<RuntimeApi, Executor>(&parachain_config)?;
+	let params = new_partial::<RuntimeApi, Executor, BIQ>(&parachain_config, build_import_queue)?;
 	let (mut telemetry, telemetry_worker_handle) = params.other;
 
-	let polkadot_full_node = cumulus_client_service::build_polkadot_full_node(
+	let relay_chain_full_node = cumulus_client_service::build_polkadot_full_node(
 		polkadot_config,
 		collator_key.clone(),
 		telemetry_worker_handle,
@@ -191,12 +227,13 @@ where
 	let client = params.client.clone();
 	let backend = params.backend.clone();
 	let block_announce_validator = build_block_announce_validator(
-		polkadot_full_node.client.clone(),
+		relay_chain_full_node.client.clone(),
 		id,
-		Box::new(polkadot_full_node.network.clone()),
-		polkadot_full_node.backend.clone(),
+		Box::new(relay_chain_full_node.network.clone()),
+		relay_chain_full_node.backend.clone(),
 	);
 
+	let force_authoring = parachain_config.force_authoring;
 	let validator = parachain_config.role.is_authority();
 	let prometheus_registry = parachain_config.prometheus_registry().cloned();
 	let transaction_pool = params.transaction_pool.clone();
@@ -238,25 +275,19 @@ where
 	};
 
 	if validator {
-		let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording(
-			task_manager.spawn_handle(),
+		let parachain_consensus = build_consensus(
 			client.clone(),
-			transaction_pool,
 			prometheus_registry.as_ref(),
-			telemetry.as_ref().map(|x| x.handle()),
-		);
-		let spawner = task_manager.spawn_handle();
+			telemetry.as_ref().map(|t| t.handle()),
+			&task_manager,
+			&relay_chain_full_node,
+			transaction_pool,
+			network,
+			params.keystore_container.sync_keystore(),
+			force_authoring,
+		)?;
 
-		let parachain_consensus = build_relay_chain_consensus(BuildRelayChainConsensusParams {
-			para_id: id,
-			proposer_factory,
-			create_inherent_data_providers: |_, _| async {
-				Ok(sp_timestamp::InherentDataProvider::from_system_time())
-			},
-			block_import: client.clone(),
-			relay_chain_client: polkadot_full_node.client.clone(),
-			relay_chain_backend: polkadot_full_node.backend.clone(),
-		});
+		let spawner = task_manager.spawn_handle();
 
 		let params = StartCollatorParams {
 			para_id: id,
@@ -265,7 +296,7 @@ where
 			client: client.clone(),
 			task_manager: &mut task_manager,
 			collator_key,
-			relay_chain_full_node: polkadot_full_node,
+			relay_chain_full_node,
 			spawner,
 			backend,
 			parachain_consensus,
@@ -278,7 +309,7 @@ where
 			announce_block,
 			task_manager: &mut task_manager,
 			para_id: id,
-			polkadot_full_node,
+			polkadot_full_node: relay_chain_full_node,
 		};
 
 		start_full_node(params)?;
@@ -289,6 +320,58 @@ where
 	Ok((task_manager, client))
 }
 
+/// Build the import queue for the "default" runtime.
+pub fn build_import_queue(
+	client: Arc<TFullClient<Block, parachain_runtime::RuntimeApi, RuntimeExecutor>>,
+	config: &Configuration,
+	telemetry: Option<TelemetryHandle>,
+	task_manager: &TaskManager,
+) -> Result<
+	sp_consensus::DefaultImportQueue<
+		Block,
+		TFullClient<Block, shell_runtime::RuntimeApi, ShellRuntimeExecutor>,
+	>,
+	sc_service::Error,
+> {
+	let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?;
+
+	let block_import = cumulus_client_consensus_aura::AuraBlockImport::<
+		_,
+		_,
+		_,
+		sp_consensus_aura::sr25519::AuthorityPair,
+	>::new(client.clone(), client.clone());
+
+	cumulus_client_consensus_aura::import_queue::<
+		sp_consensus_aura::sr25519::AuthorityPair,
+		_,
+		_,
+		_,
+		_,
+		_,
+		_,
+	>(cumulus_client_consensus_aura::ImportQueueParams {
+		block_import,
+		client: client.clone(),
+		create_inherent_data_providers: move |_, _| async move {
+			let time = sp_timestamp::InherentDataProvider::from_system_time();
+
+			let slot =
+				sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_duration(
+					*time,
+					slot_duration.slot_duration(),
+				);
+
+			Ok((time, slot))
+		},
+		registry: config.prometheus_registry().clone(),
+		can_author_with: sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()),
+		spawner: &task_manager.spawn_essential_handle(),
+		telemetry,
+	})
+	.map_err(Into::into)
+}
+
 /// Start a rococo-test parachain node.
 pub async fn start_node(
 	parachain_config: Configuration,
@@ -298,16 +381,114 @@ pub async fn start_node(
 ) -> sc_service::error::Result<
 	(TaskManager, Arc<TFullClient<Block, parachain_runtime::RuntimeApi, RuntimeExecutor>>)
 > {
-	start_node_impl::<parachain_runtime::RuntimeApi, RuntimeExecutor, _>(
+	start_node_impl::<parachain_runtime::RuntimeApi, RuntimeExecutor, _, _, _>(
 		parachain_config,
 		collator_key,
 		polkadot_config,
 		id,
 		|_| Default::default(),
+		build_import_queue,
+		|client,
+		 prometheus_registry,
+		 telemetry,
+		 task_manager,
+		 relay_chain_node,
+		 transaction_pool,
+		 sync_oracle,
+		 keystore,
+		 force_authoring| {
+			let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?;
+
+			let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording(
+				task_manager.spawn_handle(),
+				client.clone(),
+				transaction_pool,
+				prometheus_registry.clone(),
+				telemetry.clone(),
+			);
+
+			let relay_chain_backend = relay_chain_node.backend.clone();
+			let relay_chain_client = relay_chain_node.client.clone();
+			Ok(build_aura_consensus::<
+				sp_consensus_aura::sr25519::AuthorityPair,
+				_,
+				_,
+				_,
+				_,
+				_,
+				_,
+				_,
+				_,
+				_,
+			>(BuildAuraConsensusParams {
+				proposer_factory,
+				create_inherent_data_providers: move |_, (relay_parent, validation_data)| {
+					let parachain_inherent =
+					cumulus_primitives_parachain_inherent::ParachainInherentData::create_at_with_client(
+						relay_parent,
+						&relay_chain_client,
+						&*relay_chain_backend,
+						&validation_data,
+						id,
+					);
+					async move {
+						let time = sp_timestamp::InherentDataProvider::from_system_time();
+
+						let slot =
+						sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_duration(
+							*time,
+							slot_duration.slot_duration(),
+						);
+
+						let parachain_inherent = parachain_inherent.ok_or_else(|| {
+							Box::<dyn std::error::Error + Send + Sync>::from(
+								"Failed to create parachain inherent",
+							)
+						})?;
+						Ok((time, slot, parachain_inherent))
+					}
+				},
+				block_import: client.clone(),
+				relay_chain_client: relay_chain_node.client.clone(),
+				relay_chain_backend: relay_chain_node.backend.clone(),
+				para_client: client.clone(),
+				backoff_authoring_blocks: Option::<()>::None,
+				sync_oracle,
+				keystore,
+				force_authoring,
+				slot_duration,
+				// We got around 500ms for proposing
+				block_proposal_slot_portion: SlotProportion::new(1f32 / 24f32),
+				telemetry,
+			}))
+		},
 	)
 	.await
 }
 
+/// Build the import queue for the shell runtime.
+pub fn shell_build_import_queue(
+	client: Arc<TFullClient<Block, shell_runtime::RuntimeApi, ShellRuntimeExecutor>>,
+	config: &Configuration,
+	_: Option<TelemetryHandle>,
+	task_manager: &TaskManager,
+) -> Result<
+	sp_consensus::DefaultImportQueue<
+		Block,
+		TFullClient<Block, shell_runtime::RuntimeApi, ShellRuntimeExecutor>,
+	>,
+	sc_service::Error,
+> {
+	cumulus_client_consensus_relay_chain::import_queue(
+		client.clone(),
+		client,
+		|_, _| async { Ok(()) },
+		&task_manager.spawn_essential_handle(),
+		config.prometheus_registry().clone(),
+	)
+	.map_err(Into::into)
+}
+
 /// Start a rococo-shell parachain node.
 pub async fn start_shell_node(
 	parachain_config: Configuration,
@@ -317,12 +498,65 @@ pub async fn start_shell_node(
 ) -> sc_service::error::Result<
 	(TaskManager, Arc<TFullClient<Block, shell_runtime::RuntimeApi, ShellRuntimeExecutor>>)
 > {
-	start_node_impl::<shell_runtime::RuntimeApi, ShellRuntimeExecutor, _>(
+	start_node_impl::<shell_runtime::RuntimeApi, ShellRuntimeExecutor, _, _, _>(
 		parachain_config,
 		collator_key,
 		polkadot_config,
 		id,
 		|_| Default::default(),
+		shell_build_import_queue,
+		|client,
+		 prometheus_registry,
+		 telemetry,
+		 task_manager,
+		 relay_chain_node,
+		 transaction_pool,
+		 _,
+		 _,
+		 _| {
+			let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording(
+				task_manager.spawn_handle(),
+				client.clone(),
+				transaction_pool,
+				prometheus_registry.clone(),
+				telemetry.clone(),
+			);
+
+			let relay_chain_backend = relay_chain_node.backend.clone();
+			let relay_chain_client = relay_chain_node.client.clone();
+
+			Ok(
+				cumulus_client_consensus_relay_chain::build_relay_chain_consensus(
+					cumulus_client_consensus_relay_chain::BuildRelayChainConsensusParams {
+						para_id: id,
+						proposer_factory,
+						block_import: client.clone(),
+						relay_chain_client: relay_chain_node.client.clone(),
+						relay_chain_backend: relay_chain_node.backend.clone(),
+						create_inherent_data_providers:
+							move |_, (relay_parent, validation_data)| {
+								let parachain_inherent =
+					cumulus_primitives_parachain_inherent::ParachainInherentData::create_at_with_client(
+						relay_parent,
+						&relay_chain_client,
+						&*relay_chain_backend,
+							&validation_data,
+							id,
+					);
+								async move {
+									let parachain_inherent =
+										parachain_inherent.ok_or_else(|| {
+											Box::<dyn std::error::Error + Send + Sync>::from(
+												"Failed to create parachain inherent",
+											)
+										})?;
+									Ok(parachain_inherent)
+								}
+							},
+					},
+				),
+			)
+		},
 	)
 	.await
 }
diff --git a/cumulus/test/service/Cargo.toml b/cumulus/test/service/Cargo.toml
index 486febb1f23..268b9feee18 100644
--- a/cumulus/test/service/Cargo.toml
+++ b/cumulus/test/service/Cargo.toml
@@ -50,6 +50,7 @@ cumulus-client-consensus-relay-chain = { path = "../../client/consensus/relay-ch
 cumulus-client-network = { path = "../../client/network" }
 cumulus-client-service = { path = "../../client/service" }
 cumulus-primitives-core = { path = "../../primitives/core" }
+cumulus-primitives-parachain-inherent = { path = "../../primitives/parachain-inherent" }
 cumulus-test-runtime = { path = "../runtime" }
 cumulus-test-relay-validation-worker-provider = { path = "../relay-validation-worker-provider" }
 
@@ -60,6 +61,10 @@ jsonrpc-core = "15.1.0"
 futures = { version = "0.3.5" }
 tokio = { version = "0.2.21", features = ["macros"] }
 
+# Polkadot dependencies
+polkadot-test-runtime = { git = "https://github.com/paritytech/polkadot", branch = "master" }
+polkadot-test-service = { git = "https://github.com/paritytech/polkadot", branch = "master" }
+
 # Substrate dependencies
 sc-cli = { git = "https://github.com/paritytech/substrate", branch = "master" }
 substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "master" }
diff --git a/cumulus/test/service/src/lib.rs b/cumulus/test/service/src/lib.rs
index 6b10606d96b..fd4787eb20f 100644
--- a/cumulus/test/service/src/lib.rs
+++ b/cumulus/test/service/src/lib.rs
@@ -232,10 +232,31 @@ where
 			prometheus_registry.as_ref(),
 			None,
 		);
+
+		let relay_chain_client = relay_chain_full_node.client.clone();
+		let relay_chain_backend = relay_chain_full_node.backend.clone();
+
 		let parachain_consensus = cumulus_client_consensus_relay_chain::RelayChainConsensus::new(
 			para_id,
 			proposer_factory,
-			|_, _| async { Ok(sp_timestamp::InherentDataProvider::from_system_time()) },
+			move |_, (relay_parent, validation_data)| {
+				let parachain_inherent =
+					cumulus_primitives_parachain_inherent::ParachainInherentData::create_at(
+						relay_parent,
+						&*relay_chain_client,
+						&*relay_chain_backend,
+						&validation_data,
+						para_id,
+					);
+				async move {
+					let time = sp_timestamp::InherentDataProvider::from_system_time();
+
+					let parachain_inherent = parachain_inherent.ok_or_else(|| {
+						Box::<dyn std::error::Error + Send + Sync>::from(String::from("error"))
+					})?;
+					Ok((time, parachain_inherent))
+				}
+			},
 			client.clone(),
 			relay_chain_full_node.client.clone(),
 			relay_chain_full_node.backend.clone(),
-- 
GitLab