From b26f6d08ac508752fb6b9cc37871dd6ce56a1ba6 Mon Sep 17 00:00:00 2001
From: Ashley <ashley.ruglys@gmail.com>
Date: Tue, 30 Jun 2020 14:06:55 +0200
Subject: [PATCH] Companion PR for `Remove the service, replacing it with a
 struct of individual chain components` (#1288)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Switch branch

* Fix service things

* Fix browser node compilation

* Update branch

* fixed new service

* Update for new branch

* Fix browser node

* Update branch

* Revert "Switch branch"

This reverts commit 3623adff7681124a1539a385a718c34e85931254.

* Update cargo.lock

Co-authored-by: Bastian Köcher <git@kchr.de>
---
 polkadot/Cargo.lock              | 543 +++++++++++++++++++------------
 polkadot/cli/src/browser.rs      |   4 +-
 polkadot/cli/src/command.rs      |  97 +++---
 polkadot/cli/src/lib.rs          |   4 +-
 polkadot/collator/src/lib.rs     |  14 +-
 polkadot/node/service/src/lib.rs |  90 ++---
 polkadot/service/src/lib.rs      | 104 +++---
 7 files changed, 475 insertions(+), 381 deletions(-)

diff --git a/polkadot/Cargo.lock b/polkadot/Cargo.lock
index eb9ef2b19ab..b1a7eba99dd 100644
--- a/polkadot/Cargo.lock
+++ b/polkadot/Cargo.lock
@@ -25,6 +25,61 @@ version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "567b077b825e468cc974f0020d4082ee6e03132512f207ef1a02fd5d00d1f32d"
 
+[[package]]
+name = "aead"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cf01b9b56e767bb57b94ebf91a58b338002963785cdd7013e21c0d4679471e4"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "aes"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54eb1d8fe354e5fc611daf4f2ea97dd45a765f4f1e4512306ec183ae2e8f20c9"
+dependencies = [
+ "aes-soft",
+ "aesni",
+ "block-cipher-trait",
+]
+
+[[package]]
+name = "aes-gcm"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "834a6bda386024dbb7c8fc51322856c10ffe69559f972261c868485f5759c638"
+dependencies = [
+ "aead",
+ "aes",
+ "block-cipher-trait",
+ "ghash",
+ "subtle 2.2.3",
+ "zeroize",
+]
+
+[[package]]
+name = "aes-soft"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfd7e7ae3f9a1fb5c03b389fc6bb9a51400d0c13053f0dca698c832bfd893a0d"
+dependencies = [
+ "block-cipher-trait",
+ "byteorder",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aesni"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f70a6b5f971e473091ab7cfb5ffac6cde81666c4556751d8d5620ead8abf100"
+dependencies = [
+ "block-cipher-trait",
+ "opaque-debug",
+]
+
 [[package]]
 name = "ahash"
 version = "0.2.18"
@@ -368,6 +423,15 @@ dependencies = [
  "generic-array",
 ]
 
+[[package]]
+name = "block-cipher-trait"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c924d49bd09e7c06003acda26cd9742e796e34282ec6c1189404dee0c1f4774"
+dependencies = [
+ "generic-array",
+]
+
 [[package]]
 name = "block-padding"
 version = "0.1.5"
@@ -478,12 +542,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
 
 [[package]]
-name = "chacha20-poly1305-aead"
-version = "0.1.2"
+name = "chacha20"
+version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77d2058ba29594f69c75e8a9018e0485e3914ca5084e3613cd64529042f5423b"
+checksum = "f6a7ae4c498f8447d86baef0fa0831909333f558866fabcb21600625ac5a31c7"
 dependencies = [
- "constant_time_eq",
+ "stream-cipher",
+ "zeroize",
+]
+
+[[package]]
+name = "chacha20poly1305"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48901293601228db2131606f741db33561f7576b5d19c99cd66222380a7dc863"
+dependencies = [
+ "aead",
+ "chacha20",
+ "poly1305",
+ "stream-cipher",
+ "zeroize",
 ]
 
 [[package]]
@@ -1172,7 +1250,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
 [[package]]
 name = "fork-tree"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
 ]
@@ -1180,7 +1258,7 @@ dependencies = [
 [[package]]
 name = "frame-benchmarking"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -1197,7 +1275,7 @@ dependencies = [
 [[package]]
 name = "frame-benchmarking-cli"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "parity-scale-codec",
@@ -1215,7 +1293,7 @@ dependencies = [
 [[package]]
 name = "frame-executive"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -1230,7 +1308,7 @@ dependencies = [
 [[package]]
 name = "frame-metadata"
 version = "11.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "serde",
@@ -1241,7 +1319,7 @@ dependencies = [
 [[package]]
 name = "frame-support"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "bitmask",
  "frame-metadata",
@@ -1266,7 +1344,7 @@ dependencies = [
 [[package]]
 name = "frame-support-procedural"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support-procedural-tools",
  "proc-macro2 1.0.18",
@@ -1277,7 +1355,7 @@ dependencies = [
 [[package]]
 name = "frame-support-procedural-tools"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support-procedural-tools-derive",
  "proc-macro-crate",
@@ -1289,7 +1367,7 @@ dependencies = [
 [[package]]
 name = "frame-support-procedural-tools-derive"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "proc-macro2 1.0.18",
  "quote 1.0.7",
@@ -1299,7 +1377,7 @@ dependencies = [
 [[package]]
 name = "frame-system"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "impl-trait-for-tuples",
@@ -1315,7 +1393,7 @@ dependencies = [
 [[package]]
 name = "frame-system-benchmarking"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -1329,7 +1407,7 @@ dependencies = [
 [[package]]
 name = "frame-system-rpc-runtime-api"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -1559,6 +1637,18 @@ dependencies = [
  "pin-project",
 ]
 
+[[package]]
+name = "futures_codec"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce54d63f8b0c75023ed920d46fd71d0cbbb830b0ee012726b5b4f506fb6dea5b"
+dependencies = [
+ "bytes 0.5.4",
+ "futures 0.3.5",
+ "memchr",
+ "pin-project",
+]
+
 [[package]]
 name = "gcc"
 version = "0.3.55"
@@ -1608,6 +1698,15 @@ dependencies = [
  "wasm-bindgen",
 ]
 
+[[package]]
+name = "ghash"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f0930ed19a7184089ea46d2fedead2f6dc2b674c5db4276b7da336c7cd83252"
+dependencies = [
+ "polyval",
+]
+
 [[package]]
 name = "gimli"
 version = "0.20.0"
@@ -2435,9 +2534,9 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a"
 
 [[package]]
 name = "libp2p"
-version = "0.19.1"
+version = "0.20.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "057eba5432d3e740e313c6e13c9153d0cb76b4f71bfc2e5242ae5bdb7d41af67"
+checksum = "db81113df355dea9dddfcb01cd867555298dca29d915f25d1b1a0aad2e29338b"
 dependencies = [
  "bytes 0.5.4",
  "futures 0.3.5",
@@ -2457,7 +2556,7 @@ dependencies = [
  "libp2p-websocket",
  "libp2p-yamux",
  "multihash",
- "parity-multiaddr 0.9.0",
+ "parity-multiaddr 0.9.1",
  "parking_lot 0.10.2",
  "pin-project",
  "smallvec 1.4.0",
@@ -2466,9 +2565,9 @@ dependencies = [
 
 [[package]]
 name = "libp2p-core"
-version = "0.19.1"
+version = "0.19.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f5e30dcd8cb13a02ad534e214da234eca1595a76b5788b645dfa5c734d2124b"
+checksum = "3a0387b930c3d4c2533dc4893c1e0394185ddcc019846121b1b27491e45a2c08"
 dependencies = [
  "asn1_der",
  "bs58",
@@ -2482,7 +2581,7 @@ dependencies = [
  "log 0.4.8",
  "multihash",
  "multistream-select",
- "parity-multiaddr 0.9.0",
+ "parity-multiaddr 0.9.1",
  "parking_lot 0.10.2",
  "pin-project",
  "prost",
@@ -2493,7 +2592,7 @@ dependencies = [
  "sha2",
  "smallvec 1.4.0",
  "thiserror",
- "unsigned-varint",
+ "unsigned-varint 0.4.0",
  "void",
  "zeroize",
 ]
@@ -2521,9 +2620,9 @@ dependencies = [
 
 [[package]]
 name = "libp2p-identify"
-version = "0.19.1"
+version = "0.19.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6438ed8ca240c7635c9caa3be6c5258bc0058553ae97ba81737f04e5d33804f5"
+checksum = "62f76075b170d908bae616f550ade410d9d27c013fa69042551dbfc757c7c094"
 dependencies = [
  "futures 0.3.5",
  "libp2p-core",
@@ -2537,16 +2636,16 @@ dependencies = [
 
 [[package]]
 name = "libp2p-kad"
-version = "0.19.0"
+version = "0.20.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41d6c1d5100973527ae70d82687465b17049c1b717a7964de38b8e65000878ff"
+checksum = "f7c819a5425b2eb3416d67e9c868c5c1e922b6658655e06b9eeafaa41304b876"
 dependencies = [
  "arrayvec 0.5.1",
  "bytes 0.5.4",
  "either",
  "fnv",
  "futures 0.3.5",
- "futures_codec",
+ "futures_codec 0.4.1",
  "libp2p-core",
  "libp2p-swarm",
  "log 0.4.8",
@@ -2557,16 +2656,16 @@ dependencies = [
  "sha2",
  "smallvec 1.4.0",
  "uint",
- "unsigned-varint",
+ "unsigned-varint 0.4.0",
  "void",
  "wasm-timer",
 ]
 
 [[package]]
 name = "libp2p-mdns"
-version = "0.19.1"
+version = "0.19.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51b00163d13f705aae67c427bea0575f8aaf63da6524f9bd4a5a093b8bda0b38"
+checksum = "7f55b2d4b80986e5bf158270ab23268ec0e7f644ece5436fbaabc5155472f357"
 dependencies = [
  "async-std",
  "data-encoding",
@@ -2586,25 +2685,25 @@ dependencies = [
 
 [[package]]
 name = "libp2p-mplex"
-version = "0.19.1"
+version = "0.19.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34ce63313ad4bce2d76e54c292a1293ea47a0ebbe16708f1513fa62184992f53"
+checksum = "be7d913a4cd57de2013257ec73f07d77bfce390b370023e2d59083e5ca079864"
 dependencies = [
  "bytes 0.5.4",
  "fnv",
  "futures 0.3.5",
- "futures_codec",
+ "futures_codec 0.4.1",
  "libp2p-core",
  "log 0.4.8",
  "parking_lot 0.10.2",
- "unsigned-varint",
+ "unsigned-varint 0.4.0",
 ]
 
 [[package]]
 name = "libp2p-noise"
-version = "0.19.0"
+version = "0.19.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "84fd504e27b0eadd451e06b67694ef714bd8374044e7db339bb0cdb83755ddf4"
+checksum = "a03db664653369f46ee03fcec483a378c20195089bb43a26cb9fb0058009ac88"
 dependencies = [
  "curve25519-dalek",
  "futures 0.3.5",
@@ -2623,9 +2722,9 @@ dependencies = [
 
 [[package]]
 name = "libp2p-ping"
-version = "0.19.2"
+version = "0.19.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffb3c4f9273313357d4977799aec69f581cfe9568854919c5b8066018ccf59f5"
+checksum = "b8dedd34e35a9728d52d59ef36a218e411359a353f9011b2574b86ee790978f6"
 dependencies = [
  "futures 0.3.5",
  "libp2p-core",
@@ -2638,9 +2737,9 @@ dependencies = [
 
 [[package]]
 name = "libp2p-swarm"
-version = "0.19.0"
+version = "0.19.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4a8101a0e0d5f04562137a476bf5f5423cd5bdab2f7e43a75909668e63cb102"
+checksum = "ce53ff4d127cf8b39adf84dbd381ca32d49bd85788cee08e6669da2495993930"
 dependencies = [
  "futures 0.3.5",
  "libp2p-core",
@@ -2653,9 +2752,9 @@ dependencies = [
 
 [[package]]
 name = "libp2p-tcp"
-version = "0.19.1"
+version = "0.19.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "309f95fce9bec755eff5406f8b822fd3969990830c2b54f752e1fc181d5ace3e"
+checksum = "9481500c5774c62e8c413e9535b3f33a0e3dbacf2da63b8d3056c686a9df4146"
 dependencies = [
  "async-std",
  "futures 0.3.5",
@@ -2683,12 +2782,11 @@ dependencies = [
 
 [[package]]
 name = "libp2p-websocket"
-version = "0.19.0"
+version = "0.20.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "085fbe4c05c4116c2164ab4d5a521eb6e00516c444f61b3ee9f68c7b1e53580b"
+checksum = "7e4440551bf6519e0a684cd859ea809aec6d798f686e0d6ed03a28c3e76849b8"
 dependencies = [
  "async-tls",
- "bytes 0.5.4",
  "either",
  "futures 0.3.5",
  "libp2p-core",
@@ -2704,9 +2802,9 @@ dependencies = [
 
 [[package]]
 name = "libp2p-yamux"
-version = "0.19.0"
+version = "0.19.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b305d3a8981e68f11c0e17f2d11d5c52fae95e0d7c283f9e462b5b2dab413b2"
+checksum = "8da33e7b5f49c75c6a8afb0b8d1e229f5fa48be9f39bd14cdbc21459a02ac6fc"
 dependencies = [
  "futures 0.3.5",
  "libp2p-core",
@@ -3014,7 +3112,7 @@ dependencies = [
  "sha-1",
  "sha2",
  "sha3",
- "unsigned-varint",
+ "unsigned-varint 0.3.3",
 ]
 
 [[package]]
@@ -3025,16 +3123,16 @@ checksum = "d8883adfde9756c1d30b0f519c9b8c502a94b41ac62f696453c37c7fc0a958ce"
 
 [[package]]
 name = "multistream-select"
-version = "0.8.1"
+version = "0.8.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "991c33683908c588b8f2cf66c221d8f390818c1bdcd13fce55208408e027a796"
+checksum = "c9157e87afbc2ef0d84cc0345423d715f445edde00141c93721c162de35a05e5"
 dependencies = [
  "bytes 0.5.4",
  "futures 0.3.5",
  "log 0.4.8",
  "pin-project",
  "smallvec 1.4.0",
- "unsigned-varint",
+ "unsigned-varint 0.4.0",
 ]
 
 [[package]]
@@ -3266,7 +3364,7 @@ dependencies = [
 [[package]]
 name = "pallet-authority-discovery"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3282,7 +3380,7 @@ dependencies = [
 [[package]]
 name = "pallet-authorship"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3297,7 +3395,7 @@ dependencies = [
 [[package]]
 name = "pallet-babe"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3319,7 +3417,7 @@ dependencies = [
 [[package]]
 name = "pallet-balances"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3333,7 +3431,7 @@ dependencies = [
 [[package]]
 name = "pallet-collective"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3349,7 +3447,7 @@ dependencies = [
 [[package]]
 name = "pallet-democracy"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3364,7 +3462,7 @@ dependencies = [
 [[package]]
 name = "pallet-elections-phragmen"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3379,7 +3477,7 @@ dependencies = [
 [[package]]
 name = "pallet-finality-tracker"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3395,7 +3493,7 @@ dependencies = [
 [[package]]
 name = "pallet-grandpa"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3415,7 +3513,7 @@ dependencies = [
 [[package]]
 name = "pallet-identity"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "enumflags2",
  "frame-benchmarking",
@@ -3431,7 +3529,7 @@ dependencies = [
 [[package]]
 name = "pallet-im-online"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3451,7 +3549,7 @@ dependencies = [
 [[package]]
 name = "pallet-indices"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3467,7 +3565,7 @@ dependencies = [
 [[package]]
 name = "pallet-membership"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3481,7 +3579,7 @@ dependencies = [
 [[package]]
 name = "pallet-multisig"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3496,7 +3594,7 @@ dependencies = [
 [[package]]
 name = "pallet-nicks"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3510,7 +3608,7 @@ dependencies = [
 [[package]]
 name = "pallet-offences"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3525,7 +3623,7 @@ dependencies = [
 [[package]]
 name = "pallet-offences-benchmarking"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3546,7 +3644,7 @@ dependencies = [
 [[package]]
 name = "pallet-proxy"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3561,7 +3659,7 @@ dependencies = [
 [[package]]
 name = "pallet-randomness-collective-flip"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3574,7 +3672,7 @@ dependencies = [
 [[package]]
 name = "pallet-recovery"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "enumflags2",
  "frame-support",
@@ -3589,7 +3687,7 @@ dependencies = [
 [[package]]
 name = "pallet-scheduler"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3604,7 +3702,7 @@ dependencies = [
 [[package]]
 name = "pallet-session"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3624,7 +3722,7 @@ dependencies = [
 [[package]]
 name = "pallet-session-benchmarking"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3638,7 +3736,7 @@ dependencies = [
 [[package]]
 name = "pallet-society"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3652,7 +3750,7 @@ dependencies = [
 [[package]]
 name = "pallet-staking"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3674,7 +3772,7 @@ dependencies = [
 [[package]]
 name = "pallet-staking-reward-curve"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2 1.0.18",
@@ -3685,7 +3783,7 @@ dependencies = [
 [[package]]
 name = "pallet-sudo"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3699,7 +3797,7 @@ dependencies = [
 [[package]]
 name = "pallet-timestamp"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3717,7 +3815,7 @@ dependencies = [
 [[package]]
 name = "pallet-transaction-payment"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3732,7 +3830,7 @@ dependencies = [
 [[package]]
 name = "pallet-transaction-payment-rpc"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "jsonrpc-core",
  "jsonrpc-core-client",
@@ -3750,7 +3848,7 @@ dependencies = [
 [[package]]
 name = "pallet-transaction-payment-rpc-runtime-api"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-support",
  "parity-scale-codec",
@@ -3763,7 +3861,7 @@ dependencies = [
 [[package]]
 name = "pallet-treasury"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3778,7 +3876,7 @@ dependencies = [
 [[package]]
 name = "pallet-utility"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3794,7 +3892,7 @@ dependencies = [
 [[package]]
 name = "pallet-vesting"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "enumflags2",
  "frame-benchmarking",
@@ -3834,15 +3932,15 @@ dependencies = [
  "percent-encoding 2.1.0",
  "serde",
  "static_assertions",
- "unsigned-varint",
+ "unsigned-varint 0.3.3",
  "url 2.1.1",
 ]
 
 [[package]]
 name = "parity-multiaddr"
-version = "0.9.0"
+version = "0.9.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12ca96399f4a01aa89c59220c4f52ac371940eb4e53e3ce990da796f364bdf69"
+checksum = "cc20af3143a62c16e7c9e92ea5c6ae49f7d271d97d4d8fe73afc28f0514a3d0f"
 dependencies = [
  "arrayref",
  "bs58",
@@ -3852,7 +3950,7 @@ dependencies = [
  "percent-encoding 2.1.0",
  "serde",
  "static_assertions",
- "unsigned-varint",
+ "unsigned-varint 0.4.0",
  "url 2.1.1",
 ]
 
@@ -3868,7 +3966,7 @@ dependencies = [
  "sha-1",
  "sha2",
  "sha3",
- "unsigned-varint",
+ "unsigned-varint 0.3.3",
 ]
 
 [[package]]
@@ -4777,6 +4875,25 @@ dependencies = [
  "tokio 0.2.21",
 ]
 
+[[package]]
+name = "poly1305"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5829f50f48e9ddb79f3f7c3097029d0caee30f8286accb241416df603b080b8"
+dependencies = [
+ "universal-hash",
+]
+
+[[package]]
+name = "polyval"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ec3341498978de3bfd12d1b22f1af1de22818f5473a11e8a6ef997989e3a212"
+dependencies = [
+ "cfg-if",
+ "universal-hash",
+]
+
 [[package]]
 name = "ppv-lite86"
 version = "0.2.8"
@@ -5531,7 +5648,7 @@ dependencies = [
 [[package]]
 name = "sc-authority-discovery"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "bytes 0.5.4",
  "derive_more 0.99.8",
@@ -5558,7 +5675,7 @@ dependencies = [
 [[package]]
 name = "sc-basic-authorship"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "futures 0.3.5",
  "futures-timer 3.0.2",
@@ -5582,7 +5699,7 @@ dependencies = [
 [[package]]
 name = "sc-block-builder"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "sc-client-api",
@@ -5598,7 +5715,7 @@ dependencies = [
 [[package]]
 name = "sc-chain-spec"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "impl-trait-for-tuples",
  "sc-chain-spec-derive",
@@ -5614,7 +5731,7 @@ dependencies = [
 [[package]]
 name = "sc-chain-spec-derive"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2 1.0.18",
@@ -5625,7 +5742,7 @@ dependencies = [
 [[package]]
 name = "sc-cli"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "ansi_term 0.12.1",
  "atty",
@@ -5665,7 +5782,7 @@ dependencies = [
 [[package]]
 name = "sc-client-api"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "fnv",
@@ -5701,7 +5818,7 @@ dependencies = [
 [[package]]
 name = "sc-client-db"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "blake2-rfc",
  "hash-db",
@@ -5730,7 +5847,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "sc-client-api",
  "sp-blockchain",
@@ -5741,7 +5858,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus-babe"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "fork-tree",
@@ -5783,7 +5900,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus-babe-rpc"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "futures 0.3.5",
@@ -5807,7 +5924,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus-epochs"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "fork-tree",
  "parity-scale-codec",
@@ -5820,7 +5937,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus-slots"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "futures 0.3.5",
  "futures-timer 3.0.2",
@@ -5842,7 +5959,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus-uncles"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "log 0.4.8",
  "sc-client-api",
@@ -5856,7 +5973,7 @@ dependencies = [
 [[package]]
 name = "sc-executor"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "lazy_static",
@@ -5884,7 +6001,7 @@ dependencies = [
 [[package]]
 name = "sc-executor-common"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "log 0.4.8",
@@ -5901,7 +6018,7 @@ dependencies = [
 [[package]]
 name = "sc-executor-wasmi"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "log 0.4.8",
  "parity-scale-codec",
@@ -5916,7 +6033,7 @@ dependencies = [
 [[package]]
 name = "sc-executor-wasmtime"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "cranelift-codegen",
  "cranelift-wasm",
@@ -5937,7 +6054,7 @@ dependencies = [
 [[package]]
 name = "sc-finality-grandpa"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "assert_matches",
  "derive_more 0.99.8",
@@ -5975,7 +6092,7 @@ dependencies = [
 [[package]]
 name = "sc-finality-grandpa-rpc"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "finality-grandpa",
@@ -5992,7 +6109,7 @@ dependencies = [
 [[package]]
 name = "sc-informant"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "ansi_term 0.12.1",
  "futures 0.3.5",
@@ -6011,7 +6128,7 @@ dependencies = [
 [[package]]
 name = "sc-keystore"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "hex",
@@ -6027,7 +6144,7 @@ dependencies = [
 [[package]]
 name = "sc-light"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "hash-db",
  "lazy_static",
@@ -6046,7 +6163,7 @@ dependencies = [
 [[package]]
 name = "sc-network"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "bitflags",
  "bs58",
@@ -6058,7 +6175,7 @@ dependencies = [
  "fork-tree",
  "futures 0.3.5",
  "futures-timer 3.0.2",
- "futures_codec",
+ "futures_codec 0.3.4",
  "hex",
  "ip_network",
  "libp2p",
@@ -6089,7 +6206,7 @@ dependencies = [
  "sp-utils",
  "substrate-prometheus-endpoint",
  "thiserror",
- "unsigned-varint",
+ "unsigned-varint 0.3.3",
  "void",
  "wasm-timer",
  "zeroize",
@@ -6098,7 +6215,7 @@ dependencies = [
 [[package]]
 name = "sc-network-gossip"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "futures 0.3.5",
  "futures-timer 3.0.2",
@@ -6113,7 +6230,7 @@ dependencies = [
 [[package]]
 name = "sc-network-test"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "env_logger",
  "futures 0.3.5",
@@ -6140,7 +6257,7 @@ dependencies = [
 [[package]]
 name = "sc-offchain"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "bytes 0.5.4",
  "fnv",
@@ -6167,7 +6284,7 @@ dependencies = [
 [[package]]
 name = "sc-peerset"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "futures 0.3.5",
  "libp2p",
@@ -6180,7 +6297,7 @@ dependencies = [
 [[package]]
 name = "sc-proposer-metrics"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "log 0.4.8",
  "substrate-prometheus-endpoint",
@@ -6189,7 +6306,7 @@ dependencies = [
 [[package]]
 name = "sc-rpc"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "futures 0.3.5",
  "hash-db",
@@ -6221,7 +6338,7 @@ dependencies = [
 [[package]]
 name = "sc-rpc-api"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "futures 0.3.5",
@@ -6245,7 +6362,7 @@ dependencies = [
 [[package]]
 name = "sc-rpc-server"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "jsonrpc-core",
  "jsonrpc-http-server",
@@ -6261,7 +6378,7 @@ dependencies = [
 [[package]]
 name = "sc-service"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "directories",
@@ -6324,7 +6441,7 @@ dependencies = [
 [[package]]
 name = "sc-state-db"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "log 0.4.8",
  "parity-scale-codec",
@@ -6338,9 +6455,8 @@ dependencies = [
 [[package]]
 name = "sc-telemetry"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
- "bytes 0.5.4",
  "futures 0.3.5",
  "futures-timer 3.0.2",
  "libp2p",
@@ -6360,7 +6476,7 @@ dependencies = [
 [[package]]
 name = "sc-tracing"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "erased-serde",
  "log 0.4.8",
@@ -6377,7 +6493,7 @@ dependencies = [
 [[package]]
 name = "sc-transaction-graph"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "futures 0.3.5",
@@ -6397,7 +6513,7 @@ dependencies = [
 [[package]]
 name = "sc-transaction-pool"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "futures 0.3.5",
@@ -6589,12 +6705,6 @@ dependencies = [
  "opaque-debug",
 ]
 
-[[package]]
-name = "sha1"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
-
 [[package]]
 name = "sha2"
 version = "0.8.2"
@@ -6733,13 +6843,13 @@ checksum = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4"
 
 [[package]]
 name = "snow"
-version = "0.6.2"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "afb767eee7d257ba202f0b9b08673bc13b22281632ef45267b19f13100accd2f"
+checksum = "ce0f91be479494dd92e69d9971bd23ed27037dd1c94fcf558f6c6e74e6afa654"
 dependencies = [
- "arrayref",
- "blake2-rfc",
- "chacha20-poly1305-aead",
+ "aes-gcm",
+ "blake2",
+ "chacha20poly1305",
  "rand 0.7.3",
  "rand_core 0.5.1",
  "ring",
@@ -6763,28 +6873,24 @@ dependencies = [
 
 [[package]]
 name = "soketto"
-version = "0.3.2"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c9dab3f95c9ebdf3a88268c19af668f637a3c5039c2c56ff2d40b1b2d64a25b"
+checksum = "85457366ae0c6ce56bf05a958aef14cd38513c236568618edbcd9a8c52cb80b0"
 dependencies = [
- "base64 0.11.0",
+ "base64 0.12.2",
  "bytes 0.5.4",
  "flate2",
  "futures 0.3.5",
- "http 0.2.1",
  "httparse",
  "log 0.4.8",
  "rand 0.7.3",
- "sha1",
- "smallvec 1.4.0",
- "static_assertions",
- "thiserror",
+ "sha-1",
 ]
 
 [[package]]
 name = "sp-allocator"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "log 0.4.8",
@@ -6796,7 +6902,7 @@ dependencies = [
 [[package]]
 name = "sp-api"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "hash-db",
  "parity-scale-codec",
@@ -6811,7 +6917,7 @@ dependencies = [
 [[package]]
 name = "sp-api-proc-macro"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "blake2-rfc",
  "proc-macro-crate",
@@ -6823,7 +6929,7 @@ dependencies = [
 [[package]]
 name = "sp-application-crypto"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "serde",
@@ -6835,7 +6941,7 @@ dependencies = [
 [[package]]
 name = "sp-arithmetic"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "integer-sqrt",
  "num-traits 0.2.12",
@@ -6848,7 +6954,7 @@ dependencies = [
 [[package]]
 name = "sp-authority-discovery"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -6860,7 +6966,7 @@ dependencies = [
 [[package]]
 name = "sp-authorship"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "sp-inherents",
@@ -6871,7 +6977,7 @@ dependencies = [
 [[package]]
 name = "sp-block-builder"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -6883,7 +6989,7 @@ dependencies = [
 [[package]]
 name = "sp-blockchain"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "log 0.4.8",
@@ -6899,7 +7005,7 @@ dependencies = [
 [[package]]
 name = "sp-chain-spec"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "serde",
  "serde_json",
@@ -6908,7 +7014,7 @@ dependencies = [
 [[package]]
 name = "sp-consensus"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "futures 0.3.5",
@@ -6932,7 +7038,7 @@ dependencies = [
 [[package]]
 name = "sp-consensus-aura"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -6946,7 +7052,7 @@ dependencies = [
 [[package]]
 name = "sp-consensus-babe"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "merlin",
  "parity-scale-codec",
@@ -6964,7 +7070,7 @@ dependencies = [
 [[package]]
 name = "sp-consensus-vrf"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "schnorrkel",
@@ -6976,7 +7082,7 @@ dependencies = [
 [[package]]
 name = "sp-core"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "base58",
  "blake2-rfc",
@@ -7018,7 +7124,7 @@ dependencies = [
 [[package]]
 name = "sp-database"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "kvdb",
  "parking_lot 0.10.2",
@@ -7027,7 +7133,7 @@ dependencies = [
 [[package]]
 name = "sp-debug-derive"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "proc-macro2 1.0.18",
  "quote 1.0.7",
@@ -7037,7 +7143,7 @@ dependencies = [
 [[package]]
 name = "sp-externalities"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "environmental",
  "parity-scale-codec",
@@ -7048,7 +7154,7 @@ dependencies = [
 [[package]]
 name = "sp-finality-grandpa"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "finality-grandpa",
  "log 0.4.8",
@@ -7064,7 +7170,7 @@ dependencies = [
 [[package]]
 name = "sp-finality-tracker"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "sp-inherents",
@@ -7074,7 +7180,7 @@ dependencies = [
 [[package]]
 name = "sp-inherents"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "parity-scale-codec",
@@ -7086,7 +7192,7 @@ dependencies = [
 [[package]]
 name = "sp-io"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "futures 0.3.5",
  "hash-db",
@@ -7107,7 +7213,7 @@ dependencies = [
 [[package]]
 name = "sp-keyring"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "lazy_static",
  "sp-core",
@@ -7118,7 +7224,7 @@ dependencies = [
 [[package]]
 name = "sp-npos-elections"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "serde",
@@ -7130,7 +7236,7 @@ dependencies = [
 [[package]]
 name = "sp-npos-elections-compact"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2 1.0.18",
@@ -7141,7 +7247,7 @@ dependencies = [
 [[package]]
 name = "sp-offchain"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "sp-api",
  "sp-core",
@@ -7151,7 +7257,7 @@ dependencies = [
 [[package]]
 name = "sp-panic-handler"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "backtrace",
  "log 0.4.8",
@@ -7160,7 +7266,7 @@ dependencies = [
 [[package]]
 name = "sp-rpc"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "serde",
  "sp-core",
@@ -7169,7 +7275,7 @@ dependencies = [
 [[package]]
 name = "sp-runtime"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "either",
  "hash256-std-hasher",
@@ -7191,7 +7297,7 @@ dependencies = [
 [[package]]
 name = "sp-runtime-interface"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "primitive-types",
@@ -7206,7 +7312,7 @@ dependencies = [
 [[package]]
 name = "sp-runtime-interface-proc-macro"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "Inflector",
  "proc-macro-crate",
@@ -7218,7 +7324,7 @@ dependencies = [
 [[package]]
 name = "sp-serializer"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "serde",
  "serde_json",
@@ -7227,7 +7333,7 @@ dependencies = [
 [[package]]
 name = "sp-session"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -7240,7 +7346,7 @@ dependencies = [
 [[package]]
 name = "sp-staking"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "parity-scale-codec",
  "sp-runtime",
@@ -7250,7 +7356,7 @@ dependencies = [
 [[package]]
 name = "sp-state-machine"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "hash-db",
  "itertools 0.9.0",
@@ -7271,12 +7377,12 @@ dependencies = [
 [[package]]
 name = "sp-std"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 
 [[package]]
 name = "sp-storage"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "impl-serde 0.2.3",
  "ref-cast",
@@ -7288,7 +7394,7 @@ dependencies = [
 [[package]]
 name = "sp-timestamp"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "impl-trait-for-tuples",
  "parity-scale-codec",
@@ -7302,7 +7408,7 @@ dependencies = [
 [[package]]
 name = "sp-tracing"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "log 0.4.8",
  "rental",
@@ -7312,7 +7418,7 @@ dependencies = [
 [[package]]
 name = "sp-transaction-pool"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "derive_more 0.99.8",
  "futures 0.3.5",
@@ -7328,7 +7434,7 @@ dependencies = [
 [[package]]
 name = "sp-trie"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "hash-db",
  "memory-db",
@@ -7342,7 +7448,7 @@ dependencies = [
 [[package]]
 name = "sp-utils"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "futures 0.3.5",
  "futures-core",
@@ -7354,7 +7460,7 @@ dependencies = [
 [[package]]
 name = "sp-version"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "impl-serde 0.2.3",
  "parity-scale-codec",
@@ -7366,7 +7472,7 @@ dependencies = [
 [[package]]
 name = "sp-wasm-interface"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "impl-trait-for-tuples",
  "parity-scale-codec",
@@ -7401,6 +7507,15 @@ dependencies = [
  "rand 0.5.6",
 ]
 
+[[package]]
+name = "stream-cipher"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8131256a5896cabcf5eb04f4d6dacbe1aefda854b0d9896e09cb58829ec5638c"
+dependencies = [
+ "generic-array",
+]
+
 [[package]]
 name = "streamunordered"
 version = "0.5.1"
@@ -7497,7 +7612,7 @@ dependencies = [
 [[package]]
 name = "substrate-browser-utils"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "chrono",
  "clear_on_drop",
@@ -7524,7 +7639,7 @@ dependencies = [
 [[package]]
 name = "substrate-build-script-utils"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "platforms",
 ]
@@ -7532,7 +7647,7 @@ dependencies = [
 [[package]]
 name = "substrate-frame-rpc-system"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "frame-system-rpc-runtime-api",
  "futures 0.3.5",
@@ -7555,7 +7670,7 @@ dependencies = [
 [[package]]
 name = "substrate-prometheus-endpoint"
 version = "0.8.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "async-std",
  "derive_more 0.99.8",
@@ -7569,7 +7684,7 @@ dependencies = [
 [[package]]
 name = "substrate-test-client"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "futures 0.3.5",
  "hash-db",
@@ -7591,7 +7706,7 @@ dependencies = [
 [[package]]
 name = "substrate-test-runtime"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "cfg-if",
  "frame-executive",
@@ -7631,7 +7746,7 @@ dependencies = [
 [[package]]
 name = "substrate-test-runtime-client"
 version = "2.0.0-rc4"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 dependencies = [
  "futures 0.3.5",
  "parity-scale-codec",
@@ -7652,7 +7767,7 @@ dependencies = [
 [[package]]
 name = "substrate-wasm-builder-runner"
 version = "1.0.6"
-source = "git+https://github.com/paritytech/substrate#93a6a53061b9ecb8660c291ab43d083cf51c1f89"
+source = "git+https://github.com/paritytech/substrate#ec2ab7978a54e7f20af2f9ac12bde7719bb744fb"
 
 [[package]]
 name = "substrate-wasm-builder-runner"
@@ -8504,6 +8619,16 @@ version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
 
+[[package]]
+name = "universal-hash"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df0c900f2f9b4116803415878ff48b63da9edb268668e08cf9292d7503114a01"
+dependencies = [
+ "generic-array",
+ "subtle 2.2.3",
+]
+
 [[package]]
 name = "unsigned-varint"
 version = "0.3.3"
@@ -8513,7 +8638,17 @@ dependencies = [
  "bytes 0.5.4",
  "futures-io",
  "futures-util",
- "futures_codec",
+ "futures_codec 0.3.4",
+]
+
+[[package]]
+name = "unsigned-varint"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "669d776983b692a906c881fcd0cfb34271a48e197e4d6cb8df32b05bfc3d3fa5"
+dependencies = [
+ "bytes 0.5.4",
+ "futures_codec 0.4.1",
 ]
 
 [[package]]
diff --git a/polkadot/cli/src/browser.rs b/polkadot/cli/src/browser.rs
index 6f3a4000843..becd3405300 100644
--- a/polkadot/cli/src/browser.rs
+++ b/polkadot/cli/src/browser.rs
@@ -46,8 +46,8 @@ async fn start_inner(chain_spec: String, log_level: String) -> Result<Client, Bo
 	info!("👤 Role: {}", config.display_role());
 
 	// Create the service. This is the most heavy initialization step.
-	let service = service::kusama_new_light(config)
+	let (task_manager, rpc_handlers) = service::kusama_new_light(config)
 		.map_err(|e| format!("{:?}", e))?;
 
-	Ok(browser_utils::start_client(service))
+	Ok(browser_utils::start_client(task_manager, rpc_handlers))
 }
diff --git a/polkadot/cli/src/command.rs b/polkadot/cli/src/command.rs
index 714e3c2ddac..7b437a2c352 100644
--- a/polkadot/cli/src/command.rs
+++ b/polkadot/cli/src/command.rs
@@ -19,8 +19,7 @@ use log::info;
 use service::{IdentifyVariant, self};
 #[cfg(feature = "service-rewr")]
 use service_new::{IdentifyVariant, self as service};
-use sc_executor::NativeExecutionDispatch;
-use sc_cli::{SubstrateCli, Result};
+use sc_cli::{SubstrateCli, Result, RuntimeVersion, Role};
 use crate::cli::{Cli, Subcommand};
 
 fn get_exec_name() -> Option<String> {
@@ -75,6 +74,16 @@ impl SubstrateCli for Cli {
 			path => Box::new(service::PolkadotChainSpec::from_json_file(std::path::PathBuf::from(path))?),
 		})
 	}
+
+	fn native_runtime_version(spec: &Box<dyn service::ChainSpec>) -> &'static RuntimeVersion {
+		if spec.is_kusama() {
+			&service::kusama_runtime::VERSION
+		} else if spec.is_westend() {
+			&service::westend_runtime::VERSION
+		} else {
+			&service::polkadot_runtime::VERSION
+		}
+	}
 }
 
 /// Parses polkadot specific CLI arguments and run the service.
@@ -116,56 +125,44 @@ pub fn run() -> Result<()> {
 				info!("     KUSAMA FOUNDATION      ");
 				info!("----------------------------");
 
-				runtime.run_node(
-					|config| {
-						service::kusama_new_light(config)
-					},
-					|config| {
-						service::kusama_new_full(
-							config,
-							None,
-							None,
-							authority_discovery_enabled,
-							6000,
-							grandpa_pause,
-						).map(|(s, _, _)| s)
-					},
-					service::KusamaExecutor::native_version().runtime_version
-				)
+				runtime.run_node_until_exit(|config| match config.role {
+					Role::Light => service::kusama_new_light(config)
+						.map(|(components, _)| components),
+					_ => service::kusama_new_full(
+						config,
+						None,
+						None,
+						authority_discovery_enabled,
+						6000,
+						grandpa_pause,
+					).map(|(components, _, _)| components)
+				})
 			} else if chain_spec.is_westend() {
-				runtime.run_node(
-					|config| {
-						service::westend_new_light(config)
-					},
-					|config| {
-						service::westend_new_full(
-							config,
-							None,
-							None,
-							authority_discovery_enabled,
-							6000,
-							grandpa_pause,
-						).map(|(s, _, _)| s)
-					},
-					service::WestendExecutor::native_version().runtime_version
-				)
+				runtime.run_node_until_exit(|config| match config.role {
+					Role::Light => service::westend_new_light(config)
+						.map(|(components, _)| components),
+					_ => service::westend_new_full(
+						config,
+						None,
+						None,
+						authority_discovery_enabled,
+						6000,
+						grandpa_pause,
+					).map(|(components, _, _)| components)
+				})
 			} else {
-				runtime.run_node(
-					|config| {
-						service::polkadot_new_light(config)
-					},
-					|config| {
-						service::polkadot_new_full(
-							config,
-							None,
-							None,
-							authority_discovery_enabled,
-							6000,
-							grandpa_pause,
-						).map(|(s, _, _)| s)
-					},
-					service::PolkadotExecutor::native_version().runtime_version
-				)
+				runtime.run_node_until_exit(|config| match config.role {
+					Role::Light => service::polkadot_new_light(config)
+						.map(|(components, _)| components),
+					_ => service::polkadot_new_full(
+						config,
+						None,
+						None,
+						authority_discovery_enabled,
+						6000,
+						grandpa_pause,
+					).map(|(components, _, _)| components)
+				})
 			}
 		},
 		Some(Subcommand::Base(subcommand)) => {
diff --git a/polkadot/cli/src/lib.rs b/polkadot/cli/src/lib.rs
index be2f3c6cd64..385a24d364c 100644
--- a/polkadot/cli/src/lib.rs
+++ b/polkadot/cli/src/lib.rs
@@ -28,14 +28,14 @@ mod command;
 
 #[cfg(not(feature = "service-rewr"))]
 pub use service::{
-	AbstractService, ProvideRuntimeApi, CoreApi, ParachainHost, IdentifyVariant,
+	ProvideRuntimeApi, CoreApi, ParachainHost, IdentifyVariant,
 	Block, self, RuntimeApiCollection, TFullClient
 };
 
 #[cfg(feature = "service-rewr")]
 pub use service_new::{
 	self as service,
-	AbstractService, ProvideRuntimeApi, CoreApi, ParachainHost, IdentifyVariant,
+	ProvideRuntimeApi, CoreApi, ParachainHost, IdentifyVariant,
 	Block, self, RuntimeApiCollection, TFullClient
 };
 
diff --git a/polkadot/collator/src/lib.rs b/polkadot/collator/src/lib.rs
index 063bdb1735c..e2778238ceb 100644
--- a/polkadot/collator/src/lib.rs
+++ b/polkadot/collator/src/lib.rs
@@ -63,7 +63,7 @@ use polkadot_primitives::{
 	}
 };
 use polkadot_cli::{
-	ProvideRuntimeApi, AbstractService, ParachainHost, IdentifyVariant,
+	ProvideRuntimeApi, ParachainHost, IdentifyVariant,
 	service::{self, Role}
 };
 pub use polkadot_cli::service::Configuration;
@@ -386,7 +386,7 @@ where
 	}
 
 	if config.chain_spec.is_kusama() {
-		let (service, client, handlers) = service::kusama_new_full(
+		let (task_manager, client, handlers) = service::kusama_new_full(
 			config,
 			Some((key.public(), para_id)),
 			None,
@@ -394,7 +394,7 @@ where
 			6000,
 			None,
 		)?;
-		let spawn_handle = service.spawn_task_handle();
+		let spawn_handle = task_manager.spawn_handle();
 		build_collator_service(
 			spawn_handle,
 			handlers,
@@ -404,7 +404,7 @@ where
 			build_parachain_context
 		)?.await;
 	} else if config.chain_spec.is_westend() {
-		let (service, client, handlers) = service::westend_new_full(
+		let (task_manager, client, handlers) = service::westend_new_full(
 			config,
 			Some((key.public(), para_id)),
 			None,
@@ -412,7 +412,7 @@ where
 			6000,
 			None,
 		)?;
-		let spawn_handle = service.spawn_task_handle();
+		let spawn_handle = task_manager.spawn_handle();
 		build_collator_service(
 			spawn_handle,
 			handlers,
@@ -422,7 +422,7 @@ where
 			build_parachain_context
 		)?.await;
 	} else {
-		let (service, client, handles) = service::polkadot_new_full(
+		let (task_manager, client, handles) = service::polkadot_new_full(
 			config,
 			Some((key.public(), para_id)),
 			None,
@@ -430,7 +430,7 @@ where
 			6000,
 			None,
 		)?;
-		let spawn_handle = service.spawn_task_handle();
+		let spawn_handle = task_manager.spawn_handle();
 		build_collator_service(
 			spawn_handle,
 			handles,
diff --git a/polkadot/node/service/src/lib.rs b/polkadot/node/service/src/lib.rs
index 620850b3bd6..2c3d77605e1 100644
--- a/polkadot/node/service/src/lib.rs
+++ b/polkadot/node/service/src/lib.rs
@@ -35,9 +35,9 @@ use polkadot_overseer::{
 	CandidateValidationMessage, CandidateBackingMessage,
 };
 pub use service::{
-	AbstractService, Role, PruningMode, TransactionPoolOptions, Error, RuntimeGenesis,
+	Role, PruningMode, TransactionPoolOptions, Error, RuntimeGenesis,
 	TFullClient, TLightClient, TFullBackend, TLightBackend, TFullCallExecutor, TLightCallExecutor,
-	Configuration, ChainSpec, ServiceBuilderCommand,
+	Configuration, ChainSpec, ServiceBuilderCommand, ServiceComponents, TaskManager,
 };
 pub use service::config::{DatabaseConfig, PrometheusConfig};
 pub use sc_executor::NativeExecutionDispatch;
@@ -321,7 +321,10 @@ macro_rules! new_full {
 		let (builder, mut import_setup, inherent_data_providers, mut rpc_setup) =
 			new_full_start!($config, $runtime, $dispatch);
 
-		let service = builder
+		let ServiceComponents {
+			client, network, select_chain, keystore, transaction_pool, prometheus_registry,
+			task_manager, telemetry_on_connect_sinks, ..
+		} = builder
 			.with_finality_proof_provider(|client, backend| {
 				let provider = client as Arc<dyn grandpa::StorageAndProofProvider<_, _>>;
 				Ok(Arc::new(GrandpaFinalityProofProvider::new(backend, provider)) as _)
@@ -334,11 +337,9 @@ macro_rules! new_full {
 		let shared_voter_state = rpc_setup.take()
 			.expect("The SharedVoterState is present for Full Services or setup failed before. qed");
 
-		let client = service.client();
-
-		let overseer_client = service.client();
-		let spawner = service.spawn_task_handle();
-		let leaves: Vec<_> = service.select_chain().ok_or(ServiceError::SelectChainRequired)?
+		let overseer_client = client.clone();
+		let spawner = task_manager.spawn_handle();
+		let leaves: Vec<_> = select_chain.clone().ok_or(ServiceError::SelectChainRequired)?
 			.leaves()
 			.unwrap_or_else(|_| vec![])
 			.into_iter()
@@ -356,7 +357,7 @@ macro_rules! new_full {
 
 		let (overseer, handler) = real_overseer(leaves, spawner)?;
 
-		service.spawn_essential_task_handle().spawn("overseer", Box::pin(async move {
+		task_manager.spawn_essential_handle().spawn_blocking("overseer", Box::pin(async move {
 			use futures::{pin_mut, select, FutureExt};
 
 			let forward = overseer::forward_events(overseer_client, handler);
@@ -377,24 +378,24 @@ macro_rules! new_full {
 		}));
 
 		if role.is_authority() {
-			let select_chain = service.select_chain().ok_or(ServiceError::SelectChainRequired)?;
+			let select_chain = select_chain.ok_or(ServiceError::SelectChainRequired)?;
 			let can_author_with =
 				consensus_common::CanAuthorWithNativeVersion::new(client.executor().clone());
 
 			// TODO: custom proposer (https://github.com/paritytech/polkadot/issues/1248)
 			let proposer = sc_basic_authorship::ProposerFactory::new(
 				client.clone(),
-				service.transaction_pool(),
+				transaction_pool,
 				None,
 			);
 
 			let babe_config = babe::BabeParams {
-				keystore: service.keystore(),
+				keystore: keystore.clone(),
 				client: client.clone(),
 				select_chain,
 				block_import,
 				env: proposer,
-				sync_oracle: service.network(),
+				sync_oracle: network.clone(),
 				inherent_data_providers: inherent_data_providers.clone(),
 				force_authoring,
 				babe_link,
@@ -402,13 +403,13 @@ macro_rules! new_full {
 			};
 
 			let babe = babe::start_babe(babe_config)?;
-			service.spawn_essential_task_handle().spawn_blocking("babe", babe);
+			task_manager.spawn_essential_handle().spawn_blocking("babe", babe);
 		}
 
 		// if the node isn't actively participating in consensus then it doesn't
 		// need a keystore, regardless of which protocol we use below.
 		let keystore = if is_authority {
-			Some(service.keystore() as BareCryptoStorePtr)
+			Some(keystore.clone() as BareCryptoStorePtr)
 		} else {
 			None
 		};
@@ -454,15 +455,15 @@ macro_rules! new_full {
 			let grandpa_config = grandpa::GrandpaParams {
 				config,
 				link: link_half,
-				network: service.network(),
+				network: network.clone(),
 				inherent_data_providers: inherent_data_providers.clone(),
-				telemetry_on_connect: Some(service.telemetry_on_connect_stream()),
+				telemetry_on_connect: Some(telemetry_on_connect_sinks.on_connect_stream()),
 				voting_rule,
-				prometheus_registry: service.prometheus_registry(),
+				prometheus_registry: prometheus_registry,
 				shared_voter_state,
 			};
 
-			service.spawn_essential_task_handle().spawn_blocking(
+			task_manager.spawn_essential_handle().spawn_blocking(
 				"grandpa-voter",
 				grandpa::run_grandpa_voter(grandpa_config)?
 			);
@@ -470,11 +471,11 @@ macro_rules! new_full {
 			grandpa::setup_disabled_grandpa(
 				client.clone(),
 				&inherent_data_providers,
-				service.network(),
+				network.clone(),
 			)?;
 		}
 
-		(service, client)
+		(task_manager, client)
 	}}
 }
 
@@ -566,6 +567,7 @@ macro_rules! new_light {
 				Ok(polkadot_rpc::create_light(light_deps))
 			})?
 			.build_light()
+			.map(|ServiceComponents { task_manager, .. }| task_manager)
 	}}
 }
 
@@ -595,7 +597,7 @@ pub fn polkadot_new_full(
 	grandpa_pause: Option<(u32, u32)>,
 )
 	-> Result<(
-		impl AbstractService,
+		TaskManager,
 		Arc<impl PolkadotClient<
 			Block,
 			TFullBackend<Block>,
@@ -604,7 +606,7 @@ pub fn polkadot_new_full(
 		FullNodeHandles,
 	), ServiceError>
 {
-	let (service, client) = new_full!(
+	let (components, client) = new_full!(
 		config,
 		collating_for,
 		authority_discovery_enabled,
@@ -613,7 +615,7 @@ pub fn polkadot_new_full(
 		PolkadotExecutor,
 	);
 
-	Ok((service, client, FullNodeHandles))
+	Ok((components, client, FullNodeHandles))
 }
 
 /// Create a new Kusama service for a full node.
@@ -626,7 +628,7 @@ pub fn kusama_new_full(
 	_slot_duration: u64,
 	grandpa_pause: Option<(u32, u32)>,
 ) -> Result<(
-		impl AbstractService,
+		TaskManager,
 		Arc<impl PolkadotClient<
 			Block,
 			TFullBackend<Block>,
@@ -636,7 +638,7 @@ pub fn kusama_new_full(
 		FullNodeHandles,
 	), ServiceError>
 {
-	let (service, client) = new_full!(
+	let (components, client) = new_full!(
 		config,
 		collating_for,
 		authority_discovery_enabled,
@@ -645,7 +647,7 @@ pub fn kusama_new_full(
 		KusamaExecutor,
 	);
 
-	Ok((service, client, FullNodeHandles))
+	Ok((components, client, FullNodeHandles))
 }
 
 /// Create a new Kusama service for a full node.
@@ -659,7 +661,7 @@ pub fn westend_new_full(
 	grandpa_pause: Option<(u32, u32)>,
 )
 	-> Result<(
-		impl AbstractService,
+		TaskManager,
 		Arc<impl PolkadotClient<
 			Block,
 			TFullBackend<Block>,
@@ -668,7 +670,7 @@ pub fn westend_new_full(
 		FullNodeHandles,
 	), ServiceError>
 {
-	let (service, client) = new_full!(
+	let (components, client) = new_full!(
 		config,
 		collating_for,
 		authority_discovery_enabled,
@@ -677,45 +679,23 @@ pub fn westend_new_full(
 		WestendExecutor,
 	);
 
-	Ok((service, client, FullNodeHandles))
+	Ok((components, client, FullNodeHandles))
 }
 
 /// Create a new Polkadot service for a light client.
-pub fn polkadot_new_light(mut config: Configuration) -> Result<
-	impl AbstractService<
-		Block = Block,
-		RuntimeApi = polkadot_runtime::RuntimeApi,
-		Backend = TLightBackend<Block>,
-		SelectChain = LongestChain<TLightBackend<Block>, Block>,
-		CallExecutor = TLightCallExecutor<Block, PolkadotExecutor>,
-	>, ServiceError>
+pub fn polkadot_new_light(mut config: Configuration) -> Result<TaskManager, ServiceError>
 {
 	new_light!(config, polkadot_runtime::RuntimeApi, PolkadotExecutor)
 }
 
 /// Create a new Kusama service for a light client.
-pub fn kusama_new_light(mut config: Configuration) -> Result<
-	impl AbstractService<
-		Block = Block,
-		RuntimeApi = kusama_runtime::RuntimeApi,
-		Backend = TLightBackend<Block>,
-		SelectChain = LongestChain<TLightBackend<Block>, Block>,
-		CallExecutor = TLightCallExecutor<Block, KusamaExecutor>,
-	>, ServiceError>
+pub fn kusama_new_light(mut config: Configuration) -> Result<TaskManager, ServiceError>
 {
 	new_light!(config, kusama_runtime::RuntimeApi, KusamaExecutor)
 }
 
 /// Create a new Westend service for a light client.
-pub fn westend_new_light(mut config: Configuration, ) -> Result<
-	impl AbstractService<
-		Block = Block,
-		RuntimeApi = westend_runtime::RuntimeApi,
-		Backend = TLightBackend<Block>,
-		SelectChain = LongestChain<TLightBackend<Block>, Block>,
-		CallExecutor = TLightCallExecutor<Block, KusamaExecutor>
-	>,
-	ServiceError>
+pub fn westend_new_light(mut config: Configuration, ) -> Result<TaskManager, ServiceError>
 {
 	new_light!(config, westend_runtime::RuntimeApi, KusamaExecutor)
 }
diff --git a/polkadot/service/src/lib.rs b/polkadot/service/src/lib.rs
index 82e8460437a..5cf371ebec8 100644
--- a/polkadot/service/src/lib.rs
+++ b/polkadot/service/src/lib.rs
@@ -30,9 +30,9 @@ use grandpa::{self, FinalityProofProvider as GrandpaFinalityProofProvider};
 use sc_executor::native_executor_instance;
 use log::info;
 pub use service::{
-	AbstractService, Role, PruningMode, TransactionPoolOptions, Error, RuntimeGenesis,
+	Role, PruningMode, TransactionPoolOptions, Error, RuntimeGenesis, RpcHandlers,
 	TFullClient, TLightClient, TFullBackend, TLightBackend, TFullCallExecutor, TLightCallExecutor,
-	Configuration, ChainSpec, ServiceBuilderCommand,
+	Configuration, ChainSpec, ServiceBuilderCommand, ServiceComponents, TaskManager,
 };
 pub use service::config::{DatabaseConfig, PrometheusConfig};
 pub use sc_executor::NativeExecutionDispatch;
@@ -298,7 +298,10 @@ macro_rules! new_full {
 		let (builder, mut import_setup, inherent_data_providers, mut rpc_setup) =
 			new_full_start!($config, $runtime, $dispatch);
 
-		let service = builder
+		let ServiceComponents {
+			client, network, select_chain, keystore, transaction_pool, prometheus_registry,
+			task_manager, telemetry_on_connect_sinks, ..
+		} = builder
 			.with_finality_proof_provider(|client, backend| {
 				let provider = client as Arc<dyn grandpa::StorageAndProofProvider<_, _>>;
 				Ok(Arc::new(GrandpaFinalityProofProvider::new(backend, provider)) as _)
@@ -311,16 +314,10 @@ macro_rules! new_full {
 		let shared_voter_state = rpc_setup.take()
 			.expect("The SharedVoterState is present for Full Services or setup failed before. qed");
 
-		let client = service.client();
 		let known_oracle = client.clone();
 
 		let mut handles = FullNodeHandles::default();
-		let select_chain = if let Some(select_chain) = service.select_chain() {
-			select_chain
-		} else {
-			info!("The node cannot start as an authority because it can't select chain.");
-			return Ok((service, client, handles));
-		};
+		let select_chain = select_chain.ok_or(ServiceError::SelectChainRequired)?;
 		let gossip_validator_select_chain = select_chain.clone();
 
 		let is_known = move |block_hash: &Hash| {
@@ -343,13 +340,13 @@ macro_rules! new_full {
 		};
 
 		let polkadot_network_service = network_protocol::start(
-			service.network(),
+			network.clone(),
 			network_protocol::Config {
 				collating_for: $collating_for,
 			},
 			(is_known, client.clone()),
 			client.clone(),
-			service.spawn_task_handle(),
+			task_manager.spawn_handle(),
 		).map_err(|e| format!("Could not spawn network worker: {:?}", e))?;
 
 		let authority_handles = if is_collator || role.is_authority() {
@@ -380,14 +377,14 @@ macro_rules! new_full {
 				client: client.clone(),
 				network: polkadot_network_service.clone(),
 				collators: polkadot_network_service.clone(),
-				spawner: service.spawn_task_handle(),
+				spawner: task_manager.spawn_handle(),
 				availability_store: availability_store.clone(),
 				select_chain: select_chain.clone(),
-				keystore: service.keystore(),
+				keystore: keystore.clone(),
 				max_block_data_size,
 			}.build();
 
-			service.spawn_essential_task_handle().spawn("validation-service", Box::pin(validation_service));
+			task_manager.spawn_essential_handle().spawn("validation-service", Box::pin(validation_service));
 
 			handles.validation_service_handle = Some(validation_service_handle.clone());
 
@@ -403,30 +400,29 @@ macro_rules! new_full {
 
 			let proposer = consensus::ProposerFactory::new(
 				client.clone(),
-				service.transaction_pool(),
+				transaction_pool,
 				validation_service_handle,
 				slot_duration,
-				service.prometheus_registry().as_ref(),
+				prometheus_registry.as_ref(),
 			);
 
-			let select_chain = service.select_chain().ok_or(ServiceError::SelectChainRequired)?;
 			let can_author_with =
 				consensus_common::CanAuthorWithNativeVersion::new(client.executor().clone());
 
 			let block_import = availability_store.block_import(
 				block_import,
 				client.clone(),
-				service.spawn_task_handle(),
-				service.keystore(),
+				task_manager.spawn_handle(),
+				keystore.clone(),
 			)?;
 
 			let babe_config = babe::BabeParams {
-				keystore: service.keystore(),
+				keystore: keystore.clone(),
 				client: client.clone(),
 				select_chain,
 				block_import,
 				env: proposer,
-				sync_oracle: service.network(),
+				sync_oracle: network.clone(),
 				inherent_data_providers: inherent_data_providers.clone(),
 				force_authoring,
 				babe_link,
@@ -434,7 +430,7 @@ macro_rules! new_full {
 			};
 
 			let babe = babe::start_babe(babe_config)?;
-			service.spawn_essential_task_handle().spawn_blocking("babe", babe);
+			task_manager.spawn_essential_handle().spawn_blocking("babe", babe);
 		}
 
 		if matches!(role, Role::Authority{..} | Role::Sentry{..}) {
@@ -443,7 +439,7 @@ macro_rules! new_full {
 					Role::Authority { ref sentry_nodes } => (
 						sentry_nodes.clone(),
 						authority_discovery::Role::Authority (
-							service.keystore(),
+							keystore.clone(),
 						),
 					),
 					Role::Sentry {..} => (
@@ -453,29 +449,28 @@ macro_rules! new_full {
 					_ => unreachable!("Due to outer matches! constraint; qed."),
 				};
 
-				let network = service.network();
 				let network_event_stream = network.event_stream("authority-discovery");
 				let dht_event_stream = network_event_stream.filter_map(|e| async move { match e {
 					Event::Dht(e) => Some(e),
 					_ => None,
 				}}).boxed();
 				let authority_discovery = authority_discovery::AuthorityDiscovery::new(
-					service.client(),
-					network,
+					client.clone(),
+					network.clone(),
 					sentries,
 					dht_event_stream,
 					authority_discovery_role,
-					service.prometheus_registry(),
+					prometheus_registry.clone(),
 				);
 
-				service.spawn_task_handle().spawn("authority-discovery", authority_discovery);
+				task_manager.spawn_handle().spawn("authority-discovery", authority_discovery);
 			}
 		}
 
 		// if the node isn't actively participating in consensus then it doesn't
 		// need a keystore, regardless of which protocol we use below.
 		let keystore = if is_authority {
-			Some(service.keystore() as BareCryptoStorePtr)
+			Some(keystore as BareCryptoStorePtr)
 		} else {
 			None
 		};
@@ -521,15 +516,15 @@ macro_rules! new_full {
 			let grandpa_config = grandpa::GrandpaParams {
 				config,
 				link: link_half,
-				network: service.network(),
+				network: network.clone(),
 				inherent_data_providers: inherent_data_providers.clone(),
-				telemetry_on_connect: Some(service.telemetry_on_connect_stream()),
+				telemetry_on_connect: Some(telemetry_on_connect_sinks.on_connect_stream()),
 				voting_rule,
-				prometheus_registry: service.prometheus_registry(),
+				prometheus_registry: prometheus_registry.clone(),
 				shared_voter_state,
 			};
 
-			service.spawn_essential_task_handle().spawn_blocking(
+			task_manager.spawn_essential_handle().spawn_blocking(
 				"grandpa-voter",
 				grandpa::run_grandpa_voter(grandpa_config)?
 			);
@@ -537,12 +532,12 @@ macro_rules! new_full {
 			grandpa::setup_disabled_grandpa(
 				client.clone(),
 				&inherent_data_providers,
-				service.network(),
+				network.clone(),
 			)?;
 		}
 
 		handles.polkadot_network = Some(polkadot_network_service);
-		(service, client, handles)
+		(task_manager, client, handles)
 	}}
 }
 
@@ -632,6 +627,9 @@ macro_rules! new_light {
 				Ok(polkadot_rpc::create_light(light_deps))
 			})?
 			.build_light()
+			.map(|ServiceComponents { task_manager, rpc_handlers, .. }| {
+				(task_manager, rpc_handlers)
+			})
 	}}
 }
 
@@ -661,7 +659,7 @@ pub fn polkadot_new_full(
 	grandpa_pause: Option<(u32, u32)>,
 )
 	-> Result<(
-		impl AbstractService,
+		TaskManager,
 		Arc<impl PolkadotClient<
 			Block,
 			TFullBackend<Block>,
@@ -694,7 +692,7 @@ pub fn kusama_new_full(
 	slot_duration: u64,
 	grandpa_pause: Option<(u32, u32)>,
 ) -> Result<(
-		impl AbstractService,
+		TaskManager,
 		Arc<impl PolkadotClient<
 			Block,
 			TFullBackend<Block>,
@@ -729,7 +727,7 @@ pub fn westend_new_full(
 	grandpa_pause: Option<(u32, u32)>,
 )
 	-> Result<(
-		impl AbstractService,
+		TaskManager,
 		Arc<impl PolkadotClient<
 			Block,
 			TFullBackend<Block>,
@@ -765,40 +763,24 @@ pub struct FullNodeHandles {
 
 /// Create a new Polkadot service for a light client.
 pub fn polkadot_new_light(mut config: Configuration) -> Result<
-	impl AbstractService<
-		Block = Block,
-		RuntimeApi = polkadot_runtime::RuntimeApi,
-		Backend = TLightBackend<Block>,
-		SelectChain = LongestChain<TLightBackend<Block>, Block>,
-		CallExecutor = TLightCallExecutor<Block, PolkadotExecutor>,
-	>, ServiceError>
+	(TaskManager, Arc<RpcHandlers>), ServiceError
+>
 {
 	new_light!(config, polkadot_runtime::RuntimeApi, PolkadotExecutor)
 }
 
 /// Create a new Kusama service for a light client.
 pub fn kusama_new_light(mut config: Configuration) -> Result<
-	impl AbstractService<
-		Block = Block,
-		RuntimeApi = kusama_runtime::RuntimeApi,
-		Backend = TLightBackend<Block>,
-		SelectChain = LongestChain<TLightBackend<Block>, Block>,
-		CallExecutor = TLightCallExecutor<Block, KusamaExecutor>,
-	>, ServiceError>
+	(TaskManager, Arc<RpcHandlers>), ServiceError
+>
 {
 	new_light!(config, kusama_runtime::RuntimeApi, KusamaExecutor)
 }
 
 /// Create a new Westend service for a light client.
 pub fn westend_new_light(mut config: Configuration, ) -> Result<
-	impl AbstractService<
-		Block = Block,
-		RuntimeApi = westend_runtime::RuntimeApi,
-		Backend = TLightBackend<Block>,
-		SelectChain = LongestChain<TLightBackend<Block>, Block>,
-		CallExecutor = TLightCallExecutor<Block, KusamaExecutor>
-	>,
-	ServiceError>
+	(TaskManager, Arc<RpcHandlers>), ServiceError
+>
 {
 	new_light!(config, westend_runtime::RuntimeApi, KusamaExecutor)
 }
-- 
GitLab