From 7830bae524c5f135fb1217931082933f1204e8b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bastian=20K=C3=B6cher?= <bkchr@users.noreply.github.com>
Date: Mon, 3 May 2021 17:21:13 +0200
Subject: [PATCH] Companion for Substrate#8526 (#2845)

* Update branch

* Make it compile

* Compile

* gate approval-checking logic (#2470)

* Fix build

* Updates

* Fix merge

* Adds missing crate

* Companion for Substrate#8386

https://github.com/paritytech/substrate/pull/8386

* Fix fix fix

* Fix

* Fix compilation

* Rewrite to `ParachainsInherentDataProvider`

* Make it compile

* Renamings

* Revert stuff

* Remove stale file

* Guide updates

* Update node/core/parachains-inherent/src/lib.rs

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

* Update node/core/parachains-inherent/src/lib.rs

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

* Apply suggestions from code review

* Reset accidental changes

* More

* Remove stale file

* update Substrate

Co-authored-by: Robert Habermeier <rphmeier@gmail.com>
Co-authored-by: Andronik Ordian <write@reusable.software>
Co-authored-by: parity-processbot <>
---
 polkadot/Cargo.lock                           | 339 +++++++++---------
 polkadot/Cargo.toml                           |   2 +-
 polkadot/erasure-coding/Cargo.toml            |   2 +-
 .../node/core/parachains-inherent/Cargo.toml  |  18 +
 .../node/core/parachains-inherent/src/lib.rs  | 138 +++++++
 polkadot/node/core/proposer/Cargo.toml        |  25 --
 polkadot/node/core/proposer/src/lib.rs        | 311 ----------------
 polkadot/node/overseer/src/lib.rs             |   1 -
 polkadot/node/service/Cargo.toml              |   7 +-
 polkadot/node/service/src/chain_spec.rs       |   2 +-
 polkadot/node/service/src/client.rs           |   4 +-
 polkadot/node/service/src/lib.rs              |  72 +++-
 .../src/node/subsystems-and-jobs.md           |  23 +-
 .../src/types/overseer-protocol.md            |   3 -
 polkadot/runtime/parachains/Cargo.toml        |   2 +-
 .../runtime/parachains/src/paras_inherent.rs  |   2 +-
 16 files changed, 402 insertions(+), 549 deletions(-)
 create mode 100644 polkadot/node/core/parachains-inherent/Cargo.toml
 create mode 100644 polkadot/node/core/parachains-inherent/src/lib.rs
 delete mode 100644 polkadot/node/core/proposer/Cargo.toml
 delete mode 100644 polkadot/node/core/proposer/src/lib.rs

diff --git a/polkadot/Cargo.lock b/polkadot/Cargo.lock
index 22b46657bd6..03d27165118 100644
--- a/polkadot/Cargo.lock
+++ b/polkadot/Cargo.lock
@@ -336,9 +336,9 @@ checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0"
 
 [[package]]
 name = "async-trait"
-version = "0.1.42"
+version = "0.1.48"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d"
+checksum = "36ea56748e10732c49404c153638a15ec3d6211ec5ff35d9bb20e13b93576adf"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1862,7 +1862,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
 [[package]]
 name = "fork-tree"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "parity-scale-codec",
 ]
@@ -1880,7 +1880,7 @@ dependencies = [
 [[package]]
 name = "frame-benchmarking"
 version = "3.1.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -1899,7 +1899,7 @@ dependencies = [
 [[package]]
 name = "frame-benchmarking-cli"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "Inflector",
  "chrono",
@@ -1922,7 +1922,7 @@ dependencies = [
 [[package]]
 name = "frame-election-provider-support"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -1935,7 +1935,7 @@ dependencies = [
 [[package]]
 name = "frame-executive"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -1950,7 +1950,7 @@ dependencies = [
 [[package]]
 name = "frame-metadata"
 version = "13.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "parity-scale-codec",
  "serde",
@@ -1961,7 +1961,7 @@ dependencies = [
 [[package]]
 name = "frame-support"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "bitflags",
  "frame-metadata",
@@ -1987,7 +1987,7 @@ dependencies = [
 [[package]]
 name = "frame-support-procedural"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "Inflector",
  "frame-support-procedural-tools",
@@ -1999,7 +1999,7 @@ dependencies = [
 [[package]]
 name = "frame-support-procedural-tools"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support-procedural-tools-derive",
  "proc-macro-crate 1.0.0",
@@ -2011,7 +2011,7 @@ dependencies = [
 [[package]]
 name = "frame-support-procedural-tools-derive"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2021,7 +2021,7 @@ dependencies = [
 [[package]]
 name = "frame-support-test"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-metadata",
  "frame-support",
@@ -2031,7 +2031,6 @@ dependencies = [
  "rustversion",
  "serde",
  "sp-core",
- "sp-inherents",
  "sp-io",
  "sp-runtime",
  "sp-state-machine",
@@ -2042,7 +2041,7 @@ dependencies = [
 [[package]]
 name = "frame-system"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "impl-trait-for-tuples",
@@ -2059,7 +2058,7 @@ dependencies = [
 [[package]]
 name = "frame-system-benchmarking"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -2073,7 +2072,7 @@ dependencies = [
 [[package]]
 name = "frame-system-rpc-runtime-api"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -2082,7 +2081,7 @@ dependencies = [
 [[package]]
 name = "frame-try-runtime"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "parity-scale-codec",
@@ -4465,7 +4464,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b"
 [[package]]
 name = "pallet-authority-discovery"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -4480,14 +4479,13 @@ dependencies = [
 [[package]]
 name = "pallet-authorship"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "frame-system",
  "impl-trait-for-tuples",
  "parity-scale-codec",
  "sp-authorship",
- "sp-inherents",
  "sp-runtime",
  "sp-std",
 ]
@@ -4495,7 +4493,7 @@ dependencies = [
 [[package]]
 name = "pallet-babe"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4518,7 +4516,7 @@ dependencies = [
 [[package]]
 name = "pallet-balances"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4547,7 +4545,7 @@ dependencies = [
 [[package]]
 name = "pallet-bounties"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4561,7 +4559,7 @@ dependencies = [
 [[package]]
 name = "pallet-collective"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4577,7 +4575,7 @@ dependencies = [
 [[package]]
 name = "pallet-democracy"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4592,7 +4590,7 @@ dependencies = [
 [[package]]
 name = "pallet-election-provider-multi-phase"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -4612,7 +4610,7 @@ dependencies = [
 [[package]]
 name = "pallet-elections-phragmen"
 version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4629,7 +4627,7 @@ dependencies = [
 [[package]]
 name = "pallet-grandpa"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4650,7 +4648,7 @@ dependencies = [
 [[package]]
 name = "pallet-identity"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "enumflags2",
  "frame-benchmarking",
@@ -4665,7 +4663,7 @@ dependencies = [
 [[package]]
 name = "pallet-im-online"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4684,7 +4682,7 @@ dependencies = [
 [[package]]
 name = "pallet-indices"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4700,7 +4698,7 @@ dependencies = [
 [[package]]
 name = "pallet-membership"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4715,7 +4713,7 @@ dependencies = [
 [[package]]
 name = "pallet-mmr"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "ckb-merkle-mountain-range",
  "frame-benchmarking",
@@ -4732,7 +4730,7 @@ dependencies = [
 [[package]]
 name = "pallet-mmr-primitives"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -4748,7 +4746,7 @@ dependencies = [
 [[package]]
 name = "pallet-mmr-rpc"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "jsonrpc-core",
  "jsonrpc-core-client",
@@ -4766,7 +4764,7 @@ dependencies = [
 [[package]]
 name = "pallet-multisig"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4781,7 +4779,7 @@ dependencies = [
 [[package]]
 name = "pallet-nicks"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -4794,7 +4792,7 @@ dependencies = [
 [[package]]
 name = "pallet-offences"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -4810,7 +4808,7 @@ dependencies = [
 [[package]]
 name = "pallet-offences-benchmarking"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -4832,7 +4830,7 @@ dependencies = [
 [[package]]
 name = "pallet-proxy"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4847,7 +4845,7 @@ dependencies = [
 [[package]]
 name = "pallet-randomness-collective-flip"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -4860,7 +4858,7 @@ dependencies = [
 [[package]]
 name = "pallet-recovery"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "enumflags2",
  "frame-support",
@@ -4874,7 +4872,7 @@ dependencies = [
 [[package]]
 name = "pallet-scheduler"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4889,7 +4887,7 @@ dependencies = [
 [[package]]
 name = "pallet-session"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -4908,7 +4906,7 @@ dependencies = [
 [[package]]
 name = "pallet-session-benchmarking"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -4924,7 +4922,7 @@ dependencies = [
 [[package]]
 name = "pallet-society"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -4937,7 +4935,7 @@ dependencies = [
 [[package]]
 name = "pallet-staking"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -4961,7 +4959,7 @@ dependencies = [
 [[package]]
 name = "pallet-staking-reward-curve"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "proc-macro-crate 1.0.0",
  "proc-macro2",
@@ -4972,7 +4970,7 @@ dependencies = [
 [[package]]
 name = "pallet-sudo"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -4985,7 +4983,7 @@ dependencies = [
 [[package]]
 name = "pallet-timestamp"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5003,7 +5001,7 @@ dependencies = [
 [[package]]
 name = "pallet-tips"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5018,7 +5016,7 @@ dependencies = [
 [[package]]
 name = "pallet-transaction-payment"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5034,7 +5032,7 @@ dependencies = [
 [[package]]
 name = "pallet-transaction-payment-rpc"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "jsonrpc-core",
  "jsonrpc-core-client",
@@ -5051,7 +5049,7 @@ dependencies = [
 [[package]]
 name = "pallet-transaction-payment-rpc-runtime-api"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "pallet-transaction-payment",
  "parity-scale-codec",
@@ -5062,7 +5060,7 @@ dependencies = [
 [[package]]
 name = "pallet-treasury"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5078,7 +5076,7 @@ dependencies = [
 [[package]]
 name = "pallet-utility"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5093,7 +5091,7 @@ dependencies = [
 [[package]]
 name = "pallet-vesting"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "enumflags2",
  "frame-benchmarking",
@@ -5938,26 +5936,19 @@ dependencies = [
 ]
 
 [[package]]
-name = "polkadot-node-core-proposer"
+name = "polkadot-node-core-parachains-inherent"
 version = "0.1.0"
 dependencies = [
+ "async-trait",
  "futures 0.3.14",
  "futures-timer 3.0.2",
  "polkadot-node-subsystem",
  "polkadot-overseer",
  "polkadot-primitives",
- "sc-basic-authorship",
- "sc-block-builder",
- "sc-client-api",
- "sc-telemetry",
- "sp-api",
  "sp-blockchain",
- "sp-consensus",
- "sp-core",
  "sp-inherents",
  "sp-runtime",
- "sp-transaction-pool",
- "substrate-prometheus-endpoint",
+ "thiserror",
  "tracing",
 ]
 
@@ -6505,7 +6496,7 @@ dependencies = [
  "polkadot-node-core-candidate-selection",
  "polkadot-node-core-candidate-validation",
  "polkadot-node-core-chain-api",
- "polkadot-node-core-proposer",
+ "polkadot-node-core-parachains-inherent",
  "polkadot-node-core-provisioner",
  "polkadot-node-core-runtime-api",
  "polkadot-node-primitives",
@@ -6521,6 +6512,7 @@ dependencies = [
  "polkadot-test-client",
  "rococo-runtime",
  "sc-authority-discovery",
+ "sc-basic-authorship",
  "sc-block-builder",
  "sc-chain-spec",
  "sc-client-api",
@@ -6528,6 +6520,7 @@ dependencies = [
  "sc-consensus",
  "sc-consensus-babe",
  "sc-consensus-slots",
+ "sc-consensus-uncles",
  "sc-executor",
  "sc-finality-grandpa",
  "sc-finality-grandpa-warp-sync",
@@ -6553,6 +6546,7 @@ dependencies = [
  "sp-session",
  "sp-state-machine",
  "sp-storage",
+ "sp-timestamp",
  "sp-transaction-pool",
  "sp-trie",
  "substrate-prometheus-endpoint",
@@ -7318,7 +7312,7 @@ dependencies = [
 [[package]]
 name = "remote-externalities"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "env_logger 0.8.2",
  "hex-literal",
@@ -7603,7 +7597,7 @@ dependencies = [
 [[package]]
 name = "sc-authority-discovery"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "async-trait",
  "derive_more",
@@ -7632,7 +7626,7 @@ dependencies = [
 [[package]]
 name = "sc-basic-authorship"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "futures 0.3.14",
  "futures-timer 3.0.2",
@@ -7655,7 +7649,7 @@ dependencies = [
 [[package]]
 name = "sc-block-builder"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "parity-scale-codec",
  "sc-client-api",
@@ -7671,7 +7665,7 @@ dependencies = [
 [[package]]
 name = "sc-chain-spec"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "impl-trait-for-tuples",
  "parity-scale-codec",
@@ -7692,7 +7686,7 @@ dependencies = [
 [[package]]
 name = "sc-chain-spec-derive"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "proc-macro-crate 1.0.0",
  "proc-macro2",
@@ -7703,7 +7697,7 @@ dependencies = [
 [[package]]
 name = "sc-cli"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "chrono",
  "fdlimit",
@@ -7741,7 +7735,7 @@ dependencies = [
 [[package]]
 name = "sc-client-api"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "derive_more",
  "fnv",
@@ -7775,7 +7769,7 @@ dependencies = [
 [[package]]
 name = "sc-client-db"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "blake2-rfc",
  "hash-db",
@@ -7805,7 +7799,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "parking_lot 0.11.1",
  "sc-client-api",
@@ -7817,7 +7811,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus-babe"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "async-trait",
  "derive_more",
@@ -7855,7 +7849,6 @@ dependencies = [
  "sp-io",
  "sp-keystore",
  "sp-runtime",
- "sp-timestamp",
  "sp-utils",
  "sp-version",
  "substrate-prometheus-endpoint",
@@ -7864,7 +7857,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus-babe-rpc"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "derive_more",
  "futures 0.3.14",
@@ -7888,7 +7881,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus-epochs"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "fork-tree",
  "parity-scale-codec",
@@ -7901,11 +7894,12 @@ dependencies = [
 [[package]]
 name = "sc-consensus-slots"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "async-trait",
  "futures 0.3.14",
  "futures-timer 3.0.2",
+ "impl-trait-for-tuples",
  "log",
  "parity-scale-codec",
  "sc-client-api",
@@ -7928,21 +7922,18 @@ dependencies = [
 [[package]]
 name = "sc-consensus-uncles"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
- "log",
  "sc-client-api",
  "sp-authorship",
- "sp-consensus",
- "sp-core",
- "sp-inherents",
  "sp-runtime",
+ "thiserror",
 ]
 
 [[package]]
 name = "sc-executor"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "derive_more",
  "lazy_static",
@@ -7972,7 +7963,7 @@ dependencies = [
 [[package]]
 name = "sc-executor-common"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "derive_more",
  "parity-scale-codec",
@@ -7989,7 +7980,7 @@ dependencies = [
 [[package]]
 name = "sc-executor-wasmi"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "log",
  "parity-scale-codec",
@@ -8004,7 +7995,7 @@ dependencies = [
 [[package]]
 name = "sc-executor-wasmtime"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "log",
  "parity-scale-codec",
@@ -8022,7 +8013,7 @@ dependencies = [
 [[package]]
 name = "sc-finality-grandpa"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "async-trait",
  "derive_more",
@@ -8062,7 +8053,7 @@ dependencies = [
 [[package]]
 name = "sc-finality-grandpa-rpc"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "derive_more",
  "finality-grandpa",
@@ -8086,7 +8077,7 @@ dependencies = [
 [[package]]
 name = "sc-finality-grandpa-warp-sync"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "derive_more",
  "futures 0.3.14",
@@ -8107,7 +8098,7 @@ dependencies = [
 [[package]]
 name = "sc-informant"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "ansi_term 0.12.1",
  "futures 0.3.14",
@@ -8125,7 +8116,7 @@ dependencies = [
 [[package]]
 name = "sc-keystore"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "async-trait",
  "derive_more",
@@ -8145,7 +8136,7 @@ dependencies = [
 [[package]]
 name = "sc-light"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "hash-db",
  "lazy_static",
@@ -8164,7 +8155,7 @@ dependencies = [
 [[package]]
 name = "sc-network"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "async-std",
  "async-trait",
@@ -8217,7 +8208,7 @@ dependencies = [
 [[package]]
 name = "sc-network-gossip"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "futures 0.3.14",
  "futures-timer 3.0.2",
@@ -8234,7 +8225,7 @@ dependencies = [
 [[package]]
 name = "sc-offchain"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "bytes 0.5.6",
  "fnv",
@@ -8262,7 +8253,7 @@ dependencies = [
 [[package]]
 name = "sc-peerset"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "futures 0.3.14",
  "libp2p",
@@ -8275,7 +8266,7 @@ dependencies = [
 [[package]]
 name = "sc-proposer-metrics"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "log",
  "substrate-prometheus-endpoint",
@@ -8284,7 +8275,7 @@ dependencies = [
 [[package]]
 name = "sc-rpc"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "futures 0.3.14",
  "hash-db",
@@ -8318,7 +8309,7 @@ dependencies = [
 [[package]]
 name = "sc-rpc-api"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "derive_more",
  "futures 0.3.14",
@@ -8342,7 +8333,7 @@ dependencies = [
 [[package]]
 name = "sc-rpc-server"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "futures 0.1.29",
  "jsonrpc-core",
@@ -8360,7 +8351,7 @@ dependencies = [
 [[package]]
 name = "sc-service"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "async-trait",
  "directories",
@@ -8424,7 +8415,7 @@ dependencies = [
 [[package]]
 name = "sc-state-db"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "log",
  "parity-scale-codec",
@@ -8439,7 +8430,7 @@ dependencies = [
 [[package]]
 name = "sc-sync-state-rpc"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "jsonrpc-core",
  "jsonrpc-core-client",
@@ -8459,7 +8450,7 @@ dependencies = [
 [[package]]
 name = "sc-telemetry"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "chrono",
  "futures 0.3.14",
@@ -8479,7 +8470,7 @@ dependencies = [
 [[package]]
 name = "sc-tracing"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "ansi_term 0.12.1",
  "atty",
@@ -8506,7 +8497,7 @@ dependencies = [
 [[package]]
 name = "sc-tracing-proc-macro"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "proc-macro-crate 1.0.0",
  "proc-macro2",
@@ -8517,7 +8508,7 @@ dependencies = [
 [[package]]
 name = "sc-transaction-graph"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "derive_more",
  "futures 0.3.14",
@@ -8539,7 +8530,7 @@ dependencies = [
 [[package]]
 name = "sc-transaction-pool"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "futures 0.3.14",
  "futures-diagnose",
@@ -8961,7 +8952,7 @@ dependencies = [
 [[package]]
 name = "sp-allocator"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "log",
  "sp-core",
@@ -8973,7 +8964,7 @@ dependencies = [
 [[package]]
 name = "sp-api"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "hash-db",
  "log",
@@ -8990,7 +8981,7 @@ dependencies = [
 [[package]]
 name = "sp-api-proc-macro"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "blake2-rfc",
  "proc-macro-crate 1.0.0",
@@ -9002,7 +8993,7 @@ dependencies = [
 [[package]]
 name = "sp-application-crypto"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "parity-scale-codec",
  "serde",
@@ -9014,7 +9005,7 @@ dependencies = [
 [[package]]
 name = "sp-arithmetic"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "integer-sqrt",
  "num-traits",
@@ -9028,7 +9019,7 @@ dependencies = [
 [[package]]
 name = "sp-authority-discovery"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -9040,8 +9031,9 @@ dependencies = [
 [[package]]
 name = "sp-authorship"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
+ "async-trait",
  "parity-scale-codec",
  "sp-inherents",
  "sp-runtime",
@@ -9051,7 +9043,7 @@ dependencies = [
 [[package]]
 name = "sp-block-builder"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -9063,7 +9055,7 @@ dependencies = [
 [[package]]
 name = "sp-blockchain"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "futures 0.3.14",
  "log",
@@ -9081,7 +9073,7 @@ dependencies = [
 [[package]]
 name = "sp-chain-spec"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "serde",
  "serde_json",
@@ -9090,7 +9082,7 @@ dependencies = [
 [[package]]
 name = "sp-consensus"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "async-trait",
  "futures 0.3.14",
@@ -9117,8 +9109,9 @@ dependencies = [
 [[package]]
 name = "sp-consensus-babe"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
+ "async-trait",
  "merlin",
  "parity-scale-codec",
  "serde",
@@ -9138,7 +9131,7 @@ dependencies = [
 [[package]]
 name = "sp-consensus-slots"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "parity-scale-codec",
  "sp-arithmetic",
@@ -9148,7 +9141,7 @@ dependencies = [
 [[package]]
 name = "sp-consensus-vrf"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "parity-scale-codec",
  "schnorrkel",
@@ -9160,7 +9153,7 @@ dependencies = [
 [[package]]
 name = "sp-core"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "base58",
  "blake2-rfc",
@@ -9204,7 +9197,7 @@ dependencies = [
 [[package]]
 name = "sp-database"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "kvdb",
  "parking_lot 0.11.1",
@@ -9213,7 +9206,7 @@ dependencies = [
 [[package]]
 name = "sp-debug-derive"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -9223,7 +9216,7 @@ dependencies = [
 [[package]]
 name = "sp-externalities"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "environmental",
  "parity-scale-codec",
@@ -9234,7 +9227,7 @@ dependencies = [
 [[package]]
 name = "sp-finality-grandpa"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "finality-grandpa",
  "log",
@@ -9251,11 +9244,13 @@ dependencies = [
 [[package]]
 name = "sp-inherents"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
+ "async-trait",
+ "impl-trait-for-tuples",
  "parity-scale-codec",
- "parking_lot 0.11.1",
  "sp-core",
+ "sp-runtime",
  "sp-std",
  "thiserror",
 ]
@@ -9263,7 +9258,7 @@ dependencies = [
 [[package]]
 name = "sp-io"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "futures 0.3.14",
  "hash-db",
@@ -9287,7 +9282,7 @@ dependencies = [
 [[package]]
 name = "sp-keyring"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "lazy_static",
  "sp-core",
@@ -9298,7 +9293,7 @@ dependencies = [
 [[package]]
 name = "sp-keystore"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "async-trait",
  "derive_more",
@@ -9315,7 +9310,7 @@ dependencies = [
 [[package]]
 name = "sp-maybe-compressed-blob"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "ruzstd",
  "zstd",
@@ -9324,7 +9319,7 @@ dependencies = [
 [[package]]
 name = "sp-npos-elections"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "parity-scale-codec",
  "serde",
@@ -9337,7 +9332,7 @@ dependencies = [
 [[package]]
 name = "sp-npos-elections-compact"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "proc-macro-crate 1.0.0",
  "proc-macro2",
@@ -9348,7 +9343,7 @@ dependencies = [
 [[package]]
 name = "sp-offchain"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "sp-api",
  "sp-core",
@@ -9358,7 +9353,7 @@ dependencies = [
 [[package]]
 name = "sp-panic-handler"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "backtrace",
 ]
@@ -9366,7 +9361,7 @@ dependencies = [
 [[package]]
 name = "sp-rpc"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "serde",
  "sp-core",
@@ -9375,7 +9370,7 @@ dependencies = [
 [[package]]
 name = "sp-runtime"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "either",
  "hash256-std-hasher",
@@ -9396,7 +9391,7 @@ dependencies = [
 [[package]]
 name = "sp-runtime-interface"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "impl-trait-for-tuples",
  "parity-scale-codec",
@@ -9413,7 +9408,7 @@ dependencies = [
 [[package]]
 name = "sp-runtime-interface-proc-macro"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "Inflector",
  "proc-macro-crate 1.0.0",
@@ -9425,7 +9420,7 @@ dependencies = [
 [[package]]
 name = "sp-serializer"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "serde",
  "serde_json",
@@ -9434,7 +9429,7 @@ dependencies = [
 [[package]]
 name = "sp-session"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -9447,7 +9442,7 @@ dependencies = [
 [[package]]
 name = "sp-staking"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "parity-scale-codec",
  "sp-runtime",
@@ -9457,7 +9452,7 @@ dependencies = [
 [[package]]
 name = "sp-state-machine"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "hash-db",
  "log",
@@ -9479,12 +9474,12 @@ dependencies = [
 [[package]]
 name = "sp-std"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 
 [[package]]
 name = "sp-storage"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "impl-serde",
  "parity-scale-codec",
@@ -9497,7 +9492,7 @@ dependencies = [
 [[package]]
 name = "sp-tasks"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "log",
  "sp-core",
@@ -9510,20 +9505,24 @@ dependencies = [
 [[package]]
 name = "sp-timestamp"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
+ "async-trait",
+ "futures-timer 3.0.2",
+ "log",
  "parity-scale-codec",
  "sp-api",
  "sp-inherents",
  "sp-runtime",
  "sp-std",
+ "thiserror",
  "wasm-timer",
 ]
 
 [[package]]
 name = "sp-tracing"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "log",
  "parity-scale-codec",
@@ -9536,7 +9535,7 @@ dependencies = [
 [[package]]
 name = "sp-transaction-pool"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "derive_more",
  "futures 0.3.14",
@@ -9552,7 +9551,7 @@ dependencies = [
 [[package]]
 name = "sp-trie"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "hash-db",
  "memory-db",
@@ -9566,7 +9565,7 @@ dependencies = [
 [[package]]
 name = "sp-utils"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "futures 0.3.14",
  "futures-core",
@@ -9578,7 +9577,7 @@ dependencies = [
 [[package]]
 name = "sp-version"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "impl-serde",
  "parity-scale-codec",
@@ -9590,7 +9589,7 @@ dependencies = [
 [[package]]
 name = "sp-wasm-interface"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "impl-trait-for-tuples",
  "parity-scale-codec",
@@ -9747,7 +9746,7 @@ dependencies = [
 [[package]]
 name = "substrate-browser-utils"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "chrono",
  "console_error_panic_hook",
@@ -9773,7 +9772,7 @@ dependencies = [
 [[package]]
 name = "substrate-build-script-utils"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "platforms",
 ]
@@ -9781,7 +9780,7 @@ dependencies = [
 [[package]]
 name = "substrate-frame-rpc-system"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-system-rpc-runtime-api",
  "futures 0.3.14",
@@ -9804,7 +9803,7 @@ dependencies = [
 [[package]]
 name = "substrate-prometheus-endpoint"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "async-std",
  "derive_more",
@@ -9818,7 +9817,7 @@ dependencies = [
 [[package]]
 name = "substrate-test-client"
 version = "2.0.1"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "async-trait",
  "futures 0.1.29",
@@ -9847,7 +9846,7 @@ dependencies = [
 [[package]]
 name = "substrate-test-utils"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "futures 0.3.14",
  "substrate-test-utils-derive",
@@ -9857,7 +9856,7 @@ dependencies = [
 [[package]]
 name = "substrate-test-utils-derive"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "proc-macro-crate 1.0.0",
  "quote",
@@ -10599,7 +10598,7 @@ checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382"
 [[package]]
 name = "try-runtime-cli"
 version = "0.9.0"
-source = "git+https://github.com/paritytech/substrate#92c15dd1e9b1f8e3c7e8d936c9b6fb15a46c2941"
+source = "git+https://github.com/paritytech/substrate#ec180313e410915ed5e319358628260f9d1f3b53"
 dependencies = [
  "frame-try-runtime",
  "log",
diff --git a/polkadot/Cargo.toml b/polkadot/Cargo.toml
index ed38ea545fb..440d2bda8d0 100644
--- a/polkadot/Cargo.toml
+++ b/polkadot/Cargo.toml
@@ -56,7 +56,7 @@ members = [
 	"node/core/candidate-selection",
 	"node/core/candidate-validation",
 	"node/core/chain-api",
-	"node/core/proposer",
+	"node/core/parachains-inherent",
 	"node/core/provisioner",
 	"node/core/pvf",
 	"node/core/runtime-api",
diff --git a/polkadot/erasure-coding/Cargo.toml b/polkadot/erasure-coding/Cargo.toml
index 76aec305e45..f047157cc91 100644
--- a/polkadot/erasure-coding/Cargo.toml
+++ b/polkadot/erasure-coding/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Parity Technologies <admin@parity.io>"]
 edition = "2018"
 
 [dependencies]
-polkadot-primitives = { package = "polkadot-primitives", path = "../primitives" }
+polkadot-primitives = { path = "../primitives" }
 polkadot-node-primitives = { package = "polkadot-node-primitives", path = "../node/primitives" }
 novelpoly = { package = "reed-solomon-novelpoly", version = "1.0.0" }
 parity-scale-codec = { version = "2.0.0", default-features = false, features = ["std", "derive"] }
diff --git a/polkadot/node/core/parachains-inherent/Cargo.toml b/polkadot/node/core/parachains-inherent/Cargo.toml
new file mode 100644
index 00000000000..adbf6445489
--- /dev/null
+++ b/polkadot/node/core/parachains-inherent/Cargo.toml
@@ -0,0 +1,18 @@
+[package]
+name = "polkadot-node-core-parachains-inherent"
+version = "0.1.0"
+authors = ["Parity Technologies <admin@parity.io>"]
+edition = "2018"
+
+[dependencies]
+futures = "0.3.12"
+futures-timer = "3.0.2"
+tracing = "0.1.25"
+thiserror = "1.0.23"
+async-trait = "0.1.47"
+polkadot-node-subsystem = { path = "../../subsystem" }
+polkadot-overseer = { path = "../../overseer" }
+polkadot-primitives = { path = "../../../primitives" }
+sp-blockchain = { 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" }
diff --git a/polkadot/node/core/parachains-inherent/src/lib.rs b/polkadot/node/core/parachains-inherent/src/lib.rs
new file mode 100644
index 00000000000..9c6b8ed0dbb
--- /dev/null
+++ b/polkadot/node/core/parachains-inherent/src/lib.rs
@@ -0,0 +1,138 @@
+// Copyright 2021 Parity Technologies (UK) Ltd.
+// This file is part of Polkadot.
+
+// Polkadot 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.
+
+// Polkadot 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 Polkadot.  If not, see <http://www.gnu.org/licenses/>.
+
+//! The parachain inherent data provider
+//!
+//! Parachain backing and approval is an off-chain process, but the parachain needs to progress on chain as well. To
+//! make it progress on chain a block producer needs to forward information about the state of a parachain to the
+//! runtime. This information is forwarded through an inherent to the runtime. Here we provide the
+//! [`ParachainInherentDataProvider`] that requests the relevant data from the provisioner subsystem and creates the
+//! the inherent data that the runtime will use to create an inherent.
+
+#![deny(unused_crate_dependencies, unused_results)]
+
+use futures::{select, FutureExt};
+use polkadot_node_subsystem::{
+	messages::{AllMessages, ProvisionerMessage}, SubsystemError,
+};
+use polkadot_overseer::OverseerHandler;
+use polkadot_primitives::v1::{
+	Block, Hash, InherentData as ParachainsInherentData,
+};
+use sp_blockchain::HeaderBackend;
+use sp_runtime::generic::BlockId;
+use std::time;
+
+/// How long to wait for the provisioner, before giving up.
+const PROVISIONER_TIMEOUT: time::Duration = core::time::Duration::from_millis(2500);
+
+/// Provides the parachains inherent data.
+pub struct ParachainsInherentDataProvider {
+	inherent_data: ParachainsInherentData,
+}
+
+impl ParachainsInherentDataProvider {
+	/// Create a new instance of the [`ParachainsInherentDataProvider`].
+	pub async fn create<C: HeaderBackend<Block>>(
+		client: &C,
+		mut overseer: OverseerHandler,
+		parent: Hash,
+	) -> Result<Self, Error> {
+		let pid = async {
+			let (sender, receiver) = futures::channel::oneshot::channel();
+			overseer.wait_for_activation(parent, sender).await;
+			receiver.await.map_err(|_| Error::ClosedChannelAwaitingActivation)?.map_err(Error::Subsystem)?;
+
+			let (sender, receiver) = futures::channel::oneshot::channel();
+			overseer.send_msg(AllMessages::Provisioner(
+				ProvisionerMessage::RequestInherentData(parent, sender),
+			)).await;
+
+			receiver.await.map_err(|_| Error::ClosedChannelAwaitingInherentData)
+		};
+
+		let mut timeout = futures_timer::Delay::new(PROVISIONER_TIMEOUT).fuse();
+
+		let parent_header = match client.header(BlockId::Hash(parent)) {
+			Ok(Some(h)) => h,
+			Ok(None) => return Err(Error::ParentHeaderNotFound(parent)),
+			Err(err) => return Err(Error::Blockchain(err)),
+		};
+
+		let res = select! {
+			pid = pid.fuse() => pid,
+			_ = timeout => Err(Error::Timeout),
+		};
+
+		let inherent_data = match res {
+			Ok(pd) => ParachainsInherentData {
+				bitfields: pd.bitfields,
+				backed_candidates: pd.backed_candidates,
+				disputes: pd.disputes,
+				parent_header,
+			},
+			Err(err) => {
+				tracing::debug!(
+					?err,
+					"Could not get provisioner inherent data; injecting default data",
+				);
+				ParachainsInherentData {
+					bitfields: Vec::new(),
+					backed_candidates: Vec::new(),
+					disputes: Vec::new(),
+					parent_header,
+				}
+			}
+		};
+
+		Ok(Self { inherent_data })
+	}
+}
+
+#[async_trait::async_trait]
+impl sp_inherents::InherentDataProvider for ParachainsInherentDataProvider {
+	fn provide_inherent_data(&self, inherent_data: &mut sp_inherents::InherentData) -> Result<(), sp_inherents::Error> {
+		inherent_data.put_data(
+			polkadot_primitives::v1::PARACHAINS_INHERENT_IDENTIFIER,
+			&self.inherent_data,
+		)
+	}
+
+	async fn try_handle_error(
+		&self,
+		_: &sp_inherents::InherentIdentifier,
+		_: &[u8],
+	) -> Option<Result<(), sp_inherents::Error>> {
+		// Inherent isn't checked and can not return any error
+		None
+	}
+}
+
+#[derive(thiserror::Error, Debug)]
+pub enum Error {
+	#[error("Blockchain error")]
+	Blockchain(sp_blockchain::Error),
+	#[error("Timeout: provisioner did not return inherent data after {:?}", PROVISIONER_TIMEOUT)]
+	Timeout,
+	#[error("Could not find the parent header in the blockchain: {:?}", _0)]
+	ParentHeaderNotFound(Hash),
+	#[error("Closed channel from overseer when awaiting activation")]
+	ClosedChannelAwaitingActivation,
+	#[error("Closed channel from provisioner when awaiting inherent data")]
+	ClosedChannelAwaitingInherentData,
+	#[error("Subsystem failed")]
+	Subsystem(SubsystemError),
+}
diff --git a/polkadot/node/core/proposer/Cargo.toml b/polkadot/node/core/proposer/Cargo.toml
deleted file mode 100644
index f2532d61d1c..00000000000
--- a/polkadot/node/core/proposer/Cargo.toml
+++ /dev/null
@@ -1,25 +0,0 @@
-[package]
-name = "polkadot-node-core-proposer"
-version = "0.1.0"
-authors = ["Parity Technologies <admin@parity.io>"]
-edition = "2018"
-
-[dependencies]
-futures = "0.3.12"
-futures-timer = "3.0.2"
-tracing = "0.1.25"
-polkadot-node-subsystem = { path = "../../subsystem" }
-polkadot-overseer = { path = "../../overseer" }
-polkadot-primitives = { path = "../../../primitives" }
-sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "master" }
-sc-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" }
-sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" }
-sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "master" }
-sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" }
-sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" }
-sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" }
-sp-core = { 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-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" }
-prometheus-endpoint = { package = "substrate-prometheus-endpoint", git = "https://github.com/paritytech/substrate", branch = "master" }
diff --git a/polkadot/node/core/proposer/src/lib.rs b/polkadot/node/core/proposer/src/lib.rs
deleted file mode 100644
index 64ad751f561..00000000000
--- a/polkadot/node/core/proposer/src/lib.rs
+++ /dev/null
@@ -1,311 +0,0 @@
-// Copyright 2020 Parity Technologies (UK) Ltd.
-// This file is part of Polkadot.
-
-// Polkadot 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.
-
-// Polkadot 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 Polkadot.  If not, see <http://www.gnu.org/licenses/>.
-
-//! The proposer proposes new blocks to include
-
-#![deny(unused_crate_dependencies, unused_results)]
-
-use futures::prelude::*;
-use futures::select;
-use polkadot_node_subsystem::{
-	jaeger,
-	messages::{AllMessages, ProvisionerInherentData, ProvisionerMessage}, SubsystemError,
-};
-use polkadot_overseer::OverseerHandler;
-use polkadot_primitives::v1::{
-	Block, Hash, Header, InherentData as ParachainsInherentData,
-};
-use sc_block_builder::{BlockBuilderApi, BlockBuilderProvider};
-use sc_telemetry::TelemetryHandle;
-use sp_core::traits::SpawnNamed;
-use sp_api::{ApiExt, ProvideRuntimeApi};
-use sp_blockchain::HeaderBackend;
-use sp_consensus::{Proposal, DisableProofRecording};
-use sp_inherents::InherentData;
-use sp_runtime::traits::{DigestFor, HashFor};
-use sp_transaction_pool::TransactionPool;
-use prometheus_endpoint::Registry as PrometheusRegistry;
-use std::{fmt, pin::Pin, sync::Arc, time};
-
-/// How long proposing can take, before we give up and err out. We need a relatively large timeout
-/// here as long as we have large payload in statement distribution. Assuming we can reach most
-/// nodes within two hops, we will take about 2 seconds for transferring statements (data transfer
-/// only). If necessary, we could be able to reduce this to 3 seconds. To consider: The lower the
-/// riskier that we will not be able to include a candidate.
-const PROPOSE_TIMEOUT: core::time::Duration = core::time::Duration::from_millis(4000);
-
-/// Custom Proposer factory for Polkadot
-pub struct ProposerFactory<TxPool, Backend, Client> {
-	inner: sc_basic_authorship::ProposerFactory<TxPool, Backend, Client, DisableProofRecording>,
-	overseer: OverseerHandler,
-}
-
-impl<TxPool, Backend, Client> ProposerFactory<TxPool, Backend, Client> {
-	pub fn new(
-		spawn_handle: impl SpawnNamed + 'static,
-		client: Arc<Client>,
-		transaction_pool: Arc<TxPool>,
-		overseer: OverseerHandler,
-		prometheus: Option<&PrometheusRegistry>,
-		telemetry: Option<TelemetryHandle>,
-	) -> Self {
-		ProposerFactory {
-			inner: sc_basic_authorship::ProposerFactory::new(
-				spawn_handle,
-				client,
-				transaction_pool,
-				prometheus,
-				telemetry,
-			),
-			overseer,
-		}
-	}
-}
-
-impl<TxPool, Backend, Client> sp_consensus::Environment<Block>
-	for ProposerFactory<TxPool, Backend, Client>
-where
-	TxPool: 'static + TransactionPool<Block = Block>,
-	Client: 'static
-		+ BlockBuilderProvider<Backend, Block, Client>
-		+ ProvideRuntimeApi<Block>
-		+ HeaderBackend<Block>
-		+ Send
-		+ Sync,
-	Client::Api:
-		BlockBuilderApi<Block> + ApiExt<Block>,
-	Backend:
-		'static + sc_client_api::Backend<Block, State = sp_api::StateBackendFor<Client, Block>>,
-	// Rust bug: https://github.com/rust-lang/rust/issues/24159
-	sp_api::StateBackendFor<Client, Block>: sp_api::StateBackend<HashFor<Block>> + Send,
-{
-	type CreateProposer = Pin<Box<
-		dyn Future<Output = Result<Self::Proposer, Self::Error>> + Send + 'static,
-	>>;
-	type Proposer = Proposer<TxPool, Backend, Client>;
-	type Error = Error;
-
-	fn init(&mut self, parent_header: &Header) -> Self::CreateProposer {
-		// create the inner proposer
-		let proposer = self.inner.init(parent_header).into_inner();
-
-		// data to be moved into the future
-		let overseer = self.overseer.clone();
-		let parent_header_hash = parent_header.hash();
-		let parent_header = parent_header.clone();
-
-		async move {
-			Ok(Proposer {
-				inner: proposer?,
-				overseer,
-				parent_header,
-				parent_header_hash,
-			})
-		}.boxed()
-	}
-}
-
-/// Custom Proposer for Polkadot.
-///
-/// This proposer gets the ProvisionerInherentData and injects it into the wrapped
-/// proposer's inherent data, then delegates the actual proposal generation.
-pub struct Proposer<TxPool: TransactionPool<Block = Block>, Backend, Client> {
-	inner: sc_basic_authorship::Proposer<Backend, Block, Client, TxPool, DisableProofRecording>,
-	overseer: OverseerHandler,
-	parent_header: Header,
-	parent_header_hash: Hash,
-}
-
-// This impl has the same generic bounds as the Proposer impl.
-impl<TxPool, Backend, Client> Proposer<TxPool, Backend, Client>
-where
-	TxPool: 'static + TransactionPool<Block = Block>,
-	Client: 'static
-		+ BlockBuilderProvider<Backend, Block, Client>
-		+ ProvideRuntimeApi<Block>
-		+ HeaderBackend<Block>
-		+ Send
-		+ Sync,
-	Client::Api:
-		BlockBuilderApi<Block> + ApiExt<Block>,
-	Backend:
-		'static + sc_client_api::Backend<Block, State = sp_api::StateBackendFor<Client, Block>>,
-	// Rust bug: https://github.com/rust-lang/rust/issues/24159
-	sp_api::StateBackendFor<Client, Block>: sp_api::StateBackend<HashFor<Block>> + Send,
-{
-	/// Get provisioner inherent data
-	///
-	/// This function has a constant timeout: `PROPOSE_TIMEOUT`.
-	async fn get_provisioner_data(&self) -> Result<ProvisionerInherentData, Error> {
-		// clone this (lightweight) data because we're going to move it into the future
-		let mut overseer = self.overseer.clone();
-		let parent_header_hash = self.parent_header_hash.clone();
-
-		let pid = async {
-			let (sender, receiver) = futures::channel::oneshot::channel();
-			overseer.wait_for_activation(parent_header_hash, sender).await;
-			receiver.await.map_err(|_| Error::ClosedChannelAwaitingActivation)??;
-
-			let (sender, receiver) = futures::channel::oneshot::channel();
-			overseer.send_msg(AllMessages::Provisioner(
-				ProvisionerMessage::RequestInherentData(parent_header_hash, sender),
-			)).await;
-
-			receiver.await.map_err(|_| Error::ClosedChannelAwaitingInherentData)
-		};
-
-		let mut timeout = futures_timer::Delay::new(PROPOSE_TIMEOUT).fuse();
-
-		select! {
-			pid = pid.fuse() => pid,
-			_ = timeout => Err(Error::Timeout),
-		}
-	}
-}
-
-impl<TxPool, Backend, Client> sp_consensus::Proposer<Block> for Proposer<TxPool, Backend, Client>
-where
-	TxPool: 'static + TransactionPool<Block = Block>,
-	Client: 'static
-		+ BlockBuilderProvider<Backend, Block, Client>
-		+ ProvideRuntimeApi<Block>
-		+ HeaderBackend<Block>
-		+ Send
-		+ Sync,
-	Client::Api:
-		BlockBuilderApi<Block> + ApiExt<Block>,
-	Backend:
-		'static + sc_client_api::Backend<Block, State = sp_api::StateBackendFor<Client, Block>>,
-	// Rust bug: https://github.com/rust-lang/rust/issues/24159
-	sp_api::StateBackendFor<Client, Block>: sp_api::StateBackend<HashFor<Block>> + Send,
-{
-	type Transaction = sc_client_api::TransactionFor<Backend, Block>;
-	type Proposal = Pin<Box<
-		dyn Future<Output = Result<Proposal<Block, sp_api::TransactionFor<Client, Block>, ()>, Error>> + Send,
-	>>;
-	type Error = Error;
-	type ProofRecording = DisableProofRecording;
-	type Proof = ();
-
-	fn propose(
-		self,
-		mut inherent_data: InherentData,
-		inherent_digests: DigestFor<Block>,
-		max_duration: time::Duration,
-		block_size_limit: Option<usize>,
-	) -> Self::Proposal {
-		async move {
-			let span = jaeger::Span::new(self.parent_header_hash, "propose");
-			let _span = span.child("get-provisioner");
-
-			let parachains_inherent_data = match self.get_provisioner_data().await {
-				Ok(pd) => ParachainsInherentData {
-					bitfields: pd.bitfields,
-					backed_candidates: pd.backed_candidates,
-					disputes: pd.disputes,
-					parent_header: self.parent_header,
-				},
-				Err(err) => {
-					tracing::warn!(err = ?err, "could not get provisioner inherent data; injecting default data");
-					ParachainsInherentData {
-						bitfields: Vec::new(),
-						backed_candidates: Vec::new(),
-						disputes: Vec::new(),
-						parent_header: self.parent_header,
-					}
-				}
-			};
-
-			drop(_span);
-
-			inherent_data.put_data(
-				polkadot_primitives::v1::PARACHAINS_INHERENT_IDENTIFIER,
-				&parachains_inherent_data,
-			)?;
-
-			let _span = span.child("authorship-propose");
-			self.inner
-				.propose(inherent_data, inherent_digests, max_duration, block_size_limit)
-				.await
-				.map_err(Into::into)
-		}
-		.boxed()
-	}
-}
-
-// It would have been more ergonomic to use thiserror to derive the
-// From implementations, Display, and std::error::Error, but unfortunately
-// one of the wrapped errors (sp_inherents::Error) also
-// don't impl std::error::Error, which breaks the thiserror derive.
-#[derive(Debug)]
-pub enum Error {
-	Consensus(sp_consensus::Error),
-	Blockchain(sp_blockchain::Error),
-	Inherent(sp_inherents::Error),
-	Timeout,
-	ClosedChannelAwaitingActivation,
-	ClosedChannelAwaitingInherentData,
-	Subsystem(SubsystemError)
-}
-
-impl From<sp_consensus::Error> for Error {
-	fn from(e: sp_consensus::Error) -> Error {
-		Error::Consensus(e)
-	}
-}
-
-impl From<sp_blockchain::Error> for Error {
-	fn from(e: sp_blockchain::Error) -> Error {
-		Error::Blockchain(e)
-	}
-}
-
-impl From<sp_inherents::Error> for Error {
-	fn from(e: sp_inherents::Error) -> Error {
-		Error::Inherent(e)
-	}
-}
-
-impl From<SubsystemError> for Error {
-	fn from(e: SubsystemError) -> Error {
-		Error::Subsystem(e)
-	}
-}
-
-impl fmt::Display for Error {
-	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-		match self {
-			Self::Consensus(err) => write!(f, "consensus error: {}", err),
-			Self::Blockchain(err) => write!(f, "blockchain error: {}", err),
-			Self::Inherent(err) => write!(f, "inherent error: {:?}", err),
-			Self::Timeout => write!(f, "timeout: provisioner did not return inherent data after {:?}", PROPOSE_TIMEOUT),
-			Self::ClosedChannelAwaitingActivation => write!(f, "closed channel from overseer when awaiting activation"),
-			Self::ClosedChannelAwaitingInherentData => write!(f, "closed channel from provisioner when awaiting inherent data"),
-			Self::Subsystem(err) => write!(f, "subsystem error: {:?}", err),
-		}
-	}
-}
-
-impl std::error::Error for Error {
-	fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
-		match self {
-			Self::Consensus(err) => Some(err),
-			Self::Blockchain(err) => Some(err),
-			Self::Subsystem(err) => Some(err),
-			_ => None
-		}
-	}
-}
diff --git a/polkadot/node/overseer/src/lib.rs b/polkadot/node/overseer/src/lib.rs
index 9f7b6239a21..6a674fb29e3 100644
--- a/polkadot/node/overseer/src/lib.rs
+++ b/polkadot/node/overseer/src/lib.rs
@@ -445,7 +445,6 @@ impl OverseerHandler {
 	}
 
 	/// Wait for a block with the given hash to be in the active-leaves set.
-	/// This method is used for external code like `Proposer` that doesn't subscribe to Overseer's signals.
 	///
 	/// The response channel responds if the hash was activated and is closed if the hash was deactivated.
 	/// Note that due the fact the overseer doesn't store the whole active-leaves set, only deltas,
diff --git a/polkadot/node/service/Cargo.toml b/polkadot/node/service/Cargo.toml
index 28f2a1db425..34fa00fb533 100644
--- a/polkadot/node/service/Cargo.toml
+++ b/polkadot/node/service/Cargo.toml
@@ -15,6 +15,7 @@ sc-block-builder = { git = "https://github.com/paritytech/substrate", branch = "
 sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sc-client-db = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sc-consensus-uncles = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sc-consensus-slots = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sc-executor = { git = "https://github.com/paritytech/substrate", branch = "master" }
@@ -22,12 +23,12 @@ sc-finality-grandpa-warp-sync = { git = "https://github.com/paritytech/substrate
 sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "master" }
 service = { package = "sc-service", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false }
 telemetry = { package = "sc-telemetry", git = "https://github.com/paritytech/substrate", branch = "master" }
 
 # Substrate Primitives
 sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" }
-babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master" }
 consensus_common = { package = "sp-consensus", git = "https://github.com/paritytech/substrate", branch = "master" }
 grandpa_primitives = { package = "sp-finality-grandpa", git = "https://github.com/paritytech/substrate", branch = "master" }
 inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master" }
@@ -43,6 +44,8 @@ sp-session = { git = "https://github.com/paritytech/substrate", branch = "master
 sp-storage = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "master" }
+sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" }
 
 # Substrate Pallets
@@ -67,7 +70,7 @@ kvdb = "0.9.0"
 kvdb-rocksdb = { version = "0.11.0", optional = true }
 
 # Polkadot
-polkadot-node-core-proposer = { path = "../core/proposer" }
+polkadot-node-core-parachains-inherent = { path = "../core/parachains-inherent" }
 polkadot-overseer = { path = "../overseer" }
 polkadot-parachain = { path = "../../parachain" }
 polkadot-primitives = { path = "../../primitives" }
diff --git a/polkadot/node/service/src/chain_spec.rs b/polkadot/node/service/src/chain_spec.rs
index 765bc2f387c..0c7a8935eeb 100644
--- a/polkadot/node/service/src/chain_spec.rs
+++ b/polkadot/node/service/src/chain_spec.rs
@@ -18,7 +18,7 @@
 
 use rococo::constants::size::MAX_CODE_SIZE;
 use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
-use babe_primitives::AuthorityId as BabeId;
+use sp_consensus_babe::AuthorityId as BabeId;
 use beefy_primitives::ecdsa::AuthorityId as BeefyId;
 use grandpa::AuthorityId as GrandpaId;
 use hex_literal::hex;
diff --git a/polkadot/node/service/src/client.rs b/polkadot/node/service/src/client.rs
index a964ee5d8e3..adc2ef53c0a 100644
--- a/polkadot/node/service/src/client.rs
+++ b/polkadot/node/service/src/client.rs
@@ -32,7 +32,7 @@ use consensus_common::BlockStatus;
 pub trait RuntimeApiCollection:
 	sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block>
 	+ sp_api::ApiExt<Block>
-	+ babe_primitives::BabeApi<Block>
+	+ sp_consensus_babe::BabeApi<Block>
 	+ grandpa_primitives::GrandpaApi<Block>
 	+ ParachainHost<Block>
 	+ sp_block_builder::BlockBuilder<Block>
@@ -52,7 +52,7 @@ impl<Api> RuntimeApiCollection for Api
 where
 	Api: sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block>
 		+ sp_api::ApiExt<Block>
-		+ babe_primitives::BabeApi<Block>
+		+ sp_consensus_babe::BabeApi<Block>
 		+ grandpa_primitives::GrandpaApi<Block>
 		+ ParachainHost<Block>
 		+ sp_block_builder::BlockBuilder<Block>
diff --git a/polkadot/node/service/src/lib.rs b/polkadot/node/service/src/lib.rs
index 34325e565cf..e5c53ce9a83 100644
--- a/polkadot/node/service/src/lib.rs
+++ b/polkadot/node/service/src/lib.rs
@@ -32,7 +32,6 @@ use {
 	polkadot_node_core_av_store::Error as AvailabilityError,
 	polkadot_node_core_approval_voting::Config as ApprovalVotingConfig,
 	polkadot_node_core_candidate_validation::Config as CandidateValidationConfig,
-	polkadot_node_core_proposer::ProposerFactory,
 	polkadot_overseer::{AllSubsystems, BlockInfo, Overseer, OverseerHandler},
 	polkadot_primitives::v1::ParachainHost,
 	sc_authority_discovery::Service as AuthorityDiscoveryService,
@@ -41,7 +40,7 @@ use {
 	sp_trie::PrefixedMemoryDB,
 	sc_client_api::{AuxStore, ExecutorProvider},
 	sc_keystore::LocalKeystore,
-	babe_primitives::BabeApi,
+	sp_consensus_babe::BabeApi,
 	grandpa::{self, FinalityProofProvider as GrandpaFinalityProofProvider},
 	beefy_primitives::ecdsa::AuthoritySignature as BeefySignature,
 	sp_runtime::traits::Header as HeaderT,
@@ -263,8 +262,6 @@ fn new_partial<RuntimeApi, Executor>(
 	set_prometheus_registry(config)?;
 
 
-	let inherent_data_providers = inherents::InherentDataProviders::new();
-
 	let telemetry = config.telemetry_endpoints.clone()
 		.filter(|x| !x.is_empty())
 		.map(move |endpoints| -> Result<_, telemetry::Error> {
@@ -331,13 +328,24 @@ fn new_partial<RuntimeApi, Executor>(
 		client.clone(),
 	)?;
 
+	let slot_duration = babe_link.config().slot_duration();
 	let import_queue = babe::import_queue(
 		babe_link.clone(),
 		block_import.clone(),
 		Some(Box::new(justification_import)),
 		client.clone(),
 		select_chain.clone(),
-		inherent_data_providers.clone(),
+		move |_, ()| async move {
+			let timestamp = sp_timestamp::InherentDataProvider::from_system_time();
+
+			let slot =
+				sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_duration(
+					*timestamp,
+					slot_duration,
+				);
+
+			Ok((timestamp, slot))
+		},
 		&task_manager.spawn_essential_handle(),
 		config.prometheus_registry(),
 		consensus_common::CanAuthorWithNativeVersion::new(client.executor().clone()),
@@ -407,7 +415,6 @@ fn new_partial<RuntimeApi, Executor>(
 		select_chain,
 		import_queue,
 		transaction_pool,
-		inherent_data_providers,
 		other: (rpc_extensions_builder, import_setup, rpc_setup, slot_duration, telemetry)
 	})
 }
@@ -708,7 +715,6 @@ pub fn new_full<RuntimeApi, Executor>(
 		select_chain,
 		import_queue,
 		transaction_pool,
-		inherent_data_providers,
 		other: (rpc_extensions_builder, import_setup, rpc_setup, slot_duration, mut telemetry)
 	} = new_partial::<RuntimeApi, Executor>(&mut config, jaeger_agent, telemetry_worker_handle)?;
 
@@ -893,21 +899,25 @@ pub fn new_full<RuntimeApi, Executor>(
 		}));
 
 		Some(overseer_handler)
-	} else { None };
+	} else {
+		None
+	};
 
 	if role.is_authority() {
 		let can_author_with =
 			consensus_common::CanAuthorWithNativeVersion::new(client.executor().clone());
 
-		let proposer = ProposerFactory::new(
+		let proposer = sc_basic_authorship::ProposerFactory::new(
 			task_manager.spawn_handle(),
 			client.clone(),
 			transaction_pool,
-			overseer_handler.as_ref().ok_or(Error::AuthoritiesRequireRealOverseer)?.clone(),
 			prometheus_registry.as_ref(),
 			telemetry.as_ref().map(|x| x.handle()),
 		);
 
+		let client_clone = client.clone();
+		let overseer_handler = overseer_handler.as_ref().ok_or(Error::AuthoritiesRequireRealOverseer)?.clone();
+		let slot_duration = babe_link.config().slot_duration();
 		let babe_config = babe::BabeParams {
 			keystore: keystore_container.sync_keystore(),
 			client: client.clone(),
@@ -915,7 +925,32 @@ pub fn new_full<RuntimeApi, Executor>(
 			block_import,
 			env: proposer,
 			sync_oracle: network.clone(),
-			inherent_data_providers: inherent_data_providers.clone(),
+			create_inherent_data_providers: move |parent, ()| {
+				let client_clone = client_clone.clone();
+				let overseer_handler = overseer_handler.clone();
+				async move {
+					let parachain = polkadot_node_core_parachains_inherent::ParachainsInherentDataProvider::create(
+						&*client_clone,
+						overseer_handler,
+						parent,
+					).await.map_err(|e| Box::new(e))?;
+
+					let uncles = sc_consensus_uncles::create_uncles_inherent_data_provider(
+						&*client_clone,
+						parent,
+					)?;
+
+					let timestamp = sp_timestamp::InherentDataProvider::from_system_time();
+
+					let slot =
+						sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_duration(
+							*timestamp,
+							slot_duration,
+						);
+
+					Ok((timestamp, slot, uncles, parachain))
+				}
+			},
 			force_authoring,
 			backoff_authoring_blocks,
 			babe_link,
@@ -1096,16 +1131,25 @@ fn new_light<Runtime, Dispatch>(mut config: Configuration) -> Result<(
 		client.clone(),
 	)?;
 
-	let inherent_data_providers = inherents::InherentDataProviders::new();
-
 	// FIXME: pruning task isn't started since light client doesn't do `AuthoritySetup`.
+	let slot_duration = babe_link.config().slot_duration();
 	let import_queue = babe::import_queue(
 		babe_link,
 		babe_block_import,
 		Some(Box::new(justification_import)),
 		client.clone(),
 		select_chain.clone(),
-		inherent_data_providers.clone(),
+		move |_, ()| async move {
+			let timestamp = sp_timestamp::InherentDataProvider::from_system_time();
+
+			let slot =
+				sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_duration(
+					*timestamp,
+					slot_duration,
+				);
+
+			Ok((timestamp, slot))
+		},
 		&task_manager.spawn_essential_handle(),
 		config.prometheus_registry(),
 		consensus_common::NeverCanAuthor,
diff --git a/polkadot/roadmap/implementers-guide/src/node/subsystems-and-jobs.md b/polkadot/roadmap/implementers-guide/src/node/subsystems-and-jobs.md
index 2eabf6fc9ee..bffee1ffd2b 100644
--- a/polkadot/roadmap/implementers-guide/src/node/subsystems-and-jobs.md
+++ b/polkadot/roadmap/implementers-guide/src/node/subsystems-and-jobs.md
@@ -380,7 +380,7 @@ sequenceDiagram
     participant CB as CandidateBacking
     participant BD as BitfieldDistribution
     participant RA as RuntimeApi
-    participant PO as Proposer
+    participant PI as ParachainsInherentDataProvider
 
     alt receive provisionable data
         alt
@@ -395,33 +395,24 @@ sequenceDiagram
 
         Note over PV: store bitfields and backed candidates
     else receive request for inherent data
-        PO ->> PV: RequestInherentData
+        PI ->> PV: RequestInherentData
         alt we have already constructed the inherent data
-            PV ->> PO: send the inherent data
+            PV ->> PI: send the inherent data
         else we have not yet constructed the inherent data
-            Note over PV,PO: Store the return sender without sending immediately
+            Note over PV,PI: Store the return sender without sending immediately
         end
     else timer times out
         note over PV: Waited 2 seconds
         PV -->> RA: RuntimeApiRequest::AvailabilityCores
         Note over PV: construct and store the inherent data
         loop over stored inherent data requests
-            PV ->> PO: (SignedAvailabilityBitfields, BackedCandidates)
+            PV ->> PI: (SignedAvailabilityBitfields, BackedCandidates)
         end
     end
 ```
 
 In principle, any arbitrary subsystem could send a `RequestInherentData` to the `Provisioner`. In practice,
-only the `Proposer` does so.
+only the `ParachainsInherentDataProvider` does so.
 
-The proposer is an atypical subsystem in that, unlike most of them, it is not primarily driven by
-the `Overseer`, but instead by the `sp_consensus::Environment` and `sp_consensus::Proposer` traits
-from Substrate. It doesn't make much sense to diagram this flow because it's very linear:
-
-- Substrate creates a `Proposer` from the `ProposerFactory` once per upcoming block, using the `parent_header: Header`.
-- At some later point, it calls `Proposer::propose(self, ...)`, consuming the proposer to generate a proposal
-- `Proposer::propose` sends a `RequestInherentData` to the `Provisioner`. This has a fixed timeout of
-  2.5 seconds, meaning that the provisioner has approximately 0.5 seconds to generate and send the data.
-
-The tuple `(SignedAvailabilityBitfields, BackedCandidates, ParentHeader)` is injected by the `Proposer`
+The tuple `(SignedAvailabilityBitfields, BackedCandidates, ParentHeader)` is injected by the `ParachainsInherentDataProvider`
 into the inherent data. From that point on, control passes from the node to the runtime.
diff --git a/polkadot/roadmap/implementers-guide/src/types/overseer-protocol.md b/polkadot/roadmap/implementers-guide/src/types/overseer-protocol.md
index c4d51a61104..9e082b8d1b6 100644
--- a/polkadot/roadmap/implementers-guide/src/types/overseer-protocol.md
+++ b/polkadot/roadmap/implementers-guide/src/types/overseer-protocol.md
@@ -564,9 +564,6 @@ enum ProvisionerMessage {
   /// advancing the state of parachain consensus in a block building upon the given hash.
   ///
   /// If called at different points in time, this may give different results.
-  ///
-  /// This is expected to be used by a proposer, to inject that information into the InherentData
-  /// where it can be assembled into the ParaInherent.
   RequestInherentData(Hash, oneshot::Sender<ParaInherentData>),
   /// This data should become part of a relay chain block
   ProvisionableData(ProvisionableData),
diff --git a/polkadot/runtime/parachains/Cargo.toml b/polkadot/runtime/parachains/Cargo.toml
index 017d4197a44..8849f9325ab 100644
--- a/polkadot/runtime/parachains/Cargo.toml
+++ b/polkadot/runtime/parachains/Cargo.toml
@@ -49,10 +49,10 @@ keyring = { package = "sp-keyring", git = "https://github.com/paritytech/substra
 sp-trie = { git = "https://github.com/paritytech/substrate", branch = "master" }
 pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "master" }
 sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "master" }
-frame-support-test = { git = "https://github.com/paritytech/substrate", branch = "master" }
 pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", branch = "master" }
 pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", branch = "master" }
 pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "master" }
+frame-support-test = { git = "https://github.com/paritytech/substrate", branch = "master" }
 serde_json = "1.0.61"
 libsecp256k1 = "0.3.5"
 sp-version = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false }
diff --git a/polkadot/runtime/parachains/src/paras_inherent.rs b/polkadot/runtime/parachains/src/paras_inherent.rs
index dba1647756f..c96495d639e 100644
--- a/polkadot/runtime/parachains/src/paras_inherent.rs
+++ b/polkadot/runtime/parachains/src/paras_inherent.rs
@@ -31,6 +31,7 @@ use frame_support::{
 	dispatch::DispatchResultWithPostInfo,
 	weights::{DispatchClass, Weight},
 	traits::Get,
+	inherent::{InherentIdentifier, InherentData, MakeFatalError, ProvideInherent},
 };
 use frame_system::ensure_none;
 use crate::{
@@ -38,7 +39,6 @@ use crate::{
 	scheduler::{self, FreedReason},
 	ump,
 };
-use inherents::{InherentIdentifier, InherentData, MakeFatalError, ProvideInherent};
 
 const LOG_TARGET: &str = "runtime::inclusion-inherent";
 // In the future, we should benchmark these consts; these are all untested assumptions for now.
-- 
GitLab