From c31f8168df26c3e65159fb80e5165b131ff5d766 Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Sun, 25 Nov 2018 11:25:36 +0100 Subject: [PATCH] Make work with Substrate master (#36) * Fix up wasm runtime build * Fixes for runtime * Fix. * More fixes * Runtime builds on native. * Native and wasm both build without warnings. * Fix runtime tests. * Merge #20 * Final fix for native runtime. * Compile polkadot wo consensus * Reverted changes to polkadot-consensus * reintroduce minimal subset of consensus * reintroduce checked_block to runtime for std * polkadot_consensus compiles without most of the code * remove checked_block again and do more checks in parachains for runtime * uncomment proposer * remove offline tracker * extract out parachain-attestation logic from proposal directly * reintroduce transaction_pool * write some custom aura verification logic for the block verifier * use transaction pool in more generic way * service compiles again * polkadot-network and tests pass * remove unused session_key function from router * everything but CLI compiles due to service hell * Fixes compilation of `polkadot_cli` * everything compiles * update adder wasm --- polkadot/Cargo.lock | 3226 +++++++++-------- polkadot/Cargo.toml | 7 +- polkadot/api/Cargo.toml | 22 - polkadot/api/README.adoc | 5 - polkadot/api/src/full.rs | 220 -- polkadot/api/src/lib.rs | 149 - polkadot/api/src/light.rs | 108 - polkadot/availability-store/Cargo.toml | 2 +- polkadot/availability-store/src/lib.rs | 2 +- polkadot/cli/Cargo.toml | 1 + polkadot/cli/src/lib.rs | 50 +- polkadot/collator/Cargo.toml | 3 +- polkadot/collator/src/lib.rs | 33 +- polkadot/consensus/Cargo.toml | 10 +- polkadot/consensus/src/collation.rs | 29 +- polkadot/consensus/src/error.rs | 14 +- polkadot/consensus/src/evaluation.rs | 54 +- polkadot/consensus/src/lib.rs | 596 ++- polkadot/consensus/src/offline_tracker.rs | 167 - polkadot/consensus/src/service.rs | 188 +- polkadot/consensus/src/shared_table/mod.rs | 5 + polkadot/executor/src/lib.rs | 7 +- polkadot/network/Cargo.toml | 7 +- polkadot/network/src/consensus.rs | 244 +- polkadot/network/src/lib.rs | 50 +- polkadot/network/src/router.rs | 77 +- polkadot/network/src/tests.rs | 8 +- polkadot/parachain/Cargo.toml | 4 +- polkadot/parachain/tests/res/adder.wasm | Bin 27651 -> 33998 bytes polkadot/primitives/Cargo.toml | 17 +- polkadot/primitives/src/lib.rs | 19 +- polkadot/primitives/src/parachain.rs | 28 +- polkadot/runtime/Cargo.toml | 11 +- polkadot/runtime/src/checked_block.rs | 118 - polkadot/runtime/src/lib.rs | 640 ++-- polkadot/runtime/src/parachains.rs | 326 +- polkadot/runtime/src/utils.rs | 47 - polkadot/runtime/wasm/Cargo.lock | 349 +- polkadot/runtime/wasm/Cargo.toml | 5 +- .../release/polkadot_runtime.compact.wasm | Bin 505354 -> 428575 bytes .../release/polkadot_runtime.wasm | Bin 505440 -> 648922 bytes polkadot/service/Cargo.toml | 8 +- polkadot/service/src/chain_spec.rs | 86 +- polkadot/service/src/lib.rs | 318 +- polkadot/src/main.rs | 4 +- polkadot/statement-table/Cargo.toml | 4 +- polkadot/test-parachains/adder/Cargo.toml | 3 +- polkadot/test-parachains/adder/src/lib.rs | 4 +- polkadot/transaction-pool/Cargo.toml | 18 - polkadot/transaction-pool/README.adoc | 5 - polkadot/transaction-pool/src/error.rs | 73 - polkadot/transaction-pool/src/lib.rs | 579 --- 52 files changed, 3281 insertions(+), 4669 deletions(-) delete mode 100644 polkadot/api/Cargo.toml delete mode 100644 polkadot/api/README.adoc delete mode 100644 polkadot/api/src/full.rs delete mode 100644 polkadot/api/src/lib.rs delete mode 100644 polkadot/api/src/light.rs delete mode 100644 polkadot/consensus/src/offline_tracker.rs delete mode 100644 polkadot/runtime/src/checked_block.rs delete mode 100644 polkadot/runtime/src/utils.rs delete mode 100644 polkadot/transaction-pool/Cargo.toml delete mode 100644 polkadot/transaction-pool/README.adoc delete mode 100644 polkadot/transaction-pool/src/error.rs delete mode 100644 polkadot/transaction-pool/src/lib.rs diff --git a/polkadot/Cargo.lock b/polkadot/Cargo.lock index 2bdda86986..e48886a2b0 100644 --- a/polkadot/Cargo.lock +++ b/polkadot/Cargo.lock @@ -2,7 +2,8 @@ name = "adder" version = "0.1.0" dependencies = [ - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-parachain 0.1.0", "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -14,7 +15,7 @@ dependencies = [ "adder 0.1.0", "ctrlc 1.1.1 (git+https://github.com/paritytech/rust-ctrlc.git)", "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-collator 0.1.0", "polkadot-parachain 0.1.0", @@ -23,25 +24,55 @@ dependencies = [ ] [[package]] -name = "aho-corasick" -version = "0.6.6" +name = "aes-ctr" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "aes-soft 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "aesni 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ctr 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "stream-cipher 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aes-soft" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-cipher-trait 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "opaque-debug 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aesni" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-cipher-trait 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "opaque-debug 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "stream-cipher 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "aio-limited" version = "0.1.0" -source = "git+https://github.com/paritytech/aio-limited.git#1f42497dcd2a6f85b83af97cd80314b26a1e4a9e" +source = "git+https://github.com/paritytech/aio-limited.git#f01b01501c87c93d3005f9120cc35d0e576fa7a3" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -49,17 +80,12 @@ name = "ansi_term" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "ansi_term" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "ansi_term" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -75,7 +101,7 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -83,15 +109,15 @@ name = "arrayvec" version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "asn1_der" -version = "0.5.5" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "etrace 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "etrace 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -101,7 +127,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -110,10 +136,10 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -121,56 +147,44 @@ name = "backtrace-sys" version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "base-x" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "base58" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "base64" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "base64" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "base64" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "base64" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "bigint" -version = "4.4.0" +version = "4.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -186,9 +200,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bitflags" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "blake2" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crypto-mac 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "blake2-rfc" version = "0.2.18" @@ -203,13 +227,21 @@ name = "block-buffer" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "arrayref 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "block-cipher-trait" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "bs58" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -224,44 +256,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "byteorder" -version = "1.2.4" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bytes" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "cc" -version = "1.0.18" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "cfg-if" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "chashmap" -version = "2.2.1" -source = "git+https://github.com/redox-os/tfs#3e7dcdb0c586d0d8bb3f25bfd948d2f418a4ab10" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "owning_ref 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "chrono" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -272,12 +304,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", - "yaml-rust 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "clear_on_drop" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -285,15 +324,15 @@ name = "cloudabi" version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "cmake" -version = "0.1.33" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -303,16 +342,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "core-foundation" -version = "0.2.3" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "core-foundation-sys" -version = "0.2.3" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", @@ -323,11 +362,6 @@ name = "crossbeam" version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "crossbeam" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "crossbeam-deque" version = "0.2.0" @@ -339,11 +373,11 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.3.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-epoch 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -352,23 +386,23 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crossbeam-epoch" -version = "0.4.3" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -378,15 +412,7 @@ name = "crossbeam-utils" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-utils" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -394,11 +420,51 @@ name = "crossbeam-utils" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "crossbeam-utils" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "crunchy" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "crunchy" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "crypto-mac" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crypto-mac" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ctr" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-cipher-trait 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "stream-cipher 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "ctrlc" version = "1.1.1" @@ -409,17 +475,35 @@ dependencies = [ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "curve25519-dalek" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "clear_on_drop 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "subtle 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "data-encoding" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "datastore" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "base64 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "chashmap 2.2.1 (git+https://github.com/redox-os/tfs)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", - "tempfile 3.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "chashmap 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", + "tempfile 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -429,17 +513,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "digest" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "edit-distance" -version = "2.0.1" +name = "discard" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "ed25519-dalek" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "clear_on_drop 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "curve25519-dalek 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "either" version = "1.5.0" @@ -462,10 +559,22 @@ dependencies = [ "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "env_logger" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "humantime 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "environmental" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "error-chain" @@ -478,100 +587,17 @@ dependencies = [ [[package]] name = "eth-secp256k1" version = "0.5.7" -source = "git+https://github.com/paritytech/rust-secp256k1#db81cfea59014b4d176f10f86ed52e1a130b6822" +source = "git+https://github.com/paritytech/rust-secp256k1#ccc06e7480148b723eb44ac56cf4d20eec380b6f" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ethbloom" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ethcore-io" -version = "1.12.0" -source = "git+https://github.com/paritytech/parity.git#6e62d77e4d6211fca1b66a34f3b5047f3a406e77" -dependencies = [ - "crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "timer 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ethereum-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "ethbloom 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ethereum-types" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "ethbloom 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ethereum-types-serialize" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ethkey" -version = "0.3.0" -source = "git+https://github.com/paritytech/parity.git#6e62d77e4d6211fca1b66a34f3b5047f3a406e77" -dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "edit-distance 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)", - "ethereum-types 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mem 0.1.0 (git+https://github.com/paritytech/parity.git)", - "parity-crypto 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "etrace" -version = "1.0.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -579,10 +605,15 @@ name = "exit-future" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "failure" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "fake-simd" version = "0.1.2" @@ -597,14 +628,29 @@ dependencies = [ ] [[package]] -name = "fixed-hash" -version = "0.2.2" +name = "finality-grandpa" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fixed-hash" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -630,10 +676,10 @@ name = "fs-swap" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -641,7 +687,7 @@ name = "fuchsia-zircon" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -652,7 +698,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "futures" -version = "0.1.23" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -660,13 +706,13 @@ name = "futures-cpupool" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "gcc" -version = "0.3.54" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -687,22 +733,44 @@ dependencies = [ [[package]] name = "globset" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "hashdb" -version = "0.2.1" +name = "h2" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", + "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "string 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hash-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#2616db2a2529098949e5d39aa06dd4e502a9e5f7" + +[[package]] +name = "hash256-std-hasher" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#2616db2a2529098949e5d39aa06dd4e502a9e5f7" +dependencies = [ + "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -710,7 +778,15 @@ name = "heapsize" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "heck" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-segmentation 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -724,7 +800,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -732,21 +808,48 @@ name = "hex-literal-impl" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hmac" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crypto-mac 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "http" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "httparse" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "hyper" -version = "0.10.13" +name = "humantime" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hyper" +version = "0.10.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -755,33 +858,33 @@ dependencies = [ "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "hyper" -version = "0.11.27" +version = "0.12.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "h2 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", + "http 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mime 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "relay 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "want 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -789,20 +892,20 @@ name = "idna" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "matches 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "integer-encoding" -version = "1.0.5" +name = "indexmap" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "integer-sqrt" -version = "0.1.0" -source = "git+https://github.com/paritytech/integer-sqrt-rs.git#886e9cb983c46498003878afe965d55caa762025" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "interleaved-ordered" @@ -818,87 +921,82 @@ dependencies = [ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "itertools" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "itoa" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "jsonrpc-core" -version = "8.0.2" -source = "git+https://github.com/paritytech/jsonrpc.git#7e5df8ca2acc01c608b2d2bd8cdcdb19d8cbaa90" +version = "9.0.0" +source = "git+https://github.com/paritytech/jsonrpc.git#62d739e807c536575c1c885479706bffed3a8880" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "jsonrpc-http-server" -version = "8.0.1" -source = "git+https://github.com/paritytech/jsonrpc.git#7e5df8ca2acc01c608b2d2bd8cdcdb19d8cbaa90" +version = "9.0.0" +source = "git+https://github.com/paritytech/jsonrpc.git#62d739e807c536575c1c885479706bffed3a8880" dependencies = [ - "hyper 0.11.27 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", - "jsonrpc-server-utils 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.12.14 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpc-core 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "jsonrpc-server-utils 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicase 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "jsonrpc-macros" -version = "8.0.1" -source = "git+https://github.com/paritytech/jsonrpc.git#7e5df8ca2acc01c608b2d2bd8cdcdb19d8cbaa90" +version = "9.0.0" +source = "git+https://github.com/paritytech/jsonrpc.git#62d739e807c536575c1c885479706bffed3a8880" dependencies = [ - "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", - "jsonrpc-pubsub 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpc-core 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "jsonrpc-pubsub 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "jsonrpc-pubsub" -version = "8.0.1" -source = "git+https://github.com/paritytech/jsonrpc.git#7e5df8ca2acc01c608b2d2bd8cdcdb19d8cbaa90" +version = "9.0.0" +source = "git+https://github.com/paritytech/jsonrpc.git#62d739e807c536575c1c885479706bffed3a8880" dependencies = [ - "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpc-core 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "jsonrpc-server-utils" -version = "8.0.1" -source = "git+https://github.com/paritytech/jsonrpc.git#7e5df8ca2acc01c608b2d2bd8cdcdb19d8cbaa90" +version = "9.0.0" +source = "git+https://github.com/paritytech/jsonrpc.git#62d739e807c536575c1c885479706bffed3a8880" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "globset 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "globset 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpc-core 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "unicase 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "jsonrpc-ws-server" -version = "8.0.0" -source = "git+https://github.com/paritytech/jsonrpc.git#7e5df8ca2acc01c608b2d2bd8cdcdb19d8cbaa90" +version = "9.0.0" +source = "git+https://github.com/paritytech/jsonrpc.git#62d739e807c536575c1c885479706bffed3a8880" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", - "jsonrpc-server-utils 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpc-core 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "jsonrpc-server-utils 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "ws 0.7.5 (git+https://github.com/tomusdrw/ws-rs)", ] @@ -915,7 +1013,7 @@ dependencies = [ [[package]] name = "kvdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common.git#8ea8ed6e94e1f515bb4e53149d4c6563dfef67b4" +source = "git+https://github.com/paritytech/parity-common.git#579c81eb4f7169dfc764919b020f10bb8f117440" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common.git)", @@ -933,31 +1031,31 @@ dependencies = [ [[package]] name = "kvdb-memorydb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common.git#22209e14805e5764f7fe81259324d34eab179264" +source = "git+https://github.com/paritytech/parity-common.git#579c81eb4f7169dfc764919b020f10bb8f117440" dependencies = [ "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common.git)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "kvdb-rocksdb" -version = "0.1.3" -source = "git+https://github.com/paritytech/parity-common.git#8ea8ed6e94e1f515bb4e53149d4c6563dfef67b4" +version = "0.1.4" +source = "git+https://github.com/paritytech/parity-common.git#579c81eb4f7169dfc764919b020f10bb8f117440" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "fs-swap 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "interleaved-ordered 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common.git)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-rocksdb 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "kvdb-rocksdb" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -967,7 +1065,7 @@ dependencies = [ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-rocksdb 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -983,15 +1081,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "lazy_static" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "lazycell" -version = "0.6.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1004,303 +1099,319 @@ name = "libloading" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-dns 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-floodsub 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-identify 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-kad 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-mplex 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-ping 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-ratelimit 0.1.1 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-relay 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-secio 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-tcp-transport 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-transport-timeout 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-uds 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-websocket 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-yamux 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-dns 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-floodsub 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-identify 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-kad 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-mplex 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-ping 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-ratelimit 0.1.1 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-relay 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-secio 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-tcp-transport 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-transport-timeout 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-uds 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-websocket 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-yamux 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-current-thread 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-core" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "multistream-select 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "multistream-select 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-dns" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "tokio-dns-unofficial 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-floodsub" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "unsigned-varint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-identify" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "unsigned-varint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-kad" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "bigint 4.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "datastore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", + "bigint 4.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "datastore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-identify 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-ping 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-identify 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-ping 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "unsigned-varint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-mplex" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "unsigned-varint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-peerstore" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "datastore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", + "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "datastore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-ping" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "multistream-select 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "multistream-select 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-ratelimit" version = "0.1.1" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ "aio-limited 0.1.0 (git+https://github.com/paritytech/aio-limited.git)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-relay" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "protobuf 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "unsigned-varint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-secio" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "asn1_der 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "aes-ctr 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "asn1_der 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "ctr 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ed25519-dalek 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "hmac 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "protobuf 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", - "rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "sha2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "stdweb 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "twofish 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-tcp-transport" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "tk-listen 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-transport-timeout" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-uds" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "tokio-uds 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "tokio-uds 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-websocket" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", "stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "websocket 0.20.3 (git+https://github.com/tomaka/rust-websocket?branch=send)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "websocket 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libp2p-yamux" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "yamux 0.1.0 (git+https://github.com/paritytech/yamux)", ] @@ -1321,10 +1432,10 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1333,33 +1444,48 @@ name = "log" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "log" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mashup" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "mashup-impl 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mashup-impl" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "matches" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "mem" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity.git#6e62d77e4d6211fca1b66a34f3b5047f3a406e77" - [[package]] name = "memchr" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1367,23 +1493,20 @@ name = "memoffset" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "memory-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#2616db2a2529098949e5d39aa06dd4e502a9e5f7" +dependencies = [ + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "memory_units" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "memorydb" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "mime" version = "0.2.6" @@ -1392,32 +1515,35 @@ dependencies = [ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "mime" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "mio" -version = "0.6.15" +version = "0.6.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "mio-extras" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "mio-uds" version = "0.6.7" @@ -1425,7 +1551,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1442,35 +1568,40 @@ dependencies = [ [[package]] name = "multiaddr" version = "0.3.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "integer-encoding 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "data-encoding 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "unsigned-varint 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "multihash" version = "0.8.1-pre" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ + "blake2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "sha1 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "sha2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unsigned-varint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "multistream-select" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "unsigned-varint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1482,23 +1613,21 @@ dependencies = [ "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "nan-preserving-float" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "native-tls" -version = "0.1.5" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", - "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", + "schannel 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tempfile 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1506,14 +1635,19 @@ name = "net2" version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "nodrop" -version = "0.1.12" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "nohash-hasher" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1521,12 +1655,12 @@ name = "num-integer" version = "0.1.39" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-traits" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1546,29 +1680,45 @@ dependencies = [ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "opaque-debug" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "openssl" -version = "0.9.24" +version = "0.10.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.35 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "openssl-probe" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "openssl-sys" -version = "0.9.35" +version = "0.9.39" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)", - "vcpkg 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", + "vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "owning_ref" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "owning_ref" version = "0.3.3" @@ -1577,10 +1727,18 @@ dependencies = [ "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "owning_ref" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "parity-bytes" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common.git#8ea8ed6e94e1f515bb4e53149d4c6563dfef67b4" +source = "git+https://github.com/paritytech/parity-common.git#579c81eb4f7169dfc764919b020f10bb8f117440" [[package]] name = "parity-bytes" @@ -1589,20 +1747,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "parity-codec" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +version = "2.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "parity-codec-derive" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.14.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1623,15 +1782,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "local-encoding 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-rocksdb-sys 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-rocksdb-sys 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "parity-rocksdb-sys" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cmake 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "local-encoding 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-snappy-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1642,7 +1801,7 @@ name = "parity-snappy-sys" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cmake 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)", + "cmake 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1651,17 +1810,17 @@ name = "parity-wasm" version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "parity-wordlist" -version = "1.2.0" +name = "parking_lot" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", + "owning_ref 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", + "thread-id 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1684,11 +1843,11 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lock_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", + "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1697,21 +1856,21 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "patricia-trie" -version = "0.2.2" +name = "parking_lot_core" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1721,57 +1880,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "pkg-config" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "plain_hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "polkadot" version = "0.3.0" dependencies = [ "ctrlc 1.1.1 (git+https://github.com/paritytech/rust-ctrlc.git)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-cli 0.3.0", "vergen 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "polkadot-api" -version = "0.1.0" -dependencies = [ - "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "polkadot-executor 0.1.0", - "polkadot-primitives 0.1.0", - "polkadot-runtime 0.1.0", - "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", - "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "srml-executive 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-executor 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-state-machine 0.1.0 (git+https://github.com/paritytech/substrate)", -] - [[package]] name = "polkadot-availability-store" version = "0.1.0" dependencies = [ "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common.git)", "kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common.git)", - "kvdb-rocksdb 0.1.3 (git+https://github.com/paritytech/parity-common.git)", + "kvdb-rocksdb 0.1.4 (git+https://github.com/paritytech/parity-common.git)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -1782,27 +1913,27 @@ name = "polkadot-cli" version = "0.3.0" dependencies = [ "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-service 0.3.0", + "structopt 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-cli 0.3.0 (git+https://github.com/paritytech/substrate)", - "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "polkadot-collator" version = "0.1.0" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "polkadot-api 0.1.0", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-cli 0.3.0", "polkadot-primitives 0.1.0", "polkadot-runtime 0.1.0", "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1811,25 +1942,25 @@ version = "0.1.0" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "polkadot-api 0.1.0", "polkadot-availability-store 0.1.0", "polkadot-parachain 0.1.0", "polkadot-primitives 0.1.0", "polkadot-runtime 0.1.0", "polkadot-statement-table 0.1.0", - "polkadot-transaction-pool 0.1.0", - "rhododendron 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-bft 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-consensus-aura 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-consensus-common 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-finality-grandpa 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-transaction-pool 0.1.0 (git+https://github.com/paritytech/substrate)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1845,20 +1976,19 @@ dependencies = [ name = "polkadot-network" version = "0.1.0" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "polkadot-api 0.1.0", "polkadot-availability-store 0.1.0", "polkadot-consensus 0.1.0", "polkadot-primitives 0.1.0", - "rhododendron 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "substrate-bft 0.1.0 (git+https://github.com/paritytech/substrate)", + "rhododendron 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-network 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1866,23 +1996,25 @@ name = "polkadot-parachain" version = "0.1.0" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "polkadot-primitives" version = "0.1.0" dependencies = [ - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-serializer 0.1.0 (git+https://github.com/paritytech/substrate)", ] @@ -1893,13 +2025,13 @@ version = "0.1.0" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -1915,6 +2047,7 @@ dependencies = [ "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-timestamp 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-treasury 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-serializer 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -1926,55 +2059,37 @@ version = "0.3.0" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "polkadot-api 0.1.0", "polkadot-availability-store 0.1.0", - "polkadot-consensus 0.1.0", "polkadot-executor 0.1.0", "polkadot-network 0.1.0", "polkadot-primitives 0.1.0", "polkadot-runtime 0.1.0", - "polkadot-transaction-pool 0.1.0", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-consensus-aura 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-network 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-service 0.3.0 (git+https://github.com/paritytech/substrate)", "substrate-telemetry 0.3.0 (git+https://github.com/paritytech/substrate)", - "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-transaction-pool 0.1.0 (git+https://github.com/paritytech/substrate)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "polkadot-statement-table" version = "0.1.0" dependencies = [ - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", ] -[[package]] -name = "polkadot-transaction-pool" -version = "0.1.0" -dependencies = [ - "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "polkadot-api 0.1.0", - "polkadot-primitives 0.1.0", - "polkadot-runtime 0.1.0", - "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-extrinsic-pool 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", -] - [[package]] name = "pretty_assertions" version = "0.4.1" @@ -1986,20 +2101,20 @@ dependencies = [ [[package]] name = "proc-macro-hack" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "proc-macro-hack-impl" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "proc-macro2" -version = "0.4.12" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2007,7 +2122,7 @@ dependencies = [ [[package]] name = "protobuf" -version = "2.0.4" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2018,20 +2133,6 @@ dependencies = [ "getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "pwasm-alloc" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" -dependencies = [ - "pwasm-libc 0.1.0 (git+https://github.com/paritytech/substrate)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pwasm-libc" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" - [[package]] name = "quick-error" version = "0.1.4" @@ -2044,10 +2145,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "quote" -version = "0.6.6" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2057,17 +2158,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2078,13 +2179,21 @@ dependencies = [ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand_core" -version = "0.2.1" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2097,7 +2206,7 @@ dependencies = [ [[package]] name = "rayon" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2111,14 +2220,14 @@ version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "redox_syscall" -version = "0.1.40" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2126,7 +2235,7 @@ name = "redox_termios" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2134,23 +2243,23 @@ name = "regex" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex" -version = "1.0.2" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2158,23 +2267,15 @@ name = "regex-syntax" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex-syntax" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "relay" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2182,16 +2283,16 @@ name = "remove_dir_all" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rhododendron" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2200,30 +2301,19 @@ name = "ring" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "rlp" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethereum-types 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "rust-crypto" version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2261,16 +2351,16 @@ dependencies = [ [[package]] name = "rw-stream-sink" version = "0.1.0" -source = "git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346#304e9c72c88bc97824f2734dc19d1b5f4556d346" +source = "git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5#d961e656a74d1bab5366d371a06f9e10d5f4a6c5" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ryu" -version = "0.2.3" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2286,13 +2376,18 @@ name = "safemem" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "safemem" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "schannel" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2307,21 +2402,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "security-framework" -version = "0.1.16" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "security-framework-sys" -version = "0.1.16" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2340,27 +2435,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.71" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde_derive" -version = "1.0.71" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.14.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_json" -version = "1.0.26" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "itoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2373,6 +2468,11 @@ name = "sha1" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "sha1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "sha2" version = "0.7.1" @@ -2380,7 +2480,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "digest 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", + "digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", "fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2414,7 +2514,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "slog" -version = "2.3.2" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2422,9 +2522,9 @@ name = "slog-async" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2432,10 +2532,10 @@ name = "slog-json" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2445,27 +2545,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "smallvec" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "smallvec" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "smallvec" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "smallvec" -version = "0.6.4" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2474,82 +2559,66 @@ dependencies = [ [[package]] name = "sr-io" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "environmental 0.1.0 (git+https://github.com/paritytech/substrate)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "environmental 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-state-machine 0.1.0 (git+https://github.com/paritytech/substrate)", - "triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-trie 0.4.0 (git+https://github.com/paritytech/substrate)", ] [[package]] name = "sr-primitives" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "integer-sqrt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", ] -[[package]] -name = "sr-sandbox" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" -dependencies = [ - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", - "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "sr-std" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "pwasm-alloc 0.1.0 (git+https://github.com/paritytech/substrate)", - "pwasm-libc 0.1.0 (git+https://github.com/paritytech/substrate)", "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "sr-version" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", ] [[package]] name = "srml-balances" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -2562,13 +2631,12 @@ dependencies = [ [[package]] name = "srml-consensus" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -2580,43 +2648,37 @@ dependencies = [ [[package]] name = "srml-council" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-balances 0.1.0 (git+https://github.com/paritytech/substrate)", - "srml-consensus 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-democracy 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", ] [[package]] name = "srml-democracy" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-balances 0.1.0 (git+https://github.com/paritytech/substrate)", - "srml-consensus 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -2625,12 +2687,12 @@ dependencies = [ [[package]] name = "srml-executive" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -2638,17 +2700,29 @@ dependencies = [ "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", ] +[[package]] +name = "srml-metadata" +version = "0.1.0" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" +dependencies = [ + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", +] + [[package]] name = "srml-session" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -2656,24 +2730,21 @@ dependencies = [ "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-timestamp 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", ] [[package]] name = "srml-staking" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "sr-sandbox 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-balances 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-consensus 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -2688,29 +2759,29 @@ dependencies = [ [[package]] name = "srml-support" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "mashup 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-metadata 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "srml-metadata 0.1.0 (git+https://github.com/paritytech/substrate)", ] [[package]] name = "srml-system" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -2721,12 +2792,12 @@ dependencies = [ [[package]] name = "srml-timestamp" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -2739,13 +2810,12 @@ dependencies = [ [[package]] name = "srml-treasury" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -2760,105 +2830,169 @@ name = "stable_deref_trait" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "static_assertions" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "stdweb" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "stdweb" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "stdweb-derive 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "stdweb-internal-macros 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "stdweb-internal-runtime 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "stdweb-derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "stdweb-internal-macros" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "base-x 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "stdweb-internal-runtime" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "stream-cipher" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "string" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "strsim" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "substrate-bft" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +name = "structopt" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rhododendron 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt-derive 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "structopt-derive" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "heck 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "substrate-cli" version = "0.3.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", + "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "app_dirs 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", - "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "fdlimit 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "names 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "structopt 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-network 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-network-libp2p 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-service 0.3.0 (git+https://github.com/paritytech/substrate)", "substrate-telemetry 0.3.0 (git+https://github.com/paritytech/substrate)", - "sysinfo 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)", + "sysinfo 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "substrate-client" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", + "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-bft 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-consensus-common 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-executor 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-metadata 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-state-machine 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-telemetry 0.3.0 (git+https://github.com/paritytech/substrate)", - "triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-trie 0.4.0 (git+https://github.com/paritytech/substrate)", ] [[package]] name = "substrate-client-db" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "kvdb-rocksdb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "kvdb-rocksdb 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -2866,191 +3000,235 @@ dependencies = [ "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-state-db 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-state-machine 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-trie 0.4.0 (git+https://github.com/paritytech/substrate)", +] + +[[package]] +name = "substrate-consensus-aura" +version = "0.1.0" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" +dependencies = [ + "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", + "srml-consensus 0.1.0 (git+https://github.com/paritytech/substrate)", + "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-consensus-common 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-network 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-consensus-common" +version = "0.1.0" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" +dependencies = [ + "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "substrate-executor" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-serializer 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-state-machine 0.1.0 (git+https://github.com/paritytech/substrate)", - "triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-trie 0.4.0 (git+https://github.com/paritytech/substrate)", + "wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "substrate-extrinsic-pool" +name = "substrate-finality-grandpa" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "finality-grandpa 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "transaction-pool 1.13.2 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-consensus-common 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-finality-grandpa-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-network 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-service 0.3.0 (git+https://github.com/paritytech/substrate)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-finality-grandpa-primitives" +version = "0.1.0" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" +dependencies = [ + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", ] [[package]] name = "substrate-keyring" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", ] [[package]] name = "substrate-keystore" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "parity-crypto 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "subtle 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "substrate-metadata" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" -dependencies = [ - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", -] - [[package]] name = "substrate-network" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity.git)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-consensus-common 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-network-libp2p 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-test-client 0.1.0 (git+https://github.com/paritytech/substrate)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "substrate-network-libp2p" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-io 1.12.0 (git+https://github.com/paritytech/parity.git)", - "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "ethkey 0.3.0 (git+https://github.com/paritytech/parity.git)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "libp2p 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "libp2p 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "unsigned-varint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "substrate-primitives" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fixed-hash 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", - "patricia-trie 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "uint 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "substrate-rpc" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", - "jsonrpc-macros 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", - "jsonrpc-pubsub 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", + "jsonrpc-core 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "jsonrpc-macros 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "jsonrpc-pubsub 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-executor 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-extrinsic-pool 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-state-machine 0.1.0 (git+https://github.com/paritytech/substrate)", - "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-transaction-pool 0.1.0 (git+https://github.com/paritytech/substrate)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "substrate-rpc-servers" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)", - "jsonrpc-http-server 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", - "jsonrpc-pubsub 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", - "jsonrpc-ws-server 8.0.0 (git+https://github.com/paritytech/jsonrpc.git)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", + "jsonrpc-http-server 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "jsonrpc-pubsub 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "jsonrpc-ws-server 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-rpc 0.1.0 (git+https://github.com/paritytech/substrate)", ] @@ -3058,52 +3236,53 @@ dependencies = [ [[package]] name = "substrate-serializer" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "substrate-service" version = "0.3.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-client-db 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-consensus-common 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-executor 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-extrinsic-pool 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-keystore 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-network 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-rpc 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-rpc-servers 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-telemetry 0.3.0 (git+https://github.com/paritytech/substrate)", + "substrate-transaction-pool 0.1.0 (git+https://github.com/paritytech/substrate)", "target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "substrate-state-db" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", ] @@ -3111,35 +3290,112 @@ dependencies = [ [[package]] name = "substrate-state-machine" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memorydb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "patricia-trie 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-trie 0.4.0 (git+https://github.com/paritytech/substrate)", + "trie-db 0.9.0 (git+https://github.com/paritytech/trie)", + "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", ] [[package]] name = "substrate-telemetry" version = "0.3.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" dependencies = [ - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "slog-async 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "slog-json 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "slog-scope 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "websocket 0.20.3 (registry+https://github.com/rust-lang/crates.io-index)", + "ws 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "substrate-test-client" +version = "0.1.0" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" +dependencies = [ + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-consensus-common 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-executor 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-state-machine 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-test-runtime 0.1.0 (git+https://github.com/paritytech/substrate)", +] + +[[package]] +name = "substrate-test-runtime" +version = "0.1.0" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" +dependencies = [ + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", + "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", +] + +[[package]] +name = "substrate-transaction-graph" +version = "0.1.0" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" +dependencies = [ + "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", +] + +[[package]] +name = "substrate-transaction-pool" +version = "0.1.0" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" +dependencies = [ + "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-transaction-graph 0.1.0 (git+https://github.com/paritytech/substrate)", +] + +[[package]] +name = "substrate-trie" +version = "0.4.0" +source = "git+https://github.com/paritytech/substrate#f1960129c00e9353e6f801089e703ecdd2167dd6" +dependencies = [ + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "memory-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "trie-db 0.9.0 (git+https://github.com/paritytech/trie)", + "trie-root 0.9.0 (git+https://github.com/paritytech/trie)", ] [[package]] @@ -3147,32 +3403,42 @@ name = "subtle" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "subtle" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "syn" -version = "0.14.8" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "syn" +version = "0.15.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "sysinfo" -version = "0.5.7" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "rayon 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "take" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "take_mut" version = "0.2.2" @@ -3188,20 +3454,29 @@ name = "tempdir" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tempfile" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "termcolor" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3210,7 +3485,7 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3223,12 +3498,21 @@ dependencies = [ ] [[package]] -name = "thread_local" -version = "0.3.5" +name = "thread-id" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3237,16 +3521,8 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "timer" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3262,37 +3538,41 @@ name = "tk-listen" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio" -version = "0.1.7" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-fs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-udp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-current-thread 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-fs 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-udp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-uds 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-codec" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3300,26 +3580,26 @@ name = "tokio-core" version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", "scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-current-thread" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3327,162 +3607,133 @@ name = "tokio-dns-unofficial" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-executor" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-fs" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-threadpool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-io" -version = "0.1.7" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-proto" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "take 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-reactor" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-service" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-tcp" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-threadpool" -version = "0.1.5" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-timer" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-tls" -version = "0.1.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-udp" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-uds" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "trace-time" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-reactor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3491,30 +3742,38 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "transaction-pool" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "trie-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#2616db2a2529098949e5d39aa06dd4e502a9e5f7" dependencies = [ - "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "trace-time 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "triehash" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" +name = "trie-root" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#2616db2a2529098949e5d39aa06dd4e502a9e5f7" dependencies = [ - "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", ] [[package]] name = "try-lock" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "twofish" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "block-cipher-trait 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "opaque-debug 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "twox-hash" @@ -3536,28 +3795,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "ucd-util" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "uint" -version = "0.2.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "uint" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3566,15 +3813,15 @@ name = "unicase" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "unicase" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3582,7 +3829,7 @@ name = "unicode-bidi" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "matches 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3590,6 +3837,11 @@ name = "unicode-normalization" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "unicode-segmentation" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "unicode-width" version = "0.1.5" @@ -3608,13 +3860,21 @@ dependencies = [ "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "unsigned-varint" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "unsigned-varint" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3624,22 +3884,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "url" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "matches 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "utf8-ranges" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "vcpkg" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -3658,7 +3918,7 @@ dependencies = [ [[package]] name = "version_check" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -3668,65 +3928,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "want" -version = "0.0.4" +version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "try-lock 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wasmi" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "websocket" -version = "0.20.3" -source = "git+https://github.com/tomaka/rust-websocket?branch=send#28ea5eb82b573bf3ace2fc75c36d791bcedf08b1" -dependencies = [ - "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "websocket" -version = "0.20.3" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "base64 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", - "native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)", + "native-tls 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tls 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3736,7 +3974,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "winapi" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3753,25 +3991,60 @@ name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "winapi-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "wincolor" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "ws" version = "0.7.5" source = "git+https://github.com/tomusdrw/ws-rs#f12d19c4c19422fc79af28a3181f598bc07ecd1e" dependencies = [ - "byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", "sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ws" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", + "mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3788,274 +4061,281 @@ name = "xdg" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "yaml-rust" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "yamux" version = "0.1.0" -source = "git+https://github.com/paritytech/yamux#db6285826bed432fa599e6051fadc22920fe6614" +source = "git+https://github.com/paritytech/yamux#8f3d16e7645447645d3552a52159d56c8a01de27" dependencies = [ - "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "nohash-hasher 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [metadata] -"checksum aho-corasick 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c1c6d463cbe7ed28720b5b489e7c083eeb8f90d08be2a0d6bb9e1ffea9ce1afa" +"checksum aes-ctr 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f65958ff3692041c36fc009261ccd63f24cd8e0dc1164266f068c2387e8b4e4f" +"checksum aes-soft 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "67cc03b0a090a05cb01e96998a01905d7ceedce1bc23b756c0bb7faa0682ccb1" +"checksum aesni 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6810b7fb9f2bb4f76f05ac1c170b8dde285b6308955dc3afd89710268c958d9e" +"checksum aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9a933f4e58658d7b12defcf96dc5c720f20832deebe3e0a19efd3b6aaeeb9e" "checksum aio-limited 0.1.0 (git+https://github.com/paritytech/aio-limited.git)" = "" -"checksum ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6b3568b48b7cefa6b8ce125f9bb4989e52fbcc29ebea88df04cc7c5f12f70455" "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" "checksum ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6" "checksum app_dirs 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e73a24bad9bd6a94d6395382a6c69fe071708ae4409f763c5475e14ee896313d" -"checksum arrayref 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0fd1479b7c29641adbd35ff3b5c293922d696a92f25c8c975da3e0acbc87258f" +"checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee" "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" -"checksum asn1_der 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "dd04fa575b9fe3b7071b96e1eeebbed211514bd35a3112206dfc2f064d8f8124" +"checksum asn1_der 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "766afdc5c6d7c15de1abe4c9c15e360be3aa972c363ba5b606be3c4271235886" "checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" "checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a" "checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0" +"checksum base-x 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5cda5d0f5584d129112ad8bf4775b9fd2b9f1e30738c7b1a25314ba2244d6a51" "checksum base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" -"checksum base64 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "30e93c03064e7590d0466209155251b90c22e37fab1daf2771582598b5827557" -"checksum base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9" "checksum base64 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5032d51da2741729bfdaeb2664d9b8c6d9fd1e2b90715c660b6def36628499c2" -"checksum base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "85415d2594767338a74a30c1d370b2f3262ec1b4ed2d7bba5b3faf4de40467d9" -"checksum bigint 4.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "da1dde4308822ffaa13665757273a1b787481212f3f9b1c470a864b179a01f1b" +"checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" +"checksum bigint 4.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ebecac13b3c745150d7b6c3ea7572d372f09d627c2077e893bf26c5c7f70d282" "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" -"checksum bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789" +"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +"checksum blake2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73b77e29dbd0115e43938be2d5128ecf81c0353e00acaa65339a1242586951d9" "checksum blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" "checksum block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab" -"checksum bs58 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ddb9ab176abd79659b93be4396f59156c3ee80f8cc83d1cb588335052c428047" +"checksum block-cipher-trait 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "370424437b9459f3dfd68428ed9376ddfe03d8b70ede29cc533b3557df186ab4" +"checksum bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0de79cfb98e7aa9988188784d8664b4b5dad6eaaa0863b91d9a4ed871d4f7a42" "checksum byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" "checksum byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "96c8b41881888cc08af32d47ac4edd52bc7fa27fef774be47a92443756451304" -"checksum byteorder 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8389c509ec62b9fe8eca58c502a0acaf017737355615243496cde4994f8fa4f9" -"checksum bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e178b8e0e239e844b083d5a0d4a156b2654e67f9f80144d48398fcd736a24fb8" -"checksum cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)" = "2119ea4867bd2b8ed3aecab467709720b2d55b1bcfe09f772fd68066eaf15275" -"checksum cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3" -"checksum chashmap 2.2.1 (git+https://github.com/redox-os/tfs)" = "" -"checksum chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e48d85528df61dc964aa43c5f6ca681a19cfa74939b2348d204bd08a981f2fb0" +"checksum byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d" +"checksum bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "40ade3d27603c2cb345eb0912aec461a6dec7e06a4ae48589904e808335c7afa" +"checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16" +"checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4" +"checksum chashmap 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "47e651a8c1eb0cbbaa730f705e2531e75276c6f2bbe2eb12662cfd305213dff8" +"checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878" "checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e" +"checksum clear_on_drop 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "97276801e127ffb46b66ce23f35cc96bd454fa311294bced4bbace7baa8b1d17" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum cmake 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)" = "704fbf3bb5149daab0afb255dbea24a1f08d2f4099cedb9baab6d470d4c5eefb" +"checksum cmake 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "6ec65ee4f9c9d16f335091d23693457ed4928657ba4982289d7fafee03bc614a" "checksum constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e" -"checksum core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67" -"checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d" +"checksum core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "286e0b41c3a20da26536c6000a280585d519fd07b3956b43aed8a79e9edce980" +"checksum core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "716c271e8613ace48344f723b60b900a93150271e5be206212d052bbc0883efa" "checksum crossbeam 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "bd66663db5a988098a89599d4857919b3acf7f61402e61365acfd3919857b9be" -"checksum crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "24ce9782d4d5c53674646a6a4c1863a21a8fc0cb649b3c94dfc16e45071dea19" "checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3" -"checksum crossbeam-deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fe8153ef04a7594ded05b427ffad46ddeaf22e63fd48d42b3e1e3bb4db07cae7" +"checksum crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4fe1b6f945f824c7a25afe44f62e25d714c0cc523f8e99d8db5cd1026e1269d3" "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" -"checksum crossbeam-epoch 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2af0e75710d6181e234c8ecc79f14a97907850a541b13b0be1dd10992f2e4620" +"checksum crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2449aaa4ec7ef96e5fb24db16024b935df718e9ae1cec0a1e68feeca2efca7b8" "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" -"checksum crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d636a8b3bcc1b409d7ffd3facef8f21dcb4009626adbd0c5e6c4305c07253c7b" "checksum crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "677d453a17e8bd2b913fa38e8b9cf04bcdbb5be790aa294f2389661d72036015" +"checksum crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c55913cc2799171a550e307918c0a360e8c16004820291bf3b638969b4a01816" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" +"checksum crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c240f247c278fa08a6d4820a6a222bfc6e0d999e51ba67be94f44c905b2161f2" +"checksum crypto-mac 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0999b4ff4d3446d4ddb19a63e9e00c1876e75cd7000d20e57a693b4b3f08d958" +"checksum crypto-mac 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7afa06d05a046c7a47c3a849907ec303504608c927f4e85f7bfff22b7180d971" +"checksum ctr 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4b669fcb8e20124db86dbd9b01e74ec0e9e420e65381311ce5249864fc7ff0c0" "checksum ctrlc 1.1.1 (git+https://github.com/paritytech/rust-ctrlc.git)" = "" -"checksum datastore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" +"checksum curve25519-dalek 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3eacf6ff1b911e3170a8c400b402e10c86dc3cb166bd69034ebbc2b785fea4c2" +"checksum data-encoding 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "67df0571a74bf0d97fb8b2ed22abdd9a48475c96bd327db968b7d9cace99655e" +"checksum datastore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" "checksum difference 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3304d19798a8e067e48d8e69b2c37f0b5e9b4e462504ad9e27e9f3fce02bba8" -"checksum digest 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5b29c278aa8fd30796bd977169e8004b4aa88cdcd2f32a6eb22bc2d5d38df94a" -"checksum edit-distance 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3bd26878c3d921f89797a4e1a1711919f999a9f6946bb6f5a4ffda126d297b7e" +"checksum digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90" +"checksum discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" +"checksum ed25519-dalek 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cd66d8a16ef71c23cf5eeb2140d8d3cd293457c6c7fd6804b593397a933fcf1e" "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0" "checksum elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88d4851b005ef16de812ea9acdb7bece2f0a40dd86c07b85631d7dafa54537bb" "checksum env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3ddf21e73e016298f5cb37d6ef8e8da8e39f91f9ec8b0df44b7deb16a9f8cd5b" -"checksum environmental 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)" = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38" +"checksum environmental 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db746025e3ea695bfa0ae744dbacd5fcfc8db51b9760cf8bd0ab69708bb93c49" "checksum error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "07e791d3be96241c77c43846b665ef1384606da2cd2a48730abe606a12906e02" "checksum eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)" = "" -"checksum ethbloom 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a93a43ce2e9f09071449da36bfa7a1b20b950ee344b6904ff23de493b03b386" -"checksum ethcore-io 1.12.0 (git+https://github.com/paritytech/parity.git)" = "" -"checksum ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c48729b8aea8aedb12cf4cb2e5cef439fdfe2dda4a89e47eeebd15778ef53b6" -"checksum ethereum-types 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "35b3c5a18bc5e73a32a110ac743ec04b02bbbcd3b71d3118d40a6113d509378a" -"checksum ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ac59a21a9ce98e188f3dace9eb67a6c4a3c67ec7fbc7218cb827852679dc002" -"checksum ethkey 0.3.0 (git+https://github.com/paritytech/parity.git)" = "" -"checksum etrace 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc6c1d54ed28f0c9c88866f73e7e3a0cc68d74bc438efaa97957ff4f972ea2b" +"checksum etrace 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f17311e68ea07046ee809b8513f6c259518bc10173681d98c21f8c3926f56f40" "checksum exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9aa7b56cef68c4182db7212dece19cc9f6e2916cf9412e57e6cea53ec02f316d" +"checksum failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6dd377bcc1b1b7ce911967e3ec24fa19c3224394ec05b54aa7b083d498341ac7" "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" "checksum fdlimit 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1ee15a7050e5580b3712877157068ea713b245b080ff302ae2ca973cfcd9baa" -"checksum fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0d5ec8112f00ea8a483e04748a85522184418fd1cf02890b626d8fc28683f7de" +"checksum finality-grandpa 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "be6d2735e8f570474c7925a60ebe04ec0bdd9eea7cc4fddab78a0ecfdefec20e" +"checksum fixed-hash 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a557e80084b05c32b455963ff565a9de6f2866da023d6671705c6aff6f65e01c" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" "checksum fs-swap 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "921d332c89b3b61a826de38c61ee5b6e02c56806cade1b0e5d81bd71f57a71bb" "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)" = "884dbe32a6ae4cd7da5c6db9b78114449df9953b8d490c9d7e1b51720b922c62" +"checksum futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)" = "49e7653e374fe0d0c12de4250f0bdb60680b8c80eed558c5c7538eec9c89e21b" "checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" -"checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" +"checksum gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)" = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" "checksum getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0a7292d30132fb5424b354f5dc02512a86e4c516fe544bb7a25e7f266951b797" -"checksum globset 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8e49edbcc9c7fc5beb8c0a54e7319ff8bed353a2b55e85811c6281188c2a6c84" -"checksum hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f1c71fc577cde89b3345d5f2880fecaf462a32e96c619f431279bdaf1ba5ddb1" +"checksum globset 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4743617a7464bbda3c8aec8558ff2f9429047e025771037df561d383337ff865" +"checksum h2 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "7dd33bafe2e6370e6c8eb0cf1b8c5f93390b90acde7e9b03723f166b28b648ed" +"checksum hash-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" +"checksum hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461" +"checksum heck 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ea04fa3ead4e05e51a7c806fc07271fdbde4e246a6c6d1efd52e72230b771b82" "checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" "checksum hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4da5f0e01bd8a71a224a4eedecaacfcabda388dbb7a80faf04d3514287572d95" "checksum hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d340b6514f232f6db1bd16db65302a5278a04fef9ce867cb932e7e5fa21130a" -"checksum httparse 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7b6288d7db100340ca12873fd4d08ad1b8f206a9457798dfb17c018a33fee540" -"checksum hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)" = "368cb56b2740ebf4230520e2b90ebb0461e69034d85d1945febd9b3971426db2" -"checksum hyper 0.11.27 (registry+https://github.com/rust-lang/crates.io-index)" = "34a590ca09d341e94cddf8e5af0bbccde205d5fbc2fa3c09dd67c7f85cea59d7" +"checksum hmac 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "733e1b3ac906631ca01ebb577e9bb0f5e37a454032b9036b5eaea4013ed6f99a" +"checksum http 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "24f58e8c2d8e886055c3ead7b28793e1455270b5fb39650984c224bc538ba581" +"checksum httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e8734b0cfd3bc3e101ec59100e101c2eecd19282202e87808b3037b442777a83" +"checksum humantime 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0484fda3e7007f2a4a0d9c3a703ca38c71c54c55602ce4660c419fd32e188c9e" +"checksum hyper 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)" = "df0caae6b71d266b91b4a83111a61d2b94ed2e2bea024c532b933dcff867e58c" +"checksum hyper 0.12.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2f60ae467ef4fc5eba9a34d31648c9c8ed902faf45a217f6734ce9ea64779ac7" "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -"checksum integer-encoding 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "26746cbc2e680af687e88d717f20ff90079bd10fc984ad57d277cd0e37309fa5" -"checksum integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)" = "" +"checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d" +"checksum integer-sqrt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ea155abb3ba6f382a75f1418988c05fe82959ed9ce727de427f9cfd425b0c903" "checksum interleaved-ordered 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "141340095b15ed7491bd3d4ced9d20cebfb826174b6bb03386381f62b01e3d77" "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" -"checksum itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4833d6978da405305126af4ac88569b5d71ff758581ce5a987dbfa3755f694fc" -"checksum itoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5adb58558dcd1d786b5f0bd15f3226ee23486e24b7b58304b60f64dc68e62606" -"checksum jsonrpc-core 8.0.2 (git+https://github.com/paritytech/jsonrpc.git)" = "" -"checksum jsonrpc-http-server 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)" = "" -"checksum jsonrpc-macros 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)" = "" -"checksum jsonrpc-pubsub 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)" = "" -"checksum jsonrpc-server-utils 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)" = "" -"checksum jsonrpc-ws-server 8.0.0 (git+https://github.com/paritytech/jsonrpc.git)" = "" +"checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" +"checksum jsonrpc-core 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)" = "" +"checksum jsonrpc-http-server 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)" = "" +"checksum jsonrpc-macros 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)" = "" +"checksum jsonrpc-pubsub 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)" = "" +"checksum jsonrpc-server-utils 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)" = "" +"checksum jsonrpc-ws-server 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)" = "" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common.git)" = "" "checksum kvdb 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "72ae89206cea31c32014b39d5a454b96135894221610dbfd19cf4d2d044fa546" "checksum kvdb-memorydb 0.1.0 (git+https://github.com/paritytech/parity-common.git)" = "" -"checksum kvdb-rocksdb 0.1.3 (git+https://github.com/paritytech/parity-common.git)" = "" -"checksum kvdb-rocksdb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e731661c9e7409857d73ac574da418cef6f9605e967bed0aeb93182ef8d4b1c7" +"checksum kvdb-rocksdb 0.1.4 (git+https://github.com/paritytech/parity-common.git)" = "" +"checksum kvdb-rocksdb 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "06cf755dc587839ba34d3cbe3f12b6ad55850fbcdfe67336157a021a1a5c43ae" "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" -"checksum lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca488b89a5657b0a2ecd45b95609b3e848cf1755da332a0da46e2b2b1cb371a7" -"checksum lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a6f08839bc70ef4a3fe1d566d5350f519c5912ea86be0df1740a7d247c7fc0ef" +"checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" +"checksum lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ddba4c30a78328befecec92fc94970e53b3ae385827d28620f0f5bb2493081e0" "checksum libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)" = "76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d" "checksum libloading 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3ad660d7cb8c5822cd83d10897b0f1f1526792737a179e73896152f85b88c2" -"checksum libp2p 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-dns 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-floodsub 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-identify 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-kad 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-mplex 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-ping 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-ratelimit 0.1.1 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-relay 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-secio 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-tcp-transport 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-transport-timeout 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-uds 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-websocket 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum libp2p-yamux 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" +"checksum libp2p 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-core 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-dns 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-floodsub 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-identify 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-kad 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-mplex 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-peerstore 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-ping 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-ratelimit 0.1.1 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-relay 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-secio 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-tcp-transport 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-transport-timeout 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-uds 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-websocket 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum libp2p-yamux 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" "checksum linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "70fb39025bc7cdd76305867c4eccf2f2dcf6e9a57f5b21a93e1c2d86cd03ec9e" "checksum local-encoding 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1ceb20f39ff7ae42f3ff9795f3986b1daad821caaa1e1732a0944103a5a1a66" -"checksum lock_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "949826a5ccf18c1b3a7c3d57692778d21768b79e46eb9dd07bfc4c2160036c54" +"checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" -"checksum log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "61bd98ae7f7b754bc53dca7d44b604f733c6bba044ea6f41bc8d89272d8161d2" -"checksum matches 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "835511bab37c34c47da5cb44844bea2cfde0236db0b506f90ea4224482c9774a" -"checksum mem 0.1.0 (git+https://github.com/paritytech/parity.git)" = "" -"checksum memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d" +"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" +"checksum mashup 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f2d82b34c7fb11bb41719465c060589e291d505ca4735ea30016a91f6fc79c3b" +"checksum mashup-impl 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "aa607bfb674b4efb310512527d64266b065de3f894fc52f84efcbf7eaa5965fb" +"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +"checksum memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0a3eb002f0535929f1199681417029ebea04aadc0c7a4224b46be99c7f5d6a16" "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" +"checksum memory-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -"checksum memorydb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f72c93304ad51e21230ecbd0d2b58a3f94703bf9339d14aed88c3aaf5e8b7a56" "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" -"checksum mime 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "4b082692d3f6cf41b453af73839ce3dfc212c4411cbb2441dff80a716e38bd79" -"checksum mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)" = "4fcfcb32d63961fb6f367bfd5d21e4600b92cd310f71f9dca25acae196eb1560" +"checksum mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)" = "71646331f2619b1026cc302f87a2b8b648d5c6dd6937846a16cc8ce0f347f432" +"checksum mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "46e73a04c2fa6250b8d802134d56d554a9ec2922bf977777c805ea5def61ce40" "checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum multistream-select 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" +"checksum multiaddr 0.3.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum multistream-select 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" "checksum names 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef320dab323286b50fb5cdda23f61c796a72a89998ab565ca32525c5c556f2da" -"checksum nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34d4f00fcc2f4c9efa8cc971db0da9e28290e28e97af47585e48691ef10ff31f" -"checksum native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f74dbadc8b43df7864539cedb7bc91345e532fdd913cfdc23ad94f4d2d40fbc0" +"checksum native-tls 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ff8e08de0070bbf4c31f452ea2a70db092f36f6f2e4d897adf5674477d488fb2" "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" -"checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" +"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" +"checksum nohash-hasher 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0d138afcce92d219ccb6eb53d9b1e8a96ac0d633cfd3c53cd9856d96d1741bb8" "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" -"checksum num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "630de1ef5cc79d0cdd78b7e33b81f083cbfe90de0f4b2b2f07f905867c70e9fe" +"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1" "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" "checksum ole32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2c49021782e5233cd243168edfa8037574afed4eba4bbaf538b3d8d1789d8c" -"checksum openssl 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)" = "a3605c298474a3aa69de92d21139fb5e2a81688d308262359d85cdd0d12a7985" -"checksum openssl-sys 0.9.35 (registry+https://github.com/rust-lang/crates.io-index)" = "912f301a749394e1025d9dcddef6106ddee9252620e6d0a0e5f8d0681de9b129" +"checksum opaque-debug 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d620c9c26834b34f039489ac0dfdb12c7ac15ccaf818350a64c9b5334a452ad7" +"checksum openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)" = "5e1309181cdcbdb51bc3b6bedb33dfac2a83b3d585033d3f6d9e22e8c1928613" +"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" +"checksum openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)" = "278c1ad40a89aa1e741a1eed089a2f60b18fab8089c3139b542140fc7d674106" +"checksum owning_ref 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9d52571ddcb42e9c900c901a18d8d67e393df723fcd51dd59c5b1a85d0acb6cc" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" +"checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" "checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common.git)" = "" "checksum parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5168b4cf41f3835e4bc6ffb32f51bc9365dc50cb351904595b3931d917fd0c" -"checksum parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)" = "" -"checksum parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "dca389ea5e1632c89b2ce54f7e2b4a8a8c9d278042222a91e0bf95451218cb4c" +"checksum parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffa42c2cb493b60b12c75b26e8c94cb734af4df4d7f2cc229dc04c1953dac189" "checksum parity-crypto 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c1117f6574377d21309bfa1f7d69ff734120685d92b02c3f362b122585758840" "checksum parity-rocksdb 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cd55d2d6d6000ec99f021cf52c9acc7d2a402e14f95ced4c5de230696fabe00b" -"checksum parity-rocksdb-sys 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9ae07d4bfb2759541957c19f471996b807fc09ef3a5bdce14409b57f038de49f" +"checksum parity-rocksdb-sys 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0e59eda423021494a6cf1be74f6989add403f53157409993f794e17b123cab51" "checksum parity-snappy-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c2086caac40c79289cb70d7e1c64f5888e1c53f5d38399d3e95101493739f423" "checksum parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)" = "511379a8194230c2395d2f5fa627a5a7e108a9f976656ce723ae68fca4097bfc" -"checksum parity-wordlist 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0dec124478845b142f68b446cbee953d14d4b41f1bc0425024417720dce693" +"checksum parking_lot 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "fa12d706797d42551663426a45e2db2e0364bd1dbf6aeada87e89c5f981f43e9" "checksum parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e" "checksum parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4d05f1349491390b1730afba60bb20d55761bef489a954546b58b4b34e1e2ac" -"checksum parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "69376b761943787ebd5cc85a5bc95958651a22609c5c1c2b65de21786baec72b" +"checksum parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5" "checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" -"checksum patricia-trie 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "46be3bf26e050bcaac60d0a8373f912a4734bb8bd4bf5ecda66ee997b86bddfc" +"checksum parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7f7e6ebdc79edff6fdcb87a55b620174f7a989e3eb31b65231f4af57f00b8c" "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" -"checksum pkg-config 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "104630aa1c83213cbc76db0703630fcb0421dac3585063be4ce9a8a2feeaa745" -"checksum plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "95fa6386b1d34aaf0adb9b7dd2885dbe7c34190e6263785e5a7ec2b19044a90f" +"checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c" "checksum pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28ea5118e2f41bfbc974b28d88c07621befd1fa5d6ec23549be96302a1a59dd2" -"checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" -"checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" -"checksum proc-macro2 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "7a17a4d77bc20d344179de803a34694c0ac7a0b3fb4384bee99783215a8e0410" -"checksum protobuf 2.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "128a4f37a2df739a567a8685b17f54aa19b9c3c4a6a5b8731e97a419b3db451c" +"checksum proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2c725b36c99df7af7bf9324e9c999b9e37d92c8f8caf106d82e1d7953218d2d8" +"checksum proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b753ad9ed99dd8efeaa7d2fb8453c8f6bc3e54b97966d35f1bc77ca6865254a" +"checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09" +"checksum protobuf 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cbd08d128db199b1c6bb662e343d7d1a8f6d0060b411675766d88e5146a4bb38" "checksum pulldown-cmark 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8361e81576d2e02643b04950e487ec172b687180da65c731c03cf336784e6c07" -"checksum pwasm-alloc 0.1.0 (git+https://github.com/paritytech/substrate)" = "" -"checksum pwasm-libc 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum quick-error 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5fb6ccf8db7bbcb9c2eae558db5ab4f3da1c2a87e4e597ed394726bc8ea6ca1d" "checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" -"checksum quote 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ed7d650913520df631972f21e104a4fa2f9c82a14afc65d17b388a2e29731e7c" +"checksum quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "53fa22a1994bd0f9372d7a816207d8a2677ad0325b073f5c5332760f0fb62b5c" "checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1" -"checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5" +"checksum rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd" "checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c" -"checksum rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2" +"checksum rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1961a422c4d189dfb50ffa9320bf1f2a9bd54ecb92792fb9477f99a1045f3372" +"checksum rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0905b6b7079ec73b314d4c748701f6931eb79fd97c668caa3f1899b22b32c6db" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" -"checksum rayon 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "df7a791f788cb4c516f0e091301a29c2b71ef680db5e644a7d68835c8ae6dbfa" +"checksum rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "373814f27745b2686b350dd261bfd24576a6fb0e2c5919b3a2b6005f820b0473" "checksum rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b055d1e92aba6877574d8fe604a63c8b5df60f60e5982bf7ccbb1338ea527356" -"checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1" +"checksum redox_syscall 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "cf8fb82a4d1c9b28f1c26c574a5b541f5ffb4315f6c9a791fa47b6a04438fe93" "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" "checksum regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384" -"checksum regex 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5bbbea44c5490a1e84357ff28b7d518b4619a159fed5d25f6c1de2d19cc42814" +"checksum regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ee84f70c8c08744ea9641a731c7fadb475bf2ecc52d7f627feb833e0b3990467" "checksum regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7" -"checksum regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "747ba3b235651f6e2f67dfa8bcdcd073ddb7c243cb21c442fc12395dfcac212d" -"checksum relay 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1576e382688d7e9deecea24417e350d3062d97e32e45d70b1cde65994ff1489a" +"checksum regex-syntax 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fbc557aac2b708fe84121caf261346cc2eed71978024337e42eb46b8a252ac6e" "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" -"checksum rhododendron 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "289a6395497f70b8076bf5b9c223e1dc5c0a77619d0a75124f7d4c728d09d2d8" +"checksum rhododendron 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e20523445e693f394c0e487113ae656071311c9ee4c1e914441bece8c929b21d" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" -"checksum rlp 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "524c5ad554859785dfc8469df3ed5e0b5784d4d335877ed47c8d90fc0eb238fe" "checksum rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a" "checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" "checksum rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0ceb8ce7a5e520de349e1fa172baeba4a9e8d5ef06c47471863530bc4972ee1e" "checksum rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "403bb3a286107a04825a5f82e1270acc1e14028d3d554d7a1e08914549575ab8" "checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=304e9c72c88bc97824f2734dc19d1b5f4556d346)" = "" -"checksum ryu 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "16aa12da69951804cddf5f74d96abcc414a31b064e610dc81e37c1536082f491" +"checksum rw-stream-sink 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "" +"checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" "checksum safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f7bf422d23a88c16d5090d455f182bc99c60af4df6a345c63428acf5129e347" "checksum safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e27a8b19b835f7aea908818e871f5cc3a5a186550c30773be987e155e8163d8f" -"checksum schannel 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "dc1fabf2a7b6483a141426e1afd09ad543520a77ac49bd03c286e7696ccfd77f" +"checksum safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dca453248a96cb0749e36ccdfe2b0b4e54a61bfef89fb97ec621eb8e0a93dd9" +"checksum schannel 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "0e1a231dc10abf6749cfa5d7767f25888d484201accbd919b66ab5413c502d56" "checksum scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" -"checksum security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "dfa44ee9c54ce5eecc9de7d5acbad112ee58755239381f687e564004ba4a2332" -"checksum security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "5421621e836278a0b139268f36eee0dc7e389b784dc3f79d8f11aabadf41bead" +"checksum security-framework 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "697d3f3c23a618272ead9e1fb259c1411102b31c6af8b93f1d64cca9c3b0e8e0" +"checksum security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab01dfbe5756785b5b4d46e0289e5a18071dfa9a7c2b24213ea00b9ef9b665bf" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)" = "6dfad05c8854584e5f72fb859385ecdfa03af69c3fd0572f0da2d4c95f060bdb" -"checksum serde_derive 1.0.71 (registry+https://github.com/rust-lang/crates.io-index)" = "b719c6d5e9f73fbc37892246d5852333f040caa617b8873c6aced84bcb28e7bb" -"checksum serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)" = "44dd2cfde475037451fa99b7e5df77aa3cfd1536575fa8e7a538ab36dcde49ae" +"checksum serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "15c141fc7027dd265a47c090bf864cf62b42c4d228bbcf4e51a0c9e2b0d3f7ef" +"checksum serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "225de307c6302bec3898c51ca302fc94a7a1697ef0845fcee6448f33c032249c" +"checksum serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)" = "c37ccd6be3ed1fdf419ee848f7c758eb31b054d7cd3ae3600e3bae0adf569811" "checksum sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c" "checksum sha1 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "171698ce4ec7cbb93babeb3190021b4d72e96ccb98e33d277ae4ea959d6f2d9e" +"checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" "checksum sha2 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9eb6be24e4c23a84d7184280d2722f7f2731fcdd4a9d886efbfe4413e4847ea0" "checksum shell32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9ee04b46101f57121c9da2b151988283b6beb79b34f5bb29a58ee48cb695122c" "checksum skeptic 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24ebf8a06f5f8bae61ae5bbc7af7aac4ef6907ae975130faba1199e5fe82256a" "checksum slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" "checksum slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f9776d6b986f77b35c6cf846c11ad986ff128fe0b2b63a3628e3755e8d3102d" -"checksum slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b3253057a9e9e291d19fa9c7645290ab61aff1d009b77b0065fff8accd833c04" +"checksum slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1a2eec401952cd7b12a84ea120e2d57281329940c3f93c2bf04f462539508e" "checksum slog-async 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e544d16c6b230d84c866662fe55e31aacfca6ae71e6fc49ae9a311cb379bfc2f" "checksum slog-json 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ddd14b8df2df39378b3e933c79784350bf715b11444d99f903df0253bbe524e5" "checksum slog-scope 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "053344c94c0e2b22da6305efddb698d7c485809427cf40555dc936085f67a9df" -"checksum smallvec 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4c8cbcd6df1e117c2210e13ab5109635ad68a929fcbb8964dc965b76cb5ee013" -"checksum smallvec 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f90c5e5fe535e48807ab94fc611d323935f39d4660c52b26b96446a7b33aef10" -"checksum smallvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1347484b6f8bc4b32a9323d9800b6d934376391002ad9c528cc659fe8afc08ee" -"checksum smallvec 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "211a489e65e94b103926d2054ae515a1cdb5d515ea0ef414fee23b7e043ce748" +"checksum smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "622df2d454c29a4d89b30dc3b27b42d7d90d6b9e587dbf8f67652eb7514da484" "checksum sr-io 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)" = "" -"checksum sr-sandbox 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum sr-std 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum sr-version 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-balances 0.1.0 (git+https://github.com/paritytech/substrate)" = "" @@ -4063,6 +4343,7 @@ dependencies = [ "checksum srml-council 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-democracy 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-executive 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum srml-metadata 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-session 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-staking 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-support 0.1.0 (git+https://github.com/paritytech/substrate)" = "" @@ -4070,17 +4351,27 @@ dependencies = [ "checksum srml-timestamp 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-treasury 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +"checksum static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c19be23126415861cb3a23e501d34a708f7f9b2183c5252d690941c2e69199d5" "checksum stdweb 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" +"checksum stdweb 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "22203527a18dc1c5c83bbd247fb005f5877d040783b6626571d6b7ed7a6f5e75" +"checksum stdweb-derive 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0e21ebd9179de08f2300a65454268a17ea3de204627458588c84319c4def3930" +"checksum stdweb-internal-macros 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bcbc9155af9606d44c740197d7d6672b49c4ee93a176c7cecde8b49322677604" +"checksum stdweb-internal-runtime 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b74fe9de4c0d07e91987f4d798b95f27f3cb7769fbc222fa951fa386908297b5" +"checksum stream-cipher 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "30dc6118470d69ce0fdcf7e6f95e95853f7f4f72f80d835d4519577c323814ab" +"checksum string 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00caf261d6f90f588f8450b8e1230fa0d5be49ee6140fdfbcb55335aff350970" "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550" -"checksum substrate-bft 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum structopt 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "41c4a2479a078509940d82773d90ff824a8c89533ab3b59cd3ce8b0c0e369c02" +"checksum structopt-derive 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "5352090cfae7a2c85e1a31146268b53396106c88ca5d6ccee2e3fae83b6e35c2" "checksum substrate-cli 0.3.0 (git+https://github.com/paritytech/substrate)" = "" "checksum substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum substrate-client-db 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum substrate-consensus-aura 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum substrate-consensus-common 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum substrate-executor 0.1.0 (git+https://github.com/paritytech/substrate)" = "" -"checksum substrate-extrinsic-pool 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum substrate-finality-grandpa 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum substrate-finality-grandpa-primitives 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum substrate-keystore 0.1.0 (git+https://github.com/paritytech/substrate)" = "" -"checksum substrate-metadata 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum substrate-network 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum substrate-network-libp2p 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)" = "" @@ -4091,76 +4382,83 @@ dependencies = [ "checksum substrate-state-db 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum substrate-state-machine 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum substrate-telemetry 0.3.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum substrate-test-client 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum substrate-test-runtime 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum substrate-transaction-graph 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum substrate-transaction-pool 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum substrate-trie 0.4.0 (git+https://github.com/paritytech/substrate)" = "" "checksum subtle 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc7f6353c2ee5407358d063a14cccc1630804527090a6fb5a9489ce4924280fb" -"checksum syn 0.14.8 (registry+https://github.com/rust-lang/crates.io-index)" = "b7bfcbb0c068d0f642a0ffbd5c604965a360a61f99e8add013cef23a838614f3" -"checksum sysinfo 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)" = "394abcf30852ac00878ab01642b13668db48d166d945f250c7bdbb9e12d75ad0" -"checksum take 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b157868d8ac1f56b64604539990685fa7611d8fa9e5476cf0c02cf34d32917c5" +"checksum subtle 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" +"checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" +"checksum syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)" = "816b7af21405b011a23554ea2dc3f6576dc86ca557047c34098c1d741f10f823" +"checksum sysinfo 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "11c5f6e8a7a7146f26ffed9a5ff8bab2706f1ac8a413a415e1d211b819d5c24d" "checksum take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" "checksum target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c63f48baada5c52e65a29eef93ab4f8982681b67f9e8d29c7b05abcfec2b9ffe" "checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" -"checksum tempfile 3.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c4b103c6d08d323b92ff42c8ce62abcd83ca8efa7fd5bf7927efefec75f58c76" +"checksum tempfile 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "55c1195ef8513f3273d55ff59fe5da6940287a0d7a98331254397f464833675b" +"checksum termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4096add70612622289f2fdcdbd5086dc81c1e2675e6ae58d6c4f62a16c6d7f2f" "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" "checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6" -"checksum thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "279ef31c19ededf577bfd12dfae728040a21f635b06a24cd670ff510edd38963" +"checksum thread-id 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c7fbf4c9d56b320106cd64fd024dadfa0be7cb4706725fc44a7d7ce952d820c1" +"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" "checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b" -"checksum timer 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "31d42176308937165701f50638db1c31586f183f1aab416268216577aec7306b" "checksum tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e9175261fbdb60781fcd388a4d6cc7e14764a2b629a7ad94abb439aed223a44f" "checksum tk-listen 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dec7ba6a80b7695fc2abb21af18bed445a362ffd80b64704771ce142d6d2151d" -"checksum tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8ee337e5f4e501fc32966fec6fe0ca0cc1c237b0b1b14a335f8bfe3c5f06e286" -"checksum tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "881e9645b81c2ce95fcb799ded2c29ffb9f25ef5bef909089a420e5961dd8ccb" +"checksum tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "6e93c78d23cc61aa245a8acd2c4a79c4d7fa7fb5c3ca90d5737029f043a84895" +"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" "checksum tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "aeeffbbb94209023feaef3c196a41cbcdafa06b4a6f893f68779bb5e53796f71" -"checksum tokio-current-thread 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fdfb899688ac16f618076bd09215edbfda0fd5dfecb375b6942636cb31fa8a7" +"checksum tokio-current-thread 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f90fcd90952f0a496d438a976afba8e5c205fb12123f813d8ab3aa1c8436638c" "checksum tokio-dns-unofficial 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bb9bf62ca2c53bf2f2faec3e48a98b6d8c9577c27011cb0203a4beacdc8ab328" -"checksum tokio-executor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "424f0c87ecd66b863045d84e384cb7ce0ae384d8b065b9f0363d29c0d1b30b2f" -"checksum tokio-fs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b5cbe4ca6e71cb0b62a66e4e6f53a8c06a6eefe46cc5f665ad6f274c9906f135" -"checksum tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a5c9635ee806f26d302b8baa1e145689a280d8f5aa8d0552e7344808da54cc21" -"checksum tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fbb47ae81353c63c487030659494b295f6cb6576242f907f203473b191b0389" -"checksum tokio-reactor 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8703a5762ff6913510dc64272c714c4389ffd8c4b3cf602879b8bd14ff06b604" -"checksum tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" -"checksum tokio-tcp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5b4c329b47f071eb8a746040465fa751bd95e4716e98daef6a9b4e434c17d565" -"checksum tokio-threadpool 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "24ab84f574027b0e875378f31575cf175360891919e93a3490f07e76e00e4efb" -"checksum tokio-timer 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d03fa701f9578a01b7014f106b47f0a363b4727a7f3f75d666e312ab7acbbf1c" -"checksum tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "772f4b04e560117fe3b0a53e490c16ddc8ba6ec437015d91fa385564996ed913" -"checksum tokio-udp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "43eb534af6e8f37d43ab1b612660df14755c42bd003c5f8d2475ee78cc4600c0" -"checksum tokio-uds 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "424c1ed15a0132251813ccea50640b224c809d6ceafb88154c1a8775873a0e89" -"checksum trace-time 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5aea07da6582e957c6e737eeb63a5af79e648eeeaaaba8fd9a417f1124bafa41" +"checksum tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c117b6cf86bb730aab4834f10df96e4dd586eff2c3c27d3781348da49e255bde" +"checksum tokio-fs 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "60ae25f6b17d25116d2cba342083abe5255d3c2c79cb21ea11aa049c53bf7c75" +"checksum tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "7392fe0a70d5ce0c882c4778116c519bd5dbaa8a7c3ae3d04578b3afafdcda21" +"checksum tokio-reactor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "4b26fd37f1125738b2170c80b551f69ff6fecb277e6e5ca885e53eec2b005018" +"checksum tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7ad235e9dadd126b2d47f6736f65aa1fdcd6420e66ca63f44177bc78df89f912" +"checksum tokio-threadpool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3929aee321c9220ed838ed6c3928be7f9b69986b0e3c22c972a66dbf8a298c68" +"checksum tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "3a52f00c97fedb6d535d27f65cccb7181c8dd4c6edc3eda9ea93f6d45d05168e" +"checksum tokio-tls 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e53fdbf3156f588be1676022fe794232b24922d426e8c14f4e46891c1e31c440" +"checksum tokio-udp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "da941144b816d0dcda4db3a1ba87596e4df5e860a72b70783fe435891f80601c" +"checksum tokio-uds 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "df195376b43508f01570bacc73e13a1de0854dc59e79d1ec09913e8db6dd2a70" "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" -"checksum transaction-pool 1.13.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fdb8870eea404a57e2f62056ac45067a53a6207fd31866122356481d3c2e1a30" -"checksum triehash 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3da77dc2c88bac48769c53f2c7675d99d522a7fc8130da3fadf29d7c6f94c9ac" -"checksum try-lock 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee2aa4715743892880f70885373966c83d73ef1b0838a664ef0c76fffd35e7c2" +"checksum trie-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" +"checksum trie-root 0.9.0 (git+https://github.com/paritytech/trie)" = "" +"checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" +"checksum twofish 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1eef327f05b0d0ec1b9d7d119d8f4d9f602ceee37e0540aff8071e8e66c2e22e" "checksum twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f85be565a110ed72ed7048cf56570db04ce0a592c98aa59b7dacde3e5718750" "checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" -"checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" -"checksum uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38051a96565903d81c9a9210ce11076b2218f3b352926baa1f5f6abbdfce8273" -"checksum uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "754ba11732b9161b94c41798e5197e5e75388d012f760c42adb5000353e98646" +"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" +"checksum uint 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "082df6964410f6aa929a61ddfafc997e4f32c62c22490e439ac351cec827f436" "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" -"checksum unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284b6d3db520d67fbe88fd778c21510d1b0ba4a551e5d0fbb023d33405f6de8a" +"checksum unicase 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d3218ea14b4edcaccfa0df0a64a3792a2c32cc706f1b336e48867f9d3147f90" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" "checksum unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6a0180bc61fc5a987082bfa111f4cc95c4caff7f9799f3e46df09163a937aa25" +"checksum unicode-segmentation 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "aa6024fc12ddfd1c6dbc14a80fa2324d4568849869b779f6bd37e5e4c03344d1" "checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +"checksum unsigned-varint 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f5c1441164e5da61f00acd15f5a9e61939693c2c6e8b9fae36a220b82de7e212" "checksum unsigned-varint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5fb8abc4b7d8158bdfbbaaccc35331ed3c30c2673e99000d7ae665a2eb6576f4" "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" -"checksum url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2a321979c09843d272956e73700d12c4e7d3d92b2ee112b31548aef0d4efc5a6" -"checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" -"checksum vcpkg 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cbe533e138811704c0e3cbde65a818b35d3240409b4346256c5ede403e082474" +"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" +"checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d" "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" "checksum vergen 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c3365f36c57e5df714a34be40902b27a992eeddb9996eca52d0584611cf885d" -"checksum version_check 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7716c242968ee87e5542f8021178248f267f295a5c4803beae8b8b7fd9bc6051" +"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" -"checksum want 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a05d9d966753fa4b5c8db73fcab5eed4549cfe0e1e4e66911e5564a0085c35d1" -"checksum wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "522fe3fdd44a56f25cd5ddcd8ccdb1cf2e982ceb28fcb00f41d8a018ae5245a8" -"checksum websocket 0.20.3 (git+https://github.com/tomaka/rust-websocket?branch=send)" = "" -"checksum websocket 0.20.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9234b4e667c19995475227172446884f516ec0963380afa960d962ab9f4c0bfa" +"checksum want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "797464475f30ddb8830cc529aaaae648d581f99e2036a928877dfde027ddf6b3" +"checksum wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8a60b9508cff2b7c27ed41200dd668806280740fadc8c88440e9c88625e84f1a" +"checksum websocket 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c9faed2bff8af2ea6b9f8b917d3d00b467583f6781fe3def174a9e33c879703" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd" +"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "afc5508759c5bf4285e61feb862b6083c8480aec864fa17a81fdec6f69b461ab" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "561ed901ae465d6185fa7864d63fbd5720d0ef718366c9a4dc83cf6170d7e9ba" "checksum ws 0.7.5 (git+https://github.com/tomusdrw/ws-rs)" = "" +"checksum ws 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)" = "329d3e6dd450a9c5c73024e1047f0be7e24121a68484eb0b5368977bee3cf8c3" "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" "checksum xdg 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a66b7c2281ebde13cf4391d70d4c7e5946c3c25e72a7b859ca8f677dcd0b0c61" -"checksum yaml-rust 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e66366e18dc58b46801afbf2ca7661a9f59cc8c5962c29892b6039b4f86fa992" "checksum yamux 0.1.0 (git+https://github.com/paritytech/yamux)" = "" diff --git a/polkadot/Cargo.toml b/polkadot/Cargo.toml index 6422334a63..e3d77832a7 100644 --- a/polkadot/Cargo.toml +++ b/polkadot/Cargo.toml @@ -19,7 +19,6 @@ vergen = "0.1" [workspace] members = [ - "api", "availability-store", "cli", "collator", @@ -30,7 +29,6 @@ members = [ "runtime", "service", "statement-table", - "transaction-pool", "service", "test-parachains/adder", @@ -42,11 +40,8 @@ exclude = [ ] [badges] -travis-ci = { repository = "paritytech/substrate", branch = "master" } maintenance = { status = "actively-developed" } -is-it-maintained-issue-resolution = { repository = "paritytech/substrate" } -is-it-maintained-open-issues = { repository = "paritytech/substrate" } [profile.release] -# Substrate runtime requires unwinding. +# Polkadot runtime requires unwinding. panic = "unwind" diff --git a/polkadot/api/Cargo.toml b/polkadot/api/Cargo.toml deleted file mode 100644 index 73ba40a552..0000000000 --- a/polkadot/api/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[package] -name = "polkadot-api" -version = "0.1.0" -authors = ["Parity Technologies "] - -[dependencies] -error-chain = "0.12" -log = "0.3" -polkadot-executor = { path = "../executor" } -polkadot-runtime = { path = "../runtime" } -polkadot-primitives = { path = "../primitives" } -parity-codec = { git = "https://github.com/paritytech/substrate" } -sr-io = { git = "https://github.com/paritytech/substrate" } -srml-executive = { git = "https://github.com/paritytech/substrate" } -sr-primitives = { git = "https://github.com/paritytech/substrate" } -substrate-client = { git = "https://github.com/paritytech/substrate" } -substrate-primitives = { git = "https://github.com/paritytech/substrate" } -substrate-executor = { git = "https://github.com/paritytech/substrate" } -substrate-state-machine = { git = "https://github.com/paritytech/substrate" } - -[dev-dependencies] -substrate-keyring = { git = "https://github.com/paritytech/substrate" } diff --git a/polkadot/api/README.adoc b/polkadot/api/README.adoc deleted file mode 100644 index 8f382d4f43..0000000000 --- a/polkadot/api/README.adoc +++ /dev/null @@ -1,5 +0,0 @@ - -= Polkadot API - -placeholder -//TODO Write content :) diff --git a/polkadot/api/src/full.rs b/polkadot/api/src/full.rs deleted file mode 100644 index 659810de5e..0000000000 --- a/polkadot/api/src/full.rs +++ /dev/null @@ -1,220 +0,0 @@ -// Copyright 2017 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 . - -//! Strongly typed API for full Polkadot client. - -use client::backend::LocalBackend; -use client::block_builder::BlockBuilder as ClientBlockBuilder; -use client::{Client, LocalCallExecutor}; -use polkadot_executor::Executor as LocalDispatch; -use substrate_executor::NativeExecutor; - -//use runtime::{Block, Header, Address, BlockId}; -use runtime::Address; -use primitives::{ - Block, BlockId, - AccountId, Hash, Index, InherentData, - SessionKey, Timestamp, UncheckedExtrinsic, -}; -use primitives::parachain::{DutyRoster, Id as ParaId}; -use substrate_primitives::{Blake2Hasher, RlpCodec}; -use {BlockBuilder, PolkadotApi, LocalPolkadotApi, ErrorKind, Result}; - -impl> BlockBuilder for ClientBlockBuilder>, Block, Blake2Hasher, RlpCodec> { - fn push_extrinsic(&mut self, extrinsic: UncheckedExtrinsic) -> Result<()> { - self.push(extrinsic).map_err(Into::into) - } - - /// Bake the block with provided extrinsics. - fn bake(self) -> Result { - ClientBlockBuilder::bake(self).map_err(Into::into) - } -} - -impl> PolkadotApi for Client>, Block> { - type BlockBuilder = ClientBlockBuilder>, Block, Blake2Hasher, RlpCodec>; - - fn session_keys(&self, at: &BlockId) -> Result> { - Ok(self.authorities_at(at)?) - } - - fn validators(&self, at: &BlockId) -> Result> { - Ok(self.call_api_at(at, "validators", &())?) - } - - fn random_seed(&self, at: &BlockId) -> Result { - Ok(self.call_api_at(at, "random_seed", &())?) - } - - fn duty_roster(&self, at: &BlockId) -> Result { - Ok(self.call_api_at(at, "duty_roster", &())?) - } - - fn timestamp(&self, at: &BlockId) -> Result { - Ok(self.call_api_at(at, "timestamp", &())?) - } - - fn evaluate_block(&self, at: &BlockId, block: Block) -> Result { - let res: Result<()> = self.call_api_at(at, "execute_block", &block).map_err(From::from); - match res { - Ok(_) => Ok(true), - Err(err) => match err.kind() { - &ErrorKind::Execution(_) => Ok(false), - _ => Err(err) - } - } - } - - fn index(&self, at: &BlockId, account: AccountId) -> Result { - Ok(self.call_api_at(at, "account_nonce", &account)?) - } - - fn lookup(&self, at: &BlockId, address: Address) -> Result> { - Ok(self.call_api_at(at, "lookup_address", &address)?) - } - - fn active_parachains(&self, at: &BlockId) -> Result> { - Ok(self.call_api_at(at, "active_parachains", &())?) - } - - fn parachain_code(&self, at: &BlockId, parachain: ParaId) -> Result>> { - Ok(self.call_api_at(at, "parachain_code", ¶chain)?) - } - - fn parachain_head(&self, at: &BlockId, parachain: ParaId) -> Result>> { - Ok(self.call_api_at(at, "parachain_head", ¶chain)?) - } - - fn build_block(&self, at: &BlockId, inherent_data: InherentData) -> Result { - let mut block_builder = self.new_block_at(at)?; - for inherent in self.inherent_extrinsics(at, inherent_data)? { - block_builder.push(inherent)?; - } - - Ok(block_builder) - } - - fn inherent_extrinsics(&self, at: &BlockId, inherent_data: InherentData) -> Result> { - let runtime_version = self.runtime_version_at(at)?; - Ok(self.call_api_at(at, "inherent_extrinsics", &(inherent_data, runtime_version.spec_version))?) - } -} - -impl> LocalPolkadotApi for Client>, Block> -{} - -#[cfg(test)] -mod tests { - use super::*; - use keyring::Keyring; - use client::LocalCallExecutor; - use client::in_mem::Backend as InMemory; - use substrate_executor::NativeExecutionDispatch; - use runtime::{GenesisConfig, ConsensusConfig, SessionConfig}; - - fn validators() -> Vec { - vec![ - Keyring::One.to_raw_public().into(), - Keyring::Two.to_raw_public().into(), - ] - } - - fn session_keys() -> Vec { - vec![ - Keyring::One.to_raw_public().into(), - Keyring::Two.to_raw_public().into(), - ] - } - - fn client() -> Client, LocalCallExecutor, NativeExecutor>, Block> { - let genesis_config = GenesisConfig { - consensus: Some(ConsensusConfig { - code: LocalDispatch::native_equivalent().to_vec(), - authorities: session_keys(), - }), - system: None, - balances: Some(Default::default()), - session: Some(SessionConfig { - validators: validators(), - session_length: 100, - }), - council: Some(Default::default()), - democracy: Some(Default::default()), - parachains: Some(Default::default()), - staking: Some(Default::default()), - timestamp: Some(Default::default()), - treasury: Some(Default::default()), - }; - - ::client::new_in_mem(LocalDispatch::new(), genesis_config).unwrap() - } - - #[test] - fn gets_session_and_validator_keys() { - let client = client(); - let id = BlockId::number(0); - assert_eq!(client.session_keys(&id).unwrap(), session_keys()); - assert_eq!(client.validators(&id).unwrap(), validators()); - } - - #[test] - fn build_block_implicit_succeeds() { - let client = client(); - - let id = BlockId::number(0); - let block_builder = client.build_block(&id, InherentData { - timestamp: 1_000_000, - parachain_heads: Vec::new(), - offline_indices: Vec::new(), - }).unwrap(); - let block = block_builder.bake().unwrap(); - - assert_eq!(block.header.number, 1); - assert!(block.header.extrinsics_root != Default::default()); - assert!(client.evaluate_block(&id, block).unwrap()); - } - - #[test] - fn build_block_with_inherent_succeeds() { - let client = client(); - - let id = BlockId::number(0); - let inherent = client.inherent_extrinsics(&id, InherentData { - timestamp: 1_000_000, - parachain_heads: Vec::new(), - offline_indices: Vec::new(), - }).unwrap(); - - let mut block_builder = client.new_block_at(&id).unwrap(); - for extrinsic in inherent { - block_builder.push(extrinsic).unwrap(); - } - - let block = block_builder.bake().unwrap(); - - assert_eq!(block.header.number, 1); - assert!(block.header.extrinsics_root != Default::default()); - assert!(client.evaluate_block(&id, block).unwrap()); - } - - #[test] - fn gets_random_seed_with_genesis() { - let client = client(); - - let id = BlockId::number(0); - client.random_seed(&id).unwrap(); - } -} diff --git a/polkadot/api/src/lib.rs b/polkadot/api/src/lib.rs deleted file mode 100644 index 288d6bd189..0000000000 --- a/polkadot/api/src/lib.rs +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2017 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 . - -//! Strongly typed API for Polkadot based around the locally-compiled native -//! runtime. - -extern crate polkadot_executor; -extern crate polkadot_primitives as primitives; -extern crate polkadot_runtime as runtime; -extern crate parity_codec as codec; -extern crate sr_io as runtime_io; -extern crate substrate_client as client; -extern crate substrate_executor as substrate_executor; -extern crate srml_executive; -extern crate substrate_primitives; -extern crate sr_primitives as runtime_primitives; -extern crate substrate_state_machine as state_machine; - -#[macro_use] -extern crate error_chain; - -extern crate log; - -#[cfg(test)] -extern crate substrate_keyring as keyring; - -pub mod full; -pub mod light; - -use primitives::{ - AccountId, Block, BlockId, Hash, Index, SessionKey, Timestamp, - UncheckedExtrinsic, InherentData, -}; -use runtime::Address; -use primitives::parachain::{DutyRoster, Id as ParaId}; - -error_chain! { - errors { - /// Unknown runtime code. - UnknownRuntime { - description("Unknown runtime code") - display("Unknown runtime code") - } - /// Unknown block ID. - UnknownBlock(b: String) { - description("Unknown block") - display("Unknown block {}", b) - } - /// Execution error. - Execution(e: String) { - description("Execution error") - display("Execution error: {}", e) - } - /// Some other error. - // TODO: allow to be specified as associated type of PolkadotApi - Other(e: Box<::std::error::Error + Send>) { - description("Other error") - display("Other error: {}", e.description()) - } - } -} - -impl From for Error { - fn from(e: client::error::Error) -> Error { - match e { - client::error::Error(client::error::ErrorKind::UnknownBlock(b), _) => Error::from_kind(ErrorKind::UnknownBlock(b)), - client::error::Error(client::error::ErrorKind::Execution(e), _) => - Error::from_kind(ErrorKind::Execution(format!("{}", e))), - other => Error::from_kind(ErrorKind::Other(Box::new(other) as Box<_>)), - } - } -} - -/// Build new blocks. -pub trait BlockBuilder { - /// Push an extrinsic onto the block. Fails if the extrinsic is invalid. - fn push_extrinsic(&mut self, extrinsic: UncheckedExtrinsic) -> Result<()>; - - /// Bake the block with provided extrinsics. - fn bake(self) -> Result; -} - -/// Trait encapsulating the Polkadot API. -/// -/// All calls should fail when the exact runtime is unknown. -pub trait PolkadotApi { - /// The block builder for this API type. - type BlockBuilder: BlockBuilder; - - /// Get session keys at a given block. - fn session_keys(&self, at: &BlockId) -> Result>; - - /// Get validators at a given block. - fn validators(&self, at: &BlockId) -> Result>; - - /// Get the value of the randomness beacon at a given block. - fn random_seed(&self, at: &BlockId) -> Result; - - /// Get the authority duty roster at a block. - fn duty_roster(&self, at: &BlockId) -> Result; - - /// Get the timestamp registered at a block. - fn timestamp(&self, at: &BlockId) -> Result; - - /// Get the nonce (né index) of an account at a block. - fn index(&self, at: &BlockId, account: AccountId) -> Result; - - /// Get the account id of an address at a block. - fn lookup(&self, at: &BlockId, address: Address) -> Result>; - - /// Get the active parachains at a block. - fn active_parachains(&self, at: &BlockId) -> Result>; - - /// Get the validation code of a parachain at a block. If the parachain is active, this will always return `Some`. - fn parachain_code(&self, at: &BlockId, parachain: ParaId) -> Result>>; - - /// Get the chain head of a parachain. If the parachain is active, this will always return `Some`. - fn parachain_head(&self, at: &BlockId, parachain: ParaId) -> Result>>; - - /// Evaluate a block. Returns true if the block is good, false if it is known to be bad, - /// and an error if we can't evaluate for some reason. - fn evaluate_block(&self, at: &BlockId, block: Block) -> Result; - - /// Build a block on top of the given, with inherent extrinsics pre-pushed. - fn build_block(&self, at: &BlockId, inherent_data: InherentData) -> Result; - - /// Attempt to produce the (encoded) inherent extrinsics for a block being built upon the given. - /// This may vary by runtime and will fail if a runtime doesn't follow the same API. - fn inherent_extrinsics(&self, at: &BlockId, inherent_data: InherentData) -> Result>; -} - -/// Mark for all Polkadot API implementations, that are making use of state data, stored locally. -pub trait LocalPolkadotApi: PolkadotApi {} - -/// Mark for all Polkadot API implementations, that are fetching required state data from remote nodes. -pub trait RemotePolkadotApi: PolkadotApi {} diff --git a/polkadot/api/src/light.rs b/polkadot/api/src/light.rs deleted file mode 100644 index e148dfb833..0000000000 --- a/polkadot/api/src/light.rs +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2017 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 . - -//! Strongly typed API for light Polkadot client. - -use std::sync::Arc; -use client::backend::{Backend, RemoteBackend}; -use client::{Client, CallExecutor}; -use codec::Decode; -use primitives::{ - AccountId, Block, BlockId, Hash, Index, InherentData, - SessionKey, Timestamp, UncheckedExtrinsic, -}; -use runtime::Address; -use primitives::parachain::{DutyRoster, Id as ParaId}; -use {PolkadotApi, BlockBuilder, RemotePolkadotApi, Result, ErrorKind}; -use substrate_primitives::{Blake2Hasher, RlpCodec}; - -/// Light block builder. TODO: make this work (efficiently) -#[derive(Clone, Copy)] -pub struct LightBlockBuilder; - -impl BlockBuilder for LightBlockBuilder { - fn push_extrinsic(&mut self, _xt: UncheckedExtrinsic) -> Result<()> { - Err(ErrorKind::UnknownRuntime.into()) - } - - fn bake(self) -> Result { - Err(ErrorKind::UnknownRuntime.into()) - } -} - -/// Remote polkadot API implementation. -pub struct RemotePolkadotApiWrapper, E: CallExecutor>(pub Arc>); - -impl, E: CallExecutor> PolkadotApi for RemotePolkadotApiWrapper { - type BlockBuilder = LightBlockBuilder; - - fn session_keys(&self, at: &BlockId) -> Result> { - self.0.executor().call(at, "authorities", &[]) - .and_then(|r| Vec::::decode(&mut &r.return_data[..]) - .ok_or("error decoding session keys".into())) - .map_err(Into::into) - } - - fn validators(&self, _at: &BlockId) -> Result> { - Err(ErrorKind::UnknownRuntime.into()) - } - - fn random_seed(&self, _at: &BlockId) -> Result { - Err(ErrorKind::UnknownRuntime.into()) - } - - fn duty_roster(&self, _at: &BlockId) -> Result { - Err(ErrorKind::UnknownRuntime.into()) - } - - fn timestamp(&self, _at: &BlockId) -> Result { - Err(ErrorKind::UnknownRuntime.into()) - } - - fn evaluate_block(&self, _at: &BlockId, _block: Block) -> Result { - Err(ErrorKind::UnknownRuntime.into()) - } - - fn index(&self, _at: &BlockId, _account: AccountId) -> Result { - Err(ErrorKind::UnknownRuntime.into()) - } - - fn lookup(&self, _at: &BlockId, _address: Address) -> Result> { - Err(ErrorKind::UnknownRuntime.into()) - } - - fn active_parachains(&self, _at: &BlockId) -> Result> { - Err(ErrorKind::UnknownRuntime.into()) - } - - fn parachain_code(&self, _at: &BlockId, _parachain: ParaId) -> Result>> { - Err(ErrorKind::UnknownRuntime.into()) - } - - fn parachain_head(&self, _at: &BlockId, _parachain: ParaId) -> Result>> { - Err(ErrorKind::UnknownRuntime.into()) - } - - fn build_block(&self, _at: &BlockId, _inherent: InherentData) -> Result { - Err(ErrorKind::UnknownRuntime.into()) - } - - fn inherent_extrinsics(&self, _at: &BlockId, _inherent: InherentData) -> Result> { - Err(ErrorKind::UnknownRuntime.into()) - } -} - -impl, E: CallExecutor> RemotePolkadotApi for RemotePolkadotApiWrapper {} diff --git a/polkadot/availability-store/Cargo.toml b/polkadot/availability-store/Cargo.toml index 902a9a0205..331f882d6a 100644 --- a/polkadot/availability-store/Cargo.toml +++ b/polkadot/availability-store/Cargo.toml @@ -8,7 +8,7 @@ authors = ["Parity Technologies "] polkadot-primitives = { path = "../primitives" } parking_lot = "0.4" log = "0.3" -parity-codec = { git = "https://github.com/paritytech/substrate" } +parity-codec = "2.1" substrate-primitives = { git = "https://github.com/paritytech/substrate" } kvdb = { git = "https://github.com/paritytech/parity-common.git" } kvdb-rocksdb = { git = "https://github.com/paritytech/parity-common.git" } diff --git a/polkadot/availability-store/src/lib.rs b/polkadot/availability-store/src/lib.rs index d481f8c173..05c90facbb 100644 --- a/polkadot/availability-store/src/lib.rs +++ b/polkadot/availability-store/src/lib.rs @@ -110,7 +110,7 @@ impl Store { let mut tx = DBTransaction::new(); // note the meta key. - let mut v = match self.inner.get(columns::META, &*data.relay_parent) { + let mut v = match self.inner.get(columns::META, data.relay_parent.as_ref()) { Ok(Some(raw)) => Vec::decode(&mut &raw[..]).expect("all stored data serialized correctly; qed"), Ok(None) => Vec::new(), Err(e) => { diff --git a/polkadot/cli/Cargo.toml b/polkadot/cli/Cargo.toml index a3ab18f0f5..908fc20c57 100644 --- a/polkadot/cli/Cargo.toml +++ b/polkadot/cli/Cargo.toml @@ -11,3 +11,4 @@ futures = "0.1.17" exit-future = "0.1" substrate-cli = { git = "https://github.com/paritytech/substrate" } polkadot-service = { path = "../service" } +structopt = "0.2.13" diff --git a/polkadot/cli/src/lib.rs b/polkadot/cli/src/lib.rs index 1a2e2f4850..3bec3b9979 100644 --- a/polkadot/cli/src/lib.rs +++ b/polkadot/cli/src/lib.rs @@ -25,20 +25,27 @@ extern crate tokio; extern crate substrate_cli as cli; extern crate polkadot_service as service; extern crate exit_future; +extern crate structopt; #[macro_use] extern crate log; mod chain_spec; -pub use cli::error; - +use std::ops::Deref; use chain_spec::ChainSpec; - use futures::Future; use tokio::runtime::Runtime; -pub use service::{Components as ServiceComponents, Service, CustomConfiguration}; +use structopt::StructOpt; +use service::Service as BareService; + +pub use service::{ + Components as ServiceComponents, PolkadotService, CustomConfiguration, ServiceFactory, Factory, + ProvideRuntimeApi, CoreApi, ParachainHost, +}; + pub use cli::{VersionInfo, IntoExit}; +pub use cli::error; fn load_spec(id: &str) -> Result, String> { Ok(match ChainSpec::from(id) { @@ -62,7 +69,7 @@ pub trait Worker: IntoExit { fn configuration(&self) -> service::CustomConfiguration { Default::default() } /// Do work and schedule exit. - fn work(self, service: &service::Service) -> Self::Work; + fn work(self, service: &S) -> Self::Work; } /// Parse command line arguments into service configuration. @@ -78,10 +85,26 @@ pub fn run(args: I, worker: W, version: cli::VersionInfo) -> error::Res T: Into + Clone, W: Worker, { + let full_version = polkadot_service::full_version_from_strs( + version.version, + version.commit + ); - match cli::prepare_execution::(args, worker, version, load_spec, "parity-polkadot")? { + let matches = match cli::CoreParams::clap() + .name(version.executable_name) + .author(version.author) + .about(version.description) + .version(&(full_version + "\n")[..]) + .get_matches_from_safe(args) { + Ok(m) => m, + Err(e) => e.exit(), + }; + + let (spec, mut config) = cli::parse_matches::(load_spec, version, "parity-polkadot", &matches)?; + + match cli::execute_default::(spec, worker, &matches)? { cli::Action::ExecutedInternally => (), - cli::Action::RunService((mut config, worker)) => { + cli::Action::RunService(worker) => { info!("Parity ·:· Polkadot"); info!(" version {}", config.full_version()); info!(" by Parity Technologies, 2017, 2018"); @@ -92,20 +115,23 @@ pub fn run(args: I, worker: W, version: cli::VersionInfo) -> error::Res let mut runtime = Runtime::new()?; let executor = runtime.executor(); match config.roles == service::Roles::LIGHT { - true => run_until_exit(&mut runtime, service::new_light(config, executor)?, worker)?, - false => run_until_exit(&mut runtime, service::new_full(config, executor)?, worker)?, + true => run_until_exit(&mut runtime, Factory::new_light(config, executor)?, worker)?, + false => run_until_exit(&mut runtime, Factory::new_full(config, executor)?, worker)?, } } } Ok(()) } -fn run_until_exit( + +fn run_until_exit( runtime: &mut Runtime, - service: service::Service, + service: T, worker: W, ) -> error::Result<()> where + T: Deref>, C: service::Components, + BareService: PolkadotService, W: Worker, { let (exit_send, exit) = exit_future::signal(); @@ -113,7 +139,7 @@ fn run_until_exit( let executor = runtime.executor(); cli::informant::start(&service, exit.clone(), executor.clone()); - let _ = runtime.block_on(worker.work(&service)); + let _ = runtime.block_on(worker.work(&*service)); exit_send.fire(); Ok(()) } diff --git a/polkadot/collator/Cargo.toml b/polkadot/collator/Cargo.toml index de6fb85747..0384a471f3 100644 --- a/polkadot/collator/Cargo.toml +++ b/polkadot/collator/Cargo.toml @@ -7,9 +7,8 @@ description = "Collator node implementation" [dependencies] futures = "0.1.17" substrate-client = { git = "https://github.com/paritytech/substrate" } -parity-codec = { git = "https://github.com/paritytech/substrate" } +parity-codec = "2.1" substrate-primitives = { git = "https://github.com/paritytech/substrate" } -polkadot-api = { path = "../api" } polkadot-runtime = { path = "../runtime", version = "0.1" } polkadot-primitives = { path = "../primitives", version = "0.1" } polkadot-cli = { path = "../cli" } diff --git a/polkadot/collator/src/lib.rs b/polkadot/collator/src/lib.rs index 8c1b4bdb1b..490b17ba05 100644 --- a/polkadot/collator/src/lib.rs +++ b/polkadot/collator/src/lib.rs @@ -50,7 +50,6 @@ extern crate parity_codec as codec; extern crate substrate_primitives as primitives; extern crate tokio; -extern crate polkadot_api; extern crate polkadot_cli; extern crate polkadot_runtime; extern crate polkadot_primitives; @@ -61,17 +60,16 @@ extern crate log; use std::collections::{BTreeSet, BTreeMap, HashSet}; use std::fmt; use std::sync::Arc; -use std::time::{Duration, Instant}; +use std::time::Duration; use futures::{future, stream, Stream, Future, IntoFuture}; use client::BlockchainEvents; -use polkadot_api::PolkadotApi; use primitives::ed25519; use polkadot_primitives::{AccountId, BlockId, SessionKey}; use polkadot_primitives::parachain::{self, BlockData, DutyRoster, HeadData, ConsolidatedIngress, Message, Id as ParaId}; -use polkadot_cli::{ServiceComponents, Service, CustomConfiguration}; -use polkadot_cli::{Worker, IntoExit}; -use tokio::timer::Deadline; +use polkadot_cli::{PolkadotService, CustomConfiguration, CoreApi, ParachainHost}; +use polkadot_cli::{Worker, IntoExit, ProvideRuntimeApi}; +use tokio::timer::Timeout; pub use polkadot_cli::VersionInfo; @@ -193,7 +191,7 @@ pub fn collate<'a, R, P>( ).map_err(Error::Collator)?; let block_data_hash = block_data.hash(); - let signature = key.sign(&block_data_hash.0[..]).into(); + let signature = key.sign(block_data_hash.as_ref()).into(); let receipt = parachain::CandidateReceipt { parachain_index: local_id, @@ -217,7 +215,7 @@ pub fn collate<'a, R, P>( struct ApiContext; impl RelayChainContext for ApiContext { - type Error = ::polkadot_api::Error; + type Error = client::error::Error; type FutureEgress = Result>, Self::Error>; fn routing_parachains(&self) -> BTreeSet { @@ -261,10 +259,12 @@ impl Worker for CollationNode where config } - fn work(self, service: &Service) -> Self::Work { + fn work(self, service: &S) -> Self::Work + where S: PolkadotService, + { + let CollationNode { parachain_context, exit, para_id, key } = self; let client = service.client(); - let api = service.api(); let network = service.network(); let work = client.import_notification_stream() @@ -282,19 +282,20 @@ impl Worker for CollationNode where let id = BlockId::hash(relay_parent); let network = network.clone(); - let api = api.clone(); + let client = client.clone(); let key = key.clone(); let parachain_context = parachain_context.clone(); let work = future::lazy(move || { - let last_head = match try_fr!(api.parachain_head(&id, para_id)) { + let api = client.runtime_api(); + let last_head = match try_fr!(api.parachain_head(&id, ¶_id)) { Some(last_head) => last_head, None => return future::Either::A(future::ok(())), }; let targets = compute_targets( para_id, - try_fr!(api.session_keys(&id)).as_slice(), + try_fr!(api.authorities(&id)).as_slice(), try_fr!(api.duty_roster(&id)), ); @@ -315,11 +316,11 @@ impl Worker for CollationNode where future::Either::B(collation_work) }); - let deadlined = Deadline::new(work, Instant::now() + COLLATION_TIMEOUT); + let deadlined = Timeout::new(work, COLLATION_TIMEOUT); let silenced = deadlined.then(|res| match res { Ok(()) => Ok(()), - Err(e) => { - warn!("Collation failure: {}", e); + Err(_) => { + warn!("Collation failure: timeout"); Ok(()) } }); diff --git a/polkadot/consensus/Cargo.toml b/polkadot/consensus/Cargo.toml index 3c8261ae2a..bf95fd29db 100644 --- a/polkadot/consensus/Cargo.toml +++ b/polkadot/consensus/Cargo.toml @@ -10,17 +10,17 @@ tokio = "0.1.7" error-chain = "0.12" log = "0.3" exit-future = "0.1" -rhododendron = "0.3" -polkadot-api = { path = "../api" } +parity-codec = "2.1" polkadot-availability-store = { path = "../availability-store" } polkadot-parachain = { path = "../parachain" } polkadot-primitives = { path = "../primitives" } polkadot-runtime = { path = "../runtime" } polkadot-statement-table = { path = "../statement-table" } -polkadot-transaction-pool = { path = "../transaction-pool" } -substrate-bft = { git = "https://github.com/paritytech/substrate" } -parity-codec = { git = "https://github.com/paritytech/substrate" } +substrate-consensus-aura = { git = "https://github.com/paritytech/substrate" } +substrate-finality-grandpa = { git = "https://github.com/paritytech/substrate" } +substrate-consensus-common = { git = "https://github.com/paritytech/substrate" } substrate-primitives = { git = "https://github.com/paritytech/substrate" } +substrate-transaction-pool = { git = "https://github.com/paritytech/substrate" } srml-support = { git = "https://github.com/paritytech/substrate" } substrate-client = { git = "https://github.com/paritytech/substrate" } sr-primitives = { git = "https://github.com/paritytech/substrate" } diff --git a/polkadot/consensus/src/collation.rs b/polkadot/consensus/src/collation.rs index b02b49aaa6..33fcb63628 100644 --- a/polkadot/consensus/src/collation.rs +++ b/polkadot/consensus/src/collation.rs @@ -21,9 +21,10 @@ use std::sync::Arc; -use polkadot_api::PolkadotApi; -use polkadot_primitives::{Hash, AccountId, BlockId}; +use polkadot_primitives::{Block, Hash, AccountId, BlockId}; use polkadot_primitives::parachain::{Id as ParaId, Collation, Extrinsic}; +use polkadot_primitives::parachain::ParachainHost; +use runtime_primitives::traits::ProvideRuntimeApi; use futures::prelude::*; @@ -52,7 +53,7 @@ pub trait Collators: Clone { /// A future which resolves when a collation is available. /// /// This future is fused. -pub struct CollationFetch { +pub struct CollationFetch { parachain: ParaId, relay_parent_hash: Hash, relay_parent: BlockId, @@ -61,7 +62,7 @@ pub struct CollationFetch { client: Arc

, } -impl CollationFetch { +impl CollationFetch { /// Create a new collation fetcher for the given chain. pub fn new(parachain: ParaId, relay_parent: BlockId, relay_parent_hash: Hash, collators: C, client: Arc

) -> Self { CollationFetch { @@ -80,7 +81,9 @@ impl CollationFetch { } } -impl Future for CollationFetch { +impl Future for CollationFetch + where P::Api: ParachainHost, +{ type Item = (Collation, Extrinsic); type Error = C::Error; @@ -133,19 +136,27 @@ error_chain! { } links { - PolkadotApi(::polkadot_api::Error, ::polkadot_api::ErrorKind); + Client(::client::error::Error, ::client::error::ErrorKind); } } /// Check whether a given collation is valid. Returns `Ok` on success, error otherwise. -pub fn validate_collation(client: &P, relay_parent: &BlockId, collation: &Collation) -> Result<(), Error> { +pub fn validate_collation

( + client: &P, + relay_parent: &BlockId, + collation: &Collation +) -> Result<(), Error> where + P: ProvideRuntimeApi, + P::Api: ParachainHost +{ use parachain::{self, ValidationParams}; + let api = client.runtime_api(); let para_id = collation.receipt.parachain_index; - let validation_code = client.parachain_code(relay_parent, para_id)? + let validation_code = api.parachain_code(relay_parent, ¶_id)? .ok_or_else(|| ErrorKind::InactiveParachain(para_id))?; - let chain_head = client.parachain_head(relay_parent, para_id)? + let chain_head = api.parachain_head(relay_parent, ¶_id)? .ok_or_else(|| ErrorKind::InactiveParachain(para_id))?; let params = ValidationParams { diff --git a/polkadot/consensus/src/error.rs b/polkadot/consensus/src/error.rs index 397fdee52c..2123ba791c 100644 --- a/polkadot/consensus/src/error.rs +++ b/polkadot/consensus/src/error.rs @@ -20,8 +20,8 @@ use primitives::AuthorityId; error_chain! { links { - PolkadotApi(::polkadot_api::Error, ::polkadot_api::ErrorKind); - Bft(::bft::Error, ::bft::ErrorKind); + Client(::client::error::Error, ::client::error::ErrorKind); + Consensus(::consensus::error::Error, ::consensus::error::ErrorKind); } errors { @@ -48,8 +48,8 @@ error_chain! { } } -impl From<::bft::InputStreamConcluded> for Error { - fn from(err: ::bft::InputStreamConcluded) -> Self { - ::bft::Error::from(err).into() - } -} +// impl From<::bft::InputStreamConcluded> for Error { +// fn from(err: ::bft::InputStreamConcluded) -> Self { +// ::bft::Error::from(err).into() +// } +// } diff --git a/polkadot/consensus/src/evaluation.rs b/polkadot/consensus/src/evaluation.rs index d843e79de4..596e09caef 100644 --- a/polkadot/consensus/src/evaluation.rs +++ b/polkadot/consensus/src/evaluation.rs @@ -18,14 +18,13 @@ use super::MAX_TRANSACTIONS_SIZE; -use codec::{Decode, Encode}; -use polkadot_runtime::{Block as PolkadotGenericBlock, CheckedBlock}; +use codec::Encode; use polkadot_primitives::{Block, Hash, BlockNumber, Timestamp}; use polkadot_primitives::parachain::Id as ParaId; error_chain! { links { - PolkadotApi(::polkadot_api::Error, ::polkadot_api::ErrorKind); + Client(::client::error::Error, ::client::error::ErrorKind); } errors { @@ -33,10 +32,6 @@ error_chain! { description("Proposal provided not a Polkadot block."), display("Proposal provided not a Polkadot block."), } - TimestampInFuture { - description("Proposal had timestamp too far in the future."), - display("Proposal had timestamp too far in the future."), - } TooManyCandidates(expected: usize, got: usize) { description("Proposal included more candidates than is possible."), display("Proposal included {} candidates for {} parachains", got, expected), @@ -71,18 +66,11 @@ error_chain! { /// upon any initial validity checks failing. pub fn evaluate_initial( proposal: &Block, - now: Timestamp, + _now: Timestamp, parent_hash: &Hash, parent_number: BlockNumber, - active_parachains: &[ParaId], -) -> Result { - const MAX_TIMESTAMP_DRIFT: Timestamp = 60; - - let encoded = Encode::encode(proposal); - let proposal = PolkadotGenericBlock::decode(&mut &encoded[..]) - .and_then(|b| CheckedBlock::new(b).ok()) - .ok_or_else(|| ErrorKind::ProposalNotForPolkadot)?; - + _active_parachains: &[ParaId], +) -> Result<()> { let transactions_size = proposal.extrinsics.iter().fold(0, |a, tx| { a + Encode::encode(tx).len() }); @@ -99,35 +87,5 @@ pub fn evaluate_initial( bail!(ErrorKind::WrongNumber(parent_number + 1, proposal.header.number)); } - let block_timestamp = proposal.timestamp(); - - // lenient maximum -- small drifts will just be delayed using a timer. - if block_timestamp > now + MAX_TIMESTAMP_DRIFT { - bail!(ErrorKind::TimestampInFuture) - } - - { - let n_parachains = active_parachains.len(); - if proposal.parachain_heads().len() > n_parachains { - bail!(ErrorKind::TooManyCandidates(n_parachains, proposal.parachain_heads().len())); - } - - let mut last_id = None; - let mut iter = active_parachains.iter(); - for head in proposal.parachain_heads() { - // proposed heads must be ascending order by parachain ID without duplicate. - if last_id.as_ref().map_or(false, |x| x >= &head.parachain_index) { - bail!(ErrorKind::ParachainOutOfOrder); - } - - if !iter.any(|x| x == &head.parachain_index) { - // must be unknown since active parachains are always sorted. - bail!(ErrorKind::UnknownParachain(head.parachain_index)) - } - - last_id = Some(head.parachain_index); - } - } - - Ok(proposal) + Ok(()) } diff --git a/polkadot/consensus/src/lib.rs b/polkadot/consensus/src/lib.rs index b4b99bbab2..4601b5b30d 100644 --- a/polkadot/consensus/src/lib.rs +++ b/polkadot/consensus/src/lib.rs @@ -30,15 +30,12 @@ //! Groups themselves may be compromised by malicious authorities. extern crate parking_lot; -extern crate polkadot_api; extern crate polkadot_availability_store as extrinsic_store; extern crate polkadot_statement_table as table; extern crate polkadot_parachain as parachain; -extern crate polkadot_transaction_pool as transaction_pool; extern crate polkadot_runtime; extern crate polkadot_primitives; -extern crate substrate_bft as bft; extern crate parity_codec as codec; extern crate substrate_primitives as primitives; extern crate srml_support as runtime_support; @@ -47,7 +44,10 @@ extern crate substrate_client as client; extern crate exit_future; extern crate tokio; -extern crate rhododendron; +extern crate substrate_consensus_common as consensus; +extern crate substrate_consensus_aura as aura; +extern crate substrate_finality_grandpa as grandpa; +extern crate substrate_transaction_pool as transaction_pool; #[macro_use] extern crate error_chain; @@ -65,40 +65,40 @@ use std::collections::{HashMap, HashSet}; use std::sync::Arc; use std::time::{self, Duration, Instant}; +use aura::ExtraVerification; +use client::blockchain::HeaderBackend; +use client::block_builder::api::BlockBuilder; use codec::{Decode, Encode}; use extrinsic_store::Store as ExtrinsicStore; -use polkadot_api::PolkadotApi; -use polkadot_primitives::{AccountId, Hash, Block, BlockId, BlockNumber, Header, Timestamp, SessionKey}; +use parking_lot::Mutex; +use polkadot_primitives::{Hash, Block, BlockId, BlockNumber, Header, Timestamp, SessionKey}; +use polkadot_primitives::{Compact, UncheckedExtrinsic}; use polkadot_primitives::parachain::{Id as ParaId, Chain, DutyRoster, BlockData, Extrinsic as ParachainExtrinsic, CandidateReceipt, CandidateSignature}; +use polkadot_primitives::parachain::ParachainHost; use primitives::{AuthorityId, ed25519}; -use transaction_pool::TransactionPool; +use runtime_primitives::traits::ProvideRuntimeApi; use tokio::runtime::TaskExecutor; use tokio::timer::{Delay, Interval}; +use transaction_pool::txpool::{Pool, ChainApi as PoolChainApi}; use futures::prelude::*; -use futures::future; +use futures::future::{self, Either}; use collation::CollationFetch; use dynamic_inclusion::DynamicInclusion; -use parking_lot::RwLock; pub use self::collation::{validate_collation, Collators}; pub use self::error::{ErrorKind, Error}; -pub use self::offline_tracker::OfflineTracker; pub use self::shared_table::{SharedTable, StatementProducer, ProducedStatements, Statement, SignedStatement, GenericStatement}; pub use service::Service; mod dynamic_inclusion; mod evaluation; mod error; -mod offline_tracker; mod service; mod shared_table; pub mod collation; -/// Shared offline validator tracker. -pub type SharedOfflineTracker = Arc>; - // block size limit. const MAX_TRANSACTIONS_SIZE: usize = 4 * 1024 * 1024; @@ -129,14 +129,14 @@ pub trait Network { /// The table router type. This should handle importing of any statements, /// routing statements to peers, and driving completion of any `StatementProducers`. type TableRouter: TableRouter; - /// The input stream of BFT messages. Should never logically conclude. - type Input: Stream,Error=Error>; - /// The output sink of BFT messages. Messages sent here should eventually pass to all - /// current authorities. - type Output: Sink,SinkError=Error>; /// Instantiate a table router using the given shared table and task executor. - fn communication_for(&self, validators: &[SessionKey], table: Arc, task_executor: TaskExecutor) -> (Self::TableRouter, Self::Input, Self::Output); + fn communication_for( + &self, + validators: &[SessionKey], + table: Arc, + task_executor: TaskExecutor + ) -> Self::TableRouter; } /// Information about a specific group. @@ -157,7 +157,7 @@ pub struct GroupInfo { /// parent hash. pub fn sign_table_statement(statement: &Statement, key: &ed25519::Pair, parent_hash: &Hash) -> CandidateSignature { let mut encoded = statement.encode(); - encoded.extend(&parent_hash.0); + encoded.extend(parent_hash.as_ref()); key.sign(&encoded).into() } @@ -167,7 +167,7 @@ pub fn check_statement(statement: &Statement, signature: &CandidateSignature, si use runtime_primitives::traits::Verify; let mut encoded = statement.encode(); - encoded.extend(&parent_hash.0); + encoded.extend(parent_hash.as_ref()); signature.verify(&encoded[..], &signer.into()) } @@ -229,62 +229,58 @@ fn make_group_info(roster: DutyRoster, authorities: &[AuthorityId], local_id: Au } } -/// Polkadot proposer factory. -pub struct ProposerFactory - where - P: PolkadotApi + Send + Sync + 'static -{ +/// Constructs parachain-agreement instances. +struct ParachainConsensus { /// The client instance. - pub client: Arc

, - /// The transaction pool. - pub transaction_pool: Arc>, + client: Arc

, /// The backing network handle. - pub network: N, + network: N, /// Parachain collators. - pub collators: C, + collators: C, /// handle to remote task executor - pub handle: TaskExecutor, - /// The duration after which parachain-empty blocks will be allowed. - pub parachain_empty_duration: Duration, + handle: TaskExecutor, /// Store for extrinsic data. - pub extrinsic_store: ExtrinsicStore, - /// Offline-tracker. - pub offline: SharedOfflineTracker, + extrinsic_store: ExtrinsicStore, + /// The time after which no parachains may be included. + parachain_empty_duration: Duration, + /// Live agreements. + live_instances: Mutex>>, + } -impl bft::Environment for ProposerFactory - where - C: Collators + Send + 'static, - N: Network, - P: PolkadotApi + Send + Sync + 'static, - ::Future: Send + 'static, - N::TableRouter: Send + 'static, +impl ParachainConsensus where + C: Collators + Send + 'static, + N: Network, + P: ProvideRuntimeApi + HeaderBackend + Send + Sync + 'static, + P::Api: ParachainHost + BlockBuilder, + ::Future: Send + 'static, + N::TableRouter: Send + 'static, { - type Proposer = Proposer

; - type Input = N::Input; - type Output = N::Output; - type Error = Error; - - fn init( + /// Get an attestation table for given parent hash. + /// + /// This starts a parachain agreement process for given parent hash if + /// one has not already started. + fn get_or_instantiate( &self, - parent_header: &Header, + parent_hash: Hash, authorities: &[AuthorityId], sign_with: Arc, - ) -> Result<(Self::Proposer, Self::Input, Self::Output), Error> { + ) + -> Result, Error> + { use runtime_primitives::traits::{Hash as HashT, BlakeTwo256}; - // force delay in evaluation this long. - const FORCE_DELAY: Timestamp = 5; - - let parent_hash = parent_header.hash().into(); + let mut live_instances = self.live_instances.lock(); + if let Some(tracker) = live_instances.get(&parent_hash) { + return Ok(tracker.clone()); + } let id = BlockId::hash(parent_hash); - let duty_roster = self.client.duty_roster(&id)?; - let random_seed = self.client.random_seed(&id)?; - let random_seed = BlakeTwo256::hash(&*random_seed); + let duty_roster = self.client.runtime_api().duty_roster(&id)?; + let random_seed = self.client.runtime_api().random_seed(&id)?; + let _random_seed = BlakeTwo256::hash(random_seed.as_ref()); - let validators = self.client.validators(&id)?; - self.offline.write().note_new_block(&validators[..]); + let _validators = self.client.runtime_api().validators(&id)?; let (group_info, local_duty) = make_group_info( duty_roster, @@ -292,28 +288,21 @@ impl bft::Environment for ProposerFactory sign_with.public().into(), )?; - info!("Starting consensus session on top of parent {:?}. Local parachain duty is {:?}", + info!("Starting parachain attestation session on top of parent {:?}. Local parachain duty is {:?}", parent_hash, local_duty.validation); - let active_parachains = self.client.active_parachains(&id)?; + let active_parachains = self.client.runtime_api().active_parachains(&id)?; debug!(target: "consensus", "Active parachains: {:?}", active_parachains); - let n_parachains = active_parachains.len(); + let _n_parachains = active_parachains.len(); let table = Arc::new(SharedTable::new(group_info, sign_with.clone(), parent_hash, self.extrinsic_store.clone())); - let (router, input, output) = self.network.communication_for( + let router = self.network.communication_for( authorities, table.clone(), self.handle.clone() ); - let now = Instant::now(); - let dynamic_inclusion = DynamicInclusion::new( - n_parachains, - now, - self.parachain_empty_duration.clone(), - ); - let validation_para = match local_duty.validation { Chain::Relay => None, Chain::Parachain(id) => Some(id), @@ -326,6 +315,7 @@ impl bft::Environment for ProposerFactory self.collators.clone(), self.client.clone(), )); + let drop_signal = dispatch_collation_work( router.clone(), &self.handle, @@ -333,23 +323,96 @@ impl bft::Environment for ProposerFactory self.extrinsic_store.clone(), ); - let proposer = Proposer { - client: self.client.clone(), - dynamic_inclusion, - local_key: sign_with, - parent_hash, - parent_id: id, - parent_number: parent_header.number, - random_seed, - table, - transaction_pool: self.transaction_pool.clone(), - offline: self.offline.clone(), - validators, - minimum_timestamp: current_timestamp() + FORCE_DELAY, - _drop_signal: drop_signal, - }; + let now = Instant::now(); + let dynamic_inclusion = DynamicInclusion::new( + table.num_parachains(), + now, + self.parachain_empty_duration.clone(), + ); - Ok((proposer, input, output)) + let tracker = Arc::new(AttestationTracker { + table, + dynamic_inclusion, + _drop_signal: drop_signal + }); + + live_instances.insert(parent_hash, tracker.clone()); + + Ok(tracker) + } + + /// Retain consensus sessions matching predicate. + fn retain bool>(&self, mut pred: F) { + self.live_instances.lock().retain(|k, _| pred(k)) + } +} + +/// Parachain consensus for a single block. +struct AttestationTracker { + _drop_signal: exit_future::Signal, + table: Arc, + dynamic_inclusion: DynamicInclusion, +} + +/// Polkadot proposer factory. +struct ProposerFactory { + parachain_consensus: Arc>, + transaction_pool: Arc>, +} + +impl ProposerFactory where + TxApi: PoolChainApi, +{ + /// Create a new proposer factory. + fn new( + parachain_consensus: Arc>, + transaction_pool: Arc>, + ) -> Self { + ProposerFactory { + parachain_consensus, + transaction_pool, + } + } +} + +impl consensus::Environment for ProposerFactory where + C: Collators + Send + 'static, + N: Network, + TxApi: PoolChainApi, + P: ProvideRuntimeApi + HeaderBackend + Send + Sync + 'static, + P::Api: ParachainHost + BlockBuilder, + ::Future: Send + 'static, + N::TableRouter: Send + 'static, +{ + type Proposer = Proposer; + type Error = Error; + + fn init( + &self, + parent_header: &Header, + authorities: &[AuthorityId], + sign_with: Arc, + ) -> Result { + // force delay in evaluation this long. + const FORCE_DELAY: Timestamp = Compact(5); + + let parent_hash = parent_header.hash(); + let parent_id = BlockId::hash(parent_hash); + let tracker = self.parachain_consensus.get_or_instantiate( + parent_hash, + authorities, + sign_with, + )?; + + Ok(Proposer { + client: self.parachain_consensus.client.clone(), + tracker, + parent_hash, + parent_id, + parent_number: parent_header.number, + transaction_pool: self.transaction_pool.clone(), + minimum_timestamp: current_timestamp().0 + FORCE_DELAY.0, + }) } } @@ -362,7 +425,8 @@ fn dispatch_collation_work( extrinsic_store: ExtrinsicStore, ) -> exit_future::Signal where C: Collators + Send + 'static, - P: PolkadotApi + Send + Sync + 'static, + P: ProvideRuntimeApi + HeaderBackend + Send + Sync + 'static, + P::Api: ParachainHost, ::Future: Send + 'static, R: TableRouter + Send + 'static, { @@ -413,50 +477,35 @@ struct LocalDuty { } /// The Polkadot proposer logic. -pub struct Proposer { +pub struct Proposer where + C: ProvideRuntimeApi + HeaderBackend, +{ client: Arc, - dynamic_inclusion: DynamicInclusion, - local_key: Arc, parent_hash: Hash, parent_id: BlockId, parent_number: BlockNumber, - random_seed: Hash, - table: Arc, - transaction_pool: Arc>, - offline: SharedOfflineTracker, - validators: Vec, + tracker: Arc, + transaction_pool: Arc>, minimum_timestamp: u64, - _drop_signal: exit_future::Signal, } -impl Proposer { - fn primary_index(&self, round_number: usize, len: usize) -> usize { - use primitives::uint::U256; - - let big_len = U256::from(len); - let offset = U256::from_big_endian(&self.random_seed.0) % big_len; - let offset = offset.low_u64() as usize + round_number; - offset % len - } -} - -impl bft::Proposer for Proposer - where - C: PolkadotApi + Send + Sync, +impl consensus::Proposer for Proposer where + TxApi: PoolChainApi, + C: ProvideRuntimeApi + HeaderBackend + Send + Sync, + C::Api: ParachainHost + BlockBuilder, { type Error = Error; - type Create = future::Either< - CreateProposal, + type Create = Either< + CreateProposal, future::FutureResult, >; - type Evaluate = Box>; fn propose(&self) -> Self::Create { const ATTEMPT_PROPOSE_EVERY: Duration = Duration::from_millis(100); - let initial_included = self.table.includable_count(); + let initial_included = self.tracker.table.includable_count(); let now = Instant::now(); - let enough_candidates = self.dynamic_inclusion.acceptable_in( + let enough_candidates = self.tracker.dynamic_inclusion.acceptable_in( now, initial_included, ).unwrap_or_else(|| now + Duration::from_millis(1)); @@ -464,216 +513,69 @@ impl bft::Proposer for Proposer let timing = ProposalTiming { attempt_propose: Interval::new(now + ATTEMPT_PROPOSE_EVERY, ATTEMPT_PROPOSE_EVERY), enough_candidates: Delay::new(enough_candidates), - dynamic_inclusion: self.dynamic_inclusion.clone(), + dynamic_inclusion: self.tracker.dynamic_inclusion.clone(), last_included: initial_included, }; - future::Either::A(CreateProposal { + Either::A(CreateProposal { parent_hash: self.parent_hash.clone(), parent_number: self.parent_number.clone(), parent_id: self.parent_id.clone(), client: self.client.clone(), transaction_pool: self.transaction_pool.clone(), - table: self.table.clone(), - offline: self.offline.clone(), - validators: self.validators.clone(), - minimum_timestamp: self.minimum_timestamp, + table: self.tracker.table.clone(), + minimum_timestamp: self.minimum_timestamp.into(), timing, }) } +} - fn evaluate(&self, unchecked_proposal: &Block) -> Self::Evaluate { - debug!(target: "bft", "evaluating block on top of parent ({}, {:?})", self.parent_number, self.parent_hash); +/// Does verification before importing blocks. +/// Should be used for further verification in aura. +pub struct BlockVerifier; - let active_parachains = match self.client.active_parachains(&self.parent_id) { - Ok(x) => x, - Err(e) => return Box::new(future::err(e.into())) as Box<_>, +impl ExtraVerification for BlockVerifier { + type Verified = Either< + future::FutureResult<(), String>, + Box>, + >; + + fn verify(&self, _header: &Header, body: Option<&[UncheckedExtrinsic]>) -> Self::Verified { + use polkadot_runtime::{Call, UncheckedExtrinsic, TimestampCall}; + + let body = match body { + None => return Either::A(future::ok(())), + Some(body) => body, }; - let current_timestamp = current_timestamp(); + // TODO: reintroduce or revisit necessaity for includability tracker. + let timestamp = current_timestamp(); - // do initial serialization and structural integrity checks. - let maybe_proposal = evaluation::evaluate_initial( - unchecked_proposal, - current_timestamp, - &self.parent_hash, - self.parent_number, - &active_parachains, - ); + let maybe_in_block = body.iter() + .filter_map(|ex| { + let encoded = ex.encode(); + let runtime_ex = UncheckedExtrinsic::decode(&mut &encoded[..])?; + match runtime_ex.function { + Call::Timestamp(TimestampCall::set(t)) => Some(t), + _ => None, + } + }) + .next(); - let proposal = match maybe_proposal { - Ok(p) => p, - Err(e) => { - // TODO: these errors are easily re-checked in runtime. - debug!(target: "bft", "Invalid proposal: {:?}", e); - return Box::new(future::ok(false)); - } + let timestamp_in_block = match maybe_in_block { + None => return Either::A(future::ok(())), + Some(t) => t, }; - let vote_delays = { - let now = Instant::now(); - - let included_candidate_hashes = proposal - .parachain_heads() - .iter() - .map(|candidate| candidate.hash()); - - // delay casting vote until we have proof that all candidates are - // includable. - let includability_tracker = self.table.track_includability(included_candidate_hashes) - .map_err(|_| ErrorKind::PrematureDestruction.into()); - - // the duration at which the given number of parachains is acceptable. - let count_delay = self.dynamic_inclusion.acceptable_in( - now, - proposal.parachain_heads().len(), - ); - - // the duration until the given timestamp is current - let proposed_timestamp = ::std::cmp::max(self.minimum_timestamp, proposal.timestamp()); - let timestamp_delay = if proposed_timestamp > current_timestamp { - let delay_s = proposed_timestamp - current_timestamp; - debug!(target: "bft", "Delaying evaluation of proposal for {} seconds", delay_s); - Some(now + Duration::from_secs(delay_s)) - } else { - None - }; - - // delay casting vote until able according to minimum block time, - // timestamp delay, and count delay. - // construct a future from the maximum of the two durations. - let max_delay = ::std::cmp::max(timestamp_delay, count_delay); - - let temporary_delay = match max_delay { - Some(duration) => future::Either::A( - Delay::new(duration).map_err(|e| Error::from(ErrorKind::Timer(e))) - ), - None => future::Either::B(future::ok(())), - }; - - includability_tracker.join(temporary_delay) - }; - - // refuse to vote if this block says a validator is offline that we - // think isn't. - let offline = proposal.noted_offline(); - if !self.offline.read().check_consistency(&self.validators[..], offline) { - return Box::new(futures::empty()); + // we wait until the block timestamp is earlier than current. + if timestamp.0 < timestamp_in_block.0 { + let diff_secs = timestamp_in_block.0 - timestamp.0; + let delay = Delay::new(Instant::now() + Duration::from_secs(diff_secs)) + .map_err(move |e| format!("Error waiting for {} seconds: {:?}", diff_secs, e)); + Either::B(Box::new(delay)) + } else { + Either::A(future::ok(())) } - - // evaluate whether the block is actually valid. - // TODO: is it better to delay this until the delays are finished? - let evaluated = self.client - .evaluate_block(&self.parent_id, unchecked_proposal.clone()) - .map_err(Into::into); - - let future = future::result(evaluated).and_then(move |good| { - let end_result = future::ok(good); - if good { - // delay a "good" vote. - future::Either::A(vote_delays.and_then(|_| end_result)) - } else { - // don't delay a "bad" evaluation. - future::Either::B(end_result) - } - }); - - Box::new(future) as Box<_> - } - - fn round_proposer(&self, round_number: usize, authorities: &[AuthorityId]) -> AuthorityId { - let offset = self.primary_index(round_number, authorities.len()); - let proposer = authorities[offset].clone(); - trace!(target: "bft", "proposer for round {} is {}", round_number, proposer); - - proposer - } - - fn import_misbehavior(&self, misbehavior: Vec<(AuthorityId, bft::Misbehavior)>) { - use rhododendron::Misbehavior as GenericMisbehavior; - use runtime_primitives::bft::{MisbehaviorKind, MisbehaviorReport}; - use polkadot_runtime::{Call, UncheckedExtrinsic, ConsensusCall, RawAddress}; - - let local_id = self.local_key.public().0.into(); - let mut next_index = { - let cur_index = self.transaction_pool.cull_and_get_pending(&BlockId::hash(self.parent_hash), |pending| pending - .filter(|tx| tx.verified.sender().map(|s| s == local_id).unwrap_or(false)) - .last() - .map(|tx| Ok(tx.verified.index())) - .unwrap_or_else(|| self.client.index(&self.parent_id, local_id)) - ); - - match cur_index { - Ok(Ok(cur_index)) => cur_index + 1, - Ok(Err(e)) => { - warn!(target: "consensus", "Error computing next transaction index: {}", e); - return; - } - Err(e) => { - warn!(target: "consensus", "Error computing next transaction index: {}", e); - return; - } - } - }; - - for (target, misbehavior) in misbehavior { - let report = MisbehaviorReport { - parent_hash: self.parent_hash, - parent_number: self.parent_number, - target, - misbehavior: match misbehavior { - GenericMisbehavior::ProposeOutOfTurn(_, _, _) => continue, - GenericMisbehavior::DoublePropose(_, _, _) => continue, - GenericMisbehavior::DoublePrepare(round, (h1, s1), (h2, s2)) - => MisbehaviorKind::BftDoublePrepare(round as u32, (h1, s1.signature), (h2, s2.signature)), - GenericMisbehavior::DoubleCommit(round, (h1, s1), (h2, s2)) - => MisbehaviorKind::BftDoubleCommit(round as u32, (h1, s1.signature), (h2, s2.signature)), - } - }; - let payload = (next_index, Call::Consensus(ConsensusCall::report_misbehavior(report))); - let signature = self.local_key.sign(&payload.encode()).into(); - next_index += 1; - - let local_id = self.local_key.public().0.into(); - let extrinsic = UncheckedExtrinsic { - signature: Some((RawAddress::Id(local_id), signature)), - index: payload.0, - function: payload.1, - }; - let uxt: Vec = Decode::decode(&mut extrinsic.encode().as_slice()).expect("Encoded extrinsic is valid"); - self.transaction_pool.submit_one(&BlockId::hash(self.parent_hash), polkadot_primitives::UncheckedExtrinsic(uxt)) - .expect("locally signed extrinsic is valid; qed"); - } - } - - fn on_round_end(&self, round_number: usize, was_proposed: bool) { - let primary_validator = self.validators[ - self.primary_index(round_number, self.validators.len()) - ]; - - - // alter the message based on whether we think the empty proposer was forced to skip the round. - // this is determined by checking if our local validator would have been forced to skip the round. - let consider_online = was_proposed || { - let forced_delay = self.dynamic_inclusion.acceptable_in(Instant::now(), self.table.includable_count()); - let public = ed25519::Public::from_raw(primary_validator.0); - match forced_delay { - None => info!( - "Potential Offline Validator: {} failed to propose during assigned slot: {}", - public, - round_number, - ), - Some(_) => info!( - "Potential Offline Validator {} potentially forced to skip assigned slot: {}", - public, - round_number, - ), - } - - forced_delay.is_some() - }; - - self.offline.write().note_round_end(primary_validator, consider_online); } } @@ -681,6 +583,7 @@ fn current_timestamp() -> Timestamp { time::SystemTime::now().duration_since(time::UNIX_EPOCH) .expect("now always later than unix epoch; qed") .as_secs() + .into() } struct ProposalTiming { @@ -721,75 +624,62 @@ impl ProposalTiming { } /// Future which resolves upon the creation of a proposal. -pub struct CreateProposal { +pub struct CreateProposal { parent_hash: Hash, parent_number: BlockNumber, parent_id: BlockId, client: Arc, - transaction_pool: Arc>, + transaction_pool: Arc>, table: Arc, timing: ProposalTiming, - validators: Vec, - offline: SharedOfflineTracker, minimum_timestamp: Timestamp, } -impl CreateProposal where C: PolkadotApi + Send + Sync { +impl CreateProposal where + TxApi: PoolChainApi, + C: ProvideRuntimeApi + HeaderBackend + Send + Sync, + C::Api: ParachainHost + BlockBuilder, +{ fn propose_with(&self, candidates: Vec) -> Result { - use polkadot_api::BlockBuilder; + use client::block_builder::BlockBuilder; use runtime_primitives::traits::{Hash as HashT, BlakeTwo256}; use polkadot_primitives::InherentData; - const MAX_VOTE_OFFLINE_SECONDS: Duration = Duration::from_secs(60); - // TODO: handle case when current timestamp behind that in state. - let timestamp = ::std::cmp::max(self.minimum_timestamp, current_timestamp()); + let timestamp = ::std::cmp::max(self.minimum_timestamp.0, current_timestamp().0).into(); - let elapsed_since_start = self.timing.dynamic_inclusion.started_at().elapsed(); - let offline_indices = if elapsed_since_start > MAX_VOTE_OFFLINE_SECONDS { - Vec::new() - } else { - self.offline.read().reports(&self.validators[..]) - }; + let _elapsed_since_start = self.timing.dynamic_inclusion.started_at().elapsed(); - if !offline_indices.is_empty() { - info!( - "Submitting offline validators {:?} for slash-vote", - offline_indices.iter().map(|&i| self.validators[i as usize]).collect::>(), - ) - } - - let inherent_data = InherentData { + let _inherent_data = InherentData { timestamp, parachain_heads: candidates, - offline_indices, }; - let mut block_builder = self.client.build_block(&self.parent_id, inherent_data)?; + let mut block_builder = BlockBuilder::at_block(&self.parent_id, &*self.client)?; { let mut unqueue_invalid = Vec::new(); - let result = self.transaction_pool.cull_and_get_pending(&BlockId::hash(self.parent_hash), |pending_iterator| { - let mut pending_size = 0; - for pending in pending_iterator { - if pending_size + pending.verified.encoded_size() >= MAX_TRANSACTIONS_SIZE { break } + let mut pending_size = 0; - match block_builder.push_extrinsic(pending.original.clone()) { - Ok(()) => { - pending_size += pending.verified.encoded_size(); - } - Err(e) => { - trace!(target: "transaction-pool", "Invalid transaction: {}", e); - unqueue_invalid.push(pending.verified.hash().clone()); - } + let ready_iter = self.transaction_pool.ready(); + for ready in ready_iter { + let encoded_size = ready.data.encode().len(); + if pending_size + encoded_size >= MAX_TRANSACTIONS_SIZE { + break + } + + match block_builder.push(ready.data.clone()) { + Ok(()) => { + pending_size += encoded_size; + } + Err(e) => { + trace!(target: "transaction-pool", "Invalid transaction: {}", e); + unqueue_invalid.push(ready.hash.clone()); } } - }); - if let Err(e) = result { - warn!("Unable to get the pending set: {:?}", e); } - self.transaction_pool.remove(&unqueue_invalid, false); + self.transaction_pool.remove_invalid(&unqueue_invalid); } let polkadot_block = block_builder.bake()?; @@ -808,7 +698,7 @@ impl CreateProposal where C: PolkadotApi + Send + Sync { .expect("polkadot blocks defined to serialize to substrate blocks correctly; qed"); // TODO: full re-evaluation - let active_parachains = self.client.active_parachains(&self.parent_id)?; + let active_parachains = self.client.runtime_api().active_parachains(&self.parent_id)?; assert!(evaluation::evaluate_initial( &substrate_block, timestamp, @@ -821,7 +711,11 @@ impl CreateProposal where C: PolkadotApi + Send + Sync { } } -impl Future for CreateProposal where C: PolkadotApi + Send + Sync { +impl Future for CreateProposal where + TxApi: PoolChainApi, + C: ProvideRuntimeApi + HeaderBackend + Send + Sync, + C::Api: ParachainHost + BlockBuilder, +{ type Item = Block; type Error = Error; diff --git a/polkadot/consensus/src/offline_tracker.rs b/polkadot/consensus/src/offline_tracker.rs deleted file mode 100644 index eb6c2480c4..0000000000 --- a/polkadot/consensus/src/offline_tracker.rs +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright 2018 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 . - -//! Tracks offline validators. - -use polkadot_primitives::AccountId; - -use std::collections::HashMap; -use std::time::{Instant, Duration}; - -struct Observed { - last_round_end: Instant, - offline_since: Instant, -} - -#[derive(Eq, PartialEq)] -enum Activity { - Offline, - StillOffline(Duration), - Online, -} - -impl Observed { - fn new() -> Observed { - let now = Instant::now(); - Observed { - last_round_end: now, - offline_since: now, - } - } - - fn note_round_end(&mut self, now: Instant, was_online: Option) { - self.last_round_end = now; - if let Some(false) = was_online { - self.offline_since = now; - } - } - - /// Returns what we have observed about the online/offline state of the validator. - fn activity(&self) -> Activity { - // can happen if clocks are not monotonic - if self.offline_since > self.last_round_end { return Activity::Online } - if self.offline_since == self.last_round_end { return Activity::Offline } - Activity::StillOffline(self.last_round_end.duration_since(self.offline_since)) - } -} - -/// Tracks offline validators and can issue a report for those offline. -pub struct OfflineTracker { - observed: HashMap, - block_instant: Instant, -} - -impl OfflineTracker { - /// Create a new tracker. - pub fn new() -> Self { - OfflineTracker { observed: HashMap::new(), block_instant: Instant::now() } - } - - /// Note new consensus is starting with the given set of validators. - pub fn note_new_block(&mut self, validators: &[AccountId]) { - use std::collections::HashSet; - - let set: HashSet<_> = validators.iter().cloned().collect(); - self.observed.retain(|k, _| set.contains(k)); - - self.block_instant = Instant::now(); - } - - /// Note that a round has ended. - pub fn note_round_end(&mut self, validator: AccountId, was_online: bool) { - self.observed.entry(validator).or_insert_with(Observed::new); - for (val, obs) in self.observed.iter_mut() { - obs.note_round_end( - self.block_instant, - if val == &validator { - Some(was_online) - } else { - None - } - ) - } - } - - /// Generate a vector of indices for offline account IDs. - pub fn reports(&self, validators: &[AccountId]) -> Vec { - validators.iter() - .enumerate() - .filter_map(|(i, v)| if self.is_known_offline_now(v) { - Some(i as u32) - } else { - None - }) - .collect() - } - - /// Whether reports on a validator set are consistent with our view of things. - pub fn check_consistency(&self, validators: &[AccountId], reports: &[u32]) -> bool { - reports.iter().cloned().all(|r| { - let v = match validators.get(r as usize) { - Some(v) => v, - None => return false, - }; - - // we must think all validators reported externally are offline. - self.is_known_offline_now(v) - }) - } - - /// Rwturns true only if we have seen the validator miss the last round. For further - /// rounds where we can't say for sure that they're still offline, we give them the - /// benefit of the doubt. - fn is_known_offline_now(&self, v: &AccountId) -> bool { - self.observed.get(v).map(|o| o.activity() == Activity::Offline).unwrap_or(false) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn validator_offline() { - let mut tracker = OfflineTracker::new(); - let v = [0; 32].into(); - let v2 = [1; 32].into(); - let v3 = [2; 32].into(); - tracker.note_new_block(&[v, v2, v3]); - tracker.note_round_end(v, true); - tracker.note_round_end(v2, true); - tracker.note_round_end(v3, true); - assert_eq!(tracker.reports(&[v, v2, v3]), vec![0u32; 0]); - - tracker.note_new_block(&[v, v2, v3]); - tracker.note_round_end(v, true); - tracker.note_round_end(v2, false); - tracker.note_round_end(v3, true); - assert_eq!(tracker.reports(&[v, v2, v3]), vec![1]); - - tracker.note_new_block(&[v, v2, v3]); - tracker.note_round_end(v, false); - assert_eq!(tracker.reports(&[v, v2, v3]), vec![0]); - - tracker.note_new_block(&[v, v2, v3]); - tracker.note_round_end(v, false); - tracker.note_round_end(v2, true); - tracker.note_round_end(v3, false); - assert_eq!(tracker.reports(&[v, v2, v3]), vec![0, 2]); - - tracker.note_new_block(&[v, v2]); - tracker.note_round_end(v, false); - assert_eq!(tracker.reports(&[v, v2, v3]), vec![0]); - } -} diff --git a/polkadot/consensus/src/service.rs b/polkadot/consensus/src/service.rs index 163ef4501b..a4ad40a80a 100644 --- a/polkadot/consensus/src/service.rs +++ b/polkadot/consensus/src/service.rs @@ -27,47 +27,23 @@ use std::thread; use std::time::{Duration, Instant}; use std::sync::Arc; -use bft::{self, BftService}; use client::{BlockchainEvents, ChainHead, BlockBody}; +use client::block_builder::api::BlockBuilder; +use client::blockchain::HeaderBackend; +use client::runtime_api::Core; use primitives::ed25519; use futures::prelude::*; -use polkadot_api::LocalPolkadotApi; -use polkadot_primitives::{Block, Header}; -use transaction_pool::TransactionPool; +use polkadot_primitives::{Block, BlockId}; +use polkadot_primitives::parachain::ParachainHost; use extrinsic_store::Store as ExtrinsicStore; +use runtime_primitives::traits::ProvideRuntimeApi; +use transaction_pool::txpool::{ChainApi as PoolChainApi, Pool}; -use tokio::executor::current_thread::TaskExecutor as LocalThreadHandle; use tokio::runtime::TaskExecutor as ThreadPoolHandle; use tokio::runtime::current_thread::Runtime as LocalRuntime; use tokio::timer::Interval; use super::{Network, Collators, ProposerFactory}; -use error; - -const TIMER_DELAY_MS: u64 = 5000; -const TIMER_INTERVAL_MS: u64 = 500; - -// spin up an instance of BFT agreement on the current thread's executor. -// panics if there is no current thread executor. -fn start_bft( - header: Header, - bft_service: Arc>, -) where - F: bft::Environment + 'static, - C: bft::BlockImport + bft::Authorities + 'static, - F::Error: ::std::fmt::Debug, - >::Error: ::std::fmt::Display + Into, - >::Error: ::std::fmt::Display -{ - let mut handle = LocalThreadHandle::current(); - match bft_service.build_upon(&header) { - Ok(Some(bft_work)) => if let Err(e) = handle.spawn_local(Box::new(bft_work)) { - warn!(target: "bft", "Couldn't initialize BFT agreement: {:?}", e); - } - Ok(None) => trace!(target: "bft", "Could not start agreement on top of {}", header.hash()), - Err(e) => warn!(target: "bft", "BFT agreement error: {}", e), - } -} // creates a task to prune redundant entries in availability store upon block finalization // @@ -79,13 +55,11 @@ fn prune_unneeded_availability(client: Arc, extrinsic_store: ExtrinsicStor { use codec::{Encode, Decode}; use polkadot_primitives::BlockId; - use polkadot_runtime::CheckedBlock; enum NotifyError { NoBody, BodyFetch(::client::error::Error), UnexpectedFormat, - ExtrinsicsWrong, } impl NotifyError { @@ -94,31 +68,43 @@ fn prune_unneeded_availability(client: Arc, extrinsic_store: ExtrinsicStor NotifyError::NoBody => warn!("No block body for imported block {:?}", hash), NotifyError::BodyFetch(ref err) => warn!("Failed to fetch block body for imported block {:?}: {:?}", hash, err), NotifyError::UnexpectedFormat => warn!("Consensus outdated: Block {:?} has unexpected body format", hash), - NotifyError::ExtrinsicsWrong => warn!("Consensus outdated: Extrinsics cannot be decoded for {:?}", hash), } } } - client.import_notification_stream() + client.finality_notification_stream() .for_each(move |notification| { + use polkadot_runtime::{Call, ParachainsCall}; + let hash = notification.hash; let parent_hash = notification.header.parent_hash; - let checked_block = client.block_body(&BlockId::hash(hash)) + let runtime_block = client.block_body(&BlockId::hash(hash)) .map_err(NotifyError::BodyFetch) .and_then(|maybe_body| maybe_body.ok_or(NotifyError::NoBody)) .map(|extrinsics| Block { header: notification.header, extrinsics }) .map(|b: Block| ::polkadot_runtime::Block::decode(&mut b.encode().as_slice())) - .and_then(|maybe_block| maybe_block.ok_or(NotifyError::UnexpectedFormat)) - .and_then(|block| CheckedBlock::new(block).map_err(|_| NotifyError::ExtrinsicsWrong)); + .and_then(|maybe_block| maybe_block.ok_or(NotifyError::UnexpectedFormat)); - match checked_block { - Ok(block) => { - let candidate_hashes = block.parachain_heads().iter().map(|c| c.hash()).collect(); - if let Err(e) = extrinsic_store.candidates_finalized(parent_hash, candidate_hashes) { - warn!(target: "consensus", "Failed to prune unneeded available data: {:?}", e); - } - } - Err(e) => e.log(&hash) + let runtime_block = match runtime_block { + Ok(r) => r, + Err(e) => { e.log(&hash); return Ok(()) } + }; + + let candidate_hashes = match runtime_block.extrinsics + .iter() + .filter_map(|ex| match ex.function { + Call::Parachains(ParachainsCall::set_heads(ref heads)) => + Some(heads.iter().map(|c| c.hash()).collect()), + _ => None, + }) + .next() + { + Some(x) => x, + None => return Ok(()), + }; + + if let Err(e) = extrinsic_store.candidates_finalized(parent_hash, candidate_hashes) { + warn!(target: "consensus", "Failed to prune unneeded available data: {:?}", e); } Ok(()) @@ -133,90 +119,102 @@ pub struct Service { impl Service { /// Create and start a new instance. - pub fn new( + pub fn new( client: Arc, - api: Arc, network: N, - transaction_pool: Arc>, + transaction_pool: Arc>, thread_pool: ThreadPoolHandle, parachain_empty_duration: Duration, key: ed25519::Pair, extrinsic_store: ExtrinsicStore, ) -> Service where - A: LocalPolkadotApi + Send + Sync + 'static, C: BlockchainEvents + ChainHead + BlockBody, - C: bft::BlockImport + bft::Authorities + Send + Sync + 'static, - N: Network + Collators + Send + 'static, + C: ProvideRuntimeApi + HeaderBackend + Send + Sync + 'static, + C::Api: ParachainHost + Core + BlockBuilder, + N: Network + Collators + Send + Sync + 'static, N::TableRouter: Send + 'static, ::Future: Send + 'static, + TxApi: PoolChainApi + Send + 'static, { - use parking_lot::RwLock; - use super::OfflineTracker; + use parking_lot::Mutex; + use std::collections::HashMap; + + const TIMER_DELAY: Duration = Duration::from_secs(5); + const TIMER_INTERVAL: Duration = Duration::from_secs(30); let (signal, exit) = ::exit_future::signal(); let thread = thread::spawn(move || { let mut runtime = LocalRuntime::new().expect("Could not create local runtime"); let key = Arc::new(key); - let factory = ProposerFactory { - client: api.clone(), - transaction_pool: transaction_pool.clone(), + let parachain_consensus = Arc::new(::ParachainConsensus{ + client: client.clone(), + network: network.clone(), collators: network.clone(), - network, - parachain_empty_duration, handle: thread_pool.clone(), extrinsic_store: extrinsic_store.clone(), - offline: Arc::new(RwLock::new(OfflineTracker::new())), - }; - let bft_service = Arc::new(BftService::new(client.clone(), key, factory)); + parachain_empty_duration, + live_instances: Mutex::new(HashMap::new()), + }); + + let factory = ProposerFactory::new( + parachain_consensus.clone(), + transaction_pool + ); let notifications = { let client = client.clone(); - let bft_service = bft_service.clone(); + let consensus = parachain_consensus.clone(); + let key = key.clone(); client.import_notification_stream().for_each(move |notification| { + let parent_hash = notification.hash; if notification.is_new_best { - trace!(target: "bft", "Attempting to start new consensus round after import notification of {:?}", notification.hash); - start_bft(notification.header, bft_service.clone()); - } - Ok(()) - }) - }; + let res = client + .runtime_api() + .authorities(&BlockId::hash(parent_hash)) + .map_err(Into::into) + .and_then(|authorities| { + consensus.get_or_instantiate( + parent_hash, + &authorities, + key.clone(), + ) + }); - let interval = Interval::new( - Instant::now() + Duration::from_millis(TIMER_DELAY_MS), - Duration::from_millis(TIMER_INTERVAL_MS), - ); - - let mut prev_best = match client.best_block_header() { - Ok(header) => header.hash(), - Err(e) => { - warn!("Can't start consensus service. Error reading best block header: {:?}", e); - return; - } - }; - - let timed = { - let c = client.clone(); - let s = bft_service.clone(); - - interval.map_err(|e| debug!(target: "bft", "Timer error: {:?}", e)).for_each(move |_| { - if let Ok(best_block) = c.best_block_header() { - let hash = best_block.hash(); - - if hash == prev_best { - debug!(target: "bft", "Starting consensus round after a timeout"); - start_bft(best_block, s.clone()); + if let Err(e) = res { + warn!("Unable to start parachain consensus on top of {:?}: {}", + parent_hash, e); } - prev_best = hash; } Ok(()) }) }; + let prune_old_sessions = { + let client = client.clone(); + let interval = Interval::new( + Instant::now() + TIMER_DELAY, + TIMER_INTERVAL, + ); + + interval + .for_each(move |_| match client.leaves() { + Ok(leaves) => { + parachain_consensus.retain(|h| leaves.contains(h)); + Ok(()) + } + Err(e) => { + warn!("Error fetching leaves from client: {:?}", e); + Ok(()) + } + }) + .map_err(|e| warn!("Timer error {:?}", e)) + }; + runtime.spawn(notifications); - runtime.spawn(timed); + thread_pool.spawn(prune_old_sessions); let prune_available = prune_unneeded_availability(client, extrinsic_store) .select(exit.clone()) diff --git a/polkadot/consensus/src/shared_table/mod.rs b/polkadot/consensus/src/shared_table/mod.rs index a6122baaa9..7c0914ecf9 100644 --- a/polkadot/consensus/src/shared_table/mod.rs +++ b/polkadot/consensus/src/shared_table/mod.rs @@ -449,6 +449,11 @@ impl SharedTable { f(inner.table.proposed_candidates(&*self.context)) } + /// Get the number of total parachains. + pub fn num_parachains(&self) -> usize { + self.group_info().len() + } + /// Get the number of parachains which have available candidates. pub fn includable_count(&self) -> usize { self.inner.lock().table.includable_count() diff --git a/polkadot/executor/src/lib.rs b/polkadot/executor/src/lib.rs index f8fc6a238b..c5338493dd 100644 --- a/polkadot/executor/src/lib.rs +++ b/polkadot/executor/src/lib.rs @@ -21,4 +21,9 @@ extern crate polkadot_runtime; #[macro_use] extern crate substrate_executor; extern crate substrate_primitives as primitives; -native_executor_instance!(pub Executor, polkadot_runtime::api::dispatch, polkadot_runtime::VERSION, include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm")); +native_executor_instance!( + pub Executor, + polkadot_runtime::api::dispatch, + polkadot_runtime::native_version, + include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm") +); diff --git a/polkadot/network/Cargo.toml b/polkadot/network/Cargo.toml index b1e2333218..df3b413a5e 100644 --- a/polkadot/network/Cargo.toml +++ b/polkadot/network/Cargo.toml @@ -6,15 +6,14 @@ description = "Polkadot-specific networking protocol" [dependencies] parking_lot = "0.4" -polkadot-api = { path = "../api" } polkadot-availability-store = { path = "../availability-store" } polkadot-consensus = { path = "../consensus" } polkadot-primitives = { path = "../primitives" } -substrate-bft = { git = "https://github.com/paritytech/substrate" } -parity-codec = { git = "https://github.com/paritytech/substrate" } -parity-codec-derive = { git = "https://github.com/paritytech/substrate" } +parity-codec = "2.1" +parity-codec-derive = "2.1" substrate-network = { git = "https://github.com/paritytech/substrate" } substrate-primitives = { git = "https://github.com/paritytech/substrate" } +sr-primitives = { git = "https://github.com/paritytech/substrate" } futures = "0.1" tokio = "0.1.7" log = "0.4" diff --git a/polkadot/network/src/consensus.rs b/polkadot/network/src/consensus.rs index 4836051a2d..0ff324c72d 100644 --- a/polkadot/network/src/consensus.rs +++ b/polkadot/network/src/consensus.rs @@ -15,17 +15,15 @@ // along with Polkadot. If not, see . //! The "consensus" networking code built on top of the base network service. +//! //! This fulfills the `polkadot_consensus::Network` trait, providing a hook to be called //! each time consensus begins on a new chain head. -use bft; -use substrate_primitives::ed25519; -use substrate_network::{self as net, generic_message as msg}; +use sr_primitives::traits::ProvideRuntimeApi; use substrate_network::consensus_gossip::ConsensusMessage; -use polkadot_api::{PolkadotApi, LocalPolkadotApi}; use polkadot_consensus::{Network, SharedTable, Collators}; use polkadot_primitives::{AccountId, Block, Hash, SessionKey}; -use polkadot_primitives::parachain::{Id as ParaId, Collation}; +use polkadot_primitives::parachain::{Id as ParaId, Collation, ParachainHost}; use codec::Decode; use futures::prelude::*; @@ -36,152 +34,32 @@ use std::sync::Arc; use tokio::runtime::TaskExecutor; use parking_lot::Mutex; -use super::{Message, NetworkService, Knowledge, CurrentConsensus}; +use super::{NetworkService, Knowledge, CurrentConsensus}; use router::Router; -/// Sink for output BFT messages. -pub struct BftSink { - network: Arc, - parent_hash: Hash, - _marker: ::std::marker::PhantomData, -} - -impl Sink for BftSink { - type SinkItem = bft::Communication; - // TODO: replace this with the ! type when that's stabilized - type SinkError = E; - - fn start_send(&mut self, message: bft::Communication) -> ::futures::StartSend, E> { - let network_message = net::LocalizedBftMessage { - message: match message { - ::rhododendron::Communication::Consensus(c) => msg::BftMessage::Consensus(match c { - ::rhododendron::LocalizedMessage::Propose(proposal) => msg::SignedConsensusMessage::Propose(msg::SignedConsensusProposal { - round_number: proposal.round_number as u32, - proposal: proposal.proposal, - digest: proposal.digest, - sender: proposal.sender, - digest_signature: proposal.digest_signature.signature, - full_signature: proposal.full_signature.signature, - }), - ::rhododendron::LocalizedMessage::Vote(vote) => msg::SignedConsensusMessage::Vote(msg::SignedConsensusVote { - sender: vote.sender, - signature: vote.signature.signature, - vote: match vote.vote { - ::rhododendron::Vote::Prepare(r, h) => msg::ConsensusVote::Prepare(r as u32, h), - ::rhododendron::Vote::Commit(r, h) => msg::ConsensusVote::Commit(r as u32, h), - ::rhododendron::Vote::AdvanceRound(r) => msg::ConsensusVote::AdvanceRound(r as u32), - } - }), - }), - ::rhododendron::Communication::Auxiliary(justification) => { - let unchecked: bft::UncheckedJustification<_> = justification.uncheck().into(); - msg::BftMessage::Auxiliary(unchecked.into()) - } - }, - parent_hash: self.parent_hash, - }; - self.network.with_spec( - move |spec, ctx| spec.consensus_gossip.multicast_bft_message(ctx, network_message) - ); - Ok(::futures::AsyncSink::Ready) - } - - fn poll_complete(&mut self) -> ::futures::Poll<(), E> { - Ok(Async::Ready(())) - } -} - -// check signature and authority validity of message. -fn process_bft_message(msg: msg::LocalizedBftMessage, local_id: &SessionKey, authorities: &[SessionKey]) -> Result>, bft::Error> { - Ok(Some(match msg.message { - msg::BftMessage::Consensus(c) => ::rhododendron::Communication::Consensus(match c { - msg::SignedConsensusMessage::Propose(proposal) => ::rhododendron::LocalizedMessage::Propose({ - if &proposal.sender == local_id { return Ok(None) } - let proposal = ::rhododendron::LocalizedProposal { - round_number: proposal.round_number as usize, - proposal: proposal.proposal, - digest: proposal.digest, - sender: proposal.sender, - digest_signature: ed25519::LocalizedSignature { - signature: proposal.digest_signature, - signer: ed25519::Public(proposal.sender.into()), - }, - full_signature: ed25519::LocalizedSignature { - signature: proposal.full_signature, - signer: ed25519::Public(proposal.sender.into()), - } - }; - bft::check_proposal(authorities, &msg.parent_hash, &proposal)?; - - trace!(target: "bft", "importing proposal message for round {} from {}", proposal.round_number, Hash::from(proposal.sender.0)); - proposal - }), - msg::SignedConsensusMessage::Vote(vote) => ::rhododendron::LocalizedMessage::Vote({ - if &vote.sender == local_id { return Ok(None) } - let vote = ::rhododendron::LocalizedVote { - sender: vote.sender, - signature: ed25519::LocalizedSignature { - signature: vote.signature, - signer: ed25519::Public(vote.sender.0), - }, - vote: match vote.vote { - msg::ConsensusVote::Prepare(r, h) => ::rhododendron::Vote::Prepare(r as usize, h), - msg::ConsensusVote::Commit(r, h) => ::rhododendron::Vote::Commit(r as usize, h), - msg::ConsensusVote::AdvanceRound(r) => ::rhododendron::Vote::AdvanceRound(r as usize), - } - }; - bft::check_vote::(authorities, &msg.parent_hash, &vote)?; - - trace!(target: "bft", "importing vote {:?} from {}", vote.vote, Hash::from(vote.sender.0)); - vote - }), - }), - msg::BftMessage::Auxiliary(a) => { - let justification = bft::UncheckedJustification::from(a); - // TODO: get proper error - let justification: Result<_, bft::Error> = bft::check_prepare_justification::(authorities, msg.parent_hash, justification) - .map_err(|_| bft::ErrorKind::InvalidJustification.into()); - ::rhododendron::Communication::Auxiliary(justification?) - }, - })) -} - // task that processes all gossipped consensus messages, // checking signatures -struct MessageProcessTask { - inner_stream: mpsc::UnboundedReceiver>, - bft_messages: mpsc::UnboundedSender>, - validators: Vec, +struct MessageProcessTask

{ + inner_stream: mpsc::UnboundedReceiver, + parent_hash: Hash, table_router: Router

, } -impl MessageProcessTask

{ - fn process_message(&self, msg: ConsensusMessage) -> Option> { - match msg { - ConsensusMessage::Bft(msg) => { - let local_id = self.table_router.session_key(); - match process_bft_message(msg, &local_id, &self.validators[..]) { - Ok(Some(msg)) => { - if let Err(_) = self.bft_messages.unbounded_send(msg) { - // if the BFT receiving stream has ended then - // we should just bail. - trace!(target: "bft", "BFT message stream appears to have closed"); - return Some(Async::Ready(())); - } - } - Ok(None) => {} // ignored local message - Err(e) => { - debug!("Message validation failed: {:?}", e); - } - } - } - ConsensusMessage::ChainSpecific(msg, _) => { - debug!(target: "consensus", "Processing consensus statement for live consensus"); - if let Some(Message::Statement(parent_hash, statement)) = Decode::decode(&mut msg.as_slice()) { - if ::polkadot_consensus::check_statement(&statement.statement, &statement.signature, statement.sender, &parent_hash) { - self.table_router.import_statement(statement); - } - } +impl MessageProcessTask

+ where P::Api: ParachainHost, +{ + fn process_message(&self, msg: ConsensusMessage) -> Option> { + use polkadot_consensus::SignedStatement; + + debug!(target: "consensus", "Processing consensus statement for live consensus"); + if let Some(statement) = SignedStatement::decode(&mut msg.as_slice()) { + if ::polkadot_consensus::check_statement( + &statement.statement, + &statement.signature, + statement.sender, + &self.parent_hash + ) { + self.table_router.import_statement(statement); } } @@ -189,7 +67,9 @@ impl MessageProcessTask

{ } } -impl Future for MessageProcessTask

{ +impl Future for MessageProcessTask

+ where P::Api: ParachainHost, +{ type Item = (); type Error = (); @@ -207,23 +87,6 @@ impl Future for MessageProcessTask< } } -/// Input stream from the consensus network. -pub struct InputAdapter { - input: mpsc::UnboundedReceiver>, -} - -impl Stream for InputAdapter { - type Item = bft::Communication; - type Error = ::polkadot_consensus::Error; - - fn poll(&mut self) -> Poll, Self::Error> { - match self.input.poll() { - Err(_) | Ok(Async::Ready(None)) => Err(bft::InputStreamConcluded.into()), - Ok(x) => Ok(x) - } - } -} - /// Wrapper around the network service pub struct ConsensusNetwork

{ network: Arc, @@ -246,27 +109,21 @@ impl

Clone for ConsensusNetwork

{ } } -/// A long-lived network which can create parachain statement and BFT message routing processes on demand. -impl Network for ConsensusNetwork

{ +/// A long-lived network which can create parachain statement routing processes on demand. +impl Network for ConsensusNetwork

+ where P::Api: ParachainHost, +{ type TableRouter = Router

; - /// The input stream of BFT messages. Should never logically conclude. - type Input = InputAdapter; - /// The output sink of BFT messages. Messages sent here should eventually pass to all - /// current validators. - type Output = BftSink<::polkadot_consensus::Error>; /// Instantiate a table router using the given shared table. - fn communication_for(&self, validators: &[SessionKey], table: Arc, task_executor: TaskExecutor) -> (Self::TableRouter, Self::Input, Self::Output) { + fn communication_for( + &self, + _validators: &[SessionKey], + table: Arc, + task_executor: TaskExecutor + ) -> Self::TableRouter { let parent_hash = table.consensus_parent_hash().clone(); - let sink = BftSink { - network: self.network.clone(), - parent_hash, - _marker: Default::default(), - }; - - let (bft_send, bft_recv) = mpsc::unbounded(); - let knowledge = Arc::new(Mutex::new(Knowledge::new())); let local_session_key = table.session_key(); @@ -279,9 +136,12 @@ impl Network for ConsensusNetwork

Network for ConsensusNetwork

task_executor.spawn(task), - None => warn!(target: "p_net", "Cannot process incoming messages: network appears to be down"), - } - - (table_router, InputAdapter { input: bft_recv }, sink) + table_router } } @@ -310,23 +164,21 @@ impl Network for ConsensusNetwork

>); +pub struct AwaitingCollation(::futures::sync::oneshot::Receiver); impl Future for AwaitingCollation { type Item = Collation; type Error = NetworkDown; fn poll(&mut self) -> Poll { - match self.0.poll().map_err(|_| NetworkDown)? { - Async::Ready(None) => Err(NetworkDown), - Async::Ready(Some(x)) => Ok(Async::Ready(x)), - Async::NotReady => Ok(Async::NotReady), - } + self.0.poll().map_err(|_| NetworkDown) } } -impl Collators for ConsensusNetwork

{ +impl Collators for ConsensusNetwork

+ where P::Api: ParachainHost, +{ type Error = NetworkDown; type Collation = AwaitingCollation; diff --git a/polkadot/network/src/lib.rs b/polkadot/network/src/lib.rs index 4f0ad2c6ed..70ecfdf24f 100644 --- a/polkadot/network/src/lib.rs +++ b/polkadot/network/src/lib.rs @@ -20,14 +20,13 @@ //! parachain block and extrinsic data fetching, communication between collators and validators, //! and more. -extern crate substrate_bft as bft; extern crate parity_codec as codec; extern crate substrate_network; extern crate substrate_primitives; +extern crate sr_primitives; -extern crate polkadot_api; -extern crate polkadot_availability_store as av_store; extern crate polkadot_consensus; +extern crate polkadot_availability_store as av_store; extern crate polkadot_primitives; extern crate futures; @@ -48,13 +47,12 @@ pub mod consensus; use codec::{Decode, Encode}; use futures::sync::oneshot; use parking_lot::Mutex; -use polkadot_consensus::{Statement, SignedStatement, GenericStatement}; +use polkadot_consensus::{Statement, GenericStatement}; use polkadot_primitives::{AccountId, Block, SessionKey, Hash, Header}; use polkadot_primitives::parachain::{Id as ParaId, BlockData, Extrinsic, CandidateReceipt, Collation}; use substrate_network::{NodeIndex, RequestId, Context, Severity}; -use substrate_network::consensus_gossip::ConsensusGossip; use substrate_network::{message, generic_message}; -use substrate_network::specialization::Specialization; +use substrate_network::specialization::NetworkSpecialization as Specialization; use substrate_network::StatusMessage as GenericFullStatus; use self::collator_pool::{CollatorPool, Role, Action}; use self::local_collations::LocalCollations; @@ -185,8 +183,6 @@ impl CurrentConsensus { /// Polkadot-specific messages. #[derive(Debug, Encode, Decode)] pub enum Message { - /// signed statement and localized parent hash. - Statement(Hash, SignedStatement), /// As a validator, tell the peer your current session key. // TODO: do this with a cryptographic proof of some kind SessionKey(SessionKey), @@ -210,7 +206,6 @@ fn send_polkadot_message(ctx: &mut Context, to: NodeIndex, message: Messa pub struct PolkadotProtocol { peers: HashMap, collating_for: Option<(AccountId, ParaId)>, - consensus_gossip: ConsensusGossip, collators: CollatorPool, validators: HashMap, local_collations: LocalCollations, @@ -226,7 +221,6 @@ impl PolkadotProtocol { pub fn new(collating_for: Option<(AccountId, ParaId)>) -> Self { PolkadotProtocol { peers: HashMap::new(), - consensus_gossip: ConsensusGossip::new(), collators: CollatorPool::new(), collating_for, validators: HashMap::new(), @@ -239,13 +233,6 @@ impl PolkadotProtocol { } } - /// Gossip a consensus statement. - fn gossip_statement(&mut self, ctx: &mut Context, parent_hash: Hash, statement: SignedStatement) { - // TODO: something more targeted than gossip. - let raw = Message::Statement(parent_hash, statement).encode(); - self.consensus_gossip.multicast_chain_specific(ctx, raw, parent_hash); - } - /// Fetch block data by candidate receipt. fn fetch_block_data(&mut self, ctx: &mut Context, candidate: &CandidateReceipt, relay_parent: Hash) -> oneshot::Receiver { let (tx, rx) = oneshot::channel(); @@ -279,7 +266,6 @@ impl PolkadotProtocol { } self.live_consensus = Some(consensus); - self.consensus_gossip.collect_garbage(old_data.as_ref().map(|&(ref hash, _)| hash)); } fn dispatch_pending_requests(&mut self, ctx: &mut Context) { @@ -332,11 +318,9 @@ impl PolkadotProtocol { self.pending = new_pending; } - fn on_polkadot_message(&mut self, ctx: &mut Context, who: NodeIndex, raw: Vec, msg: Message) { + fn on_polkadot_message(&mut self, ctx: &mut Context, who: NodeIndex, msg: Message) { trace!(target: "p_net", "Polkadot message from {}: {:?}", who, msg); match msg { - Message::Statement(parent_hash, _statement) => - self.consensus_gossip.on_chain_specific(ctx, who, raw, parent_hash), Message::SessionKey(key) => self.on_session_key(ctx, who, key), Message::RequestBlockData(req_id, relay_parent, candidate_hash) => { let block_data = self.live_consensus.as_ref() @@ -445,7 +429,7 @@ impl Specialization for PolkadotProtocol { } }; - let validator = status.roles.contains(substrate_network::Roles::AUTHORITY); + let validator = status.roles.contains(substrate_network::config::Roles::AUTHORITY); let send_key = validator || local_status.collating_for.is_some(); let mut peer_info = PeerInfo { @@ -479,7 +463,6 @@ impl Specialization for PolkadotProtocol { } self.peers.insert(who, peer_info); - self.consensus_gossip.new_peer(ctx, who, status.roles); self.dispatch_pending_requests(ctx); } @@ -521,37 +504,30 @@ impl Specialization for PolkadotProtocol { retain }); } - self.consensus_gossip.peer_disconnected(ctx, who); self.dispatch_pending_requests(ctx); } } - fn on_message(&mut self, ctx: &mut Context, who: NodeIndex, message: message::Message) { - match message { - generic_message::Message::BftMessage(msg) => { - trace!(target: "p_net", "Polkadot BFT message from {}: {:?}", who, msg); - // TODO: check signature here? what if relevant block is unknown? - self.consensus_gossip.on_bft_message(ctx, who, msg) - } - generic_message::Message::ChainSpecific(raw) => { + fn on_message(&mut self, ctx: &mut Context, who: NodeIndex, message: &mut Option>) { + match message.take() { + Some(generic_message::Message::ChainSpecific(raw)) => { match Message::decode(&mut raw.as_slice()) { - Some(msg) => self.on_polkadot_message(ctx, who, raw, msg), + Some(msg) => self.on_polkadot_message(ctx, who, msg), None => { trace!(target: "p_net", "Bad message from {}", who); ctx.report_peer(who, Severity::Bad("Invalid polkadot protocol message format")); + *message = Some(generic_message::Message::ChainSpecific(raw)); } } } + Some(other) => *message = Some(other), _ => {} } } - fn on_abort(&mut self) { - self.consensus_gossip.abort(); - } + fn on_abort(&mut self) { } fn maintain_peers(&mut self, ctx: &mut Context) { - self.consensus_gossip.collect_garbage(None); self.collators.collect_garbage(None); self.local_collations.collect_garbage(None); self.dispatch_pending_requests(ctx); diff --git a/polkadot/network/src/router.rs b/polkadot/network/src/router.rs index 79a50f4283..4307c302fb 100644 --- a/polkadot/network/src/router.rs +++ b/polkadot/network/src/router.rs @@ -22,11 +22,12 @@ //! the `TableRouter` trait from `polkadot-consensus`, which is expected to call into a shared statement table //! and dispatch evaluation work as necessary when new statements come in. -use polkadot_api::{PolkadotApi, LocalPolkadotApi}; +use sr_primitives::traits::{ProvideRuntimeApi, BlakeTwo256, Hash as HashT}; use polkadot_consensus::{SharedTable, TableRouter, SignedStatement, GenericStatement, StatementProducer}; -use polkadot_primitives::{Hash, BlockId, SessionKey}; -use polkadot_primitives::parachain::{BlockData, Extrinsic, CandidateReceipt}; +use polkadot_primitives::{Block, Hash, BlockId, SessionKey}; +use polkadot_primitives::parachain::{BlockData, Extrinsic, CandidateReceipt, ParachainHost}; +use codec::Encode; use futures::prelude::*; use tokio::runtime::TaskExecutor; use parking_lot::Mutex; @@ -37,18 +38,26 @@ use std::sync::Arc; use super::{NetworkService, Knowledge}; +fn attestation_topic(parent_hash: Hash) -> Hash { + let mut v = parent_hash.as_ref().to_vec(); + v.extend(b"attestations"); + + BlakeTwo256::hash(&v[..]) +} + /// Table routing implementation. -pub struct Router { +pub struct Router

{ table: Arc, network: Arc, api: Arc

, task_executor: TaskExecutor, parent_hash: Hash, + attestation_topic: Hash, knowledge: Arc>, deferred_statements: Arc>, } -impl Router

{ +impl

Router

{ pub(crate) fn new( table: Arc, network: Arc, @@ -63,17 +72,19 @@ impl Router

{ api, task_executor, parent_hash, + attestation_topic: attestation_topic(parent_hash), knowledge, deferred_statements: Arc::new(Mutex::new(DeferredStatements::new())), } } - pub(crate) fn session_key(&self) -> SessionKey { - self.table.session_key() + /// Get the attestation topic for gossip. + pub(crate) fn gossip_topic(&self) -> Hash { + self.attestation_topic } } -impl Clone for Router

{ +impl

Clone for Router

{ fn clone(&self) -> Self { Router { table: self.table.clone(), @@ -81,13 +92,16 @@ impl Clone for Router

{ api: self.api.clone(), task_executor: self.task_executor.clone(), parent_hash: self.parent_hash.clone(), + attestation_topic: self.attestation_topic.clone(), deferred_statements: self.deferred_statements.clone(), knowledge: self.knowledge.clone(), } } } -impl Router

{ +impl Router

+ where P::Api: ParachainHost +{ /// Import a statement whose signature has been checked already. pub(crate) fn import_statement(&self, statement: SignedStatement) { trace!(target: "p_net", "importing consensus statement {:?}", statement.statement); @@ -156,6 +170,7 @@ impl Router

{ let table = self.table.clone(); let network = self.network.clone(); let knowledge = self.knowledge.clone(); + let attestation_topic = self.attestation_topic.clone(); let work = producer.prime(validate) .map(move |produced| { @@ -166,15 +181,26 @@ impl Router

{ produced.extrinsic ); + if produced.validity.is_none() && produced.availability.is_none() { + return + } + + let mut gossip = network.consensus_gossip().write(); + // propagate the statements + // consider something more targeted than gossip in the future. if let Some(validity) = produced.validity { let signed = table.sign_and_import(validity.clone()).0; - network.with_spec(|spec, ctx| spec.gossip_statement(ctx, parent_hash, signed)); + network.with_spec(|_, ctx| + gossip.multicast(ctx, attestation_topic, signed.encode()) + ); } if let Some(availability) = produced.availability { let signed = table.sign_and_import(availability).0; - network.with_spec(|spec, ctx| spec.gossip_statement(ctx, parent_hash, signed)); + network.with_spec(|_, ctx| + gossip.multicast(ctx, attestation_topic, signed.encode()) + ); } }) .map_err(|e| debug!(target: "p_net", "Failed to produce statements: {:?}", e)); @@ -183,7 +209,9 @@ impl Router

{ } } -impl TableRouter for Router

{ +impl TableRouter for Router

+ where P::Api: ParachainHost +{ type Error = io::Error; type FetchCandidate = BlockDataReceiver; type FetchExtrinsic = Result; @@ -194,10 +222,11 @@ impl TableRouter for Router

{ let (candidate, availability) = self.table.sign_and_import(GenericStatement::Candidate(receipt)); self.knowledge.lock().note_candidate(hash, Some(block_data), Some(extrinsic)); - self.network.with_spec(|spec, ctx| { - spec.gossip_statement(ctx, self.parent_hash, candidate); + let mut gossip = self.network.consensus_gossip().write(); + self.network.with_spec(|_spec, ctx| { + gossip.multicast(ctx, self.attestation_topic, candidate.encode()); if let Some(availability) = availability { - spec.gossip_statement(ctx, self.parent_hash, availability); + gossip.multicast(ctx, self.attestation_topic, availability.encode()); } }); } @@ -215,7 +244,7 @@ impl TableRouter for Router

{ /// Receiver for block data. pub struct BlockDataReceiver { - inner: Option<::futures::sync::oneshot::Receiver>, + inner: ::futures::sync::oneshot::Receiver, } impl Future for BlockDataReceiver { @@ -223,16 +252,10 @@ impl Future for BlockDataReceiver { type Error = io::Error; fn poll(&mut self) -> Poll { - match self.inner { - Some(ref mut inner) => inner.poll().map_err(|_| io::Error::new( - io::ErrorKind::Other, - "Sending end of channel hung up", - )), - None => return Err(io::Error::new( - io::ErrorKind::Other, - "Network service is unavailable", - )), - } + self.inner.poll().map_err(|_| io::Error::new( + io::ErrorKind::Other, + "Sending end of channel hung up", + )) } } @@ -303,7 +326,7 @@ mod tests { fn deferred_statements_works() { let mut deferred = DeferredStatements::new(); let hash = [1; 32].into(); - let sig = H512([2; 64]).into(); + let sig = H512::from([2; 64]).into(); let sender = [255; 32].into(); let statement = SignedStatement { diff --git a/polkadot/network/src/tests.rs b/polkadot/network/src/tests.rs index f5ad78dae9..263a931b9e 100644 --- a/polkadot/network/src/tests.rs +++ b/polkadot/network/src/tests.rs @@ -24,7 +24,11 @@ use polkadot_primitives::{Block, Hash, SessionKey}; use polkadot_primitives::parachain::{CandidateReceipt, HeadData, BlockData}; use substrate_primitives::H512; use codec::Encode; -use substrate_network::{Severity, NodeIndex, PeerInfo, ClientHandle, Context, Roles, message::Message as SubstrateMessage, specialization::Specialization, generic_message::Message as GenericMessage}; +use substrate_network::{ + Severity, NodeIndex, PeerInfo, ClientHandle, Context, config::Roles, + message::Message as SubstrateMessage, specialization::NetworkSpecialization, + generic_message::Message as GenericMessage +}; use std::sync::Arc; use futures::Future; @@ -93,7 +97,7 @@ fn make_consensus(parent_hash: Hash, local_key: SessionKey) -> (CurrentConsensus fn on_message(protocol: &mut PolkadotProtocol, ctx: &mut TestContext, from: NodeIndex, message: Message) { let encoded = message.encode(); - protocol.on_message(ctx, from, GenericMessage::ChainSpecific(encoded)); + protocol.on_message(ctx, from, &mut Some(GenericMessage::ChainSpecific(encoded))); } #[test] diff --git a/polkadot/parachain/Cargo.toml b/polkadot/parachain/Cargo.toml index 4f841ce5f5..a3cd006173 100644 --- a/polkadot/parachain/Cargo.toml +++ b/polkadot/parachain/Cargo.toml @@ -5,8 +5,8 @@ authors = ["Parity Technologies "] description = "Types and utilities for creating and working with parachains" [dependencies] -parity-codec = { git = "https://github.com/paritytech/substrate", default-features = false } -parity-codec-derive = { git = "https://github.com/paritytech/substrate", default-features = false } +parity-codec = { version = "2.1", default-features = false } +parity-codec-derive = { version = "2.1", default-features = false } wasmi = { version = "0.4", optional = true } error-chain = { version = "0.12", optional = true } diff --git a/polkadot/parachain/tests/res/adder.wasm b/polkadot/parachain/tests/res/adder.wasm index 77d5b37e7297337fe76399cdc589a3fc6cd63280..dd48b0d91687e510e627435a95902fea8ac8fc72 100644 GIT binary patch literal 33998 zcmeHw3wT^tb?!cA&WuJHNglsq%XX5ZiK57fEo<}~DT(k%c8G{$JANb$;7&#}XY8?_ zo{{XB1}sVhHle+t(DEp7!y^O=Z37fap@neEBR9~m>1`>L3%!BDZQ2Wc&<8E_qxb*U z-e=~_NPYxpZ@=%>_MH7#Yp=cb+H0@9_S$F0DqEhhlv36}<9*gS>)d_zIX;zQM%@=W z$ESlQ5(}R&v&108I%lu3Lf-7@$c#5LS2}B}wV}4nR>*O}Din&?5j$+Dh6o;ZG#Yin z*1Q#sM%qH>tn|{-6DoF2rJs3CAZ-|T+A^8qY`$3XatoQl;%siAI5(SF$WBgsmWpLE zC%o)@W-?p$LRM2Ilg}<>Gu~`IWJgbDr;8|hN;S4vDs9CY;%nEfZ*FOAdV0_1?{00h z&si_S_~g@YF7z_z+;uAbxILAyJCtj?)}Z|w8>t$!&m&DgVx7eEynQlm*}LuCuH9un zVkJU*TY$XXewWqmtVANB|JO7KR~tlJdrS?59|lt?{e27|gJ1olG>jigX&& z*WTG;dP{FUnP3(JVm7ut1XeHwNRUg zlU|G4%=}vB*SM|BuhacJi+(_0y&EW_vkk7`+G)bU*hW|AUyFWIpg>x{ z2r53LAk`oktaeQ``uD4!7IP42{$;5MG<-%Xs!iOeo-~To9SXgNGmb3A^CYrq+8Lx{ z5Vo%j_n{gZgXc3?;n6s(K$rcX)y`!~#Ybt$;!5p8Q<2t_*2#8lo|M=bw|UThzl}*z z>CnlveL8&(D?4p3q#uN_J(&=s=JdZ>cToOffd_5$>Z&dq{E(0I``J-|jU|}pxPxhw z-Un@;87u9^H|=e)o1-z{gTT_#?s^jGryqJkrQawN(iI9oWD|}^h_pn6LY+L;y732w zLSQby%f&vx2&Y5q zeGLRwl-8P%fIf=K1Z{Pt4I!Y`fHt)LL6rpr=Bd#@0=f%DrO^@1M4pzOQ}Kvig|zY7 zz_6mmBC!I?r)qV$aJUa>e6E^?O6eJtDkdqoUTA{egW+?*+*e&N52Jz$hFbyApQVIk zWoT(|#h5brh=P?s6&8ywcVVY**UQLm$L7{$KWxh)!y2e|Veh6IrJpBj1sQu`MAda@ z#Y32VL0ej~4scNkV%jR*Y}Mh~LENP!CxC622JJd*N3b!P&}yBso7I~5%c|8?+IXC| z+Z#C!84Jew8e5d=Vf!Q&d_qm7g$hpEp0II6R4o0@^G~SsmUx4Txz1y>v{-L$NGxK&7}pw~2n0rB49_qq z6>W_l!O)HEgEAw}1s}A=kHEO8^qXm7*Ga#6eaoIk^$+ZxdfkHt>jS$d>t*-U%f;VS zxqCh$>nweq!`dq3>F4R~m|mXF(Z@4ebhS||&`N|EkE&R_QN*Po zA~;0nv35me_W!!g+RnF%`ZZV8ueGXvK(X9b5wwUDTcKV&Zu4c;&sYfv8Z!;GfmT%q zaHVPkW#Aq`ZFm;DHB3Zhm0WIf7E2e<2k3yFMLaoqEA+vQK>1oiwTz0SD@`vdX=w{y z*;vTP&i1%{5(gw}4M!0E_ZWeVQ(2|UT5Y+4F;rT|em!DEdB$_i5ihMq6fHE3P9ns_ zNjPcs{6rWw%=R@(r>^6MCt%Mlm`3KO5)qmp%MH2VlL?4HVICdm9?@NUr&2h^g-#`O zmFuLf+tAuc+s}vTv)S`HCO2E~k+A^b?ncrfekKyptqF&2v2+!2ov8%$gk6PQm}Pe5 zMtLCQVQ?4Q?^Ns3@r6=4y5KgH;N&HomImX6=>d{Bh6SqajV>rov^bZd9ue~l@{Jfq zkZPp40XqSD;8_>&NPDQ+VU6Cr=)zK-?9Sl_`vv=KxMXMP5S{-9kZa&PIO%gQXbHt* zTwjJD{D%$&b;I~+St0(2PGuQ6*o7L%aRWR`hX-E@4y4*;N>zIpTXNcJ2kW-$4BBAb zZP1LOgkC`xrx||0Z-g?!43b77OokfV2qzxr5jQfWCxQy&Moyw2vyGPAynS}L^=-gZ zSJpIU-FLWU-*oCs&t{{8gZ4Hk!v-$sZG3F5EN6?G-Zo*{7Y3AIyRC-62&U+y8^r@$ z)u2GXj29lDyK=FEF84CqryS867;N*~B32_8%+n$0Al7^cEb$b`T)dKt`Z)om6_g_c zT8Kw{!Qym;($Rv4%m|p4pK^wVT(QVjt8wvCo zUfE}Z?o*`pBpqT-V<`Pk$V%OpB?=VkvY!Ygn$n+xg8&hC*`E%<)6!@dQj^=nA%%9T zCqpuz7!P|*=_kP_Ve48y*OMaH^BQ-`WaFB@W}qM%&0G_cLSr2z@R#nOZzCI(k& z?XXTjcF=A{9d@!%x>*a+cN|2q5HwIU?7~5WIbov37KbfVF)INgb!G+H2_kZ^hoz)C zQyg>`m=jag9;SuI98w&thXfD+aBZzYahX9niN9%E_Br8&yE8GJ^!aI z9;*;NZ&<5%+Q&+C(hr)7B{(Z00S3AS|9$>{Cb}P&fkEyImf` zL>}CgfCb}?$<)-a5V#9qbHR~A2-!r@;b0Pym8f(_LL>?}nGa#q7AQxtqiG_nwRnKz zCTF+9$--Vw1{|QF0sFxmVCqoG8pFCN$~f&)GCJ-PDow^=#NHROB&H4Zv^pRT{Z~gq z=yE1(Y~_g%%>>#66bHAzUWn7oB4@24T2|-$2#Z+y}dE z2RVbsEmeVg_#U-YoL)T~PPfjwDi&7p4YkiEm45Oy+B$uxF|zrbgPV%A_%y!^JX`56 z;~>_~@B;Qx>eQ2p)>))bYXi@Vj` z=3XPXH?w*Fa-w^AZ1h6nIwCcqkHqp=E{`=`NF-To1=L+0TXP}N&tj81 z;C3#LbzDevvKRy5og|rBP5^7@LSiSY8$hFPdCb0$=woq{yWPFn9R}WVV%zfA)(eU4 ztZo6V>zBv2Ur1cfVg%!CTOLbYNVKuI*1gdM@(mXfH?p`3&@Ibj8!sfbfTQ;1v70U= z+Q-f11Y11y~S3@*6xH|-s zcpKay%6ob2)(e=pLAQ5#Z0Cik?3OwYd+#7`c4xt|f zjUg#tBjq^y>z4AMlpXgP!%w%An?Zl;@>m=CbQ6NtBlV5$P3$WwTuFUG>eqw*fZMS= zw(bISM<`4E8n?$C5Ijvc46KCP!y18aa+7YSz_&}e398iZCM)oDP?~;$Ck5V$`D>GM zzmy|@ce>jv_*Y@7b_)DDfydmPP|zDI@U?EAd%eJK6nG1u*SUQacmwdS6L_D%ani&3 zaEGN}WBtGwS@fZ;^k(sAVbQRAFJSXd<8l->3mzqGtG$rGE}af7z{&y}&WUSJ)LLe2 zNjxpX*;~*%Y6wRQZpFk68fOqit#}gjEnxn5!lM~YFF7#>J4Wn#4i5eP-bV(oBPH~~ z02^OB4#v2T5(8;3z(8UrfPD<%?7$JpA)?EU!i~1L!J^)QgBb8RT$~XdfayfYW`eDo zJ;YekETI$hfbCQC6qodViJcY34W~HZqy^GDYrvSH!p+ig`$L#W)2B;o2-E~y3f74+C+v$`W z<)N5U0^0;iYc0AE5>h z{5p`+vVbec zV4fDQcGa}>#9LFM5ZJKcfu~<8URXthGAOVB6x|Qy7=s!G7B>l*e zg~$t@zO&PyogG^*DY!mZeiS5cOd5h~30;FNMn`l9SPL$~+|3m23SO|*tBly<=2R;f zZLzR4>HN61Ub^fqVq7YK000Ym#fs{2-E}A|S=ZvaWex#|K@0DbKt^O3@f<8a#B{Kd zcwP^|*0iI@!~*m1Vr}Xbe5oC)H4C(5Nr+(S+NJB;QT-T{HFx|Qv&}#OF*u?Vo!#Ov+^FAJD)9ivkNZX zR?EAExzbE_q1y*dPS540T)w&HL%jRF+#=s|a|_wx^kT^?mvXzNi<8}@vSoz&vr9Vj zYMm}A{#9z}AzfC$libTqeWR{ldNq*v=e$l7>X(>pGWcjO<%d{_x(iD>4Vlz7sZP{V zlgXI&OMZV#2G8dss_8Ce%Vn=r8Jd?Lar5Pc?rCqfYrA{Ptu6+t3%ia2ue_@?HwpAz z-MMV(_}s3Ncf43$D4pF!c^oe;oLHRf&dts2OnSN8VDIp7esb8$rF#2zEfiDU~&Mz*A*mK$WY_7O))}1@;l?u~yXMmWU#;oirWzS?zdpXD* zC*+4<-5<7Yb>a#ECbb_a2CbftPYXVq!*SJxbT`r$B7G%3VSG4Yj``R~LniM}Bvax= z@M*y3V)gF_UH1DsNY^9%2M}XB_3l)xJMT>{9>;5vg}GtWu{%74(l%_S`p;cR{(6g2 zYmnN@cy)^l;gaH&)4$ti+ubt9^qGlh~q>aMLq(~g|c&$ef$(24JA}8B4b(6 z7a>v6`&ft;@U){dc!pHN0FqbX<2ccCNL2JeJS|=SK3)H?)W44P(Kq2~N8gDjC8eCt z;t_7sY&?bhCT3OS`^b(Xi+|y_Konq-&>O4J7ig$*{s$@iIUZ&pMKFzj;jOyaqkw!! zS1HFvqsB%&l+}2Q(`6~=UNF-13OsB(atz7u0@+fLBc zH+Z*ZD*Pr5WrIHua$qTiO!z@OqE6%%Bxmu#NN-2-XKcpeAv~H0u&vk+*m*Rnnmf@S z^5GLwAGsGvtFDp>;v`{$2vyM;7F3vtZ3R$eiZ!O58s;%&!B!0%8|!Vmrd~PkN2N^k z@99<_K%$}_!PAO<98Wv?89bp3Y)!QVKN{y5!TCRe^S8u_{s2!$S^>}5jfb?_uUkDI ziHg2}1tt8j9{dFBu^`(Z*eS@wc`wkNUuUOz6q}vMN09FY6ul^ih470t;A6<&Er7^R zp+=++U(WdiafVQXX`wQH5g$xThmYe#x{>9CB5Czk*i&s73s#%`_qJxDu?JwFIPXR3 ze3*}qxjYSv6|MM)mHzK!j29GbZ z*nU5Yzk|oOSnPNbIfxXRdDVJ6zKcrxdTTebsJ;fJ@E$zeXrvQKS1SanA~*TjXe8-p zsRcLBlP92r6O4ai#1*iF>1cR+oys;0SFMBjvh6@4qKu+O~`T@3;^bo=@@BfI%& zzdX18n=Ef>RB8|5?_7T`vYV(Udy&DC??IxXy(~lr@U){tc!r|GcskLW@eD^t@r*=w z9FNV>$Xk${MHfyq@~EHH4nSdpg&H;L-Iki zc2wI*WVz`%(Y851+l=BT(ImVFJ_D=}^D*cx7U(Y2JccZZEkfi z_%+?&6R5cxD#Hdd8x;ZzLhiTOWi7d@q0gqXNiKaAVcU7#b`yF0h>SG)7!nnI98VB+ zK21g&G^0-;FQQhFZy@`KFdF%1WJO=1D*VzId2ahGDCnKF?QLi(Sx2_%ml|HTu9d+N z@net+xFMosHR3}WvGot2h3G(SM7kfJ@YRiacWnG~R$Gn3Xs4|34d@x7c@%|D8ELJT zswl#j=K<8SA9=vfHmWe2uI!0^A)J)(?*ZBs zZF@ZuBg(h>+2*$Q`Pq2ngT#aUqN>{ahUzSCZu^*zyRGe0e%8f6w_=T9DR6YZ&(Wdk z?;$+bxr8Ko}n^1^4Tb}~>{g^~YZCyt8!^}D=;NX7?c*fM>U_q&Y z_V=+;H#?Ef0(-w+sjo%#P2dm0`Y%9x3v1)5dJ+g`-9mFOhvavr*MV z|3B))=248gu4;aTpr|kp1h5_VqFeUBIeW0as_jugMDURII&_0o@wcEYOHZ}^BeFBV zur{~-3$kK(orn#*XQcB;v!BIU;dvwKG(#WJS97N%u{}u0RqP&-UU!0&1ye;J&9fmsanzag)zw$~#u=Z!Zb`=FQ%6&^y{ zey2KMRh5WSl}L|_{VqLil!#>GRh`)!`5V;oOoMmoD)ZWfA{}}s2OXB}`$5_>D>{Wl zMbEH+QwUxCxD&e@iXV6HQ?Vj5yLYSDt4yZ(QDiu!^z`F;mS3V3Kg^>+O_i)$nNkd% zM}~_-d6ZZQ{atp3w%-POSQmec#AwKuk$oHbwW4i*imb0n1JD+1+=TAXj5eK;s^;x5 z;f{*E97+5>=mmEL8QGJ}V5}XizkEHKtWQU(^*0z>Cz}B+4istde zxeQP3X~FYg6_~mlU7YnUfvCdt+iJ+5*SDcA{0=-WY8K4#a*L>7^UlW(P zMmx$+p#qm8RF#@=iwNEiw~PsHbyA7@1nRb}@6auCkoxQKiR|9?EhLbddK*$Y-jN+j zT}{)z?pM$a;%?@s7^t&@2u`rj5G=F?3tQFNe+4~F^ez?d!O-G3Q=khojazT~5jy}1r3x5@Z zgz|p@iE*MUTH~m=4HIKq((o}hVA%Obj|{G zZ)e^6D)d}ReHrT5@(BRAsIDeqJ(izx-X_Y>|Lg2Tmz;6RM?gPI^ppD(i z4ESFGe7O(Yfcnt2Rp8gL*dFtNNdj-F0>jvmQYf}G(C{01?jjP!+Oqjxyu#1M&l?6W|8ahpw#x$ue0KV3NRFDnOU!`At4> zKY=_D8nQeZz0C(s5qP=^q)YK(AIOtu=yg@#m(VAjV(Ify0w1pec{2VB0K;F$!wBa~ zsH+n-*FD7{H2#7#{=Q0sChEIBFoL66Xe}Ow?}xB}ZUC;dypF)`D)2V|{HhP!P2e3> zAkV!Piqi5JfhVd!9>1^mfiEF&xe9zU6zMh}_yz*sQ3dkYd7lsb4FW$|1ukLoUgrb< zfIyyv^-zS5Z?TTCl0e-*v(CZURM)leY}$mPG`I?xPPp{xII?XH5y`_@k&Dy~e+1Z7;nLW6*zD4dzM@DiL%<{;{hTp_f$_OB z;|ea?#d7f_o*b^bwkuu}99<}+Fub{v;?3Ir zxmi!~X6^9Yj3?2FgLCB~<)GdR@r=(c&MqikGaX(i6=#pjWn@q&i>Xn?+rB%qvx{Kz z?4Huxd|;T|+xC`m^GpfkAe+Mr{H+>ZvUbkkUfPTcx7{EuR0Ex&|= zn21tibN74snql%Dq%${H!W4ke$VhdB-$wU`yz=7of?TL#urKsVbGKAzkIEg{-Cph% zj)PnHfq9NyihqakgX>d^-j6c%ykk3*J)>#w@CRzf`~2xST)mGfUKFi5bG)g&(y3pe zM!X%a8|r2Cr=G~DT>93`>SA(mR4xED_lh@PotU2)$SFNtJU%;vS3eZ*ojRdv41wsG z-{Tdsm;pWWFGjVNvBa-_rRa!m-M^YnTp-pgb~iTXC8r3Mi}44OUE)?>PbF zGG5m3Mt8UY)QR%`xrMzm^9yH372W+#_M#Zho0tK2US4riF#Vm#mQP?k6z93BxaQ~; z$(qv?3o{E~M_$nZM~Y`HVdaQdnkmj^7v{jF3{s2|atBLZzL*20$}nqK3oxzdg&HWcEuwQY@=qx~$ zcyBXNPM34VVwE4oAc~kbdSHgW3_o2uzDT7lD>{o+VK6dw~Qdm^zp(Ey%Tm%;SE~%TId} zu=EWN&Go3FH`+<^iVnq{*?FTOt7*}6F$c@1^=L6wr!jT1xTr$aG&?$5&KA6}v(UmL zbB7n8={(o(pF5a6J3W`pD@Hucq)7N#?-C4%j%9OGqZSo9NtGhf{b{3&?JpNSmhiA!PKOoBZIz zdwd!jaNb}4dMYPqBA`U0if4dMV@(u2)*nwwJm7aOf_b`thK-qQX^L_PYOr3|K?_ox z@9jSXUm#x|Rg5KdfyxdS5|+nyMVI{2L!ozVx|9i)=~Hw-ue@g-FU>5=+F+Pe92j0- z`#YY@+^FJ_)$}(fd-}+TSz@NP)&h(w-V4>+$H~RwG_(Yc-ob3%Y)6U#rAu3F#cR;j zHinB@OrGRx{3OM*AuLYnX1D*C+=B=7UGcQ+E1#mX{~RYX+2>CtZ^`SIyJE!SHmvjo z@e}XB?-D8=`!6j&`v0B9l;RQH=k4yK;`!rpGhAhd0d?rR_;NBqC9I*-$&nGC;xWa8 zLlL%~_gS>Cu&CJ?#S=j%_kusGFe(?7{#ugzi*fvZB395md`;FX1_X@c=Cklm;lj^h zhoke$Q>+1rx>j6+pxtJWz_&UVXIb$ysnwmgNPFmUe+IsYZ+UpkGhNj#xyruCtIZqf zF2mbmaHbPxPw{vLo!`GWJuU7kqdSI--gN6n%TuaBs5iN~TtD&0L-%CEWEw3wl!)OFe?}T9o(>$PZTHnlG6sU)bR<-^NVUNS9^QEnL z5g=X$YqL45t8q90WyK(-=|k&d%|@zyQeF-G8)%(k%;hq{ZmUc0m|{52&=bvMi?U+K+tiBY;Yd{Fm60gj1z*;X zrFKsV#zk)QgF+N*cH1nL7Q7sWi?DGpSXtlS1bz}X=am%$=(S>Dq}O0qR=4790{o@L z)G@`dKm9a@oI1H*@MVnjf?@>Hw5#(ArRTiSh_+_T*3`C z(&PIY6J@zm&vABm2}5s<_wkHdD2Aasd1PkD*%wu<&!`wyHMWQYV#x6l+Edkg#`X+J znO9>qj!O850chV1<@;R0Gpf8dr)ADynih!Sds?zp%6k{wZH--7v2GaZ)vCo8RrGGo z5NoYnsGJFWSD6(-HZFRyk=LYTPO7K(YOJV+gyOY8#RXvKzB8y|{^BSrM#p{mlaY#d zP`?fFjmPS-UEX@*Sbeo-6tzasym}DVmca@&*ka*K$| zhj;ql#HaG-DkPplMUJajZp6tdGT7 zV$CtO#_#4EYmfHZ!8!b^{=k>=|UtZ;kHpa2Wn!Yw74#e zk#dHAA>@A%W*R5p8PquP-nL~~KfskO5^Tu0p;uPr`#ph>^)886D<7m3L)ZM`4;lo% z1_Zst6+UkL`J#X5@4{BtX==AyK^5uA zmr>{~>-3PK7={x;Ef-bjc~-ckDb(WHA-|eyEOZlb@x5+VHUO6kF7#IoRSN12gH2|s zVo14ZELV5mzPs;qyGo1Yg`A6hy^K?Zo9ymOcK7U@EgnCyFn!kT>hlH*eLY^T&+Y9= zrgkQKcJ>Z#-%cS&0MmRKPVEvZyDHe;;AB3V92o8y>?`E*$=<Ca&nZ8cdss6qE`|yA>Ty&q z5&Ug@Rp==8(Uc0T3#HcuSA*Jn=fNZQW)2-Va3r(;z@EL(DSoL@@vDo<%fk@+LNKHQ zWG-_fR4=pVOklLe75x#Kn<@AaTCTiz$z;-p4yEtS9G-aL-prAE5AMxmR=>?KI&;}h z{SCV2c1KG;Q_SD5@SiQHMY%~+xM9FIP8U7Jv((CKiWT<>Q{LHfEnf95E{I&M1^Ke7 zzZOxM7w#XBaU_$0X&(^n>8JK22kO)(IdlTw*h~%&r*e~hg~8-NHo1583koPO2UW~x z7UweybIRi_U4~k(t(ZD=^zf06z59>e*|BHh@F6ObrvuyC;S2hG)jP1DpAx8r0O?7J zqbVT?`Xzz*tsmcA<>YdR=4%XRJx|>&bFj}VnDPcEu3$-)nwBW!*;iTNljDCu8~V@<*|9i5$;ojWrdxPg+eJ3ReLpa4F# zb}OslBLBifN3JL5An7x>S!9A(@PRXk$;wTvziA=m9)gWcnT?HRQ*Uf~r&0$G+>`8~ ze)QAk_5pRspr(A(L5(^fsL+dSf1%gIpF(P2ve4f%uvZLGVi5^aus4Y**q6wgZ&^jFjVLn>g`PpPYz8EdP6-GV#(gr6;Vs}_yg@tf!^?> zH<{}j9vb#ixk7*cP=#Laz?I3ZLJtiubEmAEcyJUxE<-aQ#T zw>;BjGD*3h$Ygp~1k*1ml>s4`>^(G| zKD;+`XZm1`gp$LnV2DU2lY_m<-fTWQkcSfZl#U)eco|AH7@(9KO!Yy9hI*4(FAwH? zO5?Yu52eSC>^+nj-EKu~=9vUOwW# z4T68RAQ#)_+^SAw&jOg6(q~T$<2Xd16a1$`sGrprm5X?HBqI?4$$7K-?u=VUB_7D# z@k|EBv551@@r=j&Y8?~tw|8@~Eb=*0f8ERtDdU~04KYY1t|25AR4C2OE@b8kg|Y`D zA9z7WE?yH&?fe{mDhG360Z>FMG1~kC*W7K!LGpoXL>IMT}g| z2K%Z6)TLSV0$0bh%#Ul-Uy`j#pgtn6f0tuV5kKsqD(=wHS%`$c$w3FY8cz)ptO1x< zu@12v)@Pw3b8~Qn&sOz*1syIUzQDF>oZ0lHakSTGd_e8Ov0iHp|Xbk%fI4}^&H1)2`l8=ra{2faPox9;f> z$9lf#G4gEAE)taU-}spKUy&=w`!leV)6+Oi;}s})huPy$X#6*BMV|Q8nPMKhM&Js| z4$uJdv?p(e~*6Tq*hftQf7C2*9PFBMO#%v^C26Ia52S_enG#(3651%fL#aVxIjtB`-&E4?bGtISRSSR?Uj z{jtiuciC595uT4x_T{#kbns$@sn&NgiT2DU_N55u> z^$gSv^#46Oe9=JRJykW;qo$JTbdNgSt4{Zsd*lTiBh;)sgRZ{bHEZ8dsNQ8>(S@hc z%>a!nYIZp;s&7hMf?O5pIdM^KMy|0B2Vb6DN$E0B@#ajcD}4*FD&yzau*y1|tI9h| zhRBN76@Viz>Kg~c6pzZu)3jN6NsU(s`2HF1`sKo(Z*j<5!F(-D-VNK2@ZI>_{8@$r zVKH%x#PP#ZVnKG{JT(|feY_#?<(t{;j90!EH;BAn z)L*`NJFf2nk#u#A<$4*bQM56aN_PRl%!V2P5t;(Tj_~VY@}|iIa@AX|r%__`hCfqR z7nfHb15G#|>Q9mC;o;W}EAMn2VvoFU0ITBk>;wtkk-ZP8ToXMHv>|SF0x3e%IV8}k zb!azhuFLrAWpY`d-i@5TVcLKkdgYDV3vgd)LeG55+l0MAMm>mP^=k^RWE1WT^;&Qn zZt?4a0;&hi{SfspffxVy`(D)RSR{YaZI#fUI*)h7L=)7rpsS_%9ptLgd^KoP!>8(( z^-z?;mAerju7*KFzD1!viZ@Ek3vxZUABSxClU=@S`tV{3t$u%no0{;Ud__nGt@s0l z+$+@+=pMt7=)s$+tT0p?2Q?$VV^s)Z-!2+g0)O{oG)9ZM(SSx&eHAa)$dM4uv?^5? zstYZuUjs@o?5gH{iSfc&@#n{=Yt#!J=>27o(qV^2yuTz`)XI!LfUD~{F!Q~wnpot| z_!N#Dfa!WWxTc;BK#0(@A3)l*YwRYV^JZc{QvXUoE&9C4q8|VVTBk28-VK6&tVWiQ zxxtvOb_>%ff8M>u;hMGHwq~=c{8!^vKGU)9NQY>4cQ@8VcQ>wOS+$tzc>a-&j>X=d zj%-;H3?Dx^iqT=>y74QflI)R5B&r|F85udzJJdgnd+ff+;mP5FT;8*{^XE-7`sYnY zMs$j~2C6qaIMna;Wpl&XzWk)u8_NBd3>{cpz^|lghD6=b2`(=N29o(yPZlxk;bG5t zttGv59J-Ao9O{^q0iN-^jFH4Wo|ope79}AV*?MVE!MeK*y2dp^kh+nPOvmETBpTz9 zo1QDYrq4lo$B*TS#=f#;4sG_s{q8FfkOX4%1ie3_4XF93&!SxdS&|P?mi@6>*FjR z=@{os_jII1z%rM@5f&PZ^=0RCuuvHC3i<3%DnFQ=?9DZwtDnz(+0t>XRR`xF^|R8O zSzCc=m&r32wb~~X{8%ydLcc9$$aO#AoKG(Gie)vR+?r&t!g}7w_wMslm0sx?-G^NCvMAmCIhayZbOo z^8WPdGiuaLtjlEmqOP#r-MxBi=mOi|`^p#7ha4^uhv7RWVPm}hzU;bp{fFSUUVU)K z*^|q8J(FI4Pkv~ifBkR%hhXzcl&yEDFPTjC4JHdisp0JKhMlV$JMP-hpL$1rV+1~F RZvO05OcAl#B;}d;{|n8b!219I literal 27651 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"] [dependencies] -serde = { version = "1.0", default_features = false } +serde = { version = "1.0", default-features = false } serde_derive = { version = "1.0", optional = true } -parity-codec = { git = "https://github.com/paritytech/substrate", default_features = false } -parity-codec-derive = { git = "https://github.com/paritytech/substrate", default_features = false } -substrate-primitives = { git = "https://github.com/paritytech/substrate", default_features = false } -sr-std = { git = "https://github.com/paritytech/substrate", default_features = false } -sr-primitives = { git = "https://github.com/paritytech/substrate", default_features = false } +parity-codec = { version = "2.1", default-features = false } +parity-codec-derive = { version = "2.1", default-features = false } +substrate-primitives = { git = "https://github.com/paritytech/substrate", default-features = false } +substrate-client = { git = "https://github.com/paritytech/substrate", default-features = false } +sr-version = { git = "https://github.com/paritytech/substrate", default-features = false } +sr-std = { git = "https://github.com/paritytech/substrate", default-features = false } +sr-primitives = { git = "https://github.com/paritytech/substrate", default-features = false } [dev-dependencies] substrate-serializer = { git = "https://github.com/paritytech/substrate" } @@ -20,8 +22,11 @@ pretty_assertions = "0.4" default = ["std"] std = [ "parity-codec/std", + "parity-codec-derive/std", "substrate-primitives/std", + "substrate-client/std", "sr-std/std", + "sr-version/std", "sr-primitives/std", "serde_derive", "serde/std", diff --git a/polkadot/primitives/src/lib.rs b/polkadot/primitives/src/lib.rs index a32a32b1e6..01acdc4564 100644 --- a/polkadot/primitives/src/lib.rs +++ b/polkadot/primitives/src/lib.rs @@ -25,6 +25,7 @@ extern crate parity_codec as codec; extern crate substrate_primitives as primitives; extern crate sr_primitives as runtime_primitives; extern crate sr_std as rstd; +extern crate sr_version; #[cfg(test)] extern crate substrate_serializer; @@ -39,10 +40,16 @@ extern crate serde_derive; #[cfg(feature = "std")] extern crate serde; +#[macro_use] +extern crate substrate_client; + use rstd::prelude::*; -use runtime_primitives::{generic, traits::BlakeTwo256}; +use runtime_primitives::{generic, traits::{Extrinsic, BlakeTwo256}}; + pub mod parachain; +pub use codec::Compact; + #[cfg(feature = "std")] use primitives::bytes; @@ -76,7 +83,7 @@ pub type Index = u32; pub type Signature = runtime_primitives::Ed25519Signature; /// A timestamp: seconds since the unix epoch. -pub type Timestamp = u64; +pub type Timestamp = Compact; /// The balance of an account. /// 128-bits (or 38 significant decimal figures) will allow for 10m currency (10^7) at a resolution @@ -88,7 +95,7 @@ pub type Timestamp = u64; pub type Balance = u128; /// Header type. -pub type Header = generic::Header>; +pub type Header = generic::Header>; /// Block type. pub type Block = generic::Block; /// Block ID. @@ -99,6 +106,8 @@ pub type BlockId = generic::BlockId; #[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] pub struct UncheckedExtrinsic(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec); +impl Extrinsic for UncheckedExtrinsic {} + /// Inherent data to include in a block. #[derive(Encode, Decode)] pub struct InherentData { @@ -106,6 +115,4 @@ pub struct InherentData { pub timestamp: Timestamp, /// Parachain heads update. pub parachain_heads: Vec<::parachain::CandidateReceipt>, - /// Indices of offline validators. - pub offline_indices: Vec, -} \ No newline at end of file +} diff --git a/polkadot/primitives/src/parachain.rs b/polkadot/primitives/src/parachain.rs index 8ceec3f9fd..29fecaae73 100644 --- a/polkadot/primitives/src/parachain.rs +++ b/polkadot/primitives/src/parachain.rs @@ -20,6 +20,8 @@ use rstd::prelude::*; use rstd::cmp::Ordering; use super::Hash; +use {AccountId}; + #[cfg(feature = "std")] use primitives::bytes; @@ -110,7 +112,7 @@ impl CandidateReceipt { pub fn check_signature(&self) -> Result<(), ()> { use runtime_primitives::traits::Verify; - if self.signature.verify(&self.block_data_hash.0[..], &self.collator) { + if self.signature.verify(self.block_data_hash.as_ref(), &self.collator) { Ok(()) } else { Err(()) @@ -205,3 +207,27 @@ pub enum Statement { /// Vote to advance round after inactive primary. Available(Hash), } + +decl_runtime_apis! { + /// The API for querying the state of parachains on-chain. + pub trait ParachainHost { + /// Get the current validators. + fn validators() -> Vec; + /// Get the current duty roster. + fn duty_roster() -> DutyRoster; + /// Get the currently active parachains. + fn active_parachains() -> Vec; + /// Get the given parachain's head data blob. + fn parachain_head(id: Id) -> Option>; + /// Get the given parachain's head code blob. + fn parachain_code(id: Id) -> Option>; + } +} + +/// Runtime ID module. +pub mod id { + use sr_version::ApiId; + + /// Parachain host runtime API id. + pub const PARACHAIN_HOST: ApiId = *b"parahost"; +} diff --git a/polkadot/runtime/Cargo.toml b/polkadot/runtime/Cargo.toml index 2a5c21f5bb..241e7c4450 100644 --- a/polkadot/runtime/Cargo.toml +++ b/polkadot/runtime/Cargo.toml @@ -6,18 +6,19 @@ authors = ["Parity Technologies "] [dependencies] rustc-hex = "1.0" log = { version = "0.3", optional = true } -serde = { version = "1.0", default_features = false } +serde = { version = "1.0", default-features = false } serde_derive = { version = "1.0", optional = true } -safe-mix = { version = "1.0", default_features = false} -polkadot-primitives = { path = "../primitives", default_features = false } -parity-codec = { git = "https://github.com/paritytech/substrate" } -parity-codec-derive = { git = "https://github.com/paritytech/substrate" } +safe-mix = { version = "1.0", default-features = false} +polkadot-primitives = { path = "../primitives", default-features = false } +parity-codec = "2.1" +parity-codec-derive = "2.1" substrate-serializer = { git = "https://github.com/paritytech/substrate" } sr-std = { git = "https://github.com/paritytech/substrate" } sr-io = { git = "https://github.com/paritytech/substrate" } srml-support = { git = "https://github.com/paritytech/substrate" } substrate-primitives = { git = "https://github.com/paritytech/substrate" } substrate-keyring = { git = "https://github.com/paritytech/substrate" } +substrate-client = { git = "https://github.com/paritytech/substrate" } srml-balances = { git = "https://github.com/paritytech/substrate" } srml-consensus = { git = "https://github.com/paritytech/substrate" } srml-council = { git = "https://github.com/paritytech/substrate" } diff --git a/polkadot/runtime/src/checked_block.rs b/polkadot/runtime/src/checked_block.rs deleted file mode 100644 index 8089b039fd..0000000000 --- a/polkadot/runtime/src/checked_block.rs +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright 2017 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 . - -//! Typesafe block interaction. - -use super::{Call, Block, TIMESTAMP_SET_POSITION, PARACHAINS_SET_POSITION, NOTE_OFFLINE_POSITION}; -use timestamp::Call as TimestampCall; -use parachains::Call as ParachainsCall; -use consensus::Call as ConsensusCall; -use primitives::parachain::CandidateReceipt; - -/// Provides a type-safe wrapper around a structurally valid block. -pub struct CheckedBlock { - inner: Block, - file_line: Option<(&'static str, u32)>, -} - -impl CheckedBlock { - /// Create a new checked block. Fails if the block is not structurally valid. - pub fn new(block: Block) -> Result { - let has_timestamp = block.extrinsics.get(TIMESTAMP_SET_POSITION as usize).map_or(false, |xt| { - !xt.is_signed() && match xt.function { - Call::Timestamp(TimestampCall::set(_)) => true, - _ => false, - } - }); - - if !has_timestamp { return Err(block) } - - let has_heads = block.extrinsics.get(PARACHAINS_SET_POSITION as usize).map_or(false, |xt| { - !xt.is_signed() && match xt.function { - Call::Parachains(ParachainsCall::set_heads(_)) => true, - _ => false, - } - }); - - if !has_heads { return Err(block) } - - Ok(CheckedBlock { - inner: block, - file_line: None, - }) - } - - // Creates a new checked block, asserting that it is valid. - #[doc(hidden)] - pub fn new_unchecked(block: Block, file: &'static str, line: u32) -> Self { - CheckedBlock { - inner: block, - file_line: Some((file, line)), - } - } - - /// Extract the timestamp from the block. - pub fn timestamp(&self) -> ::primitives::Timestamp { - let x = self.inner.extrinsics.get(TIMESTAMP_SET_POSITION as usize).and_then(|xt| match xt.function { - Call::Timestamp(TimestampCall::set(x)) => Some(x), - _ => None - }); - - match x { - Some(x) => x, - None => panic!("Invalid polkadot block asserted at {:?}", self.file_line), - } - } - - /// Extract the parachain heads from the block. - pub fn parachain_heads(&self) -> &[CandidateReceipt] { - let x = self.inner.extrinsics.get(PARACHAINS_SET_POSITION as usize).and_then(|xt| match xt.function { - Call::Parachains(ParachainsCall::set_heads(ref x)) => Some(&x[..]), - _ => None - }); - - match x { - Some(x) => x, - None => panic!("Invalid polkadot block asserted at {:?}", self.file_line), - } - } - - /// Extract the noted missed proposal validator indices (if any) from the block. - pub fn noted_offline(&self) -> &[u32] { - self.inner.extrinsics.get(NOTE_OFFLINE_POSITION as usize).and_then(|xt| match xt.function { - Call::Consensus(ConsensusCall::note_offline(ref x)) => Some(&x[..]), - _ => None, - }).unwrap_or(&[]) - } - - /// Convert into inner block. - pub fn into_inner(self) -> Block { self.inner } -} - -impl ::std::ops::Deref for CheckedBlock { - type Target = Block; - - fn deref(&self) -> &Block { &self.inner } -} - -/// Assert that a block is structurally valid. May lead to panic in the future -/// in case it isn't. -#[macro_export] -macro_rules! assert_polkadot_block { - ($block: expr) => { - $crate::CheckedBlock::new_unchecked($block, file!(), line!()) - } -} diff --git a/polkadot/runtime/src/lib.rs b/polkadot/runtime/src/lib.rs index 02e85b3894..133ce258da 100644 --- a/polkadot/runtime/src/lib.rs +++ b/polkadot/runtime/src/lib.rs @@ -17,39 +17,28 @@ //! The Polkadot runtime. This can be compiled with ``#[no_std]`, ready for Wasm. #![cfg_attr(not(feature = "std"), no_std)] - -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; - -#[cfg(feature = "std")] -extern crate serde; +// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. +#![recursion_limit="256"] #[macro_use] -extern crate sr_io as runtime_io; - -#[macro_use] -extern crate srml_support; - -#[macro_use] -extern crate sr_primitives as runtime_primitives; - -#[cfg(test)] -#[macro_use] -extern crate hex_literal; - -#[cfg(test)] -extern crate substrate_serializer; +extern crate parity_codec_derive; +extern crate parity_codec as codec; extern crate substrate_primitives; +#[macro_use] +extern crate substrate_client as client; #[macro_use] extern crate sr_std as rstd; +#[cfg(test)] +extern crate sr_io; #[macro_use] -extern crate parity_codec_derive; +extern crate sr_version as version; +#[macro_use] +extern crate sr_primitives; -extern crate polkadot_primitives as primitives; -extern crate parity_codec as codec; +#[macro_use] +extern crate srml_support; extern crate srml_balances as balances; extern crate srml_consensus as consensus; extern crate srml_council as council; @@ -60,69 +49,78 @@ extern crate srml_staking as staking; extern crate srml_system as system; extern crate srml_timestamp as timestamp; extern crate srml_treasury as treasury; -#[macro_use] -extern crate sr_version as version; -#[cfg(feature = "std")] -mod checked_block; +extern crate polkadot_primitives as primitives; + mod parachains; -mod utils; #[cfg(feature = "std")] -pub use checked_block::CheckedBlock; -pub use utils::{inherent_extrinsics, check_extrinsic}; -pub use balances::address::Address as RawAddress; - +use codec::{Encode, Decode}; use rstd::prelude::*; -use codec::{Encode, Decode, Input}; use substrate_primitives::u32_trait::{_2, _4}; -use primitives::{AccountId, AccountIndex, Balance, BlockNumber, Hash, Index, SessionKey, Signature}; -use runtime_primitives::{generic, traits::{Convert, BlakeTwo256, DigestItem}}; +use primitives::{ + AccountId, AccountIndex, Balance, BlockNumber, Hash, Index, SessionKey, Signature, + parachain, parachain::runtime::ParachainHost, parachain::id::PARACHAIN_HOST, +}; +#[cfg(feature = "std")] +use primitives::Block as GBlock; +use client::{block_builder::api::runtime::*, runtime_api::{runtime::*, id::*}}; +#[cfg(feature = "std")] +use client::runtime_api::ApiExt; +use sr_primitives::ApplyResult; +use sr_primitives::transaction_validity::TransactionValidity; +use sr_primitives::generic; +use sr_primitives::traits::{Convert, BlakeTwo256, Block as BlockT}; +#[cfg(feature = "std")] +use sr_primitives::traits::ApiRef; +#[cfg(feature = "std")] +use substrate_primitives::AuthorityId; use version::RuntimeVersion; use council::{motions as council_motions, voting as council_voting}; - #[cfg(feature = "std")] -pub use runtime_primitives::BuildStorage; +use council::seats as council_seats; +#[cfg(any(feature = "std", test))] +use version::NativeVersion; +use substrate_primitives::OpaqueMetadata; +#[cfg(any(feature = "std", test))] +pub use sr_primitives::BuildStorage; pub use consensus::Call as ConsensusCall; pub use timestamp::Call as TimestampCall; +pub use balances::Call as BalancesCall; pub use parachains::Call as ParachainsCall; +pub use sr_primitives::{Permill, Perbill}; +pub use timestamp::BlockPeriod; +pub use srml_support::{StorageValue, RuntimeMetadata}; -/// The position of the timestamp set extrinsic. -pub const TIMESTAMP_SET_POSITION: u32 = 0; -/// The position of the parachains set extrinsic. -pub const PARACHAINS_SET_POSITION: u32 = 1; -/// The position of the note_offline in the block, if it exists. -pub const NOTE_OFFLINE_POSITION: u32 = 2; +const TIMESTAMP_SET_POSITION: u32 = 0; +const NOTE_OFFLINE_POSITION: u32 = 1; +const PARACHAINS_SET_POSITION: u32 = 2; -/// Block header type as expected by this runtime. -pub type Header = generic::Header; -/// The address format for describing accounts. -pub type Address = balances::Address; -/// Block Id type for this block. -pub type BlockId = generic::BlockId; -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; -/// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; -/// Block type as expected by this runtime. -pub type Block = generic::Block; - -/// Runtime runtime type used to parameterize the various modules. -// Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted. -#[derive(Clone, Copy, PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] -pub struct Runtime; - -/// Polkadot runtime version. +/// Runtime version. pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: ver_str!("polkadot"), impl_name: ver_str!("parity-polkadot"), authoring_version: 1, spec_version: 101, impl_version: 0, + apis: apis_vec!([ + (BLOCK_BUILDER, 1), + (TAGGED_TRANSACTION_QUEUE, 1), + (METADATA, 1), + (PARACHAIN_HOST, 1), + ]), }; +/// Native version. +#[cfg(any(feature = "std", test))] +pub fn native_version() -> NativeVersion { + NativeVersion { + runtime_version: VERSION, + can_author_with: Default::default(), + } +} + impl system::Trait for Runtime { type Origin = Origin; type Index = Index; @@ -131,11 +129,10 @@ impl system::Trait for Runtime { type Hashing = BlakeTwo256; type Digest = generic::Digest; type AccountId = AccountId; - type Header = Header; + type Header = generic::Header; type Event = Event; + type Log = Log; } -/// System module for this concrete runtime. -pub type System = system::Module; impl balances::Trait for Runtime { type Balance = Balance; @@ -144,8 +141,6 @@ impl balances::Trait for Runtime { type EnsureAccountLiquid = Staking; type Event = Event; } -/// Staking module for this concrete runtime. -pub type Balances = balances::Module; impl consensus::Trait for Runtime { const NOTE_OFFLINE_POSITION: u32 = NOTE_OFFLINE_POSITION; @@ -153,21 +148,17 @@ impl consensus::Trait for Runtime { type SessionKey = SessionKey; type OnOfflineValidator = Staking; } -/// Consensus module for this concrete runtime. -pub type Consensus = consensus::Module; impl timestamp::Trait for Runtime { const TIMESTAMP_SET_POSITION: u32 = TIMESTAMP_SET_POSITION; type Moment = u64; } -/// Timestamp module for this concrete runtime. -pub type Timestamp = timestamp::Module; /// Session key conversion. pub struct SessionKeyConversion; impl Convert for SessionKeyConversion { fn convert(a: AccountId) -> SessionKey { - a.0.into() + a.to_fixed_bytes().into() } } @@ -176,297 +167,316 @@ impl session::Trait for Runtime { type OnSessionChange = Staking; type Event = Event; } -/// Session module for this concrete runtime. -pub type Session = session::Module; impl staking::Trait for Runtime { type OnRewardMinted = Treasury; type Event = Event; } -/// Staking module for this concrete runtime. -pub type Staking = staking::Module; impl democracy::Trait for Runtime { type Proposal = Call; type Event = Event; } -/// Democracy module for this concrete runtime. -pub type Democracy = democracy::Module; impl council::Trait for Runtime { type Event = Event; } -/// Council module for this concrete runtime. -pub type Council = council::Module; - impl council::voting::Trait for Runtime { type Event = Event; } -/// Council voting module for this concrete runtime. -pub type CouncilVoting = council::voting::Module; - impl council::motions::Trait for Runtime { type Origin = Origin; type Proposal = Call; type Event = Event; } -/// Council motions module for this concrete runtime. -pub type CouncilMotions = council_motions::Module; - impl treasury::Trait for Runtime { type ApproveOrigin = council_motions::EnsureMembers<_4>; type RejectOrigin = council_motions::EnsureMembers<_2>; type Event = Event; } -/// Treasury module for this concrete runtime. -pub type Treasury = treasury::Module; - impl parachains::Trait for Runtime { const SET_POSITION: u32 = PARACHAINS_SET_POSITION; } -pub type Parachains = parachains::Module; -impl_outer_event! { - pub enum Event for Runtime { - //consensus, - balances, - //timetstamp, - session, - staking, - democracy, - council, - council_voting, - council_motions, - treasury +construct_runtime!( + pub enum Runtime with Log(InternalLog: DigestItem) where + Block = Block, + UncheckedExtrinsic = UncheckedExtrinsic + { + System: system::{default, Log(ChangesTrieRoot)}, + Timestamp: timestamp::{Module, Call, Storage, Config, Inherent}, + Consensus: consensus::{Module, Call, Storage, Config, Log(AuthoritiesChange), Inherent}, + Balances: balances, + Session: session, + Staking: staking, + Democracy: democracy, + Council: council::{Module, Call, Storage, Event}, + CouncilVoting: council_voting, + CouncilMotions: council_motions::{Module, Call, Storage, Event, Origin}, + CouncilSeats: council_seats::{Config}, + Treasury: treasury, + Parachains: parachains::{Module, Call, Storage, Config, Inherent}, } -} - -impl_outer_log! { - pub enum Log(InternalLog: DigestItem) for Runtime { - consensus(AuthoritiesChange) - } -} - -impl_outer_origin! { - pub enum Origin for Runtime { - council_motions - } -} - -impl_outer_dispatch! { - /// Call type for polkadot transactions. - pub enum Call where origin: ::Origin { - Consensus, - Balances, - Session, - Staking, - Timestamp, - Democracy, - Council, - CouncilVoting, - CouncilMotions, - Parachains, - Treasury, - } -} - -impl_outer_config! { - pub struct GenesisConfig for Runtime { - ConsensusConfig => consensus, - SystemConfig => system, - BalancesConfig => balances, - SessionConfig => session, - StakingConfig => staking, - DemocracyConfig => democracy, - CouncilConfig => council, - TimestampConfig => timestamp, - TreasuryConfig => treasury, - ParachainsConfig => parachains, - } -} - -type AllModules = ( - Consensus, - Balances, - Session, - Staking, - Timestamp, - Democracy, - Council, - CouncilVoting, - CouncilMotions, - Parachains, - Treasury, ); -impl_json_metadata!( - for Runtime with modules - system::Module with Storage, - consensus::Module with Storage, - balances::Module with Storage, - timestamp::Module with Storage, - session::Module with Storage, - staking::Module with Storage, - democracy::Module with Storage, - council::Module with Storage, - council_voting::Module with Storage, - council_motions::Module with Storage, - treasury::Module with Storage, - parachains::Module with Storage, -); +/// The address format for describing accounts. +pub use balances::address::Address as RawAddress; +/// The address format for describing accounts. +pub type Address = balances::Address; +/// Block header type as expected by this runtime. +pub type Header = generic::Header; +/// Block type as expected by this runtime. +pub type Block = generic::Block; +/// A Block signed with a Justification +pub type SignedBlock = generic::SignedBlock; +/// BlockId type as expected by this runtime. +pub type BlockId = generic::BlockId; +/// Unchecked extrinsic type as expected by this runtime. +pub type UncheckedExtrinsic = generic::UncheckedMortalExtrinsic; +/// Extrinsic type that has already been checked. +pub type CheckedExtrinsic = generic::CheckedExtrinsic; +/// Executive: handles dispatch to the various modules. +pub type Executive = executive::Executive, Balances, AllModules>; -impl DigestItem for Log { - type AuthorityId = SessionKey; +#[cfg(feature = "std")] +pub struct ClientWithApi { + call: ::std::ptr::NonNull>, + commit_on_success: ::std::cell::RefCell, + initialised_block: ::std::cell::RefCell>, + changes: ::std::cell::RefCell, +} - fn as_authorities_change(&self) -> Option<&[Self::AuthorityId]> { - match self.0 { - InternalLog::consensus(ref item) => item.as_authorities_change(), +#[cfg(feature = "std")] +unsafe impl Send for ClientWithApi {} +#[cfg(feature = "std")] +unsafe impl Sync for ClientWithApi {} + +#[cfg(feature = "std")] +impl ApiExt for ClientWithApi { + fn map_api_result Result, R, E>(&self, map_call: F) -> Result { + *self.commit_on_success.borrow_mut() = false; + let res = map_call(self); + *self.commit_on_success.borrow_mut() = true; + + self.commit_on_ok(&res); + + res + } +} + +#[cfg(feature = "std")] +impl client::runtime_api::ConstructRuntimeApi for ClientWithApi { + fn construct_runtime_api<'a, T: client::runtime_api::CallApiAt>(call: &'a T) -> ApiRef<'a, Self> { + ClientWithApi { + call: unsafe { + ::std::ptr::NonNull::new_unchecked( + ::std::mem::transmute( + call as &client::runtime_api::CallApiAt + ) + ) + }, + commit_on_success: true.into(), + initialised_block: None.into(), + changes: Default::default(), + }.into() + } +} + +#[cfg(feature = "std")] +impl ClientWithApi { + fn call_api_at( + &self, + at: &GBlockId, + function: &'static str, + args: &A + ) -> client::error::Result { + let res = unsafe { + self.call.as_ref().call_api_at( + at, + function, + args.encode(), + &mut *self.changes.borrow_mut(), + &mut *self.initialised_block.borrow_mut() + ).and_then(|r| + R::decode(&mut &r[..]) + .ok_or_else(|| + client::error::ErrorKind::CallResultDecode(function).into() + ) + ) + }; + + self.commit_on_ok(&res); + res + } + + fn commit_on_ok(&self, res: &Result) { + if *self.commit_on_success.borrow() { + if res.is_err() { + self.changes.borrow_mut().discard_prospective(); + } else { + self.changes.borrow_mut().commit_prospective(); + } } } } -/// Executive: handles dispatch to the various modules. -pub type Executive = executive::Executive; +#[cfg(feature = "std")] +type GBlockId = generic::BlockId; -pub mod api { - impl_stubs!( - version => |()| super::VERSION, - json_metadata => |()| super::Runtime::json_metadata(), - authorities => |()| super::Consensus::authorities(), - initialise_block => |header| super::Executive::initialise_block(&header), - apply_extrinsic => |extrinsic| super::Executive::apply_extrinsic(extrinsic), - execute_block => |block| super::Executive::execute_block(block), - finalise_block => |()| super::Executive::finalise_block(), - inherent_extrinsics => |(inherent, spec_version)| super::inherent_extrinsics(inherent, spec_version), - validator_count => |()| super::Session::validator_count(), - validators => |()| super::Session::validators(), - timestamp => |()| super::Timestamp::get(), - random_seed => |()| super::System::random_seed(), - account_nonce => |account| super::System::account_nonce(&account), - lookup_address => |address| super::Balances::lookup_address(address), - duty_roster => |()| super::Parachains::calculate_duty_roster(), - active_parachains => |()| super::Parachains::active_parachains(), - parachain_head => |id| super::Parachains::parachain_head(&id), - parachain_code => |id| super::Parachains::parachain_code(&id) - ); -} - -#[cfg(test)] -mod tests { - use super::*; - use substrate_primitives as primitives; - use codec::{Encode, Decode}; - use substrate_primitives::hexdisplay::HexDisplay; - use substrate_serializer as ser; - use runtime_primitives::traits::Header as HeaderT; - type Digest = generic::Digest; - - #[test] - fn test_header_serialization() { - let header = Header { - parent_hash: 5.into(), - number: 67, - state_root: 3.into(), - extrinsics_root: 6.into(), - digest: Digest::default(), - }; - - assert_eq!(ser::to_string_pretty(&header), r#"{ - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000005", - "number": 67, - "stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000003", - "extrinsicsRoot": "0x0000000000000000000000000000000000000000000000000000000000000006", - "digest": { - "logs": [] - } -}"#); - - let v = header.encode(); - assert_eq!(Header::decode(&mut &v[..]).unwrap(), header); +#[cfg(feature = "std")] +impl client::runtime_api::Core for ClientWithApi { + fn version(&self, at: &GBlockId) -> Result { + self.call_api_at(at, "version", &()) } - #[test] - fn block_encoding_round_trip() { - let mut block = Block { - header: Header::new(1, Default::default(), Default::default(), Default::default(), Default::default()), - extrinsics: vec![ - UncheckedExtrinsic::new_unsigned( - Default::default(), - Call::Timestamp(timestamp::Call::set(100_000_000)) - ) - ], - }; - - let raw = block.encode(); - let decoded = Block::decode(&mut &raw[..]).unwrap(); - - assert_eq!(block, decoded); - - block.extrinsics.push(UncheckedExtrinsic::new_unsigned( - 10101, - Call::Staking(staking::Call::stake()) - )); - - let raw = block.encode(); - let decoded = Block::decode(&mut &raw[..]).unwrap(); - - assert_eq!(block, decoded); + fn authorities(&self, at: &GBlockId) -> Result, client::error::Error> { + self.call_api_at(at, "authorities", &()) } - #[test] - fn block_encoding_substrate_round_trip() { - let mut block = Block { - header: Header::new(1, Default::default(), Default::default(), Default::default(), Default::default()), - extrinsics: vec![ - UncheckedExtrinsic::new_unsigned( - Default::default(), - Call::Timestamp(timestamp::Call::set(100_000_000)) - ) - ], - }; - - block.extrinsics.push(UncheckedExtrinsic::new_unsigned( - 10101, - Call::Staking(staking::Call::stake()) - )); - - let raw = block.encode(); - let decoded_primitive = ::primitives::Block::decode(&mut &raw[..]).unwrap(); - let encoded_primitive = decoded_primitive.encode(); - let decoded = Block::decode(&mut &encoded_primitive[..]).unwrap(); - - assert_eq!(block, decoded); + fn execute_block(&self, at: &GBlockId, block: &GBlock) -> Result<(), client::error::Error> { + self.call_api_at(at, "execute_block", block) } - #[test] - fn serialize_unchecked() { - let tx = UncheckedExtrinsic::new_signed( - 999, - Call::Timestamp(TimestampCall::set(135135)), - AccountId::from([1; 32]).into(), - runtime_primitives::Ed25519Signature(primitives::hash::H512([0; 64])).into() - ); - - // 6f000000 - // ff0101010101010101010101010101010101010101010101010101010101010101 - // e7030000 - // 0300 - // df0f0200 - // 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - - let v = Encode::encode(&tx); - assert_eq!(&v[..], &hex!["7000000001ff010101010101010101010101010101010101010101010101010101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e70300000400df0f020000000000"][..]); - println!("{}", HexDisplay::from(&v)); - assert_eq!(UncheckedExtrinsic::decode(&mut &v[..]).unwrap(), tx); - } - - #[test] - fn parachain_calls_are_privcall() { - let _register = Call::Parachains(parachains::Call::register_parachain(0.into(), vec![1, 2, 3], vec![])); - let _deregister = Call::Parachains(parachains::Call::deregister_parachain(0.into())); + fn initialise_block(&self, at: &GBlockId, header: &::Header) -> Result<(), client::error::Error> { + self.call_api_at(at, "initialise_block", header) } } + +#[cfg(feature = "std")] +impl client::block_builder::api::BlockBuilder for ClientWithApi { + fn apply_extrinsic(&self, at: &GBlockId, extrinsic: &::Extrinsic) -> Result { + self.call_api_at(at, "apply_extrinsic", extrinsic) + } + + fn finalise_block(&self, at: &GBlockId) -> Result<::Header, client::error::Error> { + self.call_api_at(at, "finalise_block", &()) + } + + fn inherent_extrinsics( + &self, at: &GBlockId, inherent: &Inherent + ) -> Result, client::error::Error> { + self.call_api_at(at, "inherent_extrinsics", inherent) + } + + fn check_inherents(&self, at: &GBlockId, block: &GBlock, inherent: &Inherent) -> Result, client::error::Error> { + self.call_api_at(at, "check_inherents", &(block, inherent)) + } + + fn random_seed(&self, at: &GBlockId) -> Result<::Hash, client::error::Error> { + self.call_api_at(at, "random_seed", &()) + } +} + +#[cfg(feature = "std")] +impl client::runtime_api::TaggedTransactionQueue for ClientWithApi { + fn validate_transaction( + &self, + at: &GBlockId, + utx: &::Extrinsic + ) -> Result { + self.call_api_at(at, "validate_transaction", utx) + } +} + +#[cfg(feature = "std")] +impl client::runtime_api::Metadata for ClientWithApi { + fn metadata(&self, at: &GBlockId) -> Result { + self.call_api_at(at, "metadata", &()) + } +} + +#[cfg(feature = "std")] +impl ::primitives::parachain::ParachainHost for ClientWithApi { + fn validators(&self, at: &GBlockId) -> Result, client::error::Error> { + self.call_api_at(at, "validators", &()) + } + fn duty_roster(&self, at: &GBlockId) -> Result { + self.call_api_at(at, "calculate_duty_roster", &()) + } + fn active_parachains(&self, at: &GBlockId) -> Result, client::error::Error> { + self.call_api_at(at, "active_parachains", &()) + } + fn parachain_head(&self, at: &GBlockId, id: ¶chain::Id) -> Result>, client::error::Error> { + self.call_api_at(at, "parachain_head", &id) + } + fn parachain_code(&self, at: &GBlockId, id: ¶chain::Id) -> Result>, client::error::Error> { + self.call_api_at(at, "parachain_code", &id) + } +} + +impl_runtime_apis! { + impl Core for Runtime { + fn version() -> RuntimeVersion { + VERSION + } + + fn authorities() -> Vec { + Consensus::authorities() + } + + fn execute_block(block: Block) { + Executive::execute_block(block) + } + + fn initialise_block(header: ::Header) { + Executive::initialise_block(&header) + } + } + + impl Metadata for Runtime { + fn metadata() -> OpaqueMetadata { + Runtime::metadata().into() + } + } + + impl BlockBuilder for Runtime { + fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyResult { + Executive::apply_extrinsic(extrinsic) + } + + fn finalise_block() -> ::Header { + Executive::finalise_block() + } + + fn inherent_extrinsics(data: InherentData) -> Vec { + data.create_inherent_extrinsics() + } + + fn check_inherents(block: Block, data: InherentData) -> Result<(), InherentError> { + data.check_inherents(block) + } + + fn random_seed() -> ::Hash { + System::random_seed() + } + } + + impl TaggedTransactionQueue for Runtime { + fn validate_transaction(tx: ::Extrinsic) -> TransactionValidity { + Executive::validate_transaction(tx) + } + } + + impl ParachainHost for Runtime { + fn validators() -> Vec { + Session::validators() + } + fn duty_roster() -> parachain::DutyRoster { + Parachains::calculate_duty_roster() + } + fn active_parachains() -> Vec { + Parachains::active_parachains() + } + fn parachain_head(id: parachain::Id) -> Option> { + Parachains::parachain_head(&id) + } + fn parachain_code(id: parachain::Id) -> Option> { + Parachains::parachain_code(&id) + } + } +} + diff --git a/polkadot/runtime/src/parachains.rs b/polkadot/runtime/src/parachains.rs index f98942949a..0426ea7d5b 100644 --- a/polkadot/runtime/src/parachains.rs +++ b/polkadot/runtime/src/parachains.rs @@ -19,7 +19,8 @@ use rstd::prelude::*; use codec::Decode; -use runtime_primitives::traits::{Hash, BlakeTwo256, OnFinalise}; +use sr_primitives::{RuntimeString, traits::{Extrinsic, Block as BlockT, + Hash, BlakeTwo256, ProvideInherent}}; use primitives::parachain::{Id, Chain, DutyRoster, CandidateReceipt}; use {system, session}; @@ -27,43 +28,133 @@ use srml_support::{StorageValue, StorageMap}; use srml_support::dispatch::Result; #[cfg(any(feature = "std", test))] -use rstd::marker::PhantomData; +use sr_primitives::{self, ChildrenStorageMap}; -#[cfg(any(feature = "std", test))] -use runtime_primitives; +use system::ensure_inherent; -#[cfg(any(feature = "std", test))] -use std::collections::HashMap; - -use system::{ensure_root, ensure_inherent}; - -pub trait Trait: system::Trait + session::Trait { +pub trait Trait: session::Trait { /// The position of the set_heads call in the block. const SET_POSITION: u32; } +decl_storage! { + trait Store for Module as Parachains { + // Vector of all parachain IDs. + pub Parachains get(active_parachains): Vec; + // The parachains registered at present. + pub Code get(parachain_code): map Id => Option>; + // The heads of the parachains registered at present. these are kept sorted. + pub Heads get(parachain_head): map Id => Option>; + + // Did the parachain heads get updated in this block? + DidUpdate: bool; + } + add_extra_genesis { + config(parachains): Vec<(Id, Vec, Vec)>; + build(|storage: &mut sr_primitives::StorageMap, _: &mut ChildrenStorageMap, config: &GenesisConfig| { + use codec::Encode; + + let mut p = config.parachains.clone(); + p.sort_unstable_by_key(|&(ref id, _, _)| id.clone()); + p.dedup_by_key(|&mut (ref id, _, _)| id.clone()); + + let only_ids: Vec<_> = p.iter().map(|&(ref id, _, _)| id).cloned().collect(); + + storage.insert(GenesisConfig::::hash(>::key()).to_vec(), only_ids.encode()); + + for (id, code, genesis) in p { + let code_key = GenesisConfig::::hash(&>::key_for(&id)).to_vec(); + let head_key = GenesisConfig::::hash(&>::key_for(&id)).to_vec(); + + storage.insert(code_key, code.encode()); + storage.insert(head_key, genesis.encode()); + } + }); + } +} + decl_module! { /// Parachains module. pub struct Module for enum Call where origin: T::Origin { /// Provide candidate receipts for parachains, in ascending order by id. - fn set_heads(origin, heads: Vec) -> Result; + fn set_heads(origin, heads: Vec) -> Result { + ensure_inherent(origin)?; + ensure!(!>::exists(), "Parachain heads must be updated only once in the block"); + ensure!( + >::extrinsic_index() == Some(T::SET_POSITION), + "Parachain heads update extrinsic must be at position {} in the block" + // , T::SET_POSITION + ); - fn register_parachain(origin, id: Id, code: Vec, initial_head_data: Vec) -> Result; - fn deregister_parachain(origin, id: Id) -> Result; - } -} + let active_parachains = Self::active_parachains(); -decl_storage! { - trait Store for Module as Parachains { - // Vector of all parachain IDs. - pub Parachains get(active_parachains): default Vec; - // The parachains registered at present. - pub Code get(parachain_code): map [ Id => Vec ]; - // The heads of the parachains registered at present. these are kept sorted. - pub Heads get(parachain_head): map [ Id => Vec ]; + // perform integrity checks before writing to storage. + { + let n_parachains = active_parachains.len(); + ensure!(heads.len() <= n_parachains, "Too many parachain candidates"); - // Did the parachain heads get updated in this block? - DidUpdate: default bool; + let mut last_id = None; + let mut iter = active_parachains.iter(); + for head in &heads { + // proposed heads must be ascending order by parachain ID without duplicate. + ensure!( + last_id.as_ref().map_or(true, |x| x < &head.parachain_index), + "Parachain candidates out of order by ID" + ); + + // must be unknown since active parachains are always sorted. + ensure!( + iter.find(|x| x == &&head.parachain_index).is_some(), + "Submitted candidate for unregistered or out-of-order parachain {}" + ); + + last_id = Some(head.parachain_index); + } + } + + for head in heads { + let id = head.parachain_index.clone(); + >::insert(id, head.head_data.0); + } + + >::put(true); + + Ok(()) + } + + /// Register a parachain with given code. + /// Fails if given ID is already used. + pub fn register_parachain(id: Id, code: Vec, initial_head_data: Vec) -> Result { + let mut parachains = Self::active_parachains(); + match parachains.binary_search(&id) { + Ok(_) => fail!("Parachain already exists"), + Err(idx) => parachains.insert(idx, id), + } + + >::insert(id, code); + >::put(parachains); + >::insert(id, initial_head_data); + + Ok(()) + } + + /// Deregister a parachain with given id + pub fn deregister_parachain(id: Id) -> Result { + let mut parachains = Self::active_parachains(); + match parachains.binary_search(&id) { + Ok(idx) => { parachains.remove(idx); } + Err(_) => {} + } + + >::remove(id); + >::remove(id); + >::put(parachains); + Ok(()) + } + + fn on_finalise(_n: T::BlockNumber) { + assert!(::DidUpdate::take(), "Parachain heads must be updated once in the block"); + } } } @@ -85,7 +176,7 @@ impl Module { let mut roles_gua = roles_val.clone(); - let mut random_seed = system::Module::::random_seed().to_vec(); + let mut random_seed = system::Module::::random_seed().as_ref().to_vec(); random_seed.extend(b"validator_role_pairs"); let mut seed = BlakeTwo256::hash(&random_seed); @@ -103,7 +194,7 @@ impl Module { if offset == 24 { // into the last 8 bytes - rehash to gather new entropy - seed = BlakeTwo256::hash(&seed); + seed = BlakeTwo256::hash(seed.as_ref()); } // exchange last item with randomly chosen first. @@ -117,134 +208,60 @@ impl Module { } } - /// Register a parachain with given code. - /// Fails if given ID is already used. - pub fn register_parachain(origin: T::Origin, id: Id, code: Vec, initial_head_data: Vec) -> Result { - ensure_root(origin)?; - let mut parachains = Self::active_parachains(); - match parachains.binary_search(&id) { - Ok(_) => fail!("Parachain already exists"), - Err(idx) => parachains.insert(idx, id), - } +/* + // TODO: Consider integrating if needed. + /// Extract the parachain heads from the block. + pub fn parachain_heads(&self) -> &[CandidateReceipt] { + let x = self.inner.extrinsics.get(PARACHAINS_SET_POSITION as usize).and_then(|xt| match xt.function { + Call::Parachains(ParachainsCall::set_heads(ref x)) => Some(&x[..]), + _ => None + }); - >::insert(id, code); - >::put(parachains); - >::insert(id, initial_head_data); + match x { + Some(x) => x, + None => panic!("Invalid polkadot block asserted at {:?}", self.file_line), + } + } +*/ +} + +impl ProvideInherent for Module { + type Inherent = Vec; + type Call = Call; + type Error = RuntimeString; + + fn create_inherent_extrinsics(data: Self::Inherent) -> Vec<(u32, Self::Call)> { + vec![(T::SET_POSITION, Call::set_heads(data))] + } + + fn check_inherent Option<&Self::Call>>( + block: &Block, _data: Self::Inherent, extract_function: &F + ) -> ::rstd::result::Result<(), Self::Error> { + let has_heads = block + .extrinsics() + .get(T::SET_POSITION as usize) + .map_or(false, |xt| { + xt.is_signed() == Some(true) && match extract_function(&xt) { + Some(Call::set_heads(_)) => true, + _ => false, + } + }); + + if !has_heads { return Err("No valid parachains inherent in block".into()) } Ok(()) } - - /// Deregister a parachain with given id - pub fn deregister_parachain(origin: T::Origin, id: Id) -> Result { - ensure_root(origin)?; - let mut parachains = Self::active_parachains(); - match parachains.binary_search(&id) { - Ok(idx) => { parachains.remove(idx); } - Err(_) => {} - } - - >::remove(id); - >::remove(id); - >::put(parachains); - Ok(()) - } - - fn set_heads(origin: T::Origin, heads: Vec) -> Result { - ensure_inherent(origin)?; - ensure!(!>::exists(), "Parachain heads must be updated only once in the block"); - ensure!( - >::extrinsic_index() == Some(T::SET_POSITION), - "Parachain heads update extrinsic must be at position {} in the block" -// , T::SET_POSITION - ); - - let active_parachains = Self::active_parachains(); - let mut iter = active_parachains.iter(); - - // perform this check before writing to storage. - for head in &heads { - ensure!( - iter.find(|&p| p == &head.parachain_index).is_some(), - "Submitted candidate for unregistered or out-of-order parachain {}" -// , head.parachain_index.into_inner() - ); - } - - for head in heads { - let id = head.parachain_index.clone(); - >::insert(id, head.head_data.0); - } - - >::put(true); - - Ok(()) - } -} - -impl OnFinalise for Module { - fn on_finalise(_n: T::BlockNumber) { - assert!(::DidUpdate::take(), "Parachain heads must be updated once in the block"); - } -} - -/// Parachains module genesis configuration. -#[cfg(any(feature = "std", test))] -#[derive(Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -#[serde(deny_unknown_fields)] -pub struct GenesisConfig { - /// The initial parachains, mapped to code and initial head data - pub parachains: Vec<(Id, Vec, Vec)>, - /// Phantom data. - #[serde(skip)] - pub phantom: PhantomData, -} - -#[cfg(any(feature = "std", test))] -impl Default for GenesisConfig { - fn default() -> Self { - GenesisConfig { - parachains: Vec::new(), - phantom: PhantomData, - } - } -} - -#[cfg(any(feature = "std", test))] -impl runtime_primitives::BuildStorage for GenesisConfig -{ - fn build_storage(mut self) -> ::std::result::Result, Vec>, String> { - use codec::Encode; - - self.parachains.sort_unstable_by_key(|&(ref id, _, _)| id.clone()); - self.parachains.dedup_by_key(|&mut (ref id, _, _)| id.clone()); - - let only_ids: Vec<_> = self.parachains.iter().map(|&(ref id, _, _)| id).cloned().collect(); - - let mut map: HashMap<_, _> = map![ - Self::hash(>::key()).to_vec() => only_ids.encode() - ]; - - for (id, code, genesis) in self.parachains { - let code_key = Self::hash(&>::key_for(&id)).to_vec(); - let head_key = Self::hash(&>::key_for(&id)).to_vec(); - - map.insert(code_key, code.encode()); - map.insert(head_key, genesis.encode()); - } - - Ok(map) - } } #[cfg(test)] mod tests { use super::*; - use runtime_io::{TestExternalities, with_externalities}; + use rstd::marker::PhantomData; + use sr_io::{TestExternalities, with_externalities}; use substrate_primitives::{H256, Blake2Hasher}; - use runtime_primitives::BuildStorage; - use runtime_primitives::traits::{Identity, BlakeTwo256}; - use runtime_primitives::testing::{Digest, Header}; + use sr_primitives::BuildStorage; + use sr_primitives::traits::{Identity, BlakeTwo256}; + use sr_primitives::testing::{Digest, Header, DigestItem}; use {consensus, timestamp}; impl_outer_origin! { @@ -257,7 +274,7 @@ mod tests { const NOTE_OFFLINE_POSITION: u32 = 1; type SessionKey = u64; type OnOfflineValidator = (); - type Log = u64; + type Log = DigestItem; } impl system::Trait for Test { type Origin = Origin; @@ -269,6 +286,7 @@ mod tests { type AccountId = u64; type Header = Header; type Event = (); + type Log = DigestItem; } impl session::Trait for Test { type ConvertAccountIdToSessionKey = Identity; @@ -286,19 +304,21 @@ mod tests { type Parachains = Module; fn new_test_ext(parachains: Vec<(Id, Vec, Vec)>) -> TestExternalities { - let mut t = system::GenesisConfig::::default().build_storage().unwrap(); + let mut t = system::GenesisConfig::::default().build_storage().unwrap().0; t.extend(consensus::GenesisConfig::{ code: vec![], authorities: vec![1, 2, 3], - }.build_storage().unwrap()); + _genesis_phantom_data: PhantomData, + }.build_storage().unwrap().0); t.extend(session::GenesisConfig::{ session_length: 1000, validators: vec![1, 2, 3, 4, 5, 6, 7, 8], - }.build_storage().unwrap()); + _genesis_phantom_data: PhantomData, + }.build_storage().unwrap().0); t.extend(GenesisConfig::{ parachains: parachains, - phantom: PhantomData, - }.build_storage().unwrap()); + _genesis_phantom_data: PhantomData, + }.build_storage().unwrap().0); t.into() } @@ -329,12 +349,12 @@ mod tests { assert_eq!(Parachains::parachain_code(&5u32.into()), Some(vec![1,2,3])); assert_eq!(Parachains::parachain_code(&100u32.into()), Some(vec![4,5,6])); - assert_ok!(Parachains::register_parachain(Origin::ROOT, 99u32.into(), vec![7,8,9], vec![1, 1, 1])); + assert_ok!(Parachains::register_parachain(99u32.into(), vec![7,8,9], vec![1, 1, 1])); assert_eq!(Parachains::active_parachains(), vec![5u32.into(), 99u32.into(), 100u32.into()]); assert_eq!(Parachains::parachain_code(&99u32.into()), Some(vec![7,8,9])); - assert_ok!(Parachains::deregister_parachain(Origin::ROOT, 5u32.into())); + assert_ok!(Parachains::deregister_parachain(5u32.into())); assert_eq!(Parachains::active_parachains(), vec![99u32.into(), 100u32.into()]); assert_eq!(Parachains::parachain_code(&5u32.into()), None); diff --git a/polkadot/runtime/src/utils.rs b/polkadot/runtime/src/utils.rs deleted file mode 100644 index 1bb23f2c7b..0000000000 --- a/polkadot/runtime/src/utils.rs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2017 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 . - -//! Utils for block interaction. - -use rstd::prelude::*; -use super::{Call, UncheckedExtrinsic, Balances}; -use runtime_primitives::traits::{Checkable, Lookup}; -use timestamp::Call as TimestampCall; -use parachains::Call as ParachainsCall; -use consensus::Call as ConsensusCall; - -/// Produces the list of inherent extrinsics. -pub fn inherent_extrinsics(data: ::primitives::InherentData, spec_version: u32) -> Vec { - let make_inherent = |function| UncheckedExtrinsic::new_unsigned(0, function); - - let mut inherent = vec![ - make_inherent(Call::Timestamp(TimestampCall::set(data.timestamp))), - make_inherent(Call::Parachains(ParachainsCall::set_heads(data.parachain_heads))), - ]; - - if !data.offline_indices.is_empty() && spec_version == 5 { - inherent.push(make_inherent( - Call::Consensus(ConsensusCall::note_offline(data.offline_indices)) - )); - } - - inherent -} - -/// Checks an unchecked extrinsic for validity. -pub fn check_extrinsic(xt: UncheckedExtrinsic) -> bool { - xt.check_with(Balances::lookup).is_ok() -} diff --git a/polkadot/runtime/wasm/Cargo.lock b/polkadot/runtime/wasm/Cargo.lock index c8f40fcbf6..5f6afdfae8 100644 --- a/polkadot/runtime/wasm/Cargo.lock +++ b/polkadot/runtime/wasm/Cargo.lock @@ -3,12 +3,12 @@ name = "arrayvec" version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "byteorder" -version = "1.2.6" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -17,14 +17,30 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "fixed-hash" -version = "0.2.2" +name = "crunchy" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] -name = "hashdb" -version = "0.2.1" +name = "fixed-hash" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hash-db" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#2616db2a2529098949e5d39aa06dd4e502a9e5f7" + +[[package]] +name = "hash256-std-hasher" +version = "0.9.0" +source = "git+https://github.com/paritytech/trie#2616db2a2529098949e5d39aa06dd4e502a9e5f7" +dependencies = [ + "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "hex-literal" @@ -32,7 +48,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -40,7 +56,7 @@ name = "hex-literal-impl" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -48,51 +64,68 @@ name = "integer-sqrt" version = "0.1.0" source = "git+https://github.com/paritytech/integer-sqrt-rs.git#886e9cb983c46498003878afe965d55caa762025" +[[package]] +name = "integer-sqrt" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "mashup" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "mashup-impl 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "mashup-impl" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "nodrop" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "num-traits" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "parity-codec" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +version = "2.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "parity-codec-derive" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" -dependencies = [ - "proc-macro2 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "plain_hasher" -version = "0.2.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "polkadot-primitives" version = "0.1.0" dependencies = [ - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", ] @@ -101,8 +134,8 @@ name = "polkadot-runtime" version = "0.1.0" dependencies = [ "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -120,50 +153,37 @@ dependencies = [ "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-timestamp 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-treasury 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", ] [[package]] name = "proc-macro-hack" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "proc-macro-hack-impl" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "proc-macro2" -version = "0.4.15" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "pwasm-alloc" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" -dependencies = [ - "pwasm-libc 0.1.0 (git+https://github.com/paritytech/substrate)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "pwasm-libc" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" - [[package]] name = "quote" -version = "0.6.8" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -202,16 +222,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.75" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "sr-io" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -220,24 +240,12 @@ dependencies = [ [[package]] name = "sr-primitives" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ - "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", - "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", - "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", - "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", -] - -[[package]] -name = "sr-sandbox" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" -dependencies = [ - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "integer-sqrt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -246,34 +254,33 @@ dependencies = [ [[package]] name = "sr-std" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ - "pwasm-alloc 0.1.0 (git+https://github.com/paritytech/substrate)", - "pwasm-libc 0.1.0 (git+https://github.com/paritytech/substrate)", "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "sr-version" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", ] [[package]] name = "srml-balances" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -285,12 +292,12 @@ dependencies = [ [[package]] name = "srml-consensus" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -302,19 +309,17 @@ dependencies = [ [[package]] name = "srml-council" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-balances 0.1.0 (git+https://github.com/paritytech/substrate)", - "srml-consensus 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-democracy 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -324,18 +329,17 @@ dependencies = [ [[package]] name = "srml-democracy" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-balances 0.1.0 (git+https://github.com/paritytech/substrate)", - "srml-consensus 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-support 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -344,11 +348,12 @@ dependencies = [ [[package]] name = "srml-executive" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -356,16 +361,27 @@ dependencies = [ "srml-system 0.1.0 (git+https://github.com/paritytech/substrate)", ] +[[package]] +name = "srml-metadata" +version = "0.1.0" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" +dependencies = [ + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", +] + [[package]] name = "srml-session" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -379,16 +395,15 @@ dependencies = [ [[package]] name = "srml-staking" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", - "sr-sandbox 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-balances 0.1.0 (git+https://github.com/paritytech/substrate)", "srml-consensus 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -402,26 +417,27 @@ dependencies = [ [[package]] name = "srml-support" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "mashup 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-metadata 0.1.0 (git+https://github.com/paritytech/substrate)", - "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "srml-metadata 0.1.0 (git+https://github.com/paritytech/substrate)", ] [[package]] name = "srml-system" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -432,11 +448,12 @@ dependencies = [ [[package]] name = "srml-timestamp" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -449,12 +466,12 @@ dependencies = [ [[package]] name = "srml-treasury" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", @@ -465,29 +482,38 @@ dependencies = [ ] [[package]] -name = "substrate-metadata" +name = "static_assertions" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "substrate-client" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", + "sr-version 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", ] [[package]] name = "substrate-primitives" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate#b9849fe33203fd34105452ca8e8e638f3918d357" +source = "git+https://github.com/paritytech/substrate#c10123e41c2f4bfa7aa82f65c229920111c66d19" dependencies = [ - "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)", - "parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)", - "plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fixed-hash 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", + "hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0 (git+https://github.com/paritytech/substrate)", - "uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "uint 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -495,18 +521,18 @@ name = "syn" version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "uint" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -517,33 +543,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" -"checksum byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "90492c5858dd7d2e78691cfb89f90d273a2800fc11d98f60786e5d87e2f83781" +"checksum byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" -"checksum fixed-hash 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0d5ec8112f00ea8a483e04748a85522184418fd1cf02890b626d8fc28683f7de" -"checksum hashdb 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f1c71fc577cde89b3345d5f2880fecaf462a32e96c619f431279bdaf1ba5ddb1" +"checksum crunchy 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c240f247c278fa08a6d4820a6a222bfc6e0d999e51ba67be94f44c905b2161f2" +"checksum fixed-hash 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a557e80084b05c32b455963ff565a9de6f2866da023d6671705c6aff6f65e01c" +"checksum hash-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" +"checksum hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4da5f0e01bd8a71a224a4eedecaacfcabda388dbb7a80faf04d3514287572d95" "checksum hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d340b6514f232f6db1bd16db65302a5278a04fef9ce867cb932e7e5fa21130a" "checksum integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)" = "" -"checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" -"checksum num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "630de1ef5cc79d0cdd78b7e33b81f083cbfe90de0f4b2b2f07f905867c70e9fe" -"checksum parity-codec 0.1.0 (git+https://github.com/paritytech/substrate)" = "" -"checksum parity-codec-derive 0.1.0 (git+https://github.com/paritytech/substrate)" = "" -"checksum plain_hasher 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "95fa6386b1d34aaf0adb9b7dd2885dbe7c34190e6263785e5a7ec2b19044a90f" -"checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" -"checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" -"checksum proc-macro2 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)" = "295af93acfb1d5be29c16ca5b3f82d863836efd9cb0c14fd83811eb9a110e452" -"checksum pwasm-alloc 0.1.0 (git+https://github.com/paritytech/substrate)" = "" -"checksum pwasm-libc 0.1.0 (git+https://github.com/paritytech/substrate)" = "" -"checksum quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "dd636425967c33af890042c483632d33fa7a18f19ad1d7ea72e8998c6ef8dea5" +"checksum integer-sqrt 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ea155abb3ba6f382a75f1418988c05fe82959ed9ce727de427f9cfd425b0c903" +"checksum mashup 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f2d82b34c7fb11bb41719465c060589e291d505ca4735ea30016a91f6fc79c3b" +"checksum mashup-impl 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "aa607bfb674b4efb310512527d64266b065de3f894fc52f84efcbf7eaa5965fb" +"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" +"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1" +"checksum parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "dca389ea5e1632c89b2ce54f7e2b4a8a8c9d278042222a91e0bf95451218cb4c" +"checksum parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffa42c2cb493b60b12c75b26e8c94cb734af4df4d7f2cc229dc04c1953dac189" +"checksum proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2c725b36c99df7af7bf9324e9c999b9e37d92c8f8caf106d82e1d7953218d2d8" +"checksum proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b753ad9ed99dd8efeaa7d2fb8453c8f6bc3e54b97966d35f1bc77ca6865254a" +"checksum proc-macro2 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)" = "88dae56b29da695d783ea7fc5a90de281f79eb38407e77f6d674dd8befc4ac47" +"checksum quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "53fa22a1994bd0f9372d7a816207d8a2677ad0325b073f5c5332760f0fb62b5c" "checksum rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "403bb3a286107a04825a5f82e1270acc1e14028d3d554d7a1e08914549575ab8" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f7bf422d23a88c16d5090d455f182bc99c60af4df6a345c63428acf5129e347" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.75 (registry+https://github.com/rust-lang/crates.io-index)" = "22d340507cea0b7e6632900a176101fea959c7065d93ba555072da90aaaafc87" +"checksum serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "15c141fc7027dd265a47c090bf864cf62b42c4d228bbcf4e51a0c9e2b0d3f7ef" "checksum sr-io 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)" = "" -"checksum sr-sandbox 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum sr-std 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum sr-version 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-balances 0.1.0 (git+https://github.com/paritytech/substrate)" = "" @@ -551,14 +578,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum srml-council 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-democracy 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-executive 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum srml-metadata 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-session 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-staking 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-support 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-system 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-timestamp 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum srml-treasury 0.1.0 (git+https://github.com/paritytech/substrate)" = "" -"checksum substrate-metadata 0.1.0 (git+https://github.com/paritytech/substrate)" = "" +"checksum static_assertions 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c19be23126415861cb3a23e501d34a708f7f9b2183c5252d690941c2e69199d5" +"checksum substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)" = "" "checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" -"checksum uint 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "754ba11732b9161b94c41798e5197e5e75388d012f760c42adb5000353e98646" +"checksum uint 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "082df6964410f6aa929a61ddfafc997e4f32c62c22490e439ac351cec827f436" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" diff --git a/polkadot/runtime/wasm/Cargo.toml b/polkadot/runtime/wasm/Cargo.toml index 48ff7b67b9..a718d695a2 100644 --- a/polkadot/runtime/wasm/Cargo.toml +++ b/polkadot/runtime/wasm/Cargo.toml @@ -10,9 +10,10 @@ crate-type = ["cdylib"] integer-sqrt = { git = "https://github.com/paritytech/integer-sqrt-rs.git", branch = "master" } polkadot-primitives = { path = "../../primitives", default-features = false } safe-mix = { version = "1.0", default-features = false } -parity-codec = { git = "https://github.com/paritytech/substrate", default-features = false } -parity-codec-derive = { git = "https://github.com/paritytech/substrate", default-features = false } +parity-codec = { version = "2.1", default-features = false } +parity-codec-derive = { version = "2.1", default-features = false } substrate-primitives = { git = "https://github.com/paritytech/substrate", default-features = false } +substrate-client = { git = "https://github.com/paritytech/substrate", default-features = false } sr-std = { git = "https://github.com/paritytech/substrate", default-features = false } sr-io = { git = "https://github.com/paritytech/substrate", default-features = false } srml-support = { git = "https://github.com/paritytech/substrate", default-features = false } diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm index 3774559aca27e0d879638acdb58756ce61fee6ea..e70997545ae5be376d36c4f0470da48828fe3d50 100644 GIT binary patch literal 428575 zcmeFa3!EI+UFTa>-96JY-96Kz8A&7SRo#~Dk!?k?V_S~x#406YTX7!FJ0u~NVk@yn zjxEWuhDb@WSriz~wG7gc}lA)-3EL`yhxwNH(xwNJzr+ z@csV&|5Me~J>AmCj{x_B$E`Z&)Oq~R|NPJYbsiP%yYuaF6h-mzc{C+ZB*?;@p_5Jr8x$&)s_wSD)MJE+~`@Y+5yW^&)qJ%jmylwxH z8}B@F$Kic%+kfM&w;#D9s_NC*di9pu_8r)N@r@T>dfAQpZ@=s9`w#Csvj65Aj~u>r z|BZ+5xZ_AvQ_d;nJb0L*H{NyRt(Qk*N^JEKDHx3_ZCYt}_FD7eO{E@r#~t_Fc+tg| zM|EYKQPNGf?caAe2h1yNTLl4B1Hig9UrxU1mVLLsZU3DP--K#grPurKx%JK?cNWzp zdSQU~y6A0}0KaAbJ>IU@aP!5NUV72wuCs8t%P^eXpDiBe_@(_r|_@DpCl_+NaP1VUcH8wUq zPF?MYhN7t6s@G@6W@g&$8oBK^RUd1ULG{rb|Bcgjv}%krKx>msv5HNzH{Zj8a z{@G-9?CtyCe#hZ=CegYZA+4KlJ-q)W=<%-GZ#r`89k<_jWZzqE+aE`b8*jX2|GtAa zzGdH?`z!I}jW^!B@5nyr?dD1{4zlkgYxKpqvG1-Ux7=~~)+4v>zcc!ym|@y~(_KgQ zL!x)wbRhat+`jd8-tD{X);sgGFUR$_??19nwMG9Up5Axx;BD`O4xrxK@4WS<=qvHm zTW`I+T;Px6*;{YFW&h#*P;!y)&gf6#>6>oZf71ba;4klt{xohJ-go=Wcf1{P-hXrS zXYt(KR76YrnH>9WzjL2;FnS_x+XhL7vp~)-~RS}d;d%PJMrXS zeP#96;twWq<>=W_w&OrI*%BqY(s&`Eg=eMyJ}0X?*k_WsV(-Uv9mwE_EyFWzC9qs|t@D z$dZ@0;&d!amb&BV*q+vOTFc@i-LZ6>zp*{*yJJ~&ol+ND6r@b2o{qKS?)YMBh8#rF z8h>NguWx@NJ}ZSUG{+j&?6G52RV{FbHq6_EhIwlZPYrFD)Wz2L3LCD2M?pB=tO=u) zfUHritJ`_&&7rN6y4b1@wB8=k?TMmw5D?%1qJS)oc{+X>6fK0LV;(XZ?~uQ0L!d;E z0ZB8|S$z1)$gmlzPy?r_qPo;yMRNEus;CrDjGtK*6fVdsHR2ghjczIjQlqL$8ZSXB zl|8L$Ixf1YKo5$q?^Z-Nq%MjEG%B^U0^N*>jzlvRdODs~0^QW0n@ln zZIv?Gcvq#G*!oPPODVHgR5;yeuVzkFvbep5=h*P)pCxhis4)-F?aW3@Cd}$iqFJTa z&72|4JCjJG_G}8Ph{+18pr4&;WfyHHDby5a7cOm&qxJ^gR#l*{a>bfU?e#p2F?4D@ z*5S?6cx9}CX4cWWs+dOg+E%Pl)Jx+n122U;O*&&u-8hF(t$iyYWY|VR*l0A~i(D1A zPmS9PwQyiP>JGBAF`-s~Z-EPo1B0N-wkUG!R9qT#Vg}c++o^&6F}PqBcOZc*Uh3G~ zZ!ei-Fmg$2mnCyfMr|IF5N+bdDZEYEh{Ou&q;)3<*O$7J3daY?ZnV*@iHpW*P4ph` zX^o{5qIY-*e=+nPi{42UVMMB%0daa~MyEv53I5_h?+vGS%V_i-@&bJ1^j=S6K`$^m zaU-3ywv|G2OU#^_C>_A*M^zXbml&x)9^kZ^y$PZTf+jUlX)_}BnefpXly7}D$pXA4 zS*DA*o?~U$lgvS+1Oo3$GC7VaL7Y@1PMDi}T2tW9*g{ovHD?Q?iVYYAI9s3#)8r6a zV1)YE0^Cte25~a9Q4=Mi2ye7Cv{6zeN>Dct z%Tpt|3zrWqOO9&vt4*L0KLkm7n^r{z0w**h`IBZU8ied#MWijT=jW`&F$0bc`zCNoGo9 zSm%XbE2qvITj>Kl5qM0z_DigUPv*SSjyRDXWsUMmWx+^Zb~XjMpf;-=K}8hT>`sV! zsaNC1L*|%!~`7|LsaJ{`}wKr z>(G5QJT5gN6fwPL(lKL7*rb%M3GWYD2pXzpj;7DnDB3A>ASH;md+~Y2=Zkn6hn!Vm zO6|sJJ==>AX$kS@CSu!WY zN}r6fN5A-3)V@4ww4&_6_ne5bZo7)^_~~k{V)fLiC|9SXzzO#=2LB|NrCYM_zzyZgAJ%-68>A__AV^_Xa7nRI#d5F}k;>)rL11N@TAWC?U15>?K0tE++2`Ifyv&0!r}Q z4YBN(HEOC@6>z-K>7k91T3Gd`Z8W#)YyDRJu$B>uMa!+BEt6VU^hL|<5#5!+ZKR@( zhY-*NB$-8zX(6)9X(3?0Q+3V{IIfC;a7mBcs3&LxJk~@oh3eFpER|DN=lWEyI#bH> z>MBjz4b_>%JEQ7Q&q77a5z#reR4l_56cp19#mJ^ym)GXW>L+eGY($^=?D_|8}JSpJFbcyhrGs)O(!*W z92m28UDlB4Is!toiguZTc+~oBkl!5HpGwi6>VXt5sjA3%DU}W3rKA?(rC=`R9aZc6 z<>E!WRN?|^>eO=a0^ha%*rZ)9UYOd}9|58MI1fN+?>W4}0vgegl7YZlvLLSE%~ zYO)zOo6V$Btu>nlQk8d=Yh<2ln&K0nU2}B1f4mTPyni$<6gJH=m>gv-uTLr?aOR86 zCv&-by3M>ieW93Vu6UUr0|xRavK*aB-tx%ZK8r2KflWdz(VX7mZ2X$mm>QWHZ?J|n z(U`PC0g}nQe4DYiLgaCBsZ_;O+>umtUh|^d`A}Tbe@L>J`otenA$53qaY5pYlt*)O1mf)W&%~^Uu13|XTK3+Y8LG}8xjzm-#h#zv*8`Vx%?f5d-PCcXXPaFP^eL* zt#le|zPmb9Od_?dNoSO}wwFjX^XaS-*LmVGz$5Xjv=pc0`ZN^Md#c}%dd>0~oJ`cr zF$rUy#rRBSCvZ*kPY<6Y7(%Zu5UPRfA#{@0J#;EGnO*%-o6(F9#(Z~U=pn&c-hGXo zRzNm|cLbY#?-rK2o5MSTlYQ^-Ev4Zd!A^MBPFo?gDqRyobLo6uQV2f@!XJ`VxUs-< zGu>36cQV~vV6~H`3U`I!R@zqhY=zgPs}$a%@O(O_@Hq<4ruLXg?ag#*nVmX-abs!~ zd7S=i%7;pnMc+5)L!~%)N=rlaP(?!}ItfEnbI@!sn+~!K^rUyih@j(L4B#7C1@MiU z0{BKm1~=2hiRfJKhsPnJ^SnbIhlm#Po+&>)+nV=Gae8)s-ZRDN*#&ve6sKnwmU`wy z_)xEB(&NRzG{@W03V6;rYg#4NgdqiMLglZf%?!HK43}#&pFs-HjJw(x6i=s4Pj{DG zk#07<^1JI!=|&`pCPZ^GuU2GB1y0O4HQAJ1$xL>bm6qHSdH|_!C zjp)nSiKxp%qOHJU3RWS?^`5vdkfH{pVLIeiv+7gPtXfk-skP~%wV9%|*>Y7yUur%iNAgG$%=O{bkb*)LNxpZxiRC76-7FmcA;_k-9Rx^E$IaiQR8`I~= z+(i;?Mhdle8@FENk2!xNdcY2BoLn?*^6pF`MflOlP7oWDY3D%KH265(ly=}c&gl>k z5KZ<_)i~@XV-#Wsp2Yk~jbHSV>Py}2#x^WTtXNXuA+-NKXh2z3*DoO2C1Z};PU?uQ zW#iVqD(S3+j>OAU@fu?h3eBh6Lz;-2hK$>bS9(tIN)L%wddPA*uS|BOtA+Y>HHeq_ z&Mp#BFax?q;UisO;jgo2{UhCV8mX?0)S9&Wu)F%#Xrz3UDM-*;LFu_XC(Wksq|~4! zNI|DA$v~$rNkE01x*+9~mGn%g%O>wfB*9YS58+o@}|psv|v)HMZlZ8GZGGC*CM zjJh`E)U|1`g@jpKqOP?KN*X}yQV?}*)+DcCt@*sR$lQ|8Xp1zLd@d^z<}${L*9k?f zO;b@+nr?TBqDd%96CEtUmKh$?h>LL^Hszhw#OY=xy=$&(A7*rWb02MZT^Q^RgUzp} zy+QoTwPB`S7;J_(uxrwsS8K2 zPAaBtnASqqBiqPPiZL-QpTA?mS`9{4=m|vjLSxRolI%n*ew%K{iO&+KVSQf$GyJR~ z;TT0oIJYl>BIorbQ0YQnLb{Z0?Mql#O3&|0*s+ve(3f!eQhH&YAfh;iG(Ew%8-Wl$ zh6w3gnr`k~mOiKR+;n5-;&clZ=Tv7$x~_APyftf$Wk9bo$BxIXo)fp)eg#8c%uB{= zIA%0zCX^wwE||%vH|5^&1`NpX_1RNyWiJ(D&`L!Hbyg*kxt3?KB#?v}(U(MhkV}z- zyigOZbh0mrf|G@sU{XbBUDMMSBxo}5IbU!I&jlje1-tMhFu1D6H>@D2n=__S$PwwE zyBuY~WJ{=CjZPa!v5ZOqvKcdlixj}0O{a43H2^0;dJ3i2(+P=~x|Eih9>OL2P+^u6 z?haXPvb<`#jx8&ylxCXL%c(_F*r`-o9P4tBVqULLYqp4n=7Q%J%|#p5EVFh)vO&>v zY7XqsZkL*KI6NGev7^~^5o22Kc2iYdW(A$o)_gg} zM%-6uLVA(8SSYF)T153&Vq=F*(At5J_>0Px~t6gUj()(ujQ{*;_?1{P*+6a z2)Qa?8z-w;*1onIwgOTyPBMCJelvv+bgk1Y4#|V1Zc7bPJ^-*lvMs7~*(Y_#+{Sui zd#HHeu1;XlsIl4{C2kU38Ov%!mw}EmcKT+OJ>Bv3-MT3WwjT{j4tfIAZ+gNw3kk_~ z72Fn0W$hz}v-**=ayU!w)|M>xwn6{af*uX8nl8z^dKMFdb?Y(j4&kC|Uj=3Iz{R#9 zNd~IK6UnMi-hlkX8OzcPv-iff0cpur-O$GC>Yi?$4a?uZ$Z1cDyDZ zar0<$uN}R3BFcTjC_Sg}3HMCx$|LxL*W)&4J!^OE{$S5QVI`L^%UyB_GqygtfB|M9 z)G+3930EZkzEXgV%q_JRBYO@T`3 zn>MVuL(Aw6luJG11sYZGtJw>NMg++Vl+BXEZHJJrx)?sxGk>Ehh!<6;B=P=|ZIvu! zPpc#n0<0zyW_?Ur=|nz}l-G7_BClZRt)QL(`A{!9%Nd} z^b_dAxdi6vXZ0Vmn|rH(MG;OtVTO`|jXR`G)nJ9GS2^IHQu zSnGb0E22kjg9!QoqM4$P;^2%^ZS!v@@Qu0!oyh02`1+oVOy@IpkrguX(WI+IF__mn z-sJlWRcS~36%I^8^$cmCc9f)+kihK(LSxPB8rGc@m#mpzZ_RpR>AXvpN0ZK30KYCs z!=Z3f+W^o^Pk>%u2=?-5|6>S)5TQAn5E{2JT41Sued`SgENE(ibFbB8yk46yMF}lr zC|1@F$BHYx)cyw0TBAa*f4%0}dWKN@+}_9zSJn#F+nEumDUT*s#&!_xP-nyLsI!rx z0H!xnSMri&!-;EJZ*0D)A&8sbcB;V|0hSGxcl-54muuIzUT<97K>5r`iywi-V|Hyrv zG~Fa~s&gLCHqRYA>pZuE`*YKaI(X?&xVAn$RKLzq-QszQ-q)@7z4;ovY(85ZqxjLO z!}^P6+#{JPFte6WeYkUOmOvWkKRtL~o0En%D>BKi(Ta#v^4F$8ubEUo#L~o8r8k7Q z9*@J~a$Xb$SGm%G?xj?T{u7u{AQ`-R7n+TQ$4S;bzCF78c#I_3+Mq%zmn?iRzx`U_o344;pTE+~6sU zM^8X+kSgTBDF?cPgKqTdKxzoF_m9WvWk!9gd5Zexc#8U1ioY~D&eB4fJU9L@;9nGd zG~V65|31j}zTNZW&_q=2o0l$%+^|q=tyBPL*56HA3=jL(==)QkoGoKk!I{PL0W^HGPAd9s|JUtOA`&m=$3*%loA zMGlxL5D-5K#4{!=Ug}ljGBIIsj)>FT3MFBogg#-R1QQk-y`HcL_8(OUUjyk>aCISV z9``1$%oEf)r~E1h8RQ^wa7A325PxobL_+26T&A3Awi)O>IU_K8az?R2&KRhk^8(-% zJf8FX5c8apq0u`KNIYK0yo4#eiYW^3c?Gi-)^h{um&>VZnXK0_S@$qmUyM3-Hj}vP zn_ix}yn0nWX|u}ptyh`6sz!|_-qCNtq}}GEalKF4muO%hzL$ca{z?0?fl2!kpS0J9 zN&C`gVbVIkMg_ZKXK8aHN zw~rJv+U;cf6I6MSD}jzZW|aF5sbUM!ov2k1@FCb&lh@Zvn-w9!U*>fzJ+O;B&(n_~{jjl^K@X3nlBBs!__3)V8Zv zp!A#q#zN^q9$S4Y9?R3ZNBx%L)RuzRVrpHeu^@QpeWb2rHTQHRK~m82*691< z4!n7L^u4hY?s4|Y;bywfbfzmiuR>pXH5B|BDEPHd@awdL`sq;cD{=~!sqhM8y|rlF znzPnEU7tgNc3N5*Wr z<6w)}b})$g%4e)bEQ)7snmlf3Doqn5ATzN_n#teA_Gvtk$AM%jl6q!$7C9+J?j(NQ1gQd=V ziyx2W={w)uHm}O+cO!>hm9_6iI@KOQB|2Z8oH4wAoz9!2?(}Qt&xSE^_CFBfEhh4F z1EHZ9+MuE=W$o-^Zc|HdM?n3HiH-X5!9u0{*m2JKKbPMdoahd3XVng9)2rG zQTiqO&VmO}!;U}DHDw%ur*JZ!(ubP!MZBmOd!~0|{GF*j<^+moABe)5LFMI&z^O`# zFcB!$os`mTaaTyUZKK1Ynd0Wd#UZhMxm+QmsIw7N(5=zhj(i$&-EHKz53+g-WOWl{ zbu;n(#NSH%ZNzWEL|RB|o$VsGXKAn;2UrRP*9ar#Sk+M)*3Ouq8o{p1Hz&&yMlJ^< z8@29xCK$1bOLJ}~cwxG+J@Hb0w}J<}dz}N|;kH1|#%jqk-`w!`g^%2MJ%A8bpGz1i zIXcSrOAY$KV+NTY#PBnoD8TLux$LTxqINm|(sI16E^RJ*s## z?!s|cWH26w`_`6+HNd1iP7Sd<+Ssq9g=kiEIihIexF{}}`-OA=RZj#zfszD47v82( zroT9?oASeK^;0mv;r91dOl|yWeWrF58e`Yhw_;F(ELyfUbsUuseqVNsC{jHbH2c(KSzn%B7!L;Dn~3!y%(GP9mxHpxn?oKw_TaIam)X;-*j zaX7tm#p@L!iJTE*&l3ww+PLu%jDQTyY!^z}A!N9(R~&{z-wB7l3l4oq#|WP#GB0F$ zH@5`(WV&RSD>!ADK2pm$)q>Axu|;(~sYN8mm4ucg$)Kw9tx$2q$YliBrY)hwJvd5& z1J9d^(@TPpukYC@u4TGmy2BVmnTeAEf6x}@oP+CNNEZ$+)d;qEgZTH3p~N@}hq-EC zdQy%)i{ywkTp}vjK1w6GDS9=Ee*7MJR5wcFfAY!A==|qnjPBl{jS}JIeQca4-geS+ z+gULS9hbD7X{4_Ui`=gZi`=g>{be?NHA>rS(ClB!GXLv3 zmo+bbn(9X`eqjk$1_gwt%!Q|8apkqLWJGPI1excdwDsiKo|4ZUIVFP>F3(9N^_d=p zS814{?K-7YOnJkHY(y}*UedU=a03nbPJ)X9o4Qg?_Rig~s&~Mu?txXk)3#PWUEDiU z0`ph&VZLnbN`11EDQ4~}W~WgA%oVVDu|q=d>@pC5^>>rHEE$gLu?gMi2M;#Ysng;3 z-duKZ#=Dfp3lP;uM=#=vM%z$@s z4xWgY8JRL8H!~ygG{BT+0cj3$U)?!RME$gy%()`G7NxVm$*ERl*&Eu=>_#I8&s>K4Dz!)W}ty9&!~cA@`tr2A(;a7B*3I^HFHgn9eDNUU_=Z zDOQ5+Q4KxRt10+Qjf1U;`DV*gI<@-7K?dJ?ABV*jHOQsKMj$g}Mv=8yKceTy`#Z%# zLyCz#%#r9SgxrW#yxN;P7jv1L>mRnYm2J%&d)wB$u#xT!tafi;wR;1r{dQRGn_;y# z!fN;895m&{_r*@A@P*9_8tE0G@D-u(6`}A>3SUm)=TZ2IA%!o{mdR^E;cG(SYeL~g z3crxTFQV`@Lkgd-{h>F9!Z(M)H;2OeDEt-*-$db?hZNr0Txg`Xg~GRm!ncLOw^DeC z!UrgP+mONw&GQ=R%R=Fog~BfjgnZ#a3cqYf;q#gd)WJ~rU?_Yr6n;B}Z>R7b z6h1hl@VU)%8tGM`@KvGkRiW_nDf|Ko@22ooLkgeM+|n4Oa5T9*VT3N?o3(mVZ$vie zvN!cE2{E5~aBsOq0B?|bx=l_2918t86#8>0^ye@I?xa6=(Vs&@`opn-MtVyqd`l>N zODMdb!f&PU+bDd?kiuzmGczHW7~*%MyCw1M9EEO4cQ29u=H{l6h(i$cZTMVPcvEv@ zBYkn`z>7l%UK~1bEgiUy4(y==FCNl?jdHAx0(xKxWLe7_v@|=Suvqsi15mFFK)o^m z^>To^0ia$1P_G;U)LBi=GK{FV0X|OcK_5h}Eqt(Je>Dy>E$H>5eys>|L|e`F=vVk5 zN0s9K)Df?iwLaTiH8OLP`}#)IqfNh~Ua{af;+0UhY(u~)@{U*<%@;=BWDBE%_-ts! zb3~=Ovi6;UCf*rn;+=se?uI7b0ZrTkO}ujmO-$(4ff4npWBr@W2B8|4-}n@z`}UPC z8>O0byb-0P1B`eju=*T8%PLMxi7zP91t}FqI=T@hyV5mwv$!DCgrjVTlr1%WhK{ed|E24LzKk z*6=wCj9Tvw+ri5GX!2SEHXKd%lV09qY4?vN>Q1^=X9H)_HFnmT!*4U34P5J|$?Pl# zCqp;sG#NK;SMvVX+Of`q)Hn>Uqw%ZwJH?@RhH5Nbr9*o2`o4fpA*LHVgkil|rv>d; zeCnYEZUMQ<(o)X2dzy}%cRdK#=2{9B*!Xi5lQ7RYxBP_r+QCDQYg8!VJfI!b zE1xa@^-5gpoh!$>)}eB2hG}1$V1Yub?9*DBAY8|jTunWwqv2czYA4P(N?uQP=}#xc z!$CPBD6i9e#UdOhR|&4-R~CJTgLdrbayoWJ#5sNYYy#doje4kK|XEg?>v$LsAIRHiYyIN($0*TF}9JXXcACd;lMV0ELIY-QOwADXef*Qj0(myp;oaVLz<^!j>hnxY` zATh3*yxO#!hoLVMy)MpXL_6IurCOKgO*i+|A0afg{|mlYzySyjTFN#|@6y zsT{HT$OyQVW|pQ?M4*}JblPZUnk0UlancJz@W7GosdVs2_w=$O-Mwq7pyA?3w~iy{ z$F1!qBRi-au7K>F;RgEY{v+M3{v+M((lPA5Bi)P?H-L!M+TnP=g`@$iZ4Ms81{ZwW zK>0PSQ*hc@9mD3-b;@CP{-*pGHn)->M5g>0wzB2Nu(>db3m!NIE-p4D-(`OCnkyT^ z%^mgzMrn6*5Si35>`6{z!t_#}q}*E&F0^Qgljhe}w8Tks=Gj6wD0u8M!%3N5!+B|bZ^bfh+O2zuA^cQz zvHDwFXff{bq6(GdeSgXR3oS-*;+AvbpBt-+6HoKw;)>JjErVK%t`IfvsIH+|>D3iM zB5>_%!H&5fxO@kVUtN(qgZl5FS*Eo#;nl5V*J!1!B6N22i08j3eA=C3nD(n_g1xb{`}M9+-Fx*2-m3#gDW5tMyh`SJ`ZF_QyIjOpbayVIXJCGB3i%p|iTH;=+Xi?kY3 zZpiC%LE0LZUZK=Le+-l<@7#V%2qmYn-WF(#0vowbqifV41F6S4@N2kkrW26Gp&5viM#{{D#yK=v(rG3KM=)G7 zH>lH~P@x#RidxcX(C2i8<_E^c#259=20h`8kN4luHAJgf#v6A$1>T4OW%qNPjyDbnhhZp`)Aq8V%~qKoD10DWP&wcO@>jQg{k^NrYR-<=ZP?fQqn`D9PQA;f-= zvYmFm87mkJ-5F=O(7~Uv*NY$vxLHI&%=MgC|xv74(2VkoT zHfDyRF*)cYFtiz01x#Nl*kfRFJD}!~Opei<4NPu!7?UgAIJsgbho*#9o+7e^-UZ(` z=@Hmj&d-en=B(LRps6;LDR>PN{B1>=~Cg%Oi|D_spsp%tNc$d1B17hr4PwBR+E~2#0 zz4C2)W)h%Fd*FUmTzveU;)7sf!6v?OQ}Q?LgJ2TwIM402K@B)X%v~0I54d9czY7*X z%B9jZ$}P{kf3>l;jU7m$6bJ@yH_{7Q;;KjufZ5?F2vCCDnxI1;+a4_2#E}j@z_c=e z?EVjqg;%6E{&cKXF*4e#;q;X)jAsWWru--QuHW^1IG)c7h>qA7$X$G6#uvcQ z!(D`F{()c!O%BiadjH5lY{UTEX$(ixZJ4Q4dqkLp>>{>03^ndF=x)ViT{Z?L`PQz! zTE+)+N!~rSGkFmuaC~RK^0~(%a%}Vp;C$oZ1;G~B5rt85t1gjEEffD#m46}GB6o!T z6iMNtk_Ozy_^CgjPX5|_0LrAgbMQ%jgu5LpilwLpU>>$({R>UAJ2ZT~!C{0$2U!rj zhgNnMR-(R1sa~XNjFyk;BVeXoYewe!=VZYJ$BV0LdwoLgz}CBCVwp33$i__3mT8RL zS*7b+zo^0?3_Npgu2w)khYhT()tGuc+^DMSjN8TaMKi^@OTR4LDivBm0^eIOP`xPE zL<*c>4eO>|2VvY>pY(<&N^R~cwb?@`OtXPtgb8qir>@q8>iK|J5Dyl?iq-BDe*=-5 zhHP)}2QsbG2BQZPfl~DuOeobEkg*+eV#B+1J+QGK9|;-=L>WAL`4D(=I1cYMJ8J`#B z!I?k-;*R%x9g7+?E*cQ~Lb#1fL<}~m50>$XG}R`QeQg3KY1OZXMfvnkH#@Aof75td zlmc$$kk)ua?9?9%t~t1R_^$Fbwl>0-5Hz|jb{52Xh?{G{{pSh#2RI|q2D)1lom--f zv<Im>~hzil>Vc41}nzES>OxbMOSD}UCUcgNAlj~_HU_grKG%PAt_Ai zg`i;Q12}aC5d9zwnsLG5Ko5dk`FjGHyPpe?S$u=iN{AH9*!CtTurGW&ai9J<#B1y@IwfqG_YtOp*f^BnHeQ-PA&Bh+2DBPgqRQ3@R5@0 zMa^)b1kJ$drjPK|?mtk%FUEyAv9+?$!(BcYkZeKIVLXhmbCiq5HGa!RWk(nl2-Og6 znTo13s$Q-bT@CC&RT^7QD#qBXDd2=f8OWvKb~aF^2XCZAFAR7eJuN7n10@aE$h0vl zT7=)TY?VFwhhpzhK~)zOU_(T&bP8*dF3xd=KL{@X`^z4_21OE zqavv8rd6^E+^NID>$Z%oIZze5M$ebdSx3#k$8U;5Xbq<&=a~czsWOw~z{ZHI+iGFUY?9#T zuJe5*SYT&TJHeVM@Qo{^0$LX$)L}=@Brj6lhYQrvdg62p#wEX309x)Ka+>NB8^Q^r z5>@jsg~~b}rWR^F8fv@3ctAI?h%eF@K{3@L0^gXLMW0-N>7)hF+6j3#eeyWqGGw~&+xAJ zZ&Fa8{B9E4cSHT!`s_S?H@o*IyhYt8JN_FH>Wkh&lnDm}u$S1>@vfy*qs80X*$VW; zzdp*BlE$(>B!)J2Bs+fJiD+qi6lu>(HM zA|h?aL2eMP?}RlZ+2?E&WiP8L(>#L43IS<_m__@>{c)k%VnAYh86!gmDt`sal6y5o z>J}k`-sB$`sOaq$5`Hxh4f>qcpDV=&22iqLEmCj^N#j+5e_%lBW@;4kjS1gfM2~8~ zfz2s~iaD*;_?XDCPZ>qB9L~fv`hge@nLV3bAX?S7o6eZFylBx_P8l+?mK^fLo}ejh zSrS_-uS*%__Vf5qb}YU|Jd}+)OPv@`Eh92vYA*&cu8#xMt#<3Yl*@6N4$WCeT0Hm8 z%37K4(fFv48i2tu&~{d)3%`@Ia6GFYl0KP^9T2-tqixX+-syYV9IH5_4`_=SpvzYP z-#ixPRg2oYT2q2+9;}K3*>|5|OEYmKNWrt{17THUZ>=ahw0cFfL-c6lAl|9A_)ud3 zBGd@-P6H*Kfqw3W;Ssu<@Axt;COQe7z{kWmU6yR{0oBLDpNy^tH4OR{(S|JU)H#R7 zOVX!9dUmx2>hKlOM&-)J?#?zJV)RJZz+oKaSMDdd8&LkCxX8XK&)#3YdAGJvp7in+ z%42q}5a1vzhrkS-IK#LBhmZmvL8H~Px(4L05ZWk1+-J5ShzRaj@$qZ6CQ zNz}`LOuQVDlJJAif@HofC#$DK8q5N=#FmIcq=Rq4mKJkDvQL^jDYf{PKA}|Ot50;)^yB#I$97tBWkpw z-4A{E>!1GFpZL^=ekp2vSx!>a1$SIKAJLT6|J{mlLRpu=M3wHq?8ouQoPzHvKkU_K z5^m2cB9;?vVan5OCXrrH5StE&m1Yv3$0+63Ttb+X3b5bH3*l}rX~BRqCMz8HFR3txOv65tF9IB860Ohn~l#8^MjU{BIj zMvTKM?1)82vc=-fhxpQk6{oI~G22X~%kXWybd0(hu*Sak@C0e%t!#|Dnn$(AXNT0D z?O~nd^BKZ14YMY#QcY@oA~ZxJ+DTb{QMAw;)dF^c)z79n*)6)qO5F;3RShU$q%FW) zbp%>}B06+9Z5*b9(g2Wt0Y^Ar8Zfnq1F|d-{CatbVRxxf0kS<@E@1%vD%gIR<45Hfx33#L+gNq@fz7&cC zaql9$nJ?g(B9ZXr;xw20)1Oe!fH3juoWzeo5Ps4~?BLG2@y(nrRe5g}5X5lvDK?2&Ga zi1ZR8Qfz<`_3}F-Di@fN%A*1~%V=4`03%WjmfmATQc0 z1z7nukACs!i)~Uu@aClEZX!8&ah{Sv^OJdsa+O>6S}SA6fYu9eB+v0ce6giDi!yX+ z?jYYl*leI5yZ;1Q3@Jm@Yv?(?zFP+jOqL+2u5Tqa?{nU4(lSk?W+TZ;bH37niCBkI z&1X#xJ9S_-0BqZONt*W(zB?v<5&Fqu6Pzd6l_u`So`At11nO`P))8YSgAjuo2gEIP zadGp()D#Nv^BfdByTb^5nJk2w;;Fw2BuNGyh9AjEdqD_fJSYA+XWLIf-6C1n4^ zAIZ+!L5TEAc>MOqm2f$2R5Q6Tud|RoQFeocEq0ZrzUFGmL3wQ;&!z;-5E`$7u06Fw4 z?#dXZ8Z#ZHkgSE&ByDA{3LkDqCDNT!8!S{aTzsMz9C}L~=!JxBj5#t2b7f2-m30r* z;R2U7P)<7IQ~>oDp^5F|uM4FxNN`4(@Qg!23DAUsGGy5usY2r+x0wzIzo;bq#ts9$ z#M!m_^xd&9F*KJmG!tZ!NVX4x3Q)=1d^T-S|3epP^%yPEA(9BU6~-V}_*iw12{~k< zQ6HTU)-UW0aiA{^IMfzKuQbGeGC10{btxb15b@C#V`1#F2kC+nDX%r?zwqAPpvx`b zgT9536R8H>hgySv%d$Z~A)G+2_!~ilxU6JPJ8L}Hs8sQjRE~lUSb`~vcvFJrjJ7wE zM246?@055)|DRQgEPDs@INJo5$-c(8Q(-c-c{)mxN;2d>m{5|m;OBozUYqCHe@B6V zFI3ytxOk2azb#Ad&c^S2WVbHKdpx?2;bf5if)YANnL`1N%%+8avtxh9x*2!Qj%N>k z^aM^H2uaD(A%UnO-5<)u+)FFlqPR=g^iRdG9@25?u+Yw)7Mo1Cq2%Q)iL5VE6|OQ$ z!v?i732TEXQH07XqUZ`0*2KE&lJe;|JQg#aNyD4Em1hl4%waH53x@{&Az=Of{|%56 zMk7*Fsu!3Of&y+Ln?I7x-^I~Jw&Bp4AV9&xK+_)efqtYEGk3LHA13DU!+YJM8noCKR6Lr|#6kNm)ju{k~rn<~Ey zo1WN*&7b|jr;bfc)$I7+T)V_S4Y&-kFTDTA zQuc)pT<~{QHFA$mX@ZUYD;rpQ{CdCY^*^mFsT}#Vb@25^=Kb^FnXEH2L_@P({1q&?#)Tz(7$-NG(h&xE7&nKTh z(~7)skSq|2V5M4%t~fe7mfBvLZ2XW^ea`A#Z+o^9KBP2Ot!e3L%r4&g;NJJ37yT_0 z065_VHW4bgVVJ_$xGs!}ti};eh$C25k$?ZYRImP8wK10cuXgCwU+NWuW?OtFSa!-b z9Fn^W2zTfL!QY9rn#FEtV~u`XX7|x|8K~3mp+>*AQ!I&E`Wt8~6|FTa)(`SjZ`e37 zR*0#qVzp9N&G(TsJ`xvRXZf!a+`!U$OkN~<$XkGvkU^#mVzvO{4lE53$}Pf7YjcIJ zlw=nMy@Rol^2kp7FGI53sw0*k>b)J?ODxiN!tah^BCu zDJ^2GiWph@0DQ!cDy-h!t;oay!>G`e?A<4nQoGkoL6}9(Mf^M!^xxFzrE<2V?M0FYur-Nx?TP zPzQHxi6Yx_n`CUpCM{W;m+MQb70eHuO9mvy9hSJjozquVwNT6E>WcL18I89z3ckIp z{TpTiPo@l}HgDUqwVuu*WYI$7O*u1C(E%L+BwI^Th+_@vZaoKFY4hDxIZIxJ?*rIZ zX*W@l&WJKO#>zvfGkhZ0aW{)`l?806->=nsEvuGt29JYwpn%%-1ajGE=&9ZwFfc2z0*VNr3#=qZzFKoP0vG^ z6;>m6b&mT-?7OU|sUdJu_ZI5H39BVw!0?PoONMKBJ;Rt9o;7K=Xci~go1~(RD<&d_ zS}-yMr${Cz0hbO4IZ+sdHiI4+r<0us0`iSkTK`gG1|OCCIs6jkNDsY7ns2N}Oct8L zw4#jKXV^Qd0E0v*+Z$gMn$=!tQDw)}1ys2u-=v$``iT&tR^=(%qLh4{gYH+D*||qQ z55w`YC%*I;w5MSS|$n?g?A^(axg~1#)*R%N=?S!T^ z9=4PHEUr_K$ILTU6$*KopXlo%RRQ7qvI7vh;y^(ILOEzx5|ynV^384K#5c@DJM|nP zc|6BPh=UCa6+0Sj6KKG+uf;H(%~I50h2{Cob{)Ge2-}5u0jD2HvR6o_svQP_Xas0) z8KSh~bgyY0S<2oR4j+i|B>`$NQ_2**kgwM2DBjZx4PA(z4BYf(z0ArO%5(qQ4k-xK9QFiuH6VSj7kvj-7%ZzGgm?fgL*? zYOvZ!kdU7b{bbx(o94$~Z5($jmC>`%7fbtM^C32X&rtjn*gS#a&<7$3Gw}8@LT9q8 zZ6==%eSIip`qsnrEzr!i!aDr2FW-XF7W&h6D9!d*gyHZJ{3Q*?DTW4v$A)GdLo<`E z?VKexYNQ3lULZ;pL2IKhUugIRIr@D*8YdB5LKXQIR?SnWVyrL0SdtTPUpoDA3eLAk zhKlK%r_;Z3#q`h9^Ua^?mti+?8vL2qdKx{T3#2T(mFcjvat{-qY1Ucq#xu86dp*pY zRiTEW58^AL_hMV8XVu&bZ%SKA)hPs-j7OCz^+RtKmh`nDdsFI(-t1WF>b`!J=^w9O zVvp}CoKq{aNA~gZ2^PTnSI!NNI&Sqvcc;N!r#RkhjUnclU7!_$0Hs?|hPoh3N=7N2~2{?~fYaybE z0zE|$Gi5eiP1o1ps$~rwo`(7l2Z&01cNN;L3lvCa&R7}GbcUl7;^n&#AoajUMRC4wY{&Bo`HSRg3?eQxQZ0#bnbyyDDNqI!UJA?+66 zlLD9Mrf26VV&P(JM;tcswacL%JB>1_mq)b0byA{xOMnl2ZmnD{ZFWqvCRJ4yVaA+O zM4Uafe<9|W+h$h^sMn@e`vwho8$$4z))kH# zSvOY|=7^-WCpU)liMYaw#2X_5>t(_bnIQtJ@Ce7fECd^zl{YnK2h>gFp~szcj$7WZ zq}ELZzBd+Qv7t9k!ifkGZ=CM=jwaP?xR{oZGYhk?z{v zD70Hmp&d)NK8$sat-`t-mB5-ci{tK`RM|OJ>Zk)(h}4*Lm7lxiA`RA@X4u(|DX6@t zz4A~8*J-+z@804haDXVQNdl$?)7fA@^l>KRyH_1`)84FuXNN(WK}U9uZg1EhZ8J*| zC+7&8$Qo49}^k*L%w-e-80)?HiiV!ZAZ{`CevfwvQa7Uhk+JHYM z|A7YZO(4ykI6T z5)B4CM2iI__bhvUC~>WH!Te0TZufl-c-=-O`04sBov?!nyA zBAm`@TV`_9@N1eE5CCS<2#^)(^3wBv?Q0FY)BIXwK*f zE*$N;GDhuDy?f#Z1BTHo#r=)>*5z7BsEX*= z0g$p8K7-}x@Pgqn!;rS8jRn+@W~iyk+Kb8fIqPreVbG&B+^pd9?>C%WDoWwbgph4> z&d2HJ_Gs^w@$0R}(H%N0jJr>F(+dAw|bOkADO*ZWocowHjh)UFZ(*>&O7%0Xo z(twa<+TVhR?}@0~ev{yr2j?huYc@E4CK&0!=_bTVr_%HFedMF^B?3Iuo~7 zbSnMANl+`&Hjk;cA7O%Lme!BC?2 zctg>Zy1EkS@>B65bGlgwypJ1mQ_pu@X>6~;(U{P#9kT)xa4D5TX!Oopr3{f8i{Qlt zThby{;PWy$KL3TsqHL26Vr$y?Y6^sZ4slHYJ&U5K=Xp_Zm293hAc?8W9$;Ooz*bC-chDSuY_^Bd2^0eU#$AVinZk~%EMCLCRhzH3 zssQjweUJ_Tb44}?qXr>u)=Ex|9m0&gX=~LcH9E^Lk1?|3LYY*(_qXjK&P(`1s8J|r zhe&@bR<*PSa-?!^a$<@r5MtmC+y}*2Q;PS5dR_zOjR3QXyZK#MV#Zy007)h^nUklc z5%5BJ{@FwnWBJl`Sg+eq7ze$=O@%>-!YwB@NVDl7=_LgLI^xont`cH6#^kTk+08(p zdB{3#X?1mI@aLb02)9^1iOQ#@um5S&Sq`Vs^9TezUqfOX=gucbcOJ2 z;}n*Q7MC-yvyAtIR@6uZ4SuFHt!OaX*)OYz*4f%i46Rm7z^_WF@4CEzi&quOwBYsx zE9iCV?XTi-RWXxSF{*T&;WYO7VROS&F#xo6Ma_*ltD!eHxPqhYyLXaZx{qUyS-@ky z8-`*{`P1E@EaPcO05%z?bqJl!2RgB-k6CK+)O}`__JB3z@6)sz%kq zJXtmj{UbS~q|gX?`KiC&vVs$W&0Qa5kx9O^P?xJgM6f%01tMo?--po9^3Lb=k7!;s zhuTX`JNHnh(%mq?7-c7$(p^ZI7V zw}#(Ze)_nzq@3zl&u;_2jr=z8+sqFZ)amf+@;jT~7JldOJD1;i{IpuUfCghTV>h!I zP}AxS>p6e@3Ij4-U$TmZ^ z|F@TI%|N!xLN@Hf>_7LitscmBX~;HBw%_h$n;Xb>Nyx@g%?T^O=$Alt9?vNZ;>T@bQuB->|u*(L|F zogcDoBHL$r+3dq}C4_7Z**236wI|10eW135kS!(Kr+eAP2eO?PvUSMz|Maqr4P-kv zWb2acS9;lM1KG|A+0G{0r+V3{1KGBOY+K0o%e`!sfox}oZ0C^emwMUEmM9^_{CH5v zxnv6)*2Ela>w76%C)9Qx?@ko834J}Tm4-YzgMF;&+bCe7((!9YV1yI5XD6fE4lIfJ z{XSy*Jhv_|Rnoc#zd-O@5B>qcb3DkF^K^>`zew2=cAZ|7{W-ygr~U=OrU&)? zjVTX)m0-(*e@SrKgI_1u_8^vcI^#iH-RUY1{uM#<5JuVmA~@%%e@$?;2mglP8V~+0 z!L=UzJA(GP6Ye@7xK61x5N$UXqCok%!VDj%JcA1`6+EM|DnS3Aqk9VX(m{pzzt9t` ze^pOV{xvvcIk;nEr;Ip!u76g5$r^69oS+J;Cl@>&cf_{zgym`nP(5)W6dc zj6SI+=sc!VTj28DdV@(6y_D^+{=}{_x=b~c>SpD=%>S!&9-hc zJKi!cT-n4Z-9&bhJ(xP}(PwtxgpvvJ(MmGTU0awLvTkFxTE@YWN@P0_)ni8%x}%rC zf`ThE!>lIDq&=gBb!cyw>!7jNWT@1QIFIx-^;)!Dvo~JM#YOjzQIVh z@kX5iGkPOeKyia?Q6E}qV#+>QmMQzO?<3`v*Uecx?o?!jz_u{aD)-iy6JNbCx4Z}j z%1hX4R3h71r_hgmFs{|Hg|*$teC@~CJ`7HB7{HC2#KQrJa)TKkPYDo163Czy-FKSV z!CgaN84pnw=3s0@59=1y7sO?Bv9oees7Q9vTV)u65Lv$WfjrM~S#r$7c$(Vh*)V8i zMboxsfj`$qNPFY)Qb9aVM0jjF3_N>YlJ%X)+xy4yFA{{2#gB#9wt#Mwb5X*6$~{=$ zh?OJq_lVGB*87LNCc*}>iHEz141My+&`+2K-2C(!+&9!l*>6U-QJCUp?xRook~#LG zmeWG^S7~Ra<<;7Vp_5uAXmQ)A9z5&^d4r>ZeT;UGn}Z1c+p`QUH|CN}%gJn8);O^l zbg~mwcAb6@Qg&V*^sTTOR-1%f7E5HnvC^jPjqLU!EF{RKCnSKh>y#?*gw0dDSo9pX z(maM5?xw+Gz^5{|6jT zL5bj)W7&cQ95eT?{PG+iiw)T}Mv5>zq!G z;C8*PztnDiC_!Ej2CTOr3`zgxgh6TnbU_#bdKh8g5Dw!d*RXfcfM#WFDA0Znv5l86 zIh3VFj_lqO{^X}y{bGxBfV59RdxNCi8qovj0%-bYj5Mp|h#_@3Nsp@b)FjO@v=tGf zt*%Dm3|+3VxYky*ax`<0Y(;ehf-dS9*9kSK)mEGHC;jb<=jq|u8<2kr{SyX8V<4?e z)uUQciO0sPS_CVLBrW6TBIzT>x|hi$B`>zP2HaS0PU!#27L$iaCB6&X*8<-CqJ<9+ zZ$Zh6@a6s%er!|=DA^-h_`cySD0#7kcG}m6ku9(>bYu%38s37E7h9`V+QRHpZ2|p% zWqsh2+I@Y{Iz~Ry$A|Yp$&0OZ11&r}Y8=iwMGGGs-hz^s)6&Qm25G6>hwmBQf|3_o z=|CSoF{%$bDIk1SbqG0xq=I`I`}0G{X-@f^HWczPRLF6y5I6|}_xmM-g|h$@=+sZmY5>l7{AH@pQUFSfp8r7he$(8AVIAKo*(1tkx`)5uN; zPhprpveIGZaArQtxFxEng{Y%ppn=fVclvOzPaQB}(MR{RzB9lrZI4Y)sIr(=*IDvn z>(!1KeIU+OH-AL?hV-c+84P2=V30EVngPt5Rchhg!&^}DV(W&17XIa^7G5#X!iEy= zkA)TnOdci6y0eK^(9aK#qMz3mnE$?&VxAkM(8ICd3RRqw_M4e-6;9f3oZp}getnqV zQ-b<$&1hRD6qUT#`t;z;`o&RT|7wq7zIUZ?%daiQpg)7(sK)K6%Jp`gK&3cU)YpMB z$v-)~14>?OeQ>Y?BT4@FAZyrCBA&ksZ48j7l6%vtpwFKeMLo;dPiO;EU{C9m10h#S zpID@g;VkaE2K#YNX|VrhIIfgD1Xn*fs*Pp1I=6(YzaEY&B`>zVH}s>x6>SWk%OC0y z)CX5eP%>P4#AFw{aJJiJ4V#b#SP+-ut<%;du^_JV{ws`K*joIa59VOY z@-DNW*O#XnEvzoJ@Xg^ZD0w*xf-yN_23zQ3L9{SmYT+BhTTt?1>-7VD_<>O^d|SbS zKCn{EvuPU4_j8%D(f^mj2~Wv(e{Uacqv8ywZQ1y)xb*xq?_Vj1VY^;U*DIF2#x+rl zF(A`U+^vOBDvWazP+uEP)kuwi}gN+BNa7a~4}=88MD2-#F(i@=L2vP=dld9n3FgRB>>Kb$;2HpqI{mfHB! z;cX~+vGpz|ph7!jq+&v^%tP9SoV34-4r4uO&vTR$}j!N*5I@Y91h-BxPjyx8KfYrh^e zvW*du&-?D+el}*gw9p0{z7h69!*zQQ|{(RnUwfXAMZncS09|V`{2ePE!P(XEK z@pfMkdTS9nP=wwVLbc{?McSbvbaxSYcMk+!_v0&qJ9P4khVM~KXW23ew{)!x)7WIgWUi8zL;M?O0`adsOAvo* zIK)a`4)GVx1me$}A;ddYh~vkGL#*WG5P#-OApYHF3F3c09AYIehZvr=g83Kd_)}*H zaUncE88?59vZ0#KJ=JRdZQT5KD(i~>JB!diFG9hr7E?W1B;MC6^Fe}vnLKV#te6QR z=#39n{eC0A_PJjp9^ivNJ$xLLtc7mtMZpLE)2MOid1wg*(0^m4pvx9Bn=r8O%XPT~ zyU+PziG`+?GjqGguj2cSa7Fy&@J=YXw8#(!);b|yT$!0mt?xOK2?cNBuUjWpx=d@g z6b0DXXHMw!u%ibJV~KJLviz8QZ|6~D=P)d=%N6tl5x1&W&Gzj`xvmyZs|TWb9jn*r>zGA zB=V51OvYsD?LA;C(seB*7j(`$ci2icK_Egk-y#U|p2I<$l=K;a%a_U9qxD~2X`f8y z7k$bpd?Kgt0Dd)`ywOMD+}VQ}Vc_eYEqQ-9`XKO?T!7CayMzBL0^gV1d*I98T!61o z7}du{j;bt-E}z5Q8P!3>ls3^x^U@{G5tFkR-tUi_4^l~}?}wjueIJgSAEA=anP0H_ z*c`M>4V3bS_sifLE5oM)x`L4H!#SO>gEprVx^*D)Zx)DwFq`(YKFqvw>d=T6J5xxe zS8Th*8wD{ewmt^F18GoAAPn7fCjSoS{dfehO|90Rrhc%)|Gi9p$jzSB0OnRi&hL+#|H3gM0sYSk0qqNA zN~1SHJp7EcwgT~Byi7|TE7O@D7%mi)T$=7-#{C!=xd`S#1+=0454 z1AawejjgH_<)rR=16Lea!BTRuIg5;N#nxi$eO$i=qF~*sE6_h5yVr5upyt#VTwA!+%vCEZA;u-uJu(V4UNO zPKO0upR-_^ux8RnLGx>mlouqPDXDb5izo`()5rU5%7cXE70Bl*-*`q)a4cw zBR!l)^m#A>E`M~TxD0a|l0HMF_Z>qaCv~~X`{T~=Pou7f;WAIsQyH#LOdEjf)~?-D&pm zQ3E$uh*UxW=RdGg$iv=&Gl%@ZP{>JL4*3tS2=XwwUEx^4`}>-2DTeK%D;>7LDGIJzXcKR4;!O^)eRw2n;^E6ZkOk}JT$XAR1E1GzLd>s#g1_A}>Oh!*Dev`t>)NWD>NDGztBTlZ%75hF& z1CDJa>uHVuYqUBLYWtp%Beqg%dS#P?A*zib*jFM=)2qr3e;;nEFWMvO{p$VD%sFn@MV0ircfAuEr_f{2OiX^oq$h8 z1}`5<2Ba1c7i94MQDl%qTrENT?JI;h*e%QF?Vjd~3o0;w=1`g%K5vW3e@*k+0*5ZT zPj5(|5!=yfSL2GRUf6t5K}T|`=HT?vk*EiMim|v_*<&DmQ7*ATTW41@D*)6|_6i0W z`21A31K86E!nO@r+M}1HUO1FNky@zf1%o;^ib3V}O!?Mz8Q?iemTAY!IctxhKGRU+ zmKd&x4uiTpkSl02 z0@`7Iq&rs#Z4e+Uh4wi^p(S;>Wi$%fKEo&wD#qQ42^A(#Fp`Dl)`F4Tv9cah+^#7Z zkWc3{*-ICodHYj@rrSKbfabu;pvm1GE5(0zDE>*+E%U)kmiJ-=wQz3EGFEkhF66!S z40;?kH~L*Kr{0l2SyGtOp*)1tMRuGTKm`vuG=hh$Gst^~Ep)9zenMyS(CSHDYz>|O zx?@E3g9m_gzgAwo?e1Hq?vuLw_|Ntc)t^;hTl;QS%9hL2zD}oQ!ieoZvpNqo5Q#BPk0*H!o5nRi+) z*Qey0=5p&H1{|qH&kE0U=L{Xwo7KCZDSxZ|(gkZ=-CP40vYD#Q5y!HEVB1>)cbOJf zI_Vt5aM8kavt6*eH?OdcAa05}nu0CB@un5l5!`x39TTPV@o!jR9fN%t(-$oR9NJQs z58tWqG1!-ieL2;gYvLsF?4#BuTg$#vViO-OwGK#ceZ$bYp|v zxRK(#(7lsBUv#AiVY{-y?tG9)?XYCsNqk9%yCC@bfX?D~_4UB4rVlUSdAdKG8K{aS5ZL2lQOheO_CSbc}UndTOUnGb!AdY{)bST0Y0ww`%=qu?5RpXbZr z8TCF-$Bs5UPxJelu*PZDYz^>2al zNwj#yclk84xRYez0$km3zx+xcK96SC<}jfR8eNtYF`?Rn7i9f*>;UXI(2aD#lKw)~ z%PtbKKBY7s=Z#0KnhrFM*iH-R+WM?v7Ikn@vKYw4H!+!xEP*8Px-|Rf zkDbtUuzJZgLt-{s&DEV#e)|;nex+RF>u>Z>$8|L6p)M=t+22XWaDa`{-i6lynIX7VzFWvl9_hwn$2fa@@{6jy9Ju8xrp0KKC7O_Y z@H8m!5ug%8*kIYd0b)TWy!Sh=HI#fnwOr=l&dQ_tm}++b@BC)$FwER(rX;%{+neKp zY^u>@5`p$2>@~1l_J*qLer>AWN&~7=kSVdvq$rR^z!90l6ow_F+ZINLI>%g|Q5EOF z14{n6Hfuc})&OLQp3vtC?3D-oc$~c--o-_G_S$BFPnLcZA7^+Vb+iZ(8<~}9#ARPc z=&xn)Yo(Y}MCon&<=d)F|W8GBv4FoMSM;u-Rba7oUBYWKE?Xs8P$J%181;o-xRB-li@uZ07Hn4H03fm zm8!$KBan9kQ_OA|w8`Vm;J49rGJLX8XxY%G`Nbeb!@Nq?xgh7#Si!(lM%(aJlOQ83?@mCJmPtMGY{LrQFakwLWv?*cDZRpt5DIaPIERdrMMCM1Cba;kXb z27$y@1B%_|+-bmwG|14lZBNfIGd+MYqUK!{OLQBhG5qN0fp6qRoA9eko9 zjqkUOic0$eU+r7|-``q$pE^~yZgK%_`#;m%4>@P=+Gju3Ua!5@+Iv4-S&oUJXLizZ z$Si$}H!Ea1I_hiPqcuiTO(JkzD+a+$QLW@UN;n*DT2!oKi^IvLMIOhmdtR?o8t8^& zE1Up=-Z!WjmXt)TC`(BIY4=+FIH~E*3H^`e$gR-T!%$FB&iwFNr{74{ipG|v=TuW* zDA=POR@<(S`S0^ZMX1HT)|CL|s|cu=Du{c&FU^Jq+hemF=m{&-^oL0w(N#EAbnF3@ z`D9J{<)72~WTDl|&ad=VFSA^QrZ2c8N0%)4^kszhX;Jg;6W^d%CG-CLt%l zBOJE+fpk%~b?>eCb=`Y8_0CMGfqiJ(g3|xG_jS_?O@ojD$C0ij_XxZ$hH?(e`@(Sbd4?+NI8|2uHo_E;Akz&c!MyscRug_Be{ zT-sKmI<=Q;=AAF--&|K6;$nbPYpt%8&-Ae=_gI?7@T<4&tx&>lPdY2!o}^%<519K%C{Sxg)AfjNI$_Hv6}Qw3$`1S(5Var{4}2{dW~9HI7WYwCT{R%}5i^b*jJm7>q4z1k7mR_SS~ih&Rp6BoZv z0TU1*XZ4M-EmoC{F+3LJC>l1@k$lN1Opbb~31L-83{?Teps|fQF#Etqp#pf+)z<%9 z(yh~NRJ|4>3R(}>Q3WuDc@;$aVFo;t9z3JwRlt+Ab3_%v%OGT(J+^vUJZIcM#nHop z;S!bLz+%0lf@-EWn8w>n08cArzre5@(yH_{O~D4>$>S^sWQ1pF&~0!9V^g?!OPFJT zEc$5>opgw@E5f?Zu!R{mfyIi;e*yqg{u6HzHdu2U54swak3*0It#oUz4XIew6^N<3 zVfl%AH2&UKw66Pn`H8naFai|@s=jUzKpTdL`f#Gqk-0`9RF)L?zm8^0L*7X5#@#S2 zf}ddNMmGe6!PoBgF|bP>2w|nlf!AXQ1f+`hK)S((-f~5vs8}afazqsu*80Hg+7NwZ z^J%SYcc)1f&qK0Enr(l& z=l#4opsfIpaFw535n%g$y6m{iTwSrPJ2-xSciM{9flywdu4qdR17d05>V`C8(uKMq z9hh{XZd9YXks?9$R~l~}7uEe6EPD+VDaEZIXs*W2}YB+M4G*$V^X}0}W5gY>`2_3qB zP|*gj#X^MxLhch(R!0QTY7{6f>!l4U%_1$R)aF6u)?|PZN_bHMLNCn!cdxaV0zY+? zXa6jJSPLol@TZ#7Jd4Vrd<&6Q5CtOTKI&0;Yd`&e(F7Dhrs+9E<(2#+^lVp)L{jiP%|C~5_rVEyZ>76Q;+)8y5?ZVD=N00p1Z2sGD z4yrG=nep$$=5YJa1zV_rrTw|xs&472s4m*MFgcYLlKk2o^iPCNP5hG6%GUPp^U1wy z^w{5cn^n5w_q2wWzi+2gg-wDbgh0Vfrw$P`e%&7_D6Y)AjBB-A?dAy2539XLly~nBanOu8C;nYtCj*seQrcwy=P;7Fx%X90 z%XZuO_35eT155Hdsb))OlCPV(i>1lQs?4E2VGbt+B)~|+Oh4Zf*(114olMa-1*Z9R z+UlVHl9z*-ihbeZd#a#B{=yg0WjV90Io0hQ6cTl(^Of83l~3+Yb()L5)6HBtTQJ*@i`#JhxtycZwO{0~?!g+-1uYvEdQ!Ib}Rrde$iZrhT7^_fR`>Y6>Iu371cFMpN9q`&|A9!>bwcTZ@^+R9)3rYCR7*ZEH$c@FOr zTACsnldhXZe$Cxh+0G5B)lQS&AV?U&4?uo9 z@=SU+2e-J)BYuMwhHmw3Qt{B|kyC-wt^-CWsSFP< zQ|T`=DveHGs_LzF(f3T+oJ!#4)xgaoPXL9hXLl#;baXg}op&?gN2E_EB5NdDD)&V` zdbW;9p2#`qSwUhG9P~U=t5-qxrL*_&-?PuWm~sD#3IGdK*%Y}zpxF{~U`s_QgVJ6> zNzriq*_mMX3)R8o_W!g&KmAxg!5EfgOLuqMdAcoMefGJM-V>7E6DGYUB)x4IZON;p zIFqb{OD^VJGj!I)YMWa68)z$+=}I~ij1T6BKtQ;2S10dny`u-{eU8IhI$XFjfz;Pc zp8Z%+W!#y;AOBGyMd?Wc)J=0)iu1(qAw{3s$n9h354wwt2fmDr=}Mkl8TKgL3y4&D zRK^NHUUTlV+pRceJW2uzWmLa$|FGUCKvOLs(C%771~5gKAbH)Lux>dzWcoGlW}YX3 z-(j-6pIM!I+pFmX>G`R`V1}z+jz@h8n6B6}kB9WId@b}+o4x$j${DRx350|6CA6sX zP<#BRIqp!u`;8Zzf8K8FMt4;Hh6~%1ZTaQf;d1LM757Y?&r&|W>VhX`Bb;~C|6_%! ztd)Ci`po*rqSbH=L?(rey3keX^1Iz(jGwW2?-)(cRV+BsG`I`s&u(E;RoGNDY^o0E zg0Tv!Sz5%?JNSG1M~Xg_=$iQH(r4 zpFmFZ^xc46!ZjQD8$cjXkD?%xF#vD45O`S4#~%eA>U$Ui6DnuZhAnsvg|kJqmfb&J z!b`tf8}s1Wd9Z3cW27#mOCsX!a;vxNs+GvN%FllE(>ld4(5Bjq1zHf)4GD9w@w8Qr zir_g~?1(VZ7AlU6vz0bSyh4r`m2~48b>VmiJ!day|C}G7;R1hIC-F0AJ8ozT8|}x; zDzJqw36|sY(6&As@l^m~7btRy?0%Z)_$Nz@eV}^#}Ix7*-+yb`?k||!Qd^rAS zsRremi3MPt(T4{{5#G4dii#MmlxU$^riB1acR{^yhzn}6a6#?5EV_+wK}ox~A3m__ zpB3xMxFB71nHe#d40m4cCc_;oYjtySkI2b=H+P=)Ii<>!dH>#xuEkzpHg-M3V0BzL zF;N+*){@b&`UJg&Y-OowpAA>S_KDmRVN23Nrfvns2qBs+EV^dw4WFGuc{$#AV8swq zC_Y#adoDsgpEOK=s+t731$*_k42e2-KPCY^5^_`yQE` zIHq#oK`RbEWYwCL$Ed9DFys0H9C)k9IJ!~;?r?va6B9)lJc1w9H!hmz16+pWss)(7 z4TDU#Bbm9pr9uZsn-M0W^_ArKAyH})SU{(8s4yn@-`yH z$`Z2Bs#6j;)~Upb*=6fGOn-u6bVL3u9g`R4b{n%{$BDTEA(as|;>2;91&pXMy+LV= zs4+dGwC#&>96|!bS!D?K16e@TC-Xg_EUMcLS8rqi@=B_h> zTgDBMhauep-nGvHH(3vWN9&Wv9bZABW$cs1QIWB)`*1og@4g<`5d96(F@w32xcVP~ z7>bT+mO#~jpkbPv6Y)+d$Y=~zYbC-NG@T0^%XGcSTU%%D>BF0OMB{Wjx{F?stxMR`H zEJQ4#8mBSnRV2=LdTsJ*q}*xER(*L`8h|QF@-P5ReB9 z9X7hNX8eQ76jKu7)mAWrvm16k9FVe!L5XbV?^}WzJS^ONpyvN~C+DbBFYw?dZJSPD z7!U#|_nfWnV$GR+vpiUA9s+QaQwysph=aIaQYZVm1D)0YF)cmt9^b_}ZXtnTRS*iOScD~-aZ zzObe>X%a=+2qH}z?g|;#AOoaS?<64mg~n_`$R&cKSG-Pfh`pCF&MEfV+!#1#=tVwC zIU9~qRm@dHj7~Rjs+Oc1%O^Zf!+da=)E?R+wN4Vx%xjLFzHpUH3=OGLez8q99 z@G#(<=sO^YiMhb9HWVyeI9DL0>0Skq1;$k{s!C4WXdHqnHD3Nc2qBUq({C)Kz*>R% z{&KV+1pxE-EMhNU{vg*H#^E$F;8l^HCga$iOW$KgJq9COo{9ovzO&fb$; zyxn<;v4ugFP*8GE5*jb4V;xG)ugf|_sB7OMz*Tos9_lCeyC9+xk2*0@sd0;HU5dLP zC!MmrrpFgSCGnRqpCB$9o$wEm=@FL$U-cA&d-GL*-G19DmIl_*0zHeq1n$tSUWb9` zke$2HPiwR3j@{_&*lux|nbXua#@A7RMzHP@cV}BIXJQTw?Rsx&*g}!uxQ}1 z{kx8N?2%)`bLbz@e)-BLZh@(e=GATaQwWee7hbDLqhf4qW1R$vXOmcE2Bn%eHI-tJ zUd-tijFTSdSp|Y6VP^Fs78#8M!zJq*S^Tw{CeQHRhZ59fstIq5%~*~Ps&RFiU_9ES zKP_Wy0hCIItwhx0hZJ2_$cL5C^illSSaS>o!MFBT5@1G5Mv%~qBJg@AkbWFMkh27W z^V=uF;)t@jE&&_%gF2QV3m#UnhOAW45k-%LS_V2|pZPaB?`T-fcC-*K^gVY577{rJ z)jJFM=2%r59G8l2uOAF470l>;*OpiSjJYsh1B(FmYioq2ej7@fM??EUY!MxhG|g{^ z7i*T8{}f8)eVLK95KyQX@K9*5u6m~PZ$lG4JJHQgVr3DCZuh zSix$(vzJS1gBLjy^sFj$%|6I@_mHIn7$k-((nkBKHtCR9xuxCZ7aAaO*p_yO1l?Uu zYEQ3vfkxMtQ9;oUtR5@Ly0XZss!DzqBNBY!6hW;pu5y4-Q@m7ovnvte2=}~OJt%Q3+7g`r0c2m-U~H(ogif_meaUeLNScmj)hpu9?Q4wTdobS5QQ+SGB=DJJS=u zwTPHZ3^Xy4GSU1L@r||(s))BtG`~eeW@3aEcQYlzlitobO^;KL4G}Q#3=MpkuMVp;-ZGxn%26lIk)dz5Dvb4U z0lHYqdPsp+6UvSKw$Ry6v|YhZq-^=0fdlD@Dl zF3^EAKSUOZQLStc5#TSZle5|Hg@t0K!ZhNDq+ym-&XKGSP~HeEkEIj!5-qe*dMLCJ zl})%fTZFWVbqX^qvZZTSr2CJMf>tj9%h)yy%JBtqQ^pGVT*;S&tdTg3{n;;qyhM43 zc0Sj9iiueyTxQ~c!^(C;>;TK35?r!aEP$v77dMs%@Mw__P=YQFPy%?e9+BCKUz1df zopqZ!8|E+A1q+3<0_6DJFv7vvlc(Z>>r#XIy&ZQkpfK*T#i}&!Md5>K2>VA1oA%PU zZO%*M7LYU`XGQ@I#kk`DAsD%J2`_~Up#C~<5>9$IdWvtqE*I2{qMFNI-IMumJg_#h zXb(rBW15|`($BqqvnjK{mbF&c-Z9XUDV$yDZSt1XWb7yOF00`knZPyDXpXbga;u7Y zM_`Zw4iS@mAXZ$cfIZgao<_(>?8C_0@XDv5XCa1rS^)y?E4G=m;#*M!FTUK?RWZAT?28vHK0pB33#ov13j%Ze^1eXHS0^a4)qfZ z(ew6jcA6A%d3*GVGCq@0D3LvB(AzUA1ej4}vz5*mh%h=iv7zwx*bZ|yjZr1$wCL@z ztEtK(n59mpEV_ei@v-Y|wCwG{ zVlHn_=#+aIh8XT9`n)|=_x6~s%^=Xj9e<^glP;u>v|7@z{rLNg(y+srHZ}y`i)o3r z9{XJwH;yg{?#UpQEmf-nKAx)Up7){hqhwGt-YCz`5m{CK9PQ0D)0g}zfl;=b5AdQv z?PB$UC(xL~JZFylZuS|bM7S!cAY(c;U`Zhf0~Un|t~3vGM7wVmPIc9NHUUNzmbB=2G9;UO1D3pKJ24~a_t^-ew5mnz z6&CLGR~-{$1lgIyXS2lo2xNr;z?n%b+Gn%40TjUVL7ChuEQ{uBLhfxE-o;b_oXnQ2 z>Q%W`j^lv|`;k1%B+iK?MtpL`FpV;^vMScR;%33i=_{qG4D!ujkgv)h-wXzMXHw?f zv2}GeCdIC*lNHRiAl74OZmt`h9cA2!JjQP$Z~?!S*uhC|CP) z$kfXYnK3zJRHZRB^VAJGWJb(+w4&F{NZvpUE##1yz#%hMcF2t6y636nkRiH3exqsC zXjDPKmU@9hre?Q7_U95;<<1);Q3=p-95R+C%)4(6nF+phhm07{jC342fTcpjIZ-%d zCdv+(iTmu3F$W4(ib01Ah$Dwg9XA1N$GI%nXl%y>nD`BB2i__syrIC-2ZL_5uXOTm5g|?cJNXt@k6+j=r8zPYR&OR{<`Q>iFVNY z?TJB5^>g;%kU^dmpbv}y0v01MLy3XdTx!gPTrXq6^}^&h&6gybk$fDewDNGOXxuLt zoiU5ty*8%cVHxbYh~wYoE>7!&^kw=%K;^vMc$bVOqrr&ZTSGxver$&56lVtqL)%u7 zUWxf{l$@Jmd9Ikl%`HsFhJi` z3FMFe5}$vIeoq^N~j2)AEEE%An#SW9{idm<%PLM?*P{`*p{h3_R((rwJT zdflm_BiJs&(THd^uC7A;naipkNjOwP%W@EjeFVgy3(DXbe+fvH*ghop1scd$1A$bi z(K=Ow1h7CI3rIEY+lQ^71zm))CR&W6pk~?9Qxhgn87+4pbGjaPh+@?pWi+fD&m&Y@ z(d%KeXyUd~CZYe-*O318NHX&8Wccr7XdLf%N`{pTH?W@vV`d4RFH_xAkl_fppV{_( zjO~=gX&i}<_wv2btdZFSm?gGxSrmhI)FVErN(q1QwvVwv;tOSa#D}xnxK|)PEu-S0 z=ulmyFyqpp1ggXbVH?@{H)}6MfA6eUYixw5%2&%dzuLN+>fkphUIUiT)i_g5pJ&ps zwuKAZt2n!Cfyv4EAyEMxQew7jW(tY)=*k%J3G4t1r{pKv0Y?$JdTGZusi9?R9VeY3 zwM6YI%K1kLL=a6sG12Fwl?o!Oei;2ZD`QeU>vPZE1$*Kl%+b~ zW}jmej+6&zg@+7KNAddL7)^i@ricJb17bY_G0YqqL|@ffKh&&hp|g)j!+A&=tCmOu zD&4VME;L3UV;b}zOBzCo20FFsCN)|h%D6x&5eA|-{E#rpGtd#c>sV63m-g2`blz-=82g?2crcWnclZ{Exw2DXLa-@COVeGrEeb?Hq&QzaLLPGyUrrr z8KCw`vIq}I{jiFJId~@cqbs1rfxrB}xm!iwQxCjRl)J5lPo|mZttuRTkUo51WyHc> z6*#qhHr?471*6AY`7)^6_*6Bc@;a$*vw0wCbAHuaD*?#?b&JI+RS6zJkPwNt5YSjz z185A{I2spCkJ0?tB1a{}^%k5Ajr27~8iQG!7gJHg@gAa%8KNp|F(Ztw zhp5;*&^~QP9Ahm%uNv{=2yc(uTsW!X5swvKW|iH(2C>i%Ie#4?7y6eES%^G7pft26 z%m>1Ho4*j5&?x4u3CJz(Cj&UX5NT{Q zg{8nRFTg_>VtZusxsT|Ce2yVK?Sz)%&u*_2UiYx}>FN3?(S|vqanq6mu(j^ctGd!# zci3e5!lP7gs7*_{{nu7nIe2Zh0O{3cXNG?9dG2N;8^b8Rp*#euax52T(wmz=?g{;3 z)^GES^NT4Nmf)9=_z{(DOdkp16OHm{s`TSD3ENji59V>lhgCw0K|Wc{>It_16zU1}V^!WK ze;1i7j>p?sn^qhSpLHR6*H`qtGk0dPVD5*|G|XLN#SvFx?xXu*?xSMv>-FK$l|%CO zwsUj@MD-lwy<-X&q27m8!pP=xc9+2ma&~$i>iea()QX{x=>!4flD&?&dZMK9bsJnw zlB+-yIcDX|F9C9@AcK0%@@rRo}=qHli~}pdB^jY9K~eA0bp!Wg>#M z4@(pk=}gQ8N7)`2q6)W7Gw&awAYvw4mXeTFJFEaCHGD*FUebx5XET!&Kt@T)yiW`h-nt&PSFO}#|-VLoRD8#|4Y+xzT zAAQiIP4s5Yrp-*K%CjW{9$80B_CAFbhG>uDD*9+ok{os-0r;8eb@BaMi=01=HX%R(_{v$!XmhyX(RDsLWYp?P8U=Ga!!IDlImmu~h*R zLsUB0&}KHKni&uUQ*0^PmdTY$XVyKef2eeDrxqn-3N$NpFawTaiRh_xvFT)Z(>=w` znr0)sYm#`)Qbur5>5(WwNL!kdUFL(Z$San zt1E!kEjz5X@+r90}z{G+8qujB9D?Y#fked})*G4q&~ zVz0D+xq6Y#(Ky1{HW{;bj#|#)k`56re!xB?U~sv1@o~!&A{+6ayXnXg{p{z?Ol2WlU0* zuJT*K7wTSLx7r)6tB$Aq0xtH!(PkYWjGDc3l!Y$;!_ir>-Nv@ad{k#@8!}h~M4Sr7 z34YJ3jZ@PR)VA`GWfEoM2v?C%}2dKb4_P=c9oTLt_ zP*&Y7@q`sysyXV(DnN=J#$p`B6%>_Z4^tmb`Hs~2-j_4=3f1A~($r`1aB3zpQYY#F z4zUQM0bDHTJ^mhBjJP;<3i2-itJF)pW~XvkA3G*{*W{I7ZwQREoHw*2JsVYBC=+_w zDzEDZRcD-OozFZGg(LHmwhBlL;MiCCam-NxJ{6CIFG1pdK>>mgM6-$WtUt4uz<4Y1 ziGhAC#6O4jtH(RzJluzQ3Oy8uJDtP5z8Izep4LHa#5#2z=dE=o^mfrxb>%1zhT3okp~eu`G_=a8jkr=7HTnw8n125uWm1iw6`a zoDZ<(q5XmyCim5|{c>ig!H9iQ1gdpaAkcxnEJUC~LA4J+nJ|vO$JR>3875sb+=PWR zSLswz2B>9Ba}@{i%{)=_yM!gbH1;ZoqfyJA!e{U-j^$Ng-&yxe(ZK?Z&A7l z221H-9IB=g04(Dk!EzQgjI-;jzmB;?P|l|1(4_AI=Je*)l-{>>wdZ#vYanzQ*Ui>< zbQMgto1l~l9ioSab1C0WYhFfx-T^0YsKNmNjvDg%Hg*M0XCt<*z^F0BVay|)DNN_n zimKyb-vDtrd?Uz5)x2|jpgSTU*`75^0GnkZP)h(3yCjjsD8NN#vG~yD;V}a{CX=+G z2;C_NMZT(OTe7E{I8e5}HJcQpUI^uXEKa=Ie=f_UAt+CwVTuU+qmb(Mdu*$O@F*SP z!!Tj=4PclVh?=cVlgqqdb;gpB={r>!>ggPdV}J~+Q|JcUOy=~%PMO}Z%WfyjSR>Hk z@*rE^$+cm40*q3?pUhrP;k{lO!I!lG1e-!P;^g2K4XY8}WTKdf1y-!wD!{eAO~*dO zF@S0)P2G{L(i4o4)w8KiTIB=(qh=2Ev!nb+n3^sozRj%_nxAdpAI2`6CEQyk{8{PY zDb9&NS2_;Gs1ONTn2v{q>9XQ@dtf#un1#YD852cv1A!z%HJT%(fJo>;joVU(9)MV; z^#|GqBwQsTvT_b#=|GYq5Ty&?jpk z8_*~VX}=E~6Wr|bY?~D+Tg;FVAGD?I#c-?znD}!(3P$Try#Xz2NNbSFh|T?Q%oY~y zTjoV|aj7;-Iy^YK8ikOXtFoo5I@0qUUZB*{Ro!K9$mTK~4L|`IeR4Emit)l9zqgj^ z$7M|(Lp3k$-Phjf;lGx0nellAZ$Y^L&qmr07YM`e^w%oP=9eGuu#@ckhxp@Q zf2?j~%dVTP?QjJdXH<1}Hx;I13kSJjchzi}m}4Cb%IiAdK;gt-7bKJ&U z#J<5|#8M=q!Vm1VViHn}_28Cjz^@0ZBxDq%!!)9{;dBwt`mLHQ8>6Q6<1 z_>u0HnUaJJW2(cBkZ6G&LG#9bm@737l~gk8FAfGAD^R5HIcUgE|1&}DG-iMotaq6eLM+}MElewR`9o-G z(Y5^06FG!HMfjrhE=9r!D>+bK4gg646VK>p;zY8MiEwDzt0}-Ep&0TCz{sN;@(Pex zeDJjy2j0`R`#Z?GB?Ffxj$tK+!PyD*R%W*M@javCX z&JanJ%ueh+Kwq#bgKk^OT+&Yx{g$%(Agc#fy=+yX6Cgn_NG;CtBloy2ieu(@ljVou z-&R;D$-@Fv@u|TIh}d)}<+p){4L;%Edi;MZA&kV1m45IQV}TJjG*?=ouUWDmItw90gJ+LEMcfMnhm%-Kvn>MzsoEE57uS-0D@rg zZ}I_y+kFsl`)wSUSmQdbe70_<j$gribefvh|EvUI#XRT*27q}82itv>SXbaZ;@ zvgIpQu3CL?_t3)*KjO%T|Nb95V$ypU7lXoTW zPWC1@CGSbzn|v_&T=Mzk3&|IgFC|}2{wcXV`AYKD@$@h~VBtJ}kn*1#JdGd?o zm&vb^Ung_vh3Q4<#p(9+l5|JIqN$>%aM5|KsV& z?qpB$>f|-aYm;XrmnN4d&r7aIE=`}GT$a8dd0}#8a&>ZT^2+2@$u-HYi z=aLJyJ^8$+p8K~?PoMI4&q)9G|9NrxqVy%{U;fW6TmQ?M|MkE9_rJI@{m;A7KRfA> zn;-SZCqMc>o^i?_JtsZ&wCAReIsJL*h6f)1dk=c>LpC0J+{0dwKJ@DJkTqFn-OSnp z54tKnV4~5SY~gxvk<3~gLycr33P(_IWrL23;zBKzDo~riJwYPsOB$K#;=qiEl>6H=31TtR48$^O8nAFnDWLNYAQFKuA{Q1?wJEp8k!tp zWR{ddct?}8e7#HAOc>Hn8Ir9oq!or{%$Lrltsl8o%FVxx3c2R)yuZX|}oV3x*kt+4Dns`+!(wST5-G6#Bv zc9vDFbH?gCPQBP$v4x7&yP>ETi(s$bjCwgri+Z1@dhfJ)IY=W`e7nC|Z%?zDb*5+< zPnET*b*^aWGm(O&$~RFt2b59y6{`H3RymN1m22@DyZsca{HIp=<(BU}kptOc<#+Z~ zer9$!A<4`ojt?0i>C`Ts1gdL4d%bm4+I)$4Z^rOmn&t=6fv?knDYzp6K6X#&Xnqj6 zcaYmZ&HWR~jMy{}dgsYynwK&HV|Bf0Ru0$8EXH z1u0gi?FUOv&*2R}U0vNSCj2GH?*jfR6#1n^^LbeSiIaM3KJ(WSi1{4Xp^zjb1YaL~ zg1IGad_XT<})>*4K zq#vjG)0FjjipkTk*0Odg>vLqSRcCBf-i`j0wX&Y4{3Bt2h+C^QzOnq64){|19vDJM zyP%*Bw*lBeNDes(1q7=6!oIlg`vN|*H2mUr0~4<BVp*3d>o&5MfLbFofkd3-!s9}7Tx*)++UCvSGw_j` zo~h4nC2P8KM1F}9A0@H2&>v+Vmi`D<#Yjw(Dp9XCWio2i7FZE=X@VW4OwNeK%nZks z$F#ncHopxI;TUQu*MJuCi}c&ApV)dvny;ZxA5ov7OZGc#MW;m2i_y{m=$&U2_%H>~ z6@J7q3r|n;4mlt4oV$~DCGV1E*ofyNM4dcmnmbLIo5`Ocg8YCA%Ujax1IViG(1)+5 z`K2oK{(W`gGL?9rw|NWHe@B`>Q(5ozteXkD$)BZ+_mDA@FFU#QwKV^}GH$XAbc2i1 z{0GX|YZ++UWBCu2ez(%um>3OI!1AM-|48}o@_aU&$vH^wzbN;eP%#MYkL zdR;aDl``H+2A8he2*onqR2;|AG4JXb6`la)qFgajc#sT z&TRt9*kc(pC$}!G=KrjW-ChETt?>|{^6YBI`=t=rM^F%7guXdT^D49uEwJRLM3J6TiMVasQa?fKW#t z#xM(V;=_0eH#c_CdR8_6j(~D4KpAa)EX`k{)GL(gw6j)r^ogxcr_IkWLsOuprJ1Bp zl5Shbq(Zg`q)}xU1U{VRFVOe9_&z`#=+YHZQ_MjZ34WT=;x81wLxr!Q@KO9+e&m}cozT)_do}-tGG1yKW@iADs-<#Lj_C>KQW0tV- zVN=sb_3M@VTGw&MWZbHZ7m_iRfv(?8^M6#v3oJv%k}lVHlY5(TpKrOGsAF*)6RW!UD{U7Xpf?mgF7HS&l#`J6JILw{j_r?$SI=3h|8 z9gMutF}!V!1bS0|1+syJFY=Tv5Zl% z>T&QZB`l96{QYZ?Bu zb{V;Dwz{M1cF60K`~xa>3B`=Fb!`VGP z8KD>z@)%4@>dOsj{&JQ5wU@=B0}6ys(8Eq>{X?3+LIr+h1(sT6WBE2y(wHZm=`(VQ zO1)d9eo3jNd3s9gBWZq8{D2HC(gnyR8UX@=?_Ql+t>@X4Uap zee!)iVcm1GGG3>QyUAE0>&6Cn&jChGm}HS`4 zRWqGI1u%OT@NWqg;62e7c9W}@u!w<_;D zXzzezr=f_LKX8e|yD8Qt+!h0ZO$NJol6nkJ}`hCxWl z;P+yX#$@WfL9(ty1<1zPf~ZN7+(Y{(G>|MPc-p4&2KDC~^au0L$#lH=I^LO==Bs(C z!*5W5uaN*2`SnVCl?41nUzhXfCEnKl zDaTwv?I+8n@KROw6)J1Do|fiUD|I_57|{z;tfVCWi6q=5-=)NtNvu1e_3|WtnUY^3 zc_hCb%KI02PqHII%>UXD8#q&n4cyMpxJHuvFp7VH;w*#n!+HO_KFx!2HxT;zgOBcA zeCR8+46}moO7bIU=5uOhKUVN{nFm=-VoOf)wS4ti>s+vcBWTPDzM;7*(HeF#pP|U7 ztq74bA(qKI5mNnebRYprCh^R=D{vLtcCO*TbE**EuCbXX*sxxac zgi`SKDP_zF{wx5f(8DpbtLA9(ZX>TyOX>k41-=%F$!Pecz}#X2#=Q)>v5 zqBY{EXzhXIf5=+H!$$h|NZ(9a!BmhoaaK=aB^gb6a4mneO$7dm>2@rC5TAX}s%P&@ z2)weTiYe+WRK$Rd12j;W>Nu-7 zR1j!G2F9M6Dsn*&MNN&RG<`BES~O)aRxT-BM5Zihw1tx8rcNqZTBuq{#F%KAlxT>m zSDcJeolg3_8ufW_{o>|h!G40q_7KJ67{g7+8*Zs&wCS*&Am zotI{!sxKoFA-G0geBRH5t*z((wX+E)ZG0$ce%LtOTBtnDR_zAV&6fgpyMsjO#ig8}0b+#<@aDF3}l^L>Wv?tsA{)tivO z2eC!Pj+xVfnVjkI0<|aPHa;kK4_F}&2U;(in{D17n9URwki+n2dhk*iJ~^O(Wuh9z z8Z$s0ZC4{j6=hIUFf)I2Gb2_WMEH?_^!ES>E1&#;!gcE&(wSR+d%Jo^#VKr9_6tO7 z!zKY2*wR^>tvB4dImv&lDsPCmMaI7iih)GKtZpH6L z3JBG+QfVu=Xxv)150v_FlK(^_dDDU@70JUUMDo)3rlZr_ljb`dog9tck>uZ1ZP%Nh zLtONP)}={)ELm?5>`;S`pFl0WQ%-8VYayKTB^ZVpzWs&GoCV^{qx$RYUR`f+F z+{@bsJBx}eF|Z$gftfuz8x>|R6+0p#X_=mcbFjz@YH^5nM{{tl$2OAD zo{THi7&H}jKoE#UhyQ>M@1etNDas$g`)-X9(f|xvv!Q>PS)Zli=GG2f6hWC+QD%x$ z3&3-VQ6q>enQ%Ez@qZM0h_H!Hc9V*~QdMSCTTwhu(cFANnMAt8Z7`gFW*S-lPz*mM z3jxoG(#pT6&tAc2A=9QoKYUp~ynO%lZ9*?8)%Q>O%wo$tv#9SY`eE1p>)VCtrd;7y z_1!gmH`u{D^uyKrt8k2<3o}a0QLn&i1HU-Qzpl>}jSw;e{#}^l-_S3FEFjOBZE15@ zNKS3-O!Cj@7lkb}G0uEei5FW1cHRKXjLVb!bIN@Yxm=~Lc^lD`XU)y6XC}>O!I`Hd z(k{r~t73$QMIiYUYs$rEHRbwAQ_cYj5YGEl{soi|2j6hohS^yAXBS=k#MT^^J(YgG zx&}LnO+a4y?eqHW3Vs_AXT-cUnDZLACsBS{C$fR^nMCoQ4q@M0*&a=9i&uWd155hO>7(bp<~h z=C431JJesV;`MNUW#2GM_QCynNwKe=h!JrQSrM7dzJ>Y@N}bTUB*{Odjy;o(vA;F{ zuo9Q4ml^f}WFlhL6f8Xe=63C{S?*&fo$(+=z7PpPpu%?om*6Q;Tx(ORzq%Kzx~ZbN zebzD%H@7{>KcdcFY9NhU_-y^)_2uRBv?zUxN;pvlE^hRgEFi>N)!5T$Y=b5LQOO-7*-XjJ&?GJ)aUcTdq9p&A(%VU|th&~F!!WM7%>(r8{t0!_;rYh!yq@QUs^AU0$X51x zp2zUKj;Aa?uj47Z(rbDCOa$;6UN-W4b$IUKDI3o2kbV`&$}(&b(eo-gMq zJ?~{aO)rt%PL z&*#Nu5-%T6;pfFN&*jBL?sMYHzmc1w^V9}w za?(iDJM{cNjr?nR{_lp{1^%w#3ieY%`fo$}+=iP9o*dHKLi$M!w-}rg^3M+GvqJiR zHS!;*{=W(7zYfnQhUeDs+|tOuuX6tr)YbC|4UUrL`B#nnmwNtX!|kH~qk-~4`Y#&! z<)XR&-pHS>^nYu3$lZT!cc$KU?WPZ?F#L`JWp3U3&gmi1&DW zBY(cqe;S^TYq$yjPeS^!Kv=*3aU*}Bo@X@NE&m^ZpVFr@IeI<@E}`dX;dyGqy@h`S zRw@6KkbZPXpB&PUYPbVobHhD`k8I?-RQ{w!eyyG-hUWnTe?-rtz;itx5Yk6BJknqt zc&dD^pEXIdwvn4>`H1j5Jj}ykkcY}08lGJ!Qt3{^UG!NhN6E@TiT0;2Fw4u#taH&z0b%o+}z2XtErAZ z(1hpfnSw8RLig9`$>n5Uuhr^ynr!ua&XM(#(9=!&%a^f&t@@^3I~F*dU3M%tLdXS| z-*Ej+94O1GRh|WIy1)s%Qd(>(<*DsfytMu3tg0m{0WINPtHn~as8hYt&jZRMtxB&e&KakKSMPhftJ>SGgV)*Ho$!PCX8g=~3p?OM zAOJ+CIM$|>3RbDSMDOb8YmzuH8n&q2t;3 zdFXHxXI#e)f7v$eXz*{HBvpsy7~%ni%lQb@tjiuo(oK#9z+Dvzt-{T2;{hAP^TM>68cTzr zaaBqcT&srmIVxJbsj5etjx#2H5x1c}I+)eM!k0t2jgMtH>?@#;m6^|cs&aALoj}wf z9;hn0`s)}mzqYOzp_O&uCbw3GZUi6o!rh2A?xGvsK@KSa%%Zrungox%J>6)54C(Q$ z=hXvOuLZ6S5PTHIzU&SH-!FGxOz>KY?p8<^2c~Q zmK_XLae(7}a3;3PegV$fzvEt)qE7WoKhNXp1|Dwt_Q|4zSMOY%BkaZ1YtGema=K`p z({RPUa2FNqYa$z2kbR9BS2sb|4-yk}Hkd-t-8Ycvh6hLedkd2L3=~4`1QemR1BC;? z1e6A-!z9@~u@kKBlgGkKQv2sIT-dXUAmxN?UW(H^1Rtgxp>SR|!9?CVk0K2?d;7Tw z`Ed8AQb+5ldOPE~r?#IbG3$g`LdGaWzgJ7gp-WdYlKU(H6zyC{fUcpUF&YT03MvI+ zt!I_3&SKGO=cXiv!C}0v#p? zihZ}nitXgbJ`-Fa2gb5W|7m{xa)8mBvc@dyd0Xli%JnI=a?A89wK!vfQd_uUGza%i zsZC5=>a)Px3(c*h&_=Gl2+d8pk!i7BZ`t}uQ$jt#e6Uchoni|0D+jEQWCXf9kKFDp zHViYNp|dK{b@{>Oa=zvp41}4fc&Sl!9qLs|6p{w&m#l__=cA*RW z-_G$28k@w8qITn*;jlB&s;aVMlcXq_#zsNE@Ln1eWHGLg%t(6*{if@MW~8`qo0UMD z+5u#-QF88L;bJb8An!jNEhuZuc~}35^VYm^>GL5RyYwno3Dc zDuk$hrQ;(;9>4%17VnPSSmtBIf|138;STxtzH$?DC%mxf7hcSc9t%;6C*|9puef`%U1(VF#7bkS%7BDw{fgc8YvZmr zCZnwjM!4TD;s5mfX`$I|Rl~E055LQ&I2ao{a3R4|brglti$uVy&>3-t|T4es*k1w`W{<0w&ZLD zY*D1Pg-o4UtL;gqz2hv;4>UBF4sE$Cqn41{Daw*ax2#XNaqKowmeiDga3{JNrzTb{ z)+XJOwTjAb$D0I7$E_LFTp5tql2{_EuBWo&lQ~t0Dsw07=60N#3W~_N;#sxcgB#7i zw6$Nitu>A|qsHvEdf4SiOl9w^YLvXlLzmhwHUCB97kT$mbj{>Xm7Us^Z>tOSjg`Cf zoY+|Tp>=6JUF)XDCydcLczde$f1(t*JIPZO1`nF~77JgzRmjmKKhCt)Dc&~N+qBP` zMucNfeN6I30o(jWn+NiW_~@$T(c=UGTmURtUl~6>xk??-YRxq68x!8gR0gDonB({& z%~`@`0rZ&Yp~oHr9LKT@Lk}U%0sZLFV#^J=2Swf}gb3)dM_>_hifuBdpoi8EVQQLj zEH*{VK@1%8Ico`DoZV8*`eaWvz&W4?s4@}JL$&_G&_lEB=&{t%W3E5~>qd8(XYX>* z$Ig@xN8_h6OKlOED@9NIt9j@_w{}*$wH{i4B(!TNL+&ok4iz~Z3bYspEkw8in-i{V zWedy<)UEj}5iWBzgm5)q^9fh;wMfF{;F&-x*+eljfpFvY*Me{h(q4dY$K%YX*53u; zj@~cA)j5HhAG)T5m+Lp|CFtaUQZ;Q}*M z(2i>TUChw<{hA@n6T#s8_~uo@(tk;^KfpU(VcGm#D!=0JF{Nn;F7j#1vF zB`e0A1mE34eY)5UacCwZ%_!U;u2qcpOE`(snGj-9CO#MFadESI@n`Rj%g26OTDGXRW<0qR|O@g(b1P*(RNzLq-?| zE2KWT`;`6D3s zQ@CiQnqSL|0vlU#-kF#tqtINbC9xILL0E!`t*_|mGeR4nBni8wD9b(86?ENeO_^C& zS#oR@R7__o4TLfeSyFgZJB@Ucdh;D(L^(&rmuAwcSNI8ZQD0To8jLD*CF-i%t;5-< zvPOGq>0*`CTHvI7`Yj`v^>ntZtb(N_Wp%p-V#=y1sW>|C6?WpV1U;Mh_mfVV-vR@M z4<9KHKmmD)6j!hccsm~jUjw)7F*{esnWcyekqrtHcCjWfz@zl-;WPo*ZrXY*MSloG zF+;v7`#&`$?@PtuSBy|FI6h$wVM_hi^hBxurk>Pw8|MaoTko2NhgH7HYaV7Hvgy!u z_1Jat(67kRjPKfHsj;i*r~#JBZ*=)k=s*I;K2TN?B%myf&7{9olw~I7-}-#qyTKT{VVKCcMC(FD zqji_qyiP5o0x}JHenEf(Qa*s_64+>kNv%yV^TdvYLO8R3Y5--3=gv z$pD7=T2ULA_Xa%y!<+R4Np^vOZ_&H+#@Fz=fKC#w35Yrg%qjLhu9SPqNSny^iTtkb z?S&{6I&&YuBy4qRjm_K#Ae|n7WPmmjT|AIb3>O5Fh1_Fk#PO!UPp!rkY5yIb2ED?( z8w~|AQ%XX})MaoFmIY%re1x`)v&-z7=Ipv7C9at-Zcp)47c)}!Dbl7+YKqelfz|I; z>{k)n9E$^`F*g`UB^a>GPUN4yYp-VMFYnVVMT7;Jd#b+>9b}%QbBjS{x|Gr*M`v5& z6*JYhdRP#hv5qV_Qw|`}UD~f=51=zE)QD%p(RnO?(RTzWq6&$5(MlLE$72-lH6OVH z8~rWIpFd)3|EluGd1(NXW?mVlc=_63K>kQ&f+ZC4C$N@nn9;^JregC8@a=20mc${TpYPpTl1PZ=XiyA?|p|CUz__c@; z&_>?~sKAyp3ygr!KE>f7*4Am*L97v

8iJzyU23@87;y3zIRQ?}xh??+rN&go{8+ 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 J#7tmp{~zBs%Rm4C diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm index 7f2d3a864d526145516ae8d45a775b7888262b1c..665b570b511bc15ff96c2e413391cd88ab79ba7a 100755 GIT binary patch literal 648922 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 literal 505440 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�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

PpEv?_QV8w;$K^*)TehJZ-A2a21 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 diff --git a/polkadot/service/Cargo.toml b/polkadot/service/Cargo.toml index 5e332fa951..ad4cf73b9e 100644 --- a/polkadot/service/Cargo.toml +++ b/polkadot/service/Cargo.toml @@ -14,14 +14,14 @@ hex-literal = "0.1" polkadot-availability-store = { path = "../availability-store" } polkadot-primitives = { path = "../primitives" } polkadot-runtime = { path = "../runtime" } -polkadot-consensus = { path = "../consensus" } polkadot-executor = { path = "../executor" } -polkadot-api = { path = "../api" } -polkadot-transaction-pool = { path = "../transaction-pool" } -polkadot-network = { path = "../network" } +polkadot-network = { path = "../network" } sr-io = { git = "https://github.com/paritytech/substrate" } +sr-primitives = { git = "https://github.com/paritytech/substrate" } substrate-primitives = { git = "https://github.com/paritytech/substrate" } substrate-network = { git = "https://github.com/paritytech/substrate" } substrate-client = { git = "https://github.com/paritytech/substrate" } +substrate-consensus-aura = { git = "https://github.com/paritytech/substrate" } substrate-service = { git = "https://github.com/paritytech/substrate" } substrate-telemetry = { git = "https://github.com/paritytech/substrate" } +substrate-transaction-pool = { git = "https://github.com/paritytech/substrate" } diff --git a/polkadot/service/src/chain_spec.rs b/polkadot/service/src/chain_spec.rs index aeb7c4a097..0bae2a8096 100644 --- a/polkadot/service/src/chain_spec.rs +++ b/polkadot/service/src/chain_spec.rs @@ -17,13 +17,16 @@ //! Polkadot chain configurations. use primitives::{AuthorityId, ed25519}; -use polkadot_runtime::{GenesisConfig, ConsensusConfig, CouncilConfig, DemocracyConfig, - SessionConfig, StakingConfig, TimestampConfig, BalancesConfig}; -use service::ChainSpec; +use polkadot_runtime::{GenesisConfig, ConsensusConfig, CouncilSeatsConfig, DemocracyConfig, + SessionConfig, StakingConfig, TimestampConfig, BalancesConfig, Perbill, CouncilVotingConfig}; const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/"; +const DEFAULT_PROTOCOL_ID: &str = "dot"; -pub fn poc_1_testnet_config() -> Result, String> { +/// Specialised `ChainSpec`. +pub type ChainSpec = ::service::ChainSpec; + +pub fn poc_1_testnet_config() -> Result { ChainSpec::from_embedded(include_bytes!("../res/krummelanke.json")) } @@ -41,6 +44,7 @@ fn staging_testnet_config_genesis() -> GenesisConfig { consensus: Some(ConsensusConfig { code: include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm").to_vec(), // TODO change authorities: initial_authorities.clone(), + _genesis_phantom_data: Default::default(), }), system: None, balances: Some(BalancesConfig { @@ -51,28 +55,34 @@ fn staging_testnet_config_genesis() -> GenesisConfig { creation_fee: 0, reclaim_rebate: 0, balances: endowed_accounts.iter().map(|&k|(k, 1u128 << 60)).collect(), + _genesis_phantom_data: Default::default(), }), session: Some(SessionConfig { validators: initial_authorities.iter().cloned().map(Into::into).collect(), session_length: 60, // that's 5 minutes per session. + _genesis_phantom_data: Default::default(), }), staking: Some(StakingConfig { current_era: 0, intentions: initial_authorities.iter().cloned().map(Into::into).collect(), - offline_slash: 10000, - session_reward: 100, + offline_slash: Perbill::from_billionths(1_000_000), + session_reward: Perbill::from_billionths(60), + current_offline_slash: 0, + current_session_reward: 0, validator_count: 12, sessions_per_era: 12, // 1 hour per era bonding_duration: 24 * 60 * 12, // 1 day per bond. offline_slash_grace: 4, minimum_validator_count: 4, + _genesis_phantom_data: Default::default(), }), democracy: Some(DemocracyConfig { launch_period: 12 * 60 * 24, // 1 day per public referendum voting_period: 12 * 60 * 24 * 3, // 3 days to discuss & vote on an active referendum minimum_deposit: 5000, // 12000 as the minimum deposit for a referendum + _genesis_phantom_data: Default::default(), }), - council: Some(CouncilConfig { + council_seats: Some(CouncilSeatsConfig { active_council: vec![], candidacy_bond: 5000, // 5000 to become a council candidate voter_bond: 1000, // 1000 down to vote for a candidate @@ -83,20 +93,24 @@ fn staging_testnet_config_genesis() -> GenesisConfig { term_duration: 12 * 60 * 24 * 24, // 24 day term duration for the council. desired_seats: 0, // start with no council: we'll raise this once the stake has been dispersed a bit. inactive_grace_period: 1, // one addition vote should go by before an inactive voter can be reaped. - - cooloff_period: 12 * 60 * 24 * 4, // 4 day cooling off period if council member vetoes a proposal. - voting_period: 12 * 60 * 24, // 1 day voting period for council members. + _genesis_phantom_data: Default::default(), + }), + council_voting: Some(CouncilVotingConfig { + cooloff_period: 75, + voting_period: 20, + _genesis_phantom_data: Default::default(), }), parachains: Some(Default::default()), timestamp: Some(TimestampConfig { period: 5, // 5 second block time. + _genesis_phantom_data: Default::default(), }), treasury: Some(Default::default()), } } /// Staging testnet config. -pub fn staging_testnet_config() -> ChainSpec { +pub fn staging_testnet_config() -> ChainSpec { let boot_nodes = vec![]; ChainSpec::from_genesis( "Staging Testnet", @@ -104,6 +118,9 @@ pub fn staging_testnet_config() -> ChainSpec { staging_testnet_config_genesis, boot_nodes, Some(STAGING_TELEMETRY_URL.into()), + Some(DEFAULT_PROTOCOL_ID), + None, + None, ) } @@ -120,6 +137,7 @@ fn testnet_genesis(initial_authorities: Vec) -> GenesisConfig { consensus: Some(ConsensusConfig { code: include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm").to_vec(), authorities: initial_authorities.clone(), + _genesis_phantom_data: Default::default(), }), system: None, balances: Some(BalancesConfig { @@ -130,10 +148,12 @@ fn testnet_genesis(initial_authorities: Vec) -> GenesisConfig { creation_fee: 0, reclaim_rebate: 0, balances: endowed_accounts.iter().map(|&k|(k, (1u128 << 60))).collect(), + _genesis_phantom_data: Default::default(), }), session: Some(SessionConfig { validators: initial_authorities.iter().cloned().map(Into::into).collect(), session_length: 10, + _genesis_phantom_data: Default::default(), }), staking: Some(StakingConfig { current_era: 0, @@ -142,17 +162,21 @@ fn testnet_genesis(initial_authorities: Vec) -> GenesisConfig { validator_count: 2, sessions_per_era: 5, bonding_duration: 2 * 60 * 12, - offline_slash: 0, - session_reward: 0, + offline_slash: Perbill::zero(), + session_reward: Perbill::zero(), + current_offline_slash: 0, + current_session_reward: 0, offline_slash_grace: 0, + _genesis_phantom_data: Default::default(), }), democracy: Some(DemocracyConfig { launch_period: 9, voting_period: 18, minimum_deposit: 10, + _genesis_phantom_data: Default::default(), }), - council: Some(CouncilConfig { - active_council: endowed_accounts.iter().filter(|a| initial_authorities.iter().find(|&b| a.0 == b.0).is_none()).map(|a| (a.clone(), 1000000)).collect(), + council_seats: Some(CouncilSeatsConfig { + active_council: endowed_accounts.iter().filter(|a| initial_authorities.iter().find(|&b| a[..] == b.0).is_none()).map(|a| (a.clone(), 1000000)).collect(), candidacy_bond: 10, voter_bond: 2, present_slash_per_voter: 1, @@ -162,13 +186,17 @@ fn testnet_genesis(initial_authorities: Vec) -> GenesisConfig { term_duration: 1000000, desired_seats: (endowed_accounts.len() - initial_authorities.len()) as u32, inactive_grace_period: 1, - + _genesis_phantom_data: Default::default(), + }), + council_voting: Some(CouncilVotingConfig { cooloff_period: 75, voting_period: 20, + _genesis_phantom_data: Default::default(), }), parachains: Some(Default::default()), timestamp: Some(TimestampConfig { period: 5, // 5 second block time. + _genesis_phantom_data: Default::default(), }), treasury: Some(Default::default()), } @@ -181,8 +209,17 @@ fn development_config_genesis() -> GenesisConfig { } /// Development config (single validator Alice) -pub fn development_config() -> ChainSpec { - ChainSpec::from_genesis("Development", "development", development_config_genesis, vec![], None) +pub fn development_config() -> ChainSpec { + ChainSpec::from_genesis( + "Development", + "development", + development_config_genesis, + vec![], + None, + Some(DEFAULT_PROTOCOL_ID), + None, + None, + ) } fn local_testnet_genesis() -> GenesisConfig { @@ -193,6 +230,15 @@ fn local_testnet_genesis() -> GenesisConfig { } /// Local testnet config (multivalidator Alice + Bob) -pub fn local_testnet_config() -> ChainSpec { - ChainSpec::from_genesis("Local Testnet", "local_testnet", local_testnet_genesis, vec![], None) +pub fn local_testnet_config() -> ChainSpec { + ChainSpec::from_genesis( + "Local Testnet", + "local_testnet", + local_testnet_genesis, + vec![], + None, + Some(DEFAULT_PROTOCOL_ID), + None, + None, + ) } diff --git a/polkadot/service/src/lib.rs b/polkadot/service/src/lib.rs index 0e4569cf08..d82d26ada7 100644 --- a/polkadot/service/src/lib.rs +++ b/polkadot/service/src/lib.rs @@ -22,14 +22,16 @@ extern crate polkadot_availability_store as av_store; extern crate polkadot_primitives; extern crate polkadot_runtime; extern crate polkadot_executor; -extern crate polkadot_api; -extern crate polkadot_consensus as consensus; -extern crate polkadot_transaction_pool as transaction_pool; extern crate polkadot_network; +extern crate sr_primitives; extern crate substrate_primitives as primitives; +#[macro_use] extern crate substrate_network as network; extern crate substrate_client as client; +#[macro_use] extern crate substrate_service as service; +extern crate substrate_consensus_aura as consensus; +extern crate substrate_transaction_pool as transaction_pool; extern crate tokio; #[macro_use] @@ -40,51 +42,27 @@ extern crate hex_literal; pub mod chain_spec; use std::sync::Arc; -use tokio::prelude::{Stream, Future}; -use transaction_pool::TransactionPool; -use polkadot_api::{PolkadotApi, light::RemotePolkadotApiWrapper}; -use polkadot_primitives::{parachain, AccountId, Block, BlockId, Hash}; -use polkadot_runtime::GenesisConfig; -use client::{Client, BlockchainEvents}; -use polkadot_network::{PolkadotProtocol, consensus::ConsensusNetwork}; +use polkadot_primitives::{parachain, AccountId, Block}; +use polkadot_runtime::{GenesisConfig, ClientWithApi}; use tokio::runtime::TaskExecutor; -use service::FactoryFullConfiguration; -use primitives::{Blake2Hasher, RlpCodec}; +use service::{FactoryFullConfiguration, FullBackend, LightBackend, FullExecutor, LightExecutor}; +use transaction_pool::txpool::{Pool as TransactionPool}; +use consensus::{import_queue, start_aura, Config as AuraConfig, AuraImportQueue, NothingExtra}; -pub use service::{Roles, PruningMode, ExtrinsicPoolOptions, - ErrorKind, Error, ComponentBlock, LightComponents, FullComponents}; -pub use client::ExecutionStrategy; +pub use service::{ + Roles, PruningMode, TransactionPoolOptions, ComponentClient, + ErrorKind, Error, ComponentBlock, LightComponents, FullComponents, + FullClient, LightClient, Components, Service, ServiceFactory +}; +pub use service::config::full_version_from_strs; +pub use client::{backend::Backend, runtime_api::Core as CoreApi, ExecutionStrategy}; +pub use polkadot_network::{PolkadotProtocol, NetworkService}; +pub use polkadot_primitives::parachain::ParachainHost; +pub use primitives::{Blake2Hasher}; +pub use sr_primitives::traits::ProvideRuntimeApi; +pub use chain_spec::ChainSpec; -/// Specialised polkadot `ChainSpec`. -pub type ChainSpec = service::ChainSpec; -/// Polkadot client type for specialised `Components`. -pub type ComponentClient = Client<::Backend, ::Executor, Block>; -pub type NetworkService = network::Service::NetworkProtocol, Hash>; - -/// A collection of type to generalise Polkadot specific components over full / light client. -pub trait Components: service::Components { - /// Polkadot API. - type Api: 'static + PolkadotApi + Send + Sync; - /// Client backend. - type Backend: 'static + client::backend::Backend; - /// Client executor. - type Executor: 'static + client::CallExecutor + Send + Sync; -} - -impl Components for service::LightComponents { - type Api = RemotePolkadotApiWrapper< - as service::Components>::Backend, - as service::Components>::Executor, - >; - type Executor = service::LightExecutor; - type Backend = service::LightBackend; -} - -impl Components for service::FullComponents { - type Api = service::FullClient; - type Executor = service::FullExecutor; - type Backend = service::FullBackend; -} +const AURA_SLOT_DURATION: u64 = 6; /// All configuration for the polkadot node. pub type Configuration = FactoryFullConfiguration; @@ -97,169 +75,123 @@ pub struct CustomConfiguration { pub collating_for: Option<(AccountId, parachain::Id)>, } -/// Polkadot config for the substrate service. -pub struct Factory; +/// Chain API type for the transaction pool. +pub type TxChainApi = transaction_pool::ChainApi< + client::Client, + Block, +>; -impl service::ServiceFactory for Factory { - type Block = Block; - type ExtrinsicHash = Hash; - type NetworkProtocol = PolkadotProtocol; - type RuntimeDispatch = polkadot_executor::Executor; - type FullExtrinsicPoolApi = transaction_pool::ChainApi>; - type LightExtrinsicPoolApi = transaction_pool::ChainApi< - RemotePolkadotApiWrapper, service::LightExecutor> - >; - type Genesis = GenesisConfig; - type Configuration = CustomConfiguration; +/// Provides polkadot types. +pub trait PolkadotService { + /// The client's backend type. + type Backend: 'static + client::backend::Backend; + /// The client's call executor type. + type Executor: 'static + client::CallExecutor + Send + Sync + Clone; - const NETWORK_PROTOCOL_ID: network::ProtocolId = ::polkadot_network::DOT_PROTOCOL_ID; + /// Get a handle to the client. + fn client(&self) -> Arc>; - fn build_full_extrinsic_pool(config: ExtrinsicPoolOptions, client: Arc>) - -> Result>, Error> - { - let api = client.clone(); - Ok(TransactionPool::new(config, transaction_pool::ChainApi::new(api))) + /// Get a handle to the network. + fn network(&self) -> Arc; + + /// Get a handle to the transaction pool. + fn transaction_pool(&self) -> Arc>>; +} + +impl PolkadotService for Service> { + type Backend = as Components>::Backend; + type Executor = as Components>::Executor; + + fn client(&self) -> Arc> { + Service::client(self) + } + fn network(&self) -> Arc { + Service::network(self) } - fn build_light_extrinsic_pool(config: ExtrinsicPoolOptions, client: Arc>) - -> Result, service::LightExecutor>>, Error> - { - let api = Arc::new(RemotePolkadotApiWrapper(client.clone())); - Ok(TransactionPool::new(config, transaction_pool::ChainApi::new(api))) - } - - fn build_network_protocol(config: &Configuration) - -> Result - { - if let Some((_, ref para_id)) = config.custom.collating_for { - info!("Starting network in Collator mode for parachain {:?}", para_id); - } - Ok(PolkadotProtocol::new(config.custom.collating_for)) + fn transaction_pool(&self) -> Arc>> { + Service::transaction_pool(self) } } -/// Polkadot service. -pub struct Service { - inner: service::Service, - client: Arc>, - network: Arc, - api: Arc<::Api>, - _consensus: Option, -} +impl PolkadotService for Service> { + type Backend = as Components>::Backend; + type Executor = as Components>::Executor; -impl Service { - pub fn client(&self) -> Arc> { - self.client.clone() + fn client(&self) -> Arc> { + Service::client(self) + } + fn network(&self) -> Arc { + Service::network(self) } - pub fn network(&self) -> Arc { - self.network.clone() - } - - pub fn api(&self) -> Arc<::Api> { - self.api.clone() + fn transaction_pool(&self) -> Arc>> { + Service::transaction_pool(self) } } -/// Creates light client and register protocol with the network service -pub fn new_light(config: Configuration, executor: TaskExecutor) - -> Result>, Error> -{ - let service = service::Service::>::new(config, executor.clone())?; - let api = Arc::new(RemotePolkadotApiWrapper(service.client())); - let pool = service.extrinsic_pool(); - let events = service.client().import_notification_stream() - .for_each(move |notification| { - // re-verify all transactions without the sender. - pool.retry_verification(&BlockId::hash(notification.hash), None) - .map_err(|e| warn!("Error re-verifying transactions: {:?}", e))?; - Ok(()) - }) - .then(|_| Ok(())); - executor.spawn(events); - Ok(Service { - client: service.client(), - network: service.network(), - api: api, - inner: service, - _consensus: None, - }) -} +construct_service_factory! { + struct Factory { + Block = Block, + RuntimeApi = ClientWithApi, + NetworkProtocol = PolkadotProtocol { |config: &Configuration| Ok(PolkadotProtocol::new(config.custom.collating_for)) }, + RuntimeDispatch = polkadot_executor::Executor, + FullTransactionPoolApi = TxChainApi, FullExecutor> + { |config, client| Ok(TransactionPool::new(config, TxChainApi::new(client))) }, + LightTransactionPoolApi = TxChainApi, LightExecutor> + { |config, client| Ok(TransactionPool::new(config, TxChainApi::new(client))) }, + Genesis = GenesisConfig, + Configuration = CustomConfiguration, + FullService = FullComponents + { |config: FactoryFullConfiguration, executor: TaskExecutor| { + let is_auth = config.roles == Roles::AUTHORITY; + FullComponents::::new(config, executor.clone()).map(move |service|{ + if is_auth { + if let Ok(Some(Ok(key))) = service.keystore().contents() + .map(|keys| keys.get(0).map(|k| service.keystore().load(k, ""))) + { + info!("Using authority key {}", key.public()); + let task = start_aura( + AuraConfig { + local_key: Some(Arc::new(key)), + slot_duration: AURA_SLOT_DURATION, + }, + service.client(), + service.proposer(), + service.network(), + ); -/// Creates full client and register protocol with the network service -pub fn new_full(config: Configuration, executor: TaskExecutor) - -> Result>, Error> -{ - // open availability store. - let av_store = { - use std::path::PathBuf; + executor.spawn(task); + } + } - let mut path = PathBuf::from(config.database_path.clone()); - path.push("availability"); - - ::av_store::Store::new(::av_store::Config { - cache_size: None, - path, - })? - }; - - let is_validator = (config.roles & Roles::AUTHORITY) == Roles::AUTHORITY; - let service = service::Service::>::new(config, executor.clone())?; - let pool = service.extrinsic_pool(); - let events = service.client().import_notification_stream() - .for_each(move |notification| { - // re-verify all transactions without the sender. - pool.retry_verification(&BlockId::hash(notification.hash), None) - .map_err(|e| warn!("Error re-verifying transactions: {:?}", e))?; - Ok(()) - }) - .then(|_| Ok(())); - executor.spawn(events); - // Spin consensus service if configured - let consensus = if is_validator { - // Load the first available key - let key = service.keystore().load(&service.keystore().contents()?[0], "")?; - info!("Using authority key {}", key.public()); - - let client = service.client(); - - let consensus_net = ConsensusNetwork::new(service.network(), client.clone()); - Some(consensus::Service::new( - client.clone(), - client.clone(), - consensus_net, - service.extrinsic_pool(), - executor, - ::std::time::Duration::from_secs(4), // TODO: dynamic - key, - av_store.clone(), - )) - } else { - None - }; - - service.network().with_spec(|spec, _| spec.register_availability_store(av_store)); - - Ok(Service { - client: service.client(), - network: service.network(), - api: service.client(), - inner: service, - _consensus: consensus, - }) -} - -/// Creates bare client without any networking. -pub fn new_client(config: Configuration) --> Result>>, Error> -{ - service::new_client::(config) -} - -impl ::std::ops::Deref for Service { - type Target = service::Service; - - fn deref(&self) -> &Self::Target { - &self.inner + service + }) + } + }, + AuthoritySetup = { |service, _, _| Ok(service) }, + LightService = LightComponents + { |config, executor| >::new(config, executor) }, + FullImportQueue = AuraImportQueue, NothingExtra> + { |config, client| Ok(import_queue( + AuraConfig { + local_key: None, + slot_duration: 5 + }, + client, + NothingExtra, + )) + }, + LightImportQueue = AuraImportQueue, NothingExtra> + { |config, client| Ok(import_queue( + AuraConfig { + local_key: None, + slot_duration: 5 + }, + client, + NothingExtra, + )) + }, } } + diff --git a/polkadot/src/main.rs b/polkadot/src/main.rs index d3e951596e..ee86a93aba 100644 --- a/polkadot/src/main.rs +++ b/polkadot/src/main.rs @@ -25,7 +25,7 @@ extern crate futures; #[macro_use] extern crate error_chain; -use cli::{ServiceComponents, Service, VersionInfo}; +use cli::{PolkadotService, VersionInfo}; use futures::sync::oneshot; use futures::{future, Future}; @@ -57,7 +57,7 @@ impl cli::IntoExit for Worker { impl cli::Worker for Worker { type Work = ::Exit; - fn work(self, _service: &Service) -> Self::Work { + fn work(self, _service: &S) -> Self::Work { use cli::IntoExit; self.into_exit() } diff --git a/polkadot/statement-table/Cargo.toml b/polkadot/statement-table/Cargo.toml index eda77e1779..5616ca7af4 100644 --- a/polkadot/statement-table/Cargo.toml +++ b/polkadot/statement-table/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["Parity Technologies "] [dependencies] -parity-codec = { git = "https://github.com/paritytech/substrate" } -parity-codec-derive = { git = "https://github.com/paritytech/substrate" } +parity-codec = "2.1" +parity-codec-derive = "2.1" substrate-primitives = { git = "https://github.com/paritytech/substrate" } polkadot-primitives = { path = "../primitives" } diff --git a/polkadot/test-parachains/adder/Cargo.toml b/polkadot/test-parachains/adder/Cargo.toml index faa07b81e0..255f4303cb 100644 --- a/polkadot/test-parachains/adder/Cargo.toml +++ b/polkadot/test-parachains/adder/Cargo.toml @@ -6,5 +6,6 @@ description = "Test parachain which adds to a number as its state transition" [dependencies] polkadot-parachain = { path = "../../parachain/", default-features = false } -parity-codec-derive = { git = "https://github.com/paritytech/substrate", default-features = false } +parity-codec = { version = "2.1", default-features = false } +parity-codec-derive = { version = "2.1", default-features = false } tiny-keccak = "1.4" diff --git a/polkadot/test-parachains/adder/src/lib.rs b/polkadot/test-parachains/adder/src/lib.rs index ff237fb9c3..bc2e2ca029 100644 --- a/polkadot/test-parachains/adder/src/lib.rs +++ b/polkadot/test-parachains/adder/src/lib.rs @@ -20,11 +20,11 @@ #[macro_use] extern crate parity_codec_derive; - +extern crate parity_codec; extern crate polkadot_parachain as parachain; extern crate tiny_keccak; -use parachain::codec::{self, Encode}; +use parity_codec::Encode; /// Head data for this parachain. #[derive(Default, Clone, Hash, Eq, PartialEq, Encode, Decode)] diff --git a/polkadot/transaction-pool/Cargo.toml b/polkadot/transaction-pool/Cargo.toml deleted file mode 100644 index bb4685ee4f..0000000000 --- a/polkadot/transaction-pool/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "polkadot-transaction-pool" -version = "0.1.0" -authors = ["Parity Technologies "] - -[dependencies] -log = "0.3.0" -error-chain = "0.12" -parking_lot = "0.4" -polkadot-api = { path = "../api" } -polkadot-primitives = { path = "../primitives" } -polkadot-runtime = { path = "../runtime" } -substrate-client = { git = "https://github.com/paritytech/substrate" } -parity-codec = { git = "https://github.com/paritytech/substrate" } -substrate-keyring = { git = "https://github.com/paritytech/substrate" } -substrate-extrinsic-pool = { git = "https://github.com/paritytech/substrate" } -substrate-primitives = { git = "https://github.com/paritytech/substrate" } -sr-primitives = { git = "https://github.com/paritytech/substrate" } diff --git a/polkadot/transaction-pool/README.adoc b/polkadot/transaction-pool/README.adoc deleted file mode 100644 index 868a3434b3..0000000000 --- a/polkadot/transaction-pool/README.adoc +++ /dev/null @@ -1,5 +0,0 @@ - -= Polkadot Transactin pool - -placeholder -//TODO Write content :) diff --git a/polkadot/transaction-pool/src/error.rs b/polkadot/transaction-pool/src/error.rs deleted file mode 100644 index 66876bc610..0000000000 --- a/polkadot/transaction-pool/src/error.rs +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2018 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 . - -use extrinsic_pool; -use polkadot_api; -use primitives::Hash; -use runtime::{Address, UncheckedExtrinsic}; - -error_chain! { - links { - Pool(extrinsic_pool::Error, extrinsic_pool::ErrorKind); - Api(polkadot_api::Error, polkadot_api::ErrorKind); - } - errors { - /// Unexpected extrinsic format submitted - InvalidExtrinsicFormat { - description("Invalid extrinsic format."), - display("Invalid extrinsic format."), - } - /// Attempted to queue an inherent transaction. - IsInherent(xt: UncheckedExtrinsic) { - description("Inherent transactions cannot be queued."), - display("Inherent transactions cannot be queued."), - } - /// Attempted to queue a transaction with bad signature. - BadSignature(e: &'static str) { - description("Transaction had bad signature."), - display("Transaction had bad signature: {}", e), - } - /// Attempted to queue a transaction that is already in the pool. - AlreadyImported(hash: Hash) { - description("Transaction is already in the pool."), - display("Transaction {:?} is already in the pool.", hash), - } - /// Import error. - Import(err: Box<::std::error::Error + Send>) { - description("Error importing transaction"), - display("Error importing transaction: {}", err.description()), - } - /// Runtime failure. - UnrecognisedAddress(who: Address) { - description("Unrecognised address in extrinsic"), - display("Unrecognised address in extrinsic: {}", who), - } - /// Extrinsic too large - TooLarge(got: usize, max: usize) { - description("Extrinsic too large"), - display("Extrinsic is too large ({} > {})", got, max), - } - } -} - -impl extrinsic_pool::IntoPoolError for Error { - fn into_pool_error(self) -> ::std::result::Result { - match self { - Error(ErrorKind::Pool(e), c) => Ok(extrinsic_pool::Error(e, c)), - e => Err(e), - } - } -} diff --git a/polkadot/transaction-pool/src/lib.rs b/polkadot/transaction-pool/src/lib.rs deleted file mode 100644 index acb0d10f1e..0000000000 --- a/polkadot/transaction-pool/src/lib.rs +++ /dev/null @@ -1,579 +0,0 @@ -// Copyright 2018 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 . - -extern crate substrate_client as client; -extern crate parity_codec as codec; -extern crate substrate_extrinsic_pool as extrinsic_pool; -extern crate substrate_primitives; -extern crate sr_primitives; -extern crate polkadot_runtime as runtime; -extern crate polkadot_primitives as primitives; -extern crate polkadot_api; -extern crate parking_lot; - -#[cfg(test)] -extern crate substrate_keyring; - -#[macro_use] -extern crate error_chain; - -#[macro_use] -extern crate log; - -mod error; - -use std::{ - cmp::Ordering, - collections::HashMap, - sync::Arc, -}; - -use codec::{Decode, Encode}; -use extrinsic_pool::{Readiness, scoring::{Change, Choice}, VerifiedFor, ExtrinsicFor}; -use polkadot_api::PolkadotApi; -use primitives::{AccountId, BlockId, Block, Hash, Index}; -use runtime::{Address, UncheckedExtrinsic}; -use sr_primitives::traits::{Bounded, Checkable, Hash as HashT, BlakeTwo256}; - -pub use extrinsic_pool::{Options, Status, LightStatus, VerifiedTransaction as VerifiedTransactionOps}; -pub use error::{Error, ErrorKind, Result}; - -/// Maximal size of a single encoded extrinsic. -/// -/// See also polkadot-consensus::MAX_TRANSACTIONS_SIZE -const MAX_TRANSACTION_SIZE: usize = 4 * 1024 * 1024; - -/// Type alias for convenience. -pub type CheckedExtrinsic = std::result::Result>>::Checked; - -/// Type alias for polkadot transaction pool. -pub type TransactionPool = extrinsic_pool::Pool>; - -/// A verified transaction which should be includable and non-inherent. -#[derive(Clone, Debug)] -pub struct VerifiedTransaction { - inner: Option, - sender: Option, - hash: Hash, - encoded_size: usize, - index: Index, -} - -impl VerifiedTransaction { - /// Consume the verified transaction, yielding the checked counterpart. - pub fn into_inner(self) -> Option { - self.inner - } - - /// Get the 256-bit hash of this transaction. - pub fn hash(&self) -> &Hash { - &self.hash - } - - /// Get the account ID of the sender of this transaction. - pub fn sender(&self) -> Option { - self.sender - } - - /// Get the account ID of the sender of this transaction. - pub fn index(&self) -> Index { - self.index - } - - /// Get encoded size of the transaction. - pub fn encoded_size(&self) -> usize { - self.encoded_size - } - - /// Returns `true` if the transaction is not yet fully verified. - pub fn is_fully_verified(&self) -> bool { - self.inner.is_some() - } -} - -impl extrinsic_pool::VerifiedTransaction for VerifiedTransaction { - type Hash = Hash; - type Sender = Option; - - fn hash(&self) -> &Self::Hash { - &self.hash - } - - fn sender(&self) -> &Self::Sender { - &self.sender - } - - fn mem_usage(&self) -> usize { - self.encoded_size // TODO - } -} - -/// The polkadot transaction pool logic. -pub struct ChainApi { - api: Arc, -} - -impl ChainApi where - A: PolkadotApi, -{ - const NO_ACCOUNT: &'static str = "Account not found."; - /// Create a new instance. - pub fn new(api: Arc) -> Self { - ChainApi { - api, - } - } - - fn lookup(&self, at: &BlockId, address: Address) -> ::std::result::Result { - // TODO [ToDr] Consider introducing a cache for this. - match self.api.lookup(at, address.clone()) { - Ok(Some(address)) => Ok(address), - Ok(None) => Err(Self::NO_ACCOUNT.into()), - Err(e) => { - error!("Error looking up address: {:?}: {:?}", address, e); - Err("API error.") - }, - } - } -} - -impl extrinsic_pool::ChainApi for ChainApi where - A: PolkadotApi + Send + Sync, -{ - type Block = Block; - type Hash = Hash; - type Sender = Option; - type VEx = VerifiedTransaction; - type Ready = HashMap; - type Error = Error; - type Score = u64; - type Event = (); - - fn verify_transaction(&self, at: &BlockId, xt: &ExtrinsicFor) -> Result { - let encoded = xt.encode(); - let uxt = UncheckedExtrinsic::decode(&mut encoded.as_slice()).ok_or_else(|| ErrorKind::InvalidExtrinsicFormat)?; - if !uxt.is_signed() { - bail!(ErrorKind::IsInherent(uxt)) - } - - let (encoded_size, hash) = (encoded.len(), BlakeTwo256::hash(&encoded)); - if encoded_size > MAX_TRANSACTION_SIZE { - bail!(ErrorKind::TooLarge(encoded_size, MAX_TRANSACTION_SIZE)); - } - - debug!(target: "transaction-pool", "Transaction submitted: {}", ::substrate_primitives::hexdisplay::HexDisplay::from(&encoded)); - let inner = match uxt.clone().check_with(|a| self.lookup(at, a)) { - Ok(xt) => Some(xt), - // keep the transaction around in the future pool and attempt to promote it later. - Err(Self::NO_ACCOUNT) => None, - Err(e) => bail!(e), - }; - let sender = match inner.as_ref() { - Some(cxt) => match cxt.signed { - Some(ref sender) => Some(sender.clone()), - None => bail!(ErrorKind::IsInherent(uxt)) - }, - None => None, - }; - - if encoded_size < 1024 { - debug!(target: "transaction-pool", "Transaction verified: {} => {:?}", hash, uxt); - } else { - debug!(target: "transaction-pool", "Transaction verified: {} ({} bytes is too large to display)", hash, encoded_size); - } - - Ok(VerifiedTransaction { - index: uxt.index, - inner, - sender, - hash, - encoded_size, - }) - } - - fn ready(&self) -> Self::Ready { - HashMap::default() - } - - fn is_ready(&self, at: &BlockId, known_nonces: &mut Self::Ready, xt: &VerifiedFor) -> Readiness { - let sender = match xt.verified.sender() { - Some(sender) => sender, - None => return Readiness::Future - }; - - trace!(target: "transaction-pool", "Checking readiness of {} (from {})", xt.verified.hash, Hash::from(sender)); - - // TODO: find a way to handle index error properly -- will need changes to - // transaction-pool trait. - let api = &self.api; - let next_index = known_nonces.entry(sender) - .or_insert_with(|| api.index(at, sender).ok().unwrap_or_else(Bounded::max_value)); - - trace!(target: "transaction-pool", "Next index for sender is {}; xt index is {}", next_index, xt.verified.index); - - let result = match xt.verified.index.cmp(&next_index) { - // TODO: this won't work perfectly since accounts can now be killed, returning the nonce - // to zero. - // We should detect if the index was reset and mark all transactions as `Stale` for cull to work correctly. - // Otherwise those transactions will keep occupying the queue. - // Perhaps we could mark as stale if `index - state_index` > X? - Ordering::Greater => Readiness::Future, - Ordering::Equal => Readiness::Ready, - // TODO [ToDr] Should mark transactions referencing too old blockhash as `Stale` as well. - Ordering::Less => Readiness::Stale, - }; - - // remember to increment `next_index` - *next_index = next_index.saturating_add(1); - - result - } - - fn compare(old: &VerifiedFor, other: &VerifiedFor) -> Ordering { - old.verified.index().cmp(&other.verified.index()) - } - - fn choose(old: &VerifiedFor, new: &VerifiedFor) -> Choice { - if old.verified.is_fully_verified() { - assert!(new.verified.is_fully_verified(), "Scoring::choose called with transactions from different senders"); - if old.verified.index() == new.verified.index() { - return Choice::ReplaceOld; - } - } - - // This will keep both transactions, even though they have the same indices. - // It's fine for not fully verified transactions, we might also allow it for - // verified transactions but it would mean that only one of the two is actually valid - // (most likely the first to be included in the block). - Choice::InsertNew - } - - fn update_scores( - xts: &[extrinsic_pool::Transaction>], - scores: &mut [Self::Score], - _change: Change<()> - ) { - for i in 0..xts.len() { - if !xts[i].verified.is_fully_verified() { - scores[i] = 0; - } else { - // all the same score since there are no fees. - // TODO: prioritize things like misbehavior or fishermen reports - scores[i] = 1; - } - } - } - - fn should_replace(old: &VerifiedFor, _new: &VerifiedFor) -> Choice { - if old.verified.is_fully_verified() { - // Don't allow new transactions if we are reaching the limit. - Choice::RejectNew - } else { - // Always replace not fully verified transactions. - Choice::ReplaceOld - } - } -} - -#[cfg(test)] -mod tests { - use std::sync::{atomic::{self, AtomicBool}, Arc}; - use substrate_keyring::Keyring::{self, *}; - use codec::{Decode, Encode}; - use polkadot_api::{PolkadotApi, BlockBuilder, Result}; - use primitives::{AccountId, AccountIndex, Block, BlockId, Hash, Index, SessionKey, - UncheckedExtrinsic as FutureProofUncheckedExtrinsic}; - use runtime::{RawAddress, Call, TimestampCall, UncheckedExtrinsic}; - use primitives::parachain::{DutyRoster, Id as ParaId}; - use sr_primitives::generic; - use extrinsic_pool::Pool; - use super::ChainApi; - - struct TestBlockBuilder; - impl BlockBuilder for TestBlockBuilder { - fn push_extrinsic(&mut self, _extrinsic: FutureProofUncheckedExtrinsic) -> Result<()> { unimplemented!() } - fn bake(self) -> Result { unimplemented!() } - } - - fn number_of(at: &BlockId) -> u32 { - match at { - generic::BlockId::Number(n) => *n as u32, - _ => 0, - } - } - - #[derive(Default, Clone)] - struct TestPolkadotApi { - no_lookup: Arc, - } - - impl TestPolkadotApi { - fn without_lookup() -> Self { - TestPolkadotApi { - no_lookup: Arc::new(AtomicBool::new(true)), - } - } - - pub fn enable_lookup(&self) { - self.no_lookup.store(false, atomic::Ordering::SeqCst); - } - } - - impl PolkadotApi for TestPolkadotApi { - type BlockBuilder = TestBlockBuilder; - - fn session_keys(&self, _at: &BlockId) -> Result> { unimplemented!() } - fn validators(&self, _at: &BlockId) -> Result> { unimplemented!() } - fn random_seed(&self, _at: &BlockId) -> Result { unimplemented!() } - fn duty_roster(&self, _at: &BlockId) -> Result { unimplemented!() } - fn timestamp(&self, _at: &BlockId) -> Result { unimplemented!() } - fn evaluate_block(&self, _at: &BlockId, _block: Block) -> Result { unimplemented!() } - fn active_parachains(&self, _at: &BlockId) -> Result> { unimplemented!() } - fn parachain_code(&self, _at: &BlockId, _parachain: ParaId) -> Result>> { unimplemented!() } - fn parachain_head(&self, _at: &BlockId, _parachain: ParaId) -> Result>> { unimplemented!() } - fn build_block(&self, _at: &BlockId, _inherent: ::primitives::InherentData) -> Result { unimplemented!() } - fn inherent_extrinsics(&self, _at: &BlockId, _inherent: ::primitives::InherentData) -> Result> { unimplemented!() } - - fn index(&self, _at: &BlockId, _account: AccountId) -> Result { - Ok((_account[0] as u32) + number_of(_at)) - } - fn lookup(&self, _at: &BlockId, _address: RawAddress) -> Result> { - match _address { - RawAddress::Id(i) => Ok(Some(i)), - RawAddress::Index(_) if self.no_lookup.load(atomic::Ordering::SeqCst) => Ok(None), - RawAddress::Index(i) => Ok(match (i < 8, i + (number_of(_at) as u64) % 8) { - (false, _) => None, - (_, 0) => Some(Alice.to_raw_public().into()), - (_, 1) => Some(Bob.to_raw_public().into()), - (_, 2) => Some(Charlie.to_raw_public().into()), - (_, 3) => Some(Dave.to_raw_public().into()), - (_, 4) => Some(Eve.to_raw_public().into()), - (_, 5) => Some(Ferdie.to_raw_public().into()), - (_, 6) => Some(One.to_raw_public().into()), - (_, 7) => Some(Two.to_raw_public().into()), - _ => None, - }), - } - } - } - - fn uxt(who: Keyring, nonce: Index, use_id: bool) -> FutureProofUncheckedExtrinsic { - let sxt = (nonce, Call::Timestamp(TimestampCall::set(0))); - let sig = sxt.using_encoded(|e| who.sign(e)); - let signed = who.to_raw_public().into(); - let sender = if use_id { RawAddress::Id(signed) } else { RawAddress::Index( - match who { - Alice => 0, - Bob => 1, - Charlie => 2, - Dave => 3, - Eve => 4, - Ferdie => 5, - One => 6, - Two => 7, - } - )}; - UncheckedExtrinsic::new_signed(sxt.0, sxt.1, sender, sig.into()) - .using_encoded(|e| FutureProofUncheckedExtrinsic::decode(&mut &e[..])) - .unwrap() - } - - fn pool(api: &TestPolkadotApi) -> Pool> { - Pool::new(Default::default(), ChainApi { api: Arc::new(api.clone()) }) - } - - #[test] - fn id_submission_should_work() { - let api = TestPolkadotApi::default(); - let pool = pool(&api); - pool.submit_one(&BlockId::number(0), uxt(Alice, 209, true)).unwrap(); - - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![(Some(Alice.to_raw_public().into()), 209)]); - } - - #[test] - fn index_submission_should_work() { - let api = TestPolkadotApi::default(); - let pool = pool(&api); - pool.submit_one(&BlockId::number(0), uxt(Alice, 209, false)).unwrap(); - - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![(Some(Alice.to_raw_public().into()), 209)]); - } - - #[test] - fn multiple_id_submission_should_work() { - let api = TestPolkadotApi::default(); - let pool = pool(&api); - pool.submit_one(&BlockId::number(0), uxt(Alice, 209, true)).unwrap(); - pool.submit_one(&BlockId::number(0), uxt(Alice, 210, true)).unwrap(); - - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![(Some(Alice.to_raw_public().into()), 209), (Some(Alice.to_raw_public().into()), 210)]); - } - - #[test] - fn multiple_index_submission_should_work() { - let api = TestPolkadotApi::default(); - let pool = pool(&api); - pool.submit_one(&BlockId::number(0), uxt(Alice, 209, false)).unwrap(); - pool.submit_one(&BlockId::number(0), uxt(Alice, 210, false)).unwrap(); - - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![(Some(Alice.to_raw_public().into()), 209), (Some(Alice.to_raw_public().into()), 210)]); - } - - #[test] - fn id_based_early_nonce_should_be_culled() { - let api = TestPolkadotApi::default(); - let pool = pool(&api); - pool.submit_one(&BlockId::number(0), uxt(Alice, 208, true)).unwrap(); - - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![]); - } - - #[test] - fn index_based_early_nonce_should_be_culled() { - let api = TestPolkadotApi::default(); - let pool = pool(&api); - pool.submit_one(&BlockId::number(0), uxt(Alice, 208, false)).unwrap(); - - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![]); - } - - #[test] - fn id_based_late_nonce_should_be_queued() { - let api = TestPolkadotApi::default(); - let pool = pool(&api); - - pool.submit_one(&BlockId::number(0), uxt(Alice, 210, true)).unwrap(); - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![]); - - pool.submit_one(&BlockId::number(0), uxt(Alice, 209, true)).unwrap(); - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![(Some(Alice.to_raw_public().into()), 209), (Some(Alice.to_raw_public().into()), 210)]); - } - - #[test] - fn index_based_late_nonce_should_be_queued() { - let api = TestPolkadotApi::default(); - let pool = pool(&api); - - pool.submit_one(&BlockId::number(0), uxt(Alice, 210, false)).unwrap(); - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![]); - - pool.submit_one(&BlockId::number(0), uxt(Alice, 209, false)).unwrap(); - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![(Some(Alice.to_raw_public().into()), 209), (Some(Alice.to_raw_public().into()), 210)]); - } - - #[test] - fn index_then_id_submission_should_make_progress() { - let api = TestPolkadotApi::without_lookup(); - let pool = pool(&api); - pool.submit_one(&BlockId::number(0), uxt(Alice, 209, false)).unwrap(); - pool.submit_one(&BlockId::number(0), uxt(Alice, 210, true)).unwrap(); - - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![]); - - api.enable_lookup(); - pool.retry_verification(&BlockId::number(0), None).unwrap(); - - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![ - (Some(Alice.to_raw_public().into()), 209), - (Some(Alice.to_raw_public().into()), 210) - ]); - } - - #[test] - fn retrying_verification_might_not_change_anything() { - let api = TestPolkadotApi::without_lookup(); - let pool = pool(&api); - pool.submit_one(&BlockId::number(0), uxt(Alice, 209, false)).unwrap(); - pool.submit_one(&BlockId::number(0), uxt(Alice, 210, true)).unwrap(); - - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![]); - - pool.retry_verification(&BlockId::number(1), None).unwrap(); - - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![]); - } - - #[test] - fn id_then_index_submission_should_make_progress() { - let api = TestPolkadotApi::without_lookup(); - let pool = pool(&api); - pool.submit_one(&BlockId::number(0), uxt(Alice, 209, true)).unwrap(); - pool.submit_one(&BlockId::number(0), uxt(Alice, 210, false)).unwrap(); - - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![ - (Some(Alice.to_raw_public().into()), 209) - ]); - - // when - api.enable_lookup(); - pool.retry_verification(&BlockId::number(0), None).unwrap(); - - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(0), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![ - (Some(Alice.to_raw_public().into()), 209), - (Some(Alice.to_raw_public().into()), 210) - ]); - } - - #[test] - fn index_change_should_result_in_second_tx_culled_or_future() { - let api = TestPolkadotApi::default(); - let pool = pool(&api); - let block = BlockId::number(0); - pool.submit_one(&block, uxt(Alice, 209, false)).unwrap(); - let hash = *pool.submit_one(&block, uxt(Alice, 210, false)).unwrap().verified.hash(); - - let pending: Vec<_> = pool.cull_and_get_pending(&block, |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![ - (Some(Alice.to_raw_public().into()), 209), - (Some(Alice.to_raw_public().into()), 210) - ]); - - // first xt is mined, but that has a side-effect of switching index 0 from Alice to Bob. - // second xt now invalid signature, so it fails. - - // there is no way of reporting this back to the queue right now (TODO). this should cause - // the queue to flush all information regarding the sender index/account. - - // after this, a re-evaluation of the second's readiness should result in it being thrown - // out (or maybe placed in future queue). - let err = pool.reverify_transaction(&BlockId::number(1), hash).unwrap_err(); - match *err.kind() { - ::error::ErrorKind::Msg(ref m) if m == "bad signature in extrinsic" => {}, - ref e => assert!(false, "The transaction should be rejected with BadSignature error, got: {:?}", e), - } - - let pending: Vec<_> = pool.cull_and_get_pending(&BlockId::number(1), |p| p.map(|a| (a.verified.sender(), a.verified.index())).collect()).unwrap(); - assert_eq!(pending, vec![]); - - } -}